diff --git a/application/core/Manialinks/ManialinkManager.php b/application/core/Manialinks/ManialinkManager.php index 3142b990..37a13c4e 100644 --- a/application/core/Manialinks/ManialinkManager.php +++ b/application/core/Manialinks/ManialinkManager.php @@ -92,12 +92,17 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener * @return bool */ public function unregisterManialinkPageAnswerListener(ManialinkPageAnswerListener $listener) { - $keys = array_keys($this->pageAnswerListeners, $listener); - foreach($keys as $key) { - unset($this->pageAnswerListeners[$key]); + $removed = false; + foreach($this->pageAnswerListeners as &$listeners) { + foreach($listeners as $key => &$listenerCallback) { + if($listenerCallback[0] != $listener) { + continue; + } + unset($listeners[$key]); + $removed = true; + } } - - return true; + return $removed; } /** diff --git a/application/core/Plugins/PluginManager.php b/application/core/Plugins/PluginManager.php index b2fe730a..3b59c33d 100644 --- a/application/core/Plugins/PluginManager.php +++ b/application/core/Plugins/PluginManager.php @@ -137,15 +137,18 @@ class PluginManager { return false; } $plugin = new $pluginClass(); + $this->activePlugins[$pluginClass] = $plugin; + $this->savePluginStatus($pluginClass, true); try { $plugin->load($this->maniaControl); } catch(\Exception $e) { $this->maniaControl->chat->sendError('Error while plugin activating ' . $pluginClass . ': ' . $e->getMessage(), $adminLogin); $this->maniaControl->log('Error while plugin activation: ' . $pluginClass . ': ' . $e->getMessage()); + unset($this->activePlugins[$pluginClass]); + $this->savePluginStatus($pluginClass, false); return false; } - $this->activePlugins[$pluginClass] = $plugin; $this->savePluginStatus($pluginClass, true); return true; } diff --git a/application/core/Statistics/SimpleStatsList.php b/application/core/Statistics/SimpleStatsList.php new file mode 100644 index 00000000..7637be5c --- /dev/null +++ b/application/core/Statistics/SimpleStatsList.php @@ -0,0 +1,143 @@ +maniaControl = $maniaControl; + + //$this->maniaControl->callbackManager->registerCallbackListener(ManialinkManager::CB_MAIN_WINDOW_CLOSED, $this, 'closeWidget'); + //$this->maniaControl->callbackManager->registerCallbackListener(ManialinkManager::CB_MAIN_WINDOW_OPENED, $this, 'handleWidgetOpened'); + //$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_PLAYERMANIALINKPAGEANSWER, $this, 'handleManialinkPageAnswer'); + + // Action Open Playerlist + //$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_OPEN_STATSLIST, $this, 'command_playerList'); + $itemQuad = new Quad_UIConstruction_Buttons(); + $itemQuad->setSubStyle($itemQuad::SUBSTYLE_Author); + $itemQuad->setAction(self::ACTION_OPEN_STATSLIST); + //$this->maniaControl->actionsMenu->addMenuItem($itemQuad, true, 14, 'Open Statistics'); + } + + + + /** + * Show the PlayerList Widget to the Player + * + * @param Player $player + */ + public function showStatsList(Player $player) { + $width = $this->maniaControl->manialinkManager->styleManager->getListWidgetsWidth(); + $height = $this->maniaControl->manialinkManager->styleManager->getListWidgetsHeight(); + $quadStyle = $this->maniaControl->manialinkManager->styleManager->getDefaultMainWindowStyle(); + $quadSubstyle = $this->maniaControl->manialinkManager->styleManager->getDefaultMainWindowSubStyle(); + + $maniaLink = new ManiaLink(ManialinkManager::MAIN_MLID); + $script = $maniaLink->getScript(); + + // Main frame + $frame = new Frame(); + $maniaLink->add($frame); + $frame->setSize($width, $height); + $frame->setPosition(0, 0, 10); + + // Background + $backgroundQuad = new Quad(); + $frame->add($backgroundQuad); + $backgroundQuad->setSize($width, $height); + $backgroundQuad->setStyles($quadStyle, $quadSubstyle); + + // Close Quad (X) + $closeQuad = new Quad_Icons64x64_1(); + $frame->add($closeQuad); + $closeQuad->setPosition($width * 0.483, $height * 0.467, 3); + $closeQuad->setSize(6, 6); + $closeQuad->setSubStyle(Quad_Icons64x64_1::SUBSTYLE_QuitRace); + $closeQuad->setAction(ManialinkManager::ACTION_CLOSEWIDGET); + + // Start offsets + $x = -$width / 2; + $y = $height / 2; + + // Predefine Description Label + $descriptionLabel = new Label(); + $frame->add($descriptionLabel); + $descriptionLabel->setAlign(Control::LEFT, Control::TOP); + $descriptionLabel->setPosition($x + 10, -$height / 2 + 5); + $descriptionLabel->setSize($width * 0.7, 4); + $descriptionLabel->setTextSize(2); + $descriptionLabel->setVisible(false); + + // Headline + $headFrame = new Frame(); + $frame->add($headFrame); + $headFrame->setY($y - 5); + + $array = array("Id" => $x + 5, "Nickname" => $x + 18, "Login" => $x + 70, "Location" => $x + 101); + $this->maniaControl->manialinkManager->labelLine($headFrame, $array); + + // get PlayerList + $players = $this->maniaControl->playerManager->getPlayers(); + + $i = 1; + $y -= 10; + foreach($players as $listPlayer) { + /** + * + * @var Player $listPlayer + */ + + $path = $listPlayer->getProvince(); + $playerFrame = new Frame(); + $frame->add($playerFrame); + + if($i % 2 != 0) { + $lineQuad = new Quad_BgsPlayerCard(); + $playerFrame->add($lineQuad); + $lineQuad->setSize($width, 4); + $lineQuad->setSubStyle($lineQuad::SUBSTYLE_BgPlayerCardBig); + $lineQuad->setZ(0.001); + } + + $array = array($i => $x + 5, $listPlayer->nickname => $x + 18, $listPlayer->login => $x + 70, $path => $x + 101); + $this->maniaControl->manialinkManager->labelLine($playerFrame, $array); + + $playerFrame->setY($y); + + + $i++; + $y -= 4; + } + + // Render and display xml + $this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'PlayerList'); + } +} \ No newline at end of file diff --git a/application/core/Statistics/StatisticManager.php b/application/core/Statistics/StatisticManager.php index a82a9909..7d0741cc 100644 --- a/application/core/Statistics/StatisticManager.php +++ b/application/core/Statistics/StatisticManager.php @@ -6,6 +6,7 @@ use ManiaControl\ManiaControl; use ManiaControl\Players\Player; require_once __DIR__ . '/StatisticCollector.php'; +require_once __DIR__ . '/SimpleStatsList.php'; /** * Statistic Manager Class @@ -19,15 +20,16 @@ class StatisticManager { * Constants */ const TABLE_STATMETADATA = 'mc_statmetadata'; - const TABLE_STATISTICS = 'mc_statistics'; - const STAT_TYPE_INT = '0'; - const STAT_TYPE_TIME = '1'; - + const TABLE_STATISTICS = 'mc_statistics'; + const STAT_TYPE_INT = '0'; + const STAT_TYPE_TIME = '1'; + /** * Public Properties */ public $statisticCollector = null; - + public $simpleStatsList = null; + /** * Private Properties */ @@ -42,9 +44,10 @@ class StatisticManager { public function __construct(ManiaControl $maniaControl) { $this->maniaControl = $maniaControl; $this->initTables(); - + $this->statisticCollector = new StatisticCollector($maniaControl); - + $this->simpleStatsList = new SimpleStatsList($maniaControl); + // Store Stats MetaData $this->storeStatMetaData(); } @@ -52,36 +55,33 @@ class StatisticManager { /** * Get the value of an statistic * - * @param $statName - * @param $playerId + * @param $statName + * @param $playerId * @param int $serverIndex * @return int */ public function getStatisticData($statName, $playerId, $serverIndex = -1) { $mysqli = $this->maniaControl->database->mysqli; $statId = $this->getStatId($statName); - - if ($statId == null) { + + if($statId == null) { return -1; } - - if ($serverIndex == -1) { - $query = "SELECT SUM(value) as value FROM `" . self::TABLE_STATISTICS . "` WHERE `statId` = " . $statId . " AND `playerId` = " . $playerId . - ";"; + + if($serverIndex == -1) { + $query = "SELECT SUM(value) as value FROM `" . self::TABLE_STATISTICS . "` WHERE `statId` = " . $statId . " AND `playerId` = " . $playerId . ";"; + } else { + $query = "SELECT value FROM `" . self::TABLE_STATISTICS . "` WHERE `statId` = " . $statId . " AND `playerId` = " . $playerId . " AND `serverIndex` = '" . $serverIndex . "';"; } - else { - $query = "SELECT value FROM `" . self::TABLE_STATISTICS . "` WHERE `statId` = " . $statId . " AND `playerId` = " . $playerId . - " AND `serverIndex` = '" . $serverIndex . "';"; - } - + $result = $mysqli->query($query); - if (!$result) { + if(!$result) { trigger_error($mysqli->error); return null; } - + $row = $result->fetch_object(); - + $result->close(); return $row->value; } @@ -91,15 +91,15 @@ class StatisticManager { */ private function storeStatMetaData() { $mysqli = $this->maniaControl->database->mysqli; - - $query = "SELECT * FROM `" . self::TABLE_STATMETADATA . "`;"; + + $query = "SELECT * FROM `" . self::TABLE_STATMETADATA . "`;"; $result = $mysqli->query($query); - if (!$result) { + if(!$result) { trigger_error($mysqli->error); return; } - - while ($row = $result->fetch_object()) { + + while($row = $result->fetch_object()) { $this->stats[$row->name] = $row; } $result->close(); @@ -112,9 +112,9 @@ class StatisticManager { * @return int */ private function getStatId($statName) { - if (isset($this->stats[$statName])) { + if(isset($this->stats[$statName])) { $stat = $this->stats[$statName]; - return (int) $stat->index; + return (int)$stat->index; } return null; } @@ -123,17 +123,17 @@ class StatisticManager { * Get all statistics of a certain palyer * * @param Player $player - * @param int $serverIndex + * @param int $serverIndex * @return array */ public function getAllPlayerStats(Player $player, $serverIndex = -1) { // TODO improve performance $playerStats = array(); - foreach ($this->stats as $stat) { - $value = $this->getStatisticData($stat->name, $player->index, $serverIndex); + foreach($this->stats as $stat) { + $value = $this->getStatisticData($stat->name, $player->index, $serverIndex); $playerStats[$stat->name] = array($stat, $value); } - + return $playerStats; } @@ -142,23 +142,29 @@ class StatisticManager { * * @param string $statName * @param Player $player - * @param int $serverIndex - * @param mixed $value , value to Add + * @param int $serverIndex + * @param mixed $value , value to Add * @param string $statType * @return bool */ public function insertStat($statName, Player $player, $serverIndex = -1, $value, $statType = self::STAT_TYPE_INT) { - if (!$player) return false; - if ($player->isFakePlayer()) return true; + if(!$player) { + return false; + } + if($player->isFakePlayer()) { + return true; + } $statId = $this->getStatId($statName); - if (!$statId) return false; - - if ($serverIndex == -1) { + if(!$statId) { + return false; + } + + if($serverIndex == -1) { $serverIndex = $this->maniaControl->server->index; } - - $mysqli = $this->maniaControl->database->mysqli; - $query = "INSERT INTO `" . self::TABLE_STATISTICS . "` ( + + $mysqli = $this->maniaControl->database->mysqli; + $query = "INSERT INTO `" . self::TABLE_STATISTICS . "` ( `serverIndex`, `playerId`, `statId`, @@ -168,13 +174,13 @@ class StatisticManager { ) ON DUPLICATE KEY UPDATE `value` = `value` + VALUES(`value`);"; $statement = $mysqli->prepare($query); - if ($mysqli->error) { + if($mysqli->error) { trigger_error($mysqli->error); return false; } $statement->bind_param('iiii', $serverIndex, $player->index, $statId, $value); $statement->execute(); - if ($statement->error) { + if($statement->error) { trigger_error($statement->error); $statement->close(); return false; @@ -188,7 +194,7 @@ class StatisticManager { * * @param string $statName * @param Player $player - * @param int $serverIndex + * @param int $serverIndex * @return bool */ public function incrementStat($statName, Player $player, $serverIndex = -1) { @@ -198,14 +204,14 @@ class StatisticManager { /** * Defines a Stat * - * @param $statName + * @param $statName * @param string $type * @param string $statDescription * @return bool */ public function defineStatMetaData($statName, $type = self::STAT_TYPE_INT, $statDescription = '') { - $mysqli = $this->maniaControl->database->mysqli; - $query = "INSERT INTO `" . self::TABLE_STATMETADATA . "` ( + $mysqli = $this->maniaControl->database->mysqli; + $query = "INSERT INTO `" . self::TABLE_STATMETADATA . "` ( `name`, `type`, `description` @@ -215,13 +221,13 @@ class StatisticManager { `type` = VALUES(`type`), `description` = VALUES(`description`);"; $statement = $mysqli->prepare($query); - if ($mysqli->error) { + if($mysqli->error) { trigger_error($mysqli->error); return false; } $statement->bind_param('sis', $statName, $type, $statDescription); $statement->execute(); - if ($statement->error) { + if($statement->error) { trigger_error($statement->error); $statement->close(); return false; @@ -236,8 +242,8 @@ class StatisticManager { * @return bool */ private function initTables() { - $mysqli = $this->maniaControl->database->mysqli; - $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_STATMETADATA . "` ( + $mysqli = $this->maniaControl->database->mysqli; + $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_STATMETADATA . "` ( `index` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `type` int(5) NOT NULL, @@ -246,18 +252,18 @@ class StatisticManager { UNIQUE KEY `name` (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Statistics Meta Data' AUTO_INCREMENT=1;"; $statement = $mysqli->prepare($query); - if ($mysqli->error) { + if($mysqli->error) { trigger_error($mysqli->error, E_USER_ERROR); return false; } $statement->execute(); - if ($statement->error) { + if($statement->error) { trigger_error($statement->error, E_USER_ERROR); return false; } $statement->close(); - - $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_STATISTICS . "` ( + + $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_STATISTICS . "` ( `index` int(11) NOT NULL AUTO_INCREMENT, `serverIndex` int(11) NOT NULL, `playerId` int(11) NOT NULL, @@ -267,12 +273,12 @@ class StatisticManager { UNIQUE KEY `unique` (`statId`,`playerId`,`serverIndex`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Statistics' AUTO_INCREMENT=1;"; $statement = $mysqli->prepare($query); - if ($mysqli->error) { + if($mysqli->error) { trigger_error($mysqli->error, E_USER_ERROR); return false; } $statement->execute(); - if ($statement->error) { + if($statement->error) { trigger_error($statement->error, E_USER_ERROR); return false; } diff --git a/application/plugins/CustomVotes.php b/application/plugins/CustomVotes.php index bc7b8150..d8c17c56 100644 --- a/application/plugins/CustomVotes.php +++ b/application/plugins/CustomVotes.php @@ -139,6 +139,8 @@ class CustomVotesPlugin implements CommandListener, CallbackListener, ManialinkP $manialinkText = $emptyManialink->render()->saveXML(); $this->maniaControl->manialinkManager->sendManialink($manialinkText); $this->maniaControl->commandManager->unregisterCommandListener($this); + $this->maniaControl->callbackManager->unregisterCallbackListener($this); + $this->maniaControl->manialinkManager->unregisterManialinkPageAnswerListener($this); unset($this->maniaControl); }