diff --git a/includes/class.achievement.php b/includes/class.achievement.php
index d2c56c8c..0609dc4c 100644
--- a/includes/class.achievement.php
+++ b/includes/class.achievement.php
@@ -13,9 +13,9 @@ class AchievementList extends BaseType
protected $setupQuery = 'SELECT *, id AS ARRAY_KEY FROM ?_achievement WHERE [filter] [cond] GROUP BY Id ORDER BY `orderInGroup` ASC';
protected $matchQuery = 'SELECT COUNT(1) FROM ?_achievement WHERE [filter] [cond]';
- public function __construct($conditions)
+ public function __construct($conditions, $applyFilter = false)
{
- parent::__construct($conditions);
+ parent::__construct($conditions, $applyFilter);
// post processing
while ($this->iterate())
diff --git a/includes/class.filter.php b/includes/class.filter.php
index 143ec2bf..4c41d1f3 100644
--- a/includes/class.filter.php
+++ b/includes/class.filter.php
@@ -251,4 +251,157 @@ abstract class Filter
abstract protected function createSQLForValues($vl);
}
+
+class AchievementListFilter extends Filter
+{
+ protected function createSQLForCriterium($cr)
+ {
+ if ($r = $this->createSQLForCommunity($cr))
+ return $r;
+
+ switch ($cr[0])
+ {
+ case 2: // gives a reward [y|n]
+ return 'reward_loc0 '.($this->int2Bool($cr[1]) ? '<>' : '=').' \'\'';
+ case 3: // reward text [str]
+ return 'reward_loc'.User::$localeId.' LIKE \'%'.Util::sqlEscape($cr[2]).'%\'';
+ // case 4: // location [int]
+ // return ''; // no plausible locations parsed yet
+ case 5: // first in series [y|n]
+ return $this->int2Bool($cr[1]) ? '(series <> 0 AND (series & 0xFFFF0000) = 0)' : '(series & 0xFFFF0000) <> 0';
+ case 6: // last in series [y|n]
+ return $this->int2Bool($cr[1]) ? '(series <> 0 AND (series & 0xFFFF) = 0)' : '(series & 0xFFFF) <> 0';
+ case 7: // part of series [y|n]
+ return 'series '.($this->int2Bool($cr[1]) ? '<>' : '=').' 0';
+ case 9: // Id [op] [int]
+ return 'id '.$this->int2Op($cr[1]).' '.intVal($cr[2]);
+ case 10: // Icon [str]
+ return 'iconString LIKE \'%'.Util::sqlEscape($cr[2]).'%\'';
+ // case 11: // Related Event [int]
+ // return ''; // >0:holidayId; -2323:any; -2324:none
+ case 18: // flags (staff only)
+ if (User::isInGroup(U_GROUP_STAFF))
+ return 'flags &'.(1 << max($cr[1] - 1, 0)) ;
+ default:
+ return '1';
+ }
+ }
+
+ protected function createSQLForValues($vl)
+ {
+ $parts = [];
+
+ // name ex: +description, +rewards
+ if (isset($vl['na']))
+ {
+ if (isset($vl['ex']) && $vl['ex'] == 'on')
+ $parts[] = '(name_loc'.User::$localeId.' LIKE "%'.Util::sqlEscape($vl['na']).'%" OR description_loc'.User::$localeId.' LIKE "%'.Util::sqlEscape($vl['na']).'%" OR reward_loc'.User::$localeId.' LIKE "%'.Util::sqlEscape($vl['na']).'%")';
+ else
+ $parts[] = 'name_loc'.User::$localeId.' LIKE "%'.Util::sqlEscape($vl['na']).'%"';
+ }
+
+ // points min
+ if (isset($vl['minpt']))
+ $parts[] = 'points >= '.intVal($vl['minpt']);
+
+ // points max
+ if (isset($vl['maxpt']))
+ $parts[] = 'points <= '.intVal($vl['maxpt']);
+
+ // faction (side)
+ if (isset($vl['si']))
+ {
+ if ($vl['si'] == 3) // both
+ $parts[] = 'faction = '.intVal($vl['si']);
+ else if ($vl['si'] > 0) // faction, inclusive both
+ $parts[] = '(faction = 3 OR faction = '.intVal($vl['si']).')';
+ else if ($vl['si'] < 0) // faction, exclusive both
+ $parts[] = 'faction = '.intVal(-$vl['si']);
+
+ }
+
+ return $parts;
+ }
+}
+
+
+// missing filter: "Available to Players"
+class ItemsetListFilter extends Filter
+{
+ protected function createSQLForCriterium($cr)
+ {
+ if ($r = $this->createSQLForCommunity($cr))
+ return $r;
+
+ switch ($cr[0])
+ {
+ case 2: // Id
+ return 'id '.$this->int2Op($cr[1]).' '.intVal($cr[2]);
+ case 3: // pieces [int]
+ return '(IF(item1 > 0, 1, 0) + IF(item2 > 0, 1, 0) + IF(item3 > 0, 1, 0) + IF(item4 > 0, 1, 0) + IF(item5 > 0, 1, 0) +
+ IF(item6 > 0, 1, 0) + IF(item7 > 0, 1, 0) + IF(item8 > 0, 1, 0) + IF(item9 > 0, 1, 0) + IF(item10 > 0, 1, 0)) ' .$this->int2Op($cr[1]).' '.intVal($cr[2]);
+ case 4: // bonustext [str]
+ return 'bonusText_loc'.User::$localeId.' LIKE \'%'.Util::sqlEscape($cr[2]).'%\'';
+ case 5: // heroic [y|n]
+ return 'heroic = '.($cr[1] == 1 ? '1' : '0');
+ case 6: // related event [int]
+ $hId = intVal($cr[1]); // >0:holidayId; -2323:any; -2324:none
+ if ($hId == -2323)
+ return 'holidayId <> 0';
+
+ if ($hId == -2324)
+ $hId = 0;
+
+ return 'holidayId = '.$hId;
+ // case 12: // available to players [y|n]
+ // return ''; // ugh .. scan loot, quest and vendor templates and write to ?_itemset
+ default:
+ return '1';
+ }
+ }
+
+ protected function createSQLForValues($vl)
+ {
+ $parts = [];
+
+ //string (extended)
+ if (isset($vl['na']))
+ $parts[] = 'name_loc'.User::$localeId.' LIKE "%'.Util::sqlEscape($vl['na']).'%"';
+
+ // quality [list]
+ if (isset($vl['qu']))
+ $parts[] = 'quality IN ('.implode(', ', (array)$vl['qu']).')';
+
+ // type
+ if (isset($vl['ty']))
+ $parts[] = 'type IN ('.implode(', ', (array)$vl['ty']).')';
+
+ // itemLevel min
+ if (isset($vl['minle']))
+ $parts[] = 'minLevel >= '.intVal($vl['minle']);
+
+ // itemLevel max
+ if (isset($vl['maxle']))
+ $parts[] = 'maxLevel <= '.intVal($vl['maxle']);
+
+ // reqLevel min
+ if (isset($vl['minrl']))
+ $parts[] = 'i.reqLevel <= '.intVal($vl['minle']);
+
+ // reqLevel max
+ if (isset($vl['maxrl']))
+ $parts[] = 'i.reqLevel <= '.intVal($vl['maxle']);
+
+ // class
+ if (isset($vl['cl']))
+ $parts[] = 'classMask & '.$this->list2Mask($vl['cl'] - 1);
+
+ // tag
+ if (isset($vl['ta']))
+ $parts[] = 'contentGroup = '.$vl['ta'];
+
+ return $parts;
+ }
+}
+
?>
diff --git a/includes/class.quest.php b/includes/class.quest.php
index 77264d01..bcaf4530 100644
--- a/includes/class.quest.php
+++ b/includes/class.quest.php
@@ -93,7 +93,7 @@ class QuestList extends BaseType
while ($this->iterate())
{
- $set = array(
+ $data[$this->id] = array(
'category' => $this->cat1,
'category2' => $this->cat2,
'id' => $this->id,
@@ -114,13 +114,13 @@ class QuestList extends BaseType
$choices[] = [$this->curTpl['RewardChoiceItemId'.$i], $this->curTpl['RewardChoiceItemCount'.$i]];
if ($rewards)
- $set['itemrewards'] = $rewards;
+ $data[$this->id]['itemrewards'] = $rewards;
if ($choices)
- $set['itemchoices'] = $choices;
+ $data[$this->id]['itemchoices'] = $choices;
if ($this->curTpl['RewardTitleId'])
- $set['titlereward'] = $this->curTpl['RewardTitleId'];
+ $data[$this->id]['titlereward'] = $this->curTpl['RewardTitleId'];
// todo reprewards .. accesses QuestFactionReward.dbc
}
diff --git a/pages/achievement.php b/pages/achievement.php
index 8f07b25c..86e122a3 100644
--- a/pages/achievement.php
+++ b/pages/achievement.php
@@ -56,7 +56,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
if ($acv->error)
$smarty->notFound(Lang::$achievement['achievement']);
- $pageData['path'] = [];
+ $pageData['path'] = [];
$pageData['title'] = [ucfirst(Lang::$achievement['achievement'])];
// create page title and path
@@ -75,17 +75,18 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
$acv->addRewardsToJscript($pageData);
$pageData['page'] = $acv->getDetailedData()[$id];
$acv->reset();
+
// infobox content
switch ($acv->getField('faction'))
{
case 0:
- $pageData['page']['infoBox'][] = Lang::$main['side'].': '.Lang::$game['alliance'].'';
+ $pageData['page']['infoBox'][] = Lang::$main['side'].': '.Lang::$game['si'][SIDE_ALLIANCE].'';
break;
case 1:
- $pageData['page']['infoBox'][] = Lang::$main['side'].': '.Lang::$game['horde'].'';
+ $pageData['page']['infoBox'][] = Lang::$main['side'].': '.Lang::$game['si'][SIDE_HORDE].'';
break;
default: // case 3
- $pageData['page']['infoBox'][] = Lang::$main['side'].': '.Lang::$main['both'];
+ $pageData['page']['infoBox'][] = Lang::$main['side'].': '.Lang::$game['si'][SIDE_BOTH];
}
// todo: crosslink with charactersDB to check if realmFirsts are still available
@@ -98,7 +99,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
['id', $id, '!']
);
$saList = new AchievementList($conditions);
- $pageData['page']['saData'] = $saList->getListviewData();
+ $pageData['page']['saData'] = $saList->getListviewData();
$pageData['page']['saParams'] = array(
'id' => 'see-also',
'name' => '$LANG.tab_seealso',
@@ -116,7 +117,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
if (!empty($refs))
{
$coList = new AchievementList(array(['id', $refs]));
- $pageData['page']['coData'] = $coList->getListviewData();
+ $pageData['page']['coData'] = $coList->getListviewData();
$pageData['page']['coParams'] = array(
'id' => 'criteria-of',
'name' => '$LANG.tab_criteriaof',
@@ -149,7 +150,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
{
// hide hidden criteria for regular users (really do..?)
// if (($crt['complete_flags'] & ACHIEVEMENT_CRITERIA_FLAG_HIDDEN) && User::$perms > 0)
- // continue;
+ // continue;
// alternative display option
$displayMoney = $crt['complete_flags'] & ACHIEVEMENT_CRITERIA_FLAG_MONEY_COUNTER;
@@ -328,10 +329,10 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
if ($acv->getField('series'))
{
$pageData['page']['series'] = array(
- array(
- 'id' => $id,
- 'name' => $acv->names[$id],
- 'parent' => $acv->getField('series') >> 16,
+ array(
+ 'id' => $id,
+ 'name' => $acv->names[$id],
+ 'parent' => $acv->getField('series') >> 16,
)
);
$tmp = $pageData['page']['series'][0];
diff --git a/pages/achievements.php b/pages/achievements.php
new file mode 100644
index 00000000..13df13db
--- /dev/null
+++ b/pages/achievements.php
@@ -0,0 +1,136 @@
+ true,
+ 96 => [14861, 14862, 14863],
+ 97 => [14777, 14778, 14779, 14780],
+ 95 => [165, 14801, 14802, 14803, 14804, 14881, 14901, 15003],
+ 168 => [14808, 14805, 14806, 14921, 14922, 14923, 14961, 14962, 15001, 15002, 15041, 15042],
+ 169 => [170, 171, 172],
+ 201 => [14864, 14865, 14866],
+ 155 => [160, 187, 159, 163, 161, 162, 158, 14981, 156, 14941],
+ 81 => true,
+ 1 => array (
+ 130 => [140, 145, 147, 191],
+ 141 => true,
+ 128 => [135, 136, 137],
+ 122 => [123, 124, 125, 126, 127],
+ 133 => true,
+ 14807 => [14821, 14822, 14823, 14963, 15021, 15062],
+ 132 => [178, 173],
+ 134 => true,
+ 131 => true,
+ 21 => [152, 153, 154]
+ )
+);
+
+$valid = false;
+switch (count($cats))
+{
+ case 0:
+ $valid = true;
+ case 1:
+ $valid = !$cats[0] || isset($validCats[$cats[0]]);
+ break;
+ case 2:
+ $valid = $cats[0] == 1 ? isset($validCats[$cats[0]][$cats[1]]) : isset($validCats[$cats[0]]) && in_array($cats[1], $validCats[$cats[0]]);
+ break;
+ case 3:
+ $valid = $cats[0] == 1 ? isset($validCats[$cats[0]][$cats[1]]) && in_array($cats[2], $validCats[$cats[0]][$cats[1]]) : false;
+ break;
+}
+if (!$valid)
+ $smarty->error();
+
+if (!$smarty->loadCache($cacheKey, $pageData))
+{
+ // include child categories if current category is empty
+ $condition = !$cats[0] ? null : (int)end($cats);
+ $acvList = new AchievementList($condition ? [['category', $condition]] : [], true);
+ if (!$acvList->matches)
+ {
+ $curCats = $catList = [$condition];
+ while ($curCats)
+ {
+ $curCats = DB::Aowow()->SelectCol('SELECT Id FROM ?_achievementCategory WHERE parentCategory IN (?a)', $curCats);
+ $catList = array_merge($catList, $curCats);
+ }
+ $acvList = new AchievementList($catList ? [['category', $catList]] : [], true);
+ }
+
+ // recreate form selection
+ $filter['query'] = isset($_GET['filter']) ? $_GET['filter'] : NULL;
+ $filter['setCr'] = $acvList->filterGetSetCriteria();
+ $filter = array_merge($acvList->filterGetForm(), $filter);
+
+ // create page title and path
+ if (is_array($cats))
+ {
+ $catrows = DB::Aowow()->Select('SELECT * FROM ?_achievementcategory WHERE id IN (?a)',
+ $cats
+ );
+
+ foreach ($catrows as $cat)
+ {
+ $path[] = $cat['id'];
+ $title[] = Util::localizedString($cat, 'name');
+ }
+ array_unshift($title, ucFirst(Lang::$achievement['achievements']));
+ }
+
+ // fill g_items, g_titles, g_achievements
+ $acvList->addGlobalsToJscript($pageData);
+ $acvList->addRewardsToJScript($pageData);
+
+ // listview content
+ $pageData['data'] = $acvList->getListviewData();
+ $pageData['params'] = ['tabs' => false];
+
+ // if we are have different cats display field
+ if ($acvList->hasDiffCategories())
+ $pageData['params']['visibleCols'] = "$['category']";
+
+ // create note if search limit was exceeded
+ if ($acvList->matches > $AoWoWconf['sqlLimit'])
+ $pageData['params']['note'] = '$'.sprintf(Util::$filterResultString, 'LANG.lvnote_achievementsfound', $acvList->matches, $AoWoWconf['sqlLimit']);
+
+ if ($acvList->filterGetError())
+ $pageData['params']['_errors'] = '$1';
+
+ $smarty->saveCache($cacheKey, $pageData);
+}
+
+
+$page = array(
+ 'tab' => 0, // for g_initHeader($tab)
+ 'subCat' => $pageParam ? '='.$pageParam : '',
+ 'title' => implode(" - ", $title),
+ 'path' => "[".implode(", ", $path)."]",
+ 'reqJS' => array(
+ array('path' => 'template/js/filters.js', 'conditional' => false),
+ ),
+);
+
+// sort for dropdown-menus
+asort(Lang::$game['si']);
+
+$smarty->updatePageVars($page);
+$smarty->assign('filter', $filter);
+$smarty->assign('lang', array_merge(Lang::$main, Lang::$game, Lang::$achievement));
+$smarty->assign('mysql', DB::Aowow()->getStatistics());
+$smarty->assign('lvData', $pageData);
+$smarty->display('achievements.tpl');
+
+?>
diff --git a/pages/classes.php b/pages/classes.php
new file mode 100644
index 00000000..275eaa82
--- /dev/null
+++ b/pages/classes.php
@@ -0,0 +1,37 @@
+loadCache($cacheKey, $pageData))
+{
+ $classes = new CharClassList();
+
+ $pageData = array(
+ 'file' => 'class',
+ 'data' => $classes->getListviewData(),
+ 'params' => array(
+ 'tabs' => false
+ )
+ );
+
+ $smarty->saveCache($cacheKey, $pageData);
+}
+
+
+$page = array(
+ 'tab' => 0, // for g_initHeader($tab)
+ 'title' => ucFirst(Lang::$game['classes']),
+ 'path' => "[0, 12]",
+);
+
+$smarty->updatePageVars($page);
+$smarty->assign('lang', Lang::$main);
+$smarty->assign('mysql', DB::Aowow()->getStatistics());
+$smarty->assign('lvData', $pageData);
+$smarty->display('generic-no-filter.tpl');
+
+?>
diff --git a/pages/currencies.php b/pages/currencies.php
new file mode 100644
index 00000000..b84de3f6
--- /dev/null
+++ b/pages/currencies.php
@@ -0,0 +1,52 @@
+error();
+
+if (isset($cat))
+{
+ $path[] = $cat; // should be only one parameter anyway
+ array_unshift($title, Lang::$currency['cat'][$cat]);
+}
+
+if (!$smarty->loadCache($cacheKey, $pageData))
+{
+ $money = new CurrencyList(isset($cat) ? array(['category', (int)$cat]) : []);
+
+ $pageData = array(
+ 'file' => 'currency',
+ 'data' => $money->getListviewData(),
+ 'params' => array(
+ 'tabs' => false
+ )
+ );
+
+ $money->addGlobalsToJscript($pageData);
+
+ $smarty->saveCache($cacheKey, $pageData);
+}
+
+
+$page = array(
+ 'tab' => 0, // for g_initHeader($tab)
+ 'title' => implode(" - ", $title),
+ 'path' => "[".implode(", ", $path)."]"
+);
+
+$smarty->updatePageVars($page);
+$smarty->assign('lang', Lang::$main);
+$smarty->assign('mysql', DB::Aowow()->getStatistics());
+$smarty->assign('lvData', $pageData);
+$smarty->display('generic-no-filter.tpl');
+
+?>
diff --git a/pages/events.php b/pages/events.php
index e9c3c990..c1f81abf 100644
--- a/pages/events.php
+++ b/pages/events.php
@@ -49,10 +49,10 @@ if (!$smarty->loadCache($cacheKey, $pageData))
$pageData = array(
'file' => 'event',
- 'data' => $events->getListviewData(),
- 'deps' => $deps,
+ 'data' => $events->getListviewData(),
+ 'deps' => $deps,
'calendar' => false, // todo: fix it Felix!
- 'params' => array(
+ 'params' => array(
'tabs' => '$myTabs'
)
);
diff --git a/pages/itemsets.php b/pages/itemsets.php
new file mode 100644
index 00000000..c4c48d2c
--- /dev/null
+++ b/pages/itemsets.php
@@ -0,0 +1,65 @@
+loadCache($cacheKey, $pageData))
+{
+ $itemsets = new ItemsetList([], true); // class selection is via filter, nothing applies here
+
+ $itemsets->addGlobalsToJscript($pageData);
+
+ // recreate form selection
+ $filter['query'] = isset($_GET['filter']) ? $_GET['filter'] : NULL;
+ $filter['setCr'] = $itemsets->filterGetSetCriteria();
+ $filter = array_merge($itemsets->filterGetForm(), $filter);
+
+ if (isset($filter['cl']))
+ $path[] = $filter['cl'];
+
+ // listview content
+ $pageData['data'] = $itemsets->getListviewData();
+ $pageData['params'] = ['tabs' => false];
+
+ // create note if search limit was exceeded
+ if ($itemsets->matches > $AoWoWconf['sqlLimit'])
+ $pageData['params']['note'] = '$'.sprintf(Util::$filterResultString, 'LANG.lvnote_itemsetsfound', $itemsets->matches, $AoWoWconf['sqlLimit']);
+
+ if ($itemsets->filterGetError())
+ $pageData['params']['_errors'] = '$1';
+
+ $smarty->saveCache($cacheKey, $pageData);
+}
+
+
+$page = array(
+ 'tab' => 0, // for g_initHeader($tab)
+ 'subCat' => $pageParam ? '='.$pageParam : '',
+ 'title' => ucFirst(Lang::$game['itemsets']),
+ 'path' => json_encode($path, JSON_NUMERIC_CHECK),
+ 'reqJS' => array(
+ array('path' => 'template/js/filters.js', 'conditional' => false),
+ array('path' => '?data=weight-presets', 'conditional' => false),
+ )
+);
+
+// sort for dropdown-menus
+asort(Lang::$itemset['notes'], SORT_NATURAL);
+asort(Lang::$game['cl']);
+
+$smarty->updatePageVars($page);
+$smarty->assign('filter', $filter);
+$smarty->assign('lang', array_merge(Lang::$main, Lang::$game, Lang::$itemset, Lang::$item));
+$smarty->assign('mysql', DB::Aowow()->getStatistics());
+$smarty->assign('lvData', $pageData);
+$smarty->display('itemsets.tpl');
+
+?>
diff --git a/pages/races.php b/pages/races.php
new file mode 100644
index 00000000..891ea837
--- /dev/null
+++ b/pages/races.php
@@ -0,0 +1,37 @@
+loadCache($cacheKey, $pageData))
+{
+ $races = new CharRaceList(array(['side', 0, '!'])); // only playable
+
+ $pageData = array(
+ 'file' => 'race',
+ 'data' => $races->getListviewData(),
+ 'params' => array(
+ 'tabs' => false
+ )
+ );
+
+ $smarty->saveCache($cacheKey, $pageData);
+}
+
+
+$page = array(
+ 'tab' => 0, // for g_initHeader($tab)
+ 'title' => ucFirst(Lang::$game['races']),
+ 'path' => "[0, 13]",
+);
+
+$smarty->updatePageVars($page);
+$smarty->assign('lang', Lang::$main);
+$smarty->assign('mysql', DB::Aowow()->getStatistics());
+$smarty->assign('lvData', $pageData);
+$smarty->display('generic-no-filter.tpl');
+
+?>
diff --git a/pages/title.php b/pages/title.php
index b926933b..b9a01360 100644
--- a/pages/title.php
+++ b/pages/title.php
@@ -58,7 +58,7 @@ if (!$smarty->loadCache($cacheKeyPage, $pageData))
$pageData['page']['questParams'] = array(
'id' => 'reward-from-quest',
'name' => '$LANG.tab_rewardfrom',
- 'hiddenCols' => "$['side']",
+ 'hiddenCols' => "$['experience', 'money']",
'visibleCols' => "$['category']"
);
break;
diff --git a/template/achievement.tpl b/template/achievement.tpl
new file mode 100644
index 00000000..e04e16e8
--- /dev/null
+++ b/template/achievement.tpl
@@ -0,0 +1,167 @@
+{include file='header.tpl'}
+
+
+
+
+{if !empty($announcements)}
+ {foreach from=$announcements item=item}
+ {include file='bricks/announcement.tpl' an=$item}
+ {/foreach}
+{/if}
+
+
+
+ | {$lang.quickFacts} |
+ |
+
+ |
+{strip}{*************** CHAIN OF ACHIEVEMENTS ***************}
+ {if isset($lvData.page.series)}
+ | {$lang.series} |
+
+
+ {section name=i loop=$lvData.page.series}
+
+ | {$smarty.section.i.index+1}. |
+
+ {if ($lvData.page.series[i].id == $lvData.page.id)}
+ {$lvData.page.series[i].name}
+ {else}
+
+ {/if}
+ |
+
+ {/section}
+
+ |
+
+ {/if}
+ {/strip}{*************** / CHAIN OF ACHIEVEMENTS ***************}
+ | {$lang.screenshots} |
+ |
+ | {$lang.videos} |
+ |
+
+
+
+
+
+
+
+
+
+
+
+ {$lang.link}{$lang.link}
+
WowheadWowhead
+
{$lvData.page.name}
+
+ {$lvData.page.description}
+
+ {if !empty($lvData.page.criteria)}
{$lang.criteria}{if $lvData.page.count} – {$lang.requires} {$lvData.page.count} {$lang.outOf} {$lvData.page.total_criteria}{/if}
{/if}
+
+
+
+ {strip}
+ {foreach from=$lvData.page.criteria item=cr name=criteria}
+
+ |
+ {* for reference and standard entries *}
+ {if !isset($cr.icon) && (isset($cr.link) || $cr.standard)}
+
+ {/if}
+ |
+
+ {if isset($cr.link)}{$cr.link.text|escape:"html"}{if isset($cr.link.count) && $cr.link.count > 1} ({$cr.link.count}){/if}{/if}
+
+ {* STANDARD TEXT *}
+ {if isset($cr.extra_text)} {$cr.extra_text}{/if}
+ {if $user.roles > 0} [{$cr.id}]{/if}
+ |
+
+ {* If the first column is over (it may be a greater element) *}
+ {if $smarty.foreach.criteria.index+1 == round(count($lvData.page.criteria) / 2)}
+
+
+
+
+ {/if}
+ {/foreach}
+ {/strip}
+
+
+
+ {strip}
+
+ {/strip}
+
+
+
+
+ {* for items *}
+ {if $lvData.page.itemReward}
+
{$lang.rewards}
+ {$lang.itemReward}
+
+ {foreach from=$lvData.page.itemReward item=i name=item key=id}
+ | {$i.name} |
+ {/foreach}
+
+
+
+ {/if}
+
+ {* for titles *}
+ {if $lvData.page.titleReward}
+
{$lang.gains}
+
+ {foreach from=$lvData.page.titleReward item=i}
+ {$i}
+ {/foreach}
+
+ {/if}
+
+
{$lang.related}
+
+
+
+
+
+
+
+{include file='bricks/contribute.tpl'}
+
+
+
+
+{include file='footer.tpl'}
\ No newline at end of file
diff --git a/template/achievements.tpl b/template/achievements.tpl
new file mode 100644
index 00000000..892e100b
--- /dev/null
+++ b/template/achievements.tpl
@@ -0,0 +1,74 @@
+{include file='header.tpl'}
+
+
+
+
+
+{if !empty($announcements)}
+ {foreach from=$announcements item=item}
+ {include file='bricks/announcement.tpl' an=$item}
+ {/foreach}
+{/if}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{include file='footer.tpl'}
\ No newline at end of file
diff --git a/template/bricks/contrib_0.tpl b/template/bricks/contrib_0.tpl
new file mode 100644
index 00000000..b22c3b1f
--- /dev/null
+++ b/template/bricks/contrib_0.tpl
@@ -0,0 +1,120 @@
+{if $user.id > 0}
+
+
+
+ Simply browse for your screenshot using the form below.
+
+
+
+
+
+
+
+
+ Simply type the URL of the video in the form below.
+
+
+
+
+
+{else}
+
+
+
+ Simply browse for your screenshot using the form below.
+
+
+
+
+
+
+
+
+ Simply type the URL of the video in the form below.
+
+
+
+
+
+{/if}
diff --git a/template/bricks/contrib_2.tpl b/template/bricks/contrib_2.tpl
new file mode 100644
index 00000000..52e9800c
--- /dev/null
+++ b/template/bricks/contrib_2.tpl
@@ -0,0 +1,120 @@
+{if $user.id > 0}
+
+
+
+ Sélectionez votre capture en utilisant le formulaire ci-dessous.
+
+
+ Les captures prises dans le jeu sont préférées à celles générées avec un logiciel.
+ Plus la qualité est haute, mieux c'est !
+
+
+
+
+
+
+
+
+ Entrez simplement l'URL du vidéo dans le formulaire ci-dessous.
+
+
+
+
+
+{else}
+
+
+
+ Sélectionez votre capture en utilisant le formulaire ci-dessous.
+
+
+ Les captures prises dans le jeu sont préférées à celles générées avec un logiciel.
+ Plus la qualité est haute, mieux c'est !
+
+
+
+
+
+
+
+
+ Entrez simplement l'URL du vidéo dans le formulaire ci-dessous.
+
+
+
+
+
+{/if}
diff --git a/template/bricks/contrib_3.tpl b/template/bricks/contrib_3.tpl
new file mode 100644
index 00000000..17edad85
--- /dev/null
+++ b/template/bricks/contrib_3.tpl
@@ -0,0 +1,128 @@
+{if $user.id > 0}
+
+
+
+
+ Wählt einfach Euren Screenshot mit dem folgenden Formular aus.
+
+
+ Screenshots aus dem Spiel werden gegenüber Bildern aus dem Modellviewer bevorzugt.
+ Je höher die Qualität, desto besser!
+ Lest Euch unbedingt die
Tipps & Tricks durch, wenn nicht bereits geschehen.
+
+
+
+
+
+
+
+
+ Gebt einfach die URL des Videos im folgenden Formular ein.
+
+
+
+
+
+{else}
+
+
+
+
+ Wählt einfach Euren Screenshot mit dem folgenden Formular aus.
+
+
+ Screenshots aus dem Spiel werden gegenüber Bildern aus dem Modellviewer bevorzugt.
+ Je höher die Qualität, desto besser!
+ Lest Euch unbedingt die
Tipps & Tricks durch, wenn nicht bereits geschehen.
+
+
+
+
+
+
+
+
+ Gebt einfach die URL des Videos im folgenden Formular ein.
+
+
+
+
+
+{/if}
diff --git a/template/bricks/contrib_6.tpl b/template/bricks/contrib_6.tpl
new file mode 100644
index 00000000..859bd2b3
--- /dev/null
+++ b/template/bricks/contrib_6.tpl
@@ -0,0 +1,120 @@
+{if $user.id > 0}
+
+
+
+ Simplemente busca tu captura de imagen usando el formulario que aparece abajo.
+
+
+
+
+
+
+
+
+ Símplemente, escribe la URL del vídeo en el formulario.
+
+
+
+
+
+{else}
+
+
+
+ Simplemente busca tu captura de imagen usando el formulario que aparece abajo.
+
+
+
+
+
+
+
+
+ Símplemente, escribe la URL del vídeo en el formulario.
+
+
+
+
+
+{/if}
\ No newline at end of file
diff --git a/template/bricks/contrib_8.tpl b/template/bricks/contrib_8.tpl
new file mode 100644
index 00000000..860a3b49
--- /dev/null
+++ b/template/bricks/contrib_8.tpl
@@ -0,0 +1,120 @@
+{if $user.id > 0}
+
+
+
+ Просмотрите изображение, используя форму ниже.
+
+
+ Внутриигровые изображения предпочтительнее изображений, полученных в программах просмотра 3D моделей.
+ Чем выше качество, тем лучше!
+ Если вы ещё не читали, то настоятельно рекомендуем вам прочесть
советы и особенности получения изображений при помощи снимков экрана.
+
+
+
+
+
+
+
+ Введите URL видео на YouTube в форму ниже.
+
+
+
+
+
+{else}
+
+
+
+ Просмотрите изображение, используя форму ниже.
+
+
+ Внутриигровые изображения предпочтительнее изображений, полученных в программах просмотра 3D моделей.
+ Чем выше качество, тем лучше!
+ Если вы ещё не читали, то настоятельно рекомендуем вам прочесть
советы и особенности получения изображений при помощи снимков экрана.
+
+
+
+
+
+
+
+ Введите URL видео на YouTube в форму ниже.
+
+
+
+
+
+{/if}
diff --git a/template/bricks/contribute.tpl b/template/bricks/contribute.tpl
new file mode 100644
index 00000000..c9e8a714
--- /dev/null
+++ b/template/bricks/contribute.tpl
@@ -0,0 +1,18 @@
+
+
{$lang.contribute}
+
+
+
+
+{include file="bricks\contrib_`$user.locale`.tpl"}
+
+
+
+
diff --git a/template/itemsets.tpl b/template/itemsets.tpl
new file mode 100644
index 00000000..469655b6
--- /dev/null
+++ b/template/itemsets.tpl
@@ -0,0 +1,105 @@
+{include file='header.tpl'}
+
+
+
+
+
+{if !empty($announcements)}
+ {foreach from=$announcements item=item}
+ {include file='bricks/announcement.tpl' an=$item}
+ {/foreach}
+{/if}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{include file='footer.tpl'}