/** * Спавнение по наименованию * * @param object $oBlog1 * @param object $oBlog2 * * @return int */ public function _compareByTitle($oBlog1, $oBlog2) { return strcasecmp($oBlog1->GetTitle(), $oBlog2->GetTitle()); }
/** * render a wow item in a tooltip from a formatted array * * Display use-cases: * own page (default. include the SMW metadata) * {{lootbox|...|foo}}/{{:Foo}}/js * {{item|foo}} -- [Foo] or {1em-high icon}[Foo] {{Itemlink}}/{{Iconlink}} * {{itembox|...|foo}} -- {3em-high icon}[Foo] {{Itemiconlarge}}+Itemlink * {{costitem|...|foo}} -- {1em-high icon} {{Itemicon}}+{{Itemcost}} * * @param array $attr an item ready to display as a formatted array * @param object $parser the parser used to display the item * * @return string a parsed string ready to display */ public function renderDefault($attr, $parser) { $title = $parser->GetTitle(); // start putting together our string $ownPage = $title == $attr['itempage']; if ($ownPage) { //primary use-case: the item's own page! $out = $this->_genSemanticData($attr) . '<div style="font-size:1em;float:right;width:18em"'; } else { //everywhere else: js tooltips, lootboxes, etc $out = '<div style="font-size:0.8em;width:18em"'; } //mandatory options $out .= " class=\"itemtooltip\">\n{{Icon|" . $attr['icon'] . (isset($attr['stack']) ? '|' . $attr['stack'] : '') . '|size=' . ($ownPage ? '3' : '4') . "|float=right|margin=0}}\n" . "<ul>\n"; $out .= $this->_li('name', '{{Quality|' . $this->qualities[$attr['quality']] . '|' . $attr['itempage'] . '|' . $attr['name'] . '|tooltip=1}}'); /* * checks from this point out must happen in the order that we want * it to display, modulo the right-aligned items which need to appear * before their left-aligned counterparts. * * we're using the $this->_li() method to wrap lines with a classed * <li> tag. Remember: this is a render method. Parsing should've * already happened! */ if (isset($attr['heroic'])) { // bool $out .= $this->_li('bonus heroic', 'Heroic'); } if (isset($attr['conjured'])) { // bool $out .= $this->_li('conjured', '[[Conjured item|Conjured Item]]'); } if (isset($attr['holiday'])) { // required holiday FT $out .= $this->_li('req reqHoliday', 'Requires [[' . $attr['holiday'] . ']]'); } if (isset($attr['locationbind'])) { // location bind FT $out .= $this->_li('req reqZone', $attr['locationbind']); } if (isset($attr['bind'])) { //item bind $out .= $this->_li('bind', $attr['bind']); } if (isset($attr['questitem'])) { // bool $out .= $this->_li('qitem', '[[Quest item|Quest Item]]'); } if (isset($attr['unique'])) { //Unique --these 5 cases mutually exclusive $out .= $this->_li('unique', '[[Unique]]'); } elseif (isset($attr['uniqueN'])) { //Unique (100) $out .= $this->_li('uniqueN', '[[Unique]] (' . $attr['uniqueN'] . ')'); } elseif (isset($attr['uniqueEq'])) { //Unique-Equipped $out .= $this->_li('uniqueEq', '[[Unique-equipped|Unique-Equipped]]'); } elseif (isset($attr['uniqueEqN'])) { //Unique-Equipped (something) FT $out .= $this->_li('uniqueEqN', '[[Unique-equipped|Unique-Equipped]] (' . $attr['uniqueEqN'] . ')'); } // else, not unique (nothing displayed) if (isset($attr['glyph'])) { //major/minor $out .= $this->_li('glyph', $attr['glyph']); } if (isset($attr['duration'])) { //item duration FT $out .= $this->_li('duration', '[[Duration (item)|Duration]]: ' . $attr['duration']); } if (isset($attr['qbegin'])) { // begins a quest FT $out .= $this->_li('qbegin', '{{Quest|' . $attr['qbegin'] . '|This Item Begins a Quest}}'); } if (isset($attr['type'])) { // type (axe, cloth, etc) $out .= ' <li class="type" style="float:right; clear:all">' . $attr['type'] . "</li>\n"; } if (isset($attr['slot'])) { // slot $out .= $this->_li('slot', '[[' . $this->slots[$attr['slot']] . ']]'); } if (isset($attr['weapon'])) { //hey, it's a weapon! $out .= ' <li class="speed" style="float:right">[[Speed (attack)' . '|Speed]] ' . $attr['speed'] . "</li>\n"; if (isset($attr['damageschool'])) { $school = $this->schools[$attr['damageschool']]; } $out .= $this->_li('damage', $attr['dmg'][0] . ' – ' . $attr['dmg'][1] . (isset($attr['damageschool']) ? " [[Magic schools (WoW)#{$school}|{$school}]]" : '') . ' Damage'); if (isset($attr['bonusdamage'])) { //hey, bonus damage! if (isset($attr['bonusdamageschool'])) { $school = $this->schools[$attr['bonusdamageschool']]; } $out .= $this->_li('bonusDamage', '+' . $attr['bdmg'][0] . ' – ' . $attr['bdmg'][1] . (isset($attr['bonusdamageschool']) ? " [[Magic schools (WoW)#{$school}|{$school}]]" : '') . ' Damage'); } $out .= $this->_li('dps', '(' . $attr['dps'] . ' [[DPS|damage per second]])'); if (isset($attr['feraldps'])) { $out .= ' <li class="feralAP" title="Only applies for druids">(' . $attr['feraldps'] . ' [[Feral attack power|<span class="cc-' . 'druid">feral attack power</span>]])' . "\n"; } } if (isset($attr['armor'])) { // basic armor $out .= $this->_li('armor', $attr['armor'] . ' [[Armor]]'); } if (isset($attr['block'])) { // block value on shields only $out .= $this->_li('block', $attr['block'] . ' [[Block value|Block]]'); } foreach ($this->attributes as $at) { // str/agi/stam/int/spr if (isset($attr[strtolower($at)])) { $out .= $this->_li("attrib attr{$at}", '+' . $attr[strtolower($at)] . " [[{$at}]]"); } } if (isset($attr['resist'])) { //fire/nature/frost/shadow/arcane resist foreach ($attr['resist'] as $sch => $resist) { $school = $this->schools[$sch]; $out .= $this->_li("resist res{$school}", "+{$resist} [[{$school} " . "resistance|{$school} Resistance]]"); } } if (isset($attr['socketed'])) { foreach ($attr['socket'] as $sock) { $out .= $this->_li("socket sock{$sock}", "[[File:UI-EmptySocket-{$sock}.png||link={$sock} " . "socket]] [[{$sock} socket|{$sock} Socket]]"); } $out .= $this->_li('socket sockBonus', '[[Socket bonus|Socket Bonus]]: ' . $attr['sockbonus']); } if (isset($attr['durability'])) { $out .= $this->_li('durability', '[[Durability]] ' . $attr['durability'] . ' / ' . $attr['durability']); } if (isset($attr['locked'])) { //these 2 cases mutually exclusive $out .= $this->_li('locked', '[[Locked]]'); } elseif (isset($attr['lockpick'])) { $out .= $this->_li('req reqLockpick', 'Requires [[Lockpicking]] (' . $attr['lockpick'] . ')'); } if (isset($attr['bagtype'])) { //these 2 cases mutually exclusive $out .= $this->_li('bag', $attr['bagslots'] . ' Slot [[' . $attr['bagtype'] . ']]'); } elseif (isset($attr['bagslots'])) { //just a regular bag $out .= $this->_li('bag', $attr['bagslots'] . ' Slot [[Bag]]'); } if (isset($attr['class'])) { // class $class = ''; foreach ($attr['class'] as $k => $v) { $class .= $this->class[$k] . ', '; } $out .= $this->_li('req reqClass', '[[Class|Classes]]: ' . substr($class, 0, -2)); } if (isset($attr['race'])) { // race $race = ''; foreach ($attr['race'] as $k => $v) { $race .= $this->races[$k] . ', '; } $out .= $this->_li('req reqRace', '[[Race|Races]]: ' . substr($race, 0, -2)); } if (isset($attr['level'])) { // level $out .= $this->_li('req Level', 'Requires Level ' . $attr['level']); } if (isset($attr['ilvl'])) { // item level (REQUIRED) $out .= $this->_li('iLvl', '[[Item level|Item Level]] ' . $attr['ilvl']); } if (isset($attr['subskill'])) { // skill specialization $out .= $this->_li('req reqSubskill', 'Requires [[' . $attr['subskill'] . ']]'); } if (isset($attr['profrequired'])) { // skill rating $out .= $this->_li('req reqSkill', 'Requires [[' . $attr['skill'] . ']] (' . $attr['skillrating'] . ')'); } if (isset($attr['reprequired'])) { // reputation FT $out .= $this->_li('req reqRep', 'Requires [[' . $attr['faction'] . ']] – [[' . $this->replevels[$attr['factionrating']] . ']]'); } if (isset($attr['arena'])) { $out .= $this->_li('req reqArena', 'Requires [[Arena personal rating|' . 'personal]] and [[Arena team rating|team]] arena rating of ' . $attr['arena']); } if (isset($attr['onhit'])) { // bonus chance on hit foreach ($attr['onhit'] as $onhit) { $out .= $this->_li('bonus onhit', "Chance on hit: {$onhit}"); } } //hard-coded bonuses if (isset($attr['defense'])) { $out .= $this->_li('bonus defense', 'Equip: Increases [[defense rating]] by ' . $attr['defense'] . '.'); } if (isset($attr['dodge'])) { $out .= $this->_li('bonus dodge', 'Equip: Increases your [[dodge rating]] by ' . $attr['dodge'] . '.'); } if (isset($attr['parry'])) { $out .= $this->_li('bonus parry', 'Equip: Increases your [[parry rating]] by ' . $attr['parry'] . '.'); } if (isset($attr['blockrating'])) { $out .= $this->_li('bonus block', 'Equip: Increases your shield [[block rating]] by ' . $attr['blockrating'] . '.'); } if (isset($attr['haste'])) { $out .= $this->_li('bonus haste', 'Equip: Improves [[haste rating]] by ' . $attr['haste'] . '.'); } if (isset($attr['hit'])) { $out .= $this->_li('bonus hit', 'Equip: Improves [[hit rating]] by ' . $attr['hit'] . '.'); } if (isset($attr['crit'])) { $out .= $this->_li('bonus crit', 'Equip: Improves [[critical strike rating]] by ' . $attr['crit'] . '.'); } if (isset($attr['resilience'])) { $out .= $this->_li('bonus resil', 'Equip: Improves [[resilience rating]] by ' . $attr['resilience'] . '.'); } if (isset($attr['expertise'])) { $out .= $this->_li('bonus exp', 'Equip: Increases your [[expertise rating]] by ' . $attr['expertise'] . '.'); } if (isset($attr['ap'])) { $out .= $this->_li('bonus ap', 'Equip: Increases [[attack power]] by ' . $attr['ap'] . '.'); } if (isset($attr['mp5'])) { $out .= $this->_li('bonus mp5', 'Equip: Restores ' . $attr['mp5'] . ' [[MP5|mana per 5]] sec.'); } if (isset($attr['arp'])) { $out .= $this->_li('bonus arp', 'Equip: Increases your [[armor penetration ' . 'rating]] by ' . $attr['arp'] . '.'); } if (isset($attr['spellpower'])) { $out .= $this->_li('bonus sp', 'Equip: Increases [[spell power]] by ' . $attr['spellpower'] . '.'); } if (isset($attr['equip'])) { // other bonus equip effects FT foreach ($attr['equip'] as $equip) { $out .= $this->_li('bonus equip', "Equip: {$equip}"); } } if (isset($attr['use'])) { // other bonus use effects FT foreach ($attr['use'] as $use) { $out .= $this->_li('bonus use', "Use: {$use}"); } } if (isset($attr['recipe'])) { // recipe that creates another item $out .= $this->_li('create', '{{Loot|' . $this->qualities[$attr['createq']] . '|' . $attr['create'] . '}}'); $out .= $this->_li('reagents', 'Requires ' . $attr['reagents']); } if (isset($attr['charges']) && is_numeric($attr['charges'])) { $out .= $this->_li('charges', $attr['charges'] . ' [[Charges]]'); } if (isset($attr['flavor'])) { // FT $out .= $this->_li('flavor', '"' . $attr['flavor'] . '"'); } if (isset($attr['read'])) { $out .= $this->_li('bonus read', '<Right Click to Read>'); } if (isset($attr['open'])) { $out .= $this->_li('bonus open', '<Right Click to Open>'); } if (isset($attr['setpiece'])) { if ($ownPage) { $out .= ' {{:' . $attr['setpage'] . '|' . $attr['set'] . "|mode=itemtip}}\n"; } else { $out .= $this->_li('set', '[[' . $attr['setpage'] . '|' . $attr['set'] . ']] (1/' . $attr['setpieces'] . ')'); } } if (isset($attr['sell'])) { // FT $out .= $this->_li('sell', 'Sell Price: ' . $attr['sell']); } //finish the string $out .= "</ul></div>\n"; //to the wiki! return $parser->recursiveTagParse($out); }