mirror of
https://github.com/Sarjuuk/aowow.git
synced 2025-11-29 15:58:16 +08:00
Template/Update (Part 7)
* convert item comparison tool
This commit is contained in:
117
endpoints/compare/compare.php
Normal file
117
endpoints/compare/compare.php
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Aowow;
|
||||||
|
|
||||||
|
if (!defined('AOWOW_REVISION'))
|
||||||
|
die('illegal access');
|
||||||
|
|
||||||
|
|
||||||
|
// tabId 1: Tools g_initHeader()
|
||||||
|
class CompareBaseResponse extends TemplateResponse
|
||||||
|
{
|
||||||
|
protected string $template = 'compare';
|
||||||
|
protected string $pageName = 'compare';
|
||||||
|
protected ?int $activeTab = parent::TAB_TOOLS;
|
||||||
|
protected array $breadcrumb = [1, 3];
|
||||||
|
|
||||||
|
protected array $dataLoader = ['weight-presets', 'gems', 'enchants', 'itemsets'];
|
||||||
|
protected array $scripts = array(
|
||||||
|
[SC_JS_FILE, 'js/profile.js'],
|
||||||
|
[SC_JS_FILE, 'js/Draggable.js'],
|
||||||
|
[SC_JS_FILE, 'js/filters.js'],
|
||||||
|
[SC_JS_FILE, 'js/Summary.js'],
|
||||||
|
[SC_JS_FILE, 'js/swfobject.js'],
|
||||||
|
[SC_CSS_FILE, 'css/Summary.css']
|
||||||
|
);
|
||||||
|
protected array $expectedGET = array(
|
||||||
|
'compare' => ['filter' => FILTER_CALLBACK, 'options' => [self::class, 'checkCompareString']]
|
||||||
|
);
|
||||||
|
protected array $expectedCOOKIE = array(
|
||||||
|
'compare_groups' => ['filter' => FILTER_CALLBACK, 'options' => [self::class, 'checkCompareString']]
|
||||||
|
);
|
||||||
|
|
||||||
|
public Summary $summary;
|
||||||
|
public array $cmpItems = [];
|
||||||
|
|
||||||
|
private string $compareString = '';
|
||||||
|
|
||||||
|
public function __construct($pageParam)
|
||||||
|
{
|
||||||
|
parent::__construct($pageParam);
|
||||||
|
|
||||||
|
// prefer GET over COOKIE
|
||||||
|
if ($this->_get['compare'])
|
||||||
|
$this->compareString = $this->_get['compare'];
|
||||||
|
else if ($this->_cookie['compare_groups'])
|
||||||
|
$this->compareString = $this->_cookie['compare_groups'];
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function generate() : void
|
||||||
|
{
|
||||||
|
$this->h1 = Lang::main('compareTool');
|
||||||
|
|
||||||
|
|
||||||
|
array_unshift($this->title, $this->h1);
|
||||||
|
|
||||||
|
|
||||||
|
$this->summary = new Summary(array(
|
||||||
|
'template' => 'compare',
|
||||||
|
'id' => 'compare',
|
||||||
|
'parent' => 'compare-generic'
|
||||||
|
));
|
||||||
|
|
||||||
|
if ($this->compareString)
|
||||||
|
{
|
||||||
|
$items = [];
|
||||||
|
foreach (explode(';', $this->compareString) as $itemsString)
|
||||||
|
{
|
||||||
|
$suGroup = [];
|
||||||
|
foreach (explode(':', $itemsString) as $itemDef)
|
||||||
|
{
|
||||||
|
// [itemId, subItem, permEnch, tempEnch, gem1, gem2, gem3, gem4]
|
||||||
|
$params = array_pad(array_map('intVal', explode('.', $itemDef)), 8, 0);
|
||||||
|
$items[] = $params[0];
|
||||||
|
$suGroup[] = $params;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->summary->addGroup($suGroup);
|
||||||
|
}
|
||||||
|
|
||||||
|
$iList = new ItemList(array(['i.id', $items]));
|
||||||
|
$data = $iList->getListviewData(ITEMINFO_SUBITEMS | ITEMINFO_JSON);
|
||||||
|
|
||||||
|
foreach ($iList->iterate() as $itemId => $__)
|
||||||
|
{
|
||||||
|
if (empty($data[$itemId]))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!empty($data[$itemId]['subitems']))
|
||||||
|
foreach ($data[$itemId]['subitems'] as &$si)
|
||||||
|
{
|
||||||
|
$si['enchantment'] = implode(', ', $si['enchantment']);
|
||||||
|
unset($si['chance']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->cmpItems[$itemId] = [
|
||||||
|
'name_'.Lang::getLocale()->json() => $iList->getField('name', true),
|
||||||
|
'quality' => $iList->getField('quality'),
|
||||||
|
'icon' => $iList->getField('iconString'),
|
||||||
|
'jsonequip' => $data[$itemId]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::generate();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static function checkCompareString(string $val) : string
|
||||||
|
{
|
||||||
|
$val = urldecode($val);
|
||||||
|
if (preg_match('/[^\d\.:;]/', $val))
|
||||||
|
return '';
|
||||||
|
|
||||||
|
return $val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Aowow;
|
|
||||||
|
|
||||||
if (!defined('AOWOW_REVISION'))
|
|
||||||
die('illegal access');
|
|
||||||
|
|
||||||
|
|
||||||
// tabId 1: Tools g_initHeader()
|
|
||||||
class ComparePage extends GenericPage
|
|
||||||
{
|
|
||||||
protected $tpl = 'compare';
|
|
||||||
protected $tabId = 1;
|
|
||||||
protected $path = [1, 3];
|
|
||||||
protected $mode = CACHE_TYPE_NONE;
|
|
||||||
protected $scripts = array(
|
|
||||||
[SC_JS_FILE, 'js/profile.js'],
|
|
||||||
[SC_JS_FILE, 'js/Draggable.js'],
|
|
||||||
[SC_JS_FILE, 'js/filters.js'],
|
|
||||||
[SC_JS_FILE, 'js/Summary.js'],
|
|
||||||
[SC_JS_FILE, 'js/swfobject.js'],
|
|
||||||
[SC_CSS_FILE, 'css/Summary.css']
|
|
||||||
);
|
|
||||||
|
|
||||||
protected $summary = [];
|
|
||||||
protected $cmpItems = [];
|
|
||||||
|
|
||||||
protected $_get = ['compare' => ['filter' => FILTER_CALLBACK, 'options' => 'Aowow\ComparePage::checkCompareString']];
|
|
||||||
protected $_cookie = ['compare_groups' => ['filter' => FILTER_CALLBACK, 'options' => 'Aowow\ComparePage::checkCompareString']];
|
|
||||||
|
|
||||||
private $compareString = '';
|
|
||||||
|
|
||||||
public function __construct($pageCall, $__)
|
|
||||||
{
|
|
||||||
parent::__construct($pageCall, $__);
|
|
||||||
|
|
||||||
// prefer GET over COOKIE
|
|
||||||
if ($this->_get['compare'])
|
|
||||||
$this->compareString = $this->_get['compare'];
|
|
||||||
else if ($this->_cookie['compare_groups'])
|
|
||||||
$this->compareString = $this->_cookie['compare_groups'];
|
|
||||||
|
|
||||||
$this->name = Lang::main('compareTool');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function generateContent()
|
|
||||||
{
|
|
||||||
// add conditional js
|
|
||||||
$this->addScript([SC_JS_FILE, '?data=weight-presets.gems.enchants.itemsets']);
|
|
||||||
|
|
||||||
$this->summary = array(
|
|
||||||
'template' => 'compare',
|
|
||||||
'id' => 'compare',
|
|
||||||
'parent' => 'compare-generic'
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!$this->compareString)
|
|
||||||
return;
|
|
||||||
|
|
||||||
$sets = explode(';', $this->compareString);
|
|
||||||
$items = $outSet = [];
|
|
||||||
foreach ($sets as $set)
|
|
||||||
{
|
|
||||||
$itemString = explode(':', $set);
|
|
||||||
$outString = [];
|
|
||||||
foreach ($itemString as $is)
|
|
||||||
{
|
|
||||||
$params = array_pad(explode('.', $is), 7, 0);
|
|
||||||
$items[] = (int)$params[0];
|
|
||||||
|
|
||||||
$outString[] = $params;
|
|
||||||
}
|
|
||||||
|
|
||||||
$outSet[] = $outString;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->summary['groups'] = $outSet;
|
|
||||||
|
|
||||||
$iList = new ItemList(array(['i.id', $items]));
|
|
||||||
$data = $iList->getListviewData(ITEMINFO_SUBITEMS | ITEMINFO_JSON);
|
|
||||||
|
|
||||||
foreach ($iList->iterate() as $itemId => $__)
|
|
||||||
{
|
|
||||||
if (empty($data[$itemId]))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!empty($data[$itemId]['subitems']))
|
|
||||||
foreach ($data[$itemId]['subitems'] as &$si)
|
|
||||||
{
|
|
||||||
$si['enchantment'] = implode(', ', $si['enchantment']);
|
|
||||||
unset($si['chance']);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->cmpItems[$itemId] = [
|
|
||||||
'name_'.Lang::getLocale()->json() => $iList->getField('name', true),
|
|
||||||
'quality' => $iList->getField('quality'),
|
|
||||||
'icon' => $iList->getField('iconString'),
|
|
||||||
'jsonequip' => $data[$itemId]
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function generateTitle()
|
|
||||||
{
|
|
||||||
array_unshift($this->title, $this->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function generatePath() {}
|
|
||||||
|
|
||||||
protected static function checkCompareString(string $val) : string
|
|
||||||
{
|
|
||||||
$val = urldecode($val);
|
|
||||||
if (preg_match('/[^\d\.:;]/', $val))
|
|
||||||
return '';
|
|
||||||
|
|
||||||
return $val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
<?php namespace Aowow; ?>
|
<?php
|
||||||
|
namespace Aowow\Template;
|
||||||
<?php $this->brick('header'); ?>
|
|
||||||
|
|
||||||
|
$this->brick('header');
|
||||||
|
?>
|
||||||
<div class="main" id="main">
|
<div class="main" id="main">
|
||||||
<div class="main-precontents" id="main-precontents"></div>
|
<div class="main-precontents" id="main-precontents"></div>
|
||||||
<div class="main-contents" id="main-contents">
|
<div class="main-contents" id="main-contents">
|
||||||
@@ -17,10 +18,10 @@
|
|||||||
<script type="text/javascript">//<![CDATA[
|
<script type="text/javascript">//<![CDATA[
|
||||||
<?php
|
<?php
|
||||||
foreach ($this->cmpItems as $iId => $iData):
|
foreach ($this->cmpItems as $iId => $iData):
|
||||||
echo ' g_items.add('.$iId.', '.Util::toJSON($iData).");\n";
|
echo ' g_items.add('.$iId.', '.$this->json($iData).");\n";
|
||||||
endforeach;
|
endforeach;
|
||||||
?>
|
?>
|
||||||
new Summary(<?=Util::toJSON($this->summary); ?>);
|
<?=$this->summary; ?>
|
||||||
//]]></script>
|
//]]></script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user