Skip to content
This repository has been archived by the owner on May 5, 2023. It is now read-only.

Commit

Permalink
new: wow lib usage
Browse files Browse the repository at this point in the history
new: media folder usage
  • Loading branch information
b2un0 committed Dec 21, 2014
1 parent b913b46 commit 8b80792
Show file tree
Hide file tree
Showing 12 changed files with 222 additions and 380 deletions.
44 changes: 0 additions & 44 deletions fields/ajax.php

This file was deleted.

217 changes: 79 additions & 138 deletions helper.php
Expand Up @@ -3,94 +3,29 @@
/**
* @author Branko Wilhelm <branko.wilhelm@gmail.com>
* @link http://www.z-index.net
* @copyright (c) 2013 - 2014 Branko Wilhelm
* @copyright (c) 2012 - 2015 Branko Wilhelm
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
*/

defined('_JEXEC') or die;

final class ModWowGuildMembersHelper
class ModWowGuildMembersHelper extends WoWModuleAbstract
{
private $params = null;

private function __construct(JRegistry &$params)
{
if (version_compare(JVERSION, 3, '>=')) {
$params->set('guild', rawurlencode(JString::strtolower($params->get('guild'))));
$params->set('realm', rawurlencode(JString::strtolower($params->get('realm'))));
} else {
$params->set('realm', str_replace(array('%20', ' '), '-', $params->get('realm')));
$params->set('guild', str_replace(array('%20', ' '), '%2520', $params->get('guild')));
}

$params->set('region', JString::strtolower($params->get('region')));
$params->set('lang', JString::strtolower($params->get('lang', 'en')));
$params->set('link', $params->get('link', 'battle.net'));
$params->set('order', $params->get('order'));

$this->params = & $params;
}

public static function getAjax()
protected function getInternalData()
{
$module = JModuleHelper::getModule('mod_' . JFactory::getApplication()->input->get('module'));

if (empty($module)) {
return false;
}

JFactory::getLanguage()->load($module->module);

$params = new JRegistry($module->params);
$params->set('ajax', 0);

ob_start();

require(dirname(__FILE__) . '/' . $module->module . '.php');

return ob_get_clean();
}

public static function getData(JRegistry &$params)
{
if ($params->get('ajax')) {
return;
}

$instance = new self($params);

return $instance->getMembers();
}

private function getMembers()
{
if ($this->params->get('ajax')) {
return;
}

if (!$this->params->get('guild') || !$this->params->get('realm')) {
return JString::_('MOD_WOW_GUILD_MEMBERS_CONFIGURATION_MISSING');
}

$url = 'http://' . $this->params->get('region') . '.battle.net/api/wow/guild/' . $this->params->get('realm') . '/' . $this->params->get('guild') . '?fields=members,achievements&locale=' . $this->params->get('lang');

$cache = JFactory::getCache('wow', 'output');
$cache->setCaching(1);
$cache->setLifeTime($this->params->get('cache_time', 60) * 60);

$result = $this->remoteContent($url);

if (is_string($result)) {
return $result;
try {
$result = WoW::getInstance()->getAdapter('WoWAPI')->getData('members');
} catch (Exception $e) {
return $e->getMessage();
}

$result->classes = $this->getClasses();
$result->races = $this->getRaces();
$result->body->classes = $this->getClasses();
$result->body->races = $this->getRaces();

$ranks = $this->params->get('ranks', array());
$ranks = $this->params->module->get('ranks', array());

foreach ($result->members as $key => $row) {
if (($this->params->get('level_min') && $row->character->level < $this->params->get('level_min')) || ($this->params->get('level_max') && $row->character->level > $this->params->get('level_max')) || (!empty($ranks) && !in_array($row->rank, $ranks))) {
foreach ($result->body->members as $key => $row) {
if (($this->params->module->get('level_min') && $row->character->level < $this->params->module->get('level_min')) || ($this->params->module->get('level_max') && $row->character->level > $this->params->module->get('level_max')) || (!empty($ranks) && !in_array($row->rank, $ranks))) {
unset($result->members[$key]);
continue;
}
Expand All @@ -99,8 +34,9 @@ private function getMembers()

$member->name = new stdClass;
$member->name->title = $row->character->name;
$member->name->realm = $row->character->realm;
$member->name->avatar = $row->character->thumbnail;
$member->name->link = $this->link($row->character->name);
$member->name->link = $this->link($row->character->name, $row->character->realm);

$member->level = new stdClass;
$member->level->title = $row->character->level;
Expand All @@ -110,17 +46,17 @@ private function getMembers()

$member->rank = new stdClass;
$member->rank->id = $row->rank;
$member->rank->title = $this->params->get('rank_' . $row->rank, JText::_('MOD_WOW_GUILD_MEMBERS_RANK_' . $row->rank . '_LABEL'));
$member->rank->title = $this->params->module->get('rank_' . $row->rank, JText::_('MOD_WOW_GUILD_MEMBERS_RANK_' . $row->rank . '_LABEL'));

$member->race = new stdClass;
$member->race->id = $result->races[$row->character->race]->id;
$member->race->title = $result->races[$row->character->race]->name;
$member->race->id = $result->body->races[$row->character->race]->id;
$member->race->title = $result->body->races[$row->character->race]->name;
$member->race->icon = 'race_' . $member->race->id . '_' . $row->character->gender . '.jpg';

$member->class = new stdClass;
$member->class->id = $result->classes[$row->character->class]->id;
$member->class->title = $result->classes[$row->character->class]->name;
$member->class->icon = 'class_' . $result->classes[$row->character->class]->id . '.jpg';
$member->class->id = $result->body->classes[$row->character->class]->id;
$member->class->title = $result->body->classes[$row->character->class]->name;
$member->class->icon = 'class_' . $result->body->classes[$row->character->class]->id . '.jpg';

$member->role = new stdClass;
$member->role->title = JText::_('MOD_WOW_GUILD_MEMBERS_' . ($row->character->spec->role ? $row->character->spec->role : 'UNKNOWN'));
Expand All @@ -134,106 +70,111 @@ private function getMembers()
$result->members[$key] = $member;
}

if ($this->params->get('table_break')) {
$this->params->set('order', $this->params->get('table_break'));
if ($this->params->module->get('table_break')) {
$this->params->module->set('order', $this->params->module->get('table_break'));
}

usort($result->members, array($this, 'sort'));

$result->members = array_slice($result->members, 0, $this->params->module->get('rows') ? $this->params->module->get('rows') : count($result->members));

if (empty($result->members)) {
return JText::_('MOD_WOW_GUILD_MEMBERS_NOTHING_FOUND');
}

if ($this->params->get('display_index')) {
if ($this->params->module->get('display_index')) {
$this->addIndex($result->members);
}

return array_slice($result->members, 0, $this->params->get('rows') ? $this->params->get('rows') : count($result->members));
/*
if ($this->params->module->get('display_itemlvl') && $this->params->module->get('rows')) {
$this->addItemLvl($result->members);
} else {
$this->params->module->set('display_itemlvl', 0);
}
*/

return $result->members;
}

private function sort($a, $b)
{
if ($this->params->get('order') == 'rank') {
if ($this->params->module->get('order') == 'rank') {
$field = 'id';
} else {
$field = 'title';
}

if ($this->params->get('sort', 'ASC') == 'ASC') {
return ($a->{$this->params->get('order')}->{$field} > $b->{$this->params->get('order')}->{$field});
if ($this->params->module->get('sort', 'ASC') == 'ASC') {
return ($a->{$this->params->module->get('order')}->{$field} > $b->{$this->params->module->get('order')}->{$field});
} else {
return ($a->{$this->params->get('order')}->{$field} < $b->{$this->params->get('order')}->{$field});
return ($a->{$this->params->module->get('order')}->{$field} < $b->{$this->params->module->get('order')}->{$field});
}
}

private function getRaces()
private function getRaces($races = array())
{
$result = self::remoteContent('http://' . $this->params->get('region') . '.battle.net/api/wow/data/character/races?locale=' . $this->params->get('lang'), true);

$tmp = array();
foreach ($result->races as $race) {
$tmp[$race->id] = $race;
try {
$result = WoW::getInstance()->getAdapter('WoWAPI')->getData('races', true);
} catch (Exception $e) {
return $races;
}

unset($result);
foreach ($result->body->races as $race) {
$races[$race->id] = $race;
}

return $tmp;
return $races;
}

private function getClasses()
private function getClasses($classes = array())
{
$result = self::remoteContent('http://' . $this->params->get('region') . '.battle.net/api/wow/data/character/classes?locale=' . $this->params->get('lang'), true);

$tmp = array();
foreach ($result->classes as $class) {
$tmp[$class->id] = $class;
try {
$result = WoW::getInstance()->getAdapter('WoWAPI')->getData('classes', true);
} catch (Exception $e) {
return $classes;
}

unset($result);
foreach ($result->body->classes as $class) {
$classes[$class->id] = $class;
}

return $tmp;
return $classes;
}

private function link($member)
private function link($member, $realm)
{
$sites['battle.net'] = 'http://' . $this->params->get('region') . '.battle.net/wow/' . $this->params->get('lang') . '/character/' . $this->params->get('realm') . '/' . $member . '/';
$sites['wowhead.com'] = 'http://' . $this->params->get('lang') . '.wowhead.com/profile=' . $this->params->get('region') . '.' . $this->params->get('realm') . '.' . $member;
return $sites[$this->params->get('link')];
$sites['battle.net'] = 'http://' . $this->params->global->get('region') . '.battle.net/wow/' . $this->params->global->get('locale') . '/character/' . $realm . '/' . $member . '/';
$sites['wowhead.com'] = 'http://' . $this->params->global->get('locale') . '.wowhead.com/profile=' . $this->params->global->get('region') . '.' . $realm . '.' . $member;
return $sites[$this->params->global->get('link')];
}

private function addIndex(array &$members)
/*
private function addItemLvl(array &$members)
{
$index = ($this->params->get('display_index') == 2) ? count($members) : 1;

foreach ($members as &$member) {
$member->index = ($this->params->get('display_index') == 2) ? $index-- : $index++;
}
}

private function remoteContent($url, $persistent = false)
{
$cache = JFactory::getCache('wow', 'output');
$cache->setCaching(1);
$cache->setLifeTime($this->params->get('cache_time', 60) * ($persistent ? 172800 : 60));

$key = md5($url);

if (!$result = $cache->get($key)) {
$member->itemlvl = new stdClass;
try {
$http = JHttpFactory::getHttp();
$http->setOption('userAgent', 'Joomla! ' . JVERSION . '; WoW Guild Members; php/' . phpversion());
$result = $http->get($url, null, $this->params->get('timeout', 10));
$profile = WoW::getInstance()->getAdapter('WoWAPI')->getMember($member->name->title, $member->name->realm);
if (!isset($profile->body->items)) {
throw new Exception();
}
$member->itemlvl->title = $profile->body->items->averageItemLevel;
$member->itemlvl->equipped = $profile->body->items->averageItemLevelEquipped;
} catch (Exception $e) {
return $e->getMessage();
$member->itemlvl->title = 0;
$member->itemlvl->equipped = 0;
}

$cache->store($result, $key);
}
}
*/

if ($result->code != 200) {
return __CLASS__ . ' HTTP-Status ' . JHtml::_('link', 'http://wikipedia.org/wiki/List_of_HTTP_status_codes#' . $result->code, $result->code, array('target' => '_blank'));
}
private function addIndex(array &$members)
{
$index = ($this->params->module->get('display_index') == 2) ? count($members) : 1;

return json_decode($result->body);
foreach ($members as &$member) {
$member->index = ($this->params->module->get('display_index') == 2) ? $index-- : $index++;
}
}
}
20 changes: 0 additions & 20 deletions language/de-DE/de-DE.mod_wow_guild_members.ini
@@ -1,18 +1,6 @@
MOD_WOW_GUILD_MEMBERS = "WoW Guild Members"
MOD_WOW_GUILD_MEMBERS_DESC = "Display latest WoW Armory Guild News"

MOD_WOW_GUILD_MEMBERS_CONFIGURATION_MISSING = "Kein Gildenname oder Realm hinterlegt!"

MOD_WOW_GUILD_MEMBERS_GUILD_LABEL = "Gildenname"

MOD_WOW_GUILD_MEMBERS_REALM_LABEL = "Realm"

MOD_WOW_GUILD_MEMBERS_REGION_LABEL = "Region"

MOD_WOW_GUILD_MEMBERS_LANG_LABEL = "Sprache"

MOD_WOW_GUILD_MEMBERS_LINK_LABEL = "Verlinkung"

MOD_WOW_GUILD_MEMBERS_RANKS_LABEL = "Gildenränge"
MOD_WOW_GUILD_MEMBERS_RANKS_DESC = "Welche Gildenränge sollen dargestellt werden? keine Auswahl = Alle"

Expand All @@ -34,8 +22,6 @@ MOD_WOW_GUILD_MEMBERS_SORT_DESC = "Nach welcher spalte soll sortiert werden"
MOD_WOW_GUILD_MEMBERS_SORT_ASC_LABEL = "aufsteigend"
MOD_WOW_GUILD_MEMBERS_SORT_DESC_LABEL = "absteigend"

MOD_WOW_GUILD_MEMBERS_FIELDSET_DISPLAY_LABEL = "Anzeige"

MOD_WOW_GUILD_MEMBERS_DISPLAY_ROWS_LABEL = "Spalten"
MOD_WOW_GUILD_MEMBERS_DISPLAY_ROWS_DESC = "Spaltenlimit als Zahl, z.B. für Top5. Leer lassen für alle!"

Expand Down Expand Up @@ -93,12 +79,6 @@ MOD_WOW_GUILD_MEMBERS_RANK_8_LABEL = "Rang 8"
MOD_WOW_GUILD_MEMBERS_RANK_9_LABEL = "Rang 9"
MOD_WOW_GUILD_MEMBERS_RANK_10_LABEL = "Rang 10"

MOD_WOW_GUILD_MEMBERS_CACHE_LABEL = "Cache Dauer"
MOD_WOW_GUILD_MEMBERS_CACHE_DESC = "Nach wieviel Minuten sollen die Daten aus dem Armory Neu geladen werden?"

MOD_WOW_GUILD_MEMBERS_TIMEOUT_LABEL = "Timeout"
MOD_WOW_GUILD_MEMBERS_TIMEOUT_DESC = "Wieviel Sekunden soll maximal auf Antwort vom Armory Server gewartet werden?"

MOD_WOW_GUILD_MEMBERS_NAME = "Name"
MOD_WOW_GUILD_MEMBERS_RACE = "Rasse"
MOD_WOW_GUILD_MEMBERS_CLASS = "Klasse"
Expand Down

0 comments on commit 8b80792

Please sign in to comment.