diff --git a/core/Maps/MapManager.php b/core/Maps/MapManager.php index 2ff479d6..589a196a 100644 --- a/core/Maps/MapManager.php +++ b/core/Maps/MapManager.php @@ -139,98 +139,8 @@ class MapManager implements CallbackListener, CommunicationListener { $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MAPLIST_FILE, "MatchSettings/tracklist.txt"); $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WRITE_OWN_MAPLIST_FILE, false); - // Communication Listenings - $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::GET_CURRENT_MAP, $this, function ($data) { - return new CommunicationAnswer($this->getCurrentMap()); - }); - - $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::GET_MAP_LIST, $this, function ($data) { - return new CommunicationAnswer($this->getMapList()); - }); - - $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::GET_MAP, $this, function ($data) { - if (!is_object($data)) { - return new CommunicationAnswer("Error in provided Data", true); - } - - if (property_exists($data, "mxId")) { - return new CommunicationAnswer($this->getMapByMxId($data->mxId)); - } else if (property_exists($data, "mapUid")) { - return new CommunicationAnswer($this->getMapByUid($data->mxUid)); - } else { - return new CommunicationAnswer("No mxId or mapUid provided.", true); - } - }); - - $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::ADD_MAP, $this, function ($data) { - if (!is_object($data) || property_exists($data, "mxId")) { - return new CommunicationAnswer("No valid mxId provided.", true); - } - - if (!$this->getMapByMxId($data->mxId)) { - return new CommunicationAnswer("Map not found.", true); - } - - $this->addMapFromMx($data->mxId, null); - - return new CommunicationAnswer(); - }); - - $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::REMOVE_MAP, $this, function ($data) { - if (!is_object($data) || property_exists($data, "mapUid")) { - return new CommunicationAnswer("No valid mapUid provided.", true); - } - - $erase = false; - if (property_exists($data, "eraseMapFile")) { - $erase = $data->eraseMapFile; - } - $showMessage = true; - if (property_exists($data, "showChatMessage")) { - $showMessage = $data->showChatMessage; - } - - $success = $this->removeMap(null, $data->mapUid, $erase, $showMessage); - return new CommunicationAnswer(array("success" => $success)); - }); - - - $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::UPDATE_MAP, $this, function ($data) { - if (!is_object($data) || property_exists($data, "mapUid")) { - return new CommunicationAnswer("No valid mapUid provided.", true); - } - - $this->updateMap(null, $data->mapUid); - return new CommunicationAnswer(); - }); - } - - /** - * Initialize necessary database tables - * - * @return bool - */ - private function initTables() { - $mysqli = $this->maniaControl->getDatabase()->getMysqli(); - $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_MAPS . "` ( - `index` int(11) NOT NULL AUTO_INCREMENT, - `mxid` int(11), - `uid` varchar(50) NOT NULL, - `name` varchar(150) NOT NULL, - `authorLogin` varchar(100) NOT NULL, - `fileName` varchar(100) NOT NULL, - `environment` varchar(50) NOT NULL, - `mapType` varchar(50) NOT NULL, - `changed` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`index`), - UNIQUE KEY `uid` (`uid`) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Map Data' AUTO_INCREMENT=1;"; - $result = $mysqli->query($query); - if ($mysqli->error) { - trigger_error($mysqli->error, E_USER_ERROR); - return false; - } - return $result; + //Initlaize Communication Listenings + $this->initalizeCommunicationListenings(); } /** @@ -391,8 +301,12 @@ class MapManager implements CallbackListener, CommunicationListener { // Show Message if ($message) { - $action = ($eraseFile ? 'erased' : 'removed'); - $message = $admin->getEscapedNickname() . ' ' . $action . ' ' . $map->getEscapedName() . '!'; + $action = ($eraseFile ? 'erased' : 'removed'); + if ($admin) { + $message = $admin->getEscapedNickname() . ' ' . $action . ' ' . $map->getEscapedName() . '!'; + } else { + $message = $map->getEscapedName() . ' got ' . $action . '!'; + } $this->maniaControl->getChat()->sendSuccess($message); Logger::logInfo($message, true); } @@ -547,19 +461,21 @@ class MapManager implements CallbackListener, CommunicationListener { } $map->lastUpdate = time(); - $player = $this->maniaControl->getPlayerManager()->getPlayer($login); - - if (!$update) { - // Message - $message = $player->getEscapedNickname() . ' added $<' . $mapInfo->name . '$>!'; - $this->maniaControl->getChat()->sendSuccess($message); - Logger::logInfo($message, true); - // Queue requested Map - $this->maniaControl->getMapManager()->getMapQueue()->addMapToMapQueue($login, $mapInfo->uid); - } else { - $message = $player->getEscapedNickname() . ' updated $<' . $mapInfo->name . '$>!'; - $this->maniaControl->getChat()->sendSuccess($message); - Logger::logInfo($message, true); + //TODO messages for communication + if ($login) { + $player = $this->maniaControl->getPlayerManager()->getPlayer($login); + if (!$update) { + // Message + $message = $player->getEscapedNickname() . ' added $<' . $mapInfo->name . '$>!'; + $this->maniaControl->getChat()->sendSuccess($message); + Logger::logInfo($message, true); + // Queue requested Map + $this->maniaControl->getMapManager()->getMapQueue()->addMapToMapQueue($login, $mapInfo->uid); + } else { + $message = $player->getEscapedNickname() . ' updated $<' . $mapInfo->name . '$>!'; + $this->maniaControl->getChat()->sendSuccess($message); + Logger::logInfo($message, true); + } } } @@ -970,4 +886,99 @@ class MapManager implements CallbackListener, CommunicationListener { public function getMapsCount() { return count($this->maps); } + + private function initalizeCommunicationListenings() { + // Communication Listenings + $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::GET_CURRENT_MAP, $this, function ($data) { + return new CommunicationAnswer($this->getCurrentMap()); + }); + + $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::GET_MAP_LIST, $this, function ($data) { + return new CommunicationAnswer($this->getMaps()); + }); + + $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::GET_MAP, $this, function ($data) { + if (!is_object($data)) { + return new CommunicationAnswer("Error in provided Data", true); + } + + if (property_exists($data, "mxId")) { + return new CommunicationAnswer($this->getMapByMxId($data->mxId)); + } else if (property_exists($data, "mapUid")) { + return new CommunicationAnswer($this->getMapByUid($data->mapUid)); + } else { + return new CommunicationAnswer("No mxId or mapUid provided.", true); + } + }); + + $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::ADD_MAP, $this, function ($data) { + if (!is_object($data) || !property_exists($data, "mxId")) { + return new CommunicationAnswer("No valid mxId provided.", true); + } + + $this->addMapFromMx($data->mxId, null); + + return new CommunicationAnswer(); + }); + + $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::REMOVE_MAP, $this, function ($data) { + if (!is_object($data) || !property_exists($data, "mapUid")) { + return new CommunicationAnswer("No valid mapUid provided.", true); + } + + if (!$this->getMapByUid($data->mapUid)) { + return new CommunicationAnswer("Map not found.", true); + } + + $erase = false; + if (property_exists($data, "eraseMapFile")) { + $erase = $data->eraseMapFile; + } + $showMessage = true; + if (property_exists($data, "showChatMessage")) { + $showMessage = $data->showChatMessage; + } + + $success = $this->removeMap(null, $data->mapUid, $erase, $showMessage); + return new CommunicationAnswer(array("success" => $success)); + }); + + + $this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::UPDATE_MAP, $this, function ($data) { + if (!is_object($data) || !property_exists($data, "mapUid")) { + return new CommunicationAnswer("No valid mapUid provided.", true); + } + + $this->updateMap(null, $data->mapUid); + return new CommunicationAnswer(); + }); + } + + /** + * Initialize necessary database tables + * + * @return bool + */ + private function initTables() { + $mysqli = $this->maniaControl->getDatabase()->getMysqli(); + $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_MAPS . "` ( + `index` int(11) NOT NULL AUTO_INCREMENT, + `mxid` int(11), + `uid` varchar(50) NOT NULL, + `name` varchar(150) NOT NULL, + `authorLogin` varchar(100) NOT NULL, + `fileName` varchar(100) NOT NULL, + `environment` varchar(50) NOT NULL, + `mapType` varchar(50) NOT NULL, + `changed` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`index`), + UNIQUE KEY `uid` (`uid`) + ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Map Data' AUTO_INCREMENT=1;"; + $result = $mysqli->query($query); + if ($mysqli->error) { + trigger_error($mysqli->error, E_USER_ERROR); + return false; + } + return $result; + } } diff --git a/core/Maps/MapQueue.php b/core/Maps/MapQueue.php index 2ae0ad32..210a6287 100644 --- a/core/Maps/MapQueue.php +++ b/core/Maps/MapQueue.php @@ -42,10 +42,10 @@ class MapQueue implements CallbackListener, CommandListener { */ /** @var ManiaControl $maniaControl */ private $maniaControl = null; - private $queuedMaps = array(); - private $nextMap = null; - private $buffer = array(); - private $nextNoQueue = false; + private $queuedMaps = array(); + private $nextMap = null; + private $buffer = array(); + private $nextNoQueue = false; /** * Construct a new map queue instance @@ -108,8 +108,7 @@ class MapQueue implements CallbackListener, CommandListener { * @param Player $admin |null */ public function clearMapQueue(Player $admin = null) { - if ($admin && !$this->maniaControl->getAuthenticationManager()->checkPermission($admin, self::SETTING_PERMISSION_CLEAR_MAPQUEUE) - ) { + if ($admin && !$this->maniaControl->getAuthenticationManager()->checkPermission($admin, self::SETTING_PERMISSION_CLEAR_MAPQUEUE)) { $this->maniaControl->getAuthenticationManager()->sendNotAllowed($admin); return; } @@ -308,8 +307,7 @@ class MapQueue implements CallbackListener, CommandListener { // Check if map is in the buffer if (in_array($uid, $this->buffer)) { $this->maniaControl->getChat()->sendError('That map has recently been played!', $login); - if (!$this->maniaControl->getAuthenticationManager()->checkPermission($player, self::SETTING_PERMISSION_CLEAR_MAPQUEUE) - ) { + if (!$this->maniaControl->getAuthenticationManager()->checkPermission($player, self::SETTING_PERMISSION_CLEAR_MAPQUEUE)) { return; } } @@ -329,10 +327,10 @@ class MapQueue implements CallbackListener, CommandListener { /** * Remove a Map from the Map queue * - * @param Player $player - * @param string $uid + * @param Player|null $player + * @param string $uid */ - public function removeFromMapQueue(Player $player, $uid) { + public function removeFromMapQueue($player, $uid) { if (!isset($this->queuedMaps[$uid])) { return; } @@ -340,7 +338,9 @@ class MapQueue implements CallbackListener, CommandListener { $map = $this->queuedMaps[$uid][1]; unset($this->queuedMaps[$uid]); - $this->maniaControl->getChat()->sendInformation('$fa0$<$fff' . $map->name . '$> is removed from the Map-Queue by $<$fff' . $player->nickname . '$>.'); + if ($player) { + $this->maniaControl->getChat()->sendInformation('$fa0$<$fff' . $map->name . '$> is removed from the Map-Queue by $<$fff' . $player->nickname . '$>.'); + } // Trigger callback $this->maniaControl->getCallbackManager()->triggerCallback(self::CB_MAPQUEUE_CHANGED, array('remove', $map)); @@ -359,8 +359,7 @@ class MapQueue implements CallbackListener, CommandListener { } $this->nextMap = null; - if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_SKIP_MAP_ON_LEAVE) - ) { + if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_SKIP_MAP_ON_LEAVE)) { // Skip Map if requester has left foreach ($this->queuedMaps as $queuedMap) { $player = $queuedMap[0]; @@ -423,8 +422,7 @@ class MapQueue implements CallbackListener, CommandListener { return; } - if (count($this->buffer) >= $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_BUFFERSIZE) - ) { + if (count($this->buffer) >= $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_BUFFERSIZE)) { array_shift($this->buffer); }