mirror of
https://github.com/Sarjuuk/aowow.git
synced 2025-11-29 15:58:16 +08:00
removing smarty - part XI
- readded npc/npcs, itemset/itemsets, skill/skills - reduced size of conditions-column
This commit is contained in:
@@ -136,7 +136,8 @@ class ItemsetListFilter extends Filter
|
||||
|
||||
// name [str]
|
||||
if (isset($_v['na']))
|
||||
$parts[] = ['name_loc'.User::$localeId, $_v['na']];
|
||||
if ($_ = $this->modularizeString(['name_loc'.User::$localeId]))
|
||||
$parts[] = $_;
|
||||
|
||||
// quality [enum]
|
||||
if (isset($_v['qu']))
|
||||
|
||||
@@ -38,7 +38,7 @@ class ClassPage extends GenericPage
|
||||
|
||||
protected function generateTitle()
|
||||
{
|
||||
array_unshift($this->title, $this->subject->getField('name', true), Util::ucFirst(Lang::$game['class']));
|
||||
array_unshift($this->title, $this->name, Util::ucFirst(Lang::$game['class']));
|
||||
}
|
||||
|
||||
protected function generateContent()
|
||||
|
||||
@@ -4,278 +4,272 @@ if (!defined('AOWOW_REVISION'))
|
||||
die('illegal access');
|
||||
|
||||
|
||||
require 'includes/community.class.php';
|
||||
|
||||
$_id = intVal($pageParam);
|
||||
$path = [0, 2];
|
||||
|
||||
$cacheKeyPage = implode('_', [CACHETYPE_PAGE, TYPE_ITEMSET, $_id, -1, User::$localeId]);
|
||||
|
||||
if (!$smarty->loadCache($cacheKeyPage, $pageData))
|
||||
// menuId 2: Itemset g_initPath()
|
||||
// tabId 0: Database g_initHeader()
|
||||
class ItemsetPage extends GenericPage
|
||||
{
|
||||
$iSet = new ItemsetList(array(['id', $_id]));
|
||||
if ($iSet->error)
|
||||
$smarty->notFound(Lang::$game['itemset'], $_id);
|
||||
use DetailPage;
|
||||
|
||||
$_ta = $iSet->getField('contentGroup');
|
||||
$_ty = $iSet->getField('type');
|
||||
$_ev = $iSet->getField('holidayId');
|
||||
$_sk = $iSet->getField('skillId');
|
||||
$_cl = $iSet->getField('classMask');
|
||||
$_lvl = $iSet->getField('reqLevel');
|
||||
$_na = $iSet->getField('name', true);
|
||||
$_cnt = count($iSet->getField('pieces'));
|
||||
protected $type = TYPE_ITEMSET;
|
||||
protected $typeId = 0;
|
||||
protected $tpl = 'itemset';
|
||||
protected $path = [0, 2];
|
||||
protected $tabId = 0;
|
||||
protected $mode = CACHETYPE_PAGE;
|
||||
protected $js = array(
|
||||
'swfobject.js',
|
||||
'Summary.js'
|
||||
);
|
||||
|
||||
/***********/
|
||||
/* Infobox */
|
||||
/***********/
|
||||
|
||||
$infobox = [];
|
||||
// unavailable (todo (low): set data)
|
||||
if ($iSet->getField('cuFlags') & CUSTOM_UNAVAILABLE)
|
||||
$infobox[] = Lang::$main['unavailable'];
|
||||
|
||||
// holiday
|
||||
if ($_ev)
|
||||
$infobox[] = Lang::$game['eventShort'].Lang::$main['colon'].'[url=?event='.$_ev.']'.WorldEventList::getName($_ev).'[/url]';
|
||||
|
||||
// itemLevel
|
||||
if ($min = $iSet->getField('minLevel'))
|
||||
public function __construct($__, $id)
|
||||
{
|
||||
$foo = Lang::$game['level'].Lang::$main['colon'].$min;
|
||||
$max = $iSet->getField('maxLevel');
|
||||
parent::__construct();
|
||||
|
||||
if ($min < $max)
|
||||
$foo .= ' - '.$max;
|
||||
$this->typeId = intVal($id);
|
||||
|
||||
$infobox[] = $foo;
|
||||
$this->subject = new ItemsetList(array(['id', $this->typeId]));
|
||||
if ($this->subject->error)
|
||||
$this->notFound(Lang::$game['itemset']);
|
||||
|
||||
$this->name = $this->subject->getField('name', true);
|
||||
$this->extendGlobalData($this->subject->getJSGlobals());
|
||||
}
|
||||
|
||||
// class
|
||||
if ($_cl)
|
||||
protected function generatePath()
|
||||
{
|
||||
$foo = [];
|
||||
for ($i = 0; $i < 11; $i++)
|
||||
if ($_cl & (1 << $i))
|
||||
$foo[] = (!fMod(count($foo) + 1, 3) ? '\n' : null) . '[class='.($i + 1).']';
|
||||
|
||||
$t = count($foo) == 1 ? Lang::$game['class'] : Lang::$game['classes'];
|
||||
$infobox[] = Util::ucFirst($t).Lang::$main['colon'].implode(', ', $foo);
|
||||
}
|
||||
|
||||
// required level
|
||||
if ($_lvl)
|
||||
$infobox[] = sprintf(Lang::$game['reqLevel'], $_lvl);
|
||||
|
||||
// type
|
||||
if ($_ty)
|
||||
$infobox[] = Lang::$game['type'].Lang::$main['colon'].Lang::$itemset['types'][$_ty];
|
||||
|
||||
// tag
|
||||
if ($_ta)
|
||||
$infobox[] = Lang::$itemset['_tag'].Lang::$main['colon'].'[url=?itemsets&filter=ta='.$_ta.']'.Lang::$itemset['notes'][$_ta].'[/url]';
|
||||
|
||||
/****************/
|
||||
/* Main Content */
|
||||
/****************/
|
||||
|
||||
// pieces + Summary
|
||||
$pieces = [];
|
||||
$eqList = [];
|
||||
$compare = [];
|
||||
|
||||
if (!$iSet->pieceToSet)
|
||||
$cnd = [0];
|
||||
else
|
||||
$cnd = ['i.id', array_keys($iSet->pieceToSet)];
|
||||
|
||||
$iList = new ItemList(array($cnd));
|
||||
$data = $iList->getListviewData(ITEMINFO_SUBITEMS | ITEMINFO_JSON);
|
||||
foreach ($iList->iterate() as $itemId => $__)
|
||||
{
|
||||
if (empty($data[$itemId]))
|
||||
continue;
|
||||
|
||||
$slot = $iList->getField('slot');
|
||||
$disp = $iList->getField('displayId');
|
||||
if ($slot && $disp)
|
||||
$eqList[] = [$slot, $disp];
|
||||
|
||||
$compare[] = $itemId;
|
||||
|
||||
$pieces[] = array(
|
||||
'id' => $itemId,
|
||||
'name' => $iList->getField('name', true),
|
||||
'quality' => $iList->getField('quality'),
|
||||
'icon' => $iList->getField('iconString'),
|
||||
'json' => json_encode($data[$itemId], JSON_NUMERIC_CHECK)
|
||||
);
|
||||
}
|
||||
|
||||
// spells
|
||||
$foo = [];
|
||||
$spells = [];
|
||||
for ($i = 1; $i < 9; $i++)
|
||||
{
|
||||
$spl = $iSet->getField('spell'.$i);
|
||||
$qty = $iSet->getField('bonus'.$i);
|
||||
|
||||
if ($spl && $qty)
|
||||
if ($_ = $this->subject->getField('classMask'))
|
||||
{
|
||||
$foo[] = $spl;
|
||||
$spells[] = array( // cant use spell as index, would change order
|
||||
'id' => $spl,
|
||||
'bonus' => $qty,
|
||||
'desc' => ''
|
||||
);
|
||||
$bit = log($_, 2);
|
||||
if (intVal($bit) != $bit) // bit is float => multiple classes were set => skip out
|
||||
return;
|
||||
|
||||
$this->path[] = $bit + 1;
|
||||
}
|
||||
}
|
||||
|
||||
// sort by required pieces ASC
|
||||
usort($spells, function($a, $b) {
|
||||
if ($a['bonus'] == $b['bonus'])
|
||||
return 0;
|
||||
|
||||
return ($a['bonus'] > $b['bonus']) ? 1 : -1;
|
||||
});
|
||||
|
||||
$setSpells = new SpellList(array(['s.id', $foo]));
|
||||
foreach ($setSpells->iterate() as $spellId => $__)
|
||||
protected function generateTitle()
|
||||
{
|
||||
foreach ($spells as &$s)
|
||||
array_unshift($this->title, $this->name, Util::ucFirst(Lang::$game['itemset']));
|
||||
}
|
||||
|
||||
protected function generateContent()
|
||||
{
|
||||
$_ta = $this->subject->getField('contentGroup');
|
||||
$_ty = $this->subject->getField('type');
|
||||
$_cnt = count($this->subject->getField('pieces'));
|
||||
|
||||
/***********/
|
||||
/* Infobox */
|
||||
/***********/
|
||||
|
||||
$infobox = Lang::getInfoBoxForFlags($this->subject->getField('cuFlags'));
|
||||
|
||||
// unavailable (todo (low): set data)
|
||||
if ($this->subject->getField('cuFlags') & CUSTOM_UNAVAILABLE)
|
||||
$infobox[] = Lang::$main['unavailable'];
|
||||
|
||||
// holiday
|
||||
if ($h = $this->subject->getField('holidayId'))
|
||||
{
|
||||
if ($spellId != $s['id'])
|
||||
$infobox[] = Lang::$game['eventShort'].Lang::$main['colon'].'[event='.$h.']';
|
||||
$this->extendGlobalIds(TYPE_GAMEVENT, $h);
|
||||
}
|
||||
|
||||
// itemLevel
|
||||
if ($min = $this->subject->getField('minLevel'))
|
||||
{
|
||||
$foo = Lang::$game['level'].Lang::$main['colon'].$min;
|
||||
$max = $this->subject->getField('maxLevel');
|
||||
|
||||
if ($min < $max)
|
||||
$foo .= ' - '.$max;
|
||||
|
||||
$infobox[] = $foo;
|
||||
}
|
||||
|
||||
// class
|
||||
if ($cl = Lang::getClassString($this->subject->getField('classMask'), $jsg, $qty, false))
|
||||
{
|
||||
$this->extendGlobalIds(TYPE_CLASS, $jsg);
|
||||
$t = $qty == 1 ? Lang::$game['class'] : Lang::$game['classes'];
|
||||
$infobox[] = Util::ucFirst($t).Lang::$main['colon'].$cl;
|
||||
}
|
||||
|
||||
// required level
|
||||
if ($lvl = $this->subject->getField('reqLevel'))
|
||||
$infobox[] = sprintf(Lang::$game['reqLevel'], $lvl);
|
||||
|
||||
// type
|
||||
if ($_ty)
|
||||
$infobox[] = Lang::$game['type'].Lang::$main['colon'].Lang::$itemset['types'][$_ty];
|
||||
|
||||
// tag
|
||||
if ($_ta)
|
||||
$infobox[] = Lang::$itemset['_tag'].Lang::$main['colon'].'[url=?itemsets&filter=ta='.$_ta.']'.Lang::$itemset['notes'][$_ta].'[/url]';
|
||||
|
||||
/****************/
|
||||
/* Main Content */
|
||||
/****************/
|
||||
|
||||
// pieces + Summary
|
||||
$pieces = [];
|
||||
$eqList = [];
|
||||
$compare = [];
|
||||
|
||||
if (!$this->subject->pieceToSet)
|
||||
$cnd = [0];
|
||||
else
|
||||
$cnd = ['i.id', array_keys($this->subject->pieceToSet)];
|
||||
|
||||
$iList = new ItemList(array($cnd));
|
||||
$data = $iList->getListviewData(ITEMINFO_SUBITEMS | ITEMINFO_JSON);
|
||||
foreach ($iList->iterate() as $itemId => $__)
|
||||
{
|
||||
if (empty($data[$itemId]))
|
||||
continue;
|
||||
|
||||
$s['desc'] = $setSpells->parseText('description')[0];
|
||||
$slot = $iList->getField('slot');
|
||||
$disp = $iList->getField('displayId');
|
||||
if ($slot && $disp)
|
||||
$eqList[] = [$slot, $disp];
|
||||
|
||||
$compare[] = $itemId;
|
||||
|
||||
$pieces[] = array(
|
||||
'id' => $itemId,
|
||||
'name' => $iList->getField('name', true),
|
||||
'quality' => $iList->getField('quality'),
|
||||
'icon' => $iList->getField('iconString'),
|
||||
'json' => $data[$itemId]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// path
|
||||
if ($_cl)
|
||||
{
|
||||
for ($i = 0; $i < 11; $i++)
|
||||
// spells
|
||||
$foo = [];
|
||||
$spells = [];
|
||||
for ($i = 1; $i < 9; $i++)
|
||||
{
|
||||
if ($_cl & (1 << $i))
|
||||
{
|
||||
if ($_cl == (1 << $i)) // only bit set, add path
|
||||
$path[] = $i + 1;
|
||||
$spl = $this->subject->getField('spell'.$i);
|
||||
$qty = $this->subject->getField('bonus'.$i);
|
||||
|
||||
break; // break anyway (cant set multiple classes)
|
||||
if ($spl && $qty)
|
||||
{
|
||||
$foo[] = $spl;
|
||||
$spells[] = array( // cant use spell as index, would change order
|
||||
'id' => $spl,
|
||||
'bonus' => $qty,
|
||||
'desc' => ''
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// sort by required pieces ASC
|
||||
usort($spells, function($a, $b) {
|
||||
if ($a['bonus'] == $b['bonus'])
|
||||
return 0;
|
||||
|
||||
return ($a['bonus'] > $b['bonus']) ? 1 : -1;
|
||||
});
|
||||
|
||||
$setSpells = new SpellList(array(['s.id', $foo]));
|
||||
foreach ($setSpells->iterate() as $spellId => $__)
|
||||
{
|
||||
foreach ($spells as &$s)
|
||||
{
|
||||
if ($spellId != $s['id'])
|
||||
continue;
|
||||
|
||||
$s['desc'] = $setSpells->parseText('description')[0];
|
||||
}
|
||||
}
|
||||
|
||||
$skill = '';
|
||||
if ($_sk = $this->subject->getField('skillId'))
|
||||
{
|
||||
$spellLink = sprintf('<a href="?spells=11.%s">%s</a> (%s)', $_sk, Lang::$spell['cat'][11][$_sk][0], $this->subject->getField('skillLevel'));
|
||||
$skill = ' – <small><b>'.sprintf(Lang::$game['requires'], $spellLink).'</b></small>';
|
||||
}
|
||||
|
||||
$this->bonusExt = $skill;
|
||||
$this->description = $_ta ? sprintf(Lang::$itemset['_desc'], $this->name, Lang::$itemset['notes'][$_ta], $_cnt) : sprintf(Lang::$itemset['_descTagless'], $this->name, $_cnt);
|
||||
$this->unavailable = $this->subject->getField('cuFlags') & CUSTOM_UNAVAILABLE;
|
||||
$this->infobox = $infobox ? '[ul][li]'.implode('[/li][li]', $infobox).'[/li][/ul]' : null;
|
||||
$this->pieces = $pieces;
|
||||
$this->spells = $spells;
|
||||
$this->expansion = 0;
|
||||
$this->redButtons = array(
|
||||
BUTTON_WOWHEAD => $this->typeId > 0, // bool only
|
||||
BUTTON_LINKS => ['color' => '', 'linkId' => ''],
|
||||
BUTTON_VIEW3D => ['type' => TYPE_ITEMSET, 'typeId' => $this->typeId, 'equipList' => $eqList],
|
||||
BUTTON_COMPARE => ['eqList' => implode(':', $compare), 'qty' => $_cnt]
|
||||
);
|
||||
$this->compare = array(
|
||||
'level' => $this->subject->getField('reqLevel'),
|
||||
'items' => array_map(function ($v) {
|
||||
return [[$v]];
|
||||
}, $compare)
|
||||
);
|
||||
|
||||
/**************/
|
||||
/* Extra Tabs */
|
||||
/**************/
|
||||
|
||||
// related sets (priority: 1: similar tag + class; 2: has event; 3: no tag + similar type, 4: similar type + profession)
|
||||
$rel = [];
|
||||
|
||||
if ($_ta && count($this->path) == 3)
|
||||
{
|
||||
$rel[] = ['id', $this->typeId, '!'];
|
||||
$rel[] = ['classMask', 1 << (end($this->path) - 1), '&'];
|
||||
$rel[] = ['contentGroup', (int)$_ta];
|
||||
}
|
||||
else if ($this->subject->getField('holidayId'))
|
||||
{
|
||||
$rel[] = ['id', $this->typeId, '!'];
|
||||
$rel[] = ['holidayId', 0, '!'];
|
||||
}
|
||||
else if ($this->subject->getField('skillId'))
|
||||
{
|
||||
$rel[] = ['id', $this->typeId, '!'];
|
||||
$rel[] = ['contentGroup', 0];
|
||||
$rel[] = ['skillId', 0, '!'];
|
||||
$rel[] = ['type', $_ty];
|
||||
}
|
||||
else if (!$_ta && $_ty)
|
||||
{
|
||||
$rel[] = ['id', $this->typeId, '!'];
|
||||
$rel[] = ['contentGroup', 0];
|
||||
$rel[] = ['type', $_ty];
|
||||
$rel[] = ['skillId', 0];
|
||||
}
|
||||
|
||||
if ($rel)
|
||||
{
|
||||
$relSets = new ItemsetList($rel);
|
||||
if (!$relSets->error)
|
||||
{
|
||||
$lv = array(
|
||||
'file' => 'itemset',
|
||||
'data' => $relSets->getListviewData(),
|
||||
'params' => array(
|
||||
'id' => 'see-also',
|
||||
'name' => '$LANG.tab_seealso',
|
||||
'tabs' => '$tabsRelated'
|
||||
)
|
||||
);
|
||||
|
||||
if (!$relSets->hasDiffFields(['classMask']))
|
||||
$lv['params']['hiddenCols'] = "$['classes']";
|
||||
|
||||
$this->lvData[] = $lv;
|
||||
|
||||
$this->extendGlobalData($relSets->getJSGlobals());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$skill = '';
|
||||
if ($_sk)
|
||||
{
|
||||
$spellLink = sprintf('<a href="?spells=11.%s">%s</a> (%s)', $_sk, Lang::$spell['cat'][11][$_sk][0], $iSet->getField('skillLevel'));
|
||||
$skill = ' – <small><b>'.sprintf(Lang::$game['requires'], $spellLink).'</b></small>';
|
||||
}
|
||||
|
||||
// menuId 2: Itemset g_initPath()
|
||||
// tabId 0: Database g_initHeader()
|
||||
$pageData = array(
|
||||
'page' => array(
|
||||
'name' => $_na, // for page content
|
||||
'bonusExt' => $skill,
|
||||
'description' => $_ta ? sprintf(Lang::$itemset['_desc'], $_na, Lang::$itemset['notes'][$_ta], $_cnt) : sprintf(Lang::$itemset['_descTagless'], $_na, $_cnt),
|
||||
'unavailable' => (bool)($iSet->getField('cuFlags') & CUSTOM_UNAVAILABLE),
|
||||
'infobox' => $infobox ? '[ul][li]'.implode('[/li][li]', $infobox).'[/li][/ul]' : null,
|
||||
'title' => $_na." - ".Util::ucfirst(Lang::$game['itemset']),
|
||||
'path' => json_encode($path, JSON_NUMERIC_CHECK),
|
||||
'tab' => 0,
|
||||
'type' => TYPE_ITEMSET,
|
||||
'typeId' => $_id,
|
||||
'reqJS' => array(
|
||||
STATIC_URL.'/js/Summary.js',
|
||||
STATIC_URL.'/js/swfobject.js'
|
||||
),
|
||||
'pieces' => $pieces,
|
||||
'spells' => $spells,
|
||||
'redButtons' => array(
|
||||
BUTTON_WOWHEAD => $_id > 0, // bool only
|
||||
BUTTON_LINKS => ['color' => '', 'linkId' => ''],
|
||||
BUTTON_VIEW3D => ['type' => TYPE_ITEMSET, 'typeId' => $_id, 'equipList' => $eqList],
|
||||
BUTTON_COMPARE => ['eqList' => implode(':', $compare), 'qty' => $_cnt]
|
||||
),
|
||||
'compare' => array(
|
||||
'qty' => $_cnt,
|
||||
'items' => $compare,
|
||||
'level' => $_lvl
|
||||
),
|
||||
),
|
||||
'relTabs' => []
|
||||
);
|
||||
|
||||
$iSet->getJSGlobals();
|
||||
|
||||
/**************/
|
||||
/* Extra Tabs */
|
||||
/**************/
|
||||
|
||||
// related sets (priority: 1: similar tag + class; 2: has event; 3: no tag + similar type, 4: similar type + profession)
|
||||
$rel = [];
|
||||
|
||||
if ($_ta && count($path) == 3)
|
||||
{
|
||||
$rel[] = ['id', $_id, '!'];
|
||||
$rel[] = ['classMask', 1 << (end($path) - 1), '&'];
|
||||
$rel[] = ['contentGroup', (int)$_ta];
|
||||
}
|
||||
else if ($_ev)
|
||||
{
|
||||
$rel[] = ['id', $_id, '!'];
|
||||
$rel[] = ['holidayId', 0, '!'];
|
||||
}
|
||||
else if ($_sk)
|
||||
{
|
||||
$rel[] = ['id', $_id, '!'];
|
||||
$rel[] = ['contentGroup', 0];
|
||||
$rel[] = ['skillId', 0, '!'];
|
||||
$rel[] = ['type', $_ty];
|
||||
}
|
||||
else if (!$_ta && $_ty)
|
||||
{
|
||||
$rel[] = ['id', $_id, '!'];
|
||||
$rel[] = ['contentGroup', 0];
|
||||
$rel[] = ['type', $_ty];
|
||||
$rel[] = ['skillId', 0];
|
||||
}
|
||||
|
||||
if ($rel)
|
||||
{
|
||||
$relSets = new ItemsetList($rel);
|
||||
if (!$relSets->error)
|
||||
{
|
||||
$pageData['relTabs'][] = array(
|
||||
'file' => 'itemset',
|
||||
'data' => $relSets->getListviewData(),
|
||||
'params' => array(
|
||||
'id' => 'see-also',
|
||||
'name' => '$LANG.tab_seealso',
|
||||
'tabs' => '$tabsRelated'
|
||||
)
|
||||
);
|
||||
|
||||
$mask = $relSets->hasDiffFields(['classMask']);
|
||||
if (!$mask)
|
||||
$pageData['related']['params']['hiddenCols'] = "$['classes']";
|
||||
|
||||
$relSets->getJSGlobals();
|
||||
}
|
||||
}
|
||||
|
||||
$smarty->saveCache($cacheKeyPage, $pageData);
|
||||
}
|
||||
|
||||
|
||||
$smarty->updatePageVars($pageData['page']);
|
||||
$smarty->assign('community', CommunityContent::getAll(TYPE_ITEMSET, $_id)); // comments, screenshots, videos
|
||||
$smarty->assign('lang', array_merge(Lang::$main, Lang::$itemset, ['colon' => Lang::$main['colon']]));
|
||||
$smarty->assign('lvData', $pageData['relTabs']);
|
||||
|
||||
// load the page
|
||||
$smarty->display('itemset.tpl');
|
||||
|
||||
?>
|
||||
|
||||
@@ -4,76 +4,83 @@ if (!defined('AOWOW_REVISION'))
|
||||
die('illegal access');
|
||||
|
||||
|
||||
$filter = [];
|
||||
$path = [0, 2];
|
||||
$filterHash = !empty($_GET['filter']) ? sha1(serialize($_GET['filter'])) : -1;
|
||||
$cacheKey = implode('_', [CACHETYPE_PAGE, TYPE_ITEMSET, -1, $filterHash, User::$localeId]);
|
||||
|
||||
if (!$smarty->loadCache($cacheKey, $pageData, $filter))
|
||||
// menuId 2: Itemset g_initPath()
|
||||
// tabId 0: Database g_initHeader()
|
||||
class ItemsetsPage extends GenericPage
|
||||
{
|
||||
$itemsetFilter = new ItemsetListFilter();
|
||||
use ListPage;
|
||||
|
||||
$itemsets = new ItemsetList([$itemsetFilter->getConditions()]);
|
||||
$itemsets->getJSGlobals();
|
||||
protected $type = TYPE_ITEMSET;
|
||||
protected $tpl = 'itemsets';
|
||||
protected $path = [0, 2];
|
||||
protected $tabId = 0;
|
||||
protected $mode = CACHETYPE_PAGE;
|
||||
protected $js = ['filters.js'];
|
||||
|
||||
// recreate form selection
|
||||
$filter = array_merge($itemsetFilter->getForm('form'), $filter);
|
||||
$filter['query'] = isset($_GET['filter']) ? $_GET['filter'] : NULL;
|
||||
$filter['fi'] = $itemsetFilter->getForm();
|
||||
|
||||
if (isset($filter['cl']))
|
||||
$path[] = $filter['cl'];
|
||||
|
||||
// menuId 2: Itemset g_initPath()
|
||||
// tabId 0: Database g_initHeader()
|
||||
$pageData = array(
|
||||
'page' => array(
|
||||
'title' => Util::ucFirst(Lang::$game['itemsets']),
|
||||
'path' => json_encode($path, JSON_NUMERIC_CHECK),
|
||||
'tab' => 0,
|
||||
'subCat' => $pageParam ? '='.$pageParam : '',
|
||||
'reqJS' => array(
|
||||
STATIC_URL.'/js/filters.js',
|
||||
'?data=weight-presets&locale='.User::$localeId.'&t='.$_SESSION['dataKey']
|
||||
)
|
||||
),
|
||||
'lv' => []
|
||||
);
|
||||
|
||||
$lv = array(
|
||||
'data' => $itemsets->getListviewData(), // listview content
|
||||
'params' => []
|
||||
);
|
||||
|
||||
if (!empty($filter['fi']['extraCols']))
|
||||
$lv['params']['extraCols'] = '$fi_getExtraCols(fi_extraCols, 0, 0)';
|
||||
|
||||
// create note if search limit was exceeded
|
||||
if ($itemsets->getMatches() > CFG_SQL_LIMIT_DEFAULT)
|
||||
public function __construct($pageCall, $pageParam)
|
||||
{
|
||||
$lv['params']['note'] = sprintf(Util::$tryFilteringString, 'LANG.lvnote_itemsetsfound', $itemsets->getMatches(), CFG_SQL_LIMIT_DEFAULT);
|
||||
$lv['params']['_truncated'] = 1;
|
||||
$this->getCategoryFromUrl($pageParam);;
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->name = Util::ucFirst(Lang::$game['itemsets']);
|
||||
}
|
||||
|
||||
if ($itemsetFilter->error)
|
||||
$lv['params']['_errors'] = '$1';
|
||||
protected function generateContent()
|
||||
{
|
||||
$itemsetFilter = new ItemsetListFilter();
|
||||
|
||||
$pageData['lv'] = $lv;
|
||||
$itemsets = new ItemsetList($itemsetFilter->getConditions());
|
||||
$this->extendGlobalData($itemsets->getJSGlobals());
|
||||
|
||||
$smarty->saveCache($cacheKey, $pageData, $filter);
|
||||
// recreate form selection
|
||||
$this->filter = array_merge($itemsetFilter->getForm('form'), $this->filter);
|
||||
$this->filter['query'] = isset($_GET['filter']) ? $_GET['filter'] : NULL;
|
||||
$this->filter['fi'] = $itemsetFilter->getForm();
|
||||
|
||||
$this->addJS('?data=weight-presets&locale='.User::$localeId.'&t='.$_SESSION['dataKey']);
|
||||
|
||||
$lv = array(
|
||||
'file' => 'itemset',
|
||||
'data' => $itemsets->getListviewData(), // listview content
|
||||
'params' => []
|
||||
);
|
||||
|
||||
if (!empty($this->filter['fi']['extraCols']))
|
||||
$lv['params']['extraCols'] = '$fi_getExtraCols(fi_extraCols, 0, 0)';
|
||||
|
||||
// create note if search limit was exceeded
|
||||
if ($itemsets->getMatches() > CFG_SQL_LIMIT_DEFAULT)
|
||||
{
|
||||
$lv['params']['note'] = sprintf(Util::$tryFilteringString, 'LANG.lvnote_itemsetsfound', $itemsets->getMatches(), CFG_SQL_LIMIT_DEFAULT);
|
||||
$lv['params']['_truncated'] = 1;
|
||||
}
|
||||
|
||||
if ($itemsetFilter->error)
|
||||
$lv['params']['_errors'] = '$1';
|
||||
|
||||
$this->lvData = $lv;
|
||||
|
||||
// sort for dropdown-menus
|
||||
asort(Lang::$itemset['notes'], SORT_NATURAL);
|
||||
asort(Lang::$game['cl']);
|
||||
}
|
||||
|
||||
protected function generateTitle()
|
||||
{
|
||||
array_unshift($this->title, $this->name);
|
||||
|
||||
$form = (new ItemsetListFilter())->getForm('form');
|
||||
if (isset($form['cl']))
|
||||
array_unshift($this->title, Lang::$game['cl'][$form['cl']]);
|
||||
}
|
||||
|
||||
protected function generatePath()
|
||||
{
|
||||
$form = (new ItemsetListFilter())->getForm('form');
|
||||
if (isset($form['cl']))
|
||||
$this->path[] = $form['cl'];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// sort for dropdown-menus
|
||||
asort(Lang::$itemset['notes'], SORT_NATURAL);
|
||||
asort(Lang::$game['cl']);
|
||||
|
||||
$smarty->updatePageVars($pageData['page']);
|
||||
$smarty->assign('filter', $filter);
|
||||
$smarty->assign('lang', array_merge(Lang::$main, Lang::$game, Lang::$itemset, Lang::$item, ['colon' => Lang::$main['colon']]));
|
||||
$smarty->assign('lvData', $pageData['lv']);
|
||||
|
||||
// load the page
|
||||
$smarty->display('itemsets.tpl');
|
||||
|
||||
?>
|
||||
|
||||
1429
pages/npc.php
1429
pages/npc.php
File diff suppressed because it is too large
Load Diff
155
pages/npcs.php
155
pages/npcs.php
@@ -4,90 +4,95 @@ if (!defined('AOWOW_REVISION'))
|
||||
die('illegal access');
|
||||
|
||||
|
||||
$filter = [];
|
||||
$cats = Util::extractURLParams($pageParam);
|
||||
$path = [0, 4];
|
||||
$title = [Util::ucFirst(Lang::$game['npcs'])];
|
||||
$filterHash = !empty($_GET['filter']) ? sha1(serialize($_GET['filter'])) : -1;
|
||||
$cacheKey = implode('_', [CACHETYPE_PAGE, TYPE_NPC, -1, ($cats ? $cats[0] : -1).$filterHash, User::$localeId]);
|
||||
$validCats = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
|
||||
|
||||
if (!Util::isValidPage($validCats, $cats))
|
||||
$smarty->error();
|
||||
|
||||
if (!$smarty->loadCache($cacheKey, $pageData, $filter))
|
||||
// menuId 4: NPC g_initPath()
|
||||
// tabId 0: Database g_initHeader()
|
||||
class NpcsPage extends GenericPage
|
||||
{
|
||||
$conditions = [];
|
||||
if ($cats)
|
||||
use ListPage;
|
||||
|
||||
protected $type = TYPE_NPC;
|
||||
protected $tpl = 'npcs';
|
||||
protected $path = [0, 4];
|
||||
protected $tabId = 0;
|
||||
protected $mode = CACHETYPE_PAGE;
|
||||
protected $validCats = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
|
||||
protected $js = ['filters.js'];
|
||||
|
||||
public function __construct($pageCall, $pageParam)
|
||||
{
|
||||
$conditions[] = ['type', $cats[0]];
|
||||
$path[] = $cats[0];
|
||||
array_unshift($title, Lang::$npc['cat'][$cats[0]]);
|
||||
$this->getCategoryFromUrl($pageParam);;
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->name = Util::ucFirst(Lang::$game['npcs']);
|
||||
$this->subCat = $pageParam ? '='.$pageParam : '';
|
||||
}
|
||||
|
||||
$npcFilter = new CreatureListFilter();
|
||||
if ($_ = $npcFilter->getConditions())
|
||||
$conditions[] = $_;
|
||||
|
||||
// beast subtypes are selected via filter
|
||||
$npcs = new CreatureList($conditions, ['extraOpts' => $npcFilter->extraOpts]);
|
||||
|
||||
// recreate form selection
|
||||
$filter = array_merge($npcFilter->getForm('form'), $filter);
|
||||
$filter['query'] = isset($_GET['filter']) ? $_GET['filter'] : NULL;
|
||||
$filter['fi'] = $npcFilter->getForm();
|
||||
|
||||
if (isset($filter['fa']))
|
||||
$path[] = $filter['fa'];
|
||||
|
||||
// menuId 4: NPC g_initPath()
|
||||
// tabId 0: Database g_initHeader()
|
||||
$pageData = array(
|
||||
'page' => array(
|
||||
'petFamPanel' => ($cats && $cats[0] == 1),
|
||||
'title' => implode(' - ', $title),
|
||||
'path' => json_encode($path, JSON_NUMERIC_CHECK),
|
||||
'tab' => 0,
|
||||
'subCat' => $pageParam ? '='.$pageParam : '',
|
||||
'reqJS' => array(
|
||||
STATIC_URL.'/js/filters.js'
|
||||
)
|
||||
),
|
||||
'lv' => []
|
||||
);
|
||||
|
||||
$lv = array(
|
||||
'data' => $npcs->getListviewData(), // listview content
|
||||
'params' => []
|
||||
);
|
||||
|
||||
if (!empty($filter['fi']['extraCols']))
|
||||
$lv['params']['extraCols'] = '$fi_getExtraCols(fi_extraCols, 0, 0)';
|
||||
|
||||
// create note if search limit was exceeded
|
||||
if ($npcs->getMatches() > CFG_SQL_LIMIT_DEFAULT)
|
||||
protected function generateContent()
|
||||
{
|
||||
$lv['params']['note'] = sprintf(Util::$tryFilteringString, 'LANG.lvnote_npcsfound', $npcs->getMatches(), CFG_SQL_LIMIT_DEFAULT);
|
||||
$lv['params']['_truncated'] = 1;
|
||||
$conditions = [];
|
||||
|
||||
if ($this->category)
|
||||
{
|
||||
$conditions[] = ['type', $this->category[0]];
|
||||
$this->petFamPanel = $this->category[0] == 1;
|
||||
}
|
||||
else
|
||||
$this->petFamPanel = false;
|
||||
|
||||
$npcFilter = new CreatureListFilter();
|
||||
if ($_ = $npcFilter->getConditions())
|
||||
$conditions[] = $_;
|
||||
|
||||
// beast subtypes are selected via filter
|
||||
$npcs = new CreatureList($conditions, ['extraOpts' => $npcFilter->extraOpts]);
|
||||
|
||||
// recreate form selection
|
||||
$this->filter = array_merge($npcFilter->getForm('form'), $this->filter);
|
||||
$this->filter['query'] = isset($_GET['filter']) ? $_GET['filter'] : NULL;
|
||||
$this->filter['fi'] = $npcFilter->getForm();
|
||||
|
||||
$lv = array(
|
||||
'file' => 'creature',
|
||||
'data' => $npcs->getListviewData(), // listview content
|
||||
'params' => []
|
||||
);
|
||||
|
||||
if (!empty($this->filter['fi']['extraCols']))
|
||||
$lv['params']['extraCols'] = '$fi_getExtraCols(fi_extraCols, 0, 0)';
|
||||
|
||||
// create note if search limit was exceeded
|
||||
if ($npcs->getMatches() > CFG_SQL_LIMIT_DEFAULT)
|
||||
{
|
||||
$lv['params']['note'] = sprintf(Util::$tryFilteringString, 'LANG.lvnote_npcsfound', $npcs->getMatches(), CFG_SQL_LIMIT_DEFAULT);
|
||||
$lv['params']['_truncated'] = 1;
|
||||
}
|
||||
|
||||
if ($npcFilter->error)
|
||||
$lv['params']['_errors'] = '$1';
|
||||
|
||||
$this->lvData = $lv;
|
||||
|
||||
// sort for dropdown-menus
|
||||
asort(Lang::$game['fa']);
|
||||
}
|
||||
|
||||
if ($npcFilter->error)
|
||||
$lv['params']['_errors'] = '$1';
|
||||
protected function generateTitle()
|
||||
{
|
||||
array_unshift($this->title, $this->name);
|
||||
if ($this->category)
|
||||
array_unshift($this->title, Lang::$npc['cat'][$this->category[0]]);
|
||||
}
|
||||
|
||||
$pageData['lv'] = $lv;
|
||||
protected function generatePath()
|
||||
{
|
||||
if ($this->category)
|
||||
$this->path[] = $this->category[0];
|
||||
|
||||
$smarty->saveCache($cacheKey, $pageData);
|
||||
$form = (new CreatureListFilter())->getForm('form');
|
||||
if (isset($form['fa']) && !is_array($form['fa']))
|
||||
$this->path[] = $form['fa'];
|
||||
}
|
||||
}
|
||||
|
||||
// sort for dropdown-menus
|
||||
asort(Lang::$game['fa']);
|
||||
|
||||
$smarty->updatePageVars($pageData['page']);
|
||||
$smarty->assign('filter', $filter);
|
||||
$smarty->assign('lang', array_merge(Lang::$main, Lang::$npc, Lang::$game, ['colon' => lang::$colon]));
|
||||
$smarty->assign('lvData', $pageData['lv']);
|
||||
|
||||
// load the page
|
||||
$smarty->display('npcs.tpl');
|
||||
|
||||
?>
|
||||
|
||||
642
pages/skill.php
642
pages/skill.php
@@ -4,313 +4,368 @@ if (!defined('AOWOW_REVISION'))
|
||||
die('illegal access');
|
||||
|
||||
|
||||
require 'includes/community.class.php';
|
||||
|
||||
$_id = intVal($pageParam);
|
||||
$_path = [0, 14];
|
||||
|
||||
$cacheKeyPage = implode('_', [CACHETYPE_PAGE, TYPE_SKILL, $_id, -1, User::$localeId]);
|
||||
|
||||
if (!$smarty->loadCache($cacheKeyPage, $pageData))
|
||||
// menuId 14: Skill g_initPath()
|
||||
// tabId 0: Database g_initHeader()
|
||||
class SkillPage extends GenericPage
|
||||
{
|
||||
$skill = new SkillList(array(['id', $_id]));
|
||||
if ($skill->error)
|
||||
$smarty->notFound(Lang::$game['skill'], $_id);
|
||||
use DetailPage;
|
||||
|
||||
$_cat = $skill->getField('typeCat');
|
||||
protected $type = TYPE_SKILL;
|
||||
protected $typeId = 0;
|
||||
protected $tpl = 'detail-page-generic';
|
||||
protected $path = [0, 14];
|
||||
protected $tabId = 0;
|
||||
protected $mode = CACHETYPE_PAGE;
|
||||
|
||||
$_path[] = (in_array($_cat, [9, 11]) || $_id == 762) ? $_id : $_cat;
|
||||
private $cat = 0;
|
||||
|
||||
/****************/
|
||||
/* Main Content */
|
||||
/****************/
|
||||
|
||||
// menuId 14: Skill g_initPath()
|
||||
// tabId 0: Database g_initHeader()
|
||||
$pageData = array(
|
||||
'page' => array(
|
||||
'title' => $skill->getField('name', true)." - ".Util::ucfirst(Lang::$game['skill']),
|
||||
'name' => $skill->getField('name', true),
|
||||
'path' => json_encode($_path, JSON_NUMERIC_CHECK),
|
||||
'tab' => 0,
|
||||
'type' => TYPE_SKILL,
|
||||
'typeId' => $_id,
|
||||
'headIcons' => [$skill->getField('iconString')],
|
||||
'redButtons' => array(
|
||||
BUTTON_WOWHEAD => true,
|
||||
BUTTON_LINKS => true
|
||||
)
|
||||
),
|
||||
'relTabs' => []
|
||||
);
|
||||
|
||||
/**************/
|
||||
/* Extra Tabs */
|
||||
/**************/
|
||||
|
||||
if (in_array($_cat, [-5, 9, 11]))
|
||||
public function __construct($__, $id)
|
||||
{
|
||||
// tab: recipes [spells] (crafted)
|
||||
$condition = array(
|
||||
['OR', ['s.reagent1', 0, '>'], ['s.reagent2', 0, '>'], ['s.reagent3', 0, '>'], ['s.reagent4', 0, '>'], ['s.reagent5', 0, '>'], ['s.reagent6', 0, '>'], ['s.reagent7', 0, '>'], ['s.reagent8', 0, '>']],
|
||||
['OR', ['s.skillLine1', $_id], ['AND', ['s.skillLine1', 0, '>'], ['s.skillLine2OrMask', $_id]]],
|
||||
0
|
||||
parent::__construct();
|
||||
|
||||
$this->typeId = intVal($id);
|
||||
|
||||
$this->subject = new SkillList(array(['id', $this->typeId]));
|
||||
if ($this->subject->error)
|
||||
$this->notFound(Lang::$game['skill']);
|
||||
|
||||
$this->name = $this->subject->getField('name', true);
|
||||
$this->cat = $this->subject->getField('typeCat');
|
||||
}
|
||||
|
||||
protected function generatePath()
|
||||
{
|
||||
$this->path[] = (in_array($this->cat, [9, 11]) || $this->typeId == 762) ? $this->typeId : $this->cat;
|
||||
}
|
||||
|
||||
protected function generateTitle()
|
||||
{
|
||||
array_unshift($this->title, $this->name, Util::ucFirst(Lang::$game['class']));
|
||||
}
|
||||
|
||||
protected function generateContent()
|
||||
{
|
||||
/****************/
|
||||
/* Main Content */
|
||||
/****************/
|
||||
|
||||
$this->headIcons = [$this->subject->getField('iconString')];
|
||||
$this->redButtons = array(
|
||||
BUTTON_WOWHEAD => true,
|
||||
BUTTON_LINKS => true
|
||||
);
|
||||
|
||||
$recipes = new SpellList($condition); // also relevant for 3
|
||||
if (!$recipes->error)
|
||||
{
|
||||
$recipes->addGlobalsToJScript(GLOBALINFO_SELF | GLOBALINFO_RELATED);
|
||||
/**************/
|
||||
/* Extra Tabs */
|
||||
/**************/
|
||||
|
||||
$pageData['relTabs'][] = array(
|
||||
'file' => 'spell',
|
||||
'data' => $recipes->getListviewData(),
|
||||
'params' => array(
|
||||
'tabs' => '$tabsRelated',
|
||||
'id' => 'recipes',
|
||||
'name' => '$LANG.tab_recipes',
|
||||
'visibleCols' => "$['reagents', 'source']",
|
||||
'note' => sprintf(Util::$filterResultString, '?spells='.$_cat.'.'.$_id.'&filter=cr=20;crs=1;crv=0')
|
||||
)
|
||||
if (in_array($this->cat, [-5, 9, 11]))
|
||||
{
|
||||
// tab: recipes [spells] (crafted)
|
||||
$condition = array(
|
||||
['OR', ['s.reagent1', 0, '>'], ['s.reagent2', 0, '>'], ['s.reagent3', 0, '>'], ['s.reagent4', 0, '>'], ['s.reagent5', 0, '>'], ['s.reagent6', 0, '>'], ['s.reagent7', 0, '>'], ['s.reagent8', 0, '>']],
|
||||
['OR', ['s.skillLine1', $this->typeId], ['AND', ['s.skillLine1', 0, '>'], ['s.skillLine2OrMask', $this->typeId]]],
|
||||
CFG_SQL_LIMIT_NONE
|
||||
);
|
||||
}
|
||||
|
||||
// tab: recipe Items [items] (Books)
|
||||
$filterRecipe = [null, 165, 197, 202, 164, 185, 171, 129, 333, 356, 755, 773, 186, 182];
|
||||
$conditions = array(
|
||||
['requiredSkill', $_id],
|
||||
['class', ITEM_CLASS_RECIPE],
|
||||
0
|
||||
);
|
||||
|
||||
$recipeItems = new ItemList($conditions);
|
||||
if (!$recipeItems->error)
|
||||
{
|
||||
$recipeItems->addGlobalsToJScript(GLOBALINFO_SELF);
|
||||
|
||||
if ($_ = array_search($_id, $filterRecipe))
|
||||
$_ = sprintf(Util::$filterResultString, "?items=9.".$_);
|
||||
|
||||
$pageData['relTabs'][] = array(
|
||||
'file' => 'item',
|
||||
'data' => $recipeItems->getListviewData(),
|
||||
'params' => array(
|
||||
'id' => 'recipe-items',
|
||||
'name' => '$LANG.tab_recipeitems',
|
||||
'tabs' => '$tabsRelated',
|
||||
'note' => $_
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// tab: crafted items [items]
|
||||
$filterItem = [null, 171, 164, 185, 333, 202, 129, 755, 165, 186, 197, null, null, 356, 182, 773];
|
||||
$created = [];
|
||||
foreach ($recipes->iterate() as $__)
|
||||
if ($idx = $recipes->canCreateItem())
|
||||
foreach ($idx as $i)
|
||||
$created[] = $recipes->getField('effect'.$i.'CreateItemId');
|
||||
|
||||
if ($created)
|
||||
{
|
||||
$created = new ItemList(array(['i.id', $created], 0));
|
||||
if (!$created->error)
|
||||
$recipes = new SpellList($condition); // also relevant for 3
|
||||
if (!$recipes->error)
|
||||
{
|
||||
$created->addGlobalsToJScript(GLOBALINFO_SELF);
|
||||
$this->extendGlobalData($recipes->getJSGlobals(GLOBALINFO_SELF | GLOBALINFO_RELATED));
|
||||
|
||||
if ($_ = array_search($_id, $filterItem))
|
||||
$_ = sprintf(Util::$filterResultString, "?items&filter=cr=86;crs=".$_.";crv=0");
|
||||
|
||||
$pageData['relTabs'][] = array(
|
||||
'file' => 'item',
|
||||
'data' => $created->getListviewData(),
|
||||
$this->lvData[] = array(
|
||||
'file' => 'spell',
|
||||
'data' => $recipes->getListviewData(),
|
||||
'params' => array(
|
||||
'id' => 'crafted-items',
|
||||
'name' => '$LANG.tab_crafteditems',
|
||||
'tabs' => '$tabsRelated',
|
||||
'id' => 'recipes',
|
||||
'name' => '$LANG.tab_recipes',
|
||||
'visibleCols' => "$['reagents', 'source']",
|
||||
'note' => sprintf(Util::$filterResultString, '?spells='.$this->cat.'.'.$this->typeId.'&filter=cr=20;crs=1;crv=0')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// tab: recipe Items [items] (Books)
|
||||
$filterRecipe = [null, 165, 197, 202, 164, 185, 171, 129, 333, 356, 755, 773, 186, 182];
|
||||
$conditions = array(
|
||||
['requiredSkill', $this->typeId],
|
||||
['class', ITEM_CLASS_RECIPE],
|
||||
CFG_SQL_LIMIT_NONE
|
||||
);
|
||||
|
||||
$recipeItems = new ItemList($conditions);
|
||||
if (!$recipeItems->error)
|
||||
{
|
||||
$this->extendGlobalData($recipeItems->getJSGlobals(GLOBALINFO_SELF));
|
||||
|
||||
if ($_ = array_search($this->typeId, $filterRecipe))
|
||||
$_ = sprintf(Util::$filterResultString, "?items=9.".$_);
|
||||
|
||||
$this->lvData[] = array(
|
||||
'file' => 'item',
|
||||
'data' => $recipeItems->getListviewData(),
|
||||
'params' => array(
|
||||
'id' => 'recipe-items',
|
||||
'name' => '$LANG.tab_recipeitems',
|
||||
'tabs' => '$tabsRelated',
|
||||
'note' => $_
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// tab: required by [item]
|
||||
$conditions = array(
|
||||
['requiredSkill', $_id],
|
||||
['class', ITEM_CLASS_RECIPE, '!'],
|
||||
0
|
||||
);
|
||||
// tab: crafted items [items]
|
||||
$filterItem = [null, 171, 164, 185, 333, 202, 129, 755, 165, 186, 197, null, null, 356, 182, 773];
|
||||
$created = [];
|
||||
foreach ($recipes->iterate() as $__)
|
||||
if ($idx = $recipes->canCreateItem())
|
||||
foreach ($idx as $i)
|
||||
$created[] = $recipes->getField('effect'.$i.'CreateItemId');
|
||||
|
||||
$reqBy = new ItemList($conditions);
|
||||
if (!$reqBy->error)
|
||||
{
|
||||
$reqBy->addGlobalsToJScript(GLOBALINFO_SELF);
|
||||
|
||||
if ($_ = array_search($_id, $filterItem))
|
||||
$_ = sprintf(Util::$filterResultString, "?items&filter=cr=99:168;crs=".$_.":2;crv=0:0");
|
||||
|
||||
$pageData['relTabs'][] = array(
|
||||
'file' => 'item',
|
||||
'data' => $reqBy->getListviewData(),
|
||||
'params' => array(
|
||||
'id' => 'required-by',
|
||||
'name' => '$LANG.tab_requiredby',
|
||||
'tabs' => '$tabsRelated',
|
||||
'note' => $_
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// tab: required by [itemset]
|
||||
$conditions = array(
|
||||
['skillId', $_id],
|
||||
0
|
||||
);
|
||||
|
||||
$reqBy = new ItemsetList($conditions);
|
||||
if (!$reqBy->error)
|
||||
{
|
||||
$reqBy->addGlobalsToJScript(GLOBALINFO_SELF);
|
||||
|
||||
$pageData['relTabs'][] = array(
|
||||
'file' => 'itemset',
|
||||
'data' => $reqBy->getListviewData(),
|
||||
'params' => array(
|
||||
'id' => 'required-by-set',
|
||||
'name' => '$LANG.tab_requiredby',
|
||||
'tabs' => '$tabsRelated'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// tab: spells [spells] (exclude first tab)
|
||||
$reqClass = 0x0;
|
||||
$reqRace = 0x0;
|
||||
$condition = array(
|
||||
['AND', ['s.reagent1', 0], ['s.reagent2', 0], ['s.reagent3', 0], ['s.reagent4', 0], ['s.reagent5', 0], ['s.reagent6', 0], ['s.reagent7', 0], ['s.reagent8', 0]],
|
||||
['OR', ['s.skillLine1', $_id], ['AND', ['s.skillLine1', 0, '>'], ['s.skillLine2OrMask', $_id]]],
|
||||
0
|
||||
);
|
||||
|
||||
foreach (Util::$skillLineMask as $line1 => $sets)
|
||||
foreach ($sets as $idx => $set)
|
||||
if ($set[1] == $_id)
|
||||
if ($created)
|
||||
{
|
||||
$condition[1][] = array('AND', ['s.skillLine1', $line1], ['s.skillLine2OrMask', 1 << $idx, '&']);
|
||||
break 2;
|
||||
$created = new ItemList(array(['i.id', $created], CFG_SQL_LIMIT_NONE));
|
||||
if (!$created->error)
|
||||
{
|
||||
$this->extendGlobalData($created->getJSGlobals(GLOBALINFO_SELF));
|
||||
|
||||
if ($_ = array_search($this->typeId, $filterItem))
|
||||
$_ = sprintf(Util::$filterResultString, "?items&filter=cr=86;crs=".$_.";crv=0");
|
||||
|
||||
$this->lvData[] = array(
|
||||
'file' => 'item',
|
||||
'data' => $created->getListviewData(),
|
||||
'params' => array(
|
||||
'id' => 'crafted-items',
|
||||
'name' => '$LANG.tab_crafteditems',
|
||||
'tabs' => '$tabsRelated',
|
||||
'note' => $_
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$spells = new SpellList($condition);
|
||||
if (!$spells->error)
|
||||
{
|
||||
foreach ($spells->iterate() as $__)
|
||||
{
|
||||
$reqClass |= $spells->getField('reqClassMask');
|
||||
$reqRace |= $spells->getField('reqRaceMask');
|
||||
}
|
||||
|
||||
$spells->addGlobalsToJScript(GLOBALINFO_SELF);
|
||||
|
||||
$pageData['relTabs'][] = array(
|
||||
'file' => 'spell',
|
||||
'data' => $spells->getListviewData(),
|
||||
'params' => array(
|
||||
'tabs' => '$tabsRelated',
|
||||
'visibleCols' => "$['source']"
|
||||
)
|
||||
);
|
||||
|
||||
switch ($_cat)
|
||||
{
|
||||
case -4:
|
||||
$pageData['spells']['params']['note'] = sprintf(Util::$filterResultString, '?spells=-4');
|
||||
break;
|
||||
case 7:
|
||||
if ($_id != 769) // Internal
|
||||
$pageData['spells']['params']['note'] = sprintf(Util::$filterResultString, '?spells='.$_cat.'.'.(log($reqClass, 2) + 1).'.'.$_id); // doesn't matter what spell; reqClass should be identical for all Class Spells
|
||||
break;
|
||||
case 9:
|
||||
case 11:
|
||||
$pageData['spells']['params']['note'] = sprintf(Util::$filterResultString, '?spells='.$_cat.'.'.$_id);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// tab: trainers [npcs]
|
||||
if (in_array($_cat, [-5, 6, 7, 8, 9, 11]))
|
||||
{
|
||||
$list = [];
|
||||
if (@$tt = Util::$trainerTemplates[TYPE_SKILL][$_id])
|
||||
$list = DB::Aowow()->selectCol('SELECT DISTINCT entry FROM npc_trainer WHERE spell IN (?a) AND entry < 200000', $tt);
|
||||
else
|
||||
{
|
||||
$mask = 0;
|
||||
foreach (Util::$skillLineMask[-3] as $idx => $pair)
|
||||
if ($pair[1] == $_id)
|
||||
$mask |= 1 << $idx;
|
||||
|
||||
$list = DB::Aowow()->selectCol('
|
||||
SELECT IF(t1.entry > 200000, t2.entry, t1.entry)
|
||||
FROM npc_trainer t1
|
||||
JOIN aowow_spell s ON s.id = t1.spell
|
||||
LEFT JOIN npc_trainer t2 ON t2.spell = -t1.entry
|
||||
WHERE s.typeCat IN (-11, 9) AND (s.skillLine1 = ?d OR (s.skillLine1 > 0 AND s.skillLine2OrMask = ?d) '.($mask ? ' OR (s.skilllIne1 = -3 AND s.skillLine2OrMask = '.$mask.')' : null).')',
|
||||
$_id,
|
||||
$_id
|
||||
// tab: required by [item]
|
||||
$conditions = array(
|
||||
['requiredSkill', $this->typeId],
|
||||
['class', ITEM_CLASS_RECIPE, '!'],
|
||||
CFG_SQL_LIMIT_NONE
|
||||
);
|
||||
}
|
||||
|
||||
if ($list)
|
||||
{
|
||||
$trainer = new CreatureList(array(0, ['ct.id', $list], ['ct.spawns', 0, '>'], ['ct.npcflag', 0x10, '&']));
|
||||
|
||||
if (!$trainer->error)
|
||||
$reqBy = new ItemList($conditions);
|
||||
if (!$reqBy->error)
|
||||
{
|
||||
$trainer->addGlobalsToJscript();
|
||||
$this->extendGlobalData($reqBy->getJSGlobals(GLOBALINFO_SELF));
|
||||
|
||||
$pageData['relTabs'][] = array(
|
||||
'file' => 'creature',
|
||||
'data' => $trainer->getListviewData(),
|
||||
if ($_ = array_search($this->typeId, $filterItem))
|
||||
$_ = sprintf(Util::$filterResultString, "?items&filter=cr=99:168;crs=".$_.":2;crv=0:0");
|
||||
|
||||
$this->lvData[] = array(
|
||||
'file' => 'item',
|
||||
'data' => $reqBy->getListviewData(),
|
||||
'params' => array(
|
||||
'id' => 'required-by',
|
||||
'name' => '$LANG.tab_requiredby',
|
||||
'tabs' => '$tabsRelated',
|
||||
'id' => 'trainer',
|
||||
'name' => '$LANG.tab_trainers',
|
||||
'note' => $_
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// tab: required by [itemset]
|
||||
$conditions = array(
|
||||
['skillId', $this->typeId],
|
||||
CFG_SQL_LIMIT_NONE
|
||||
);
|
||||
|
||||
$reqBy = new ItemsetList($conditions);
|
||||
if (!$reqBy->error)
|
||||
{
|
||||
$this->extendGlobalData($reqBy->getJSGlobals(GLOBALINFO_SELF));
|
||||
|
||||
$this->lvData[] = array(
|
||||
'file' => 'itemset',
|
||||
'data' => $reqBy->getListviewData(),
|
||||
'params' => array(
|
||||
'id' => 'required-by-set',
|
||||
'name' => '$LANG.tab_requiredby',
|
||||
'tabs' => '$tabsRelated'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// tab: quests [quests]
|
||||
if (in_array($_cat, [9, 11])) // only for professions
|
||||
{
|
||||
$sort = 0;
|
||||
switch ($_id)
|
||||
// tab: spells [spells] (exclude first tab)
|
||||
$reqClass = 0x0;
|
||||
$reqRace = 0x0;
|
||||
$condition = array(
|
||||
['AND', ['s.reagent1', 0], ['s.reagent2', 0], ['s.reagent3', 0], ['s.reagent4', 0], ['s.reagent5', 0], ['s.reagent6', 0], ['s.reagent7', 0], ['s.reagent8', 0]],
|
||||
['OR', ['s.skillLine1', $this->typeId], ['AND', ['s.skillLine1', 0, '>'], ['s.skillLine2OrMask', $this->typeId]]],
|
||||
CFG_SQL_LIMIT_NONE
|
||||
);
|
||||
|
||||
foreach (Util::$skillLineMask as $line1 => $sets)
|
||||
foreach ($sets as $idx => $set)
|
||||
if ($set[1] == $this->typeId)
|
||||
{
|
||||
$condition[1][] = array('AND', ['s.skillLine1', $line1], ['s.skillLine2OrMask', 1 << $idx, '&']);
|
||||
break 2;
|
||||
}
|
||||
|
||||
$spells = new SpellList($condition);
|
||||
if (!$spells->error)
|
||||
{
|
||||
case 182: $sort = 24; break; // Herbalism
|
||||
case 356: $sort = 101; break; // Fishing
|
||||
case 164: $sort = 121; break; // Blacksmithing
|
||||
case 171: $sort = 181; break; // Alchemy
|
||||
case 165: $sort = 182; break; // Leatherworking
|
||||
case 202: $sort = 201; break; // Engineering
|
||||
case 197: $sort = 264; break; // Tailoring
|
||||
case 185: $sort = 304; break; // Cooking
|
||||
case 129: $sort = 324; break; // First Aid
|
||||
case 773: $sort = 371; break; // Inscription
|
||||
case 755: $sort = 373; break; // Jewelcrafting
|
||||
foreach ($spells->iterate() as $__)
|
||||
{
|
||||
$reqClass |= $spells->getField('reqClassMask');
|
||||
$reqRace |= $spells->getField('reqRaceMask');
|
||||
}
|
||||
|
||||
$this->extendGlobalData($spells->getJSGlobals(GLOBALINFO_SELF));
|
||||
|
||||
$lv = array(
|
||||
'file' => 'spell',
|
||||
'data' => $spells->getListviewData(),
|
||||
'params' => array(
|
||||
'tabs' => '$tabsRelated',
|
||||
'visibleCols' => "$['source']"
|
||||
)
|
||||
);
|
||||
|
||||
switch ($this->cat)
|
||||
{
|
||||
case -4:
|
||||
$lv['params']['note'] = sprintf(Util::$filterResultString, '?spells=-4');
|
||||
break;
|
||||
case 7:
|
||||
if ($this->typeId != 769) // Internal
|
||||
$lv['params']['note'] = sprintf(Util::$filterResultString, '?spells='.$this->cat.'.'.(log($reqClass, 2) + 1).'.'.$this->typeId); // doesn't matter what spell; reqClass should be identical for all Class Spells
|
||||
break;
|
||||
case 9:
|
||||
case 11:
|
||||
$lv['params']['note'] = sprintf(Util::$filterResultString, '?spells='.$this->cat.'.'.$this->typeId);
|
||||
break;
|
||||
}
|
||||
|
||||
$this->lvData[] = $lv;
|
||||
}
|
||||
|
||||
if ($sort)
|
||||
// tab: trainers [npcs]
|
||||
if (in_array($this->cat, [-5, 6, 7, 8, 9, 11]))
|
||||
{
|
||||
$quests = new QuestList(array(['zoneOrSort', -$sort], 0));
|
||||
if (!$quests->error)
|
||||
$list = [];
|
||||
if (@$tt = Util::$trainerTemplates[TYPE_SKILL][$this->typeId])
|
||||
$list = DB::Aowow()->selectCol('SELECT DISTINCT entry FROM npc_trainer WHERE spell IN (?a) AND entry < 200000', $tt);
|
||||
else
|
||||
{
|
||||
$quests->addGlobalsToJScript();
|
||||
$pageData['relTabs'][] = array(
|
||||
'file' => 'quest',
|
||||
'data' => $quests->getListviewData(),
|
||||
$mask = 0;
|
||||
foreach (Util::$skillLineMask[-3] as $idx => $pair)
|
||||
if ($pair[1] == $this->typeId)
|
||||
$mask |= 1 << $idx;
|
||||
|
||||
$list = DB::Aowow()->selectCol('
|
||||
SELECT IF(t1.entry > 200000, t2.entry, t1.entry)
|
||||
FROM npc_trainer t1
|
||||
JOIN aowow_spell s ON s.id = t1.spell
|
||||
LEFT JOIN npc_trainer t2 ON t2.spell = -t1.entry
|
||||
WHERE s.typeCat IN (-11, 9) AND (s.skillLine1 = ?d OR (s.skillLine1 > 0 AND s.skillLine2OrMask = ?d) '.($mask ? ' OR (s.skilllIne1 = -3 AND s.skillLine2OrMask = '.$mask.')' : null).')',
|
||||
$this->typeId,
|
||||
$this->typeId
|
||||
);
|
||||
}
|
||||
|
||||
if ($list)
|
||||
{
|
||||
$trainer = new CreatureList(array(CFG_SQL_LIMIT_NONE, ['ct.id', $list], ['ct.spawns', 0, '>'], ['ct.npcflag', 0x10, '&']));
|
||||
|
||||
if (!$trainer->error)
|
||||
{
|
||||
$this->extendGlobalData($trainer->getJSGlobals());
|
||||
|
||||
$this->lvData[] = array(
|
||||
'file' => 'creature',
|
||||
'data' => $trainer->getListviewData(),
|
||||
'params' => array(
|
||||
'tabs' => '$tabsRelated',
|
||||
'id' => 'trainer',
|
||||
'name' => '$LANG.tab_trainers',
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// tab: quests [quests]
|
||||
if (in_array($this->cat, [9, 11])) // only for professions
|
||||
{
|
||||
$sort = 0;
|
||||
switch ($this->typeId)
|
||||
{
|
||||
case 182: $sort = 24; break; // Herbalism
|
||||
case 356: $sort = 101; break; // Fishing
|
||||
case 164: $sort = 121; break; // Blacksmithing
|
||||
case 171: $sort = 181; break; // Alchemy
|
||||
case 165: $sort = 182; break; // Leatherworking
|
||||
case 202: $sort = 201; break; // Engineering
|
||||
case 197: $sort = 264; break; // Tailoring
|
||||
case 185: $sort = 304; break; // Cooking
|
||||
case 129: $sort = 324; break; // First Aid
|
||||
case 773: $sort = 371; break; // Inscription
|
||||
case 755: $sort = 373; break; // Jewelcrafting
|
||||
}
|
||||
|
||||
if ($sort)
|
||||
{
|
||||
$quests = new QuestList(array(['zoneOrSort', -$sort], CFG_SQL_LIMIT_NONE));
|
||||
if (!$quests->error)
|
||||
{
|
||||
$this->extendGlobalData($quests->getJSGlobals());
|
||||
$this->lvData[] = array(
|
||||
'file' => 'quest',
|
||||
'data' => $quests->getListviewData(),
|
||||
'params' => array(
|
||||
'tabs' => '$tabsRelated',
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// tab: related classes (apply classes from [spells])
|
||||
$class = [];
|
||||
for ($i = 0; $i < 11; $i++)
|
||||
if ($reqClass & (1 << $i))
|
||||
$class[] = $i + 1;
|
||||
|
||||
if ($class)
|
||||
{
|
||||
$classes = new CharClassList(array(['id', $class]));
|
||||
if (!$classes->error)
|
||||
{
|
||||
$this->lvData[] = array(
|
||||
'file' => 'class',
|
||||
'data' => $classes->getListviewData(),
|
||||
'params' => array(
|
||||
'tabs' => '$tabsRelated',
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// tab: related races (apply races from [spells])
|
||||
$race = [];
|
||||
for ($i = 0; $i < 12; $i++)
|
||||
if ($reqRace & (1 << $i))
|
||||
$race[] = $i + 1;
|
||||
|
||||
if ($race)
|
||||
{
|
||||
$races = new CharRaceList(array(['id', $race]));
|
||||
if (!$races->error)
|
||||
{
|
||||
$this->lvData[] = array(
|
||||
'file' => 'race',
|
||||
'data' => $races->getListviewData(),
|
||||
'params' => array(
|
||||
'tabs' => '$tabsRelated',
|
||||
)
|
||||
@@ -318,58 +373,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// tab: related classes (apply classes from [itemset])
|
||||
$class = [];
|
||||
for ($i = 0; $i < 11; $i++)
|
||||
if ($reqClass & (1 << $i))
|
||||
$class[] = $i + 1;
|
||||
|
||||
if ($class)
|
||||
{
|
||||
$classes = new CharClassList(array(['id', $class]));
|
||||
if (!$classes->error)
|
||||
{
|
||||
$pageData['relTabs'][] = array(
|
||||
'file' => 'class',
|
||||
'data' => $classes->getListviewData(),
|
||||
'params' => array(
|
||||
'tabs' => '$tabsRelated',
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// tab: related races (apply races from [itemset])
|
||||
$race = [];
|
||||
for ($i = 0; $i < 12; $i++)
|
||||
if ($reqRace & (1 << $i))
|
||||
$race[] = $i + 1;
|
||||
|
||||
if ($race)
|
||||
{
|
||||
$races = new CharRaceList(array(['id', $race]));
|
||||
if (!$races->error)
|
||||
{
|
||||
$pageData['relTabs'][] = array(
|
||||
'file' => 'race',
|
||||
'data' => $races->getListviewData(),
|
||||
'params' => array(
|
||||
'tabs' => '$tabsRelated',
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$smarty->saveCache($cacheKeyPage, $pageData);
|
||||
}
|
||||
|
||||
$smarty->updatePageVars($pageData['page']);
|
||||
$smarty->assign('community', CommunityContent::getAll(TYPE_SKILL, $_id)); // comments, screenshots, videos
|
||||
$smarty->assign('lang', array_merge(Lang::$main));
|
||||
$smarty->assign('lvData', $pageData['relTabs']);
|
||||
|
||||
// load the page
|
||||
$smarty->display('detail-page-generic.tpl');
|
||||
|
||||
?>
|
||||
|
||||
@@ -4,53 +4,57 @@ if (!defined('AOWOW_REVISION'))
|
||||
die('illegal access');
|
||||
|
||||
|
||||
$cat = Util::extractURLParams($pageParam);
|
||||
$path = [0, 14];
|
||||
$title = [Util::ucFirst(Lang::$game['skills'])];
|
||||
$cacheKey = implode('_', [CACHETYPE_PAGE, TYPE_SKILL, -1, $cat ? $cat[0] : -1, User::$localeId]);
|
||||
$validCats = [-6, -5, -4, 6, 7, 8, 9, 10, 11];
|
||||
|
||||
if (!Util::isValidPage($validCats, $cat))
|
||||
$smarty->error();
|
||||
|
||||
if (!$smarty->loadCache($cacheKey, $pageData))
|
||||
// menuId 14: Skill g_initPath()
|
||||
// tabId 0: Database g_initHeader()
|
||||
class SkillsPage extends GenericPage
|
||||
{
|
||||
$conditions = [['categoryId', 12, '!']]; // DND
|
||||
if ($cat)
|
||||
use ListPage;
|
||||
|
||||
protected $type = TYPE_SKILL;
|
||||
protected $tpl = 'list-page-generic';
|
||||
protected $path = [0, 14];
|
||||
protected $tabId = 0;
|
||||
protected $mode = CACHETYPE_PAGE;
|
||||
protected $validCats = [-6, -5, -4, 6, 7, 8, 9, 10, 11];
|
||||
|
||||
public function __construct($pageCall, $pageParam)
|
||||
{
|
||||
$conditions[] = ['typeCat', $cat[0]];
|
||||
$path[] = $cat[0];
|
||||
array_unshift($title, Lang::$skill['cat'][$cat[0]]);
|
||||
$this->getCategoryFromUrl($pageParam);;
|
||||
|
||||
parent::__construct();
|
||||
|
||||
$this->name = Util::ucFirst(Lang::$game['skills']);
|
||||
}
|
||||
|
||||
$skills = new SkillList($conditions);
|
||||
protected function generateContent()
|
||||
{
|
||||
$conditions = [];
|
||||
if (User::isInGroup(U_GROUP_EMPLOYEE))
|
||||
$conditions[] = ['categoryId', 12, '!']; // GENERIC (DND)
|
||||
|
||||
// menuId 14: Skill g_initPath()
|
||||
// tabId 0: Database g_initHeader()
|
||||
$pageData = array(
|
||||
'page' => array(
|
||||
'title' => implode(' - ', $title),
|
||||
'path' => json_encode($path, JSON_NUMERIC_CHECK),
|
||||
'tab' => 0
|
||||
),
|
||||
'lv' => array(
|
||||
array(
|
||||
'file' => 'skill',
|
||||
'data' => $skills->getListviewData(),
|
||||
'params' => []
|
||||
)
|
||||
)
|
||||
);
|
||||
if ($this->category)
|
||||
$conditions[] = ['typeCat', $this->category[0]];
|
||||
|
||||
$smarty->saveCache($cacheKey, $pageData);
|
||||
$skills = new SkillList($conditions);
|
||||
|
||||
$this->lvData[] = array(
|
||||
'file' => 'skill',
|
||||
'data' => $skills->getListviewData(), // listview content
|
||||
'params' => []
|
||||
);
|
||||
}
|
||||
|
||||
protected function generateTitle()
|
||||
{
|
||||
if ($this->category)
|
||||
array_unshift($this->title, Lang::$skill['cat'][$this->category[0]]);
|
||||
}
|
||||
|
||||
protected function generatePath()
|
||||
{
|
||||
if ($this->category)
|
||||
$this->path[] = $this->category[0];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$smarty->updatePageVars($pageData['page']);
|
||||
$smarty->assign('lang', Lang::$main);
|
||||
$smarty->assign('lvData', $pageData['lv']);
|
||||
|
||||
// load the page
|
||||
$smarty->display('list-page-generic.tpl');
|
||||
|
||||
?>
|
||||
|
||||
@@ -6235,7 +6235,7 @@ Listview.extraCols = {
|
||||
|
||||
id: 'condition',
|
||||
name: LANG.requires,
|
||||
width: '30%',
|
||||
width: '25%',
|
||||
compute: function(row, td) {
|
||||
if (!row.condition || !$WH.is_array(row.condition)) {
|
||||
return;
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
{include file='header.tpl'}
|
||||
|
||||
<div class="main" id="main">
|
||||
<div class="main-precontents" id="main-precontents"></div>
|
||||
<div class="main-contents" id="main-contents">
|
||||
|
||||
{if !empty($announcements)}
|
||||
{foreach from=$announcements item=item}
|
||||
{include file='bricks/announcement.tpl' an=$item}
|
||||
{/foreach}
|
||||
{/if}
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
{include file='bricks/community.tpl'}
|
||||
var g_pageInfo = {ldelim}type: {$type}, typeId: {$typeId}, name: '{$name|escape:"quotes"}'{rdelim};
|
||||
g_initPath({$path});
|
||||
//]]></script>
|
||||
|
||||
{include file='bricks/infobox.tpl'}
|
||||
|
||||
<div class="text">
|
||||
{include file='bricks/headIcons.tpl'}
|
||||
|
||||
{include file='bricks/redButtons.tpl'}
|
||||
|
||||
<h1{if isset($expansion)} class="h1-icon"><span class="icon-{$expansion}-right">{$name}</span>{else}>{$name}{/if}</h1>
|
||||
|
||||
{include file='bricks/article.tpl'}
|
||||
|
||||
{$description}
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
{section name=i loop=$pieces}
|
||||
g_items.add({$pieces[i].id}, {ldelim}name_{$user.language}:'{$pieces[i].name|escape:'javascript'}', quality:{$pieces[i].quality}, icon:'{$pieces[i].icon}', jsonequip:{$pieces[i].json}{rdelim});
|
||||
{/section}
|
||||
//]]></script>
|
||||
|
||||
<table class="iconlist">
|
||||
{section name=i loop=$pieces}
|
||||
<tr><th align="right" id="iconlist-icon{$smarty.section.i.index + 1}"></th><td><span class="q{$pieces[i].quality}"><a href="?item={$pieces[i].id}">{$pieces[i].name}</a></span></td></tr>
|
||||
{/section}
|
||||
</table>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
{section name=i loop=$pieces}
|
||||
$WH.ge('iconlist-icon{$smarty.section.i.index + 1}').appendChild(g_items.createIcon({$pieces[i].id}, 0, 0));
|
||||
{/section}
|
||||
//]]></script>
|
||||
|
||||
{if $unavailable}
|
||||
<div class="pad"></div>
|
||||
<b style="color: red">{$lang._unavailable}</b>
|
||||
{/if}
|
||||
|
||||
<h3>{$lang._setBonuses}{$bonusExt}</h3>
|
||||
|
||||
{$lang._conveyBonus}
|
||||
<ul>
|
||||
{section name=i loop=$spells}
|
||||
<li><div>{$spells[i].bonus} {$lang._pieces}{$lang.colon}<a href="?spell={$spells[i].id}">{$spells[i].desc}</a></div></li>
|
||||
{/section}
|
||||
</ul>
|
||||
|
||||
<h2 class="clear">{$lang.summary}</h2>
|
||||
|
||||
<div id="summary-generic"></div>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
new Summary({ldelim} id: 'itemset', template: 'itemset', parent: 'summary-generic', groups: [[[{']],[['|implode:$compare.items}]]], level: {$compare.level}{rdelim});
|
||||
//]]></script>
|
||||
|
||||
<h2 class="clear">{$lang.related}</h2>
|
||||
</div>
|
||||
|
||||
{include file='bricks/tabsRelated.tpl' tabs=$lvData}
|
||||
|
||||
{include file='bricks/contribute.tpl'}
|
||||
|
||||
</div><!-- main-contents -->
|
||||
</div><!-- main -->
|
||||
|
||||
{include file='footer.tpl'}
|
||||
94
template/pages/itemset.tpl.php
Normal file
94
template/pages/itemset.tpl.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php $this->brick('header'); ?>
|
||||
|
||||
<div class="main" id="main">
|
||||
<div class="main-precontents" id="main-precontents"></div>
|
||||
<div class="main-contents" id="main-contents">
|
||||
|
||||
<?php $this->brick('announcement'); ?>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
<?php
|
||||
$this->brick('community');
|
||||
echo " var g_pageInfo = ".json_encode($this->gPageInfo, JSON_NUMERIC_CHECK).";\n" .
|
||||
" g_initPath(".json_encode($this->path, JSON_NUMERIC_CHECK).");\n";
|
||||
?>
|
||||
//]]></script>
|
||||
|
||||
<?php $this->brick('infobox'); ?>
|
||||
|
||||
<div class="text">
|
||||
<?php
|
||||
$this->brick('redButtons');
|
||||
|
||||
if ($this->expansion):
|
||||
echo ' <h1 class="h1-icon"><span class="icon-'.$this->expansion.'-right">'.$this->name."</span></h1>\n";
|
||||
else:
|
||||
echo ' <h1>'.$this->name."</h1>\n";
|
||||
endif;
|
||||
|
||||
$this->brick('article');
|
||||
|
||||
echo $this->description;
|
||||
?>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
<?php
|
||||
foreach ($this->pieces as $p):
|
||||
echo " g_items.add(".$p['id'].", {name_".User::$localeString.":'".Util::jsEscape($p['name'])."', quality:".$p['quality'].", icon:'".$p['icon']."', jsonequip:".json_encode($p['json'])."});\n";
|
||||
endforeach;
|
||||
?>
|
||||
//]]></script>
|
||||
|
||||
<table class="iconlist">
|
||||
<?php
|
||||
foreach ($this->pieces as $i => $p):
|
||||
echo ' <tr><th align="right" id="iconlist-icon'.($i + 1).'"></th><td><span class="q'.$p['quality'].'"><a href="?item='.$p['id'].'">'.$p['name']."</a></span></td></tr>\n";
|
||||
endforeach;
|
||||
?>
|
||||
</table>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
<?php
|
||||
foreach ($this->pieces as $i => $p):
|
||||
echo " \$WH.ge('iconlist-icon".($i + 1)."').appendChild(g_items.createIcon(".$p['id'].", 0, 0));\n";
|
||||
endforeach;
|
||||
?>
|
||||
//]]></script>
|
||||
|
||||
<?php
|
||||
if ($this->unavailable):
|
||||
?>
|
||||
<div class="pad"></div>
|
||||
<b style="color: red"><?php echo Lang::$itemset['_unavailable']; ?></b>
|
||||
<?php endif; ?>
|
||||
|
||||
<h3><?php echo Lang::$itemset['_setBonuses'].$this->bonusExt; ?></h3>
|
||||
|
||||
<?php echo " ".Lang::$itemset['_conveyBonus']."\n"; ?>
|
||||
<ul>
|
||||
<?php
|
||||
foreach ($this->spells as $i => $s):
|
||||
echo ' <li><div>'.$s['bonus'].' '.Lang::$itemset['_pieces'].Lang::$main['colon'].'<a href="?spell='.$s['id'].'">'.$s['desc']."</a></div></li>\n";
|
||||
endforeach;
|
||||
?>
|
||||
</ul>
|
||||
|
||||
<h2 class="clear"><?php echo Lang::$itemset['summary']; ?></h2>
|
||||
|
||||
<div id="summary-generic"></div>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
new Summary({ id: 'itemset', template: 'itemset', parent: 'summary-generic', groups: <?php echo json_encode($this->compare['items'], JSON_NUMERIC_CHECK).', level: '.$this->compare['level']; ?>});
|
||||
//]]></script>
|
||||
|
||||
<h2 class="clear"><?php echo Lang::$main['related']; ?></h2>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$this->brick('tabsRelated');
|
||||
|
||||
$this->brick('contribute');
|
||||
?>
|
||||
|
||||
</div><!-- main-contents -->
|
||||
</div><!-- main -->
|
||||
|
||||
<?php $this->brick('footer'); ?>
|
||||
@@ -1,114 +0,0 @@
|
||||
{include file='header.tpl'}
|
||||
|
||||
<div class="main" id="main">
|
||||
<div class="main-precontents" id="main-precontents"></div>
|
||||
<div class="main-contents" id="main-contents">
|
||||
|
||||
{if !empty($announcements)}
|
||||
{foreach from=$announcements item=item}
|
||||
{include file='bricks/announcement.tpl' an=$item}
|
||||
{/foreach}
|
||||
{/if}
|
||||
|
||||
<script type="text/javascript">
|
||||
g_initPath({$path}, {if empty($filter.query)} 0 {else} 1 {/if});
|
||||
{if !empty($filter.query)}
|
||||
Menu.modifyUrl(Menu.findItem(mn_database, [2]), {ldelim} filter: '+={$filter.query|escape:'quotes'}' {rdelim}, {ldelim} onAppendCollision: fi_mergeFilterParams, onAppendEmpty: fi_setFilterParams, menuUrl: Menu.getItemUrl(Menu.findItem(mn_database, [2])) {rdelim});
|
||||
{/if}
|
||||
</script>
|
||||
|
||||
<div id="fi" style="display:{if empty($filter.query)}none{else}block{/if};">
|
||||
<form action="?itemsets&filter" method="post" name="fi" onsubmit="return fi_submit(this)" onreset="return fi_reset(this)">
|
||||
<div class="rightpanel">
|
||||
<div style="float: left">{$lang._quality}{$lang.colon}</div>
|
||||
<small><a href="javascript:;" onclick="document.forms['fi'].elements['qu[]'].selectedIndex = -1; return false" onmousedown="return false">{$lang.clear}</a></small>
|
||||
<div class="clear"></div>
|
||||
<select name="qu[]" size="7" multiple="multiple" class="rightselect" style="background-color: #181818">
|
||||
{foreach from=$lang.quality key=i item=str}{if $str}
|
||||
<option value="{$i}" class="q{$i}" {if isset($filter.qu) && in_array($i, (array)$filter.qu)}selected{/if}>{$str}</option>
|
||||
{/if}{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="rightpanel2">
|
||||
<div style="float: left">{$lang.type}{$lang.colon}</div>
|
||||
<small><a href="javascript:;" onclick="document.forms['fi'].elements['ty[]'].selectedIndex = -1; return false" onmousedown="return false">{$lang.clear}</a></small>
|
||||
<div class="clear"></div>
|
||||
<select name="ty[]" size="7" multiple="multiple" class="rightselect">
|
||||
{foreach from=$lang.types key=i item=str}{if $str}
|
||||
<option value="{$i}" {if isset($filter.ty) && in_array($i, (array)$filter.ty)}selected{/if}>{$str}</option>
|
||||
{/if}{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>{$lang.name|ucFirst}{$lang.colon}</td>
|
||||
<td colspan="3"> <input type="text" name="na" size="30" {if isset($filter.na)}value="{$filter.na}" {/if}/></td>
|
||||
</tr><tr>
|
||||
<td class="padded">{$lang.level}{$lang.colon}</td>
|
||||
<td class="padded"> <input type="text" name="minle" maxlength="3" class="smalltextbox2"{if isset($filter.minle)} value="{$filter.minle}"{/if} /> - <input type="text" name="maxle" maxlength="3" class="smalltextbox2"{if isset($filter.maxle)} value="{$filter.maxle}"{/if} /></td>
|
||||
<td class="padded" width="100%">
|
||||
<table><tr>
|
||||
<td> {$lang._reqLevel}{$lang.colon}</td>
|
||||
<td> <input type="text" name="minrl" maxlength="2" class="smalltextbox"{if isset($filter.minrl)} value="{$filter.minrl}"{/if} /> - <input type="text" name="maxrl" maxlength="2" class="smalltextbox"{if isset($filter.maxrl)} value="{$filter.maxrl}"{/if} /></td>
|
||||
</tr></table>
|
||||
</td>
|
||||
</tr><tr>
|
||||
<td class="padded">{$lang.class|ucfirst}{$lang.colon}</td>
|
||||
<td class="padded"> <select name="cl">
|
||||
<option></option>
|
||||
{foreach from=$lang.cl key=i item=str}{if $str}
|
||||
<option value="{$i}" {if isset($filter.cl) && $filter.cl == $i}selected{/if}>{$str}</option>
|
||||
{/if}{/foreach}
|
||||
</select></td>
|
||||
<td class="padded">
|
||||
<table><tr>
|
||||
<td> {$lang._tag}{$lang.colon}</td>
|
||||
<td> <select name="ta">
|
||||
<option></option>
|
||||
{foreach from=$lang.notes key=i item=str}{if $str}
|
||||
<option value="{$i}" {if isset($filter.ta) && $filter.ta == $i}selected{/if}>{$str}</option>
|
||||
{/if}{/foreach}
|
||||
</select></td>
|
||||
</tr></table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div id="fi_criteria" class="padded criteria"><div></div></div>
|
||||
<div><a href="javascript:;" id="fi_addcriteria" onclick="fi_addCriterion(this); return false">{$lang.addFilter}</a></div>
|
||||
|
||||
<div class="padded2">
|
||||
<div style="float: right">{$lang.refineSearch}</div>
|
||||
{$lang.match}{$lang.colon}<input type="radio" name="ma" value="" id="ma-0" {if !isset($filter.ma)}checked="checked"{/if} /><label for="ma-0">{$lang.allFilter}</label><input type="radio" name="ma" value="1" id="ma-1" {if isset($filter.ma)}checked="checked"{/if} /><label for="ma-1">{$lang.oneFilter}</label>
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
<div class="padded">
|
||||
<input type="submit" value="{$lang.applyFilter}" />
|
||||
<input type="reset" value="{$lang.resetForm}" />
|
||||
</div>
|
||||
|
||||
</form>
|
||||
<div class="pad"></div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
fi_init('itemsets');
|
||||
{foreach from=$filter.fi item=str}
|
||||
{$str}
|
||||
{/foreach}
|
||||
//]]></script>
|
||||
|
||||
<div id="lv-generic" class="listview"></div>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
{include file='listviews/itemset.tpl' data=$lvData.data params=$lvData.params}
|
||||
//]]></script>
|
||||
|
||||
<div class="clear"></div>
|
||||
</div><!-- main-contents -->
|
||||
</div><!-- main -->
|
||||
|
||||
{include file='footer.tpl'}
|
||||
133
template/pages/itemsets.tpl.php
Normal file
133
template/pages/itemsets.tpl.php
Normal file
@@ -0,0 +1,133 @@
|
||||
<?php
|
||||
$this->brick('header');
|
||||
$f = $this->filter
|
||||
?>
|
||||
|
||||
<div class="main" id="main">
|
||||
<div class="main-precontents" id="main-precontents"></div>
|
||||
<div class="main-contents" id="main-contents">
|
||||
|
||||
<?php $this->brick('announcement'); ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
g_initPath(<?php echo json_encode($this->path, JSON_NUMERIC_CHECK).', '.(empty($f['query']) ? 0 : 1) ?>);
|
||||
<?php
|
||||
if (!empty($f['query'])):
|
||||
// todo: update menu-class Menu.modifyUrl(Menu.findItem(mn_database, [2]), { filter: '+={$filter.query|escape:'quotes'}' }, { onAppendCollision: fi_mergeFilterParams, onAppendEmpty: fi_setFilterParams, menuUrl: Menu.getItemUrl(Menu.findItem(mn_database, [2])) });
|
||||
endif;
|
||||
?>
|
||||
</script>
|
||||
|
||||
<div id="fi" style="display: <?php echo empty($f['query']) ? 'none' : 'block' ?>;">
|
||||
<form action="?itemsets&filter" method="post" name="fi" onsubmit="return fi_submit(this)" onreset="return fi_reset(this)">
|
||||
<div class="rightpanel">
|
||||
<div style="float: left"><?php echo Lang::$item['_quality'].Lang::$main['colon']; ?></div>
|
||||
<small><a href="javascript:;" onclick="document.forms['fi'].elements['qu[]'].selectedIndex = -1; return false" onmousedown="return false"><?php echo Lang::$main['clear']; ?></a></small>
|
||||
<div class="clear"></div>
|
||||
<select name="qu[]" size="7" multiple="multiple" class="rightselect" style="background-color: #181818">
|
||||
<?php
|
||||
foreach (Lang::$item['quality'] as $i => $str):
|
||||
if ($str):
|
||||
echo ' <option value="'.$i.'" class="q'.$i.'"'.(isset($f['qu']) && in_array($i, (array)$f['qu']) ? ' selected' : null).'>'.$str."</option>\n";
|
||||
endif;
|
||||
endforeach;
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="rightpanel2">
|
||||
<div style="float: left"><?php echo Lang::$game['type'].Lang::$main['colon']; ?></div>
|
||||
<small><a href="javascript:;" onclick="document.forms['fi'].elements['ty[]'].selectedIndex = -1; return false" onmousedown="return false"><?php echo Lang::$main['clear']; ?></a></small>
|
||||
<div class="clear"></div>
|
||||
<select name="ty[]" size="7" multiple="multiple" class="rightselect">
|
||||
<?php
|
||||
foreach (Lang::$itemset['types'] as $i => $str):
|
||||
if ($str):
|
||||
echo ' <option value="'.$i.'"'.(isset($f['ty']) && in_array($i, (array)$f['ty']) ? ' selected' : null).'>'.$str."</option>\n";
|
||||
endif;
|
||||
endforeach;
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><?php echo Util::ucFirst(Lang::$main['name']).Lang::$main['colon']; ?></td>
|
||||
<td colspan="3"> <input type="text" name="na" size="30" <?php echo isset($f['na']) ? 'value="'.Util::htmlEscape($f['na']).'" ' : null; ?>/></td>
|
||||
</tr><tr>
|
||||
<td class="padded"><?php echo Lang::$game['level'].Lang::$main['colon']; ?></td>
|
||||
<td class="padded"> <input type="text" name="minle" maxlength="3" class="smalltextbox2" <?php echo isset($f['minle']) ? 'value="'.$f['minle'].'" ' : null; ?>/> - <input type="text" name="maxle" maxlength="3" class="smalltextbox2" <?php echo isset($f['maxle']) ? 'value="'.$f['maxle'].'" ' : null; ?>/></td>
|
||||
<td class="padded" width="100%">
|
||||
<table><tr>
|
||||
<td> <?php echo Lang::$main['_reqLevel'].Lang::$main['colon']; ?></td>
|
||||
<td> <input type="text" name="minrl" maxlength="2" class="smalltextbox" <?php echo isset($f['minrl']) ? 'value="'.$f['minrl'].'" ' : null; ?>/> - <input type="text" name="maxrl" maxlength="2" class="smalltextbox" <?php echo isset($f['maxrl']) ? 'value="'.$f['maxrl'].'" ' : null; ?>/></td>
|
||||
</tr></table>
|
||||
</td>
|
||||
</tr><tr>
|
||||
<td class="padded"><?php echo Util::ucFirst(Lang::$game['class']).Lang::$main['colon']; ?></td>
|
||||
<td class="padded"> <select name="cl">
|
||||
<option></option>
|
||||
<?php
|
||||
foreach (Lang::$game['cl'] as $i => $str):
|
||||
if ($str):
|
||||
echo ' <option value="'.$i.'"'.(isset($f['cl']) && $i == $f['cl'] ? ' selected' : null).'>'.$str."</option>\n";
|
||||
endif;
|
||||
endforeach;
|
||||
?>
|
||||
</select></td>
|
||||
<td class="padded">
|
||||
<table><tr>
|
||||
<td> <?php echo Lang::$itemset['_tag'].Lang::$main['colon']; ?></td>
|
||||
<td> <select name="ta">
|
||||
<option></option>
|
||||
<?php
|
||||
foreach (Lang::$itemset['notes'] as $i => $str):
|
||||
if ($str):
|
||||
echo ' <option value="'.$i.'"'.(isset($f['ta']) && $i == $f['ta'] ? ' selected' : null).'>'.$str."</option>\n";
|
||||
endif;
|
||||
endforeach;
|
||||
?>
|
||||
</select></td>
|
||||
</tr></table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div id="fi_criteria" class="padded criteria"><div></div></div>
|
||||
<div><a href="javascript:;" id="fi_addcriteria" onclick="fi_addCriterion(this); return false"><?php echo Lang::$main['addFilter']; ?></a></div>
|
||||
|
||||
<div class="padded2">
|
||||
<div style="float: right"><?php echo Lang::$main['refineSearch']; ?></div>
|
||||
<?php echo Lang::$main['match'].Lang::$main['colon']; ?><input type="radio" name="ma" value="" id="ma-0" <?php echo !isset($f['ma']) ? 'checked="checked" ' : null ?>/><label for="ma-0"><?php echo Lang::$main['allFilter']; ?></label><input type="radio" name="ma" value="1" id="ma-1" <?php echo isset($f['ma']) ? 'checked="checked" ' : null ?> /><label for="ma-1"><?php echo Lang::$main['oneFilter']; ?></label>
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
<div class="padded">
|
||||
<input type="submit" value="<?php echo Lang::$main['applyFilter']; ?>" />
|
||||
<input type="reset" value="<?php echo Lang::$main['resetForm']; ?>" />
|
||||
</div>
|
||||
|
||||
</form>
|
||||
<div class="pad"></div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
fi_init('itemsets');
|
||||
<?php
|
||||
foreach ($f['fi'] as $str):
|
||||
echo ' '.$str."\n";
|
||||
endforeach;
|
||||
?>
|
||||
//]]></script>
|
||||
|
||||
<div id="lv-generic" class="listview"></div>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
<?php $this->lvBrick($this->lvData['file'], ['data' => $this->lvData['data'], 'params' => $this->lvData['params']]); ?>
|
||||
//]]></script>
|
||||
|
||||
<div class="clear"></div>
|
||||
</div><!-- main-contents -->
|
||||
</div><!-- main -->
|
||||
|
||||
<?php $this->brick('footer'); ?>
|
||||
@@ -1,40 +1,42 @@
|
||||
{include file='header.tpl'}
|
||||
<?php $this->brick('header'); ?>
|
||||
|
||||
<div class="main" id="main">
|
||||
<div class="main-precontents" id="main-precontents"></div>
|
||||
<div class="main-contents" id="main-contents">
|
||||
|
||||
{if !empty($announcements)}
|
||||
{foreach from=$announcements item=item}
|
||||
{include file='bricks/announcement.tpl' an=$item}
|
||||
{/foreach}
|
||||
{/if}
|
||||
<?php $this->brick('announcement'); ?>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
{include file='bricks/community.tpl'}
|
||||
var g_pageInfo = {ldelim}type: {$type}, typeId: {$typeId}, name: '{$name|escape:"quotes"}'{rdelim};
|
||||
g_initPath({$path});
|
||||
<?php
|
||||
$this->brick('community');
|
||||
echo " var g_pageInfo = ".json_encode($this->gPageInfo, JSON_NUMERIC_CHECK).";\n" .
|
||||
" g_initPath(".json_encode($this->path, JSON_NUMERIC_CHECK).");\n";
|
||||
?>
|
||||
//]]></script>
|
||||
|
||||
{include file='bricks/infobox.tpl'}
|
||||
<?php $this->brick('infobox'); ?>
|
||||
|
||||
<div class="text">
|
||||
{include file='bricks/redButtons.tpl'}
|
||||
<?php $this->brick('redButtons'); ?>
|
||||
|
||||
<h1>{$name}{if $subname} <{$subname}>{/if}</h1>
|
||||
<h1><?php echo $this->name.($this->subname ? ' <'.$this->subname.'>' : null); ?></h1>
|
||||
|
||||
{include file='bricks/article.tpl'}
|
||||
<?php
|
||||
$this->brick('article');
|
||||
|
||||
{if is_array($position)}
|
||||
<div>{$lang.difficultyPH} <a href="?npc={$position[0]}">{$position[1]}</a>.</div>
|
||||
if (is_array($this->position)):
|
||||
echo ' <div>'.Lang::$npc['difficultyPH'].' <a href="?npc='.$this->position[0].'">'.$this->position[1]."</a>.</div>\n";
|
||||
?>
|
||||
<div class="pad"></div>
|
||||
{elseif $position}
|
||||
<div>{#This_NPC_can_be_found_in#} {strip}<span id="locations">
|
||||
<?php
|
||||
elseif (!empty($this->position)):
|
||||
?>
|
||||
<div>{#This_NPC_can_be_found_in#}<span id="locations">
|
||||
{foreach from=$position item=zone name=zone}
|
||||
<a href="javascript:;" onclick="
|
||||
{if $zone.atid}
|
||||
myMapper.update(
|
||||
{ldelim}
|
||||
{
|
||||
zone:{$zone.atid}
|
||||
{if $zone.points}
|
||||
,
|
||||
@@ -43,7 +45,7 @@
|
||||
coords:[
|
||||
{foreach from=$zone.points item=point name=point}
|
||||
[{$point.x},{$point.y},
|
||||
{ldelim}
|
||||
{
|
||||
label:'$<br>
|
||||
<div class=q0>
|
||||
<small>
|
||||
@@ -58,12 +60,12 @@
|
||||
{if isset($point.events)}<br>{$point.events|escape:"quotes"}{/if}
|
||||
</small>
|
||||
</div>',type:'{$point.type}'
|
||||
{rdelim}]
|
||||
}]
|
||||
{if !$smarty.foreach.point.last},{/if}
|
||||
{/foreach}
|
||||
]
|
||||
{/if}
|
||||
{rdelim});
|
||||
});
|
||||
$WH.ge('mapper-generic').style.display='block';
|
||||
{else}
|
||||
$WH.ge('mapper-generic').style.display='none';
|
||||
@@ -72,57 +74,84 @@
|
||||
{$zone.name}</a>{if $zone.population > 1} ({$zone.population}){/if}{if $smarty.foreach.zone.last}.{else}, {/if}
|
||||
{/foreach}
|
||||
</span></div>
|
||||
{/strip}
|
||||
|
||||
<div id="mapper-generic"></div>
|
||||
<div class="clear"></div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var myMapper = new Mapper({ldelim}parent: 'mapper-generic', zone: '{$position[0].atid}'{rdelim});
|
||||
var myMapper = new Mapper({parent: 'mapper-generic', zone: '{$position[0].atid}'});
|
||||
$WH.gE($WH.ge('locations'), 'a')[0].onclick();
|
||||
</script>
|
||||
{else}
|
||||
{$lang.unkPosition}
|
||||
{/if}
|
||||
<?php
|
||||
else:
|
||||
echo ' '.Lang::$npc['unkPosition']."\n";
|
||||
endif;
|
||||
|
||||
{if $quotes}
|
||||
<h3><a class="disclosure-off" onclick="return g_disclose($WH.ge('quotes-generic'), this)">{$lang.quotes} ({$quotes[1]})</a></h3>
|
||||
<div id="quotes-generic" style="display: none"><ul>{strip}
|
||||
{foreach from=$quotes[0] item=group}
|
||||
{if $group|@count > 1}<ul>{/if}
|
||||
<li>
|
||||
{foreach from=$group name=quote item=itr}
|
||||
<div><span class="s{$itr.type}">{if $itr.type != 4}{$name} {$lang.textTypes[$itr.type]}{$lang.colon}{if $itr.lang}[{$itr.lang}] {/if}{/if}{$itr.text}</span></div>
|
||||
{if $smarty.foreach.quote.last}{else}</li><li>{/if}
|
||||
{/foreach}
|
||||
</li>
|
||||
{if $group|@count > 1}</li></ul>{/if}
|
||||
{/foreach}
|
||||
{/strip}</ul></div>
|
||||
{/if}
|
||||
if ($this->quotes[0]):
|
||||
?>
|
||||
<h3><a class="disclosure-off" onclick="return g_disclose($WH.ge('quotes-generic'), this)"><?php echo Lang::$npc['quotes'].' ('.$this->quotes[1]; ?>)</a></h3>
|
||||
<div id="quotes-generic" style="display: none"><ul>
|
||||
<?php
|
||||
foreach ($this->quotes[0] as $group):
|
||||
if (count($group) > 1 && count($this->quotes[0]) > 1):
|
||||
echo "<ul>\n";
|
||||
endif;
|
||||
|
||||
{if $reputation}
|
||||
<h3>{$lang.gains}</h3>
|
||||
echo '<li>';
|
||||
|
||||
{$lang.gainsDesc}{$lang.colon}
|
||||
{foreach from=$reputation item=set}
|
||||
{if $reputation|@count > 1}<ul><li><span class="rep-difficulty">{$set[0]}</span></li>{/if}
|
||||
<ul>
|
||||
{foreach from=$set[1] item=itr}
|
||||
<li><div{if $itr.qty < 0} class="reputation-negative-amount"{/if}><span>{$itr.qty}</span> {$lang.repWith} <a href="?faction={$itr.id}">{$itr.name}</a>{if $itr.cap && $itr.qty > 0} ({$lang.stopsAt|@sprintf:$itr.cap}){/if}</div></li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
{if $reputation|@count > 1}</ul>{/if}
|
||||
{/foreach}
|
||||
$last = end($group);
|
||||
foreach ($group as $itr):
|
||||
echo '<div><span class="s'.$itr['type'].'">'.($itr['type'] != 4 ? $this->name.' '.Lang::$npc['textTypes'][$itr['type']].Lang::$main['colon'].($itr['lang'] ? '['.$itr['lang'].']' : null) : null).$itr['text'].'</span></div>';
|
||||
echo ($itr == $last) ? null : "</li>\n<li>";
|
||||
endforeach;
|
||||
|
||||
{/if}
|
||||
<h2 class="clear">{$lang.related}</h2>
|
||||
echo "</li>\n";
|
||||
|
||||
if (count($group) > 1 && count($this->quotes[0]) > 1):
|
||||
echo "</ul>\n";
|
||||
endif;
|
||||
|
||||
endforeach;
|
||||
?>
|
||||
</ul></div>
|
||||
<?php
|
||||
endif;
|
||||
|
||||
if ($this->reputation):
|
||||
?>
|
||||
<h3><?php echo Lang::$main['gains']; ?></h3>
|
||||
<?php
|
||||
echo Lang::$npc['gainsDesc'].Lang::$main['colon'];
|
||||
|
||||
foreach ($this->reputation as $set):
|
||||
if (count($this->reputation) > 1):
|
||||
echo '<ul><li><span class="rep-difficulty">'.$set[0].'</span></li>';
|
||||
endif;
|
||||
|
||||
echo '<ul>';
|
||||
|
||||
foreach ($set[1] as $itr):
|
||||
echo '<li><div'.($itr['qty'] < 0 ? ' class="reputation-negative-amount"' : null).'><span>'.$itr['qty'].'</span> '.Lang::$npc['repWith'] .
|
||||
' <a href="?faction='.$itr['id'].'">'.$itr['name'].'</a>'.($itr['cap'] && $itr['qty'] > 0 ? ' ('.sprintf(Lang::$npc['stopsAt'], $itr['cap']).')' : null).'</div></li>';
|
||||
endforeach;
|
||||
|
||||
echo '</ul>';
|
||||
|
||||
if (count($this->reputation) > 1):
|
||||
echo '</ul>';
|
||||
endif;
|
||||
endforeach;
|
||||
endif;
|
||||
?>
|
||||
<h2 class="clear"><?php echo Lang::$main['related']; ?></h2>
|
||||
</div>
|
||||
|
||||
{include file='bricks/tabsRelated.tpl' tabs=$lvData}
|
||||
|
||||
{include file='bricks/contribute.tpl'}
|
||||
<?php
|
||||
$this->brick('tabsRelated');
|
||||
|
||||
$this->brick('contribute');
|
||||
?>
|
||||
</div><!-- main-contents -->
|
||||
</div><!-- main -->
|
||||
|
||||
{include file='footer.tpl'}
|
||||
<?php $this->brick('footer'); ?>
|
||||
@@ -1,112 +0,0 @@
|
||||
{include file='header.tpl'}
|
||||
|
||||
<div class="main" id="main">
|
||||
<div class="main-precontents" id="main-precontents"></div>
|
||||
<div class="main-contents" id="main-contents">
|
||||
|
||||
{if !empty($announcements)}
|
||||
{foreach from=$announcements item=item}
|
||||
{include file='bricks/announcement.tpl' an=$item}
|
||||
{/foreach}
|
||||
{/if}
|
||||
|
||||
<script type="text/javascript">
|
||||
g_initPath({$path}, {if empty($filter.query)} 0 {else} 1 {/if});
|
||||
{if !empty($filter.query)}
|
||||
Menu.modifyUrl(Menu.findItem(mn_database, [4]), {ldelim} filter: '+={$filter.query|escape:'quotes'}' {rdelim}, {ldelim} onAppendCollision: fi_mergeFilterParams, onAppendEmpty: fi_setFilterParams, menuUrl: Menu.getItemUrl(Menu.findItem(mn_database, [4])) {rdelim});
|
||||
{/if}
|
||||
</script>
|
||||
|
||||
<div id="fi" style="display: {if empty($filter.query)}none{else}block{/if};">
|
||||
<form action="?npcs{$subCat}&filter" method="post" name="fi" onsubmit="return fi_submit(this)" onreset="return fi_reset(this)">
|
||||
<div class="rightpanel">
|
||||
<div style="float: left">{$lang.classification}{$lang.colon}</div>
|
||||
<small><a href="javascript:;" onclick="document.forms['fi'].elements['cl[]'].selectedIndex = -1; return false" onmousedown="return false">{$lang.clear}</a></small>
|
||||
<div class="clear"></div>
|
||||
<select name="cl[]" size="5" multiple="multiple" class="rightselect" style="width: 9.5em">
|
||||
{foreach from=$lang.rank key=i item=str}{if $str}
|
||||
<option value="{$i}" {if isset($filter.cl) && in_array($i, (array)$filter.cl)}selected{/if}>{$str}</option>
|
||||
{/if}{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
{if $petFamPanel}
|
||||
<div class="rightpanel2">
|
||||
<div style="float: left">{$lang.petFamily}{$lang.colon}</div><small><a href="javascript:;" onclick="document.forms['fi'].elements['fa[]'].selectedIndex = -1; return false" onmousedown="return false">{$lang.clear}</a></small>
|
||||
<div class="clear"></div>
|
||||
<select name="fa[]" size="7" multiple="multiple" class="rightselect">
|
||||
{foreach from=$lang.fa key=i item=str}{if $str}
|
||||
<option value="{$i}" {if isset($filter.fa) && in_array($i, (array)$filter.fa)}selected{/if}>{$str}</option>
|
||||
{/if}{/foreach}
|
||||
</select>
|
||||
</div>
|
||||
{/if}
|
||||
<table>
|
||||
<tr>
|
||||
<td>{$lang.name|ucFirst}{$lang.colon}</td>
|
||||
<td colspan="2">
|
||||
<table><tr>
|
||||
<td> <input type="text" name="na" size="30" {if isset($filter.na)}value="{$filter.na|escape:'html'}" {/if}/></td>
|
||||
<td> <input type="checkbox" name="ex" value="on" id="npc-ex" {if isset($filter.ex)}checked="checked" {/if}/></td>
|
||||
<td><label for="npc-ex"><span class="tip" onmouseover="$WH.Tooltip.showAtCursor(event, LANG.tooltip_extendednpcsearch, 0, 0, 'q')" onmousemove="$WH.Tooltip.cursorUpdate(event)" onmouseout="$WH.Tooltip.hide()">{$lang.extSearch}</span></label></td>
|
||||
</tr></table>
|
||||
</td>
|
||||
</tr><tr>
|
||||
<td class="padded">{$lang.level}{$lang.colon}</td>
|
||||
<td class="padded"> <input type="text" name="minle" maxlength="2" class="smalltextbox" {if isset($filter.minle)}value="{$filter.minle}" {/if}/> - <input type="text" name="maxle" maxlength="2" class="smalltextbox" {if isset($filter.maxle)}value="{$filter.maxle}" {/if}/></td>
|
||||
<td class="padded" width="100%">
|
||||
<table><tr>
|
||||
<td> {$lang.react}{$lang.colon}</td>
|
||||
<td> <select name="ra" onchange="fi_dropdownSync(this)" onkeyup="fi_dropdownSync(this)" style="background-color: #181818" {if isset($filter.ra)}class="q{if $filter.ra == 1}2{elseif $filter.ra == -1}10{/if}"{/if}>
|
||||
<option></option>
|
||||
<option value="1" class="q2"{if isset($filter.ra) && $filter.ra == 1} selected{/if}>A</option>
|
||||
<option value="0" class="q"{if isset($filter.ra) && $filter.ra == 0} selected{/if}>A</option>
|
||||
<option value="-1" class="q10"{if isset($filter.ra) && $filter.ra == -1} selected{/if}>A</option>
|
||||
</select>
|
||||
<select name="rh" onchange="fi_dropdownSync(this)" onkeyup="fi_dropdownSync(this)" style="background-color: #181818" {if isset($filter.rh)}class="q{if $filter.rh == 1}2{elseif $filter.rh == -1}10{/if}"{/if}>
|
||||
<option></option>
|
||||
<option value="1" class="q2"{if isset($filter.rh) && $filter.rh == 1} selected{/if}>H</option>
|
||||
<option value="0" class="q"{if isset($filter.rh) && $filter.rh == 0} selected{/if}>H</option>
|
||||
<option value="-1" class="q10"{if isset($filter.rh) && $filter.rh == -1} selected{/if}>H</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr></table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div id="fi_criteria" class="padded criteria"><div></div></div>
|
||||
<div><a href="javascript:;" id="fi_addcriteria" onclick="fi_addCriterion(this); return false">{$lang.addFilter}</a></div>
|
||||
|
||||
<div class="padded2 clear">
|
||||
<div style="float: right">{$lang.refineSearch}</div>
|
||||
{$lang.match}{$lang.colon}<input type="radio" name="ma" value="" id="ma-0" {if !isset($filter.ma)}checked="checked"{/if} /><label for="ma-0">{$lang.allFilter}</label><input type="radio" name="ma" value="1" id="ma-1" {if isset($filter.ma)}checked="checked"{/if} /><label for="ma-1">{$lang.oneFilter}</label>
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
<div class="padded">
|
||||
<input type="submit" value="{$lang.applyFilter}" />
|
||||
<input type="reset" value="{$lang.resetForm}" />
|
||||
</div>
|
||||
|
||||
</form>
|
||||
<div class="pad"></div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
fi_init('npcs');
|
||||
{foreach from=$filter.fi item=str}
|
||||
{$str}
|
||||
{/foreach}
|
||||
//]]></script>
|
||||
|
||||
<div id="lv-generic" class="listview"></div>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
{include file='listviews/creature.tpl' data=$lvData.data params=$lvData.params}
|
||||
//]]></script>
|
||||
|
||||
<div class="clear"></div>
|
||||
</div><!-- main-contents -->
|
||||
</div><!-- main -->
|
||||
|
||||
{include file='footer.tpl'}
|
||||
123
template/pages/npcs.tpl.php
Normal file
123
template/pages/npcs.tpl.php
Normal file
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
$this->brick('header');
|
||||
$f = $this->filter; // shorthand
|
||||
?>
|
||||
|
||||
<div class="main" id="main">
|
||||
<div class="main-precontents" id="main-precontents"></div>
|
||||
<div class="main-contents" id="main-contents">
|
||||
|
||||
<?php $this->brick('announcement'); ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
g_initPath(<?php echo json_encode($this->path, JSON_NUMERIC_CHECK).', '.(empty($f['query']) ? 0 : 1) ?>);
|
||||
<?php
|
||||
if (!empty($f['query'])):
|
||||
// todo: update menu-class Menu.modifyUrl(Menu.findItem(mn_database, [4]), { filter: '+={$filter.query|escape:'quotes'}' }, { onAppendCollision: fi_mergeFilterParams, onAppendEmpty: fi_setFilterParams, menuUrl: Menu.getItemUrl(Menu.findItem(mn_database, [45])) });
|
||||
endif;
|
||||
?>
|
||||
</script>
|
||||
|
||||
<div id="fi" style="display: <?php echo empty($f['query']) ? 'none' : 'block' ?>;">
|
||||
<form action="?npcs<?php echo $this->subCat; ?>&filter" method="post" name="fi" onsubmit="return fi_submit(this)" onreset="return fi_reset(this)">
|
||||
<div class="rightpanel">
|
||||
<div style="float: left"><?php echo Lang::$npc['classification'].Lang::$main['colon']; ?></div>
|
||||
<small><a href="javascript:;" onclick="document.forms['fi'].elements['cl[]'].selectedIndex = -1; return false" onmousedown="return false"><?php echo Lang::$main['clear']; ?></a></small>
|
||||
<div class="clear"></div>
|
||||
<select name="cl[]" size="5" multiple="multiple" class="rightselect" style="width: 9.5em">
|
||||
<?php
|
||||
foreach (Lang::$npc['rank'] as $i => $str):
|
||||
if ($str):
|
||||
echo ' <option value="'.$i.'"'.(isset($f['cl']) && in_array($i, (array)$f['cl']) ? ' selected' : null).'>'.$str."</option>\n";
|
||||
endif;
|
||||
endforeach;
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
<?php if ($this->petFamPanel): ?>
|
||||
<div class="rightpanel2">
|
||||
<div style="float: left"><?php echo Lang::$npc['petFamily'].Lang::$main['colon']; ?></div><small><a href="javascript:;" onclick="document.forms['fi'].elements['fa[]'].selectedIndex = -1; return false" onmousedown="return false"><?php echo Lang::$main['clear']; ?></a></small>
|
||||
<div class="clear"></div>
|
||||
<select name="fa[]" size="7" multiple="multiple" class="rightselect">
|
||||
<?php
|
||||
foreach (Lang::$game['fa'] as $i => $str):
|
||||
if ($str):
|
||||
echo ' <option value="'.$i.'"'.(isset($f['fa']) && in_array($i, (array)$f['fa']) ? ' selected' : null).'>'.$str."</option>\n";
|
||||
endif;
|
||||
endforeach;
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<table>
|
||||
<tr>
|
||||
<td><?php echo Util::ucFirst(Lang::$main['name']).Lang::$main['colon']; ?></td>
|
||||
<td colspan="2">
|
||||
<table><tr>
|
||||
<td> <input type="text" name="na" size="30" <?php echo isset($f['na']) ? 'value="'.Util::htmlEscape($f['na']).'" ' : null; ?>/></td>
|
||||
<td> <input type="checkbox" name="ex" value="on" id="npc-ex" <?php echo isset($f['ex']) ? 'checked="checked" ' : null; ?>/></td>
|
||||
<td><label for="npc-ex"><span class="tip" onmouseover="$WH.Tooltip.showAtCursor(event, LANG.tooltip_extendednpcsearch, 0, 0, 'q')" onmousemove="$WH.Tooltip.cursorUpdate(event)" onmouseout="$WH.Tooltip.hide()"><?php echo Lang::$main['extSearch']; ?></span></label></td>
|
||||
</tr></table>
|
||||
</td>
|
||||
</tr><tr>
|
||||
<td class="padded"><?php echo Lang::$game['level'].Lang::$main['colon']; ?></td>
|
||||
<td class="padded"> <input type="text" name="minle" maxlength="2" class="smalltextbox" <?php echo isset($f['minle']) ? 'value="'.$f['minle'].'" ' : null; ?>/> - <input type="text" name="maxle" maxlength="2" class="smalltextbox" <?php echo isset($f['maxle']) ? 'value="'.$f['maxle'].'" ' : null; ?>/></td>
|
||||
<td class="padded" width="100%">
|
||||
<table><tr>
|
||||
<td> <?php echo Lang::$npc['react'].Lang::$main['colon']; ?></td>
|
||||
<td> <select name="ra" onchange="fi_dropdownSync(this)" onkeyup="fi_dropdownSync(this)" style="background-color: #181818"<?php echo isset($f['ra']) ? ' class="q'.($f['ra'] == 1 ? '2' : ($f['ra'] == -1 ? '10' : null)).'"' : null; ?>>
|
||||
<option></option>
|
||||
<option value="1" class="q2"<?php echo isset($f['ra']) && $f['ra'] == 1 ? ' selected' : null; ?>>A</option>
|
||||
<option value="0" class="q"<?php echo isset($f['ra']) && $f['ra'] == 0 ? ' selected' : null; ?>>A</option>
|
||||
<option value="-1" class="q10"<?php echo isset($f['ra']) && $f['ra'] == -1 ? ' selected' : null; ?>>A</option>
|
||||
</select>
|
||||
<select name="rh" onchange="fi_dropdownSync(this)" onkeyup="fi_dropdownSync(this)" style="background-color: #181818"<?php echo isset($f['rh']) ? ' class="q'.($f['rh'] == 1 ? '2' : ($f['rh'] == -1 ? '10' : null)).'"' : null; ?>>
|
||||
<option></option>
|
||||
<option value="1" class="q2"<?php echo isset($f['rh']) && $f['rh'] == 1 ? ' selected' : null; ?>>H</option>
|
||||
<option value="0" class="q"<?php echo isset($f['rh']) && $f['rh'] == 0 ? ' selected' : null; ?>>H</option>
|
||||
<option value="-1" class="q10"<?php echo isset($f['rh']) && $f['rh'] == -1 ? ' selected' : null; ?>>H</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr></table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div id="fi_criteria" class="padded criteria"><div></div></div>
|
||||
<div><a href="javascript:;" id="fi_addcriteria" onclick="fi_addCriterion(this); return false"><?php echo Lang::$main['addFilter']; ?></a></div>
|
||||
|
||||
<div class="padded2 clear">
|
||||
<div style="float: right"><?php echo Lang::$main['refineSearch']; ?></div>
|
||||
<?php echo Lang::$main['match'].Lang::$main['colon']; ?><input type="radio" name="ma" value="" id="ma-0" <?php echo !isset($f['ma']) ? 'checked="checked" ' : null ?>/><label for="ma-0"><?php echo Lang::$main['allFilter']; ?></label><input type="radio" name="ma" value="1" id="ma-1" <?php echo isset($f['ma']) ? 'checked="checked" ' : null ?> /><label for="ma-1"><?php echo Lang::$main['oneFilter']; ?></label>
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
<div class="padded">
|
||||
<input type="submit" value="<?php echo Lang::$main['applyFilter']; ?>" />
|
||||
<input type="reset" value="<?php echo Lang::$main['resetForm']; ?>" />
|
||||
</div>
|
||||
|
||||
</form>
|
||||
<div class="pad"></div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
fi_init('npcs');
|
||||
<?php
|
||||
foreach ($f['fi'] as $str):
|
||||
echo ' '.$str."\n";
|
||||
endforeach;
|
||||
?>
|
||||
//]]></script>
|
||||
|
||||
<div id="lv-generic" class="listview"></div>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
<?php $this->lvBrick($this->lvData['file'], ['data' => $this->lvData['data'], 'params' => $this->lvData['params']]); ?>
|
||||
//]]></script>
|
||||
|
||||
<div class="clear"></div>
|
||||
</div><!-- main-contents -->
|
||||
</div><!-- main -->
|
||||
|
||||
<?php $this->brick('footer'); ?>
|
||||
Reference in New Issue
Block a user