diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml
new file mode 100644
index 00000000..8b44f614
--- /dev/null
+++ b/.idea/codeStyleSettings.xml
@@ -0,0 +1,213 @@
+
+
+
+
+
+
+
+
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 00000000..0218f4cb
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/application/ManiaControl.php b/application/ManiaControl.php
index f6043cee..cba5fa71 100644
--- a/application/ManiaControl.php
+++ b/application/ManiaControl.php
@@ -4,7 +4,7 @@
define('LOG_WRITE_CURRENT_FILE', 'ManiaControl.log'); // Write current log to extra file in base dir
define('LOG_NAME_USE_DATE', true); // Use current date as suffix for log file name in logs folder
define('LOG_NAME_USE_PID', true); // Use current process id as suffix for log file name in logs folder
-
+
// Define base dir
define('ManiaControlDir', __DIR__);
@@ -51,8 +51,7 @@ logMessage('Starting ManiaControl ...');
logMessage('Checking for installed MySQLi ... ', false);
if (extension_loaded('mysqli')) {
logMessage('FOUND!');
-}
-else {
+} else {
logMessage('NOT FOUND!');
logMessage(' -- You don\'t have MySQLi installed, make sure to check: http://www.php.net/manual/en/mysqli.installation.php');
exit();
@@ -61,8 +60,7 @@ else {
logMessage('Checking for installed cURL ... ', false);
if (extension_loaded('curl')) {
logMessage('FOUND!');
-}
-else {
+} else {
logMessage('NOT FOUND!');
logMessage('You don\'t have cURL installed, make sure to check: http://www.php.net/manual/en/curl.installation.php');
exit();
@@ -70,11 +68,12 @@ else {
/**
* Log and echo the given text
- *
+ *
* @param string $message
+ * @param bool $eol
*/
function logMessage($message, $eol = true) {
- $date = date("d.M y H:i:s");
+ $date = date("d.M y H:i:s");
$message = $date . ' ' . $message;
if ($eol) {
$message .= PHP_EOL;
@@ -93,15 +92,15 @@ function logMessage($message, $eol = true) {
// Autoload Function that loads ManiaControl Class Files on Demand
spl_autoload_register(function ($className) {
$classPath = str_replace('\\', DIRECTORY_SEPARATOR, $className);
-
+
// Core file
$classDirectoryPath = preg_replace('/ManiaControl/', 'core', $classPath, 1);
- $filePath = ManiaControlDir . DIRECTORY_SEPARATOR . $classDirectoryPath . '.php';
+ $filePath = ManiaControlDir . DIRECTORY_SEPARATOR . $classDirectoryPath . '.php';
if (file_exists($filePath)) {
require_once $filePath;
return;
}
-
+
// Plugin file
$filePath = ManiaControlDir . DIRECTORY_SEPARATOR . 'plugins/' . $classPath . '.php';
if (file_exists($filePath)) {
diff --git a/application/configs/server.xml b/application/configs/server.xml
index 8e0d1d4a..eff62ecc 100644
--- a/application/configs/server.xml
+++ b/application/configs/server.xml
@@ -11,7 +11,7 @@
SuperAdmin
password
-
+
diff --git a/application/core/Admin/ActionsMenu.php b/application/core/Admin/ActionsMenu.php
index 88d67006..3c5e8158 100644
--- a/application/core/Admin/ActionsMenu.php
+++ b/application/core/Admin/ActionsMenu.php
@@ -18,21 +18,21 @@ use ManiaControl\Players\PlayerManager;
/**
* Class managing Actions Menus
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
/*
* Constants
*/
- const MLID_MENU = 'ActionsMenu.MLID';
- const SETTING_MENU_POSX = 'Menu Position: X';
- const SETTING_MENU_POSY = 'Menu Position: Y';
- const SETTING_MENU_ITEMSIZE = 'Menu Item Size';
- const ACTION_OPEN_ADMIN_MENU = 'ActionsMenu.OpenAdminMenu';
+ const MLID_MENU = 'ActionsMenu.MLID';
+ const SETTING_MENU_POSX = 'Menu Position: X';
+ const SETTING_MENU_POSY = 'Menu Position: Y';
+ const SETTING_MENU_ITEMSIZE = 'Menu Item Size';
+ const ACTION_OPEN_ADMIN_MENU = 'ActionsMenu.OpenAdminMenu';
const ACTION_OPEN_PLAYER_MENU = 'ActionsMenu.OpenPlayerMenu';
-
+
/*
* Private Properties
*/
@@ -48,12 +48,12 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
*/
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
-
+
// Init settings
$this->maniaControl->settingManager->initSetting($this, self::SETTING_MENU_POSX, 156.);
$this->maniaControl->settingManager->initSetting($this, self::SETTING_MENU_POSY, -17.);
$this->maniaControl->settingManager->initSetting($this, self::SETTING_MENU_ITEMSIZE, 6.);
-
+
// Register for callbacks
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_AFTERINIT, $this, 'handleAfterInit');
$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerJoined');
@@ -64,41 +64,24 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
* Add a new Menu Item
*
* @param Control $control
- * @param bool $playerAction
- * @param int $order
- * @param string $description
+ * @param bool $playerAction
+ * @param int $order
+ * @param string $description
*/
public function addMenuItem(Control $control, $playerAction = true, $order = 0, $description = null) {
if ($playerAction) {
$this->addPlayerMenuItem($control, $order, $description);
- }
- else {
+ } else {
$this->addAdminMenuItem($control, $order, $description);
}
}
- /**
- * Removes a Menu Item
- *
- * @param $order
- * @param bool $playerAction
- */
- public function removeMenuItem($order, $playerAction = true) {
- if ($playerAction) {
- unset($this->playerMenuItems[$order]);
- }
- else {
- unset($this->adminMenuItems[$order]);
- }
- $this->rebuildAndShowMenu();
- }
-
/**
* Add a new Player Menu Item
*
* @param Control $control
- * @param int $order
- * @param string $description
+ * @param int $order
+ * @param string $description
*/
public function addPlayerMenuItem(Control $control, $order = 0, $description = null) {
if (!isset($this->playerMenuItems[$order])) {
@@ -109,30 +92,6 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
$this->rebuildAndShowMenu();
}
- /**
- * Add a new Admin Menu Item
- *
- * @param Control $control
- * @param int $order
- * @param string $description
- */
- public function addAdminMenuItem(Control $control, $order = 0, $description = null) {
- if (!isset($this->adminMenuItems[$order])) {
- $this->adminMenuItems[$order] = array();
- }
- array_push($this->adminMenuItems[$order], array($control, $description));
- krsort($this->adminMenuItems);
- $this->rebuildAndShowMenu();
- }
-
- /**
- * Handle ManiaControl AfterInit callback
- */
- public function handleAfterInit() {
- $this->initCompleted = true;
- $this->rebuildAndShowMenu();
- }
-
/**
* Build and show the menus to everyone (if a menu get made after the init)
*/
@@ -147,16 +106,6 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
}
}
- /**
- * Handle PlayerJoined callback
- *
- * @param Player $player
- */
- public function handlePlayerJoined(Player $player) {
- $maniaLink = $this->buildMenuIconsManialink($player);
- $this->maniaControl->manialinkManager->sendManialink($maniaLink, $player->login);
- }
-
/**
* Builds the Manialink
*
@@ -164,22 +113,22 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
* @return ManiaLink
*/
private function buildMenuIconsManialink(Player $player) {
- $posX = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_POSX);
- $posY = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_POSY);
- $itemSize = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_ITEMSIZE);
- $shootManiaOffset = $this->maniaControl->manialinkManager->styleManager->getDefaultIconOffsetSM();
- $quadStyle = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadStyle();
- $quadSubstyle = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadSubstyle();
+ $posX = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_POSX);
+ $posY = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_POSY);
+ $itemSize = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MENU_ITEMSIZE);
+ $shootManiaOffset = $this->maniaControl->manialinkManager->styleManager->getDefaultIconOffsetSM();
+ $quadStyle = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadStyle();
+ $quadSubstyle = $this->maniaControl->manialinkManager->styleManager->getDefaultQuadSubstyle();
$itemMarginFactorX = 1.3;
$itemMarginFactorY = 1.2;
-
+
// If game is shootmania lower the icons position by 20
if ($this->maniaControl->mapManager->getCurrentMap()->getGame() == 'sm') {
$posY -= $shootManiaOffset;
}
-
+
$manialink = new ManiaLink(self::MLID_MENU);
-
+
/*
* Admin Menu
*/
@@ -188,17 +137,17 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
$iconFrame = new Frame();
$manialink->add($iconFrame);
$iconFrame->setPosition($posX, $posY);
-
+
$backgroundQuad = new Quad();
$iconFrame->add($backgroundQuad);
$backgroundQuad->setSize($itemSize * $itemMarginFactorX, $itemSize * $itemMarginFactorY);
$backgroundQuad->setStyles($quadStyle, $quadSubstyle);
-
+
$itemQuad = new Quad_Icons64x64_1();
$iconFrame->add($itemQuad);
$itemQuad->setSubStyle($itemQuad::SUBSTYLE_IconServers);
$itemQuad->setSize($itemSize, $itemSize);
-
+
// Admin Menu Description
$descriptionLabel = new Label();
$manialink->add($descriptionLabel);
@@ -207,7 +156,7 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
$descriptionLabel->setSize(40, 4);
$descriptionLabel->setTextSize(1.4);
$descriptionLabel->setTextColor('fff');
-
+
// Admin Menu
$popoutFrame = new Frame();
$manialink->add($popoutFrame);
@@ -215,15 +164,15 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
$popoutFrame->setHAlign(Control::RIGHT);
$popoutFrame->setSize(4 * $itemSize * $itemMarginFactorX, $itemSize * $itemMarginFactorY);
$popoutFrame->setVisible(false);
-
+
$backgroundQuad = new Quad();
$popoutFrame->add($backgroundQuad);
$backgroundQuad->setHAlign(Control::RIGHT);
$backgroundQuad->setStyles($quadStyle, $quadSubstyle);
$backgroundQuad->setSize(count($this->adminMenuItems) * $itemSize * 1.15 + 2, $itemSize * $itemMarginFactorY);
-
+
$itemQuad->addToggleFeature($popoutFrame);
-
+
// Add items
$x = -1;
foreach ($this->adminMenuItems as $menuItems) {
@@ -237,7 +186,7 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
$menuQuad->setX($x);
$menuQuad->setHAlign(Control::RIGHT);
$x -= $itemSize * 1.05;
-
+
if ($menuItem[1]) {
$menuQuad->removeScriptFeatures();
$description = '$s' . $menuItem[1];
@@ -246,7 +195,7 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
}
}
}
-
+
/*
* Player Menu
*/
@@ -254,17 +203,17 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
$iconFrame = new Frame();
$manialink->add($iconFrame);
$iconFrame->setPosition($posX, $posY - $itemSize * $itemMarginFactorY);
-
+
$backgroundQuad = new Quad();
$iconFrame->add($backgroundQuad);
$backgroundQuad->setSize($itemSize * $itemMarginFactorX, $itemSize * $itemMarginFactorY);
$backgroundQuad->setStyles($quadStyle, $quadSubstyle);
-
+
$itemQuad = new Quad_Icons64x64_1();
$iconFrame->add($itemQuad);
$itemQuad->setSubStyle($itemQuad::SUBSTYLE_IconPlayers);
$itemQuad->setSize($itemSize, $itemSize);
-
+
// Player Menu Description
$descriptionLabel = new Label();
$manialink->add($descriptionLabel);
@@ -273,7 +222,7 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
$descriptionLabel->setSize(40, 4);
$descriptionLabel->setTextSize(1.4);
$descriptionLabel->setTextColor('fff');
-
+
// Player Menu
$popoutFrame = new Frame();
$manialink->add($popoutFrame);
@@ -281,15 +230,15 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
$popoutFrame->setHAlign(Control::RIGHT);
$popoutFrame->setSize(4 * $itemSize * $itemMarginFactorX, $itemSize * $itemMarginFactorY);
$popoutFrame->setVisible(false);
-
+
$backgroundQuad = new Quad();
$popoutFrame->add($backgroundQuad);
$backgroundQuad->setHAlign(Control::RIGHT);
$backgroundQuad->setStyles($quadStyle, $quadSubstyle);
$backgroundQuad->setSize(count($this->playerMenuItems) * $itemSize * 1.15 + 2, $itemSize * $itemMarginFactorY);
-
+
$itemQuad->addToggleFeature($popoutFrame);
-
+
// Add items
$x = -1;
foreach ($this->playerMenuItems as $menuItems) {
@@ -303,7 +252,7 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
$menuQuad->setX($x);
$menuQuad->setHAlign(Control::RIGHT);
$x -= $itemSize * 1.05;
-
+
if ($menuItem[1]) {
$menuQuad->removeScriptFeatures();
$description = '$s' . $menuItem[1];
@@ -311,7 +260,56 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
}
}
}
-
+
return $manialink;
}
+
+ /**
+ * Add a new Admin Menu Item
+ *
+ * @param Control $control
+ * @param int $order
+ * @param string $description
+ */
+ public function addAdminMenuItem(Control $control, $order = 0, $description = null) {
+ if (!isset($this->adminMenuItems[$order])) {
+ $this->adminMenuItems[$order] = array();
+ }
+ array_push($this->adminMenuItems[$order], array($control, $description));
+ krsort($this->adminMenuItems);
+ $this->rebuildAndShowMenu();
+ }
+
+ /**
+ * Removes a Menu Item
+ *
+ * @param $order
+ * @param bool $playerAction
+ */
+ public function removeMenuItem($order, $playerAction = true) {
+ if ($playerAction) {
+ unset($this->playerMenuItems[$order]);
+ } else {
+ unset($this->adminMenuItems[$order]);
+ }
+ $this->rebuildAndShowMenu();
+ }
+
+ /**
+ * Handle ManiaControl AfterInit callback
+ */
+ public function handleAfterInit() {
+ $this->initCompleted = true;
+ $this->rebuildAndShowMenu();
+ }
+
+ /**
+ * Handle PlayerJoined callback
+ *
+ * @param Player $player
+ */
+ public function handlePlayerJoined(Player $player) {
+ $maniaLink = $this->buildMenuIconsManialink($player);
+ $this->maniaControl->manialinkManager->sendManialink($maniaLink, $player->login);
+ }
}
diff --git a/application/core/Admin/AdminLists.php b/application/core/Admin/AdminLists.php
index bf83d7ae..06721456 100644
--- a/application/core/Admin/AdminLists.php
+++ b/application/core/Admin/AdminLists.php
@@ -20,10 +20,10 @@ use ManiaControl\Players\Player;
/**
* Widget Class listing Authorized Players
- *
- * @author kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
/*
@@ -61,8 +61,8 @@ class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
/**
* Open Admin List Action
- *
- * @param array $callback
+ *
+ * @param array $callback
* @param Player $player
*/
public function openAdminList(array $callback, Player $player) {
@@ -71,7 +71,7 @@ class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
/**
* Show the Admin List
- *
+ *
* @param Player $player
*/
public function showAdminLists(Player $player) {
@@ -90,8 +90,8 @@ class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
//Create ManiaLink
$maniaLink = new ManiaLink(ManialinkManager::MAIN_MLID);
$script = $maniaLink->getScript();
- $paging = new Paging();
- $script->addFeature($paging);
+ $paging = new Paging();
+ $script->addFeature($paging);
// Main frame
$frame = $this->maniaControl->manialinkManager->styleManager->getDefaultListFrame($script, $pagesId);
@@ -115,7 +115,7 @@ class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
$i = 1;
$y = $y - 10;
$pageFrames = array();
- foreach($admins as $admin) {
+ foreach ($admins as $admin) {
if (!isset($pageFrame)) {
$pageFrame = new Frame();
$frame->add($pageFrame);
@@ -124,7 +124,7 @@ class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
}
array_push($pageFrames, $pageFrame);
$y = $height / 2 - 10;
- $paging->addPage($pageFrame);
+ $paging->addPage($pageFrame);
}
@@ -158,8 +158,8 @@ class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
$rightLabel->setTextSize(0.8);
$rightLabel->setZ(10);
$rightLabel->setText($this->maniaControl->authenticationManager->getAuthLevelAbbreviation($admin));
- $description = $this->maniaControl->authenticationManager->getAuthLevelName($admin) . " " . $admin->nickname;
- $rightLabel->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = $this->maniaControl->authenticationManager->getAuthLevelName($admin) . " " . $admin->nickname;
+ $rightLabel->addTooltipLabelFeature($descriptionLabel, $description);
//Revoke Button
if ($admin->authLevel > 0 && $this->maniaControl->authenticationManager->checkRight($player, $admin->authLevel + 1)) {
@@ -217,7 +217,7 @@ class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
$adminLogin = $callback[1][1];
$targetLogin = $actionArray[2];
- switch($action) {
+ switch ($action) {
case self::ACTION_REVOKE_RIGHTS:
$this->maniaControl->playerManager->playerActions->revokeAuthLevel($adminLogin, $targetLogin);
break;
@@ -227,10 +227,10 @@ class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
/**
* Reopen the widget on Map Begin, MapListChanged, etc.
*
- * @param array $callback
+ * @param Player $player
*/
public function updateWidget(Player $player) {
- foreach($this->adminListShown as $login => $shown) {
+ foreach ($this->adminListShown as $login => $shown) {
if ($shown) {
$player = $this->maniaControl->playerManager->getPlayer($login);
if ($player) {
diff --git a/application/core/Admin/AuthCommands.php b/application/core/Admin/AuthCommands.php
index 2dccd93c..d76428b6 100644
--- a/application/core/Admin/AuthCommands.php
+++ b/application/core/Admin/AuthCommands.php
@@ -2,16 +2,16 @@
namespace ManiaControl\Admin;
-use ManiaControl\ManiaControl;
use ManiaControl\Commands\CommandListener;
+use ManiaControl\ManiaControl;
use ManiaControl\Players\Player;
/**
* Class offering Commands to grant Authorizations to Players
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class AuthCommands implements CommandListener {
/*
@@ -22,29 +22,29 @@ class AuthCommands implements CommandListener {
/**
* Create a new AuthCommands instance
*
- * @param ManiaControl $maniaControl
+ * @param ManiaControl $maniaControl
*/
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
-
+
// Register for commands
- $this->maniaControl->commandManager->registerCommandListener('addsuperadmin', $this, 'command_AddSuperAdmin',true, 'Adds player to adminlist as SuperAdmin.');
- $this->maniaControl->commandManager->registerCommandListener('addadmin', $this, 'command_AddAdmin',true, 'Adds player to adminlist as Admin.');
- $this->maniaControl->commandManager->registerCommandListener('addmod', $this, 'command_AddModerator',true, 'Add player to adminlist as Moderator.');
+ $this->maniaControl->commandManager->registerCommandListener('addsuperadmin', $this, 'command_AddSuperAdmin', true, 'Add Player to the AdminList as SuperAdmin.');
+ $this->maniaControl->commandManager->registerCommandListener('addadmin', $this, 'command_AddAdmin', true, 'Add Player to the AdminList as Admin.');
+ $this->maniaControl->commandManager->registerCommandListener('addmod', $this, 'command_AddModerator', true, 'Add Player to the AdminList as Moderator.');
}
/**
* Handle //addsuperadmin command
*
- * @param array $chatCallback
- * @param Player $player
+ * @param array $chatCallback
+ * @param Player $player
*/
public function command_AddSuperAdmin(array $chatCallback, Player $player) {
if (!AuthenticationManager::checkRight($player, AuthenticationManager::AUTH_LEVEL_MASTERADMIN)) {
$this->maniaControl->authenticationManager->sendNotAllowed($player);
return;
}
- $text = $chatCallback[1][2];
+ $text = $chatCallback[1][2];
$commandParts = explode(' ', $text);
if (!array_key_exists(1, $commandParts)) {
$this->sendAddSuperAdminUsageInfo($player);
@@ -64,18 +64,29 @@ class AuthCommands implements CommandListener {
$this->maniaControl->chat->sendSuccess($message);
}
+ /**
+ * Send usage example for //addsuperadmin command
+ *
+ * @param Player $player
+ * @return bool
+ */
+ private function sendAddSuperAdminUsageInfo(Player $player) {
+ $message = "Usage Example: '//addsuperadmin login'";
+ return $this->maniaControl->chat->sendUsageInfo($message, $player->login);
+ }
+
/**
* Handle //addadmin command
*
- * @param array $chatCallback
- * @param Player $player
+ * @param array $chatCallback
+ * @param Player $player
*/
public function command_AddAdmin(array $chatCallback, Player $player) {
if (!AuthenticationManager::checkRight($player, AuthenticationManager::AUTH_LEVEL_SUPERADMIN)) {
$this->maniaControl->authenticationManager->sendNotAllowed($player);
return;
}
- $text = $chatCallback[1][2];
+ $text = $chatCallback[1][2];
$commandParts = explode(' ', $text);
if (!array_key_exists(1, $commandParts)) {
$this->sendAddAdminUsageInfo($player);
@@ -95,18 +106,29 @@ class AuthCommands implements CommandListener {
$this->maniaControl->chat->sendSuccess($message);
}
+ /**
+ * Send usage example for //addadmin command
+ *
+ * @param Player $player
+ * @return bool
+ */
+ private function sendAddAdminUsageInfo(Player $player) {
+ $message = "Usage Example: '//addadmin login'";
+ return $this->maniaControl->chat->sendUsageInfo($message, $player->login);
+ }
+
/**
* Handle //addmod command
*
- * @param array $chatCallback
- * @param Player $player
+ * @param array $chatCallback
+ * @param Player $player
*/
public function command_AddModerator(array $chatCallback, Player $player) {
if (!AuthenticationManager::checkRight($player, AuthenticationManager::AUTH_LEVEL_ADMIN)) {
$this->maniaControl->authenticationManager->sendNotAllowed($player);
return;
}
- $text = $chatCallback[1][2];
+ $text = $chatCallback[1][2];
$commandParts = explode(' ', $text);
if (!array_key_exists(1, $commandParts)) {
$this->sendAddModeratorUsageInfo($player);
@@ -126,32 +148,10 @@ class AuthCommands implements CommandListener {
$this->maniaControl->chat->sendSuccess($message);
}
- /**
- * Send usage example for //addsuperadmin command
- *
- * @param Player $player
- * @return bool
- */
- private function sendAddSuperAdminUsageInfo(Player $player) {
- $message = "Usage Example: '//addsuperadmin login'";
- return $this->maniaControl->chat->sendUsageInfo($message, $player->login);
- }
-
- /**
- * Send usage example for //addadmin command
- *
- * @param Player $player
- * @return bool
- */
- private function sendAddAdminUsageInfo(Player $player) {
- $message = "Usage Example: '//addadmin login'";
- return $this->maniaControl->chat->sendUsageInfo($message, $player->login);
- }
-
/**
* Send usage example for //addop command
*
- * @param Player $player
+ * @param Player $player
* @return bool
*/
private function sendAddModeratorUsageInfo(Player $player) {
diff --git a/application/core/Admin/AuthenticationManager.php b/application/core/Admin/AuthenticationManager.php
index 39eac23e..e39de66a 100644
--- a/application/core/Admin/AuthenticationManager.php
+++ b/application/core/Admin/AuthenticationManager.php
@@ -10,32 +10,32 @@ use ManiaControl\Players\PlayerManager;
/**
* Class managing Authentication Levels
- *
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class AuthenticationManager implements CallbackListener {
/*
* Constants
*/
- const AUTH_LEVEL_PLAYER = 0;
- const AUTH_LEVEL_MODERATOR = 1;
- const AUTH_LEVEL_ADMIN = 2;
- const AUTH_LEVEL_SUPERADMIN = 3;
+ const AUTH_LEVEL_PLAYER = 0;
+ const AUTH_LEVEL_MODERATOR = 1;
+ const AUTH_LEVEL_ADMIN = 2;
+ const AUTH_LEVEL_SUPERADMIN = 3;
const AUTH_LEVEL_MASTERADMIN = 4;
- const AUTH_NAME_PLAYER = 'Player';
- const AUTH_NAME_MODERATOR = 'Moderator';
- const AUTH_NAME_ADMIN = 'Admin';
- const AUTH_NAME_SUPERADMIN = 'SuperAdmin';
- const AUTH_NAME_MASTERADMIN = 'MasterAdmin';
- const CB_AUTH_LEVEL_CHANGED = 'AuthenticationManager.AuthLevelChanged';
-
+ const AUTH_NAME_PLAYER = 'Player';
+ const AUTH_NAME_MODERATOR = 'Moderator';
+ const AUTH_NAME_ADMIN = 'Admin';
+ const AUTH_NAME_SUPERADMIN = 'SuperAdmin';
+ const AUTH_NAME_MASTERADMIN = 'MasterAdmin';
+ const CB_AUTH_LEVEL_CHANGED = 'AuthenticationManager.AuthLevelChanged';
+
/*
* Public Properties
*/
public $authCommands = null;
-
+
/*
* Private Properties
*/
@@ -43,196 +43,19 @@ class AuthenticationManager implements CallbackListener {
/**
* Construct a new Authentication Manager
- *
+ *
* @param \ManiaControl\ManiaControl $maniaControl
*/
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
$this->authCommands = new AuthCommands($maniaControl);
-
+
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_ONINIT, $this, 'handleOnInit');
}
- /**
- * Handle ManiaControl OnInit Callback
- */
- public function handleOnInit() {
- $this->updateMasterAdmins();
- }
-
- /**
- * Update MasterAdmins based on config
- *
- * @return bool
- */
- private function updateMasterAdmins() {
- $mysqli = $this->maniaControl->database->mysqli;
-
- // Remove all MasterAdmins
- $adminQuery = "UPDATE `" . PlayerManager::TABLE_PLAYERS . "`
- SET `authLevel` = ?
- WHERE `authLevel` = ?;";
- $adminStatement = $mysqli->prepare($adminQuery);
- if ($mysqli->error) {
- trigger_error($mysqli->error, E_USER_ERROR);
- return false;
- }
- $adminLevel = self::AUTH_LEVEL_SUPERADMIN;
- $masterAdminLevel = self::AUTH_LEVEL_MASTERADMIN;
- $adminStatement->bind_param('ii', $adminLevel, $masterAdminLevel);
- $adminStatement->execute();
- if ($adminStatement->error) {
- trigger_error($adminStatement->error);
- }
- $adminStatement->close();
-
- // Set MasterAdmins
- $masterAdmins = $this->maniaControl->config->masteradmins->xpath('login');
- $adminQuery = "INSERT INTO `" . PlayerManager::TABLE_PLAYERS . "` (
- `login`,
- `authLevel`
- ) VALUES (
- ?, ?
- ) ON DUPLICATE KEY UPDATE
- `authLevel` = VALUES(`authLevel`);";
- $adminStatement = $mysqli->prepare($adminQuery);
- if ($mysqli->error) {
- trigger_error($mysqli->error, E_USER_ERROR);
- return false;
- }
- $success = true;
- foreach ($masterAdmins as $masterAdmin) {
- $login = (string) $masterAdmin;
- $adminStatement->bind_param('si', $login, $masterAdminLevel);
- $adminStatement->execute();
- if ($adminStatement->error) {
- trigger_error($adminStatement->error);
- $success = false;
- }
- }
- $adminStatement->close();
- return $success;
- }
-
- /**
- * Get a List of all Admins
- *
- * @param $authLevel
- * @return array null
- */
- public function getAdmins($authLevel = -1) {
- $mysqli = $this->maniaControl->database->mysqli;
- if ($authLevel < 0) {
- $query = "SELECT * FROM `" . PlayerManager::TABLE_PLAYERS . "` WHERE `authLevel` > 0 ORDER BY `authLevel` DESC;";
- }
- else {
- $query = "SELECT * FROM `" . PlayerManager::TABLE_PLAYERS . "` WHERE `authLevel` = " . $authLevel . ";";
- }
- $result = $mysqli->query($query);
- if (!$result) {
- trigger_error($mysqli->error);
- return null;
- }
- $admins = array();
- while ($row = $result->fetch_object()) {
- array_push($admins, $row);
- }
- return $admins;
- }
-
- /**
- * Grant the Auth Level to the Player
- *
- * @param Player $player
- * @param int $authLevel
- * @return bool
- */
- public function grantAuthLevel(Player &$player, $authLevel) {
- if (!$player || !is_numeric($authLevel)) {
- return false;
- }
- $authLevel = (int) $authLevel;
- if ($authLevel >= self::AUTH_LEVEL_MASTERADMIN) {
- return false;
- }
-
- $mysqli = $this->maniaControl->database->mysqli;
- $authQuery = "INSERT INTO `" . PlayerManager::TABLE_PLAYERS . "` (
- `login`,
- `authLevel`
- ) VALUES (
- ?, ?
- ) ON DUPLICATE KEY UPDATE
- `authLevel` = VALUES(`authLevel`);";
- $authStatement = $mysqli->prepare($authQuery);
- if ($mysqli->error) {
- trigger_error($mysqli->error, E_USER_ERROR);
- return false;
- }
- $authStatement->bind_param('si', $player->login, $authLevel);
- $authStatement->execute();
- if ($authStatement->error) {
- trigger_error($authStatement->error);
- $authStatement->close();
- return false;
- }
- $authStatement->close();
-
- $player->authLevel = $authLevel;
- $this->maniaControl->callbackManager->triggerCallback(self::CB_AUTH_LEVEL_CHANGED, $player);
-
- return true;
- }
-
- /**
- * Send an Error Message to the Player
- *
- * @param Player $player
- * @return bool
- */
- public function sendNotAllowed(Player $player) {
- if (!$player) {
- return false;
- }
- return $this->maniaControl->chat->sendError('You do not have the required Rights to perform this Action!', $player->login);
- }
-
- /**
- * Check if the Player has enough Rights
- *
- * @param Player $player
- * @param int $neededAuthLevel
- * @return bool
- */
- public static function checkRight(Player $player, $neededAuthLevel) {
- return ($player->authLevel >= $neededAuthLevel);
- }
-
- /**
- * Checks the permission by a right name
- *
- * @param Player $player
- * @param $rightName
- * @return bool
- */
- public function checkPermission(Player $player, $rightName) {
- $right = $this->maniaControl->settingManager->getSetting($this, $rightName);
- return $this->checkRight($player, $right);
- }
-
- /**
- * Defines a Minimum Right Level needed for an action
- *
- * @param $rightName
- * @param $authLevelNeeded
- */
- public function definePermissionLevel($rightName, $authLevelNeeded) {
- $this->maniaControl->settingManager->initSetting($this, $rightName, $authLevelNeeded);
- }
-
/**
* Get Name of the Authentication Level from Level Int
- *
+ *
* @param mixed $authLevelInt
* @return string
*/
@@ -251,9 +74,46 @@ class AuthenticationManager implements CallbackListener {
return self::AUTH_NAME_PLAYER;
}
+ /**
+ * Get the Authentication Level Int from the given Param
+ *
+ * @param mixed $authLevelParam
+ * @return int
+ */
+ public static function getAuthLevelInt($authLevelParam) {
+ if (is_object($authLevelParam) && property_exists($authLevelParam, 'authLevel')) {
+ return (int)$authLevelParam->authLevel;
+ }
+ if (is_string($authLevelParam)) {
+ return self::getAuthLevel($authLevelParam);
+ }
+ return (int)$authLevelParam;
+ }
+
+ /**
+ * Get Authentication Level Int from Level Name
+ *
+ * @param string $authLevelName
+ * @return int
+ */
+ public static function getAuthLevel($authLevelName) {
+ $authLevelName = (string)$authLevelName;
+ switch ($authLevelName) {
+ case self::AUTH_NAME_MASTERADMIN:
+ return self::AUTH_LEVEL_MASTERADMIN;
+ case self::AUTH_NAME_SUPERADMIN:
+ return self::AUTH_LEVEL_SUPERADMIN;
+ case self::AUTH_NAME_ADMIN:
+ return self::AUTH_LEVEL_ADMIN;
+ case self::AUTH_NAME_MODERATOR:
+ return self::AUTH_LEVEL_MODERATOR;
+ }
+ return self::AUTH_LEVEL_PLAYER;
+ }
+
/**
* Get the Abbreviation of the Authentication Level from Level Int
- *
+ *
* @param mixed $authLevelInt
* @return string
*/
@@ -273,39 +133,178 @@ class AuthenticationManager implements CallbackListener {
}
/**
- * Get Authentication Level Int from Level Name
- *
- * @param string $authLevelName
- * @return int
+ * Handle ManiaControl OnInit Callback
*/
- public static function getAuthLevel($authLevelName) {
- $authLevelName = (string) $authLevelName;
- switch ($authLevelName) {
- case self::AUTH_NAME_MASTERADMIN:
- return self::AUTH_LEVEL_MASTERADMIN;
- case self::AUTH_NAME_SUPERADMIN:
- return self::AUTH_LEVEL_SUPERADMIN;
- case self::AUTH_NAME_ADMIN:
- return self::AUTH_LEVEL_ADMIN;
- case self::AUTH_NAME_MODERATOR:
- return self::AUTH_LEVEL_MODERATOR;
- }
- return self::AUTH_LEVEL_PLAYER;
+ public function handleOnInit() {
+ $this->updateMasterAdmins();
}
/**
- * Get the Authentication Level Int from the given Param
- *
- * @param mixed $authLevelParam
- * @return int
+ * Update MasterAdmins based on Config
+ *
+ * @return bool
*/
- public static function getAuthLevelInt($authLevelParam) {
- if (is_object($authLevelParam) && property_exists($authLevelParam, 'authLevel')) {
- return (int) $authLevelParam->authLevel;
+ private function updateMasterAdmins() {
+ $mysqli = $this->maniaControl->database->mysqli;
+
+ // Remove all MasterAdmins
+ $adminQuery = "UPDATE `" . PlayerManager::TABLE_PLAYERS . "`
+ SET `authLevel` = ?
+ WHERE `authLevel` = ?;";
+ $adminStatement = $mysqli->prepare($adminQuery);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error, E_USER_ERROR);
+ return false;
}
- if (is_string($authLevelParam)) {
- return self::getAuthLevel($authLevelParam);
+ $adminLevel = self::AUTH_LEVEL_SUPERADMIN;
+ $masterAdminLevel = self::AUTH_LEVEL_MASTERADMIN;
+ $adminStatement->bind_param('ii', $adminLevel, $masterAdminLevel);
+ $adminStatement->execute();
+ if ($adminStatement->error) {
+ trigger_error($adminStatement->error);
}
- return (int) $authLevelParam;
+ $adminStatement->close();
+
+ // Set MasterAdmins
+ $masterAdmins = $this->maniaControl->config->masteradmins->xpath('login');
+ $adminQuery = "INSERT INTO `" . PlayerManager::TABLE_PLAYERS . "` (
+ `login`,
+ `authLevel`
+ ) VALUES (
+ ?, ?
+ ) ON DUPLICATE KEY UPDATE
+ `authLevel` = VALUES(`authLevel`);";
+ $adminStatement = $mysqli->prepare($adminQuery);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error, E_USER_ERROR);
+ return false;
+ }
+ $success = true;
+ foreach ($masterAdmins as $masterAdmin) {
+ $login = (string)$masterAdmin;
+ $adminStatement->bind_param('si', $login, $masterAdminLevel);
+ $adminStatement->execute();
+ if ($adminStatement->error) {
+ trigger_error($adminStatement->error);
+ $success = false;
+ }
+ }
+ $adminStatement->close();
+ return $success;
+ }
+
+ /**
+ * Get a List of all Admins
+ *
+ * @param $authLevel
+ * @return array null
+ */
+ public function getAdmins($authLevel = -1) {
+ $mysqli = $this->maniaControl->database->mysqli;
+ if ($authLevel < 0) {
+ $query = "SELECT * FROM `" . PlayerManager::TABLE_PLAYERS . "` WHERE `authLevel` > 0 ORDER BY `authLevel` DESC;";
+ } else {
+ $query = "SELECT * FROM `" . PlayerManager::TABLE_PLAYERS . "` WHERE `authLevel` = " . $authLevel . ";";
+ }
+ $result = $mysqli->query($query);
+ if (!$result) {
+ trigger_error($mysqli->error);
+ return null;
+ }
+ $admins = array();
+ while ($row = $result->fetch_object()) {
+ array_push($admins, $row);
+ }
+ return $admins;
+ }
+
+ /**
+ * Grant the Auth Level to the Player
+ *
+ * @param Player $player
+ * @param int $authLevel
+ * @return bool
+ */
+ public function grantAuthLevel(Player &$player, $authLevel) {
+ if (!$player || !is_numeric($authLevel)) {
+ return false;
+ }
+ $authLevel = (int)$authLevel;
+ if ($authLevel >= self::AUTH_LEVEL_MASTERADMIN) {
+ return false;
+ }
+
+ $mysqli = $this->maniaControl->database->mysqli;
+ $authQuery = "INSERT INTO `" . PlayerManager::TABLE_PLAYERS . "` (
+ `login`,
+ `authLevel`
+ ) VALUES (
+ ?, ?
+ ) ON DUPLICATE KEY UPDATE
+ `authLevel` = VALUES(`authLevel`);";
+ $authStatement = $mysqli->prepare($authQuery);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error, E_USER_ERROR);
+ return false;
+ }
+ $authStatement->bind_param('si', $player->login, $authLevel);
+ $authStatement->execute();
+ if ($authStatement->error) {
+ trigger_error($authStatement->error);
+ $authStatement->close();
+ return false;
+ }
+ $authStatement->close();
+
+ $player->authLevel = $authLevel;
+ $this->maniaControl->callbackManager->triggerCallback(self::CB_AUTH_LEVEL_CHANGED, $player);
+
+ return true;
+ }
+
+ /**
+ * Send an Error Message to the Player
+ *
+ * @param Player $player
+ * @return bool
+ */
+ public function sendNotAllowed(Player $player) {
+ if (!$player) {
+ return false;
+ }
+ return $this->maniaControl->chat->sendError('You do not have the required Rights to perform this Action!', $player->login);
+ }
+
+ /**
+ * Checks the permission by a right name
+ *
+ * @param Player $player
+ * @param $rightName
+ * @return bool
+ */
+ public function checkPermission(Player $player, $rightName) {
+ $right = $this->maniaControl->settingManager->getSetting($this, $rightName);
+ return $this->checkRight($player, $right);
+ }
+
+ /**
+ * Check if the Player has enough Rights
+ *
+ * @param Player $player
+ * @param int $neededAuthLevel
+ * @return bool
+ */
+ public static function checkRight(Player $player, $neededAuthLevel) {
+ return ($player->authLevel >= $neededAuthLevel);
+ }
+
+ /**
+ * Defines a Minimum Right Level needed for an action
+ *
+ * @param $rightName
+ * @param $authLevelNeeded
+ */
+ public function definePermissionLevel($rightName, $authLevelNeeded) {
+ $this->maniaControl->settingManager->initSetting($this, $rightName, $authLevelNeeded);
}
}
diff --git a/application/core/Bills/BillData.php b/application/core/Bills/BillData.php
index a1606c7f..d228b0a8 100644
--- a/application/core/Bills/BillData.php
+++ b/application/core/Bills/BillData.php
@@ -1,14 +1,15 @@
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class BillData {
/*
@@ -17,19 +18,20 @@ class BillData {
public $function = null;
public $pay = false;
public $player = null;
- public $receiverLogin = false;
+ public $receiverLogin = null;
public $amount = 0;
public $creationTime = -1;
/**
* Construct new BillData
- * @param mixed $function
+ *
+ * @param mixed $function
* @param Player $player
- * @param int $amount
- * @param string $pay
+ * @param int $amount
+ * @param bool $pay
* @param string $receiverLogin
*/
- public function __construct($function, $player, $amount, $pay = false, $receiverLogin = false) {
+ public function __construct($function, Player $player, $amount, $pay = false, $receiverLogin = null) {
$this->function = $function;
$this->player = $player;
$this->amount = $amount;
diff --git a/application/core/Bills/BillManager.php b/application/core/Bills/BillManager.php
index 1708447a..532c6fbb 100644
--- a/application/core/Bills/BillManager.php
+++ b/application/core/Bills/BillManager.php
@@ -11,8 +11,8 @@ use Maniaplanet\DedicatedServer\Structures\Bill;
/**
* ManiaControl Bill-Manager
*
- * @author kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class BillManager implements CallbackListener {
@@ -103,7 +103,7 @@ class BillManager implements CallbackListener {
$billData = $this->openBills[$billId];
/** @var BillData $billData */
- switch($callback[1][1]) {
+ switch ($callback[1][1]) {
case Bill::STATE_PAYED:
if ($billData->pay) {
call_user_func($billData->function, $billData, self::PAYED_FROM_SERVER);
diff --git a/application/core/Callbacks/CallbackListener.php b/application/core/Callbacks/CallbackListener.php
index 91676b59..c744fd4e 100644
--- a/application/core/Callbacks/CallbackListener.php
+++ b/application/core/Callbacks/CallbackListener.php
@@ -3,11 +3,11 @@
namespace ManiaControl\Callbacks;
/**
- * Interface for CallbackListener
+ * Interface for Callback Listener
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface CallbackListener {
}
diff --git a/application/core/Callbacks/CallbackManager.php b/application/core/Callbacks/CallbackManager.php
index a9dff30d..389ea423 100644
--- a/application/core/Callbacks/CallbackManager.php
+++ b/application/core/Callbacks/CallbackManager.php
@@ -7,8 +7,8 @@ use ManiaControl\ManiaControl;
/**
* Class for managing Server and ManiaControl Callbacks
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class CallbackManager {
@@ -118,8 +118,8 @@ class CallbackManager {
*/
public function unregisterCallbackListener(CallbackListener $listener) {
$removed = false;
- foreach($this->callbackListeners as &$listeners) {
- foreach($listeners as $key => &$listenerCallback) {
+ foreach ($this->callbackListeners as &$listeners) {
+ foreach ($listeners as $key => &$listenerCallback) {
if ($listenerCallback[0] != $listener) {
continue;
}
@@ -138,8 +138,8 @@ class CallbackManager {
*/
public function unregisterScriptCallbackListener(CallbackListener $listener) {
$removed = false;
- foreach($this->scriptCallbackListener as &$listeners) {
- foreach($listeners as $key => &$listenerCallback) {
+ foreach ($this->scriptCallbackListener as &$listeners) {
+ foreach ($listeners as $key => &$listenerCallback) {
if ($listenerCallback[0] != $listener) {
continue;
}
@@ -150,38 +150,6 @@ class CallbackManager {
return $removed;
}
- /**
- * Trigger a specific Callback
- *
- * @param string $callbackName
- */
- public function triggerCallback($callbackName) {
- if (!array_key_exists($callbackName, $this->callbackListeners)) {
- return;
- }
- $params = func_get_args();
- $params = array_slice($params, 1, count($params), true);
- foreach($this->callbackListeners[$callbackName] as $listener) {
- call_user_func_array(array($listener[0], $listener[1]), $params);
- }
- }
-
- /**
- * Trigger a specific Script Callback
- *
- * @param string $callbackName
- */
- public function triggerScriptCallback($callbackName) {
- if (!array_key_exists($callbackName, $this->scriptCallbackListener)) {
- return;
- }
- $params = func_get_args();
- $params = array_slice($params, 1, count($params), true);
- foreach($this->scriptCallbackListener[$callbackName] as $listener) {
- call_user_func_array(array($listener[0], $listener[1]), $params);
- }
- }
-
/**
* Trigger internal Callbacks and manage Server Callbacks
*/
@@ -197,7 +165,7 @@ class CallbackManager {
$callbacks = $this->maniaControl->client->executeCallbacks();
// Handle callbacks
- foreach($callbacks as $callback) {
+ foreach ($callbacks as $callback) {
$this->handleCallback($callback);
}
}
@@ -209,12 +177,12 @@ class CallbackManager {
*/
private function handleCallback(array $callback) {
$callbackName = $callback[0];
- switch($callbackName) {
+ switch ($callbackName) {
case 'ManiaPlanet.BeginMatch':
if ($this->maniaControl->mapManager->getCurrentMap()->getGame() == 'sm') {
$this->triggerCallback($callbackName, $callback);
}
- break;
+ break;
case 'ManiaPlanet.BeginMap':
$this->maniaControl->mapManager->handleBeginMap($callback);
$this->triggerCallback($callbackName, $callback);
@@ -223,7 +191,7 @@ class CallbackManager {
if ($this->maniaControl->mapManager->getCurrentMap()->getGame() == 'sm') {
$this->triggerCallback($callbackName, $callback);
}
- break;
+ break;
case 'ManiaPlanet.EndMap':
$this->maniaControl->mapManager->handleEndMap($callback);
$this->triggerCallback($callbackName, $callback);
@@ -242,6 +210,22 @@ class CallbackManager {
}
}
+ /**
+ * Trigger a specific Callback
+ *
+ * @param string $callbackName
+ */
+ public function triggerCallback($callbackName) {
+ if (!array_key_exists($callbackName, $this->callbackListeners)) {
+ return;
+ }
+ $params = func_get_args();
+ $params = array_slice($params, 1, count($params), true);
+ foreach ($this->callbackListeners[$callbackName] as $listener) {
+ call_user_func_array(array($listener[0], $listener[1]), $params);
+ }
+ }
+
/**
* Handle the given Script Callback
*
@@ -253,4 +237,20 @@ class CallbackManager {
$this->triggerScriptCallback($scriptCallbackName, $scriptCallbackData);
$this->triggerCallback(Callbacks::SCRIPTCALLBACK, $scriptCallbackName, $scriptCallbackData[1]);
}
+
+ /**
+ * Trigger a specific Script Callback
+ *
+ * @param string $callbackName
+ */
+ public function triggerScriptCallback($callbackName) {
+ if (!array_key_exists($callbackName, $this->scriptCallbackListener)) {
+ return;
+ }
+ $params = func_get_args();
+ $params = array_slice($params, 1, count($params), true);
+ foreach ($this->scriptCallbackListener[$callbackName] as $listener) {
+ call_user_func_array(array($listener[0], $listener[1]), $params);
+ }
+ }
}
diff --git a/application/core/Callbacks/Callbacks.php b/application/core/Callbacks/Callbacks.php
index b46bbffd..e3b4d1cc 100644
--- a/application/core/Callbacks/Callbacks.php
+++ b/application/core/Callbacks/Callbacks.php
@@ -1,11 +1,12 @@
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface Callbacks {
diff --git a/application/core/Callbacks/LibXmlRpcCallbackManager.php b/application/core/Callbacks/LibXmlRpcCallbackManager.php
index dea0bad3..f35843f9 100644
--- a/application/core/Callbacks/LibXmlRpcCallbackManager.php
+++ b/application/core/Callbacks/LibXmlRpcCallbackManager.php
@@ -5,6 +5,13 @@ namespace ManiaControl\Callbacks;
use ManiaControl\ManiaControl;
+/**
+ * Class managing & converting LibXmlRpc Callbacks
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ */
class LibXmlRpcCallbackManager implements CallbackListener {
/*
* Private Properties
@@ -14,7 +21,8 @@ class LibXmlRpcCallbackManager implements CallbackListener {
/**
* Create a new LibXmlRpc Callbacks Instance
*
- * @param ManiaControl $maniaControl
+ * @param ManiaControl $maniaControl
+ * @param CallbackManager $callbackManager
*/
public function __construct(ManiaControl $maniaControl, CallbackManager $callbackManager) {
$this->maniaControl = $maniaControl;
@@ -24,11 +32,11 @@ class LibXmlRpcCallbackManager implements CallbackListener {
/**
* Handle Script Callbacks
*
- * @param $name
- * @param $data
+ * @param string $name
+ * @param array $data
*/
- public function handleScriptCallbacks($name, $data) {
- switch($name) {
+ public function handleScriptCallbacks($name, array $data) {
+ switch ($name) {
case 'LibXmlRpc_BeginMatch':
$this->maniaControl->callbackManager->triggerCallback(Callbacks::BEGINMATCH, $data[0]);
break;
@@ -76,9 +84,9 @@ class LibXmlRpcCallbackManager implements CallbackListener {
/**
* Triggers the Ranking of a Player
*
- * @param $data
+ * @param array $data
*/
- private function triggerPlayerRanking($data) {
+ private function triggerPlayerRanking(array $data) {
$player = $this->maniaControl->playerManager->getPlayer($data[1]);
$this->maniaControl->callbackManager->triggerCallback(Callbacks::PLAYERRANKING, $player, $data[0], $data[6], $data[5]);
}
diff --git a/application/core/Callbacks/ShootManiaCallbacks.php b/application/core/Callbacks/ShootManiaCallbacks.php
index d820e17d..614fd6f4 100644
--- a/application/core/Callbacks/ShootManiaCallbacks.php
+++ b/application/core/Callbacks/ShootManiaCallbacks.php
@@ -7,8 +7,8 @@ use ManiaControl\ManiaControl;
/**
* Class handling and parsing ShootMania Callbacks
*
- * @author steeffeen
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ShootManiaCallbacks implements CallbackListener {
@@ -28,7 +28,8 @@ class ShootManiaCallbacks implements CallbackListener {
/**
* Create a new ShootMania Callbacks Instance
*
- * @param ManiaControl $maniaControl
+ * @param ManiaControl $maniaControl
+ * @param CallbackManager $callbackManager
*/
public function __construct(ManiaControl $maniaControl, CallbackManager $callbackManager) {
$this->maniaControl = $maniaControl;
@@ -42,11 +43,11 @@ class ShootManiaCallbacks implements CallbackListener {
/**
* Handle Script Callbacks
*
- * @param $name
- * @param $data
+ * @param string $name
+ * @param array $data
*/
public function handleScriptCallbacks($name, $data) {
- switch($name) {
+ switch ($name) {
case 'LibXmlRpc_Rankings':
$this->maniaControl->server->rankingManager->updateRankings($data[0]);
break;
@@ -62,7 +63,7 @@ class ShootManiaCallbacks implements CallbackListener {
/**
* Triggers the AFK Status of an Player
*
- * @param $login
+ * @param string $login
*/
private function triggerAfkStatus($login) {
$player = $this->maniaControl->playerManager->getPlayer($login);
diff --git a/application/core/Callbacks/TimerListener.php b/application/core/Callbacks/TimerListener.php
index ef9e764e..d492593c 100644
--- a/application/core/Callbacks/TimerListener.php
+++ b/application/core/Callbacks/TimerListener.php
@@ -5,9 +5,9 @@ namespace ManiaControl\Callbacks;
/**
* Interface for TimerListener
*
- * @author kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface TimerListener {
}
diff --git a/application/core/Callbacks/TimerManager.php b/application/core/Callbacks/TimerManager.php
index 6d3ac808..ea3cd442 100644
--- a/application/core/Callbacks/TimerManager.php
+++ b/application/core/Callbacks/TimerManager.php
@@ -7,9 +7,9 @@ use ManiaControl\ManiaControl;
/**
* Class for managing Timers
*
- * @author kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class TimerManager {
/*
@@ -39,27 +39,12 @@ class TimerManager {
}
/**
- * Unregister a Timer Listening
- * @param TimerListener $listener
- * @param $method
- * @return bool
- */
- public function unregisterTimerListening(TimerListener $listener, $method){
- foreach($this->timerListenings as $key => $listening){
- if($listening->listener == $listener && $listening->method == $method){
- unset($this->timerListenings[$key]);
- return true;
- }
- }
- return false;
- }
-
- /**
- * Register a Timing Listening, note < 10ms it can get inaccurate
+ * Register a Timer Listening, note < 10ms it can get inaccurate
*
- * @param TimerListener $listener
- * @param $method
- * @param $time
+ * @param TimerListener $listener
+ * @param string $method
+ * @param float $time
+ * @param bool $oneTime
* @return bool
*/
public function registerTimerListening(TimerListener $listener, $method, $time, $oneTime = false) {
@@ -70,14 +55,14 @@ class TimerManager {
//Init the Timer Listening
// TODO: extra model class
- $listening = new \stdClass();
- $listening->listener = $listener;
- $listening->method = $method;
- $listening->deltaTime = $time / 1000;
- $listening->oneTime = $oneTime;
- if($oneTime){
+ $listening = new \stdClass();
+ $listening->listener = $listener;
+ $listening->method = $method;
+ $listening->deltaTime = $time / 1000;
+ $listening->oneTime = $oneTime;
+ if ($oneTime) {
$listening->lastTrigger = microtime(true);
- }else{
+ } else {
$listening->lastTrigger = -1;
}
array_push($this->timerListenings, $listening);
@@ -85,6 +70,23 @@ class TimerManager {
return true;
}
+ /**
+ * Unregister a Timer Listening
+ *
+ * @param TimerListener $listener
+ * @param $method
+ * @return bool
+ */
+ public function unregisterTimerListening(TimerListener $listener, $method) {
+ foreach ($this->timerListenings as $key => $listening) {
+ if ($listening->listener == $listener && $listening->method == $method) {
+ unset($this->timerListenings[$key]);
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
* Remove a Timer Listener
*
@@ -93,7 +95,7 @@ class TimerManager {
*/
public function unregisterTimerListenings(TimerListener $listener) {
$removed = false;
- foreach($this->timerListenings as $key => &$listening) {
+ foreach ($this->timerListenings as $key => &$listening) {
if ($listening->listener != $listener) {
continue;
}
@@ -108,7 +110,7 @@ class TimerManager {
*/
public function manageTimings() {
$time = microtime(true);
- foreach($this->timerListenings as $key => &$listening) {
+ foreach ($this->timerListenings as $key => &$listening) {
if (($listening->lastTrigger + $listening->deltaTime) <= $time) {
//Increase the lastTrigger time manually (to improve accuracy)
diff --git a/application/core/Chat.php b/application/core/Chat.php
index 56e7685b..a5f5d998 100644
--- a/application/core/Chat.php
+++ b/application/core/Chat.php
@@ -2,15 +2,14 @@
namespace ManiaControl;
-use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
use Maniaplanet\DedicatedServer\Xmlrpc\LoginUnknownException;
/**
* Chat Utility Class
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Chat {
/*
@@ -44,21 +43,18 @@ class Chat {
}
/**
- * Get prefix
+ * Send an information message to the given login
*
+ * @param string $message
+ * @param string $login
* @param string|bool $prefix
- * @return string
+ * @return bool
*/
- private function getPrefix($prefix) {
- if (is_string($prefix)) {
- return $prefix;
- }
- if ($prefix === true) {
- return $this->maniaControl->settingManager->getSetting($this, self::SETTING_PREFIX);
- }
- return '';
+ public function sendInformation($message, $login = null, $prefix = true) {
+ $format = $this->maniaControl->settingManager->getSetting($this, self::SETTING_FORMAT_INFORMATION);
+ return $this->sendChat($format . $message, $login);
}
-
+
/**
* Send a chat message to the given login
*
@@ -73,7 +69,7 @@ class Chat {
}
if (!$login) {
- $prefix = $this->getPrefix($prefix);
+ $prefix = $this->getPrefix($prefix);
$chatMessage = '$<$z$ff0' . str_replace(' ', '', $prefix) . $prefix . $message . '$>';
$this->maniaControl->client->chatSendServerMessage($chatMessage);
} else {
@@ -81,25 +77,28 @@ class Chat {
if (is_object($login) && property_exists($login, 'login')) {
$login = $login->login;
}
- try{
+ try {
$this->maniaControl->client->chatSendServerMessage($chatMessage, $login);
- } catch(LoginUnknownException $e){
+ } catch (LoginUnknownException $e) {
}
}
return true;
}
/**
- * Send an information message to the given login
+ * Get prefix
*
- * @param string $message
- * @param string $login
* @param string|bool $prefix
- * @return bool
+ * @return string
*/
- public function sendInformation($message, $login = null, $prefix = true) {
- $format = $this->maniaControl->settingManager->getSetting($this, self::SETTING_FORMAT_INFORMATION);
- return $this->sendChat($format . $message, $login);
+ private function getPrefix($prefix) {
+ if (is_string($prefix)) {
+ return $prefix;
+ }
+ if ($prefix === true) {
+ return $this->maniaControl->settingManager->getSetting($this, self::SETTING_PREFIX);
+ }
+ return '';
}
/**
@@ -115,6 +114,19 @@ class Chat {
return $this->sendChat($format . $message, $login);
}
+ /**
+ * Send the Exception Information to the Chat
+ *
+ * @param \Exception $exception
+ * @param string $login
+ * @return bool
+ */
+ public function sendException(\Exception $exception, $login = null) {
+ $message = "Exception occurred: '{$exception->getMessage()}' ({$exception->getCode()})";
+ $this->maniaControl->errorHandler->triggerDebugNotice($message);
+ return $this->sendError($message, $login);
+ }
+
/**
* Send an Error Message to the Chat
*
@@ -127,19 +139,6 @@ class Chat {
$format = $this->maniaControl->settingManager->getSetting($this, self::SETTING_FORMAT_ERROR);
return $this->sendChat($format . $message, $login);
}
-
- /**
- * Send the Exception Information to the Chat
- *
- * @param Exception $exception
- * @param string $login
- * @return bool
- */
- public function sendException(\Exception $exception, $login = null) {
- $message = "Exception occurred: '{$exception->getMessage()}' ({$exception->getCode()})";
- $this->maniaControl->errorHandler->triggerDebugNotice($message);
- $this->sendError($message, $login);
- }
/**
* Send an usage info message to the given login
diff --git a/application/core/ColorUtil.php b/application/core/ColorUtil.php
index 8e99dfcd..80bd8c1d 100644
--- a/application/core/ColorUtil.php
+++ b/application/core/ColorUtil.php
@@ -5,21 +5,21 @@ namespace ManiaControl;
/**
* Utility Class offering Methods to convert and use ManiaPlanet Colors
*
- * @author steeffeen
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
abstract class ColorUtil {
/**
* Convert the given float value to a color code from red to green
*
- * @param float $value
+ * @param float $value
* @return string
*/
public static function floatToStatusColor($value) {
$value = floatval($value);
- $red = 1.;
+ $red = 1.;
$green = 1.;
if ($value < 0.5) {
$green = $value * 2.;
@@ -27,7 +27,7 @@ abstract class ColorUtil {
if ($value > 0.5) {
$red = 2. * (1. - $value);
}
- $red = ColorUtil::floatToCode($red);
+ $red = ColorUtil::floatToCode($red);
$green = ColorUtil::floatToCode($green);
return $red . $green . '0';
}
@@ -35,7 +35,7 @@ abstract class ColorUtil {
/**
* Get hex color representation of the float
*
- * @param float $value
+ * @param float $value
* @return string
*/
public static function floatToCode($value) {
@@ -47,9 +47,9 @@ abstract class ColorUtil {
$value = 1.;
}
$value *= 15.;
- $value = (int) round($value);
+ $value = (int)round($value);
if ($value < 10) {
- return (string) $value;
+ return (string)$value;
}
$codes = array(10 => 'a', 11 => 'b', 12 => 'c', 13 => 'd', 14 => 'e', 15 => 'f');
return $codes[$value];
diff --git a/application/core/CommandLineHelper.php b/application/core/CommandLineHelper.php
index 73c79700..0ad10113 100644
--- a/application/core/CommandLineHelper.php
+++ b/application/core/CommandLineHelper.php
@@ -4,22 +4,22 @@ namespace ManiaControl;
/**
* Command Line Helper Class
- *
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class CommandLineHelper {
/**
* Get the Command Line Parameter with the given Name
- *
+ *
* @param string $paramName
* @return mixed
*/
public static function getParameter($paramName) {
global $argv;
- $paramName = (string) $paramName;
+ $paramName = (string)$paramName;
foreach ($argv as $arg) {
$parts = explode('=', $arg, 2);
if (count($parts) < 2) {
diff --git a/application/core/Commands/CommandListener.php b/application/core/Commands/CommandListener.php
index 393a4ad8..6924404e 100644
--- a/application/core/Commands/CommandListener.php
+++ b/application/core/Commands/CommandListener.php
@@ -4,10 +4,10 @@ namespace ManiaControl\Commands;
/**
* Interface for Command Listeners
- *
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface CommandListener {
}
diff --git a/application/core/Commands/CommandManager.php b/application/core/Commands/CommandManager.php
index 2632c624..7525ce5c 100644
--- a/application/core/Commands/CommandManager.php
+++ b/application/core/Commands/CommandManager.php
@@ -9,9 +9,9 @@ use ManiaControl\ManiaControl;
/**
* Class for handling Chat Commands
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class CommandManager implements CallbackListener {
/*
@@ -50,7 +50,7 @@ class CommandManager implements CallbackListener {
public function registerCommandListener($commandName, CommandListener $listener, $method, $adminCommand = false, $description = '') {
if (is_array($commandName)) {
$success = true;
- foreach($commandName as $command) {
+ foreach ($commandName as $command) {
if (!$this->registerCommandListener($command, $listener, $method, $adminCommand, $description)) {
$success = false;
}
@@ -92,16 +92,16 @@ class CommandManager implements CallbackListener {
*/
public function unregisterCommandListener(CommandListener $listener) {
$removed = false;
- foreach($this->commandListeners as &$listeners) {
- foreach($listeners as $key => &$listenerCallback) {
+ foreach ($this->commandListeners as &$listeners) {
+ foreach ($listeners as $key => &$listenerCallback) {
if ($listenerCallback[0] == $listener) {
unset($listeners[$key]);
$removed = true;
}
}
}
- foreach($this->adminCommandListeners as &$listeners) {
- foreach($listeners as $key => &$listenerCallback) {
+ foreach ($this->adminCommandListeners as &$listeners) {
+ foreach ($listeners as $key => &$listenerCallback) {
if ($listenerCallback[0] == $listener) {
unset($listeners[$key]);
$removed = true;
@@ -152,7 +152,7 @@ class CommandManager implements CallbackListener {
// Compose uniformed message
$message = '//' . $command;
- foreach($commandArray as $commandPart) {
+ foreach ($commandArray as $commandPart) {
$message .= ' ' . $commandPart;
}
$callback[1][2] = $message;
@@ -167,7 +167,7 @@ class CommandManager implements CallbackListener {
}
// Inform command listeners
- foreach($commandListeners[$command] as $listener) {
+ foreach ($commandListeners[$command] as $listener) {
call_user_func(array($listener[0], $listener[1]), $callback, $player);
}
}
diff --git a/application/core/Commands/HelpManager.php b/application/core/Commands/HelpManager.php
index 513541de..3101685c 100644
--- a/application/core/Commands/HelpManager.php
+++ b/application/core/Commands/HelpManager.php
@@ -7,19 +7,18 @@ use FML\Controls\Label;
use FML\Controls\Quads\Quad_BgsPlayerCard;
use FML\ManiaLink;
use FML\Script\Features\Paging;
-
use ManiaControl\Callbacks\CallbackListener;
use ManiaControl\Callbacks\CallbackManager;
-use ManiaControl\Manialinks\ManialinkManager;
use ManiaControl\ManiaControl;
+use ManiaControl\Manialinks\ManialinkManager;
use ManiaControl\Players\Player;
/**
* Help Manager
*
- * @author kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class HelpManager implements CommandListener, CallbackListener {
/*
@@ -59,24 +58,24 @@ class HelpManager implements CommandListener, CallbackListener {
* @param Player $player
*/
public function command_adminHelp(array $chat, Player $player) {
- $showCommands = array();
+ $showCommands = array();
$registeredMethods = array();
- foreach(array_reverse($this->adminCommands) as $command) {
- if(array_key_exists($command['Method'], $registeredMethods) && $showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
+ foreach (array_reverse($this->adminCommands) as $command) {
+ if (array_key_exists($command['Method'], $registeredMethods) && $showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
$name = $registeredMethods[$command['Method']];
- $showCommands[$name]['Name'] .= '|'.$command['Name'];
+ $showCommands[$name]['Name'] .= '|' . $command['Name'];
} else {
- $showCommands[$command['Name']] = $command;
+ $showCommands[$command['Name']] = $command;
$registeredMethods[$command['Method']] = $command['Name'];
}
}
- usort($showCommands, function($a, $b) {
+ usort($showCommands, function ($a, $b) {
return strcmp($a["Name"], $b["Name"]);
});
$message = 'Supported Admin Commands: ';
- foreach($showCommands as $command) {
+ foreach ($showCommands as $command) {
$message .= $command['Name'] . ',';
}
$message = substr($message, 0, -1);
@@ -90,24 +89,24 @@ class HelpManager implements CommandListener, CallbackListener {
* @param Player $player
*/
public function command_playerHelp(array $chat, Player $player) {
- $showCommands = array();
+ $showCommands = array();
$registeredMethods = array();
- foreach(array_reverse($this->playerCommands) as $command) {
- if(array_key_exists($command['Method'], $registeredMethods) && $showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
+ foreach (array_reverse($this->playerCommands) as $command) {
+ if (array_key_exists($command['Method'], $registeredMethods) && $showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
$name = $registeredMethods[$command['Method']];
- $showCommands[$name]['Name'] .= '|'.$command['Name'];
+ $showCommands[$name]['Name'] .= '|' . $command['Name'];
} else {
- $showCommands[$command['Name']] = $command;
+ $showCommands[$command['Name']] = $command;
$registeredMethods[$command['Method']] = $command['Name'];
}
}
- usort($showCommands, function($a, $b) {
+ usort($showCommands, function ($a, $b) {
return strcmp($a["Name"], $b["Name"]);
});
$message = 'Supported Player Commands: ';
- foreach($showCommands as $command) {
+ foreach ($showCommands as $command) {
$message .= $command['Name'] . ',';
}
$message = substr($message, 0, -1);
@@ -124,16 +123,6 @@ class HelpManager implements CommandListener, CallbackListener {
$this->prepareHelpAll($this->playerCommands, $player);
}
- /**
- * Shows a ManiaLink list of Admin Commands
- *
- * @param array $chat
- * @param Player $player
- */
- public function command_adminHelpAll(array $chat, Player $player) {
- $this->prepareHelpAll($this->adminCommands, $player);
- }
-
/**
* Prepares the commands for the HelpAll ManiaLink.
*
@@ -141,24 +130,24 @@ class HelpManager implements CommandListener, CallbackListener {
* @param $player
*/
private function prepareHelpAll($commands, $player) {
- $showCommands = array();
+ $showCommands = array();
$registeredMethods = array();
- foreach(array_reverse($commands) as $command) {
- if(array_key_exists($command['Method'], $registeredMethods)) {
- if($showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
+ foreach (array_reverse($commands) as $command) {
+ if (array_key_exists($command['Method'], $registeredMethods)) {
+ if ($showCommands[$registeredMethods[$command['Method']]]['Description'] == $command['Description']) {
$name = $registeredMethods[$command['Method']];
- $showCommands[$name]['Name'] .= '|'.$command['Name'];
+ $showCommands[$name]['Name'] .= '|' . $command['Name'];
} else {
- $showCommands[$command['Name']] = $command;
+ $showCommands[$command['Name']] = $command;
$registeredMethods[$command['Method']] = $command['Name'];
}
} else {
- $showCommands[$command['Name']] = $command;
+ $showCommands[$command['Name']] = $command;
$registeredMethods[$command['Method']] = $command['Name'];
}
}
- usort($showCommands, function($a, $b) {
+ usort($showCommands, function ($a, $b) {
return strcmp($a["Name"], $b["Name"]);
});
@@ -177,8 +166,8 @@ class HelpManager implements CommandListener, CallbackListener {
// create manialink
$maniaLink = new ManiaLink(ManialinkManager::MAIN_MLID);
- $script = $maniaLink->getScript();
- $paging = new Paging();
+ $script = $maniaLink->getScript();
+ $paging = new Paging();
$script->addFeature($paging);
// Main frame
@@ -203,7 +192,7 @@ class HelpManager implements CommandListener, CallbackListener {
$i = 1;
$y = $y - 10;
$pageFrames = array();
- foreach($commands as $command) {
+ foreach ($commands as $command) {
if (!isset($pageFrame)) {
$pageFrame = new Frame();
$frame->add($pageFrame);
@@ -227,7 +216,7 @@ class HelpManager implements CommandListener, CallbackListener {
$lineQuad->setZ(0.001);
}
- $array = array($command['Name'] => $x + 5, $command['Description'] => $x + 50);
+ $array = array($command['Name'] => $x + 5, $command['Description'] => $x + 50);
$labels = $this->maniaControl->manialinkManager->labelLine($playerFrame, $array);
/** @var Label $label */
@@ -245,6 +234,16 @@ class HelpManager implements CommandListener, CallbackListener {
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'HelpAllList');
}
+ /**
+ * Shows a ManiaLink list of Admin Commands
+ *
+ * @param array $chat
+ * @param Player $player
+ */
+ public function command_adminHelpAll(array $chat, Player $player) {
+ $this->prepareHelpAll($this->adminCommands, $player);
+ }
+
/**
* Registers a new Command
*
@@ -254,7 +253,7 @@ class HelpManager implements CommandListener, CallbackListener {
* @param $method
*/
public function registerCommand($name, $adminCommand = false, $description = '', $method) {
- if($adminCommand) {
+ if ($adminCommand) {
array_push($this->adminCommands, array("Name" => $name, "Description" => $description, "Method" => $method));
} else {
array_push($this->playerCommands, array("Name" => $name, "Description" => $description, "Method" => $method));
diff --git a/application/core/Configurators/Configurator.php b/application/core/Configurators/Configurator.php
index 0c687225..f1891a3e 100644
--- a/application/core/Configurators/Configurator.php
+++ b/application/core/Configurators/Configurator.php
@@ -23,23 +23,23 @@ use ManiaControl\Players\Player;
/**
* Class managing ingame ManiaControl Configuration
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Configurator implements CallbackListener, CommandListener, ManialinkPageAnswerListener {
/*
* Constants
*/
- const ACTION_TOGGLEMENU = 'Configurator.ToggleMenuAction';
- const ACTION_SAVECONFIG = 'Configurator.SaveConfigAction';
- const ACTION_SELECTMENU = 'Configurator.SelectMenu';
- const SETTING_MENU_POSX = 'Menu Widget Position: X';
- const SETTING_MENU_POSY = 'Menu Widget Position: Y';
- const SETTING_MENU_WIDTH = 'Menu Widget Width';
- const SETTING_MENU_HEIGHT = 'Menu Widget Height';
- const SETTING_MENU_STYLE = 'Menu Widget BackgroundQuad Style';
- const SETTING_MENU_SUBSTYLE = 'Menu Widget BackgroundQuad Substyle';
+ const ACTION_TOGGLEMENU = 'Configurator.ToggleMenuAction';
+ const ACTION_SAVECONFIG = 'Configurator.SaveConfigAction';
+ const ACTION_SELECTMENU = 'Configurator.SelectMenu';
+ const SETTING_MENU_POSX = 'Menu Widget Position: X';
+ const SETTING_MENU_POSY = 'Menu Widget Position: Y';
+ const SETTING_MENU_WIDTH = 'Menu Widget Width';
+ const SETTING_MENU_HEIGHT = 'Menu Widget Height';
+ const SETTING_MENU_STYLE = 'Menu Widget BackgroundQuad Style';
+ const SETTING_MENU_SUBSTYLE = 'Menu Widget BackgroundQuad Substyle';
const SETTING_PERMISSION_OPEN_CONFIGURATOR = 'Open Configurator';
/*
@@ -100,17 +100,13 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
}
/**
- * Handle Config Admin Command
- *
- * @param array $callback
+ * Add Menu Item to the Actions Menu
*/
- public function handleConfigCommand(array $callback, Player $player) {
- if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_OPEN_CONFIGURATOR)) {
- $this->maniaControl->authenticationManager->sendNotAllowed($player);
- return;
- }
-
- $this->showMenu($player);
+ private function addActionsMenuItem() {
+ $itemQuad = new Quad_UIConstruction_Buttons();
+ $itemQuad->setSubStyle($itemQuad::SUBSTYLE_Tools);
+ $itemQuad->setAction(self::ACTION_TOGGLEMENU);
+ $this->maniaControl->actionsMenu->addAdminMenuItem($itemQuad, 100, 'Settings');
}
/**
@@ -123,45 +119,18 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
}
/**
- * Reopens the Menu
- *
- * @param array $callback
- */
- public function reopenMenu($player, $menuId = 0) {
- $this->showMenu($player, $menuId);
- }
-
- /**
- * Handle toggle menu action
+ * Handle Config Admin Command
*
* @param array $callback
* @param Player $player
*/
- public function handleToggleMenuAction(array $callback, Player $player) {
- $this->toggleMenu($player);
- }
-
- /**
- * Save the config data received from the manialink
- *
- * @param array $callback
- * @param Player $player
- */
- public function handleSaveConfigAction(array $callback, Player $player) {
- foreach($this->menus as $menu) {
- /** @var ConfiguratorMenu $menu */
- $menu->saveConfigData($callback[1], $player);
+ public function handleConfigCommand(array $callback, Player $player) {
+ if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_OPEN_CONFIGURATOR)) {
+ $this->maniaControl->authenticationManager->sendNotAllowed($player);
+ return;
}
- }
- /**
- * Handle PlayerDisconnect callback
- *
- * @param array $callback
- */
- public function handlePlayerDisconnect(array $callback) {
- $login = $callback[1][0];
- unset($this->playersMenuShown[$login]);
+ $this->showMenu($player);
}
/**
@@ -177,73 +146,10 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
}
/**
- * Unset the player if he opened another Main Widget
+ * Build Menu ManiaLink if necessary
*
+ * @param int $menuIdShown
* @param Player $player
- * @param $openedWidget
- */
- public function handleWidgetOpened(Player $player, $openedWidget) {
- //unset when another main widget got opened
- if ($openedWidget != 'Configurator') {
- unset($this->playersMenuShown[$player->login]);
- }
- }
-
- /**
- * Widget get closed -> unset player
- *
- * @param \ManiaControl\Players\Player $player
- */
- public function closeWidget(Player $player) {
- unset($this->playersMenuShown[$player->login]);
- }
-
- /**
- * Hide the Menu for the Player
- *
- * @param Player $player
- */
- public function hideMenu(Player $player) {
- unset($this->playersMenuShown[$player->login]);
- $this->maniaControl->manialinkManager->closeWidget($player);
- }
-
- /**
- * Toggle the Menu for the Player
- *
- * @param Player $player
- */
- public function toggleMenu(Player $player) {
- if (isset($this->playersMenuShown[$player->login])) {
- $this->hideMenu($player);
- } else {
- $this->showMenu($player);
- }
- }
-
- /**
- * Gets the Menu Id
- *
- * @param $name
- * @return int
- */
- public function getMenuId($name) {
- $i = 0;
- foreach($this->menus as $menu) {
- /** @var ConfiguratorMenu $menu */
- if ($menu == $name || $menu->getTitle() == $name) {
- return $i;
- }
- $i++;
- }
- return 0;
- }
-
- /**
- * Build menu manialink if necessary
- *
- * @param int $menuIdShown
- * @internal param bool $forceBuild
* @return \FML\ManiaLink
*/
private function buildManialink($menuIdShown = 0, Player $player) {
@@ -285,13 +191,13 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
$menusFrame->setX($menuWidth * -0.5 + $menuListWidth + $subMenuWidth * 0.5);
// Create script and features
- $script = $manialink->getScript();
- $menuScript = new Menu();
- $script->addFeature($menuScript);
+ $script = $manialink->getScript();
+ $menuScript = new Menu();
+ $script->addFeature($menuScript);
$menuItemY = $menuHeight * 0.42;
$menuId = 0;
- foreach($this->menus as $menu) {
+ foreach ($this->menus as $menu) {
/** @var ConfiguratorMenu $menu */
// Add title
@@ -307,7 +213,7 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
if ($menuId == $menuIdShown) {
$menuControl = $menu->getMenu($subMenuWidth, $subMenuHeight, $script, $player);
$menusFrame->add($menuControl);
- $menuScript->addElement($menuItemLabel, $menuControl);
+ $menuScript->addElement($menuItemLabel, $menuControl);
}
$menuItemY -= $menuItemHeight * 1.1;
@@ -343,10 +249,116 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
$saveButton->setTranslate(true);
$saveButton->setText('$zSave$z');
$saveButton->setAction(self::ACTION_SAVECONFIG);
-
+
return $manialink;
}
+ /**
+ * Reopen the Menu
+ *
+ * @param Player $player
+ * @param int $menuId
+ */
+ public function reopenMenu(Player $player, $menuId = 0) {
+ $this->showMenu($player, $menuId);
+ }
+
+ /**
+ * Handle toggle menu action
+ *
+ * @param array $callback
+ * @param Player $player
+ */
+ public function handleToggleMenuAction(array $callback, Player $player) {
+ $this->toggleMenu($player);
+ }
+
+ /**
+ * Toggle the Menu for the Player
+ *
+ * @param Player $player
+ */
+ public function toggleMenu(Player $player) {
+ if (isset($this->playersMenuShown[$player->login])) {
+ $this->hideMenu($player);
+ } else {
+ $this->showMenu($player);
+ }
+ }
+
+ /**
+ * Hide the Menu for the Player
+ *
+ * @param Player $player
+ */
+ public function hideMenu(Player $player) {
+ unset($this->playersMenuShown[$player->login]);
+ $this->maniaControl->manialinkManager->closeWidget($player);
+ }
+
+ /**
+ * Save the config data received from the manialink
+ *
+ * @param array $callback
+ * @param Player $player
+ */
+ public function handleSaveConfigAction(array $callback, Player $player) {
+ foreach ($this->menus as $menu) {
+ /** @var ConfiguratorMenu $menu */
+ $menu->saveConfigData($callback[1], $player);
+ }
+ }
+
+ /**
+ * Handle PlayerDisconnect callback
+ *
+ * @param array $callback
+ */
+ public function handlePlayerDisconnect(array $callback) {
+ $login = $callback[1][0];
+ unset($this->playersMenuShown[$login]);
+ }
+
+ /**
+ * Unset the player if he opened another Main Widget
+ *
+ * @param Player $player
+ * @param $openedWidget
+ */
+ public function handleWidgetOpened(Player $player, $openedWidget) {
+ //unset when another main widget got opened
+ if ($openedWidget != 'Configurator') {
+ unset($this->playersMenuShown[$player->login]);
+ }
+ }
+
+ /**
+ * Widget get closed -> unset player
+ *
+ * @param \ManiaControl\Players\Player $player
+ */
+ public function closeWidget(Player $player) {
+ unset($this->playersMenuShown[$player->login]);
+ }
+
+ /**
+ * Gets the Menu Id
+ *
+ * @param $name
+ * @return int
+ */
+ public function getMenuId($name) {
+ $i = 0;
+ foreach ($this->menus as $menu) {
+ /** @var ConfiguratorMenu $menu */
+ if ($menu == $name || $menu->getTitle() == $name) {
+ return $i;
+ }
+ $i++;
+ }
+ return 0;
+ }
+
/**
* Handle ManialinkPageAnswer Callback
*
@@ -365,14 +377,4 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
$player = $this->maniaControl->playerManager->getPlayer($login);
$this->showMenu($player, intval($actionArray[2]));
}
-
- /**
- * Add Menu Item to the Actions Menu
- */
- private function addActionsMenuItem() {
- $itemQuad = new Quad_UIConstruction_Buttons();
- $itemQuad->setSubStyle($itemQuad::SUBSTYLE_Tools);
- $itemQuad->setAction(self::ACTION_TOGGLEMENU);
- $this->maniaControl->actionsMenu->addAdminMenuItem($itemQuad, 100, 'Settings');
- }
}
diff --git a/application/core/Configurators/ConfiguratorMenu.php b/application/core/Configurators/ConfiguratorMenu.php
index 10dd093d..d5c9a228 100644
--- a/application/core/Configurators/ConfiguratorMenu.php
+++ b/application/core/Configurators/ConfiguratorMenu.php
@@ -8,9 +8,9 @@ use ManiaControl\Players\Player;
/**
* Interface for Configurator Menus
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface ConfiguratorMenu {
diff --git a/application/core/Configurators/ManiaControlSettings.php b/application/core/Configurators/ManiaControlSettings.php
index bb7a6fd4..1fed4eda 100644
--- a/application/core/Configurators/ManiaControlSettings.php
+++ b/application/core/Configurators/ManiaControlSettings.php
@@ -5,6 +5,7 @@ namespace ManiaControl\Configurators;
use FML\Controls\Control;
use FML\Controls\Entry;
use FML\Controls\Frame;
+use FML\Controls\Labels\Label_Button;
use FML\Controls\Labels\Label_Text;
use FML\Controls\Quads\Quad_Icons64x64_1;
use FML\Script\Features\Paging;
@@ -15,27 +16,26 @@ use ManiaControl\Callbacks\CallbackManager;
use ManiaControl\ManiaControl;
use ManiaControl\Players\Player;
use ManiaControl\Players\PlayerManager;
-use FML\Controls\Labels\Label_Button;
use ManiaControl\Settings\SettingManager;
/**
* Class offering a Configurator for ManiaControl Settings
- *
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
/*
* Constants
*/
- const TITLE = 'ManiaControl Settings';
- const ACTION_PREFIX_SETTING = 'MCSetting.';
- const ACTION_PREFIX_SETTINGCLASS = 'MCSettingClass.';
- const ACTION_SETTINGCLASS_BACK = 'MCSettingClassBack';
- const ACTION_SETTING_BOOL = 'MCSettings.ActionBoolSetting.';
+ const TITLE = 'ManiaControl Settings';
+ const ACTION_PREFIX_SETTING = 'MCSetting.';
+ const ACTION_PREFIX_SETTINGCLASS = 'MCSettingClass.';
+ const ACTION_SETTINGCLASS_BACK = 'MCSettingClassBack';
+ const ACTION_SETTING_BOOL = 'MCSettings.ActionBoolSetting.';
const SETTING_PERMISSION_CHANGE_MC_SETTINGS = 'Change ManiaControl Settings';
-
+
/*
* Private Properties
*/
@@ -44,22 +44,22 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
/**
* Create a new Script Settings Instance
- *
+ *
* @param ManiaControl $maniaControl
*/
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
-
+
// Register for callbacks
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_PLAYERMANIALINKPAGEANSWER, $this, 'handleManialinkPageAnswer');
$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERDISCONNECT, $this, 'handlePlayerDisconnect');
-
+
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_CHANGE_MC_SETTINGS, AuthenticationManager::AUTH_LEVEL_ADMIN);
}
/**
* Handle Player Disconnect Callback
- *
+ *
* @param Player $player
*/
public function handlePlayerDisconnect(Player $player) {
@@ -67,76 +67,191 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
}
/**
- * Get the Menu Title
- *
- * @return string
- */
- public function getTitle() {
- return self::TITLE;
- }
-
- /**
- *
* @see \ManiaControl\Configurators\ConfiguratorMenu::getMenu()
*/
public function getMenu($width, $height, Script $script, Player $player) {
if (isset($this->playersSettingCategoryOpened[$player->login]) && strlen($this->playersSettingCategoryOpened[$player->login]) > 0) {
return $this->getMenuSettingsForClass($this->playersSettingCategoryOpened[$player->login], $width, $height, $script, $player);
- }
- else {
+ } else {
return $this->getMenuSettingClasses($width, $height, $script, $player);
}
}
/**
- * Get the Menu showing all possible Classes
- *
- * @param float $width
- * @param float $height
+ * Get the Menu showing the Settings for the given Class
+ *
+ * @param string $settingClass
+ * @param float $width
+ * @param float $height
* @param Script $script
* @param Player $player
* @return \FML\Controls\Frame
*/
- private function getMenuSettingClasses($width, $height, Script $script, Player $player) {
- $settingClasses = $this->maniaControl->settingManager->getSettingClasses(true);
-
+ private function getMenuSettingsForClass($settingClass, $width, $height, Script $script, Player $player) {
+ $settings = $this->maniaControl->settingManager->getSettingsByClass($settingClass);
+
$paging = new Paging();
$script->addFeature($paging);
$frame = new Frame();
-
+
// Config
- $pagerSize = 9.;
+ $pagerSize = 9.;
$settingHeight = 5.;
- $pageMaxCount = 13;
- $y = 0;
-
+ $labelTextSize = 2;
+ $pageMaxCount = 13;
+
// Pagers
$pagerPrev = new Quad_Icons64x64_1();
$frame->add($pagerPrev);
$pagerPrev->setPosition($width * 0.39, $height * -0.44, 2);
$pagerPrev->setSize($pagerSize, $pagerSize);
$pagerPrev->setSubStyle($pagerPrev::SUBSTYLE_ArrowPrev);
-
+
$pagerNext = new Quad_Icons64x64_1();
$frame->add($pagerNext);
$pagerNext->setPosition($width * 0.45, $height * -0.44, 2);
$pagerNext->setSize($pagerSize, $pagerSize);
$pagerNext->setSubStyle($pagerNext::SUBSTYLE_ArrowNext);
-
+
$paging->addButton($pagerNext);
$paging->addButton($pagerPrev);
-
+
+ $pageCountLabel = new Label_Text();
+ $frame->add($pageCountLabel);
+ $pageCountLabel->setHAlign($pageCountLabel::RIGHT);
+ $pageCountLabel->setPosition($width * 0.35, $height * -0.44);
+ $pageCountLabel->setStyle($pageCountLabel::STYLE_TextTitle1);
+ $pageCountLabel->setTextSize(2);
+
+ $paging->setLabel($pageCountLabel);
+
+ $backLabel = new Label_Button();
+ $frame->add($backLabel);
+ $backLabel->setPosition($width * -0.49, $height * -0.44);
+ $backLabel->setHAlign($backLabel::LEFT);
+ $backLabel->setTextSize(2);
+ $backLabel->setText('Back');
+ $backLabel->setAction(self::ACTION_SETTINGCLASS_BACK);
+
+ $pageFrame = null;
+ $index = 0;
+ $y = 0;
+ foreach ($settings as $setting) {
+ if (!$pageFrame) {
+ $pageFrame = new Frame();
+ $frame->add($pageFrame);
+ $y = $height * 0.41;
+ $paging->addPage($pageFrame);
+ }
+
+ $settingFrame = new Frame();
+ $pageFrame->add($settingFrame);
+ $settingFrame->setY($y);
+
+ // TODO: display currently select setting class
+
+ // Headline Label
+ if (false) {
+ $headLabel = new Label_Text();
+ $settingFrame->add($headLabel);
+ $headLabel->setHAlign(Control::LEFT);
+ $headLabel->setX($width * -0.46);
+ $headLabel->setSize($width * 0.6, $settingHeight);
+ $headLabel->setStyle($headLabel::STYLE_TextCardSmall);
+ $headLabel->setTextSize($labelTextSize);
+ $headLabel->setText($setting->class);
+ $headLabel->setTextColor("F00");
+ } // Headline
+
+ $nameLabel = new Label_Text();
+ $settingFrame->add($nameLabel);
+ $nameLabel->setHAlign(Control::LEFT);
+ $nameLabel->setX($width * -0.46);
+ $nameLabel->setSize($width * 0.6, $settingHeight);
+ $nameLabel->setStyle($nameLabel::STYLE_TextCardSmall);
+ $nameLabel->setTextSize($labelTextSize);
+ $nameLabel->setText($setting->setting);
+ $nameLabel->setTextColor("FFF");
+
+ if ($setting->type === SettingManager::TYPE_BOOL) {
+ $quad = new Quad_Icons64x64_1();
+ $settingFrame->add($quad);
+ $quad->setX($width / 2 * 0.6);
+ $quad->setZ(-0.01);
+ $quad->setSubStyle(($setting->value ? $quad::SUBSTYLE_LvlGreen : $quad::SUBSTYLE_LvlRed));
+ $quad->setSize(4, 4);
+ $quad->setAction(self::ACTION_SETTING_BOOL . $setting->index);
+ } else {
+ $entry = new Entry();
+ $settingFrame->add($entry);
+ $entry->setStyle(Label_Text::STYLE_TextValueSmall);
+ $entry->setX($width / 2 * 0.65);
+ $entry->setTextSize(1);
+ $entry->setSize($width * 0.3, $settingHeight * 0.9);
+ $entry->setName(self::ACTION_PREFIX_SETTING . $setting->index);
+ $entry->setDefault($setting->value);
+ }
+
+ $y -= $settingHeight;
+ if ($index % $pageMaxCount == $pageMaxCount - 1) {
+ $pageFrame = null;
+ }
+
+ $index++;
+ }
+
+ return $frame;
+ }
+
+ /**
+ * Get the Menu showing all possible Classes
+ *
+ * @param float $width
+ * @param float $height
+ * @param Script $script
+ * @param Player $player
+ * @return \FML\Controls\Frame
+ */
+ private function getMenuSettingClasses($width, $height, Script $script, Player $player) {
+ $settingClasses = $this->maniaControl->settingManager->getSettingClasses(true);
+
+ $paging = new Paging();
+ $script->addFeature($paging);
+ $frame = new Frame();
+
+ // Config
+ $pagerSize = 9.;
+ $settingHeight = 5.;
+ $pageMaxCount = 13;
+ $y = 0;
+
+ // Pagers
+ $pagerPrev = new Quad_Icons64x64_1();
+ $frame->add($pagerPrev);
+ $pagerPrev->setPosition($width * 0.39, $height * -0.44, 2);
+ $pagerPrev->setSize($pagerSize, $pagerSize);
+ $pagerPrev->setSubStyle($pagerPrev::SUBSTYLE_ArrowPrev);
+
+ $pagerNext = new Quad_Icons64x64_1();
+ $frame->add($pagerNext);
+ $pagerNext->setPosition($width * 0.45, $height * -0.44, 2);
+ $pagerNext->setSize($pagerSize, $pagerSize);
+ $pagerNext->setSubStyle($pagerNext::SUBSTYLE_ArrowNext);
+
+ $paging->addButton($pagerNext);
+ $paging->addButton($pagerPrev);
+
$pageCountLabel = new Label_Text();
$frame->add($pageCountLabel);
$pageCountLabel->setHAlign($pageCountLabel::RIGHT);
$pageCountLabel->setPosition($width * 0.35, $height * -0.44, 1);
$pageCountLabel->setStyle($pageCountLabel::STYLE_TextTitle1);
$pageCountLabel->setTextSize(2);
-
+
$paging->setLabel($pageCountLabel);
-
+
$pageFrame = null;
- $index = 0;
+ $index = 0;
foreach ($settingClasses as $settingClass) {
if (!$pageFrame) {
$pageFrame = new Frame();
@@ -144,12 +259,12 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
$y = $height * 0.41;
$paging->addPage($pageFrame);
}
-
+
$classLabel = new Label_Text();
$settingClassArray = explode('\\', $settingClass);
- $className = "";
- for($i = 1; $i < count($settingClassArray); $i++){
+ $className = "";
+ for ($i = 1; $i < count($settingClassArray); $i++) {
$className .= $settingClassArray[$i] . " - ";
}
$className = substr($className, 0, -3);
@@ -163,150 +278,92 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
$classLabel->setText($className);
$classLabel->setTextColor('fff');
$classLabel->setAction(self::ACTION_PREFIX_SETTINGCLASS . $settingClass);
-
+
$y -= $settingHeight;
-
+
if ($index % $pageMaxCount == $pageMaxCount - 1) {
$pageFrame = null;
}
-
+
$index++;
}
-
+
return $frame;
}
/**
- * Get the Menu showing the Settings for the given Class
- *
- * @param string $settingClass
- * @param float $width
- * @param float $height
- * @param Script $script
- * @param Player $player
- * @return \FML\Controls\Frame
+ * Handle ManialinkPageAnswer Callback
+ *
+ * @param array $callback
*/
- private function getMenuSettingsForClass($settingClass, $width, $height, Script $script, Player $player) {
- $settings = $this->maniaControl->settingManager->getSettingsByClass($settingClass);
-
- $paging = new Paging();
- $script->addFeature($paging);
- $frame = new Frame();
-
- // Config
- $pagerSize = 9.;
- $settingHeight = 5.;
- $labelTextSize = 2;
- $pageMaxCount = 13;
-
- // Pagers
- $pagerPrev = new Quad_Icons64x64_1();
- $frame->add($pagerPrev);
- $pagerPrev->setPosition($width * 0.39, $height * -0.44, 2);
- $pagerPrev->setSize($pagerSize, $pagerSize);
- $pagerPrev->setSubStyle($pagerPrev::SUBSTYLE_ArrowPrev);
-
- $pagerNext = new Quad_Icons64x64_1();
- $frame->add($pagerNext);
- $pagerNext->setPosition($width * 0.45, $height * -0.44, 2);
- $pagerNext->setSize($pagerSize, $pagerSize);
- $pagerNext->setSubStyle($pagerNext::SUBSTYLE_ArrowNext);
-
- $paging->addButton($pagerNext);
- $paging->addButton($pagerPrev);
-
- $pageCountLabel = new Label_Text();
- $frame->add($pageCountLabel);
- $pageCountLabel->setHAlign($pageCountLabel::RIGHT);
- $pageCountLabel->setPosition($width * 0.35, $height * -0.44);
- $pageCountLabel->setStyle($pageCountLabel::STYLE_TextTitle1);
- $pageCountLabel->setTextSize(2);
-
- $paging->setLabel($pageCountLabel);
-
- $backLabel = new Label_Button();
- $frame->add($backLabel);
- $backLabel->setPosition($width * -0.49, $height * -0.44);
- $backLabel->setHAlign($backLabel::LEFT);
- $backLabel->setTextSize(2);
- $backLabel->setText('Back');
- $backLabel->setAction(self::ACTION_SETTINGCLASS_BACK);
-
- $pageFrame = null;
- $index = 0;
- $y = 0;
- foreach ($settings as $setting) {
- if (!$pageFrame) {
- $pageFrame = new Frame();
- $frame->add($pageFrame);
- $y = $height * 0.41;
- $paging->addPage($pageFrame);
+ public function handleManialinkPageAnswer(array $callback) {
+ $actionId = $callback[1][2];
+ if ($actionId === self::ACTION_SETTINGCLASS_BACK) {
+ // Back to classes list
+ $login = $callback[1][1];
+ $player = $this->maniaControl->playerManager->getPlayer($login);
+ unset($this->playersSettingCategoryOpened[$player->login]);
+ $menuId = $this->maniaControl->configurator->getMenuId($this);
+ $this->maniaControl->configurator->showMenu($player, $menuId);
+ } else if (strpos($actionId, self::ACTION_SETTING_BOOL) === 0) {
+ // Bool setting change
+ $settingIndex = (int)substr($actionId, strlen(self::ACTION_SETTING_BOOL));
+
+ $login = $callback[1][1];
+ $player = $this->maniaControl->playerManager->getPlayer($login);
+
+ // Toggle the Boolean Setting
+ $this->toggleBooleanSetting($settingIndex, $player);
+
+ if ($callback[1][3]) {
+ // Save all Changes
+ $this->saveConfigData($callback[1], $player);
+ } else {
+ // Reopen menu directly
+ $menuId = $this->maniaControl->configurator->getMenuId($this);
+ $this->maniaControl->configurator->reopenMenu($player, $menuId);
}
-
- $settingFrame = new Frame();
- $pageFrame->add($settingFrame);
- $settingFrame->setY($y);
-
- // TODO: display currently select setting class
-
- // Headline Label
- if (false) {
- $headLabel = new Label_Text();
- $settingFrame->add($headLabel);
- $headLabel->setHAlign(Control::LEFT);
- $headLabel->setX($width * -0.46);
- $headLabel->setSize($width * 0.6, $settingHeight);
- $headLabel->setStyle($headLabel::STYLE_TextCardSmall);
- $headLabel->setTextSize($labelTextSize);
- $headLabel->setText($setting->class);
- $headLabel->setTextColor("F00");
- } // Headline
-
- $nameLabel = new Label_Text();
- $settingFrame->add($nameLabel);
- $nameLabel->setHAlign(Control::LEFT);
- $nameLabel->setX($width * -0.46);
- $nameLabel->setSize($width * 0.6, $settingHeight);
- $nameLabel->setStyle($nameLabel::STYLE_TextCardSmall);
- $nameLabel->setTextSize($labelTextSize);
- $nameLabel->setText($setting->setting);
- $nameLabel->setTextColor("FFF");
-
- if ($setting->type === SettingManager::TYPE_BOOL) {
- $quad = new Quad_Icons64x64_1();
- $settingFrame->add($quad);
- $quad->setX($width / 2 * 0.6);
- $quad->setZ(-0.01);
- $quad->setSubStyle(($setting->value ? $quad::SUBSTYLE_LvlGreen : $quad::SUBSTYLE_LvlRed));
- $quad->setSize(4, 4);
- $quad->setAction(self::ACTION_SETTING_BOOL . $setting->index);
- }
- else {
- $entry = new Entry();
- $settingFrame->add($entry);
- $entry->setStyle(Label_Text::STYLE_TextValueSmall);
- $entry->setX($width / 2 * 0.65);
- $entry->setTextSize(1);
- $entry->setSize($width * 0.3, $settingHeight * 0.9);
- $entry->setName(self::ACTION_PREFIX_SETTING . $setting->index);
- $entry->setDefault($setting->value);
- }
-
- $y -= $settingHeight;
- if ($index % $pageMaxCount == $pageMaxCount - 1) {
- $pageFrame = null;
- }
-
- $index++;
+ } else if (strpos($actionId, self::ACTION_PREFIX_SETTINGCLASS) === 0) {
+ // Setting class selected
+ $settingClass = substr($actionId, strlen(self::ACTION_PREFIX_SETTINGCLASS));
+
+ $login = $callback[1][1];
+ $player = $this->maniaControl->playerManager->getPlayer($login);
+
+ $this->playersSettingCategoryOpened[$player->login] = $settingClass;
+
+ $menuId = $this->maniaControl->configurator->getMenuId($this);
+ $this->maniaControl->configurator->showMenu($player, $menuId);
}
-
- return $frame;
+ }
+
+ /**
+ * Toggles a Boolean Value
+ *
+ * @param int $settingIndex
+ * @param Player $player
+ */
+ public function toggleBooleanSetting($settingIndex, Player $player) {
+ if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_MC_SETTINGS)) {
+ $this->maniaControl->authenticationManager->sendNotAllowed($player);
+ return;
+ }
+
+ $oldSetting = $this->maniaControl->settingManager->getSettingByIndex($settingIndex);
+
+ if (!isset($oldSetting)) {
+ var_dump('no setting ' . $settingIndex);
+ return;
+ }
+
+ // Toggle value
+ $this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, !$oldSetting->value);
}
/**
* Save the Config Data
- *
- * @param array $configData
+ *
+ * @param array $configData
* @param Player $player
*/
public function saveConfigData(array $configData, Player $player) {
@@ -318,96 +375,33 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
// TODO: improve needed, this won't save configData passed by boolean setting change
return;
}
-
+
$maniaControlSettings = $this->maniaControl->settingManager->getSettings();
-
+
$prefixLength = strlen(self::ACTION_PREFIX_SETTING);
-
+
foreach ($configData[3] as $setting) {
$settingName = substr($setting['Name'], $prefixLength);
-
+
$oldSetting = $maniaControlSettings[$settingName];
if ($setting['Value'] == $oldSetting->value || $oldSetting->type == 'bool') {
continue;
}
-
+
$this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, $setting['Value']);
}
-
+
// Reopen the Menu
$menuId = $this->maniaControl->configurator->getMenuId($this->getTitle());
$this->maniaControl->configurator->reopenMenu($player, $menuId);
}
/**
- * Handle ManialinkPageAnswer Callback
- *
- * @param array $callback
+ * Get the Menu Title
+ *
+ * @return string
*/
- public function handleManialinkPageAnswer(array $callback) {
- $actionId = $callback[1][2];
- if ($actionId === self::ACTION_SETTINGCLASS_BACK) {
- // Back to classes list
- $login = $callback[1][1];
- $player = $this->maniaControl->playerManager->getPlayer($login);
- unset($this->playersSettingCategoryOpened[$player->login]);
- $menuId = $this->maniaControl->configurator->getMenuId($this);
- $this->maniaControl->configurator->showMenu($player, $menuId);
- }
- else if (strpos($actionId, self::ACTION_SETTING_BOOL) === 0) {
- // Bool setting change
- $settingIndex = (int) substr($actionId, strlen(self::ACTION_SETTING_BOOL));
-
- $login = $callback[1][1];
- $player = $this->maniaControl->playerManager->getPlayer($login);
-
- // Toggle the Boolean Setting
- $this->toggleBooleanSetting($settingIndex, $player);
-
- if ($callback[1][3]) {
- // Save all Changes
- $this->saveConfigData($callback[1], $player);
- }
- else {
- // Reopen menu directly
- $menuId = $this->maniaControl->configurator->getMenuId($this);
- $this->maniaControl->configurator->reopenMenu($player, $menuId);
- }
- }
- else if (strpos($actionId, self::ACTION_PREFIX_SETTINGCLASS) === 0) {
- // Setting class selected
- $settingClass = substr($actionId, strlen(self::ACTION_PREFIX_SETTINGCLASS));
-
- $login = $callback[1][1];
- $player = $this->maniaControl->playerManager->getPlayer($login);
-
- $this->playersSettingCategoryOpened[$player->login] = $settingClass;
-
- $menuId = $this->maniaControl->configurator->getMenuId($this);
- $this->maniaControl->configurator->showMenu($player, $menuId);
- }
- }
-
- /**
- * Toggles a Boolean Value
- *
- * @param int $settingIndex
- * @param Player $player
- */
- public function toggleBooleanSetting($settingIndex, Player $player) {
- if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_MC_SETTINGS)) {
- $this->maniaControl->authenticationManager->sendNotAllowed($player);
- return;
- }
-
- $oldSetting = $this->maniaControl->settingManager->getSettingByIndex($settingIndex);
-
- if (!isset($oldSetting)) {
- var_dump('no setting ' . $settingIndex);
- return;
- }
-
- // Toggle value
- $this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, !$oldSetting->value);
+ public function getTitle() {
+ return self::TITLE;
}
}
diff --git a/application/core/Configurators/ScriptSettings.php b/application/core/Configurators/ScriptSettings.php
index c9cc8801..ed60d163 100644
--- a/application/core/Configurators/ScriptSettings.php
+++ b/application/core/Configurators/ScriptSettings.php
@@ -23,8 +23,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
/**
* Class offering a Configurator for Script Settings
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ScriptSettings implements ConfiguratorMenu, CallbackListener {
@@ -100,17 +100,6 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
$this->loadSettingsFromDatabase();
}
- /**
- * Handle OnBegin Map Callback
- *
- * @param Map $map
- */
- public function onBeginMap(Map $map) {
- if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_LOAD_DEFAULT_SETTINGS_MAP_BEGIN)) {
- $this->loadSettingsFromDatabase();
- }
- }
-
/**
* Load Settings from Database
*
@@ -119,7 +108,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
public function loadSettingsFromDatabase() {
try {
$scriptSettings = $this->maniaControl->client->getModeScriptSettings();
- } catch(NotInScriptModeException $e) {
+ } catch (NotInScriptModeException $e) {
return false;
}
@@ -133,7 +122,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
}
$loadedSettings = array();
- while($row = $result->fetch_object()) {
+ while ($row = $result->fetch_object()) {
if (!isset($scriptSettings[$row->settingName])) {
continue;
}
@@ -147,7 +136,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
try {
$this->maniaControl->client->setModeScriptSettings($loadedSettings);
- } catch(Exception $e) {
+ } catch (Exception $e) {
trigger_error('Error occurred: ' . $e->getMessage());
return false;
}
@@ -155,23 +144,27 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
}
/**
- * @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
+ * Handle OnBegin Map Callback
+ *
+ * @param Map $map
*/
- public function getTitle() {
- return 'Script Settings';
+ public function onBeginMap(Map $map) {
+ if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_LOAD_DEFAULT_SETTINGS_MAP_BEGIN)) {
+ $this->loadSettingsFromDatabase();
+ }
}
/**
* @see \ManiaControl\Configurators\ConfiguratorMenu::getMenu()
*/
public function getMenu($width, $height, Script $script, Player $player) {
- $paging = new Paging();
- $script->addFeature($paging);
- $frame = new Frame();
+ $paging = new Paging();
+ $script->addFeature($paging);
+ $frame = new Frame();
try {
$scriptInfo = $this->maniaControl->client->getModeScriptInfo();
- } catch(NotInScriptModeException $e) {
+ } catch (NotInScriptModeException $e) {
$label = new Label();
$frame->add($label);
$label->setText($e->getMessage());
@@ -182,7 +175,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
try {
$scriptSettings = $this->maniaControl->client->getModeScriptSettings();
- } catch(NotInScriptModeException $e) {
+ } catch (NotInScriptModeException $e) {
//do nothing
}
@@ -205,8 +198,8 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
$pagerNext->setSize($pagerSize, $pagerSize);
$pagerNext->setSubStyle(Quad_Icons64x64_1::SUBSTYLE_ArrowNext);
- $paging->addButton($pagerNext);
- $paging->addButton($pagerPrev);
+ $paging->addButton($pagerNext);
+ $paging->addButton($pagerPrev);
$pageCountLabel = new Label();
$frame->add($pageCountLabel);
@@ -215,12 +208,12 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
$pageCountLabel->setStyle('TextTitle1');
$pageCountLabel->setTextSize(2);
- $paging->setLabel($pageCountLabel);
+ $paging->setLabel($pageCountLabel);
// Setting pages
$pageFrames = array();
$y = 0.;
- foreach($scriptParams as $index => $scriptParam) {
+ foreach ($scriptParams as $index => $scriptParam) {
/** @var \Maniaplanet\DedicatedServer\Structures\ScriptSettings $scriptParam */
$settingName = $scriptParam->name;
@@ -236,7 +229,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
}
array_push($pageFrames, $pageFrame);
$y = $height * 0.41;
- $paging->addPage($pageFrame);
+ $paging->addPage($pageFrame);
}
$settingFrame = new Frame();
@@ -290,7 +283,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
$descriptionLabel->setTextSize($labelTextSize);
$descriptionLabel->setTranslate(true);
$descriptionLabel->setText($scriptParam->desc);
- $nameLabel->addTooltipFeature($descriptionLabel);
+ $nameLabel->addTooltipFeature($descriptionLabel);
$y -= $settingHeight;
if ($index % $pageMaxCount == $pageMaxCount - 1) {
@@ -301,50 +294,6 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
return $frame;
}
- /**
- * @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData()
- */
- public function saveConfigData(array $configData, Player $player) {
- if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_SCRIPT_SETTINGS)) {
- $this->maniaControl->authenticationManager->sendNotAllowed($player);
- return;
- }
- if (!$configData[3] || strpos($configData[3][0]['Name'], self::ACTION_PREFIX_SETTING) !== 0) {
- return;
- }
-
- try {
- $scriptSettings = $this->maniaControl->client->getModeScriptSettings();
- } catch(NotInScriptModeException $e) {
- return;
- }
-
- $prefixLength = strlen(self::ACTION_PREFIX_SETTING);
-
- $newSettings = array();
- foreach($configData[3] as $setting) {
- $settingName = substr($setting['Name'], $prefixLength + 1);
- if (!isset($scriptSettings[$settingName])) {
- var_dump('no setting ' . $settingName);
- continue;
- }
-
- if ($setting['Value'] == $scriptSettings[$settingName]) {
- // Not changed
- continue;
- }
-
- $newSettings[$settingName] = $setting['Value'];
- settype($newSettings[$settingName], gettype($scriptSettings[$settingName]));
- }
-
- $this->applyNewScriptSettings($newSettings, $player);
-
- //Reopen the Menu
- $menuId = $this->maniaControl->configurator->getMenuId($this->getTitle());
- $this->maniaControl->configurator->reopenMenu($player, $menuId);
- }
-
/**
* Handle ManialinkPageAnswer Callback
*
@@ -379,7 +328,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
public function toggleBooleanSetting($setting, Player $player) {
try {
$scriptSettings = $this->maniaControl->client->getModeScriptSettings();
- } catch(NotInScriptModeException $e) {
+ } catch (NotInScriptModeException $e) {
return;
}
@@ -399,7 +348,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
*
* @param array $newSettings
* @param Player $player
- * @param bool
+ * @return bool
*/
private function applyNewScriptSettings(array $newSettings, Player $player) {
if (!$newSettings) {
@@ -408,7 +357,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
try {
$this->maniaControl->client->setModeScriptSettings($newSettings);
- } catch(Exception $e) {
+ } catch (Exception $e) {
//TODO temp added 19.04.2014
$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 416 ScriptSettings.php" . $e->getMessage());
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
@@ -436,7 +385,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
$settingIndex = 0;
$title = $this->maniaControl->authenticationManager->getAuthLevelName($player->authLevel);
$chatMessage = '$ff0' . $title . ' $<' . $player->nickname . '$> set ScriptSetting' . ($settingsCount > 1 ? 's' : '') . ' ';
- foreach($newSettings as $setting => $value) {
+ foreach ($newSettings as $setting => $value) {
$chatMessage .= '$<' . '$fff' . preg_replace('/^S_/', '', $setting) . '$z$s$ff0 ';
$chatMessage .= 'to $fff' . $this->parseSettingValue($value) . '$>';
@@ -478,4 +427,55 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener {
}
return (string)$value;
}
+
+ /**
+ * @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData()
+ */
+ public function saveConfigData(array $configData, Player $player) {
+ if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_SCRIPT_SETTINGS)) {
+ $this->maniaControl->authenticationManager->sendNotAllowed($player);
+ return;
+ }
+ if (!$configData[3] || strpos($configData[3][0]['Name'], self::ACTION_PREFIX_SETTING) !== 0) {
+ return;
+ }
+
+ try {
+ $scriptSettings = $this->maniaControl->client->getModeScriptSettings();
+ } catch (NotInScriptModeException $e) {
+ return;
+ }
+
+ $prefixLength = strlen(self::ACTION_PREFIX_SETTING);
+
+ $newSettings = array();
+ foreach ($configData[3] as $setting) {
+ $settingName = substr($setting['Name'], $prefixLength + 1);
+ if (!isset($scriptSettings[$settingName])) {
+ var_dump('no setting ' . $settingName);
+ continue;
+ }
+
+ if ($setting['Value'] == $scriptSettings[$settingName]) {
+ // Not changed
+ continue;
+ }
+
+ $newSettings[$settingName] = $setting['Value'];
+ settype($newSettings[$settingName], gettype($scriptSettings[$settingName]));
+ }
+
+ $this->applyNewScriptSettings($newSettings, $player);
+
+ //Reopen the Menu
+ $menuId = $this->maniaControl->configurator->getMenuId($this->getTitle());
+ $this->maniaControl->configurator->reopenMenu($player, $menuId);
+ }
+
+ /**
+ * @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
+ */
+ public function getTitle() {
+ return 'Script Settings';
+ }
}
diff --git a/application/core/Configurators/ServerSettings.php b/application/core/Configurators/ServerSettings.php
index 0596070e..a4663f33 100644
--- a/application/core/Configurators/ServerSettings.php
+++ b/application/core/Configurators/ServerSettings.php
@@ -20,8 +20,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\LadderModeUnknownException;
/**
* Class offering a Configurator for Server Settings
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ServerSettings implements ConfiguratorMenu, CallbackListener {
@@ -109,7 +109,7 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
}
$serverSettings = $this->maniaControl->client->getServerOptions()->toArray();
$applySettings = false;
- while($row = $result->fetch_object()) {
+ while ($row = $result->fetch_object()) {
if (!isset($serverSettings[$row->settingName])) {
continue;
}
@@ -127,20 +127,13 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
return true;
}
- /**
- * @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
- */
- public function getTitle() {
- return 'Server Settings';
- }
-
/**
* @see \ManiaControl\Configurators\ConfiguratorMenu::getMenu()
*/
public function getMenu($width, $height, Script $script, Player $player) {
- $paging = new Paging();
- $script->addFeature($paging);
- $frame = new Frame();
+ $paging = new Paging();
+ $script->addFeature($paging);
+ $frame = new Frame();
$serverSettings = $this->maniaControl->client->getServerOptions()->toArray();
@@ -163,8 +156,8 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
$pagerNext->setSize($pagerSize, $pagerSize);
$pagerNext->setSubStyle(Quad_Icons64x64_1::SUBSTYLE_ArrowNext);
- $paging->addButton($pagerNext);
- $paging->addButton($pagerPrev);
+ $paging->addButton($pagerNext);
+ $paging->addButton($pagerPrev);
$pageCountLabel = new Label();
$frame->add($pageCountLabel);
@@ -173,13 +166,13 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
$pageCountLabel->setStyle('TextTitle1');
$pageCountLabel->setTextSize(2);
- $paging->setLabel($pageCountLabel);
+ $paging->setLabel($pageCountLabel);
// Setting pages
$pageFrames = array();
$y = 0.;
$id = 0;
- foreach($serverSettings as $name => $value) {
+ foreach ($serverSettings as $name => $value) {
// Continue on CurrentMaxPlayers...
$pos = strpos($name, "Current"); // TODO maybe display current somewhere
if ($pos !== false) {
@@ -194,7 +187,7 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
}
array_push($pageFrames, $pageFrame);
$y = $height * 0.41;
- $paging->addPage($pageFrame);
+ $paging->addPage($pageFrame);
}
$settingFrame = new Frame();
@@ -261,6 +254,25 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
return $frame;
}
+ /**
+ * Handle ManialinkPageAnswer Callback
+ *
+ * @param array $callback
+ */
+ public function handleManialinkPageAnswer(array $callback) {
+ $actionId = $callback[1][2];
+ $boolSetting = (strpos($actionId, self::ACTION_SETTING_BOOL) === 0);
+ if (!$boolSetting) {
+ return;
+ }
+
+ $login = $callback[1][1];
+ $player = $this->maniaControl->playerManager->getPlayer($login);
+
+ // Save all Changes
+ $this->saveConfigData($callback[1], $player);
+ }
+
/**
* @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData()
*/
@@ -285,7 +297,7 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
}
$newSettings = array();
- foreach($configData[3] as $setting) {
+ foreach ($configData[3] as $setting) {
// Check if it was a boolean button
if ($setting['Name'] == $boolSettingName) {
$setting['Value'] = ($setting['Value'] ? false : true);
@@ -304,25 +316,6 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
$this->maniaControl->configurator->reopenMenu($player, $menuId);
}
- /**
- * Handle ManialinkPageAnswer Callback
- *
- * @param array $callback
- */
- public function handleManialinkPageAnswer(array $callback) {
- $actionId = $callback[1][2];
- $boolSetting = (strpos($actionId, self::ACTION_SETTING_BOOL) === 0);
- if (!$boolSetting) {
- return;
- }
-
- $login = $callback[1][1];
- $player = $this->maniaControl->playerManager->getPlayer($login);
-
- // Save all Changes
- $this->saveConfigData($callback[1], $player);
- }
-
/**
* Apply the Array of new Server Settings
*
@@ -337,7 +330,7 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
try {
$this->maniaControl->client->setServerOptions($newSettings);
- } catch(LadderModeUnknownException $e) {
+ } catch (LadderModeUnknownException $e) {
$this->maniaControl->chat->sendError("Unknown Ladder-Mode");
return false;
}
@@ -359,7 +352,7 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
return false;
}
- foreach($newSettings as $setting => $value) {
+ foreach ($newSettings as $setting => $value) {
if ($value === null) {
continue;
}
@@ -382,4 +375,11 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
return true;
}
+
+ /**
+ * @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
+ */
+ public function getTitle() {
+ return 'Server Settings';
+ }
}
diff --git a/application/core/Database/Database.php b/application/core/Database/Database.php
index c1d90b34..b8aafd97 100644
--- a/application/core/Database/Database.php
+++ b/application/core/Database/Database.php
@@ -8,9 +8,9 @@ use ManiaControl\ManiaControl;
/**
* Database Connection Class
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Database implements TimerListener {
/*
@@ -18,7 +18,7 @@ class Database implements TimerListener {
*/
public $mysqli = null;
public $migrationHelper = null;
-
+
/*
* Private Properties
*/
@@ -29,13 +29,13 @@ class Database implements TimerListener {
*/
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
-
+
// Get mysql server information
$host = $this->maniaControl->config->database->xpath('host');
$port = $this->maniaControl->config->database->xpath('port');
$user = $this->maniaControl->config->database->xpath('user');
$pass = $this->maniaControl->config->database->xpath('pass');
-
+
if (!$host) {
trigger_error("Invalid database configuration (host).", E_USER_ERROR);
}
@@ -48,52 +48,32 @@ class Database implements TimerListener {
if (!$pass) {
trigger_error("Invalid database configuration (pass).", E_USER_ERROR);
}
-
- $host = (string) $host[0];
- $port = (int) $port[0];
- $user = (string) $user[0];
- $pass = (string) $pass[0];
-
+
+ $host = (string)$host[0];
+ $port = (int)$port[0];
+ $user = (string)$user[0];
+ $pass = (string)$pass[0];
+
// Enable mysqli Reconnect
ini_set('mysqli.reconnect', 'on');
-
+
// Open database connection
$this->mysqli = @new \mysqli($host, $user, $pass, null, $port);
if ($this->mysqli->connect_error) {
trigger_error($this->mysqli->connect_error, E_USER_ERROR);
}
$this->mysqli->set_charset("utf8");
-
+
$this->initDatabase();
$this->optimizeTables();
-
+
// Register Method which checks the Database Connection every 5 seconds
$this->maniaControl->timerManager->registerTimerListening($this, 'checkConnection', 5000);
-
+
// Create migration helper
$this->migrationHelper = new MigrationHelper($maniaControl);
}
- /**
- * Check if Connection still exists every 5 seconds
- *
- * @param $time
- */
- public function checkConnection($time) {
- if (!$this->mysqli->ping()) {
- $this->maniaControl->quit("The MySQL server has gone away");
- }
- }
-
- /**
- * Destruct database connection
- */
- public function __destruct() {
- if ($this->mysqli) {
- $this->mysqli->close();
- }
- }
-
/**
* Connect to the defined database (create it if needed)
*
@@ -105,14 +85,16 @@ class Database implements TimerListener {
trigger_error("Invalid database configuration (database).", E_USER_ERROR);
return false;
}
- $dbName = (string) $dbName[0];
-
+ $dbName = (string)$dbName[0];
+
// Try to connect
$result = $this->mysqli->select_db($dbName);
- if ($result) return true;
-
+ if ($result) {
+ return true;
+ }
+
// Create database
- $databaseQuery = "CREATE DATABASE ?;";
+ $databaseQuery = "CREATE DATABASE ?;";
$databaseStatement = $this->mysqli->prepare($databaseQuery);
if ($this->mysqli->error) {
trigger_error($this->mysqli->error, E_USER_ERROR);
@@ -125,7 +107,7 @@ class Database implements TimerListener {
return false;
}
$databaseStatement->close();
-
+
// Connect to new database
$this->mysqli->select_db($dbName);
if ($this->mysqli->error) {
@@ -142,7 +124,7 @@ class Database implements TimerListener {
*/
private function optimizeTables() {
$showQuery = "SHOW TABLES;";
- $result = $this->mysqli->query($showQuery);
+ $result = $this->mysqli->query($showQuery);
if ($this->mysqli->error) {
trigger_error($this->mysqli->error);
return false;
@@ -153,7 +135,7 @@ class Database implements TimerListener {
return true;
}
$optimizeQuery = "OPTIMIZE TABLE ";
- $index = 0;
+ $index = 0;
while ($row = $result->fetch_row()) {
$tableName = $row[0];
$optimizeQuery .= "`{$tableName}`";
@@ -171,4 +153,24 @@ class Database implements TimerListener {
}
return true;
}
+
+ /**
+ * Check if Connection still exists every 5 seconds
+ *
+ * @param $time
+ */
+ public function checkConnection($time) {
+ if (!$this->mysqli->ping()) {
+ $this->maniaControl->quit("The MySQL server has gone away");
+ }
+ }
+
+ /**
+ * Destruct database connection
+ */
+ public function __destruct() {
+ if ($this->mysqli) {
+ $this->mysqli->close();
+ }
+ }
}
diff --git a/application/core/Database/MigrationHelper.php b/application/core/Database/MigrationHelper.php
index fcc074a9..a6025bdc 100644
--- a/application/core/Database/MigrationHelper.php
+++ b/application/core/Database/MigrationHelper.php
@@ -1,16 +1,16 @@
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class MigrationHelper {
/*
@@ -20,7 +20,7 @@ class MigrationHelper {
/**
* Construct Migration Helper
- *
+ *
* @param ManiaControl $maniaControl
*/
public function __construct(ManiaControl $maniaControl) {
@@ -37,10 +37,10 @@ class MigrationHelper {
public function transferSettings($sourceClass, $targetClass) {
$sourceClass = $this->getClass($sourceClass);
$targetClass = $this->getClass($targetClass);
-
+
$mysqli = $this->maniaControl->database->mysqli;
-
- $query = "INSERT INTO `" . SettingManager::TABLE_SETTINGS . "` (`class`, `setting`, `type`, `value`, `default`)
+
+ $query = "INSERT INTO `" . SettingManager::TABLE_SETTINGS . "` (`class`, `setting`, `type`, `value`, `default`)
SELECT ?, `setting`, `type`, `value`, `default` FROM `" . SettingManager::TABLE_SETTINGS . "` WHERE `class` = ?;";
$statement = $mysqli->prepare($query);
if ($mysqli->error) {
@@ -68,6 +68,6 @@ class MigrationHelper {
if (is_object($class)) {
return get_class($class);
}
- return (string) $class;
+ return (string)$class;
}
}
diff --git a/application/core/ErrorHandler.php b/application/core/ErrorHandler.php
index 458b38ef..317d196b 100644
--- a/application/core/ErrorHandler.php
+++ b/application/core/ErrorHandler.php
@@ -7,18 +7,18 @@ use ManiaControl\Update\UpdateManager;
/**
* Error and Exception Manager Class
- *
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ErrorHandler {
/*
* Constants
*/
- const MC_DEBUG_NOTICE = "ManiaControl.DebugNotice";
+ const MC_DEBUG_NOTICE = "ManiaControl.DebugNotice";
const SETTING_RESTART_ON_EXCEPTION = 'Automatically restart on Exceptions';
-
+
/*
* Private Properties
*/
@@ -43,55 +43,52 @@ class ErrorHandler {
/**
* ManiaControl ExceptionHandler
- * ManiaControl Shuts down after exception
- *
+ *
* @param \Exception $ex
+ * @param bool $shutdown
*/
public function exceptionHandler(\Exception $ex, $shutdown = true) {
// Log exception
- $message = "[ManiaControl EXCEPTION]: {$ex->getMessage()}";
+ $message = "[ManiaControl EXCEPTION]: {$ex->getMessage()}";
$traceMessage = 'Class: ' . get_class($ex) . PHP_EOL;
$traceMessage .= 'Trace:' . PHP_EOL . $ex->getTraceAsString();
logMessage($message . PHP_EOL . $traceMessage);
-
+
if ($this->reportErrors) {
- $error = array();
- $error["Type"] = "Exception";
- $error["Message"] = $message;
- $error["Backtrace"] = $traceMessage;
+ $error = array();
+ $error["Type"] = "Exception";
+ $error["Message"] = $message;
+ $error["Backtrace"] = $traceMessage;
$error['OperatingSystem'] = php_uname();
- $error['PHPVersion'] = phpversion();
-
+ $error['PHPVersion'] = phpversion();
+
if ($this->maniaControl->server) {
$error['ServerLogin'] = $this->maniaControl->server->login;
- }
- else {
+ } else {
$error['ServerLogin'] = '';
}
-
+
if ($this->maniaControl->settingManager && $this->maniaControl->updateManager) {
- $error['UpdateChannel'] = $this->maniaControl->settingManager->getSetting($this->maniaControl->updateManager, UpdateManager::SETTING_UPDATECHECK_CHANNEL);
+ $error['UpdateChannel'] = $this->maniaControl->settingManager->getSetting($this->maniaControl->updateManager, UpdateManager::SETTING_UPDATECHECK_CHANNEL);
$error['ManiaControlVersion'] = $this->maniaControl->updateManager->getNightlyBuildDate();
- }
- else {
- $error['UpdateChannel'] = '';
+ } else {
+ $error['UpdateChannel'] = '';
$error['ManiaControlVersion'] = ManiaControl::VERSION;
}
-
+
$json = json_encode($error);
$info = base64_encode($json);
-
- $url = ManiaControl::URL_WEBSERVICE . "errorreport?error=" . urlencode($info);
+
+ $url = ManiaControl::URL_WEBSERVICE . "errorreport?error=" . urlencode($info);
$success = FileUtil::loadFile($url);
-
+
if (!json_decode($success)) {
logMessage("Exception-Report failed!");
- }
- else {
+ } else {
logMessage("Exception successfully reported!");
}
}
-
+
if ($shutdown) {
if ($this->shouldRestart()) {
$this->maniaControl->restart();
@@ -100,9 +97,31 @@ class ErrorHandler {
}
}
+ /**
+ * Test if ManiaControl should restart automatically
+ *
+ * @return bool
+ */
+ private function shouldRestart() {
+ if (!$this->maniaControl || !$this->maniaControl->settingManager) {
+ return false;
+ }
+ $setting = $this->maniaControl->settingManager->getSetting($this, self::SETTING_RESTART_ON_EXCEPTION, true);
+ return $setting;
+ }
+
+ /**
+ * Triggers a Debug Notice to the ManiaControl Website
+ *
+ * @param $message
+ */
+ public function triggerDebugNotice($message) {
+ $this->errorHandler(self::MC_DEBUG_NOTICE, $message);
+ }
+
/**
* Error Handler
- *
+ *
* @param $errorNumber
* @param $errorString
* @param $errorFile
@@ -114,52 +133,49 @@ class ErrorHandler {
// Error suppressed
return false;
}
-
+
$userError = $this->isUserErrorNumber($errorNumber);
-
+
// Log error
- $errorTag = $this->getErrorTag($errorNumber);
- $message = $errorTag . ': ' . $errorString;
- $fileLine = $errorFile . ': ' . $errorLine;
+ $errorTag = $this->getErrorTag($errorNumber);
+ $message = $errorTag . ': ' . $errorString;
+ $fileLine = $errorFile . ': ' . $errorLine;
$traceMessage = $this->parseBackTrace(debug_backtrace());
- $logMessage = $message . PHP_EOL . ($userError ? $fileLine : $traceMessage);
+ $logMessage = $message . PHP_EOL . ($userError ? $fileLine : $traceMessage);
logMessage($logMessage);
-
+
if ($this->reportErrors && !$userError) {
- $error = array();
- $error["Type"] = "Error";
- $error["Message"] = $message;
- $error["FileLine"] = $fileLine;
- $error["Backtrace"] = $traceMessage;
+ $error = array();
+ $error["Type"] = "Error";
+ $error["Message"] = $message;
+ $error["FileLine"] = $fileLine;
+ $error["Backtrace"] = $traceMessage;
$error['OperatingSystem'] = php_uname();
- $error['PHPVersion'] = phpversion();
-
+ $error['PHPVersion'] = phpversion();
+
if ($this->maniaControl->server) {
$error['ServerLogin'] = $this->maniaControl->server->login;
- }
- else {
+ } else {
$error['ServerLogin'] = '';
}
-
+
if ($this->maniaControl->settingManager && $this->maniaControl->updateManager) {
- $error['UpdateChannel'] = $this->maniaControl->settingManager->getSetting($this->maniaControl->updateManager, UpdateManager::SETTING_UPDATECHECK_CHANNEL);
+ $error['UpdateChannel'] = $this->maniaControl->settingManager->getSetting($this->maniaControl->updateManager, UpdateManager::SETTING_UPDATECHECK_CHANNEL);
$error['ManiaControlVersion'] = ManiaControl::VERSION . '#' . $this->maniaControl->updateManager->getNightlyBuildDate();
- }
- else {
- $error['UpdateChannel'] = '';
+ } else {
+ $error['UpdateChannel'] = '';
$error['ManiaControlVersion'] = ManiaControl::VERSION;
}
-
+
$json = json_encode($error);
$info = base64_encode($json);
-
- $url = ManiaControl::URL_WEBSERVICE . "errorreport?error=" . urlencode($info);
+
+ $url = ManiaControl::URL_WEBSERVICE . "errorreport?error=" . urlencode($info);
$success = FileUtil::loadFile($url);
-
+
if (!json_decode($success)) {
logMessage("Error-Report failed!");
- }
- else {
+ } else {
logMessage("Error successfully reported!");
}
}
@@ -172,7 +188,7 @@ class ErrorHandler {
/**
* Check if the given Error Number is a User Error
- *
+ *
* @param int $errorNumber
* @return bool
*/
@@ -180,18 +196,9 @@ class ErrorHandler {
return ($errorNumber === E_USER_ERROR || $errorNumber === E_USER_WARNING || $errorNumber === E_USER_NOTICE || $errorNumber === E_USER_DEPRECATED);
}
- /**
- * Triggers a Debug Notice to the ManiaControl Website
- *
- * @param $message
- */
- public function triggerDebugNotice($message) {
- $this->errorHandler(self::MC_DEBUG_NOTICE, $message);
- }
-
/**
* Get the Prefix for the given Error Level
- *
+ *
* @param int $errorLevel
* @return string
*/
@@ -229,36 +236,13 @@ class ErrorHandler {
return "[PHP {$errorLevel}]";
}
- /**
- * Test if ManiaControl should stop its Execution
- *
- * @param int $errorNumber
- * @return bool
- */
- private function shouldStopExecution($errorNumber) {
- return ($errorNumber === E_ERROR || $errorNumber === E_USER_ERROR || $errorNumber === E_FATAL);
- }
-
- /**
- * Test if ManiaControl should restart automatically
- *
- * @return bool
- */
- private function shouldRestart() {
- if (!$this->maniaControl || !$this->maniaControl->settingManager) {
- return false;
- }
- $setting = $this->maniaControl->settingManager->getSetting($this, self::SETTING_RESTART_ON_EXCEPTION, true);
- return $setting;
- }
-
/**
* Parse the Debug Backtrace into a String for the Error Report
* return string
*/
private function parseBackTrace(array $backtrace) {
$traceString = 'Trace:';
- $stepCount = 0;
+ $stepCount = 0;
foreach ($backtrace as $traceStep) {
$traceString .= PHP_EOL . '#' . $stepCount . ': ';
if (isset($traceStep['class'])) {
@@ -282,4 +266,14 @@ class ErrorHandler {
}
return $traceString;
}
+
+ /**
+ * Test if ManiaControl should stop its Execution
+ *
+ * @param int $errorNumber
+ * @return bool
+ */
+ private function shouldStopExecution($errorNumber) {
+ return ($errorNumber === E_ERROR || $errorNumber === E_USER_ERROR || $errorNumber === E_FATAL);
+ }
}
\ No newline at end of file
diff --git a/application/core/Files/AsynchronousFileReader.php b/application/core/Files/AsynchronousFileReader.php
index 7701a8ea..422832da 100644
--- a/application/core/Files/AsynchronousFileReader.php
+++ b/application/core/Files/AsynchronousFileReader.php
@@ -11,9 +11,9 @@ use ManiaControl\ManiaControl;
/**
* Asynchronous File Reader
*
- * @author kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class AsynchronousFileReader {
/*
@@ -35,13 +35,13 @@ class AsynchronousFileReader {
* Appends the Data
*/
public function appendData() {
- foreach($this->requests as $key => $request) {
+ foreach ($this->requests as $key => $request) {
/** @var Request $request */
try {
if ($request->socketPerform()) {
$request->socketSelect();
}
- } catch(Exception $e) {
+ } catch (Exception $e) {
if ($e->getMessage() == "Cannot perform if there are no requests in queue.") {
unset($this->requests[$key]);
} else {
@@ -54,9 +54,10 @@ class AsynchronousFileReader {
/**
* Load a remote file
*
- * @param string $url
- * @param $function
- * @param string $contentType
+ * @param string $url
+ * @param callable $function
+ * @param string $contentType
+ * @param int $keepAlive
* @return bool
*/
public function loadFile($url, $function, $contentType = 'UTF-8', $keepAlive = 0) {
@@ -118,11 +119,11 @@ class AsynchronousFileReader {
/**
* Send Data via POST Method
*
- * @param $url
- * @param $function
- * @param $content
- * @param string $compression
- * @param string $contentType
+ * @param string $url
+ * @param callable $function
+ * @param string $content
+ * @param bool $compression
+ * @param string $contentType
* @return bool
*/
public function postData($url, $function, $content, $compression = false, $contentType = 'text/xml; charset=UTF-8') {
diff --git a/application/core/Files/BackupUtil.php b/application/core/Files/BackupUtil.php
index f4f2ec4a..04e9d2be 100644
--- a/application/core/Files/BackupUtil.php
+++ b/application/core/Files/BackupUtil.php
@@ -1,14 +1,15 @@
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
abstract class BackupUtil {
/*
@@ -18,53 +19,30 @@ abstract class BackupUtil {
/**
* Perform a Full Backup of ManiaControl
- *
+ *
* @return bool
*/
public static function performFullBackup() {
- $backupFolder = self::getBackupFolder();
+ $backupFolder = self::getBackupFolder();
$backupFileName = $backupFolder . 'backup_' . ManiaControl::VERSION . '_' . date('y-m-d') . '_' . time() . '.zip';
- $backupZip = new \ZipArchive();
- if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== TRUE) {
+ $backupZip = new \ZipArchive();
+ if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== true) {
trigger_error("Couldn't create Backup Zip!");
return false;
}
- $excludes = array('.', '..', 'backup', 'logs', 'ManiaControl.log');
- $pathInfo = pathInfo(ManiaControlDir);
+ $excludes = array('.', '..', 'backup', 'logs', 'ManiaControl.log');
+ $pathInfo = pathInfo(ManiaControlDir);
$parentPath = $pathInfo['dirname'] . '/';
- $dirName = $pathInfo['basename'];
+ $dirName = $pathInfo['basename'];
$backupZip->addEmptyDir($dirName);
self::zipDirectory($backupZip, ManiaControlDir, strlen($parentPath), $excludes);
$backupZip->close();
return true;
}
- /**
- * Perform a Backup of the Plugins
- *
- * @return bool
- */
- public static function performPluginsBackup() {
- $backupFolder = self::getBackupFolder();
- $backupFileName = $backupFolder . 'backup_plugins_' . date('y-m-d') . '_' . time() . '.zip';
- $backupZip = new \ZipArchive();
- if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== TRUE) {
- trigger_error("Couldn't create Backup Zip!");
- return false;
- }
- $excludes = array('.', '..');
- $pathInfo = pathInfo(ManiaControlDir . '/plugins');
- $parentPath = $pathInfo['dirname'] . '/';
- $dirName = $pathInfo['basename'];
- $backupZip->addEmptyDir($dirName);
- self::zipDirectory($backupZip, ManiaControlDir . '/plugins', strlen($parentPath), $excludes);
- $backupZip->close();
- return true;
- }
-
/**
* Get the Backup Folder Path and create it if necessary
- *
+ *
* @return string
*/
private static function getBackupFolder() {
@@ -77,11 +55,11 @@ abstract class BackupUtil {
/**
* Add a complete Directory to the ZipArchive
- *
+ *
* @param \ZipArchive $zipArchive
- * @param string $folderName
- * @param int $prefixLength
- * @param array $excludes
+ * @param string $folderName
+ * @param int $prefixLength
+ * @param array $excludes
* @return bool
*/
private static function zipDirectory(\ZipArchive &$zipArchive, $folderName, $prefixLength, array $excludes = array()) {
@@ -94,7 +72,7 @@ abstract class BackupUtil {
if (in_array($file, $excludes)) {
continue;
}
- $filePath = $folderName . '/' . $file;
+ $filePath = $folderName . '/' . $file;
$localPath = substr($filePath, $prefixLength);
if (is_file($filePath)) {
$zipArchive->addFile($filePath, $localPath);
@@ -109,4 +87,27 @@ abstract class BackupUtil {
closedir($folderHandle);
return true;
}
+
+ /**
+ * Perform a Backup of the Plugins
+ *
+ * @return bool
+ */
+ public static function performPluginsBackup() {
+ $backupFolder = self::getBackupFolder();
+ $backupFileName = $backupFolder . 'backup_plugins_' . date('y-m-d') . '_' . time() . '.zip';
+ $backupZip = new \ZipArchive();
+ if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== true) {
+ trigger_error("Couldn't create Backup Zip!");
+ return false;
+ }
+ $excludes = array('.', '..');
+ $pathInfo = pathInfo(ManiaControlDir . '/plugins');
+ $parentPath = $pathInfo['dirname'] . '/';
+ $dirName = $pathInfo['basename'];
+ $backupZip->addEmptyDir($dirName);
+ self::zipDirectory($backupZip, ManiaControlDir . '/plugins', strlen($parentPath), $excludes);
+ $backupZip->close();
+ return true;
+ }
}
diff --git a/application/core/Files/FileUtil.php b/application/core/Files/FileUtil.php
index 2b98458d..9e898841 100644
--- a/application/core/Files/FileUtil.php
+++ b/application/core/Files/FileUtil.php
@@ -2,15 +2,15 @@
namespace ManiaControl\Files;
-use ManiaControl\ManiaControl;
use ManiaControl\Formatter;
+use ManiaControl\ManiaControl;
/**
* Files Utility Class
- *
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
abstract class FileUtil {
/*
@@ -20,7 +20,7 @@ abstract class FileUtil {
/**
* Load a remote file
- *
+ *
* @param string $url
* @param string $contentType
* @return string || null
@@ -29,48 +29,48 @@ abstract class FileUtil {
if (!$url) {
return null;
}
- $urlData = parse_url($url);
- $port = (isset($urlData['port']) ? $urlData['port'] : 80);
+ $urlData = parse_url($url);
+ $port = (isset($urlData['port']) ? $urlData['port'] : 80);
$urlQuery = isset($urlData['query']) ? "?" . $urlData['query'] : "";
-
+
$fsock = fsockopen($urlData['host'], $port);
stream_set_timeout($fsock, 3);
-
+
$query = 'GET ' . $urlData['path'] . $urlQuery . ' HTTP/1.0' . PHP_EOL;
$query .= 'Host: ' . $urlData['host'] . PHP_EOL;
$query .= 'Content-Type: ' . $contentType . PHP_EOL;
$query .= 'User-Agent: ManiaControl v' . ManiaControl::VERSION . PHP_EOL;
$query .= PHP_EOL;
-
+
fwrite($fsock, $query);
-
+
$buffer = '';
- $info = array('timed_out' => false);
+ $info = array('timed_out' => false);
while (!feof($fsock) && !$info['timed_out']) {
$buffer .= fread($fsock, 1024);
$info = stream_get_meta_data($fsock);
}
fclose($fsock);
-
+
if ($info['timed_out'] || !$buffer) {
return null;
}
if (substr($buffer, 9, 3) != "200") {
return null;
}
-
+
$result = explode("\r\n\r\n", $buffer, 2);
-
+
if (count($result) < 2) {
return null;
}
-
+
return $result[1];
}
/**
* Load config xml-file
- *
+ *
* @param string $fileName
* @return \SimpleXMLElement
*/
@@ -89,7 +89,7 @@ abstract class FileUtil {
/**
* Return file name cleared from special characters
- *
+ *
* @param string $fileName
* @return string
*/
@@ -100,9 +100,19 @@ abstract class FileUtil {
return $fileName;
}
+ /**
+ * Delete the Temporary Folder if it's empty
+ *
+ * @return bool
+ */
+ public static function removeTempFolder() {
+ $tempFolder = self::getTempFolder(false);
+ return @rmdir($tempFolder);
+ }
+
/**
* Get the Temporary Folder and create it if necessary
- *
+ *
* @param bool $createIfNecessary
* @return string
*/
@@ -114,19 +124,9 @@ abstract class FileUtil {
return $tempFolder;
}
- /**
- * Delete the Temporary Folder if it's empty
- *
- * @return bool
- */
- public static function removeTempFolder() {
- $tempFolder = self::getTempFolder(false);
- return @rmdir($tempFolder);
- }
-
/**
* Check if ManiaControl has sufficient Access to write to Files in the given Directories
- *
+ *
* @param mixed $directories
* @return bool
*/
@@ -134,7 +134,7 @@ abstract class FileUtil {
if (!is_array($directories)) {
$directories = array($directories);
}
-
+
foreach ($directories as $directory) {
$dir = new \RecursiveDirectoryIterator(ManiaControlDir . $directory);
foreach (new \RecursiveIteratorIterator($dir) as $fileName => $file) {
@@ -148,7 +148,7 @@ abstract class FileUtil {
}
}
}
-
+
return true;
}
}
diff --git a/application/core/Formatter.php b/application/core/Formatter.php
index 7c0d1818..9dfde90a 100644
--- a/application/core/Formatter.php
+++ b/application/core/Formatter.php
@@ -5,9 +5,9 @@ namespace ManiaControl;
/**
* Class offering Methods to format Texts and Values
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
abstract class Formatter {
@@ -68,7 +68,7 @@ abstract class Formatter {
$a = array(12 * 30 * 24 * 60 * 60 => 'year', 30 * 24 * 60 * 60 => 'month', 24 * 60 * 60 => 'day', 60 * 60 => 'hour', 60 => 'minute', 1 => 'second');
- foreach($a as $secs => $str) {
+ foreach ($a as $secs => $str) {
$d = $etime / $secs;
if ($d >= 1) {
$r = round($d);
@@ -111,6 +111,16 @@ abstract class Formatter {
return $string;
}
+ /**
+ * Remove Links from the String
+ *
+ * @param string $string
+ * @return string
+ */
+ public static function stripLinks($string) {
+ return preg_replace('/(? 'AFG', 'Albania' => 'ALB', 'Algeria' => 'ALG', 'Andorra' => 'AND', 'Angola' => 'ANG', 'Argentina' => 'ARG', 'Armenia' => 'ARM', 'Aruba' => 'ARU', 'Australia' => 'AUS', 'Austria' => 'AUT', 'Azerbaijan' => 'AZE', 'Bahamas' => 'BAH', 'Bahrain' => 'BRN', 'Bangladesh' => 'BAN', 'Barbados' => 'BAR', 'Belarus' => 'BLR', 'Belgium' => 'BEL', 'Belize' => 'BIZ', 'Benin' => 'BEN', 'Bermuda' => 'BER', 'Bhutan' => 'BHU', 'Bolivia' => 'BOL', 'Bosnia&Herzegovina' => 'BIH', 'Botswana' => 'BOT', 'Brazil' => 'BRA', 'Brunei' => 'BRU', 'Bulgaria' => 'BUL', 'Burkina Faso' => 'BUR', 'Burundi' => 'BDI', 'Cambodia' => 'CAM', 'Cameroon' => 'CAR', // actually CMR
- 'Canada' => 'CAN', 'Cape Verde' => 'CPV', 'Central African Republic' => 'CAF', 'Chad' => 'CHA', 'Chile' => 'CHI', 'China' => 'CHN', 'Chinese Taipei' => 'TPE', 'Colombia' => 'COL', 'Congo' => 'CGO', 'Costa Rica' => 'CRC', 'Croatia' => 'CRO', 'Cuba' => 'CUB', 'Cyprus' => 'CYP', 'Czech Republic' => 'CZE', 'Czech republic' => 'CZE', 'DR Congo' => 'COD', 'Denmark' => 'DEN', 'Djibouti' => 'DJI', 'Dominica' => 'DMA', 'Dominican Republic' => 'DOM', 'Ecuador' => 'ECU', 'Egypt' => 'EGY', 'El Salvador' => 'ESA', 'Eritrea' => 'ERI', 'Estonia' => 'EST', 'Ethiopia' => 'ETH', 'Fiji' => 'FIJ', 'Finland' => 'FIN', 'France' => 'FRA', 'Gabon' => 'GAB', 'Gambia' => 'GAM', 'Georgia' => 'GEO', 'Germany' => 'GER', 'Ghana' => 'GHA', 'Greece' => 'GRE', 'Grenada' => 'GRN', 'Guam' => 'GUM', 'Guatemala' => 'GUA', 'Guinea' => 'GUI', 'Guinea-Bissau' => 'GBS', 'Guyana' => 'GUY', 'Haiti' => 'HAI', 'Honduras' => 'HON', 'Hong Kong' => 'HKG', 'Hungary' => 'HUN', 'Iceland' => 'ISL', 'India' => 'IND', 'Indonesia' => 'INA', 'Iran' => 'IRI', 'Iraq' => 'IRQ', 'Ireland' => 'IRL', 'Israel' => 'ISR', 'Italy' => 'ITA', 'Ivory Coast' => 'CIV', 'Jamaica' => 'JAM', 'Japan' => 'JPN', 'Jordan' => 'JOR', 'Kazakhstan' => 'KAZ', 'Kenya' => 'KEN', 'Kiribati' => 'KIR', 'Korea' => 'KOR', 'Kuwait' => 'KUW', 'Kyrgyzstan' => 'KGZ', 'Laos' => 'LAO', 'Latvia' => 'LAT', 'Lebanon' => 'LIB', 'Lesotho' => 'LES', 'Liberia' => 'LBR', 'Libya' => 'LBA', 'Liechtenstein' => 'LIE', 'Lithuania' => 'LTU', 'Luxembourg' => 'LUX', 'Macedonia' => 'MKD', 'Malawi' => 'MAW', 'Malaysia' => 'MAS', 'Mali' => 'MLI', 'Malta' => 'MLT', 'Mauritania' => 'MTN', 'Mauritius' => 'MRI', 'Mexico' => 'MEX', 'Moldova' => 'MDA', 'Monaco' => 'MON', 'Mongolia' => 'MGL', 'Montenegro' => 'MNE', 'Morocco' => 'MAR', 'Mozambique' => 'MOZ', 'Myanmar' => 'MYA', 'Namibia' => 'NAM', 'Nauru' => 'NRU', 'Nepal' => 'NEP', 'Netherlands' => 'NED', 'New Zealand' => 'NZL', 'Nicaragua' => 'NCA', 'Niger' => 'NIG', 'Nigeria' => 'NGR', 'Norway' => 'NOR', 'Oman' => 'OMA', 'Other Countries' => 'OTH', 'Pakistan' => 'PAK', 'Palau' => 'PLW', 'Palestine' => 'PLE', 'Panama' => 'PAN', 'Paraguay' => 'PAR', 'Peru' => 'PER', 'Philippines' => 'PHI', 'Poland' => 'POL', 'Portugal' => 'POR', 'Puerto Rico' => 'PUR', 'Qatar' => 'QAT', 'Romania' => 'ROM', // actually ROU
- 'Russia' => 'RUS', 'Rwanda' => 'RWA', 'Samoa' => 'SAM', 'San Marino' => 'SMR', 'Saudi Arabia' => 'KSA', 'Senegal' => 'SEN', 'Serbia' => 'SCG', // actually SRB
- 'Sierra Leone' => 'SLE', 'Singapore' => 'SIN', 'Slovakia' => 'SVK', 'Slovenia' => 'SLO', 'Somalia' => 'SOM', 'South Africa' => 'RSA', 'Spain' => 'ESP', 'Sri Lanka' => 'SRI', 'Sudan' => 'SUD', 'Suriname' => 'SUR', 'Swaziland' => 'SWZ', 'Sweden' => 'SWE', 'Switzerland' => 'SUI', 'Syria' => 'SYR', 'Taiwan' => 'TWN', 'Tajikistan' => 'TJK', 'Tanzania' => 'TAN', 'Thailand' => 'THA', 'Togo' => 'TOG', 'Tonga' => 'TGA', 'Trinidad and Tobago' => 'TRI', 'Tunisia' => 'TUN', 'Turkey' => 'TUR', 'Turkmenistan' => 'TKM', 'Tuvalu' => 'TUV', 'Uganda' => 'UGA', 'Ukraine' => 'UKR', 'United Arab Emirates' => 'UAE', 'United Kingdom' => 'GBR', 'United States of America' => 'USA', 'Uruguay' => 'URU', 'Uzbekistan' => 'UZB', 'Vanuatu' => 'VAN', 'Venezuela' => 'VEN', 'Vietnam' => 'VIE', 'Yemen' => 'YEM', 'Zambia' => 'ZAM', 'Zimbabwe' => 'ZIM');
+ $nations = array('Afghanistan' => 'AFG', 'Albania' => 'ALB', 'Algeria' => 'ALG', 'Andorra' => 'AND', 'Angola' => 'ANG', 'Argentina' => 'ARG', 'Armenia' => 'ARM', 'Aruba' => 'ARU', 'Australia' => 'AUS', 'Austria' => 'AUT', 'Azerbaijan' => 'AZE', 'Bahamas' => 'BAH', 'Bahrain' => 'BRN', 'Bangladesh' => 'BAN', 'Barbados' => 'BAR', 'Belarus' => 'BLR', 'Belgium' => 'BEL', 'Belize' => 'BIZ', 'Benin' => 'BEN', 'Bermuda' => 'BER', 'Bhutan' => 'BHU', 'Bolivia' => 'BOL', 'Bosnia&Herzegovina' => 'BIH', 'Botswana' => 'BOT', 'Brazil' => 'BRA', 'Brunei' => 'BRU', 'Bulgaria' => 'BUL', 'Burkina Faso' => 'BUR', 'Burundi' => 'BDI', 'Cambodia' => 'CAM', 'Cameroon' => 'CAR', // actually CMR
+ 'Canada' => 'CAN', 'Cape Verde' => 'CPV', 'Central African Republic' => 'CAF', 'Chad' => 'CHA', 'Chile' => 'CHI', 'China' => 'CHN', 'Chinese Taipei' => 'TPE', 'Colombia' => 'COL', 'Congo' => 'CGO', 'Costa Rica' => 'CRC', 'Croatia' => 'CRO', 'Cuba' => 'CUB', 'Cyprus' => 'CYP', 'Czech Republic' => 'CZE', 'Czech republic' => 'CZE', 'DR Congo' => 'COD', 'Denmark' => 'DEN', 'Djibouti' => 'DJI', 'Dominica' => 'DMA', 'Dominican Republic' => 'DOM', 'Ecuador' => 'ECU', 'Egypt' => 'EGY', 'El Salvador' => 'ESA', 'Eritrea' => 'ERI', 'Estonia' => 'EST', 'Ethiopia' => 'ETH', 'Fiji' => 'FIJ', 'Finland' => 'FIN', 'France' => 'FRA', 'Gabon' => 'GAB', 'Gambia' => 'GAM', 'Georgia' => 'GEO', 'Germany' => 'GER', 'Ghana' => 'GHA', 'Greece' => 'GRE', 'Grenada' => 'GRN', 'Guam' => 'GUM', 'Guatemala' => 'GUA', 'Guinea' => 'GUI', 'Guinea-Bissau' => 'GBS', 'Guyana' => 'GUY', 'Haiti' => 'HAI', 'Honduras' => 'HON', 'Hong Kong' => 'HKG', 'Hungary' => 'HUN', 'Iceland' => 'ISL', 'India' => 'IND', 'Indonesia' => 'INA', 'Iran' => 'IRI', 'Iraq' => 'IRQ', 'Ireland' => 'IRL', 'Israel' => 'ISR', 'Italy' => 'ITA', 'Ivory Coast' => 'CIV', 'Jamaica' => 'JAM', 'Japan' => 'JPN', 'Jordan' => 'JOR', 'Kazakhstan' => 'KAZ', 'Kenya' => 'KEN', 'Kiribati' => 'KIR', 'Korea' => 'KOR', 'Kuwait' => 'KUW', 'Kyrgyzstan' => 'KGZ', 'Laos' => 'LAO', 'Latvia' => 'LAT', 'Lebanon' => 'LIB', 'Lesotho' => 'LES', 'Liberia' => 'LBR', 'Libya' => 'LBA', 'Liechtenstein' => 'LIE', 'Lithuania' => 'LTU', 'Luxembourg' => 'LUX', 'Macedonia' => 'MKD', 'Malawi' => 'MAW', 'Malaysia' => 'MAS', 'Mali' => 'MLI', 'Malta' => 'MLT', 'Mauritania' => 'MTN', 'Mauritius' => 'MRI', 'Mexico' => 'MEX', 'Moldova' => 'MDA', 'Monaco' => 'MON', 'Mongolia' => 'MGL', 'Montenegro' => 'MNE', 'Morocco' => 'MAR', 'Mozambique' => 'MOZ', 'Myanmar' => 'MYA', 'Namibia' => 'NAM', 'Nauru' => 'NRU', 'Nepal' => 'NEP', 'Netherlands' => 'NED', 'New Zealand' => 'NZL', 'Nicaragua' => 'NCA', 'Niger' => 'NIG', 'Nigeria' => 'NGR', 'Norway' => 'NOR', 'Oman' => 'OMA', 'Other Countries' => 'OTH', 'Pakistan' => 'PAK', 'Palau' => 'PLW', 'Palestine' => 'PLE', 'Panama' => 'PAN', 'Paraguay' => 'PAR', 'Peru' => 'PER', 'Philippines' => 'PHI', 'Poland' => 'POL', 'Portugal' => 'POR', 'Puerto Rico' => 'PUR', 'Qatar' => 'QAT', 'Romania' => 'ROM', // actually ROU
+ 'Russia' => 'RUS', 'Rwanda' => 'RWA', 'Samoa' => 'SAM', 'San Marino' => 'SMR', 'Saudi Arabia' => 'KSA', 'Senegal' => 'SEN', 'Serbia' => 'SCG', // actually SRB
+ 'Sierra Leone' => 'SLE', 'Singapore' => 'SIN', 'Slovakia' => 'SVK', 'Slovenia' => 'SLO', 'Somalia' => 'SOM', 'South Africa' => 'RSA', 'Spain' => 'ESP', 'Sri Lanka' => 'SRI', 'Sudan' => 'SUD', 'Suriname' => 'SUR', 'Swaziland' => 'SWZ', 'Sweden' => 'SWE', 'Switzerland' => 'SUI', 'Syria' => 'SYR', 'Taiwan' => 'TWN', 'Tajikistan' => 'TJK', 'Tanzania' => 'TAN', 'Thailand' => 'THA', 'Togo' => 'TOG', 'Tonga' => 'TGA', 'Trinidad and Tobago' => 'TRI', 'Tunisia' => 'TUN', 'Turkey' => 'TUR', 'Turkmenistan' => 'TKM', 'Tuvalu' => 'TUV', 'Uganda' => 'UGA', 'Ukraine' => 'UKR', 'United Arab Emirates' => 'UAE', 'United Kingdom' => 'GBR', 'United States of America' => 'USA', 'Uruguay' => 'URU', 'Uzbekistan' => 'UZB', 'Vanuatu' => 'VAN', 'Venezuela' => 'VEN', 'Vietnam' => 'VIE', 'Yemen' => 'YEM', 'Zambia' => 'ZAM', 'Zimbabwe' => 'ZIM');
if (array_key_exists($country, $nations)) {
return $nations[$country];
}
diff --git a/application/core/ManiaControl.php b/application/core/ManiaControl.php
index 5c3db1d7..7234fea0 100644
--- a/application/core/ManiaControl.php
+++ b/application/core/ManiaControl.php
@@ -11,6 +11,7 @@ use ManiaControl\Callbacks\TimerManager;
use ManiaControl\Commands\CommandListener;
use ManiaControl\Commands\CommandManager;
use ManiaControl\Configurators\Configurator;
+use ManiaControl\Database\Database;
use ManiaControl\Files\AsynchronousFileReader;
use ManiaControl\Files\FileUtil;
use ManiaControl\Manialinks\ManialinkManager;
@@ -26,7 +27,6 @@ use Maniaplanet\DedicatedServer\Connection;
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
use Maniaplanet\DedicatedServer\Xmlrpc\TransportException;
-use ManiaControl\Database\Database;
require_once __DIR__ . '/Libs/Maniaplanet/DedicatedServer/Connection.php';
require_once __DIR__ . '/Libs/GbxDataFetcher/gbxdatafetcher.inc.php';
@@ -36,26 +36,26 @@ require_once __DIR__ . '/Libs/curl-easy/autoload.php';
/**
* ManiaControl Server Controller for ManiaPlanet Server
- *
- * @author ManiaControl Team
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ManiaControl implements CommandListener, TimerListener {
/*
* Constants
*/
- const VERSION = '0.12';
- const API_VERSION = '2013-04-16';
- const MIN_DEDIVERSION = '2014-04-02_18_00';
- const OS_UNIX = 'Unix';
- const OS_WIN = 'Windows';
- const CONNECT_TIMEOUT = 50;
- const SCRIPT_TIMEOUT = 20;
- const URL_WEBSERVICE = 'http://ws.maniacontrol.com/';
+ const VERSION = '0.12';
+ const API_VERSION = '2013-04-16';
+ const MIN_DEDIVERSION = '2014-04-02_18_00';
+ const OS_UNIX = 'Unix';
+ const OS_WIN = 'Windows';
+ const CONNECT_TIMEOUT = 50;
+ const SCRIPT_TIMEOUT = 20;
+ const URL_WEBSERVICE = 'http://ws.maniacontrol.com/';
const SETTING_PERMISSION_SHUTDOWN = 'Shutdown ManiaControl';
- const SETTING_PERMISSION_RESTART = 'Restart ManiaControl';
-
+ const SETTING_PERMISSION_RESTART = 'Restart ManiaControl';
+
/*
* Public Properties
*/
@@ -66,7 +66,6 @@ class ManiaControl implements CommandListener, TimerListener {
public $config = null;
public $configurator = null;
/**
- *
* @var Connection $client
*/
public $client = null;
@@ -85,7 +84,7 @@ class ManiaControl implements CommandListener, TimerListener {
public $timerManager = null;
public $fileReader = null;
public $billManager = null;
-
+
/*
* Private Properties
*/
@@ -97,53 +96,66 @@ class ManiaControl implements CommandListener, TimerListener {
public function __construct() {
// Construct Error Handler
$this->errorHandler = new ErrorHandler($this);
-
+
$this->log('Loading ManiaControl v' . self::VERSION . '...');
-
+
$this->loadConfig();
-
+
// Load ManiaControl Modules
- $this->callbackManager = new CallbackManager($this);
- $this->timerManager = new TimerManager($this);
- $this->database = new Database($this);
- $this->fileReader = new AsynchronousFileReader($this);
- $this->billManager = new BillManager($this);
- $this->settingManager = new SettingManager($this);
- $this->statisticManager = new StatisticManager($this);
- $this->manialinkManager = new ManialinkManager($this);
- $this->actionsMenu = new ActionsMenu($this);
- $this->chat = new Chat($this);
- $this->commandManager = new CommandManager($this);
- $this->server = new Server($this);
+ $this->callbackManager = new CallbackManager($this);
+ $this->timerManager = new TimerManager($this);
+ $this->database = new Database($this);
+ $this->fileReader = new AsynchronousFileReader($this);
+ $this->billManager = new BillManager($this);
+ $this->settingManager = new SettingManager($this);
+ $this->statisticManager = new StatisticManager($this);
+ $this->manialinkManager = new ManialinkManager($this);
+ $this->actionsMenu = new ActionsMenu($this);
+ $this->chat = new Chat($this);
+ $this->commandManager = new CommandManager($this);
+ $this->server = new Server($this);
$this->authenticationManager = new AuthenticationManager($this);
- $this->playerManager = new PlayerManager($this);
- $this->mapManager = new MapManager($this);
- $this->configurator = new Configurator($this);
- $this->pluginManager = new PluginManager($this);
- $this->updateManager = new UpdateManager($this);
-
+ $this->playerManager = new PlayerManager($this);
+ $this->mapManager = new MapManager($this);
+ $this->configurator = new Configurator($this);
+ $this->pluginManager = new PluginManager($this);
+ $this->updateManager = new UpdateManager($this);
+
// Define Permission Levels
$this->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_SHUTDOWN, AuthenticationManager::AUTH_LEVEL_SUPERADMIN);
$this->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_RESTART, AuthenticationManager::AUTH_LEVEL_SUPERADMIN);
-
+
// Register for commands
$this->commandManager->registerCommandListener('version', $this, 'command_Version', false, 'Shows ManiaControl version.');
$this->commandManager->registerCommandListener('restart', $this, 'command_Restart', true, 'Restarts ManiaControl.');
$this->commandManager->registerCommandListener('shutdown', $this, 'command_Shutdown', true, 'Shuts ManiaControl down.');
-
+
// Check connection every 30 seconds
$this->timerManager->registerTimerListening($this, 'checkConnection', 1000 * 30);
-
+
$this->errorHandler->init();
}
+ /**
+ * Print a message to console and log
+ *
+ * @param string $message
+ * @param bool $stripCodes
+ */
+ public function log($message, $stripCodes = false) {
+ if ($stripCodes) {
+ $message = Formatter::stripCodes($message);
+ }
+ logMessage($message);
+ }
+
/**
* Load the Config XML-File
*/
private function loadConfig() {
- $configId = CommandLineHelper::getParameter('-config');
+ $configId = CommandLineHelper::getParameter('-config');
$configFileName = ($configId ? $configId : 'server.xml');
- $this->config = FileUtil::loadConfig($configFileName);
+ $this->config = FileUtil::loadConfig($configFileName);
if (!$this->config) {
trigger_error("Error loading Configuration XML-File! ('{$configFileName}')", E_USER_ERROR);
}
@@ -154,7 +166,7 @@ class ManiaControl implements CommandListener, TimerListener {
/**
* Checks connection every xxx Minutes
- *
+ *
* @param $time
*/
public function checkConnection($time) {
@@ -164,20 +176,65 @@ class ManiaControl implements CommandListener, TimerListener {
}
/**
- * Print a message to console and log
- *
+ * Handle Version Command
+ *
+ * @param array $chatCallback
+ * @param Player $player
+ */
+ public function command_Version(array $chatCallback, Player $player) {
+ $message = 'This server is using ManiaControl v' . ManiaControl::VERSION . '!';
+ $this->chat->sendInformation($message, $player->login);
+ }
+
+ /**
+ * Handle Restart AdminCommand
+ *
+ * @param array $chatCallback
+ * @param Player $player
+ */
+ public function command_Restart(array $chatCallback, Player $player) {
+ if (!$this->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_RESTART)) {
+ $this->authenticationManager->sendNotAllowed($player);
+ return;
+ }
+ $this->restart("ManiaControl Restart requested by '{$player->login}'!");
+ }
+
+ /**
+ * Restart ManiaControl
+ *
* @param string $message
*/
- public function log($message, $stripCodes = false) {
- if ($stripCodes) {
- $message = Formatter::stripCodes($message);
+ public function restart($message = null) {
+ // Shutdown callback
+ $this->callbackManager->triggerCallback(CallbackManager::CB_ONSHUTDOWN);
+
+ // Announce restart
+ $this->chat->sendInformation('Restarting ManiaControl...');
+ if ($message) {
+ $this->log($message);
}
- logMessage($message);
+
+ // Hide widgets
+ $this->client->sendHideManialinkPage();
+
+ $this->log('Restarting ManiaControl!');
+
+ // Execute start script in background
+ // TODO: restart the .php script itself ($_SERVER['scriptname'] or something + $argv)
+ if ($this->getOS(self::OS_UNIX)) {
+ $command = 'sh ' . escapeshellarg(ManiaControlDir . '/ManiaControl.sh') . ' > /dev/null &';
+ exec($command);
+ } else {
+ $command = escapeshellarg(ManiaControlDir . "\ManiaControl.bat");
+ system($command); // TODO, windows stucks here as long controller is running
+ }
+ exit();
}
/**
* Get the Operating System on which ManiaControl is running
- *
+ *
* @param string $compareOS
* @return string
*/
@@ -197,35 +254,10 @@ class ManiaControl implements CommandListener, TimerListener {
return self::OS_UNIX;
}
- /**
- * Handle Version Command
- *
- * @param array $chatCallback
- * @param Player $player
- */
- public function command_Version(array $chatCallback, Player $player) {
- $message = 'This server is using ManiaControl v' . ManiaControl::VERSION . '!';
- $this->chat->sendInformation($message, $player->login);
- }
-
- /**
- * Handle Restart AdminCommand
- *
- * @param array $chatCallback
- * @param Player $player
- */
- public function command_Restart(array $chatCallback, Player $player) {
- if (!$this->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_RESTART)) {
- $this->authenticationManager->sendNotAllowed($player);
- return;
- }
- $this->restart("ManiaControl Restart requested by '{$player->login}'!");
- }
-
/**
* Handle //shutdown command
- *
- * @param array $chat
+ *
+ * @param array $chat
* @param Player $player
*/
public function command_Shutdown(array $chat, Player $player) {
@@ -238,14 +270,14 @@ class ManiaControl implements CommandListener, TimerListener {
/**
* Quit ManiaControl and log the given message
- *
+ *
* @param string $message
*/
public function quit($message = null) {
if ($message) {
$this->log($message);
}
-
+
exit();
}
@@ -255,144 +287,35 @@ class ManiaControl implements CommandListener, TimerListener {
public function handleShutdown() {
// OnShutdown callback
$this->callbackManager->triggerCallback(CallbackManager::CB_ONSHUTDOWN);
-
+
// Announce quit
$this->chat->sendInformation('ManiaControl shutting down.');
-
+
if ($this->client) {
try {
// Hide manialinks
$this->client->sendHideManialinkPage();
// Close the client connection
$this->client->delete($this->server->ip, $this->server->port);
- }
- catch (TransportException $e) {
+ } catch (TransportException $e) {
$this->errorHandler->triggerDebugNotice($e->getMessage() . " File: " . $e->getFile() . " Line: " . $e->getLine());
}
}
-
+
// Check and Trigger Fatal Errors
$error = error_get_last();
if ($error && ($error['type'] & E_FATAL)) {
$this->errorHandler->errorHandler($error['type'], $error['message'], $error['file'], $error['line']);
}
-
+
// Disable Garbage Collector
$this->collectGarbage();
gc_disable();
-
+
$this->log('Quitting ManiaControl!');
exit();
}
- /**
- * Restart ManiaControl
- *
- * @param string $message
- */
- public function restart($message = null) {
- // Shutdown callback
- $this->callbackManager->triggerCallback(CallbackManager::CB_ONSHUTDOWN);
-
- // Announce restart
- $this->chat->sendInformation('Restarting ManiaControl...');
- if ($message) {
- $this->log($message);
- }
-
- // Hide widgets
- $this->client->sendHideManialinkPage();
-
- $this->log('Restarting ManiaControl!');
-
- // Execute start script in background
- // TODO: restart the .php script itself ($_SERVER['scriptname'] or something + $argv)
- if ($this->getOS(self::OS_UNIX)) {
- $command = 'sh ' . escapeshellarg(ManiaControlDir . '/ManiaControl.sh') . ' > /dev/null &';
- exec($command);
- }
- else {
- $command = escapeshellarg(ManiaControlDir . "\ManiaControl.bat");
- system($command); // TODO, windows stucks here as long controller is running
- }
- exit();
- }
-
- /**
- * Run ManiaControl
- */
- public function run() {
- $this->log('Starting ManiaControl v' . self::VERSION . '!');
-
- // Register shutdown handler
- register_shutdown_function(array($this, 'handleShutdown'));
-
- // Connect to server
- $this->connect();
-
- // Check if the version of the server is high enough
- $version = $this->client->getVersion();
- if ($version->build < self::MIN_DEDIVERSION) {
- trigger_error("The Server has Version '{$version->build}', while at least '" . self::MIN_DEDIVERSION . "' is required!", E_USER_ERROR);
- }
-
- // OnInit callback
- $this->callbackManager->triggerCallback(CallbackManager::CB_ONINIT);
-
- // Load plugins
- $this->pluginManager->loadPlugins();
- $this->updateManager->pluginUpdateManager->checkPluginsUpdate();
-
- // AfterInit callback
- $this->callbackManager->triggerCallback(CallbackManager::CB_AFTERINIT);
-
- // Enable Garbage Collecting
- gc_enable();
- $this->timerManager->registerTimerListening($this, 'collectGarbage', 1000 * 60);
-
- // Announce ManiaControl
- $this->chat->sendInformation('ManiaControl v' . self::VERSION . ' successfully started!');
-
- // Loading finished
- $this->log('Loading completed!');
- $this->log('Link: maniaplanet://#join=' . $this->server->login . '@' . $this->server->titleId);
-
- // Main loop
- while (!$this->shutdownRequested) {
- $loopStart = microtime(true);
-
- // Disable script timeout
- set_time_limit(self::SCRIPT_TIMEOUT);
-
- try {
- // Manager callbacks
- $this->callbackManager->manageCallbacks();
- }
- catch (TransportException $e) {
- $this->log("Connection interrupted!");
- // TODO remove
- if ($this->errorHandler) {
- $this->errorHandler->exceptionHandler($e, false);
- }
- $this->quit($e->getMessage());
- }
-
- // Manage FileReader
- $this->fileReader->appendData();
-
- // Yield for next tick
- $loopEnd = microtime(true);
-
- $sleepTime = (int) (2000 - ($loopEnd - $loopStart) * 1000000);
- if ($sleepTime > 0) {
- usleep($sleepTime);
- }
- }
-
- // Shutdown
- $this->quit();
- }
-
/**
* Collect Garbage
*/
@@ -400,69 +323,139 @@ class ManiaControl implements CommandListener, TimerListener {
gc_collect_cycles();
}
+ /**
+ * Run ManiaControl
+ */
+ public function run() {
+ $this->log('Starting ManiaControl v' . self::VERSION . '!');
+
+ // Register shutdown handler
+ register_shutdown_function(array($this, 'handleShutdown'));
+
+ // Connect to server
+ $this->connect();
+
+ // Check if the version of the server is high enough
+ $version = $this->client->getVersion();
+ if ($version->build < self::MIN_DEDIVERSION) {
+ trigger_error("The Server has Version '{$version->build}', while at least '" . self::MIN_DEDIVERSION . "' is required!", E_USER_ERROR);
+ }
+
+ // OnInit callback
+ $this->callbackManager->triggerCallback(CallbackManager::CB_ONINIT);
+
+ // Load plugins
+ $this->pluginManager->loadPlugins();
+ $this->updateManager->pluginUpdateManager->checkPluginsUpdate();
+
+ // AfterInit callback
+ $this->callbackManager->triggerCallback(CallbackManager::CB_AFTERINIT);
+
+ // Enable Garbage Collecting
+ gc_enable();
+ $this->timerManager->registerTimerListening($this, 'collectGarbage', 1000 * 60);
+
+ // Announce ManiaControl
+ $this->chat->sendInformation('ManiaControl v' . self::VERSION . ' successfully started!');
+
+ // Loading finished
+ $this->log('Loading completed!');
+ $this->log('Link: maniaplanet://#join=' . $this->server->login . '@' . $this->server->titleId);
+
+ // Main loop
+ while (!$this->shutdownRequested) {
+ $loopStart = microtime(true);
+
+ // Disable script timeout
+ set_time_limit(self::SCRIPT_TIMEOUT);
+
+ try {
+ // Manager callbacks
+ $this->callbackManager->manageCallbacks();
+ } catch (TransportException $e) {
+ $this->log("Connection interrupted!");
+ // TODO remove
+ if ($this->errorHandler) {
+ $this->errorHandler->exceptionHandler($e, false);
+ }
+ $this->quit($e->getMessage());
+ }
+
+ // Manage FileReader
+ $this->fileReader->appendData();
+
+ // Yield for next tick
+ $loopEnd = microtime(true);
+
+ $sleepTime = (int)(2000 - ($loopEnd - $loopStart) * 1000000);
+ if ($sleepTime > 0) {
+ usleep($sleepTime);
+ }
+ }
+
+ // Shutdown
+ $this->quit();
+ }
+
/**
* Connect to ManiaPlanet server
*/
private function connect() {
// Load remote client
$this->server->loadConfig();
-
+
$this->log("Connecting to server at {$this->server->config->host}:{$this->server->config->port}...");
-
+
try {
$this->client = Connection::factory($this->server->config->host, $this->server->config->port, self::CONNECT_TIMEOUT, $this->server->config->login, $this->server->config->pass);
- }
- catch (Exception $e) {
+ } catch (Exception $e) {
trigger_error("Couldn't authenticate on server with user '{$this->server->config->login}'! " . $e->getMessage(), E_USER_ERROR);
}
-
+
// Enable callback system
$this->client->enableCallbacks(true);
-
+
// Wait for server to be ready
try {
if (!$this->server->waitForStatus(4)) {
trigger_error("Server couldn't get ready!", E_USER_ERROR);
}
- }
- catch (Exception $e) {
+ } catch (Exception $e) {
// TODO remove
if ($this->errorHandler) {
$this->errorHandler->triggerDebugNotice("Fatal Exception: " . $e->getMessage() . " Trace: " . $e->getTraceAsString());
}
$this->quit($e->getMessage());
}
-
+
// Connect finished
$this->log("Server Connection successfully established!");
-
+
// Hide old widgets
$this->client->sendHideManialinkPage();
-
+
// Enable script callbacks if needed
if ($this->server->getGameMode() != 0) {
return;
}
-
+
try {
$scriptSettings = $this->client->getModeScriptSettings();
- }
- catch (NotInScriptModeException $e) {
+ } catch (NotInScriptModeException $e) {
return;
}
-
+
if (!array_key_exists('S_UseScriptCallbacks', $scriptSettings)) {
return;
}
-
+
$scriptSettings['S_UseScriptCallbacks'] = true;
try {
$this->client->setModeScriptSettings($scriptSettings);
- }
- catch (Exception $e) {
+ } catch (Exception $e) {
// TODO temp added 19.04.2014
$this->errorHandler->triggerDebugNotice("Exception line 437 ManiaControl.php " . $e->getMessage());
-
+
trigger_error("Couldn't set mode script settings to enable script callbacks. " . $e->getMessage());
return;
}
diff --git a/application/core/ManiaExchange/MXMapInfo.php b/application/core/ManiaExchange/MXMapInfo.php
index b08ba4f8..81a23f2f 100644
--- a/application/core/ManiaExchange/MXMapInfo.php
+++ b/application/core/ManiaExchange/MXMapInfo.php
@@ -7,10 +7,10 @@ use ManiaControl\Formatter;
/**
* Mania Exchange Map Info Object
*
- * @author Xymph
- * @updated kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author Xymph
+ * @updated kremsy
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class MXMapInfo {
public $prefix, $id, $uid, $name, $userid, $author, $uploaded, $updated, $type, $maptype;
@@ -19,6 +19,7 @@ class MXMapInfo {
public $replaytyp, $replayid, $replaycnt, $acomment, $awards, $comments;
public $pageurl, $replayurl, $imageurl, $thumburl, $downloadurl, $dir;
public $ratingVoteCount, $ratingVoteAverage;
+
/**
* Returns map object with all available data from MX map data
*
@@ -76,7 +77,7 @@ class MXMapInfo {
$this->comments = $mx->CommentCount;
$this->ratingVoteCount = isset($mx->RatingVoteCount) ? $mx->RatingVoteCount : 0;
- $this->ratingVoteAverage = isset($mx->RatingVoteAverage) ? $mx->RatingVoteAverage : 0;
+ $this->ratingVoteAverage = isset($mx->RatingVoteAverage) ? $mx->RatingVoteAverage : 0;
if ($this->trkvalue == 0 && $this->lbrating > 0) {
$this->trkvalue = $this->lbrating;
diff --git a/application/core/ManiaExchange/ManiaExchangeList.php b/application/core/ManiaExchange/ManiaExchangeList.php
index 771211b8..98934715 100644
--- a/application/core/ManiaExchange/ManiaExchangeList.php
+++ b/application/core/ManiaExchange/ManiaExchangeList.php
@@ -29,9 +29,9 @@ use ManiaControl\Players\Player;
/**
* ManiaExchange List Widget Class
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener {
/*
@@ -66,6 +66,33 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_SEARCH_AUTHOR, $this, 'showList');
}
+ /**
+ * Handle ManialinkPageAnswer Callback
+ *
+ * @param array $callback
+ */
+ public function handleManialinkPageAnswer(array $callback) {
+ $actionId = $callback[1][2];
+ $actionArray = explode('.', $actionId);
+ if (count($actionArray) <= 2) {
+ return;
+ }
+
+ $action = $actionArray[0] . '.' . $actionArray[1];
+ $login = $callback[1][1];
+ $player = $this->maniaControl->playerManager->getPlayer($login);
+ $mapId = (int)$actionArray[2];
+
+ switch ($action) {
+ case self::ACTION_GET_MAPS_FROM_AUTHOR:
+ $callback[1][2] = 'auth:' . $actionArray[2];
+ $this->showList($callback, $player);
+ break;
+ case self::ACTION_ADD_MAP:
+ $this->maniaControl->mapManager->addMapFromMx($mapId, $player->login);
+ break;
+ }
+ }
/**
* Shows the List
@@ -80,7 +107,7 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
$author = '';
$environment = '';
if (count($params) >= 1) {
- foreach($params as $param) {
+ foreach ($params as $param) {
if ($param == '/xlist' || $param == MapCommands::ACTION_OPEN_XLIST) {
continue;
}
@@ -130,8 +157,8 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
//Create ManiaLink
$maniaLink = new ManiaLink(ManialinkManager::MAIN_MLID);
$script = $maniaLink->getScript();
- $paging = new Paging();
- $script->addFeature($paging);
+ $paging = new Paging();
+ $script->addFeature($paging);
// Main frame
$frame = $this->maniaControl->manialinkManager->styleManager->getDefaultListFrame($script, $paging);
@@ -151,7 +178,7 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
$i = 0;
$y = $height / 2 - 16;
$pageFrames = array();
- foreach($maps as $map) { //TODO order possibilities
+ foreach ($maps as $map) { //TODO order possibilities
/** @var MxMapInfo $map */
if (!isset($pageFrame)) {
$pageFrame = new Frame();
@@ -162,7 +189,7 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
array_push($pageFrames, $pageFrame);
$y = $height / 2 - 16;
- $paging->addPage($pageFrame);
+ $paging->addPage($pageFrame);
}
// Map Frame
@@ -179,7 +206,7 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
/** @var MxMapInfo $map */
$time = Formatter::time_elapsed_string(strtotime($map->updated));
- $array = array('$s'. $map->id => $x + 3.5, '$s'. $map->name => $x + 12.5, '$s'. $map->author => $x + 59, '$s'. str_replace("Arena", "", $map->maptype) => $x + 103, '$s'. $map->mood => $x + 118, '$s'. $time => $x + 130);
+ $array = array('$s' . $map->id => $x + 3.5, '$s' . $map->name => $x + 12.5, '$s' . $map->author => $x + 59, '$s' . str_replace("Arena", "", $map->maptype) => $x + 103, '$s' . $map->mood => $x + 118, '$s' . $time => $x + 130);
$labels = $this->maniaControl->manialinkManager->labelLine($mapFrame, $array);
/** @var Label_Text $authorLabel */
$authorLabel = $labels[2];
@@ -195,8 +222,8 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
$mxQuad->setX($x + 56);
$mxQuad->setUrl($map->pageurl);
$mxQuad->setZ(0.01);
- $description = 'View $<' . $map->name . '$> on Mania-Exchange';
- $mxQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'View $<' . $map->name . '$> on Mania-Exchange';
+ $mxQuad->addTooltipLabelFeature($descriptionLabel, $description);
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_ADD_MAP)) {
$addQuad = new Quad_Icons64x64_1();
@@ -208,8 +235,8 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
$addQuad->setAction(self::ACTION_ADD_MAP . '.' . $map->id);
$addQuad->setZ(0.01);
- $description = 'Add-Map: $<' . $map->name . '$>';
- $addQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'Add-Map: $<' . $map->name . '$>';
+ $addQuad->addTooltipLabelFeature($descriptionLabel, $description);
}
//Award Quad
@@ -230,7 +257,7 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
}
//Map Karma
- $karma = $map->ratingVoteAverage / 100;
+ $karma = $map->ratingVoteAverage / 100;
$voteCount = $map->ratingVoteCount;
if (is_numeric($karma) && $voteCount > 0) {
$karmaGauge = new Gauge();
@@ -312,35 +339,6 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'ManiaExchangeList');
}
- /**
- * Handle ManialinkPageAnswer Callback
- *
- * @param array $callback
- */
- public function handleManialinkPageAnswer(array $callback) {
- $actionId = $callback[1][2];
- $actionArray = explode('.', $actionId);
- if (count($actionArray) <= 2) {
- return;
- }
-
- $action = $actionArray[0] . '.' . $actionArray[1];
- $login = $callback[1][1];
- $player = $this->maniaControl->playerManager->getPlayer($login);
- $mapId = (int)$actionArray[2];
-
- switch($action) {
- case self::ACTION_GET_MAPS_FROM_AUTHOR:
- $callback[1][2] = 'auth:' . $actionArray[2];
- $this->showList($callback, $player);
- break;
- case self::ACTION_ADD_MAP:
- $this->maniaControl->mapManager->addMapFromMx($mapId, $player->login);
- break;
- }
- }
-
-
/**
* Unset the player if he opened another Main Widget
*
@@ -364,5 +362,4 @@ class ManiaExchangeList implements CallbackListener, ManialinkPageAnswerListener
unset($this->mapListShown[$player->login]);
}
-
-}
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/application/core/ManiaExchange/ManiaExchangeManager.php b/application/core/ManiaExchange/ManiaExchangeManager.php
index ca850b3b..e7e4f228 100644
--- a/application/core/ManiaExchange/ManiaExchangeManager.php
+++ b/application/core/ManiaExchange/ManiaExchangeManager.php
@@ -10,8 +10,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
/**
* Mania Exchange Info Searcher Class
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ManiaExchangeManager {
@@ -57,49 +57,6 @@ class ManiaExchangeManager {
$this->maniaControl = $maniaControl;
}
-
- /**
- * Store Map Info from MX and store the mxid in the database and the mx info in the map object
- *
- * @param $mxMapInfos
- */
- public function updateMapObjectsWithManiaExchangeIds($mxMapInfos) {
- $mysqli = $this->maniaControl->database->mysqli;
- // Save map data
- $saveMapQuery = "UPDATE `" . MapManager::TABLE_MAPS . "`
- SET `mxid` = ?
- WHERE `uid` = ?;";
- $saveMapStatement = $mysqli->prepare($saveMapQuery);
- if ($mysqli->error) {
- trigger_error($mysqli->error);
- return;
- }
- $saveMapStatement->bind_param('is', $mapMxId, $mapUId);
- foreach($mxMapInfos as $mxMapInfo) {
- /** @var MXMapInfo $mxMapInfo */
- $mapMxId = $mxMapInfo->id;
- $mapUId = $mxMapInfo->uid;
- $saveMapStatement->execute();
- if ($saveMapStatement->error) {
- trigger_error($saveMapStatement->error);
- }
-
- //Take the uid out of the vector
- if (isset($this->mxIdUidVector[$mxMapInfo->id])) {
- $uid = $this->mxIdUidVector[$mxMapInfo->id];
- } else {
- $uid = $mxMapInfo->uid;
- }
- $map = $this->maniaControl->mapManager->getMapByUid($uid);
- if ($map) {
- // TODO: how does it come that $map can be empty here? we got an error report for that
- /** @var Map $map */
- $map->mx = $mxMapInfo;
- }
- }
- $saveMapStatement->close();
- }
-
/**
* Unset Map by Mx Id
*
@@ -138,7 +95,7 @@ class ManiaExchangeManager {
}
$id = 0;
- foreach($maps as $map) {
+ foreach ($maps as $map) {
/** @var Map $map */
$fetchMapStatement->bind_param('i', $map->index);
$fetchMapStatement->execute();
@@ -182,37 +139,6 @@ class ManiaExchangeManager {
$fetchMapStatement->close();
}
- /**
- * Get Map Info Asynchronously
- *
- * @param $id
- * @param $function
- * @return bool
- */
- public function getMapInfo($id, $function) {
- // Get Title Prefix
- $titlePrefix = $this->maniaControl->mapManager->getCurrentMap()->getGame();
-
- // compile search URL
- $url = 'http://api.mania-exchange.com/' . $titlePrefix . '/maps/?ids=' . $id;
-
- return $this->maniaControl->fileReader->loadFile($url, function ($mapInfo, $error) use (&$function, $titlePrefix, $url) {
- $mxMapInfo = null;
- if ($error) {
- trigger_error($error);
- } else {
- $mxMapList = json_decode($mapInfo);
- if ($mxMapList === null) {
- trigger_error('Cannot decode searched JSON data from ' . $url);
- } else {
- $mxMapInfo = new MXMapInfo($titlePrefix, $mxMapList[0]);
- }
- }
- call_user_func($function, $mxMapInfo);
- }, "application/json");
- }
-
-
/**
* Get the Whole MapList from MX by Mixed Uid and Id String fetch
*
@@ -244,7 +170,7 @@ class ManiaExchangeManager {
}
$maps = array();
- foreach($mxMapList as $map) {
+ foreach ($mxMapList as $map) {
if ($map) {
$mxMapObject = new MXMapInfo($titlePrefix, $map);
if ($mxMapObject) {
@@ -260,6 +186,78 @@ class ManiaExchangeManager {
return $success;
}
+ /**
+ * Store Map Info from MX and store the mxid in the database and the mx info in the map object
+ *
+ * @param $mxMapInfos
+ */
+ public function updateMapObjectsWithManiaExchangeIds($mxMapInfos) {
+ $mysqli = $this->maniaControl->database->mysqli;
+ // Save map data
+ $saveMapQuery = "UPDATE `" . MapManager::TABLE_MAPS . "`
+ SET `mxid` = ?
+ WHERE `uid` = ?;";
+ $saveMapStatement = $mysqli->prepare($saveMapQuery);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error);
+ return;
+ }
+ $saveMapStatement->bind_param('is', $mapMxId, $mapUId);
+ foreach ($mxMapInfos as $mxMapInfo) {
+ /** @var MXMapInfo $mxMapInfo */
+ $mapMxId = $mxMapInfo->id;
+ $mapUId = $mxMapInfo->uid;
+ $saveMapStatement->execute();
+ if ($saveMapStatement->error) {
+ trigger_error($saveMapStatement->error);
+ }
+
+ //Take the uid out of the vector
+ if (isset($this->mxIdUidVector[$mxMapInfo->id])) {
+ $uid = $this->mxIdUidVector[$mxMapInfo->id];
+ } else {
+ $uid = $mxMapInfo->uid;
+ }
+ $map = $this->maniaControl->mapManager->getMapByUid($uid);
+ if ($map) {
+ // TODO: how does it come that $map can be empty here? we got an error report for that
+ /** @var Map $map */
+ $map->mx = $mxMapInfo;
+ }
+ }
+ $saveMapStatement->close();
+ }
+
+ /**
+ * Get Map Info Asynchronously
+ *
+ * @param $id
+ * @param $function
+ * @return bool
+ */
+ public function getMapInfo($id, $function) {
+ // Get Title Prefix
+ $titlePrefix = $this->maniaControl->mapManager->getCurrentMap()->getGame();
+
+ // compile search URL
+ $url = 'http://api.mania-exchange.com/' . $titlePrefix . '/maps/?ids=' . $id;
+
+ return $this->maniaControl->fileReader->loadFile($url, function ($mapInfo, $error) use (&$function, $titlePrefix, $url) {
+ $mxMapInfo = null;
+ if ($error) {
+ trigger_error($error);
+ } else {
+ $mxMapList = json_decode($mapInfo);
+ if ($mxMapList === null) {
+ trigger_error('Cannot decode searched JSON data from ' . $url);
+ } else {
+ $mxMapInfo = new MXMapInfo($titlePrefix, $mxMapList[0]);
+ }
+ }
+ call_user_func($function, $mxMapInfo);
+ }, "application/json");
+ }
+
/**
* Fetch a MapList Asynchronously
*
@@ -302,13 +300,13 @@ class ManiaExchangeManager {
if ($titlePrefix != "tm") {
$url .= '&minexebuild=' . self::MIN_EXE_BUILD;
}
-
+
// Get MapTypes
try {
$scriptInfos = $this->maniaControl->client->getModeScriptInfo();
$mapTypes = $scriptInfos->compatibleMapTypes;
$url .= '&mtype=' . $mapTypes;
- } catch(NotInScriptModeException $e) {
+ } catch (NotInScriptModeException $e) {
}
$success = $this->maniaControl->fileReader->loadFile($url, function ($mapInfo, $error) use (&$function, $titlePrefix) {
@@ -332,7 +330,7 @@ class ManiaExchangeManager {
}
$maps = array();
- foreach($mxMapList as $map) {
+ foreach ($mxMapList as $map) {
if (!empty($map)) {
array_push($maps, new MXMapInfo($titlePrefix, $map));
}
@@ -352,7 +350,7 @@ class ManiaExchangeManager {
* @return int
*/
private function getEnvironment($env) {
- switch($env) {
+ switch ($env) {
case 'TMCanyon':
return 1;
case 'TMStadium':
diff --git a/application/core/Manialinks/CustomUIManager.php b/application/core/Manialinks/CustomUIManager.php
index 7cc53476..58b1ab49 100644
--- a/application/core/Manialinks/CustomUIManager.php
+++ b/application/core/Manialinks/CustomUIManager.php
@@ -12,9 +12,9 @@ use ManiaControl\Players\PlayerManager;
/**
* Class managing the Custom UI Settings
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class CustomUIManager implements CallbackListener, TimerListener {
/*
@@ -51,19 +51,6 @@ class CustomUIManager implements CallbackListener, TimerListener {
$this->customUI = new CustomUI();
}
- /**
- * Update the CustomUI Manialink
- *
- * @param Player $player
- */
- private function updateManialink(Player $player = null) {
- if ($player) {
- $this->maniaControl->manialinkManager->sendManialink($this->customUI, $player->login);
- return;
- }
- $this->maniaControl->manialinkManager->sendManialink($this->customUI);
- }
-
/**
* Handle 1Second
*
@@ -77,6 +64,19 @@ class CustomUIManager implements CallbackListener, TimerListener {
$this->updateManialink();
}
+ /**
+ * Update the CustomUI Manialink
+ *
+ * @param Player $player
+ */
+ private function updateManialink(Player $player = null) {
+ if ($player) {
+ $this->maniaControl->manialinkManager->sendManialink($this->customUI, $player->login);
+ return;
+ }
+ $this->maniaControl->manialinkManager->sendManialink($this->customUI);
+ }
+
/**
* Handle PlayerJoined Callback
*
@@ -87,9 +87,9 @@ class CustomUIManager implements CallbackListener, TimerListener {
//send it again after 500ms
$self = $this;
- $this->maniaControl->timerManager->registerOneTimeListening($this, function($time) use (&$self, &$player){
+ $this->maniaControl->timerManager->registerOneTimeListening($this, function ($time) use (&$self, &$player) {
$self->updateManialink($player);
- },500);
+ }, 500);
}
/**
diff --git a/application/core/Manialinks/IconManager.php b/application/core/Manialinks/IconManager.php
index 0dfc4d79..c7f0198b 100644
--- a/application/core/Manialinks/IconManager.php
+++ b/application/core/Manialinks/IconManager.php
@@ -8,15 +8,15 @@ use FML\ManiaLink;
use ManiaControl\Callbacks\CallbackListener;
use ManiaControl\Callbacks\CallbackManager;
use ManiaControl\ManiaControl;
-use ManiaControl\Players\PlayerManager;
use ManiaControl\Players\Player;
+use ManiaControl\Players\PlayerManager;
/**
* Class managing Icons
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class IconManager implements CallbackListener {
/*
@@ -95,15 +95,6 @@ class IconManager implements CallbackListener {
$this->preloadIcons();
}
- /**
- * Handle PlayerConnect Callback
- *
- * @param Player $player
- */
- public function handlePlayerConnect(Player $player) {
- $this->preloadIcons($player);
- }
-
/**
* Preload Icons
*
@@ -115,7 +106,7 @@ class IconManager implements CallbackListener {
$maniaLink->add($frame);
$frame->setPosition(500, 500);
- foreach($this->icons as $iconUrl) {
+ foreach ($this->icons as $iconUrl) {
$iconQuad = new Quad();
$iconQuad->setImage($iconUrl);
$iconQuad->setSize(1, 1);
@@ -125,4 +116,13 @@ class IconManager implements CallbackListener {
// Send manialink
$this->maniaControl->manialinkManager->sendManialink($maniaLink, $player);
}
+
+ /**
+ * Handle PlayerConnect Callback
+ *
+ * @param Player $player
+ */
+ public function handlePlayerConnect(Player $player) {
+ $this->preloadIcons($player);
+ }
}
\ No newline at end of file
diff --git a/application/core/Manialinks/ManialinkManager.php b/application/core/Manialinks/ManialinkManager.php
index b0e41bc7..e62191e4 100644
--- a/application/core/Manialinks/ManialinkManager.php
+++ b/application/core/Manialinks/ManialinkManager.php
@@ -15,27 +15,27 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
/**
* Manialink Manager Class
- *
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener {
/*
* Constants
*/
- const MAIN_MLID = 'Main.ManiaLinkId';
- const ACTION_CLOSEWIDGET = 'ManiaLinkManager.CloseWidget';
+ const MAIN_MLID = 'Main.ManiaLinkId';
+ const ACTION_CLOSEWIDGET = 'ManiaLinkManager.CloseWidget';
const CB_MAIN_WINDOW_CLOSED = 'ManialinkManagerCallback.MainWindowClosed';
const CB_MAIN_WINDOW_OPENED = 'ManialinkManagerCallback.MainWindowOpened';
-
+
/*
* Public Properties
*/
public $styleManager = null;
public $customUIManager = null;
public $iconManager = null;
-
+
/*
* Private Properties
*/
@@ -45,15 +45,15 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
/**
* Create a new manialink manager
- *
+ *
* @param ManiaControl $maniaControl
*/
public function __construct(ManiaControl $maniaControl) {
- $this->maniaControl = $maniaControl;
- $this->styleManager = new StyleManager($maniaControl);
+ $this->maniaControl = $maniaControl;
+ $this->styleManager = new StyleManager($maniaControl);
$this->customUIManager = new CustomUIManager($maniaControl);
- $this->iconManager = new IconManager($maniaControl);
-
+ $this->iconManager = new IconManager($maniaControl);
+
// Register for callbacks
$this->registerManialinkPageAnswerListener(self::ACTION_CLOSEWIDGET, $this, 'closeWidgetCallback');
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_PLAYERMANIALINKPAGEANSWER, $this, 'handleManialinkPageAnswer');
@@ -61,10 +61,10 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
/**
* Register a new manialink page answer listener
- *
- * @param string $actionId
+ *
+ * @param string $actionId
* @param ManialinkPageAnswerListener $listener
- * @param string $method
+ * @param string $method
* @return bool
*/
public function registerManialinkPageAnswerListener($actionId, ManialinkPageAnswerListener $listener, $method) {
@@ -72,24 +72,24 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
trigger_error("Given listener for actionId '{$actionId}' doesn't have callback method '{$method}'!");
return false;
}
-
+
if (!array_key_exists($actionId, $this->pageAnswerListeners) || !is_array($this->pageAnswerListeners[$actionId])) {
// Init listeners array
$this->pageAnswerListeners[$actionId] = array();
}
-
+
// Register page answer listener
array_push($this->pageAnswerListeners[$actionId], array($listener, $method));
-
+
return true;
}
/**
* Register a new manialink page answer reg ex listener
- *
- * @param string $actionIdRegex
+ *
+ * @param string $actionIdRegex
* @param ManialinkPageAnswerListener $listener
- * @param string $method
+ * @param string $method
* @return bool
*/
public function registerManialinkPageAnswerRegexListener($actionIdRegex, ManialinkPageAnswerListener $listener, $method) {
@@ -97,26 +97,26 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
trigger_error("Given listener for actionIdRegex '{$actionIdRegex}' doesn't have callback method '{$method}'!");
return false;
}
-
+
if (!array_key_exists($actionIdRegex, $this->pageAnswerRegexListener) || !is_array($this->pageAnswerRegexListener[$actionIdRegex])) {
// Init regex listeners array
$this->pageAnswerRegexListener[$actionIdRegex] = array();
}
-
+
// Register page answer reg exlistener
array_push($this->pageAnswerRegexListener[$actionIdRegex], array($listener, $method));
-
+
return true;
}
/**
* Remove a Manialink Page Answer Listener
- *
+ *
* @param ManialinkPageAnswerListener $listener
* @return bool
*/
public function unregisterManialinkPageAnswerListener(ManialinkPageAnswerListener $listener) {
- $removed = false;
+ $removed = false;
$allListeners = array_merge($this->pageAnswerListeners, $this->pageAnswerRegexListener);
foreach ($allListeners as &$listeners) {
foreach ($listeners as $key => &$listenerCallback) {
@@ -132,21 +132,21 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
/**
* Handle ManialinkPageAnswer callback
- *
+ *
* @param array $callback
*/
public function handleManialinkPageAnswer(array $callback) {
$actionId = $callback[1][2];
- $login = $callback[1][1];
- $player = $this->maniaControl->playerManager->getPlayer($login);
-
+ $login = $callback[1][1];
+ $player = $this->maniaControl->playerManager->getPlayer($login);
+
if (array_key_exists($actionId, $this->pageAnswerListeners) && is_array($this->pageAnswerListeners[$actionId])) {
// Inform page answer listeners
foreach ($this->pageAnswerListeners[$actionId] as $listener) {
call_user_func($listener, $callback, $player);
}
}
-
+
// Check regex listeners
foreach ($this->pageAnswerRegexListener as $actionIdRegex => $pageAnswerRegexListeners) {
if (preg_match($actionIdRegex, $actionId)) {
@@ -160,7 +160,7 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
/**
* Hide the Manialink with the given Id
- *
+ *
* @param mixed $manialinkId
* @param mixed $logins
*/
@@ -174,23 +174,23 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
$this->sendManialink($emptyManialink, $logins);
}
}
-
+
/**
* Send the given manialink to players
- *
+ *
* @param string $manialinkText
- * @param mixed $logins
- * @param int $timeout
- * @param bool $hideOnClick
+ * @param mixed $logins
+ * @param int $timeout
+ * @param bool $hideOnClick
* @return bool
*/
public function sendManialink($manialinkText, $logins = null, $timeout = 0, $hideOnClick = false) {
- $manialinkText = (string) $manialinkText;
-
+ $manialinkText = (string)$manialinkText;
+
if (!$manialinkText) {
return true;
}
-
+
try {
if (!$logins) {
return $this->maniaControl->client->sendDisplayManialinkPage(null, $manialinkText, $timeout, $hideOnClick);
@@ -211,60 +211,27 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
$success = false;
}
}
-
+
return $success;
}
- }
- catch (LoginUnknownException $e) {
+ } catch (LoginUnknownException $e) {
return false;
}
-
+
return true;
}
- /**
- * Enable the alt menu for the player
- *
- * @param Player $player
- * @return bool
- */
- public function enableAltMenu(Player $player) {
- try {
- $success = $this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_EnableAltMenu', $player->login);
- }
- catch (NotInScriptModeException $e) {
- return false;
- }
- return $success;
- }
-
- /**
- * Disable the alt menu for the player
- *
- * @param Player $player
- * @return bool
- */
- public function disableAltMenu(Player $player) {
- try {
- $success = $this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_DisableAltMenu', $player->login);
- }
- catch (NotInScriptModeException $e) {
- return false;
- }
- return $success;
- }
-
/**
* Displays a ManiaLink Widget to a certain Player (Should only be used on Main Widgets)
- *
- * @param mixed $maniaLink
+ *
+ * @param mixed $maniaLink
* @param Player $player
* @param string $widgetName
*/
public function displayWidget($maniaLink, Player $player, $widgetName = '') {
// render and display xml
$this->sendManialink($maniaLink, $player->login);
-
+
if ($widgetName != '') {
// TODO make check by manialinkId, getter is needed to avoid uses on non main widgets
$this->disableAltMenu($player);
@@ -273,10 +240,25 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
}
}
+ /**
+ * Disable the alt menu for the player
+ *
+ * @param Player $player
+ * @return bool
+ */
+ public function disableAltMenu(Player $player) {
+ try {
+ $success = $this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_DisableAltMenu', $player->login);
+ } catch (NotInScriptModeException $e) {
+ return false;
+ }
+ return $success;
+ }
+
/**
* Closes a widget via the callback
- *
- * @param array $callback
+ *
+ * @param array $callback
* @param Player $player
*/
public function closeWidgetCallback(array $callback, Player $player) {
@@ -285,28 +267,42 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
/**
* Closes a Manialink Widget
- *
+ *
* @param Player $player
- * @param bool $widgetId
+ * @param bool $widgetId
*/
public function closeWidget(Player $player, $widgetId = false) {
if (!$widgetId) {
$emptyManialink = new ManiaLink(self::MAIN_MLID);
$this->sendManialink($emptyManialink, $player->login);
$this->enableAltMenu($player);
-
+
// Trigger callback
$this->maniaControl->callbackManager->triggerCallback(self::CB_MAIN_WINDOW_CLOSED, $player);
- }
- else {
+ } else {
$emptyManialink = new ManiaLink($widgetId);
$this->sendManialink($emptyManialink, $player->login);
}
}
+ /**
+ * Enable the alt menu for the player
+ *
+ * @param Player $player
+ * @return bool
+ */
+ public function enableAltMenu(Player $player) {
+ try {
+ $success = $this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_EnableAltMenu', $player->login);
+ } catch (NotInScriptModeException $e) {
+ return false;
+ }
+ return $success;
+ }
+
/**
* Adds a line of labels
- *
+ *
* @param Frame $frame
* @param array $labelStrings
* @param array $properties
@@ -314,12 +310,12 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
*/
public function labelLine(Frame $frame, array $labelStrings, array $properties = array()) {
// define standard properties
- $hAlign = (isset($properties['hAlign']) ? $properties['hAlign'] : Control::LEFT);
- $style = (isset($properties['style']) ? $properties['style'] : Label_Text::STYLE_TextCardSmall);
- $textSize = (isset($properties['textSize']) ? $properties['textSize'] : 1.5);
+ $hAlign = (isset($properties['hAlign']) ? $properties['hAlign'] : Control::LEFT);
+ $style = (isset($properties['style']) ? $properties['style'] : Label_Text::STYLE_TextCardSmall);
+ $textSize = (isset($properties['textSize']) ? $properties['textSize'] : 1.5);
$textColor = (isset($properties['textColor']) ? $properties['textColor'] : 'FFF');
- $profile = (isset($properties['profile']) ? $properties['profile'] : false);
-
+ $profile = (isset($properties['profile']) ? $properties['profile'] : false);
+
$labels = array();
foreach ($labelStrings as $text => $x) {
$label = new Label_Text();
@@ -330,14 +326,14 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
$label->setTextSize($textSize);
$label->setText($text);
$label->setTextColor($textColor);
-
+
if ($profile) {
$label->addPlayerProfileFeature($profile);
}
-
+
$labels[] = $label; // add Label to the labels array
}
-
+
return $labels;
}
}
diff --git a/application/core/Manialinks/ManialinkPageAnswerListener.php b/application/core/Manialinks/ManialinkPageAnswerListener.php
index 49033942..9a0b9f83 100644
--- a/application/core/Manialinks/ManialinkPageAnswerListener.php
+++ b/application/core/Manialinks/ManialinkPageAnswerListener.php
@@ -5,9 +5,9 @@ namespace ManiaControl\Manialinks;
/**
* Interface for Manialink Page Answer Listeners
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface ManialinkPageAnswerListener {
}
diff --git a/application/core/Manialinks/StyleManager.php b/application/core/Manialinks/StyleManager.php
index bfcf69b0..6b5bb21e 100644
--- a/application/core/Manialinks/StyleManager.php
+++ b/application/core/Manialinks/StyleManager.php
@@ -16,9 +16,9 @@ use ManiaControl\ManiaControl;
/**
* Class managing default Control Styles
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class StyleManager {
/*
@@ -97,43 +97,6 @@ class StyleManager {
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_QUAD_DEFAULT_SUBSTYLE);
}
- /**
- * Get the default main window style
- *
- * @return string
- */
- public function getDefaultMainWindowStyle() {
- return $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAIN_WIDGET_DEFAULT_STYLE);
- }
-
- /**
- * Get the default main window substyle
- *
- * @return string
- */
- public function getDefaultMainWindowSubStyle() {
- return $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAIN_WIDGET_DEFAULT_SUBSTYLE);
- }
-
- /**
- * Get the default list widget width
- *
- * @return string
- */
- public function getListWidgetsWidth() {
- return $this->maniaControl->settingManager->getSetting($this, self::SETTING_LIST_WIDGETS_WIDTH);
- }
-
- /**
- * Get the default list widget height
- *
- * @return string
- */
- public function getListWidgetsHeight() {
- return $this->maniaControl->settingManager->getSetting($this, self::SETTING_LIST_WIDGETS_HEIGHT);
- }
-
-
/**
* Gets the Default Description Label
*
@@ -154,13 +117,31 @@ class StyleManager {
return $descriptionLabel;
}
+ /**
+ * Get the default list widget width
+ *
+ * @return string
+ */
+ public function getListWidgetsWidth() {
+ return $this->maniaControl->settingManager->getSetting($this, self::SETTING_LIST_WIDGETS_WIDTH);
+ }
+
+ /**
+ * Get the default list widget height
+ *
+ * @return string
+ */
+ public function getListWidgetsHeight() {
+ return $this->maniaControl->settingManager->getSetting($this, self::SETTING_LIST_WIDGETS_HEIGHT);
+ }
+
/**
* Builds the Default List Frame
*
* @return Frame $frame
*/
public function getDefaultListFrame() {
- $args = func_get_args();
+ $args = func_get_args();
$script = null;
$paging = null;
foreach ($args as $arg) {
@@ -171,7 +152,7 @@ class StyleManager {
$paging = $arg;
}
}
-
+
$width = $this->getListWidgetsWidth();
$height = $this->getListWidgetsHeight();
$quadStyle = $this->getDefaultMainWindowStyle();
@@ -210,10 +191,10 @@ class StyleManager {
$pagerNext->setSize($pagerSize, $pagerSize);
$pagerNext->setSubStyle(Quad_Icons64x64_1::SUBSTYLE_ArrowNext);
- if ($paging) {
- $paging->addButton($pagerNext);
- $paging->addButton($pagerPrev);
- }
+ if ($paging) {
+ $paging->addButton($pagerNext);
+ $paging->addButton($pagerPrev);
+ }
$pageCountLabel = new Label_Text();
$frame->add($pageCountLabel);
@@ -221,11 +202,29 @@ class StyleManager {
$pageCountLabel->setPosition($width * 0.40, $height * -0.44, 1);
$pageCountLabel->setStyle($pageCountLabel::STYLE_TextTitle1);
$pageCountLabel->setTextSize(1.3);
- if ($paging) {
- $paging->setLabel($pageCountLabel);
- }
+ if ($paging) {
+ $paging->setLabel($pageCountLabel);
+ }
}
return $frame;
}
+
+ /**
+ * Get the default main window style
+ *
+ * @return string
+ */
+ public function getDefaultMainWindowStyle() {
+ return $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAIN_WIDGET_DEFAULT_STYLE);
+ }
+
+ /**
+ * Get the default main window substyle
+ *
+ * @return string
+ */
+ public function getDefaultMainWindowSubStyle() {
+ return $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAIN_WIDGET_DEFAULT_SUBSTYLE);
+ }
}
diff --git a/application/core/Maps/Map.php b/application/core/Maps/Map.php
index c9651f48..6a37873c 100644
--- a/application/core/Maps/Map.php
+++ b/application/core/Maps/Map.php
@@ -6,10 +6,10 @@ use ManiaControl\Formatter;
use ManiaControl\ManiaExchange\MXMapInfo;
/**
- * Map Class
+ * Map Model Class
*
- * @author kremsy & steeffeen
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Map {
@@ -76,7 +76,7 @@ class Map {
* @return string
*/
public function getGame() {
- switch($this->environment) {
+ switch ($this->environment) {
case 'Storm':
return "sm";
case 'Canyon':
diff --git a/application/core/Maps/MapCommands.php b/application/core/Maps/MapCommands.php
index 03a23b2c..41bf4e37 100644
--- a/application/core/Maps/MapCommands.php
+++ b/application/core/Maps/MapCommands.php
@@ -5,8 +5,8 @@ namespace ManiaControl\Maps;
use FML\Controls\Quad;
use FML\Controls\Quads\Quad_Icons64x64_1;
use FML\Controls\Quads\Quad_UIConstruction_Buttons;
-use ManiaControl\Callbacks\CallbackManager;
use ManiaControl\Callbacks\CallbackListener;
+use ManiaControl\Callbacks\CallbackManager;
use ManiaControl\Commands\CommandListener;
use ManiaControl\ManiaControl;
use ManiaControl\Manialinks\IconManager;
@@ -18,8 +18,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\FaultException;
/**
* Class offering Commands to manage Maps
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class MapCommands implements CommandListener, ManialinkPageAnswerListener, CallbackListener {
@@ -194,7 +194,7 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
}
try {
$this->maniaControl->client->nextMap();
- } catch(ChangeInProgressException $e) {
+ } catch (ChangeInProgressException $e) {
}
$message = '$<' . $player->nickname . '$> skipped the current Map!';
$this->maniaControl->chat->sendSuccess($message);
@@ -218,7 +218,7 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
try {
$this->maniaControl->client->restartMap();
- } catch(ChangeInProgressException $e) {
+ } catch (ChangeInProgressException $e) {
}
}
@@ -254,25 +254,25 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
}
$chatCommand = explode(' ', $chat[1][2]);
- if(isset($chatCommand[1])) {
- if(strstr($chatCommand[1], '.txt')) {
+ if (isset($chatCommand[1])) {
+ if (strstr($chatCommand[1], '.txt')) {
$maplist = $chatCommand[1];
} else {
- $maplist = $chatCommand.'.txt';
+ $maplist = $chatCommand . '.txt';
}
} else {
$maplist = 'maplist.txt';
}
- $maplist = 'MatchSettings/'.$maplist;
+ $maplist = 'MatchSettings/' . $maplist;
try {
$this->maniaControl->client->saveMatchSettings($maplist);
- $message = 'Maplist $<$fff'.$maplist.'$> written.';
+ $message = 'Maplist $<$fff' . $maplist . '$> written.';
$this->maniaControl->chat->sendSuccess($message, $player);
$this->maniaControl->log($message, true);
- } catch(FaultException $e) {
- $this->maniaControl->chat->sendError('Cannot write maplist $<$fff'.$maplist.'$>!', $player);
+ } catch (FaultException $e) {
+ $this->maniaControl->chat->sendError('Cannot write maplist $<$fff' . $maplist . '$>!', $player);
}
}
@@ -289,33 +289,38 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
}
$chatCommand = explode(' ', $chat[1][2]);
- if(isset($chatCommand[1])) {
- if(strstr($chatCommand[1], '.txt')) {
+ if (isset($chatCommand[1])) {
+ if (strstr($chatCommand[1], '.txt')) {
$maplist = $chatCommand[1];
} else {
- $maplist = $chatCommand[1].'.txt';
+ $maplist = $chatCommand[1] . '.txt';
}
} else {
$maplist = 'maplist.txt';
}
- $maplist = 'MatchSettings/'.$maplist;
+ $maplist = 'MatchSettings/' . $maplist;
try {
$this->maniaControl->client->loadMatchSettings($maplist);
- $message = 'Maplist $<$fff'.$maplist.'$> loaded.';
+ $message = 'Maplist $<$fff' . $maplist . '$> loaded.';
$this->maniaControl->mapManager->restructureMapList();
$this->maniaControl->chat->sendSuccess($message, $player);
$this->maniaControl->log($message, true);
- } catch(FaultException $e) {
- $this->maniaControl->chat->sendError('Cannot load maplist $<$fff'.$maplist.'$>!', $player);
+ } catch (FaultException $e) {
+ $this->maniaControl->chat->sendError('Cannot load maplist $<$fff' . $maplist . '$>!', $player);
}
}
+ /**
+ * Handle ManialinkPageAnswer Callback
+ *
+ * @param array $callback
+ */
public function handleManialinkPageAnswer(array $callback) {
$actionId = $callback[1][2];
- $login = $callback[1][1];
+ $login = $callback[1][1];
$player = $this->maniaControl->playerManager->getPlayer($login);
if (strstr($actionId, self::ACTION_SHOW_AUTHOR)) {
@@ -325,6 +330,30 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
}
}
+ /**
+ * Show the Player a List of Maps from the given Author
+ *
+ * @param string $author
+ * @param Player $player
+ */
+ private function showMapListAuthor($author, Player $player) {
+ $maps = $this->maniaControl->mapManager->getMaps();
+ $mapList = array();
+ /** @var Map $map */
+ foreach ($maps as $map) {
+ if ($map->authorLogin == $author) {
+ $mapList[] = $map;
+ }
+ }
+
+ if (count($mapList) == 0) {
+ $this->maniaControl->chat->sendError('There are no maps to show!', $player->login);
+ return;
+ }
+
+ $this->maniaControl->mapManager->mapList->showMapList($player, $mapList);
+ }
+
/**
* Handle /maps command
*
@@ -334,19 +363,19 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
public function command_List(array $chatCallback, Player $player) {
$chatCommands = explode(' ', $chatCallback[1][2]);
$this->maniaControl->mapManager->mapList->playerCloseWidget($player);
- if(isset($chatCommands[1])) {
- if($chatCommands[1] == ' ' || $chatCommands[1] == 'all') {
+ if (isset($chatCommands[1])) {
+ if ($chatCommands[1] == ' ' || $chatCommands[1] == 'all') {
$this->maniaControl->mapManager->mapList->showMapList($player);
- } elseif($chatCommands[1] == 'best') {
+ } elseif ($chatCommands[1] == 'best') {
$this->showMapListKarma(true, $player);
- } elseif($chatCommands[1] == 'worst') {
+ } elseif ($chatCommands[1] == 'worst') {
$this->showMapListKarma(false, $player);
- } elseif($chatCommands[1] == 'newest') {
+ } elseif ($chatCommands[1] == 'newest') {
$this->showMapListDate(true, $player);
- } elseif($chatCommands[1] == 'oldest') {
+ } elseif ($chatCommands[1] == 'oldest') {
$this->showMapListDate(false, $player);
- } elseif($chatCommands[1] == 'author') {
- if(isset($chatCommands[2])) {
+ } elseif ($chatCommands[1] == 'author') {
+ if (isset($chatCommands[2])) {
$this->showMaplistAuthor($chatCommands[2], $player);
} else {
$this->maniaControl->chat->sendError('There are no maps to show!', $player->login);
@@ -357,58 +386,46 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
}
}
- private function showMapListAuthor($author, $player) {
- $maps = $this->maniaControl->mapManager->getMaps();
- $mapList = array();
- /** @var Map $map */
- foreach($maps as $map) {
- if($map->authorLogin == $author) {
- $mapList[] = $map;
- }
- }
-
- if(count($mapList) == 0) {
- $this->maniaControl->chat->sendError('There are no maps to show!', $player->login);
- return;
- }
-
- $this->maniaControl->mapManager->mapList->showMapList($player, $mapList);
- }
-
- private function showMapListKarma($best, $player) {
+ /**
+ * Show a Karma based MapList
+ *
+ * @param bool $best
+ * @param Player $player
+ */
+ private function showMapListKarma($best, Player $player) {
/** @var \MCTeam\KarmaPlugin $karmaPlugin */
$karmaPlugin = $this->maniaControl->pluginManager->getPlugin(MapList::DEFAULT_KARMA_PLUGIN);
- if($karmaPlugin) {
- $maps = $this->maniaControl->mapManager->getMaps();
+ if ($karmaPlugin) {
+ $maps = $this->maniaControl->mapManager->getMaps();
$mapList = array();
- foreach($maps as $map) {
- if($map instanceof Map) {
- if($this->maniaControl->settingManager->getSetting($karmaPlugin, $karmaPlugin::SETTING_NEWKARMA) === true) {
- $karma = $karmaPlugin->getMapKarma($map);
+ foreach ($maps as $map) {
+ if ($map instanceof Map) {
+ if ($this->maniaControl->settingManager->getSetting($karmaPlugin, $karmaPlugin::SETTING_NEWKARMA) === true) {
+ $karma = $karmaPlugin->getMapKarma($map);
$map->karma = round($karma * 100.);
} else {
$votes = $karmaPlugin->getMapVotes($map);
- $min = 0;
- $plus = 0;
- foreach($votes as $vote) {
- if(isset($vote->vote)) {
- if($vote->vote != 0.5) {
- if($vote->vote < 0.5) {
- $min = $min+$vote->count;
+ $min = 0;
+ $plus = 0;
+ foreach ($votes as $vote) {
+ if (isset($vote->vote)) {
+ if ($vote->vote != 0.5) {
+ if ($vote->vote < 0.5) {
+ $min = $min + $vote->count;
} else {
- $plus = $plus+$vote->count;
+ $plus = $plus + $vote->count;
}
}
}
}
- $map->karma = $plus-$min;
+ $map->karma = $plus - $min;
}
$mapList[] = $map;
}
}
usort($mapList, array($this, 'sortByKarma'));
- if($best) {
+ if ($best) {
$mapList = array_reverse($mapList);
}
@@ -418,18 +435,20 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
}
}
- private function sortByKarma($a, $b) {
- return $a->karma - $b->karma;
- }
-
- private function showMapListDate($newest, $player) {
+ /**
+ * Show a Date based MapList
+ *
+ * @param bool $newest
+ * @param Player $player
+ */
+ private function showMapListDate($newest, Player $player) {
$maps = $this->maniaControl->mapManager->getMaps();
- usort($maps, function($a, $b) {
- return $a->index - $b->index;
+ usort($maps, function ($a, $b) {
+ return ($a->index - $b->index);
});
- if($newest) {
+ if ($newest) {
$maps = array_reverse($maps);
}
@@ -445,4 +464,15 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
public function command_xList(array $chatCallback, Player $player) {
$this->maniaControl->mapManager->mxList->showList($chatCallback, $player);
}
+
+ /**
+ * Helper Function to sort Maps by Karma
+ *
+ * @param Map $a
+ * @param Map $b
+ * @return mixed
+ */
+ private function sortByKarma($a, $b) {
+ return ($a->karma - $b->karma);
+ }
}
diff --git a/application/core/Maps/MapList.php b/application/core/Maps/MapList.php
index c364691b..dddb9c2a 100644
--- a/application/core/Maps/MapList.php
+++ b/application/core/Maps/MapList.php
@@ -2,7 +2,6 @@
namespace ManiaControl\Maps;
-use MCTeam\CustomVotesPlugin;
use FML\Controls\Control;
use FML\Controls\Frame;
use FML\Controls\Gauge;
@@ -25,33 +24,34 @@ use ManiaControl\Manialinks\ManialinkManager;
use ManiaControl\Manialinks\ManialinkPageAnswerListener;
use ManiaControl\Players\Player;
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
+use MCTeam\CustomVotesPlugin;
use MCTeam\KarmaPlugin;
/**
* MapList Widget Class
- *
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class MapList implements ManialinkPageAnswerListener, CallbackListener {
/*
* Constants
*/
- const ACTION_UPDATE_MAP = 'MapList.UpdateMap';
- const ACTION_ERASE_MAP = 'MapList.EraseMap';
- const ACTION_SWITCH_MAP = 'MapList.SwitchMap';
- const ACTION_START_SWITCH_VOTE = 'MapList.StartMapSwitchVote';
- const ACTION_QUEUED_MAP = 'MapList.QueueMap';
- const ACTION_UNQUEUE_MAP = 'MapList.UnQueueMap';
- const ACTION_CHECK_UPDATE = 'MapList.CheckUpdate';
- const ACTION_CLEAR_MAPQUEUE = 'MapList.ClearMapQueue';
- const ACTION_PAGING_CHUNKS = 'MapList.PagingChunk.';
- const MAX_MAPS_PER_PAGE = 15;
- const MAX_PAGES_PER_CHUNK = 2;
- const DEFAULT_KARMA_PLUGIN = 'MCTeam\KarmaPlugin';
+ const ACTION_UPDATE_MAP = 'MapList.UpdateMap';
+ const ACTION_ERASE_MAP = 'MapList.EraseMap';
+ const ACTION_SWITCH_MAP = 'MapList.SwitchMap';
+ const ACTION_START_SWITCH_VOTE = 'MapList.StartMapSwitchVote';
+ const ACTION_QUEUED_MAP = 'MapList.QueueMap';
+ const ACTION_UNQUEUE_MAP = 'MapList.UnQueueMap';
+ const ACTION_CHECK_UPDATE = 'MapList.CheckUpdate';
+ const ACTION_CLEAR_MAPQUEUE = 'MapList.ClearMapQueue';
+ const ACTION_PAGING_CHUNKS = 'MapList.PagingChunk.';
+ const MAX_MAPS_PER_PAGE = 15;
+ const MAX_PAGES_PER_CHUNK = 2;
+ const DEFAULT_KARMA_PLUGIN = 'MCTeam\KarmaPlugin';
const DEFAULT_CUSTOM_VOTE_PLUGIN = 'MCTeam\CustomVotesPlugin';
-
+
/*
* Private Properties
*/
@@ -61,12 +61,12 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
/**
* Create a new MapList Instance
- *
+ *
* @param ManiaControl $maniaControl
*/
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
-
+
// Register for Callbacks
$this->maniaControl->callbackManager->registerCallbackListener(ManialinkManager::CB_MAIN_WINDOW_CLOSED, $this, 'closeWidget');
$this->maniaControl->callbackManager->registerCallbackListener(ManialinkManager::CB_MAIN_WINDOW_OPENED, $this, 'handleWidgetOpened');
@@ -75,15 +75,15 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$this->maniaControl->callbackManager->registerCallbackListener(MapManager::CB_MAPS_UPDATED, $this, 'updateWidget');
$this->maniaControl->callbackManager->registerCallbackListener(MapManager::CB_KARMA_UPDATED, $this, 'updateWidget');
$this->maniaControl->callbackManager->registerCallbackListener(Callbacks::BEGINMAP, $this, 'updateWidget');
-
+
$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_CHECK_UPDATE, $this, 'checkUpdates');
$this->maniaControl->manialinkManager->registerManialinkPageAnswerListener(self::ACTION_CLEAR_MAPQUEUE, $this, 'clearMapQueue');
}
/**
* Clears the Map Queue
- *
- * @param array $chatCallback
+ *
+ * @param array $chatCallback
* @param Player $player
*/
public function clearMapQueue(array $chatCallback, Player $player) {
@@ -93,66 +93,66 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
/**
* Check for Map Updates
- *
- * @param array $chatCallback
+ *
+ * @param array $chatCallback
* @param Player $player
*/
public function checkUpdates(array $chatCallback, Player $player) {
// Update Mx Infos
$this->maniaControl->mapManager->mxManager->fetchManiaExchangeMapInformations();
-
+
// Reshow the Maplist
$this->showMapList($player);
}
/**
* Display a MapList on the Screen
- *
+ *
* @param Player $player
- * @param array $maps
- * @param int $chunk
- * @param int $startPage
+ * @param array $maps
+ * @param int $chunk
+ * @param int $startPage
*/
public function showMapList(Player $player, $maps = null, $chunk = 0, $startPage = null) {
- $width = $this->maniaControl->manialinkManager->styleManager->getListWidgetsWidth();
+ $width = $this->maniaControl->manialinkManager->styleManager->getListWidgetsWidth();
$height = $this->maniaControl->manialinkManager->styleManager->getListWidgetsHeight();
-
+
$this->mapListShown[$player->login] = true;
- $queueBuffer = $this->maniaControl->mapManager->mapQueue->getQueueBuffer();
-
+ $queueBuffer = $this->maniaControl->mapManager->mapQueue->getQueueBuffer();
+
// Get Maps
- $mapList = null;
+ $mapList = null;
$pageCount = null;
if (is_array($maps)) {
- $mapList = array_slice($maps, $chunk, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE);
+ $mapList = array_slice($maps, $chunk, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE);
$this->mapsInListShown[$player->login] = $maps;
- $pageCount = ceil(count($maps) / self::MAX_MAPS_PER_PAGE);
- }
- else if (array_key_exists($player->login, $this->mapsInListShown)) {
- $completeList = $this->mapsInListShown[$player->login];
+ $pageCount = ceil(count($maps) / self::MAX_MAPS_PER_PAGE);
+ } else if (array_key_exists($player->login, $this->mapsInListShown)) {
+ $completeList = $this->mapsInListShown[$player->login];
$this->mapsInListShown[$player->login] = $completeList;
- $mapList = array_slice($completeList, $chunk * self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE);
- $pageCount = ceil(count($completeList) / self::MAX_MAPS_PER_PAGE);
- }
- else {
- $mapList = $this->maniaControl->mapManager->getMaps($chunk * self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE);
- $pageCount = ceil($this->maniaControl->mapManager->getMapsCount() / self::MAX_MAPS_PER_PAGE);
+ $mapList = array_slice($completeList, $chunk * self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE);
+ $pageCount = ceil(count($completeList) / self::MAX_MAPS_PER_PAGE);
+ } else {
+ $mapList = $this->maniaControl->mapManager->getMaps($chunk * self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE, self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE);
+ $pageCount = ceil($this->maniaControl->mapManager->getMapsCount() / self::MAX_MAPS_PER_PAGE);
$this->mapsInListShown[$player->login] = $this->maniaControl->mapManager->getMaps();
}
-
+
// Create ManiaLink
$maniaLink = new ManiaLink(ManialinkManager::MAIN_MLID);
- $script = $maniaLink->getScript();
- $paging = new Paging();
+ $script = $maniaLink->getScript();
+ $paging = new Paging();
$script->addFeature($paging);
- if (!is_null($pageCount)) $paging->setCustomMaxPageNumber($pageCount);
+ if (!is_null($pageCount)) {
+ $paging->setCustomMaxPageNumber($pageCount);
+ }
$paging->setChunkActionAppendsPageNumber(true);
$paging->setChunkActions(self::ACTION_PAGING_CHUNKS);
-
+
// Main frame
$frame = $this->maniaControl->manialinkManager->styleManager->getDefaultListFrame($script, $paging);
$maniaLink->add($frame);
-
+
// Admin Buttons
if ($this->maniaControl->authenticationManager->checkPermission($player, MapQueue::SETTING_PERMISSION_CLEAR_MAPQUEUE)) {
// Clear Map-Queue
@@ -162,7 +162,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$label->setTextSize(1);
$label->setPosition($width / 2 - 8, -$height / 2 + 9);
$label->setHAlign(Control::RIGHT);
-
+
$quad = new Quad_BgsPlayerCard();
$frame->add($quad);
$quad->setPosition($width / 2 - 5, -$height / 2 + 9, 0.01);
@@ -171,7 +171,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$quad->setSize(29, 4);
$quad->setAction(self::ACTION_CLEAR_MAPQUEUE);
}
-
+
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_CHECK_UPDATE)) {
// Check Update
$label = new Label_Button();
@@ -180,7 +180,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$label->setTextSize(1);
$label->setPosition($width / 2 - 41, -$height / 2 + 9, 0.01);
$label->setHAlign(Control::RIGHT);
-
+
$quad = new Quad_BgsPlayerCard();
$frame->add($quad);
$quad->setPosition($width / 2 - 37, -$height / 2 + 9, 0.01);
@@ -188,7 +188,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$quad->setHAlign(Control::RIGHT);
$quad->setSize(35, 4);
$quad->setAction(self::ACTION_CHECK_UPDATE);
-
+
$mxQuad = new Quad();
$frame->add($mxQuad);
$mxQuad->setSize(3, 3);
@@ -198,44 +198,41 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$mxQuad->setZ(0.01);
$mxQuad->setAction(self::ACTION_CHECK_UPDATE);
}
-
+
// Headline
$headFrame = new Frame();
$frame->add($headFrame);
$headFrame->setY($height / 2 - 5);
- $x = -$width / 2;
- $array = array('Id' => $x + 5, 'Mx Id' => $x + 10, 'Map Name' => $x + 20, 'Author' => $x + 68, 'Karma' => $x + 115,
- 'Actions' => $width / 2 - 15);
+ $x = -$width / 2;
+ $array = array('Id' => $x + 5, 'Mx Id' => $x + 10, 'Map Name' => $x + 20, 'Author' => $x + 68, 'Karma' => $x + 115, 'Actions' => $width / 2 - 15);
$this->maniaControl->manialinkManager->labelLine($headFrame, $array);
-
+
// Predefine description Label
$descriptionLabel = $this->maniaControl->manialinkManager->styleManager->getDefaultDescriptionLabel();
$frame->add($descriptionLabel);
-
+
$queuedMaps = $this->maniaControl->mapManager->mapQueue->getQueuedMapsRanking();
/**
- *
* @var KarmaPlugin $karmaPlugin
*/
$karmaPlugin = $this->maniaControl->pluginManager->getPlugin(self::DEFAULT_KARMA_PLUGIN);
- $pageNumber = 1 + $chunk * self::MAX_PAGES_PER_CHUNK;
+ $pageNumber = 1 + $chunk * self::MAX_PAGES_PER_CHUNK;
$startPageNumber = (is_int($startPage) ? $startPage : $pageNumber);
$paging->setStartPageNumber($startPageNumber);
-
- $id = 1 + $chunk * self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE;
- $y = $height / 2 - 10;
+
+ $id = 1 + $chunk * self::MAX_PAGES_PER_CHUNK * self::MAX_MAPS_PER_PAGE;
+ $y = $height / 2 - 10;
$pageFrames = array();
/**
- *
* @var Map $map
*/
- $currentMap = $this->maniaControl->mapManager->getCurrentMap();
- $mxIcon = $this->maniaControl->manialinkManager->iconManager->getIcon(IconManager::MX_ICON);
- $mxIconHover = $this->maniaControl->manialinkManager->iconManager->getIcon(IconManager::MX_ICON_MOVER);
- $mxIconGreen = $this->maniaControl->manialinkManager->iconManager->getIcon(IconManager::MX_ICON_GREEN);
+ $currentMap = $this->maniaControl->mapManager->getCurrentMap();
+ $mxIcon = $this->maniaControl->manialinkManager->iconManager->getIcon(IconManager::MX_ICON);
+ $mxIconHover = $this->maniaControl->manialinkManager->iconManager->getIcon(IconManager::MX_ICON_MOVER);
+ $mxIconGreen = $this->maniaControl->manialinkManager->iconManager->getIcon(IconManager::MX_ICON_GREEN);
$mxIconGreenHover = $this->maniaControl->manialinkManager->iconManager->getIcon(IconManager::MX_ICON_GREEN_MOVER);
-
+
foreach ($mapList as $map) {
if (!isset($pageFrame)) {
$pageFrame = new Frame();
@@ -245,17 +242,17 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
}
array_push($pageFrames, $pageFrame);
$y = $height / 2 - 10;
-
+
$paging->addPage($pageFrame, $pageNumber);
$pageNumber++;
}
-
+
// Map Frame
$mapFrame = new Frame();
$pageFrame->add($mapFrame);
$mapFrame->setZ(0.1);
$mapFrame->setY($y);
-
+
if ($id % 2 != 0) {
$lineQuad = new Quad_BgsPlayerCard();
$mapFrame->add($lineQuad);
@@ -263,7 +260,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$lineQuad->setSubStyle($lineQuad::SUBSTYLE_BgPlayerCardBig);
$lineQuad->setZ(0.001);
}
-
+
if ($currentMap === $map) {
$currentQuad = new Quad_Icons64x64_1();
$mapFrame->add($currentQuad);
@@ -272,11 +269,11 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$currentQuad->setSize(4, 4);
$currentQuad->setSubStyle($currentQuad::SUBSTYLE_ArrowBlue);
}
-
+
$mxId = '-';
if (isset($map->mx->id)) {
$mxId = $map->mx->id;
-
+
$mxQuad = new Quad();
$mapFrame->add($mxQuad);
$mxQuad->setSize(3, 3);
@@ -287,7 +284,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$mxQuad->setZ(0.01);
$description = 'View $<' . $map->name . '$> on Mania-Exchange';
$mxQuad->addTooltipLabelFeature($descriptionLabel, $description);
-
+
if ($map->updateAvailable()) {
$mxQuad = new Quad();
$mapFrame->add($mxQuad);
@@ -299,30 +296,29 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$mxQuad->setZ(0.01);
$description = 'Update for $<' . $map->name . '$> available on Mania-Exchange!';
$mxQuad->addTooltipLabelFeature($descriptionLabel, $description);
-
+
// Update Button
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_ADD_MAP)) {
$mxQuad->setAction(self::ACTION_UPDATE_MAP . '.' . $map->uid);
}
}
}
-
+
// Display Maps
- $array = array($id => $x + 5, $mxId => $x + 10, Formatter::stripDirtyCodes($map->name) => $x + 20, $map->authorNick => $x + 68);
+ $array = array($id => $x + 5, $mxId => $x + 10, Formatter::stripDirtyCodes($map->name) => $x + 20, $map->authorNick => $x + 68);
$labels = $this->maniaControl->manialinkManager->labelLine($mapFrame, $array);
if (isset($labels[3])) {
/**
- *
* @var Label $label
*/
- $label = $labels[3];
+ $label = $labels[3];
$description = 'Click to checkout all maps by $<' . $map->authorLogin . '$>!';
$label->setAction(MapCommands::ACTION_SHOW_AUTHOR . $map->authorLogin);
$label->addTooltipLabelFeature($descriptionLabel, $description);
}
-
+
// TODO action detailed map info including mx info
-
+
// Map-Queue-Map-Label
if (isset($queuedMaps[$map->uid])) {
$label = new Label_Text();
@@ -333,20 +329,18 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$label->setTextSize(1.5);
$label->setText($queuedMaps[$map->uid]);
$label->setTextColor('fff');
-
+
// Checks if the Player who openend the Widget has queued the map
$queuer = $this->maniaControl->mapManager->mapQueue->getQueuer($map->uid);
if ($queuer->login == $player->login) {
$description = 'Remove $<' . $map->name . '$> from the Map Queue';
$label->addTooltipLabelFeature($descriptionLabel, $description);
$label->setAction(self::ACTION_UNQUEUE_MAP . '.' . $map->uid);
- }
- else {
+ } else {
$description = '$<' . $map->name . '$> is on Map-Queue Position: ' . $queuedMaps[$map->uid];
$label->addTooltipLabelFeature($descriptionLabel, $description);
}
- }
- else {
+ } else {
// Map-Queue-Map-Button
$queueLabel = new Label_Button();
$mapFrame->add($queueLabel);
@@ -355,7 +349,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$queueLabel->setSize(3, 3);
$queueLabel->setText('+');
- if(in_array($map->uid, $queueBuffer)) {
+ if (in_array($map->uid, $queueBuffer)) {
if ($this->maniaControl->authenticationManager->checkPermission($player, MapQueue::SETTING_PERMISSION_CLEAR_MAPQUEUE)) {
$queueLabel->setAction(self::ACTION_QUEUED_MAP . '.' . $map->uid);
}
@@ -369,7 +363,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$queueLabel->addTooltipLabelFeature($descriptionLabel, $description);
}
}
-
+
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_REMOVE_MAP)) {
// erase map quad
$eraseLabel = new Label_Button();
@@ -380,13 +374,13 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$eraseLabel->setTextSize(1);
$eraseLabel->setText('x');
$eraseLabel->setTextColor('a00');
-
+
$confirmFrame = $this->buildConfirmFrame($maniaLink, $y, $id, $map->uid);
$eraseLabel->addToggleFeature($confirmFrame);
$description = 'Remove Map: $<' . $map->name . '$>';
$eraseLabel->addTooltipLabelFeature($descriptionLabel, $description);
}
-
+
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_ADD_MAP)) {
// Switch to map
$switchLabel = new Label_Button();
@@ -397,14 +391,13 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$switchLabel->setTextSize(2);
$switchLabel->setText('»');
$switchLabel->setTextColor('0f0');
-
+
$confirmFrame = $this->buildConfirmFrame($maniaLink, $y, $id);
$switchLabel->addToggleFeature($confirmFrame);
-
+
$description = 'Switch Directly to Map: $<' . $map->name . '$>';
$switchLabel->addTooltipLabelFeature($descriptionLabel, $description);
- }
- else if ($this->maniaControl->pluginManager->isPluginActive(self::DEFAULT_CUSTOM_VOTE_PLUGIN)) {
+ } else if ($this->maniaControl->pluginManager->isPluginActive(self::DEFAULT_CUSTOM_VOTE_PLUGIN)) {
// Switch Map Voting
$switchLabel = new Label_Button();
$mapFrame->add($switchLabel);
@@ -414,35 +407,35 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$switchLabel->setTextSize(2);
$switchLabel->setText('»');
$switchLabel->setTextColor('0f0');
-
+
$switchLabel->setAction(self::ACTION_START_SWITCH_VOTE . '.' . ($id - 1));
-
+
$description = 'Start Map-Switch Vote: $<' . $map->name . '$>';
$switchLabel->addTooltipLabelFeature($descriptionLabel, $description);
}
-
+
// Display Karma bar
if ($karmaPlugin) {
$karma = $karmaPlugin->getMapKarma($map);
$votes = $karmaPlugin->getMapVotes($map);
if (is_numeric($karma)) {
- if($this->maniaControl->settingManager->getSetting($karmaPlugin, $karmaPlugin::SETTING_NEWKARMA)) {
+ if ($this->maniaControl->settingManager->getSetting($karmaPlugin, $karmaPlugin::SETTING_NEWKARMA)) {
$karmaText = ' ' . round($karma * 100.) . '% (' . $votes['count'] . ')';
} else {
- $min = 0;
+ $min = 0;
$plus = 0;
- foreach($votes as $vote) {
- if(isset($vote->vote)) {
- if($vote->vote != 0.5) {
- if($vote->vote < 0.5) {
- $min = $min+$vote->count;
+ foreach ($votes as $vote) {
+ if (isset($vote->vote)) {
+ if ($vote->vote != 0.5) {
+ if ($vote->vote < 0.5) {
+ $min = $min + $vote->count;
} else {
- $plus = $plus+$vote->count;
+ $plus = $plus + $vote->count;
}
}
}
}
- $endKarma = $plus-$min;
+ $endKarma = $plus - $min;
$karmaText = ' ' . $endKarma . ' (' . $votes['count'] . 'x / ' . round($karma * 100.) . '%)';
}
@@ -456,7 +449,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$karmaGauge->setRatio($karma + 0.15 - $karma * 0.15);
$karmaColor = ColorUtil::floatToStatusColor($karma);
$karmaGauge->setColor($karmaColor . '9');
-
+
$karmaLabel = new Label();
$mapFrame->add($karmaLabel);
$karmaLabel->setZ(2);
@@ -468,46 +461,46 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$karmaLabel->setText($karmaText);
}
}
-
+
$y -= 4;
if ($id % self::MAX_MAPS_PER_PAGE == 0) {
unset($pageFrame);
}
$id++;
}
-
+
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'MapList');
}
/**
* Builds the confirmation frame
- *
+ *
* @param ManiaLink $maniaLink
- * @param $y
- * @param $id
- * @param bool $mapUid
+ * @param $y
+ * @param $id
+ * @param bool $mapUid
* @return Frame
*/
public function buildConfirmFrame(Manialink $maniaLink, $y, $id, $mapUid = false) {
- $width = $this->maniaControl->manialinkManager->styleManager->getListWidgetsWidth();
- $quadStyle = $this->maniaControl->manialinkManager->styleManager->getDefaultMainWindowStyle();
+ $width = $this->maniaControl->manialinkManager->styleManager->getListWidgetsWidth();
+ $quadStyle = $this->maniaControl->manialinkManager->styleManager->getDefaultMainWindowStyle();
$quadSubstyle = $this->maniaControl->manialinkManager->styleManager->getDefaultMainWindowSubStyle();
-
+
$confirmFrame = new Frame();
$maniaLink->add($confirmFrame);
$confirmFrame->setPosition($width / 2 + 6, $y);
$confirmFrame->setVisible(false);
-
+
$quad = new Quad();
$confirmFrame->add($quad);
$quad->setStyles($quadStyle, $quadSubstyle);
$quad->setSize(12, 4);
-
+
$quad = new Quad_BgsPlayerCard();
$confirmFrame->add($quad);
$quad->setSubStyle($quad::SUBSTYLE_BgCardSystem);
$quad->setSize(11, 3.5);
-
+
$label = new Label_Button();
$confirmFrame->add($label);
$label->setAlign(Control::CENTER, Control::CENTER);
@@ -515,20 +508,19 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$label->setTextSize(1);
$label->setScale(0.90);
$label->setX(-1.3);
-
+
$buttLabel = new Label_Button();
$confirmFrame->add($buttLabel);
$buttLabel->setPosition(3.2, 0.4, 0.2);
$buttLabel->setSize(3, 3);
$buttLabel->setAlign(Control::CENTER, Control::CENTER);
-
+
if (!$mapUid) {
$quad->setAction(self::ACTION_SWITCH_MAP . '.' . ($id - 1));
$buttLabel->setText('»');
$buttLabel->setTextColor('0f0');
$buttLabel->setTextSize(2);
- }
- else {
+ } else {
$buttLabel->setTextSize(1);
$buttLabel->setText('x');
$buttLabel->setTextColor('a00');
@@ -539,9 +531,9 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
/**
* Unset the player if he opened another Main Widget
- *
+ *
* @param Player $player
- * @param $openedWidget
+ * @param $openedWidget
*/
public function handleWidgetOpened(Player $player, $openedWidget) {
// unset when another main widget got opened
@@ -552,7 +544,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
/**
* Closes the widget
- *
+ *
* @param \ManiaControl\Players\Player $player
*/
public function closeWidget(Player $player) {
@@ -560,35 +552,24 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
unset($this->mapsInListShown[$player->login]);
}
- /**
- * Closes the widget
- *
- * @param Player $player
- */
- public function playerCloseWidget(Player $player) {
- unset($this->mapListShown[$player->login]);
- unset($this->mapsInListShown[$player->login]);
- $this->maniaControl->manialinkManager->closeWidget($player);
- }
-
/**
* Handle ManialinkPageAnswer Callback
- *
+ *
* @param array $callback
*/
public function handleManialinkPageAnswer(array $callback) {
- $actionId = $callback[1][2];
+ $actionId = $callback[1][2];
$actionArray = explode('.', $actionId);
-
+
if (count($actionArray) <= 2) {
return;
}
-
+
$action = $actionArray[0] . '.' . $actionArray[1];
- $login = $callback[1][1];
+ $login = $callback[1][1];
$player = $this->maniaControl->playerManager->getPlayer($login);
- $mapId = (int) $actionArray[2];
-
+ $mapId = (int)$actionArray[2];
+
switch ($action) {
case self::ACTION_UPDATE_MAP:
$mapUid = $actionArray[2];
@@ -602,51 +583,47 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
case self::ACTION_SWITCH_MAP:
try {
$this->maniaControl->client->jumpToMapIndex($mapId);
- }
- catch (Exception $e) {
+ } catch (Exception $e) {
// TODO: is it even possible that an exception other than connection errors will be thrown? - remove try-catch?
$this->maniaControl->chat->sendError("Error while Jumping to Map Index");
break;
}
$mapList = $this->maniaControl->mapManager->getMaps();
- $map = $mapList[$mapId];
-
+ $map = $mapList[$mapId];
+
$message = '$<' . $player->nickname . '$> skipped to Map $z$<' . $map->name . '$>!';
$this->maniaControl->chat->sendSuccess($message);
$this->maniaControl->log($message, true);
-
+
$this->playerCloseWidget($player);
break;
case self::ACTION_START_SWITCH_VOTE:
/**
- *
* @var $votesPlugin CustomVotesPlugin
*/
$votesPlugin = $this->maniaControl->pluginManager->getPlugin(self::DEFAULT_CUSTOM_VOTE_PLUGIN);
- $mapList = $this->maniaControl->mapManager->getMaps();
- $map = $mapList[$mapId];
-
+ $mapList = $this->maniaControl->mapManager->getMaps();
+ $map = $mapList[$mapId];
+
$message = '$<' . $player->nickname . '$>$s started a vote to switch to $<' . $map->name . '$>!';
-
+
/**
- *
* @var Map $map
*/
$votesPlugin->defineVote('switchmap', "Goto " . $map->name, true, $message);
-
+
$self = $this;
- $votesPlugin->startVote($player, 'switchmap', function ($result) use(&$self, &$votesPlugin, &$map) {
+ $votesPlugin->startVote($player, 'switchmap', function ($result) use (&$self, &$votesPlugin, &$map) {
$self->maniaControl->chat->sendInformation('$sVote Successfully -> Map switched!');
$votesPlugin->undefineVote('switchmap');
-
+
try {
$index = $self->maniaControl->mapManager->getMapIndex($map);
$self->maniaControl->client->jumpToMapIndex($index);
- }
- catch (Exception $e) {
+ } catch (Exception $e) {
// TODO temp added 19.04.2014
$self->maniaControl->errorHandler->triggerDebugNotice("Exception line 557 MapList.php" . $e->getMessage());
-
+
$self->maniaControl->chat->sendError("Error while Switching Map");
}
});
@@ -662,14 +639,25 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
default:
if (substr($actionId, 0, strlen(self::ACTION_PAGING_CHUNKS)) === self::ACTION_PAGING_CHUNKS) {
// Paging chunks
- $neededPage = (int) substr($actionId, strlen(self::ACTION_PAGING_CHUNKS));
- $chunk = (int) ($neededPage / self::MAX_PAGES_PER_CHUNK - 0.5);
+ $neededPage = (int)substr($actionId, strlen(self::ACTION_PAGING_CHUNKS));
+ $chunk = (int)($neededPage / self::MAX_PAGES_PER_CHUNK - 0.5);
$this->showMapList($player, null, $chunk, $neededPage);
}
break;
}
}
+ /**
+ * Closes the widget
+ *
+ * @param Player $player
+ */
+ public function playerCloseWidget(Player $player) {
+ unset($this->mapListShown[$player->login]);
+ unset($this->mapsInListShown[$player->login]);
+ $this->maniaControl->manialinkManager->closeWidget($player);
+ }
+
/**
* Reopen the widget on Map Begin, MapListChanged, etc.
*/
@@ -679,8 +667,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$player = $this->maniaControl->playerManager->getPlayer($login);
if ($player) {
$this->showMapList($player);
- }
- else {
+ } else {
unset($this->mapListShown[$login]);
}
}
@@ -696,8 +683,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$player = $this->maniaControl->playerManager->getPlayer($login);
if ($player) {
$this->showMapList($player);
- }
- else {
+ } else {
unset($this->mapListShown[$login]);
}
}
diff --git a/application/core/Maps/MapManager.php b/application/core/Maps/MapManager.php
index 03f9be30..326ae9e9 100644
--- a/application/core/Maps/MapManager.php
+++ b/application/core/Maps/MapManager.php
@@ -22,8 +22,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\StartIndexOutOfBoundException;
/**
* Manager for Maps
*
- * @author kremsy & steeffeen
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class MapManager implements CallbackListener {
@@ -129,55 +129,40 @@ class MapManager implements CallbackListener {
}
/**
- * Save a Map in the Database
+ * Update a Map from Mania Exchange
*
- * @param \ManiaControl\Maps\Map $map
- * @return bool
+ * @param Player $admin
+ * @param string $uid
*/
- private function saveMap(Map &$map) {
- //TODO saveMaps for whole maplist at once (usage of prepared statements)
- $mysqli = $this->maniaControl->database->mysqli;
- $mapQuery = "INSERT INTO `" . self::TABLE_MAPS . "` (
- `uid`,
- `name`,
- `authorLogin`,
- `fileName`,
- `environment`,
- `mapType`
- ) VALUES (
- ?, ?, ?, ?, ?, ?
- ) ON DUPLICATE KEY UPDATE
- `index` = LAST_INSERT_ID(`index`),
- `fileName` = VALUES(`fileName`),
- `environment` = VALUES(`environment`),
- `mapType` = VALUES(`mapType`);";
+ public function updateMap(Player $admin, $uid) {
+ $this->updateMapTimestamp($uid);
- $mapStatement = $mysqli->prepare($mapQuery);
- if ($mysqli->error) {
- trigger_error($mysqli->error);
- return false;
+ if (!isset($uid) || !isset($this->maps[$uid])) {
+ trigger_error("Error while updating Map, unknown UID: " . $uid);
+ $this->maniaControl->chat->sendError("Error while updating Map.", $admin->login);
+ return;
}
- $mapStatement->bind_param('ssssss', $map->uid, $map->rawName, $map->authorLogin, $map->fileName, $map->environment, $map->mapType);
- $mapStatement->execute();
- if ($mapStatement->error) {
- trigger_error($mapStatement->error);
- $mapStatement->close();
- return false;
- }
- $map->index = $mapStatement->insert_id;
- $mapStatement->close();
- return true;
+
+ /** @var Map $map */
+ $map = $this->maps[$uid];
+
+ $mxId = $map->mx->id;
+ $this->removeMap($admin, $uid, true, false);
+ $this->addMapFromMx($mxId, $admin->login, true);
}
/**
- * Updates the Timestamp of a map
+ * Update the Timestamp of a Map
*
- * @param $map
+ * @param string $uid
* @return bool
*/
private function updateMapTimestamp($uid) {
$mysqli = $this->maniaControl->database->mysqli;
- $mapQuery = "UPDATE `" . self::TABLE_MAPS . "` SET mxid = 0, changed = NOW() WHERE 'uid' = ?";
+ $mapQuery = "UPDATE `" . self::TABLE_MAPS . "` SET
+ mxid = 0,
+ changed = NOW()
+ WHERE 'uid' = ?";
$mapStatement = $mysqli->prepare($mapQuery);
if ($mysqli->error) {
@@ -195,30 +180,6 @@ class MapManager implements CallbackListener {
return true;
}
- /**
- * Updates a Map from Mania Exchange
- *
- * @param Player $admin
- * @param $mxId
- * @param $uid
- */
- public function updateMap(Player $admin, $uid) {
- $this->updateMapTimestamp($uid);
-
- if (!isset($uid) || !isset($this->maps[$uid])) {
- trigger_error("Error while updating Map, unkown UID: " . $uid);
- $this->maniaControl->chat->sendError("Error while updating Map.", $admin->login);
- return;
- }
-
- /** @var Map $map */
- $map = $this->maps[$uid];
-
- $mxId = $map->mx->id;
- $this->removeMap($admin, $uid, true, false);
- $this->addMapFromMx($mxId, $admin->login, true);
- }
-
/**
* Remove a Map
*
@@ -245,7 +206,7 @@ class MapManager implements CallbackListener {
// Remove map
try {
$this->maniaControl->client->removeMap($map->fileName);
- } catch(MapNotInCurrentSelectionException $e) {
+ } catch (MapNotInCurrentSelectionException $e) {
}
@@ -271,328 +232,6 @@ class MapManager implements CallbackListener {
unset($this->maps[$uid]);
}
- /**
- * Restructures the Maplist
- */
- public function restructureMapList() {
- $currentIndex = $this->getMapIndex($this->currentMap);
-
- // No RestructureNeeded
- if ($currentIndex < Maplist::MAX_MAPS_PER_PAGE - 1) {
- return true;
- }
-
- $lowerMapArray = array();
- $higherMapArray = array();
-
- $i = 0;
- foreach($this->maps as $map) {
- if ($i < $currentIndex) {
- $lowerMapArray[] = $map->fileName;
- } else {
- $higherMapArray[] = $map->fileName;
- }
- $i++;
- }
-
- $mapArray = array_merge($higherMapArray, $lowerMapArray);
- array_shift($mapArray);
-
- try {
- $this->maniaControl->client->chooseNextMapList($mapArray);
- } catch(Exception $e) {
- trigger_error("Error while restructuring the Maplist. " . $e->getMessage());
- return false;
- }
- return true;
- }
-
- /**
- * Shuffles the MapList
- *
- * @param Player $admin
- * @return bool
- */
- public function shuffleMapList($admin = null) {
- $shuffledMaps = $this->maps;
- shuffle($shuffledMaps);
-
- $mapArray = array();
-
- foreach($shuffledMaps as $map) {
- /**
- * @var Map $map
- */
- $mapArray[] = $map->fileName;
- }
-
- try {
- $this->maniaControl->client->chooseNextMapList($mapArray);
- } catch(Exception $e) {
- //TODO temp added 19.04.2014
- $this->maniaControl->errorHandler->triggerDebugNotice("Exception line 331 MapManager" . $e->getMessage());
- trigger_error("Couldn't shuffle mapList. " . $e->getMessage());
- return false;
- }
-
- $this->fetchCurrentMap();
-
- if ($admin) {
- $message = '$<' . $admin->nickname . '$> shuffled the Maplist!';
- $this->maniaControl->chat->sendSuccess($message);
- $this->maniaControl->log($message, true);
- }
-
- // Restructure if needed
- $this->restructureMapList();
- return true;
- }
-
- /**
- * Initializes a Map
- *
- * @param $rpcMap
- * @return Map
- */
- public function initializeMap($rpcMap) {
- $map = new Map($rpcMap);
- $this->saveMap($map);
-
- /*$mapsDirectory = $this->maniaControl->server->getMapsDirectory();
- if (is_readable($mapsDirectory . $map->fileName)) {
- $mapFetcher = new \GBXChallMapFetcher(true);
- $mapFetcher->processFile($mapsDirectory . $map->fileName);
- $map->authorNick = FORMATTER::stripDirtyCodes($mapFetcher->authorNick);
- $map->authorEInfo = $mapFetcher->authorEInfo;
- $map->authorZone = $mapFetcher->authorZone;
- $map->comment = $mapFetcher->comment;
- }*/
- return $map;
- }
-
- /**
- * Updates the full Map list, needed on Init, addMap and on ShuffleMaps
- */
- private function updateFullMapList() {
- $tempList = array();
-
- try {
- $i = 0;
- while(true) {
- $maps = $this->maniaControl->client->getMapList(150, $i);
-
- foreach($maps as $rpcMap) {
- if (array_key_exists($rpcMap->uId, $this->maps)) {
- // Map already exists, only update index
- $tempList[$rpcMap->uId] = $this->maps[$rpcMap->uId];
- } else { // Insert Map Object
- $map = $this->initializeMap($rpcMap);
- $tempList[$map->uid] = $map;
- }
- }
-
- $i += 150;
- }
- } catch(StartIndexOutOfBoundException $e) {
- }
-
- // restore Sorted MapList
- $this->maps = $tempList;
-
- // Trigger own callback
- $this->maniaControl->callbackManager->triggerCallback(self::CB_MAPS_UPDATED);
-
- // Write MapList
- if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_AUTOSAVE_MAPLIST)) {
- try {
- $this->maniaControl->client->saveMatchSettings($this->maniaControl->settingManager->getSetting($this, self::SETTING_MAPLIST_FILE));
- } catch(CouldNotWritePlaylistFileException $e) {
- $this->maniaControl->log("Unable to write the playlist file, please checkout your MX-Folders File permissions!");
- }
- }
- }
-
- /**
- * Freshly fetch current Map
- *
- * @return Map
- */
- private function fetchCurrentMap() {
- $rpcMap = $this->maniaControl->client->getCurrentMapInfo();
-
- if (array_key_exists($rpcMap->uId, $this->maps)) {
- $this->currentMap = $this->maps[$rpcMap->uId];
- $this->currentMap->nbCheckpoints = $rpcMap->nbCheckpoints;
- $this->currentMap->nbLaps = $rpcMap->nbLaps;
- return $this->currentMap;
- }
-
- $this->currentMap = $this->initializeMap($rpcMap);
- $this->maps[$this->currentMap->uid] = $this->currentMap;
- return $this->currentMap;
- }
-
- /**
- * Handle OnInit callback
- */
- public function handleOnInit() {
- $this->updateFullMapList();
- $this->fetchCurrentMap();
-
- // Restructure Maplist
- $this->restructureMapList();
- }
-
- /**
- * Handle AfterInit callback
- */
- public function handleAfterInit() {
- // Fetch MX infos
- $this->mxManager->fetchManiaExchangeMapInformations();
- }
-
- /**
- * Get Current Map
- *
- * @return Map currentMap
- */
- public function getCurrentMap() {
- if (!$this->currentMap) {
- return $this->fetchCurrentMap();
- }
- return $this->currentMap;
- }
-
- /**
- * Returns map By UID
- *
- * @param $uid
- * @return Map array
- */
- public function getMapByUid($uid) {
- if (!isset($this->maps[$uid])) {
- return null;
- }
- return $this->maps[$uid];
- }
-
- /**
- * Handle BeginMap callback
- *
- * @param array $callback
- */
- public function handleBeginMap(array $callback) {
- if ($this->mapBegan) {
- return;
- }
- $this->mapBegan = true;
- $this->mapEnded = false;
-
- if (!isset($callback[1][0]["UId"])) {
- $this->currentMap = $this->fetchCurrentMap();
- } else if (array_key_exists($callback[1][0]["UId"], $this->maps)) {
- // Map already exists, only update index
- $this->currentMap = $this->maps[$callback[1][0]["UId"]];
- if (!$this->currentMap->nbCheckpoints || !$this->currentMap->nbLaps) {
- $rpcMap = $this->maniaControl->client->getCurrentMapInfo();
- $this->currentMap->nbLaps = $rpcMap->nbLaps;
- $this->currentMap->nbCheckpoints = $rpcMap->nbCheckpoints;
- }
- }
-
- // Restructure MapList if id is over 15
- $this->restructureMapList();
-
- // Update the mx of the map (for update checks, etc.)
- $this->mxManager->fetchManiaExchangeMapInformations($this->currentMap);
-
- // Trigger own BeginMap callback (
- //TODO remove deprecated callback later
- $this->maniaControl->callbackManager->triggerCallback(self::CB_BEGINMAP, $this->currentMap);
- $this->maniaControl->callbackManager->triggerCallback(Callbacks::BEGINMAP, $this->currentMap);
- }
-
- /**
- * Handle Script BeginMap callback
- *
- * @param int $mapNumber
- */
- public function handleScriptBeginMap($mapNumber) {
- $this->handleBeginMap(array());
- }
-
- /**
- * Handle EndMap Callback
- *
- * @param array $callback
- */
- public function handleEndMap(array $callback) {
- if ($this->mapEnded) {
- return;
- }
- $this->mapEnded = true;
- $this->mapBegan = false;
-
- // Trigger own EndMap callback
- $this->maniaControl->callbackManager->triggerCallback(self::CB_ENDMAP, $this->currentMap);
- //TODO remove deprecated callback later
- $this->maniaControl->callbackManager->triggerCallback(Callbacks::ENDMAP, $this->currentMap);
- }
-
- /**
- * Handle Script EndMap Callback
- *
- * @param int $mapNumber
- */
- public function handleScriptEndMap($mapNumber) {
- $this->handleEndMap(array());
- }
-
- /**
- * Handle Maps Modified Callback
- *
- * @param array $callback
- */
- public function mapsModified(array $callback) {
- $this->updateFullMapList();
- }
-
- /**
- * Get all Maps
- *
- * @return array
- */
- public function getMaps($offset = null, $length = null) {
- if ($offset === null) {
- return array_values($this->maps);
- }
- if ($length === null) {
- return array_slice($this->maps, $offset);
- }
- return array_slice($this->maps, $offset, $length);
- }
-
- /**
- * Get the Number of Maps
- *
- * @return int
- */
- public function getMapsCount() {
- return count($this->maps);
- }
-
- /**
- * Returns the MapIndex of a given map
- *
- * @param Map $map
- * @internal param $uid
- * @return mixed
- */
- public function getMapIndex(Map $map) {
- $maps = $this->getMaps();
- return array_search($map, $maps);
- }
-
/**
* Adds a Map from Mania Exchange
*
@@ -668,7 +307,7 @@ class MapManager implements CallbackListener {
// Write map via write file method
try {
$this->maniaControl->client->writeFileFromString($relativeMapFileName, $file);
- } catch(InvalidArgumentException $e) {
+ } catch (InvalidArgumentException $e) {
if ($e->getMessage() == 'data are too big') {
$this->maniaControl->chat->sendError("Map is too big for a remote save.", $login);
return;
@@ -680,7 +319,7 @@ class MapManager implements CallbackListener {
// Check for valid map
try {
$this->maniaControl->client->checkMapForCurrentServerParams($relativeMapFileName);
- } catch(MapNotCompatibleOrCompleteException $e) {
+ } catch (MapNotCompatibleOrCompleteException $e) {
trigger_error("Couldn't check if map is valid ('{$relativeMapFileName}'). " . $e->getMessage());
$this->maniaControl->chat->sendError('Wrong MapType or not validated!', $login);
return;
@@ -715,5 +354,370 @@ class MapManager implements CallbackListener {
$this->maniaControl->log($message, true);
}
}
+
+ /**
+ * Returns map By UID
+ *
+ * @param $uid
+ * @return Map array
+ */
+ public function getMapByUid($uid) {
+ if (!isset($this->maps[$uid])) {
+ return null;
+ }
+ return $this->maps[$uid];
+ }
+
+ /**
+ * Updates the full Map list, needed on Init, addMap and on ShuffleMaps
+ */
+ private function updateFullMapList() {
+ $tempList = array();
+
+ try {
+ $i = 0;
+ while (true) {
+ $maps = $this->maniaControl->client->getMapList(150, $i);
+
+ foreach ($maps as $rpcMap) {
+ if (array_key_exists($rpcMap->uId, $this->maps)) {
+ // Map already exists, only update index
+ $tempList[$rpcMap->uId] = $this->maps[$rpcMap->uId];
+ } else { // Insert Map Object
+ $map = $this->initializeMap($rpcMap);
+ $tempList[$map->uid] = $map;
+ }
+ }
+
+ $i += 150;
+ }
+ } catch (StartIndexOutOfBoundException $e) {
+ }
+
+ // restore Sorted MapList
+ $this->maps = $tempList;
+
+ // Trigger own callback
+ $this->maniaControl->callbackManager->triggerCallback(self::CB_MAPS_UPDATED);
+
+ // Write MapList
+ if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_AUTOSAVE_MAPLIST)) {
+ try {
+ $this->maniaControl->client->saveMatchSettings($this->maniaControl->settingManager->getSetting($this, self::SETTING_MAPLIST_FILE));
+ } catch (CouldNotWritePlaylistFileException $e) {
+ $this->maniaControl->log("Unable to write the playlist file, please checkout your MX-Folders File permissions!");
+ }
+ }
+ }
+
+ /**
+ * Initializes a Map
+ *
+ * @param $rpcMap
+ * @return Map
+ */
+ public function initializeMap($rpcMap) {
+ $map = new Map($rpcMap);
+ $this->saveMap($map);
+
+ /*$mapsDirectory = $this->maniaControl->server->getMapsDirectory();
+ if (is_readable($mapsDirectory . $map->fileName)) {
+ $mapFetcher = new \GBXChallMapFetcher(true);
+ $mapFetcher->processFile($mapsDirectory . $map->fileName);
+ $map->authorNick = FORMATTER::stripDirtyCodes($mapFetcher->authorNick);
+ $map->authorEInfo = $mapFetcher->authorEInfo;
+ $map->authorZone = $mapFetcher->authorZone;
+ $map->comment = $mapFetcher->comment;
+ }*/
+ return $map;
+ }
+
+ /**
+ * Save a Map in the Database
+ *
+ * @param \ManiaControl\Maps\Map $map
+ * @return bool
+ */
+ private function saveMap(Map &$map) {
+ //TODO saveMaps for whole maplist at once (usage of prepared statements)
+ $mysqli = $this->maniaControl->database->mysqli;
+ $mapQuery = "INSERT INTO `" . self::TABLE_MAPS . "` (
+ `uid`,
+ `name`,
+ `authorLogin`,
+ `fileName`,
+ `environment`,
+ `mapType`
+ ) VALUES (
+ ?, ?, ?, ?, ?, ?
+ ) ON DUPLICATE KEY UPDATE
+ `index` = LAST_INSERT_ID(`index`),
+ `fileName` = VALUES(`fileName`),
+ `environment` = VALUES(`environment`),
+ `mapType` = VALUES(`mapType`);";
+
+ $mapStatement = $mysqli->prepare($mapQuery);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error);
+ return false;
+ }
+ $mapStatement->bind_param('ssssss', $map->uid, $map->rawName, $map->authorLogin, $map->fileName, $map->environment, $map->mapType);
+ $mapStatement->execute();
+ if ($mapStatement->error) {
+ trigger_error($mapStatement->error);
+ $mapStatement->close();
+ return false;
+ }
+ $map->index = $mapStatement->insert_id;
+ $mapStatement->close();
+ return true;
+ }
+
+ /**
+ * Shuffles the MapList
+ *
+ * @param Player $admin
+ * @return bool
+ */
+ public function shuffleMapList($admin = null) {
+ $shuffledMaps = $this->maps;
+ shuffle($shuffledMaps);
+
+ $mapArray = array();
+
+ foreach ($shuffledMaps as $map) {
+ /**
+ * @var Map $map
+ */
+ $mapArray[] = $map->fileName;
+ }
+
+ try {
+ $this->maniaControl->client->chooseNextMapList($mapArray);
+ } catch (Exception $e) {
+ //TODO temp added 19.04.2014
+ $this->maniaControl->errorHandler->triggerDebugNotice("Exception line 331 MapManager" . $e->getMessage());
+ trigger_error("Couldn't shuffle mapList. " . $e->getMessage());
+ return false;
+ }
+
+ $this->fetchCurrentMap();
+
+ if ($admin) {
+ $message = '$<' . $admin->nickname . '$> shuffled the Maplist!';
+ $this->maniaControl->chat->sendSuccess($message);
+ $this->maniaControl->log($message, true);
+ }
+
+ // Restructure if needed
+ $this->restructureMapList();
+ return true;
+ }
+
+ /**
+ * Freshly fetch current Map
+ *
+ * @return Map
+ */
+ private function fetchCurrentMap() {
+ $rpcMap = $this->maniaControl->client->getCurrentMapInfo();
+
+ if (array_key_exists($rpcMap->uId, $this->maps)) {
+ $this->currentMap = $this->maps[$rpcMap->uId];
+ $this->currentMap->nbCheckpoints = $rpcMap->nbCheckpoints;
+ $this->currentMap->nbLaps = $rpcMap->nbLaps;
+ return $this->currentMap;
+ }
+
+ $this->currentMap = $this->initializeMap($rpcMap);
+ $this->maps[$this->currentMap->uid] = $this->currentMap;
+ return $this->currentMap;
+ }
+
+ /**
+ * Restructures the Maplist
+ */
+ public function restructureMapList() {
+ $currentIndex = $this->getMapIndex($this->currentMap);
+
+ // No RestructureNeeded
+ if ($currentIndex < Maplist::MAX_MAPS_PER_PAGE - 1) {
+ return true;
+ }
+
+ $lowerMapArray = array();
+ $higherMapArray = array();
+
+ $i = 0;
+ foreach ($this->maps as $map) {
+ if ($i < $currentIndex) {
+ $lowerMapArray[] = $map->fileName;
+ } else {
+ $higherMapArray[] = $map->fileName;
+ }
+ $i++;
+ }
+
+ $mapArray = array_merge($higherMapArray, $lowerMapArray);
+ array_shift($mapArray);
+
+ try {
+ $this->maniaControl->client->chooseNextMapList($mapArray);
+ } catch (Exception $e) {
+ trigger_error("Error while restructuring the Maplist. " . $e->getMessage());
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Returns the MapIndex of a given map
+ *
+ * @param Map $map
+ * @internal param $uid
+ * @return mixed
+ */
+ public function getMapIndex(Map $map) {
+ $maps = $this->getMaps();
+ return array_search($map, $maps);
+ }
+
+ /**
+ * Get all Maps
+ *
+ * @param int $offset
+ * @param int $length
+ * @return array
+ */
+ public function getMaps($offset = null, $length = null) {
+ if ($offset === null) {
+ return array_values($this->maps);
+ }
+ if ($length === null) {
+ return array_slice($this->maps, $offset);
+ }
+ return array_slice($this->maps, $offset, $length);
+ }
+
+ /**
+ * Handle OnInit callback
+ */
+ public function handleOnInit() {
+ $this->updateFullMapList();
+ $this->fetchCurrentMap();
+
+ // Restructure Maplist
+ $this->restructureMapList();
+ }
+
+ /**
+ * Handle AfterInit callback
+ */
+ public function handleAfterInit() {
+ // Fetch MX infos
+ $this->mxManager->fetchManiaExchangeMapInformations();
+ }
+
+ /**
+ * Get Current Map
+ *
+ * @return Map currentMap
+ */
+ public function getCurrentMap() {
+ if (!$this->currentMap) {
+ return $this->fetchCurrentMap();
+ }
+ return $this->currentMap;
+ }
+
+ /**
+ * Handle Script BeginMap callback
+ *
+ * @param int $mapNumber
+ */
+ public function handleScriptBeginMap($mapNumber) {
+ $this->handleBeginMap(array());
+ }
+
+ /**
+ * Handle BeginMap callback
+ *
+ * @param array $callback
+ */
+ public function handleBeginMap(array $callback) {
+ if ($this->mapBegan) {
+ return;
+ }
+ $this->mapBegan = true;
+ $this->mapEnded = false;
+
+ if (!isset($callback[1][0]["UId"])) {
+ $this->currentMap = $this->fetchCurrentMap();
+ } else if (array_key_exists($callback[1][0]["UId"], $this->maps)) {
+ // Map already exists, only update index
+ $this->currentMap = $this->maps[$callback[1][0]["UId"]];
+ if (!$this->currentMap->nbCheckpoints || !$this->currentMap->nbLaps) {
+ $rpcMap = $this->maniaControl->client->getCurrentMapInfo();
+ $this->currentMap->nbLaps = $rpcMap->nbLaps;
+ $this->currentMap->nbCheckpoints = $rpcMap->nbCheckpoints;
+ }
+ }
+
+ // Restructure MapList if id is over 15
+ $this->restructureMapList();
+
+ // Update the mx of the map (for update checks, etc.)
+ $this->mxManager->fetchManiaExchangeMapInformations($this->currentMap);
+
+ // Trigger own BeginMap callback (
+ //TODO remove deprecated callback later
+ $this->maniaControl->callbackManager->triggerCallback(self::CB_BEGINMAP, $this->currentMap);
+ $this->maniaControl->callbackManager->triggerCallback(Callbacks::BEGINMAP, $this->currentMap);
+ }
+
+ /**
+ * Handle Script EndMap Callback
+ *
+ * @param int $mapNumber
+ */
+ public function handleScriptEndMap($mapNumber) {
+ $this->handleEndMap(array());
+ }
+
+ /**
+ * Handle EndMap Callback
+ *
+ * @param array $callback
+ */
+ public function handleEndMap(array $callback) {
+ if ($this->mapEnded) {
+ return;
+ }
+ $this->mapEnded = true;
+ $this->mapBegan = false;
+
+ // Trigger own EndMap callback
+ $this->maniaControl->callbackManager->triggerCallback(self::CB_ENDMAP, $this->currentMap);
+ //TODO remove deprecated callback later
+ $this->maniaControl->callbackManager->triggerCallback(Callbacks::ENDMAP, $this->currentMap);
+ }
+
+ /**
+ * Handle Maps Modified Callback
+ *
+ * @param array $callback
+ */
+ public function mapsModified(array $callback) {
+ $this->updateFullMapList();
+ }
+
+ /**
+ * Get the Number of Maps
+ *
+ * @return int
+ */
+ public function getMapsCount() {
+ return count($this->maps);
+ }
// TODO: add local map by filename
}
diff --git a/application/core/Maps/MapQueue.php b/application/core/Maps/MapQueue.php
index 81e93b75..eceec27b 100644
--- a/application/core/Maps/MapQueue.php
+++ b/application/core/Maps/MapQueue.php
@@ -14,9 +14,9 @@ use ManiaControl\Players\Player;
/**
* MapQueue Class
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class MapQueue implements CallbackListener, CommandListener {
/*
@@ -34,7 +34,7 @@ class MapQueue implements CallbackListener, CommandListener {
const ADMIN_COMMAND_CLEAR_MAPQUEUE = 'clearmapqueue';
const ADMIN_COMMAND_CLEAR_JUKEBOX = 'clearjukebox';
-
+
/*
* Private Properties
*/
@@ -75,7 +75,7 @@ class MapQueue implements CallbackListener, CommandListener {
* Adds current map to buffer on startup
*/
public function handleAfterInit() {
- $currentMap = $this->maniaControl->mapManager->getCurrentMap();
+ $currentMap = $this->maniaControl->mapManager->getCurrentMap();
$this->buffer[] = $currentMap->uid;
}
@@ -90,6 +90,34 @@ class MapQueue implements CallbackListener, CommandListener {
$this->clearMapQueue($admin);
}
+ /**
+ * Clears the Map Queue
+ *
+ * @param $admin
+ */
+ public function clearMapQueue($admin) {
+ if (!$this->maniaControl->authenticationManager->checkPermission($admin, self::SETTING_PERMISSION_CLEAR_MAPQUEUE)) {
+ $this->maniaControl->authenticationManager->sendNotAllowed($admin);
+ return;
+ }
+
+ if (count($this->queuedMaps) == 0) {
+ $this->maniaControl->chat->sendError('$fa0There are no maps in the jukebox!', $admin->login);
+ return;
+ }
+
+ $title = $this->maniaControl->authenticationManager->getAuthLevelName($admin->authLevel);
+
+ //Destroy map - queue list
+ $this->queuedMaps = array();
+
+ $this->maniaControl->chat->sendInformation('$fa0' . $title . ' $<$fff' . $admin->nickname . '$> cleared the Queued-Map list!');
+ $this->maniaControl->log($title . ' ' . Formatter::stripCodes($admin->nickname) . ' cleared the Queued-Map list!');
+
+ // Trigger callback
+ $this->maniaControl->callbackManager->triggerCallback(self::CB_MAPQUEUE_CHANGED, array('clear'));
+ }
+
/**
* Handles the mapqueue/jukebox command
*
@@ -99,12 +127,12 @@ class MapQueue implements CallbackListener, CommandListener {
public function command_MapQueue(array $chat, Player $player) {
$chatCommands = explode(' ', $chat[1][2]);
- if(isset($chatCommands[1])) {
- if($chatCommands[1] == ' ' || $chatCommands[1] == 'list') {
+ if (isset($chatCommands[1])) {
+ if ($chatCommands[1] == ' ' || $chatCommands[1] == 'list') {
$this->showMapQueue($player);
- } elseif($chatCommands[1] == 'display') {
+ } elseif ($chatCommands[1] == 'display') {
$this->showMapQueueManialink($player);
- } elseif($chatCommands[1] == 'clear') {
+ } elseif ($chatCommands[1] == 'clear') {
$this->clearMapQueue($player);
}
} else {
@@ -118,15 +146,15 @@ class MapQueue implements CallbackListener, CommandListener {
* @param $player
*/
public function showMapQueue($player) {
- if(count($this->queuedMaps) == 0) {
+ if (count($this->queuedMaps) == 0) {
$this->maniaControl->chat->sendError('$fa0There are no maps in the jukebox!', $player->login);
return;
}
$message = '$fa0Upcoming maps in the Map-Queue:';
- $i = 1;
- foreach($this->queuedMaps as $queuedMap) {
- $message .= ' $<$fff'.$i.'$>. [$<$fff'.Formatter::stripCodes($queuedMap[1]->name).'$>]';
+ $i = 1;
+ foreach ($this->queuedMaps as $queuedMap) {
+ $message .= ' $<$fff' . $i . '$>. [$<$fff' . Formatter::stripCodes($queuedMap[1]->name) . '$>]';
$i++;
}
@@ -139,13 +167,13 @@ class MapQueue implements CallbackListener, CommandListener {
* @param $player
*/
public function showMapQueueManialink($player) {
- if(count($this->queuedMaps) == 0) {
+ if (count($this->queuedMaps) == 0) {
$this->maniaControl->chat->sendError('$fa0There are no maps in the jukebox!', $player->login);
return;
}
$maps = array();
- foreach($this->queuedMaps as $queuedMap) {
+ foreach ($this->queuedMaps as $queuedMap) {
$maps[] = $queuedMap[1];
}
@@ -161,34 +189,6 @@ class MapQueue implements CallbackListener, CommandListener {
return $this->buffer;
}
- /**
- * Clears the Map Queue
- *
- * @param $admin
- */
- public function clearMapQueue($admin) {
- if (!$this->maniaControl->authenticationManager->checkPermission($admin, self::SETTING_PERMISSION_CLEAR_MAPQUEUE)) {
- $this->maniaControl->authenticationManager->sendNotAllowed($admin);
- return;
- }
-
- if(count($this->queuedMaps) == 0) {
- $this->maniaControl->chat->sendError('$fa0There are no maps in the jukebox!', $admin->login);
- return;
- }
-
- $title = $this->maniaControl->authenticationManager->getAuthLevelName($admin->authLevel);
-
- //Destroy map - queue list
- $this->queuedMaps = array();
-
- $this->maniaControl->chat->sendInformation('$fa0'. $title . ' $<$fff' . $admin->nickname . '$> cleared the Queued-Map list!');
- $this->maniaControl->log($title . ' ' . Formatter::stripCodes($admin->nickname) . ' cleared the Queued-Map list!');
-
- // Trigger callback
- $this->maniaControl->callbackManager->triggerCallback(self::CB_MAPQUEUE_CHANGED, array('clear'));
- }
-
/**
* Adds map as first map in queue (for /replay)
*
@@ -216,15 +216,13 @@ class MapQueue implements CallbackListener, CommandListener {
//Check if player is allowed to add (another) map
$admin = false;
- if($this->maniaControl->authenticationManager->checkRight($player, 2) ||
- $this->maniaControl->authenticationManager->checkRight($player, 3) ||
- $this->maniaControl->authenticationManager->checkRight($player, 4)) {
+ if ($this->maniaControl->authenticationManager->checkRight($player, 2) || $this->maniaControl->authenticationManager->checkRight($player, 3) || $this->maniaControl->authenticationManager->checkRight($player, 4)) {
$admin = true;
}
$mapsForPlayer = 0;
- foreach($this->queuedMaps as $queuedMap) {
- if($queuedMap[0]->login == $login) {
+ foreach ($this->queuedMaps as $queuedMap) {
+ if ($queuedMap[0]->login == $login) {
$mapsForPlayer++;
}
}
@@ -232,14 +230,14 @@ class MapQueue implements CallbackListener, CommandListener {
$maxPlayer = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAPLIMIT_PLAYER);
$maxAdmin = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAPLIMIT_ADMIN);
- if($admin && $maxAdmin != -1) {
- if($mapsForPlayer == $maxAdmin) {
- $this->maniaControl->chat->sendError('You already have $<$fff'.$maxAdmin.'$> map(s) in the Map-Queue!', $login);
+ if ($admin && $maxAdmin != -1) {
+ if ($mapsForPlayer == $maxAdmin) {
+ $this->maniaControl->chat->sendError('You already have $<$fff' . $maxAdmin . '$> map(s) in the Map-Queue!', $login);
return;
}
- } elseif(!$admin && $maxPlayer != -1) {
- if($mapsForPlayer == $maxPlayer) {
- $this->maniaControl->chat->sendError('You already have $<$fff'.$maxPlayer.'$> map(s) in the Map-Queue!', $login);
+ } elseif (!$admin && $maxPlayer != -1) {
+ if ($mapsForPlayer == $maxPlayer) {
+ $this->maniaControl->chat->sendError('You already have $<$fff' . $maxPlayer . '$> map(s) in the Map-Queue!', $login);
return;
}
}
@@ -252,7 +250,7 @@ class MapQueue implements CallbackListener, CommandListener {
//TODO recently maps not able to add to queue-amps setting, and management
// Check if map is in the buffer
- if(in_array($uid, $this->buffer)) {
+ if (in_array($uid, $this->buffer)) {
$this->maniaControl->chat->sendError('That map has recently been played!', $login);
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CLEAR_MAPQUEUE)) {
return;
@@ -297,10 +295,10 @@ class MapQueue implements CallbackListener, CommandListener {
*/
public function endMap(Map $map) {
$this->nextMap = null;
- if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_SKIP_MAP_ON_LEAVE) == TRUE) {
+ if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_SKIP_MAP_ON_LEAVE) == true) {
//Skip Map if requester has left
- foreach($this->queuedMaps as $queuedMap) {
+ foreach ($this->queuedMaps as $queuedMap) {
$player = $queuedMap[0];
//found player, so play this map
@@ -308,7 +306,7 @@ class MapQueue implements CallbackListener, CommandListener {
break;
}
- if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_SKIP_MAPQUEUE_ADMIN) == FALSE) {
+ if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_SKIP_MAPQUEUE_ADMIN) == false) {
//Check if the queuer is a admin
if ($player->authLevel > 0) {
break;
@@ -321,7 +319,7 @@ class MapQueue implements CallbackListener, CommandListener {
//Player not found, so remove the map from the mapqueue
array_shift($this->queuedMaps);
- $this->maniaControl->chat->sendInformation('$fa0$<$fff' . $queuedMap[0]->name .'$> is skipped because $<' . $player->nickname . '$> left the game!');
+ $this->maniaControl->chat->sendInformation('$fa0$<$fff' . $queuedMap[0]->name . '$> is skipped because $<' . $player->nickname . '$> left the game!');
}
}
@@ -332,7 +330,7 @@ class MapQueue implements CallbackListener, CommandListener {
return;
}
$map = $this->nextMap[1];
- $this->maniaControl->chat->sendInformation('$fa0Next map will be $<$fff' . $map->name .'$> as requested by $<' . $this->nextMap[0]->nickname . '$>.');
+ $this->maniaControl->chat->sendInformation('$fa0Next map will be $<$fff' . $map->name . '$> as requested by $<' . $this->nextMap[0]->nickname . '$>.');
$this->maniaControl->client->chooseNextMap($map->fileName);
}
@@ -343,11 +341,11 @@ class MapQueue implements CallbackListener, CommandListener {
* @param Map $map
*/
public function beginMap(Map $map) {
- if(in_array($map->uid, $this->buffer)) {
+ if (in_array($map->uid, $this->buffer)) {
return;
}
- if(count($this->buffer) >= $this->maniaControl->settingManager->getSetting($this, self::SETTING_BUFFERSIZE)) {
+ if (count($this->buffer) >= $this->maniaControl->settingManager->getSetting($this, self::SETTING_BUFFERSIZE)) {
array_shift($this->buffer);
}
@@ -370,7 +368,7 @@ class MapQueue implements CallbackListener, CommandListener {
* @return array(Player $player, Map $map)
*/
public function getNextQueuedMap() {
- foreach($this->queuedMaps as $queuedMap) {
+ foreach ($this->queuedMaps as $queuedMap) {
//return the first Queued Map
return $queuedMap;
}
@@ -385,7 +383,7 @@ class MapQueue implements CallbackListener, CommandListener {
public function getQueuedMapsRanking() {
$i = 1;
$queuedMaps = array();
- foreach($this->queuedMaps as $queuedMap) {
+ foreach ($this->queuedMaps as $queuedMap) {
$map = $queuedMap[1];
$queuedMaps[$map->uid] = $i;
$i++;
@@ -407,7 +405,7 @@ class MapQueue implements CallbackListener, CommandListener {
* Dummy Function for testing
*/
public function printAllMaps() {
- foreach($this->queuedMaps as $map) {
+ foreach ($this->queuedMaps as $map) {
$map = $map[1];
var_dump($map->name);
}
diff --git a/application/core/Players/Player.php b/application/core/Players/Player.php
index 46955506..ce405551 100644
--- a/application/core/Players/Player.php
+++ b/application/core/Players/Player.php
@@ -7,9 +7,9 @@ use ManiaControl\Formatter;
/**
* Player Model Class
*
- * @author kremsy & steeffeen
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Player {
/*
@@ -72,7 +72,7 @@ class Player {
$this->pid = $mpPlayer->playerId;
$this->login = $mpPlayer->login;
$this->nickname = Formatter::stripDirtyCodes($mpPlayer->nickName);
- $this->rawNickname = $mpPlayer->nickName;
+ $this->rawNickname = $mpPlayer->nickName;
$this->path = $mpPlayer->path;
$this->language = $mpPlayer->language;
$this->avatar = $mpPlayer->avatar['FileName'];
diff --git a/application/core/Players/PlayerActions.php b/application/core/Players/PlayerActions.php
index cef6d7ff..2d9a7327 100644
--- a/application/core/Players/PlayerActions.php
+++ b/application/core/Players/PlayerActions.php
@@ -21,8 +21,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\PlayerNotIgnoredException;
/**
* Player Actions Class
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PlayerActions {
@@ -70,50 +70,6 @@ class PlayerActions {
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_FORCE_PLAYER_SPEC, AuthenticationManager::AUTH_LEVEL_MODERATOR);
}
- /**
- * Force a Player to Play
- *
- * @param string $adminLogin
- * @param string $targetLogin
- * @param bool $userIsAbleToSelect
- * @param bool $displayAnnouncement
- * @internal param int $type
- */
- public function forcePlayerToPlay($adminLogin, $targetLogin, $userIsAbleToSelect = true, $displayAnnouncement = true) {
- $admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
- if (!$this->maniaControl->authenticationManager->checkPermission($admin, self::SETTING_PERMISSION_FORCE_PLAYER_PLAY)) {
- $this->maniaControl->authenticationManager->sendNotAllowed($admin);
- return;
- }
- $target = $this->maniaControl->playerManager->getPlayer($targetLogin);
- if (!$target) {
- return;
- }
-
- try {
- $this->maniaControl->client->forceSpectator($target->login, self::SPECTATOR_PLAYER);
- } catch(FaultException $e) {
- //TODO exception 'There are too many players' appeared 28.04.2014, wait for more before add to faultexception
- $this->maniaControl->chat->sendException($e, $admin->login);
- return;
- }
-
- if ($userIsAbleToSelect) {
- try {
- $this->maniaControl->client->forceSpectator($target->login, self::SPECTATOR_USER_SELECTABLE);
- } catch(Exception $e) {
- $this->maniaControl->chat->sendException($e, $admin->login);
- return;
- }
- }
-
- // Announce force
- if ($displayAnnouncement) {
- $chatMessage = '$<' . $admin->nickname . '$> forced $<' . $target->nickname . '$> to Play!';
- $this->maniaControl->chat->sendInformation($chatMessage);
- }
- }
-
/**
* Force a Player to a certain Team
*
@@ -138,7 +94,7 @@ class PlayerActions {
try {
$this->maniaControl->client->forcePlayerTeam($target->login, $teamId);
- } catch(NotInTeamModeException $e) {
+ } catch (NotInTeamModeException $e) {
$this->forcePlayerToPlay($adminLogin, $targetLogin);
return;
}
@@ -157,6 +113,50 @@ class PlayerActions {
$this->maniaControl->log($chatMessage, true);
}
+ /**
+ * Force a Player to Play
+ *
+ * @param string $adminLogin
+ * @param string $targetLogin
+ * @param bool $userIsAbleToSelect
+ * @param bool $displayAnnouncement
+ * @internal param int $type
+ */
+ public function forcePlayerToPlay($adminLogin, $targetLogin, $userIsAbleToSelect = true, $displayAnnouncement = true) {
+ $admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
+ if (!$this->maniaControl->authenticationManager->checkPermission($admin, self::SETTING_PERMISSION_FORCE_PLAYER_PLAY)) {
+ $this->maniaControl->authenticationManager->sendNotAllowed($admin);
+ return;
+ }
+ $target = $this->maniaControl->playerManager->getPlayer($targetLogin);
+ if (!$target) {
+ return;
+ }
+
+ try {
+ $this->maniaControl->client->forceSpectator($target->login, self::SPECTATOR_PLAYER);
+ } catch (FaultException $e) {
+ //TODO exception 'There are too many players' appeared 28.04.2014, wait for more before add to faultexception
+ $this->maniaControl->chat->sendException($e, $admin->login);
+ return;
+ }
+
+ if ($userIsAbleToSelect) {
+ try {
+ $this->maniaControl->client->forceSpectator($target->login, self::SPECTATOR_USER_SELECTABLE);
+ } catch (Exception $e) {
+ $this->maniaControl->chat->sendException($e, $admin->login);
+ return;
+ }
+ }
+
+ // Announce force
+ if ($displayAnnouncement) {
+ $chatMessage = '$<' . $admin->nickname . '$> forced $<' . $target->nickname . '$> to Play!';
+ $this->maniaControl->chat->sendInformation($chatMessage);
+ }
+ }
+
/**
* Force a Player to Spectator
*
@@ -179,7 +179,7 @@ class PlayerActions {
try {
$this->maniaControl->client->forceSpectator($target->login, $spectatorState);
- } catch(Exception $e) {
+ } catch (Exception $e) {
$this->maniaControl->chat->sendException($e, $admin->login);
return;
}
@@ -193,7 +193,7 @@ class PlayerActions {
// Free player slot
try {
$this->maniaControl->client->spectatorReleasePlayerSlot($target->login);
- } catch(PlayerIsNotSpectatorException $e) {
+ } catch (PlayerIsNotSpectatorException $e) {
}
}
}
@@ -203,7 +203,6 @@ class PlayerActions {
*
* @param string $adminLogin
* @param string $targetLogin
- * @param int $spectatorState
*/
public function unMutePlayer($adminLogin, $targetLogin) {
$admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
@@ -218,9 +217,9 @@ class PlayerActions {
return;
}
- try{
+ try {
$this->maniaControl->client->unIgnore($targetLogin);
- }catch(PlayerNotIgnoredException $e){
+ } catch (PlayerNotIgnoredException $e) {
$this->maniaControl->chat->sendError("Player is not ignored!");
return;
}
@@ -236,7 +235,6 @@ class PlayerActions {
*
* @param string $adminLogin
* @param string $targetLogin
- * @param int $spectatorState
*/
public function mutePlayer($adminLogin, $targetLogin) {
$admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
@@ -251,9 +249,9 @@ class PlayerActions {
return;
}
- try{
+ try {
$this->maniaControl->client->ignore($targetLogin);
- }catch(PlayerAlreadyIgnoredException $e){
+ } catch (PlayerAlreadyIgnoredException $e) {
$this->maniaControl->chat->sendError("Player already ignored!");
return;
}
@@ -324,7 +322,7 @@ class PlayerActions {
$label->setTextColor('f00');
$y = $height / 2 - 15;
- foreach($message as $line) {
+ foreach ($message as $line) {
// Message lines
$label = new Label_Text();
$frame->add($label);
@@ -370,7 +368,7 @@ class PlayerActions {
} else {
$this->maniaControl->client->kick($target->login, $message);
}
- } catch(Exception $e) {
+ } catch (Exception $e) {
$this->maniaControl->chat->sendException($e, $admin->login);
return;
}
@@ -497,7 +495,7 @@ class PlayerActions {
*/
public function isPlayerMuted($login) {
$ignoreList = $this->maniaControl->client->getIgnoreList(100, 0);
- foreach($ignoreList as $ignoredPlayers) {
+ foreach ($ignoreList as $ignoredPlayers) {
if ($ignoredPlayers->login == $login) {
return true;
}
diff --git a/application/core/Players/PlayerCommands.php b/application/core/Players/PlayerCommands.php
index 93fcc185..efd95ec8 100644
--- a/application/core/Players/PlayerCommands.php
+++ b/application/core/Players/PlayerCommands.php
@@ -15,9 +15,9 @@ use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
/**
* Class offering various Admin Commands related to Players
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PlayerCommands implements CommandListener, ManialinkPageAnswerListener, CallbackListener {
/*
@@ -74,7 +74,7 @@ class PlayerCommands implements CommandListener, ManialinkPageAnswerListener, Ca
/**
* Handle TeamStatusChanged
- *
+ *
* @param bool $teamMode
*/
public function teamStatusChanged($teamMode) {
@@ -103,7 +103,7 @@ class PlayerCommands implements CommandListener, ManialinkPageAnswerListener, Ca
try {
$this->maniaControl->client->autoTeamBalance();
- } catch(Exception $e) {
+ } catch (Exception $e) {
$this->maniaControl->errorHandler->triggerDebugNotice("PlayerCommands Debug Line 112: " . $e->getMessage());
// TODO: only catch 'not in team mode' exception - throw others (like connection error)
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
@@ -167,8 +167,8 @@ class PlayerCommands implements CommandListener, ManialinkPageAnswerListener, Ca
* @param array $chatCallback
* @param Player $player
*/
- public function command_Warn(array $chat, Player $player) {
- $params = explode(' ', $chat[1][2], 3);
+ public function command_Warn(array $chatCallback, Player $player) {
+ $params = explode(' ', $chatCallback[1][2], 3);
if (count($params) <= 1) {
$this->maniaControl->chat->sendUsageInfo("No Login given! Example: '//kick login'", $player->login);
return;
diff --git a/application/core/Players/PlayerDataManager.php b/application/core/Players/PlayerDataManager.php
index eedd87af..bcf0fdc9 100644
--- a/application/core/Players/PlayerDataManager.php
+++ b/application/core/Players/PlayerDataManager.php
@@ -8,8 +8,8 @@ use ManiaControl\ManiaControl;
/**
* Player Data Manager
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PlayerDataManager {
@@ -42,200 +42,6 @@ class PlayerDataManager {
$this->storeMetaData();
}
- /**
- * Destroys the stored PlayerData (Method get called by PlayerManager, so don't call it anywhere else)
- *
- * @param Player $player
- */
- public function destroyPlayerData(Player $player) {
- unset($this->storedData[$player->index]);
- }
-
- /**
- * Defines the Player-Data MetaData
- *
- * @param $object
- * @param $dataName
- * @param $default
- * @param $dataDescription (optional)
- * @return bool
- */
- public function defineMetaData($object, $dataName, $default, $dataDescription = '') {
- $mysqli = $this->maniaControl->database->mysqli;
- $className = $this->getClassName($object);
-
- $query = "INSERT INTO `" . self::TABLE_PLAYERDATAMETADATA . "` (
- `class`,
- `dataName`,
- `type`,
- `defaultValue`,
- `description`
- ) VALUES (
- ?, ?, ?, ?, ?
- ) ON DUPLICATE KEY UPDATE
- `type` = VALUES(`type`),
- `defaultValue` = VALUES(`defaultValue`),
- `description` = VALUES(`description`);";
- $statement = $mysqli->prepare($query);
- if ($mysqli->error) {
- trigger_error($mysqli->error);
- return false;
- }
- $type = $this->getType($default);
-
- $statement->bind_param('sssss', $className, $dataName, $type, $default, $dataDescription);
- $statement->execute();
- if ($statement->error) {
- trigger_error($statement->error);
- $statement->close();
- return false;
- }
- $statement->close();
- return true;
- }
-
- /**
- * Store Meta Data from the Database in the Ram
- */
- private function storeMetaData() {
- $mysqli = $this->maniaControl->database->mysqli;
-
- $query = "SELECT * FROM `" . self::TABLE_PLAYERDATAMETADATA . "`;";
- $result = $mysqli->query($query);
- if (!$result) {
- trigger_error($mysqli->error);
- return;
- }
-
- while($row = $result->fetch_object()) {
- $this->metaData[$row->class . $row->dataName] = $row;
- }
- $result->close();
- }
-
- /**
- * Gets the Player Data
- *
- * @param $object
- * @param $dataName
- * @param Player $player
- * @param $serverIndex
- * @return mixed|null
- */
- public function getPlayerData($object, $statName, Player $player, $serverIndex = -1) {
- $className = $this->getClassName($object);
-
- $meta = $this->metaData[$className . $statName];
-
- //Check if data is already in the ram
- if (isset($this->storedData[$player->index])) {
- if (isset($this->storedData[$player->index][$meta->dataId])) {
- return $this->storedData[$player->index][$meta->dataId];
- }
- }
-
- $mysqli = $this->maniaControl->database->mysqli;
- $dataQuery = "SELECT `value` FROM `" . self::TABLE_PLAYERDATA . "`
- WHERE `dataId` = ?
- AND `playerId` = ?
- AND `serverIndex` = ?;";
- $dataStatement = $mysqli->prepare($dataQuery);
- if ($mysqli->error) {
- trigger_error($mysqli->error);
- return null;
- }
- $dataStatement->bind_param('iii', $meta->dataId, $player->index, $serverIndex);
- $dataStatement->execute();
- if ($dataStatement->error) {
- trigger_error($dataStatement->error);
- return null;
- }
- $dataStatement->store_result();
- if ($dataStatement->num_rows <= 0) {
- $this->setPlayerData($object, $statName, $player, $meta->defaultValue, $serverIndex);
- return $meta->default;
- }
- $dataStatement->bind_result($value);
- $dataStatement->fetch();
- $dataStatement->free_result();
- $dataStatement->close();
- $data = $this->castSetting($meta->type, $value);
-
- //Store setting in the ram
- if (!isset($this->storedData[$player->index])) {
- $this->storedData[$player->index] = array();
- }
- $this->storedData[$player->index][$meta->dataId] = $data;
- return $data;
- }
-
- /**
- * Set a PlayerData to a specific defined statMetaData
- *
- * @param $object
- * @param $statName
- * @param Player $player
- * @param $value
- * @param $serverIndex (let it empty if its global)
- * @return bool
- */
- public function setPlayerData($object, $dataName, Player $player, $value, $serverIndex = -1) {
- $className = $this->getClassName($object);
- if (!$player) {
- return false;
- }
-
- $dataId = $this->getMetaDataId($className, $dataName);
- if (!$dataId) {
- return false;
- }
-
- $mysqli = $this->maniaControl->database->mysqli;
- $query = "INSERT INTO `" . self::TABLE_PLAYERDATA . "` (
- `serverIndex`,
- `playerId`,
- `dataId`,
- `value`
- ) VALUES (
- ?, ?, ?, ?
- ) ON DUPLICATE KEY UPDATE
- `value` = VALUES(`value`);";
- $statement = $mysqli->prepare($query);
- if ($mysqli->error) {
- trigger_error($mysqli->error);
- return false;
- }
- $statement->bind_param('iiis', $serverIndex, $player->index, $dataId, $value);
- $statement->execute();
- if ($statement->error) {
- trigger_error($statement->error);
- $statement->close();
- return false;
- }
- $statement->close();
-
- //FIXME store changed value
- if (isset($this->storedData[$player->index]) && isset($this->storedData[$player->index][$dataId])) {
- unset($this->storedData[$player->index][$dataId]);
- }
-
- return true;
- }
-
- /**
- * Return the Id of the MetaData
- *
- * @param $statName
- * @return int
- */
- private function getMetaDataId($className, $statName) {
- if (isset($this->metaData[$className . $statName])) {
- $stat = $this->metaData[$className . $statName];
- return (int)$stat->dataId;
- }
- return null;
- }
-
/**
* Initialize necessary database tables
*
@@ -291,6 +97,94 @@ class PlayerDataManager {
return true;
}
+ /**
+ * Store Meta Data from the Database in the Ram
+ */
+ private function storeMetaData() {
+ $mysqli = $this->maniaControl->database->mysqli;
+
+ $query = "SELECT * FROM `" . self::TABLE_PLAYERDATAMETADATA . "`;";
+ $result = $mysqli->query($query);
+ if (!$result) {
+ trigger_error($mysqli->error);
+ return;
+ }
+
+ while ($row = $result->fetch_object()) {
+ $this->metaData[$row->class . $row->dataName] = $row;
+ }
+ $result->close();
+ }
+
+ /**
+ * Destroys the stored PlayerData (Method get called by PlayerManager, so don't call it anywhere else)
+ *
+ * @param Player $player
+ */
+ public function destroyPlayerData(Player $player) {
+ unset($this->storedData[$player->index]);
+ }
+
+ /**
+ * Defines the Player-Data MetaData
+ *
+ * @param $object
+ * @param $dataName
+ * @param $default
+ * @param $dataDescription (optional)
+ * @return bool
+ */
+ public function defineMetaData($object, $dataName, $default, $dataDescription = '') {
+ $mysqli = $this->maniaControl->database->mysqli;
+ $className = $this->getClassName($object);
+
+ $query = "INSERT INTO `" . self::TABLE_PLAYERDATAMETADATA . "` (
+ `class`,
+ `dataName`,
+ `type`,
+ `defaultValue`,
+ `description`
+ ) VALUES (
+ ?, ?, ?, ?, ?
+ ) ON DUPLICATE KEY UPDATE
+ `type` = VALUES(`type`),
+ `defaultValue` = VALUES(`defaultValue`),
+ `description` = VALUES(`description`);";
+ $statement = $mysqli->prepare($query);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error);
+ return false;
+ }
+ $type = $this->getType($default);
+
+ $statement->bind_param('sssss', $className, $dataName, $type, $default, $dataDescription);
+ $statement->execute();
+ if ($statement->error) {
+ trigger_error($statement->error);
+ $statement->close();
+ return false;
+ }
+ $statement->close();
+ return true;
+ }
+
+ /**
+ * Get Class Name of a Parameter
+ *
+ * @param mixed $param
+ * @return string
+ */
+ private function getClassName($param) {
+ if (is_object($param)) {
+ return get_class($param);
+ }
+ if (is_string($param)) {
+ return $param;
+ }
+ trigger_error('Invalid class param. ' . $param);
+ return (string)$param;
+ }
+
/**
* Get Type of a Parameter
*
@@ -317,6 +211,130 @@ class PlayerDataManager {
return null;
}
+ /**
+ * Gets the Player Data
+ *
+ * @param mixed $object
+ * @param string $dataName
+ * @param Player $player
+ * @param int $serverIndex
+ * @return mixed|null
+ */
+ public function getPlayerData($object, $dataName, Player $player, $serverIndex = -1) {
+ $className = $this->getClassName($object);
+
+ $meta = $this->metaData[$className . $dataName];
+
+ //Check if data is already in the ram
+ if (isset($this->storedData[$player->index])) {
+ if (isset($this->storedData[$player->index][$meta->dataId])) {
+ return $this->storedData[$player->index][$meta->dataId];
+ }
+ }
+
+ $mysqli = $this->maniaControl->database->mysqli;
+ $dataQuery = "SELECT `value` FROM `" . self::TABLE_PLAYERDATA . "`
+ WHERE `dataId` = ?
+ AND `playerId` = ?
+ AND `serverIndex` = ?;";
+ $dataStatement = $mysqli->prepare($dataQuery);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error);
+ return null;
+ }
+ $dataStatement->bind_param('iii', $meta->dataId, $player->index, $serverIndex);
+ $dataStatement->execute();
+ if ($dataStatement->error) {
+ trigger_error($dataStatement->error);
+ return null;
+ }
+ $dataStatement->store_result();
+ if ($dataStatement->num_rows <= 0) {
+ $this->setPlayerData($object, $dataName, $player, $meta->defaultValue, $serverIndex);
+ return $meta->default;
+ }
+ $dataStatement->bind_result($value);
+ $dataStatement->fetch();
+ $dataStatement->free_result();
+ $dataStatement->close();
+ $data = $this->castSetting($meta->type, $value);
+
+ //Store setting in the ram
+ if (!isset($this->storedData[$player->index])) {
+ $this->storedData[$player->index] = array();
+ }
+ $this->storedData[$player->index][$meta->dataId] = $data;
+ return $data;
+ }
+
+ /**
+ * Set a PlayerData to a specific defined statMetaData
+ *
+ * @param mixed $object
+ * @param string $dataName
+ * @param Player $player
+ * @param mixed $value
+ * @param int $serverIndex (let it empty if its global)
+ * @return bool
+ */
+ public function setPlayerData($object, $dataName, Player $player, $value, $serverIndex = -1) {
+ $className = $this->getClassName($object);
+ if (!$player) {
+ return false;
+ }
+
+ $dataId = $this->getMetaDataId($className, $dataName);
+ if (!$dataId) {
+ return false;
+ }
+
+ $mysqli = $this->maniaControl->database->mysqli;
+ $query = "INSERT INTO `" . self::TABLE_PLAYERDATA . "` (
+ `serverIndex`,
+ `playerId`,
+ `dataId`,
+ `value`
+ ) VALUES (
+ ?, ?, ?, ?
+ ) ON DUPLICATE KEY UPDATE
+ `value` = VALUES(`value`);";
+ $statement = $mysqli->prepare($query);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error);
+ return false;
+ }
+ $statement->bind_param('iiis', $serverIndex, $player->index, $dataId, $value);
+ $statement->execute();
+ if ($statement->error) {
+ trigger_error($statement->error);
+ $statement->close();
+ return false;
+ }
+ $statement->close();
+
+ //FIXME store changed value
+ if (isset($this->storedData[$player->index]) && isset($this->storedData[$player->index][$dataId])) {
+ unset($this->storedData[$player->index][$dataId]);
+ }
+
+ return true;
+ }
+
+ /**
+ * Return the Id of the MetaData
+ *
+ * @param string $className
+ * @param string $statName
+ * @return int
+ */
+ private function getMetaDataId($className, $statName) {
+ if (isset($this->metaData[$className . $statName])) {
+ $stat = $this->metaData[$className . $statName];
+ return (int)$stat->dataId;
+ }
+ return null;
+ }
+
/**
* Cast a Setting to the given Type
*
@@ -343,21 +361,4 @@ class PlayerDataManager {
trigger_error('Unsupported setting type. ' . print_r($type, true));
return $value;
}
-
- /**
- * Get Class Name of a Parameter
- *
- * @param mixed $param
- * @return string
- */
- private function getClassName($param) {
- if (is_object($param)) {
- return get_class($param);
- }
- if (is_string($param)) {
- return $param;
- }
- trigger_error('Invalid class param. ' . $param);
- return (string)$param;
- }
}
\ No newline at end of file
diff --git a/application/core/Players/PlayerDetailed.php b/application/core/Players/PlayerDetailed.php
index 4b9ab3b0..c0162271 100644
--- a/application/core/Players/PlayerDetailed.php
+++ b/application/core/Players/PlayerDetailed.php
@@ -14,13 +14,14 @@ use ManiaControl\Formatter;
use ManiaControl\ManiaControl;
use ManiaControl\Manialinks\ManialinkManager;
use ManiaControl\Statistics\StatisticManager;
+use Maniaplanet\DedicatedServer\Structures\Player;
/**
* Player Detailed Page
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PlayerDetailed {
/*
@@ -48,8 +49,14 @@ class PlayerDetailed {
$this->quadSubstyle = $this->maniaControl->manialinkManager->styleManager->getDefaultMainWindowSubStyle();
}
-
+ /**
+ * Show a Frame with detailed Information about the Target Player
+ *
+ * @param Player $player
+ * @param string $targetLogin
+ */
public function showPlayerDetailed(Player $player, $targetLogin) {
+ /** @var Player $target */
$target = $this->maniaControl->playerManager->getPlayer($targetLogin);
//Create ManiaLink
@@ -209,7 +216,13 @@ class PlayerDetailed {
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'PlayerDetailed');
}
- public function statisticsFrame($player) {
+ /**
+ * Build a Frame with Statistics about the given Player
+ *
+ * @param Player $player
+ * @return Frame
+ */
+ public function statisticsFrame(Player $player) {
$frame = new Frame();
$playerStats = $this->maniaControl->statisticManager->getAllPlayerStats($player);
@@ -217,7 +230,7 @@ class PlayerDetailed {
$x = -$this->width / 2 + 52;
$id = 1;
- foreach($playerStats as $stat) {
+ foreach ($playerStats as $stat) {
$statProperties = $stat[0];
$value = $stat[1];
diff --git a/application/core/Players/PlayerList.php b/application/core/Players/PlayerList.php
index e2099acd..1c5536e2 100644
--- a/application/core/Players/PlayerList.php
+++ b/application/core/Players/PlayerList.php
@@ -2,7 +2,6 @@
namespace ManiaControl\Players;
-use MCTeam\CustomVotesPlugin;
use FML\Controls\Control;
use FML\Controls\Frame;
use FML\Controls\Labels\Label_Button;
@@ -23,14 +22,16 @@ use ManiaControl\Formatter;
use ManiaControl\ManiaControl;
use ManiaControl\Manialinks\ManialinkManager;
use ManiaControl\Manialinks\ManialinkPageAnswerListener;
+use Maniaplanet\DedicatedServer\Structures\Player;
use Maniaplanet\DedicatedServer\Xmlrpc\LoginUnknownException;
use Maniaplanet\DedicatedServer\Xmlrpc\PlayerIsNotSpectatorException;
+use MCTeam\CustomVotesPlugin;
/**
* PlayerList Widget Class
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PlayerList implements ManialinkPageAnswerListener, CallbackListener, TimerListener {
@@ -96,6 +97,39 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$this->playersListShown[$player->login] = $showStatus;
}
+ /**
+ * Unset the player if he opened another Main Widget
+ *
+ * @param Player $player
+ * @param $openedWidget
+ */
+ public function handleWidgetOpened(Player $player, $openedWidget) {
+ //unset when another main widget got opened
+ if ($openedWidget != 'PlayerList') {
+ unset($this->playersListShown[$player->login]);
+ }
+ }
+
+ /**
+ * Closes the widget
+ *
+ * @param Player $player
+ */
+ public function closeWidget(Player $player) {
+ unset($this->playersListShown[$player->login]);
+ }
+
+ /**
+ * Closes the player advanced widget widget
+ *
+ * @param array $callback
+ * @param Player $player
+ */
+ public function closePlayerAdvancedWidget(array $callback, Player $player) {
+ $this->playersListShown[$player->login] = self::SHOWN_MAIN_WINDOW;
+ $this->showPlayerList($player); // overwrite the manialink
+ }
+
/**
* Show the PlayerList Widget to the Player
*
@@ -115,8 +149,8 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
//create manialink
$maniaLink = new ManiaLink(ManialinkManager::MAIN_MLID);
$script = $maniaLink->getScript();
- $paging = new Paging();
- $script->addFeature($paging);
+ $paging = new Paging();
+ $script->addFeature($paging);
// Main frame
$frame = $this->maniaControl->manialinkManager->styleManager->getDefaultListFrame($script, $pagesId);
@@ -144,7 +178,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$i = 1;
$y = $height / 2 - 10;
$pageFrames = array();
- foreach($players as $listPlayer) {
+ foreach ($players as $listPlayer) {
/** @var Player $listPlayer * */
if (!isset($pageFrame)) {
$pageFrame = new Frame();
@@ -154,7 +188,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
}
array_push($pageFrames, $pageFrame);
$y = $height / 2 - 10;
- $paging->addPage($pageFrame);
+ $paging->addPage($pageFrame);
}
$path = $listPlayer->getProvince();
@@ -193,7 +227,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$teamQuad->setZ(0.1);
$teamQuad->setSize(3.8, 3.8);
- switch($listPlayer->teamId) {
+ switch ($listPlayer->teamId) {
case 0:
$teamQuad->setSubStyle($teamQuad::SUBSTYLE_1);
break;
@@ -221,7 +255,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$countryQuad->setSize(4, 4);
$countryQuad->setZ(1);
- $countryQuad->addTooltipLabelFeature($descriptionLabel, '$<' . $listPlayer->nickname . '$> from ' . $listPlayer->path);
+ $countryQuad->addTooltipLabelFeature($descriptionLabel, '$<' . $listPlayer->nickname . '$> from ' . $listPlayer->path);
}
// Level Quad
@@ -240,8 +274,8 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$rightLabel->setText($this->maniaControl->authenticationManager->getAuthLevelAbbreviation($listPlayer->authLevel));
$rightLabel->setTextColor("fff");
- $description = $this->maniaControl->authenticationManager->getAuthLevelName($listPlayer) . " " . $listPlayer->nickname;
- $rightLabel->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = $this->maniaControl->authenticationManager->getAuthLevelName($listPlayer) . " " . $listPlayer->nickname;
+ $rightLabel->addTooltipLabelFeature($descriptionLabel, $description);
// Player Statistics
$playerQuad = new Quad_Icons64x64_1();
@@ -251,8 +285,8 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$playerQuad->setSubStyle($playerQuad::SUBSTYLE_TrackInfo);
$playerQuad->setSize(2.7, 2.7);
$playerQuad->setAction(self::ACTION_OPEN_PLAYER_DETAILED . "." . $listPlayer->login);
- $description = 'View Statistics of $<'.$listPlayer->nickname. '$>';
- $playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'View Statistics of $<' . $listPlayer->nickname . '$>';
+ $playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
// Camera Quad
$playerQuad = new Quad_UIConstruction_Buttons();
@@ -261,8 +295,8 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$playerQuad->setZ(3);
$playerQuad->setSubStyle($playerQuad::SUBSTYLE_Camera);
$playerQuad->setSize(3.8, 3.8);
- $description = 'Spectate $<'.$listPlayer->nickname.'$>';
- $playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'Spectate $<' . $listPlayer->nickname . '$>';
+ $playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
$playerQuad->setAction(self::ACTION_SPECTATE_PLAYER . "." . $listPlayer->login);
// Player Profile Quad
@@ -272,11 +306,11 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$playerQuad->setZ(3);
$playerQuad->setSubStyle($playerQuad::SUBSTYLE_Author);
$playerQuad->setSize(3.8, 3.8);
- $playerQuad->addPlayerProfileFeature($listPlayer->login);
+ $playerQuad->addPlayerProfileFeature($listPlayer->login);
// Description Label
- $description = 'View Player Profile of $<' . $listPlayer->nickname.'$>';
- $playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'View Player Profile of $<' . $listPlayer->nickname . '$>';
+ $playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
if ($this->maniaControl->authenticationManager->checkRight($player, AuthenticationManager::AUTH_LEVEL_MODERATOR)) {
// Further Player actions Quad
@@ -289,8 +323,8 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$playerQuad->setAction(self::ACTION_PLAYER_ADV . "." . $listPlayer->login);
// Description Label
- $description = 'Advanced Player Actions for $<' . $listPlayer->nickname.'$>';
- $playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'Advanced Player Actions for $<' . $listPlayer->nickname . '$>';
+ $playerQuad->addTooltipLabelFeature($descriptionLabel, $description);
}
if ($this->maniaControl->server->isTeamMode()) {
@@ -305,8 +339,8 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$redQuad->setAction(self::ACTION_FORCE_RED . "." . $listPlayer->login);
// Force to Red-Team Description Label
- $description = 'Force $<' . $listPlayer->nickname . '$> to Red Team!';
- $redQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'Force $<' . $listPlayer->nickname . '$> to Red Team!';
+ $redQuad->addTooltipLabelFeature($descriptionLabel, $description);
// Force to Blue-Team Quad
$blueQuad = new Quad_Emblems();
@@ -318,8 +352,8 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$blueQuad->setAction(self::ACTION_FORCE_BLUE . "." . $listPlayer->login);
// Force to Blue-Team Description Label
- $description = 'Force $<' . $listPlayer->nickname . '$> to Blue Team!';
- $blueQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'Force $<' . $listPlayer->nickname . '$> to Blue Team!';
+ $blueQuad->addTooltipLabelFeature($descriptionLabel, $description);
} else if ($this->maniaControl->pluginManager->isPluginActive(self::DEFAULT_CUSTOM_VOTE_PLUGIN)) {
// Kick Player Vote
@@ -331,8 +365,8 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$kickQuad->setSize(3.8, 3.8);
$kickQuad->setAction(self::ACTION_KICK_PLAYER_VOTE . "." . $listPlayer->login);
- $description = 'Start a Kick Vote on $<' . $listPlayer->nickname . '$>!';
- $kickQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'Start a Kick Vote on $<' . $listPlayer->nickname . '$>!';
+ $kickQuad->addTooltipLabelFeature($descriptionLabel, $description);
}
} else {
if ($this->maniaControl->authenticationManager->checkPermission($player, PlayerActions::SETTING_PERMISSION_FORCE_PLAYER_PLAY)) {
@@ -345,8 +379,8 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$playQuad->setSize(3.8, 3.8);
$playQuad->setAction(self::ACTION_FORCE_PLAY . "." . $listPlayer->login);
- $description = 'Force $<' . $listPlayer->nickname . '$> to Play!';
- $playQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'Force $<' . $listPlayer->nickname . '$> to Play!';
+ $playQuad->addTooltipLabelFeature($descriptionLabel, $description);
}
}
@@ -361,8 +395,8 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$spectatorQuad->setAction(self::ACTION_FORCE_SPEC . "." . $listPlayer->login);
// Force to Spectator Description Label
- $description = 'Force $<' . $listPlayer->nickname . '$> to Spectator!';
- $spectatorQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'Force $<' . $listPlayer->nickname . '$> to Spectator!';
+ $spectatorQuad->addTooltipLabelFeature($descriptionLabel, $description);
} else if ($this->maniaControl->pluginManager->isPluginActive(self::DEFAULT_CUSTOM_VOTE_PLUGIN)) {
// Force to Spectator Quad
$spectatorQuad = new Quad_BgRaceScore2();
@@ -374,8 +408,8 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$spectatorQuad->setAction(self::ACTION_FORCE_SPEC_VOTE . "." . $listPlayer->login);
// Force to Spectator Description Label
- $description = 'Start a Vote to force $<' . $listPlayer->nickname . '$> to Spectator!';
- $spectatorQuad->addTooltipLabelFeature($descriptionLabel, $description);
+ $description = 'Start a Vote to force $<' . $listPlayer->nickname . '$> to Spectator!';
+ $spectatorQuad->addTooltipLabelFeature($descriptionLabel, $description);
}
$y -= 4;
@@ -395,27 +429,14 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$this->maniaControl->manialinkManager->displayWidget($maniaLink, $player, 'PlayerList');
}
- /**
- * Displays the Advanced Player Window
- *
- * @param Player $caller
- * @param $login
- */
- public function advancedPlayerWidget(Player $caller, $login) {
- // Set status to target player login
- $this->playersListShown[$caller->login] = $login;
-
- // Reopen playerlist
- $this->showPlayerList($caller);
- }
-
/**
* Extra window with special actions on players like warn,kick, ban, authorization levels...
*
- * @param $login
+ * @param Player $admin
+ * @param string $login
* @return Frame
*/
- public function showAdvancedPlayerWidget($admin, $login) {
+ public function showAdvancedPlayerWidget(Player $admin, $login) {
$player = $this->maniaControl->playerManager->getPlayer($login);
$width = $this->maniaControl->manialinkManager->styleManager->getListWidgetsWidth();
$height = $this->maniaControl->manialinkManager->styleManager->getListWidgetsHeight();
@@ -608,39 +629,6 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
return $frame;
}
- /**
- * Unset the player if he opened another Main Widget
- *
- * @param Player $player
- * @param $openedWidget
- */
- public function handleWidgetOpened(Player $player, $openedWidget) {
- //unset when another main widget got opened
- if ($openedWidget != 'PlayerList') {
- unset($this->playersListShown[$player->login]);
- }
- }
-
- /**
- * Closes the widget
- *
- * @param Player $player
- */
- public function closeWidget(Player $player) {
- unset($this->playersListShown[$player->login]);
- }
-
- /**
- * Closes the player advanced widget widget
- *
- * @param array $callback
- * @param Player $player
- */
- public function closePlayerAdvancedWidget(array $callback, Player $player) {
- $this->playersListShown[$player->login] = self::SHOWN_MAIN_WINDOW;
- $this->showPlayerList($player); // overwrite the manialink
- }
-
/**
* Called on ManialinkPageAnswer
*
@@ -657,12 +645,12 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$adminLogin = $callback[1][1];
$targetLogin = $actionArray[2];
- switch($action) {
+ switch ($action) {
case self::ACTION_SPECTATE_PLAYER:
try {
$this->maniaControl->client->forceSpectator($adminLogin, PlayerActions::SPECTATOR_BUT_KEEP_SELECTABLE);
$this->maniaControl->client->forceSpectatorTarget($adminLogin, $targetLogin, 1);
- } catch(PlayerIsNotSpectatorException $e) {
+ } catch (PlayerIsNotSpectatorException $e) {
}
break;
case self::ACTION_OPEN_PLAYER_DETAILED:
@@ -734,7 +722,7 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
try {
$self->maniaControl->client->forceSpectator($target->login, PlayerActions::SPECTATOR_BUT_KEEP_SELECTABLE);
$self->maniaControl->client->spectatorReleasePlayerSlot($target->login);
- } catch(PlayerIsNotSpectatorException $e) {
+ } catch (PlayerIsNotSpectatorException $e) {
}
});
break;
@@ -758,20 +746,34 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
$message = '$39F You got kicked due a Public vote!$z ';
try {
$self->maniaControl->client->kick($target->login, $message);
- } catch(LoginUnknownException $e) {
+ } catch (LoginUnknownException $e) {
}
});
break;
}
}
+ /**
+ * Displays the Advanced Player Window
+ *
+ * @param Player $caller
+ * @param $login
+ */
+ public function advancedPlayerWidget(Player $caller, $login) {
+ // Set status to target player login
+ $this->playersListShown[$caller->login] = $login;
+
+ // Reopen playerlist
+ $this->showPlayerList($caller);
+ }
+
/**
* Reopen the widget on PlayerInfoChanged / Player Connect and Disconnect
*
* @param Player $player
*/
public function updateWidget(Player $player) {
- foreach($this->playersListShown as $login => $shown) {
+ foreach ($this->playersListShown as $login => $shown) {
if (!$shown) {
continue;
}
diff --git a/application/core/Players/PlayerManager.php b/application/core/Players/PlayerManager.php
index eaa31b6b..2061a974 100644
--- a/application/core/Players/PlayerManager.php
+++ b/application/core/Players/PlayerManager.php
@@ -14,8 +14,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\LoginUnknownException;
/**
* Class managing Players
*
- * @author kremsy & steeffeen
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PlayerManager implements CallbackListener, TimerListener {
@@ -112,7 +112,7 @@ class PlayerManager implements CallbackListener, TimerListener {
public function onInit() {
// Add all players
$players = $this->maniaControl->client->getPlayerList(300, 0, 2);
- foreach($players as $playerItem) {
+ foreach ($players as $playerItem) {
if ($playerItem->playerId <= 0) {
continue;
}
@@ -141,183 +141,6 @@ class PlayerManager implements CallbackListener, TimerListener {
}
}
- /**
- * Handle playerConnect callback
- *
- * @param array $callback
- */
- public function playerConnect(array $callback) {
- $login = $callback[1][0];
- try {
- $playerInfo = $this->maniaControl->client->getDetailedPlayerInfo($login);
- $player = new Player($playerInfo);
-
- $this->addPlayer($player);
- } catch(LoginUnknownException $e) {
- }
- }
-
- /**
- * Handle playerDisconnect callback
- *
- * @param array $callback
- */
- public function playerDisconnect(array $callback) {
- $login = $callback[1][0];
- $player = $this->removePlayer($login);
- if (!$player) {
- return;
- }
-
- // Trigger own callback
- $this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERDISCONNECT, $player);
-
- if ($player->isFakePlayer()) {
- return;
- }
-
- $played = Formatter::formatTimeH(time() - $player->joinTime);
- $logMessage = "Player left: {$player->login} / {$player->nickname} Playtime: {$played}";
- $this->maniaControl->log(Formatter::stripCodes($logMessage));
-
- if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES)) {
- $this->maniaControl->chat->sendChat('$0f0$<$fff' . $player->nickname . '$> has left the game');
- }
-
- //Destroys stored PlayerData, after all Disconnect Callbacks got Handled
- $this->playerDataManager->destroyPlayerData($player);
- }
-
- /**
- * Update PlayerInfo
- *
- * @param array $callback
- */
- public function playerInfoChanged(array $callback) {
- $player = $this->getPlayer($callback[1][0]['Login']);
- if (!$player) {
- return;
- }
-
- $player->ladderRank = $callback[1][0]["LadderRanking"];
- $player->teamId = $callback[1][0]["TeamId"];
-
- //Check if the Player is in a Team, to notify if its a TeamMode or not
- if ($player->teamId != -1) {
- $this->maniaControl->server->setTeamMode(true);
- }
-
- $prevJoinState = $player->hasJoinedGame;
-
- $player->updatePlayerFlags($callback[1][0]["Flags"]);
- $player->updateSpectatorStatus($callback[1][0]["SpectatorStatus"]);
-
- //Check if Player finished joining the game
- if ($player->hasJoinedGame && !$prevJoinState) {
-
- if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES) && !$player->isFakePlayer()) {
- $string = array(0 => '$0f0Player', 1 => '$0f0Moderator', 2 => '$0f0Admin', 3 => '$0f0SuperAdmin', 4 => '$0f0MasterAdmin');
- $chatMessage = '$0f0' . $string[$player->authLevel] . ' $<$fff' . $player->nickname . '$> Nation: $<$fff' . $player->getCountry() . '$> joined!';
- $this->maniaControl->chat->sendChat($chatMessage);
- $this->maniaControl->chat->sendInformation('This server uses ManiaControl v' . ManiaControl::VERSION . '!', $player->login);
- }
-
- $logMessage = "Player joined: {$player->login} / " . Formatter::stripCodes($player->nickname) . " Nation: " . $player->getCountry() . " IP: {$player->ipAddress}";
- $this->maniaControl->log($logMessage);
-
- // Increment the Player Join Count
- $this->maniaControl->statisticManager->incrementStat(self::STAT_JOIN_COUNT, $player, $this->maniaControl->server->index);
-
- // Trigger own PlayerJoined callback
- $this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERCONNECT, $player);
-
- }
-
- // Trigger own callback
- $this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERINFOCHANGED, $player);
- }
-
-
- /**
- * Get all Players
- *
- * @return array
- */
- public function getPlayers() {
- return $this->players;
- }
-
- /**
- * Gets the Count of all Player
- *
- * @return int
- */
- public function getPlayerCount() {
- $count = 0;
- foreach($this->players as $player) {
- /** @var Player $player */
- if (!$player->isSpectator) {
- $count++;
- }
- }
- return $count;
- }
-
- /**
- * Gets the Count of all Spectators
- *
- * @return int
- */
- public function getSpectatorCount() {
- $count = 0;
- foreach($this->players as $player) {
- /** @var Player $player */
- if ($player->isSpectator) {
- $count++;
- }
- }
- return $count;
- }
-
- /**
- * Gets a Player by his index
- *
- * @param $index
- * @param bool $connectedPlayersOnly
- * @return Player|null
- */
- public function getPlayerByIndex($index, $connectedPlayersOnly = false) {
- foreach($this->players as $player) {
- /** @var Player $player */
- if ($player->index == $index) {
- return $player;
- }
- }
-
- if ($connectedPlayersOnly) {
- return null;
- }
- //Player is not online -> get Player from Database
- return $this->getPlayerFromDatabaseByIndex($index);
- }
-
- /**
- * Get a Player by Login
- *
- * @param string $login
- * @param bool $connectedPlayersOnly
- * @return Player|null
- */
- public function getPlayer($login, $connectedPlayersOnly = false) {
- if (!isset($this->players[$login])) {
- if ($connectedPlayersOnly) {
- return null;
- }
- return $this->getPlayerFromDatabaseByLogin($login);
- }
- return $this->players[$login];
- }
-
/**
* Add a player
*
@@ -330,99 +153,6 @@ class PlayerManager implements CallbackListener, TimerListener {
return true;
}
- /**
- * Remove a Player
- *
- * @param string $login
- * @param bool $savePlayedTime
- * @return Player $player
- */
- private function removePlayer($login, $savePlayedTime = true) {
- if (!isset($this->players[$login])) {
- return null;
- }
- $player = $this->players[$login];
- unset($this->players[$login]);
- if ($savePlayedTime) {
- $this->updatePlayedTime($player);
- }
- return $player;
- }
-
-
- /**
- * Get's a Player out of the database
- *
- * @param $playerIndex
- * @return Player $player
- */
- private function getPlayerFromDatabaseByIndex($playerIndex) {
- $mysqli = $this->maniaControl->database->mysqli;
-
- if (!is_numeric($playerIndex)) {
- return null;
- }
-
- $query = "SELECT * FROM `" . self::TABLE_PLAYERS . "` WHERE `index` = " . $playerIndex . ";";
- $result = $mysqli->query($query);
- if (!$result) {
- trigger_error($mysqli->error);
- return null;
- }
-
- $row = $result->fetch_object();
- $result->close();
-
- if (!isset($row)) {
- return null;
- }
-
- $player = new Player(null);
- $player->index = $playerIndex;
- $player->login = $row->login;
- $player->rawNickname = $row->nickname;
- $player->nickname = Formatter::stripDirtyCodes($player->rawNickname);
- $player->path = $row->path;
- $player->authLevel = $row->authLevel;
-
- return $player;
- }
-
-
- /**
- * Get's a Player out of the database
- *
- * @param $playerIndex
- * @return Player $player
- */
- private function getPlayerFromDatabaseByLogin($playerLogin) {
- $mysqli = $this->maniaControl->database->mysqli;
-
- $query = "SELECT * FROM `" . self::TABLE_PLAYERS . "` WHERE `login` LIKE '" . $mysqli->escape_string($playerLogin) . "';";
- $result = $mysqli->query($query);
- if (!$result) {
- trigger_error($mysqli->error);
- return null;
- }
-
- $row = $result->fetch_object();
- $result->close();
-
- if (!isset($row)) {
- return null;
- }
-
- $player = new Player(null);
- $player->index = $row->index;
- $player->login = $row->login;
- $player->rawNickname = $row->nickname;
- $player->nickname = Formatter::stripDirtyCodes($player->rawNickname);
- $player->path = $row->path;
- $player->authLevel = $row->authLevel;
-
- return $player;
- }
-
/**
* Save player in Database and fill up Object Properties
*
@@ -481,6 +211,72 @@ class PlayerManager implements CallbackListener, TimerListener {
return true;
}
+ /**
+ * Handle playerConnect callback
+ *
+ * @param array $callback
+ */
+ public function playerConnect(array $callback) {
+ $login = $callback[1][0];
+ try {
+ $playerInfo = $this->maniaControl->client->getDetailedPlayerInfo($login);
+ $player = new Player($playerInfo);
+
+ $this->addPlayer($player);
+ } catch (LoginUnknownException $e) {
+ }
+ }
+
+ /**
+ * Handle playerDisconnect callback
+ *
+ * @param array $callback
+ */
+ public function playerDisconnect(array $callback) {
+ $login = $callback[1][0];
+ $player = $this->removePlayer($login);
+ if (!$player) {
+ return;
+ }
+
+ // Trigger own callback
+ $this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERDISCONNECT, $player);
+
+ if ($player->isFakePlayer()) {
+ return;
+ }
+
+ $played = Formatter::formatTimeH(time() - $player->joinTime);
+ $logMessage = "Player left: {$player->login} / {$player->nickname} Playtime: {$played}";
+ $this->maniaControl->log(Formatter::stripCodes($logMessage));
+
+ if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES)) {
+ $this->maniaControl->chat->sendChat('$0f0$<$fff' . $player->nickname . '$> has left the game');
+ }
+
+ //Destroys stored PlayerData, after all Disconnect Callbacks got Handled
+ $this->playerDataManager->destroyPlayerData($player);
+ }
+
+ /**
+ * Remove a Player
+ *
+ * @param string $login
+ * @param bool $savePlayedTime
+ * @return Player $player
+ */
+ private function removePlayer($login, $savePlayedTime = true) {
+ if (!isset($this->players[$login])) {
+ return null;
+ }
+ $player = $this->players[$login];
+ unset($this->players[$login]);
+ if ($savePlayedTime) {
+ $this->updatePlayedTime($player);
+ }
+ return $player;
+ }
+
/**
* Update total played time of the player
*
@@ -495,4 +291,205 @@ class PlayerManager implements CallbackListener, TimerListener {
return $this->maniaControl->statisticManager->insertStat(self::STAT_SERVERTIME, $player, $this->maniaControl->server->index, $playedTime);
}
+
+ /**
+ * Update PlayerInfo
+ *
+ * @param array $callback
+ */
+ public function playerInfoChanged(array $callback) {
+ $player = $this->getPlayer($callback[1][0]['Login']);
+ if (!$player) {
+ return;
+ }
+
+ $player->ladderRank = $callback[1][0]["LadderRanking"];
+ $player->teamId = $callback[1][0]["TeamId"];
+
+ //Check if the Player is in a Team, to notify if its a TeamMode or not
+ if ($player->teamId != -1) {
+ $this->maniaControl->server->setTeamMode(true);
+ }
+
+ $prevJoinState = $player->hasJoinedGame;
+
+ $player->updatePlayerFlags($callback[1][0]["Flags"]);
+ $player->updateSpectatorStatus($callback[1][0]["SpectatorStatus"]);
+
+ //Check if Player finished joining the game
+ if ($player->hasJoinedGame && !$prevJoinState) {
+
+ if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_JOIN_LEAVE_MESSAGES) && !$player->isFakePlayer()) {
+ $string = array(0 => '$0f0Player', 1 => '$0f0Moderator', 2 => '$0f0Admin', 3 => '$0f0SuperAdmin', 4 => '$0f0MasterAdmin');
+ $chatMessage = '$0f0' . $string[$player->authLevel] . ' $<$fff' . $player->nickname . '$> Nation: $<$fff' . $player->getCountry() . '$> joined!';
+ $this->maniaControl->chat->sendChat($chatMessage);
+ $this->maniaControl->chat->sendInformation('This server uses ManiaControl v' . ManiaControl::VERSION . '!', $player->login);
+ }
+
+ $logMessage = "Player joined: {$player->login} / " . Formatter::stripCodes($player->nickname) . " Nation: " . $player->getCountry() . " IP: {$player->ipAddress}";
+ $this->maniaControl->log($logMessage);
+
+ // Increment the Player Join Count
+ $this->maniaControl->statisticManager->incrementStat(self::STAT_JOIN_COUNT, $player, $this->maniaControl->server->index);
+
+ // Trigger own PlayerJoined callback
+ $this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERCONNECT, $player);
+
+ }
+
+ // Trigger own callback
+ $this->maniaControl->callbackManager->triggerCallback(self::CB_PLAYERINFOCHANGED, $player);
+ }
+
+ /**
+ * Get a Player by Login
+ *
+ * @param string $login
+ * @param bool $connectedPlayersOnly
+ * @return Player
+ */
+ public function getPlayer($login, $connectedPlayersOnly = false) {
+ if (!isset($this->players[$login])) {
+ if ($connectedPlayersOnly) {
+ return null;
+ }
+ return $this->getPlayerFromDatabaseByLogin($login);
+ }
+ return $this->players[$login];
+ }
+
+ /**
+ * Get a Player from the Database
+ *
+ * @param string $playerLogin
+ * @return Player
+ */
+ private function getPlayerFromDatabaseByLogin($playerLogin) {
+ $mysqli = $this->maniaControl->database->mysqli;
+
+ $query = "SELECT * FROM `" . self::TABLE_PLAYERS . "` WHERE `login` LIKE '" . $mysqli->escape_string($playerLogin) . "';";
+ $result = $mysqli->query($query);
+ if (!$result) {
+ trigger_error($mysqli->error);
+ return null;
+ }
+
+ $row = $result->fetch_object();
+ $result->close();
+
+ if (!isset($row)) {
+ return null;
+ }
+
+ $player = new Player(null);
+ $player->index = $row->index;
+ $player->login = $row->login;
+ $player->rawNickname = $row->nickname;
+ $player->nickname = Formatter::stripDirtyCodes($player->rawNickname);
+ $player->path = $row->path;
+ $player->authLevel = $row->authLevel;
+
+ return $player;
+ }
+
+ /**
+ * Get all Players
+ *
+ * @return array
+ */
+ public function getPlayers() {
+ return $this->players;
+ }
+
+ /**
+ * Gets the Count of all Player
+ *
+ * @return int
+ */
+ public function getPlayerCount() {
+ $count = 0;
+ foreach ($this->players as $player) {
+ /** @var Player $player */
+ if (!$player->isSpectator) {
+ $count++;
+ }
+ }
+ return $count;
+ }
+
+ /**
+ * Gets the Count of all Spectators
+ *
+ * @return int
+ */
+ public function getSpectatorCount() {
+ $count = 0;
+ foreach ($this->players as $player) {
+ /** @var Player $player */
+ if ($player->isSpectator) {
+ $count++;
+ }
+ }
+ return $count;
+ }
+
+ /**
+ * Gets a Player by his index
+ *
+ * @param $index
+ * @param bool $connectedPlayersOnly
+ * @return Player|null
+ */
+ public function getPlayerByIndex($index, $connectedPlayersOnly = false) {
+ foreach ($this->players as $player) {
+ /** @var Player $player */
+ if ($player->index == $index) {
+ return $player;
+ }
+ }
+
+ if ($connectedPlayersOnly) {
+ return null;
+ }
+ //Player is not online -> get Player from Database
+ return $this->getPlayerFromDatabaseByIndex($index);
+ }
+
+ /**
+ * Get's a Player out of the database
+ *
+ * @param $playerIndex
+ * @return Player $player
+ */
+ private function getPlayerFromDatabaseByIndex($playerIndex) {
+ $mysqli = $this->maniaControl->database->mysqli;
+
+ if (!is_numeric($playerIndex)) {
+ return null;
+ }
+
+ $query = "SELECT * FROM `" . self::TABLE_PLAYERS . "` WHERE `index` = " . $playerIndex . ";";
+ $result = $mysqli->query($query);
+ if (!$result) {
+ trigger_error($mysqli->error);
+ return null;
+ }
+
+ $row = $result->fetch_object();
+ $result->close();
+
+ if (!isset($row)) {
+ return null;
+ }
+
+ $player = new Player(null);
+ $player->index = $playerIndex;
+ $player->login = $row->login;
+ $player->rawNickname = $row->nickname;
+ $player->nickname = Formatter::stripDirtyCodes($player->rawNickname);
+ $player->path = $row->path;
+ $player->authLevel = $row->authLevel;
+
+ return $player;
+ }
}
diff --git a/application/core/Plugins/Plugin.php b/application/core/Plugins/Plugin.php
index 960424ca..7157d3f1 100644
--- a/application/core/Plugins/Plugin.php
+++ b/application/core/Plugins/Plugin.php
@@ -7,9 +7,9 @@ use ManiaControl\ManiaControl;
/**
* Interface for ManiaControl Plugins
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface Plugin {
/*
@@ -24,19 +24,6 @@ interface Plugin {
*/
public static function prepare(ManiaControl $maniaControl);
- /**
- * Load the plugin
- *
- * @param \ManiaControl\ManiaControl $maniaControl
- * @return bool
- */
- public function load(ManiaControl $maniaControl);
-
- /**
- * Unload the plugin and its Resources
- */
- public function unload();
-
/**
* Get plugin id
*
@@ -71,4 +58,17 @@ interface Plugin {
* @return string
*/
public static function getDescription();
+
+ /**
+ * Load the plugin
+ *
+ * @param \ManiaControl\ManiaControl $maniaControl
+ * @return bool
+ */
+ public function load(ManiaControl $maniaControl);
+
+ /**
+ * Unload the plugin and its Resources
+ */
+ public function unload();
}
diff --git a/application/core/Plugins/PluginInstallMenu.php b/application/core/Plugins/PluginInstallMenu.php
index c21297d8..4a9c1bff 100644
--- a/application/core/Plugins/PluginInstallMenu.php
+++ b/application/core/Plugins/PluginInstallMenu.php
@@ -21,16 +21,16 @@ use ManiaControl\Players\Player;
/**
* Configurator for enabling and disabling Plugins
*
- * @author steeffeen
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PluginInstallMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAnswerListener {
/*
* Constants
*/
- const SETTING_PERMISSION_INSTALL_PLUGINS = 'Install plugins';
- const ACTION_PREFIX_INSTALLPLUGIN = 'PluginInstallMenu.Install.';
+ const SETTING_PERMISSION_INSTALL_PLUGINS = 'Install plugins';
+ const ACTION_PREFIX_INSTALLPLUGIN = 'PluginInstallMenu.Install.';
/**
* Create a new plugin menu instance
@@ -58,12 +58,13 @@ class PluginInstallMenu implements CallbackListener, ConfiguratorMenu, Manialink
* @param float $width
* @param float $height
* @param Script $script
+ * @param Player $player
* @return \FML\Controls\Frame
*/
public function getMenu($width, $height, Script $script, Player $player) {
- $paging = new Paging();
- $script->addFeature($paging);
- $frame = new Frame();
+ $paging = new Paging();
+ $script->addFeature($paging);
+ $frame = new Frame();
// Config
$pagerSize = 9.;
@@ -86,8 +87,8 @@ class PluginInstallMenu implements CallbackListener, ConfiguratorMenu, Manialink
$pagerNext->setSize($pagerSize, $pagerSize);
$pagerNext->setSubStyle(Quad_Icons64x64_1::SUBSTYLE_ArrowNext);
- $paging->addButton($pagerNext);
- $paging->addButton($pagerPrev);
+ $paging->addButton($pagerNext);
+ $paging->addButton($pagerPrev);
$pageCountLabel = new Label_Text();
$frame->add($pageCountLabel);
@@ -96,22 +97,22 @@ class PluginInstallMenu implements CallbackListener, ConfiguratorMenu, Manialink
$pageCountLabel->setStyle($pageCountLabel::STYLE_TextTitle1);
$pageCountLabel->setTextSize(2);
- $paging->setLabel($pageCountLabel);
+ $paging->setLabel($pageCountLabel);
- $url = ManiaControl::URL_WEBSERVICE . 'plugins';
- $dataJson = FileUtil::loadFile($url);
- $pluginList = json_decode($dataJson);
- $index = 0;
+ $url = ManiaControl::URL_WEBSERVICE . 'plugins';
+ $dataJson = FileUtil::loadFile($url);
+ $pluginList = json_decode($dataJson);
+ $index = 0;
if ($pluginList && isset($pluginList[0])) {
- $pluginClasses = $this->maniaControl->pluginManager->getPluginClasses();
- $pluginIds = array();
+ $pluginClasses = $this->maniaControl->pluginManager->getPluginClasses();
+ $pluginIds = array();
/** @var Plugin $class */
- foreach($pluginClasses as $class) {
+ foreach ($pluginClasses as $class) {
$pluginIds[] = $class::getId();
}
- foreach($pluginList as $plugin) {
- if(!in_array($plugin->id, $pluginIds)) {
+ foreach ($pluginList as $plugin) {
+ if (!in_array($plugin->id, $pluginIds)) {
if (!isset($pageFrame)) {
$pageFrame = new Frame();
$frame->add($pageFrame);
@@ -120,7 +121,7 @@ class PluginInstallMenu implements CallbackListener, ConfiguratorMenu, Manialink
}
array_push($pageFrames, $pageFrame);
- $paging->addPage($pageFrame);
+ $paging->addPage($pageFrame);
$y = $height * 0.41;
}
@@ -149,7 +150,7 @@ class PluginInstallMenu implements CallbackListener, ConfiguratorMenu, Manialink
$descriptionLabel->setMaxLines(5);
$description = "Author: {$plugin->author}\nVersion: {$plugin->currentVersion->version}\nDesc: {$plugin->description}";
$descriptionLabel->setText($description);
- $nameLabel->addTooltipFeature($descriptionLabel);
+ $nameLabel->addTooltipFeature($descriptionLabel);
$installButton = new Label_Button();
$pluginFrame->add($installButton);
diff --git a/application/core/Plugins/PluginManager.php b/application/core/Plugins/PluginManager.php
index c4c2ac7d..1a71c8e5 100644
--- a/application/core/Plugins/PluginManager.php
+++ b/application/core/Plugins/PluginManager.php
@@ -3,24 +3,24 @@
namespace ManiaControl\Plugins;
use ManiaControl\Callbacks\CallbackListener;
-use ManiaControl\ManiaControl;
-use ManiaControl\Manialinks\ManialinkPageAnswerListener;
use ManiaControl\Callbacks\TimerListener;
use ManiaControl\Commands\CommandListener;
+use ManiaControl\ManiaControl;
+use ManiaControl\Manialinks\ManialinkPageAnswerListener;
/**
* Class managing Plugins
- *
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PluginManager {
/*
* Constants
*/
const TABLE_PLUGINS = 'mc_plugins';
-
+
/*
* Private Properties
*/
@@ -32,27 +32,27 @@ class PluginManager {
/**
* Construct plugin manager
- *
+ *
* @param \ManiaControl\ManiaControl $maniaControl
*/
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
$this->initTables();
-
+
$this->pluginMenu = new PluginMenu($maniaControl);
$this->maniaControl->configurator->addMenu($this->pluginMenu);
-
+
$this->pluginInstallMenu = new PluginInstallMenu($maniaControl);
$this->maniaControl->configurator->addMenu($this->pluginInstallMenu);
}
/**
* Initialize necessary database tables
- *
+ *
* @return bool
*/
private function initTables() {
- $mysqli = $this->maniaControl->database->mysqli;
+ $mysqli = $this->maniaControl->database->mysqli;
$pluginsTableQuery = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_PLUGINS . "` (
`index` int(11) NOT NULL AUTO_INCREMENT,
`className` varchar(100) NOT NULL,
@@ -61,7 +61,7 @@ class PluginManager {
PRIMARY KEY (`index`),
UNIQUE KEY `className` (`className`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='ManiaControl plugin status' AUTO_INCREMENT=1;";
- $tableStatement = $mysqli->prepare($pluginsTableQuery);
+ $tableStatement = $mysqli->prepare($pluginsTableQuery);
if ($mysqli->error) {
trigger_error($mysqli->error, E_USER_ERROR);
return false;
@@ -75,95 +75,9 @@ class PluginManager {
return true;
}
- /**
- * Check if the plugin is running
- *
- * @param string $pluginClass
- * @return bool
- */
- public function isPluginActive($pluginClass) {
- $pluginClass = $this->getPluginClass($pluginClass);
- return isset($this->activePlugins[$pluginClass]);
- }
-
- /**
- * Check if the given class implements the plugin interface
- *
- * @param string $pluginClass
- * @return bool
- */
- public static function isPluginClass($pluginClass) {
- $pluginClass = self::getClass($pluginClass);
- if (!class_exists($pluginClass, false)) {
- return false;
- }
- if (!in_array(Plugin::PLUGIN_INTERFACE, class_implements($pluginClass, false))) {
- return false;
- }
- return true;
- }
-
- /**
- * Add the class to array of loaded plugin classes
- *
- * @param string $pluginClass
- * @return bool
- */
- public function addPluginClass($pluginClass) {
- $pluginClass = $this->getPluginClass($pluginClass);
- if (in_array($pluginClass, $this->pluginClasses)) {
- return false;
- }
- if (!$this->isPluginClass($pluginClass)) {
- return false;
- }
- array_push($this->pluginClasses, $pluginClass);
- sort($this->pluginClasses);
- return true;
- }
-
- /**
- * Activate and start the plugin with the given name
- *
- * @param string $pluginClass
- * @param string $adminLogin
- * @return bool
- */
- public function activatePlugin($pluginClass, $adminLogin = null) {
- if (!is_string($pluginClass)) {
- return false;
- }
- if (!$this->isPluginClass($pluginClass)) {
- return false;
- }
- if ($this->isPluginActive($pluginClass)) {
- return false;
- }
- $plugin = new $pluginClass();
- /**
- *
- * @var Plugin $plugin
- */
- $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->savePluginStatus($pluginClass, true);
- return true;
- }
-
/**
* Deactivate the plugin with the given class
- *
+ *
* @param string $pluginClass
* @return bool
*/
@@ -174,7 +88,6 @@ class PluginManager {
}
$plugin = $this->activePlugins[$pluginClass];
/**
- *
* @var Plugin $plugin
*/
$plugin->unload();
@@ -197,113 +110,69 @@ class PluginManager {
}
/**
- * Load complete Plugins Directory and start all configured Plugins
- *
- * @return array
+ * Get the Class of the Plugin
+ *
+ * @param mixed $pluginClass
+ * @return string
*/
- public function loadPlugins() {
- $pluginsDirectory = ManiaControlDir . '/plugins/';
-
- $classesBefore = get_declared_classes();
- $this->loadPluginFiles($pluginsDirectory);
- $classesAfter = get_declared_classes();
-
- $newPluginClasses = array();
-
- $newClasses = array_diff($classesAfter, $classesBefore);
- foreach ($newClasses as $className) {
- if (!$this->isPluginClass($className)) {
- continue;
- }
-
- if (!$this->addPluginClass($className)) {
- continue;
- }
- array_push($newPluginClasses, $className);
-
- /** @var Plugin $className */
- $className::prepare($this->maniaControl);
-
- if ($this->getSavedPluginStatus($className)) {
- $this->activatePlugin($className);
- }
+ public static function getPluginClass($pluginClass) {
+ $pluginClass = self::getClass($pluginClass);
+ if (!self::isPluginClass($pluginClass)) {
+ return false;
}
-
- return $newPluginClasses;
+ return $pluginClass;
}
/**
- * Load all Plugin Files from the Directory
- *
- * @param string $directory
+ * Get the Class of the Object
+ *
+ * @param mixed $object
+ * @return string
*/
- public function loadPluginFiles($directory = '') {
- $pluginFiles = scandir($directory);
- foreach ($pluginFiles as $pluginFile) {
- if (stripos($pluginFile, '.') === 0) {
- continue;
- }
-
- $filePath = $directory . $pluginFile;
- if (is_file($filePath)) {
- if (!stripos($pluginFile, '.php')) {
- continue;
- }
- $success = include_once $filePath;
- if (!$success) {
- trigger_error("Error loading File '{$filePath}'!");
- }
- continue;
- }
-
- $dirPath = $directory . $pluginFile;
- if (is_dir($dirPath)) {
- $this->loadPluginFiles($dirPath . '/');
- continue;
- }
+ private static function getClass($object) {
+ if (is_object($object)) {
+ return get_class($object);
}
+ return (string)$object;
}
/**
- * Returns a Plugin if it is activated
- *
+ * Check if the given class implements the plugin interface
+ *
* @param string $pluginClass
- * @return Plugin
+ * @return bool
*/
- public function getPlugin($pluginClass) {
- if ($this->isPluginActive($pluginClass)) {
- return $this->activePlugins[$pluginClass];
+ public static function isPluginClass($pluginClass) {
+ $pluginClass = self::getClass($pluginClass);
+ if (!class_exists($pluginClass, false)) {
+ return false;
}
- return null;
+ if (!in_array(Plugin::PLUGIN_INTERFACE, class_implements($pluginClass, false))) {
+ return false;
+ }
+ return true;
}
/**
- * Get all declared plugin class names
- *
- * @return array
+ * Check if the plugin is running
+ *
+ * @param string $pluginClass
+ * @return bool
*/
- public function getPluginClasses() {
- return $this->pluginClasses;
- }
-
- /**
- * Get all active plugins
- *
- * @return array
- */
- public function getActivePlugins() {
- return $this->activePlugins;
+ public function isPluginActive($pluginClass) {
+ $pluginClass = $this->getPluginClass($pluginClass);
+ return isset($this->activePlugins[$pluginClass]);
}
/**
* Save plugin status in database
- *
+ *
* @param string $className
- * @param bool $active
+ * @param bool $active
* @return bool
*/
private function savePluginStatus($className, $active) {
- $mysqli = $this->maniaControl->database->mysqli;
+ $mysqli = $this->maniaControl->database->mysqli;
$pluginStatusQuery = "INSERT INTO `" . self::TABLE_PLUGINS . "` (
`className`,
`active`
@@ -311,7 +180,7 @@ class PluginManager {
?, ?
) ON DUPLICATE KEY UPDATE
`active` = VALUES(`active`);";
- $pluginStatement = $mysqli->prepare($pluginStatusQuery);
+ $pluginStatement = $mysqli->prepare($pluginStatusQuery);
if ($mysqli->error) {
trigger_error($mysqli->error);
return false;
@@ -328,17 +197,104 @@ class PluginManager {
return true;
}
+ /**
+ * Load complete Plugins Directory and start all configured Plugins
+ *
+ * @return array
+ */
+ public function loadPlugins() {
+ $pluginsDirectory = ManiaControlDir . '/plugins/';
+
+ $classesBefore = get_declared_classes();
+ $this->loadPluginFiles($pluginsDirectory);
+ $classesAfter = get_declared_classes();
+
+ $newPluginClasses = array();
+
+ $newClasses = array_diff($classesAfter, $classesBefore);
+ foreach ($newClasses as $className) {
+ if (!$this->isPluginClass($className)) {
+ continue;
+ }
+
+ if (!$this->addPluginClass($className)) {
+ continue;
+ }
+ array_push($newPluginClasses, $className);
+
+ /** @var Plugin $className */
+ $className::prepare($this->maniaControl);
+
+ if ($this->getSavedPluginStatus($className)) {
+ $this->activatePlugin($className);
+ }
+ }
+
+ return $newPluginClasses;
+ }
+
+ /**
+ * Load all Plugin Files from the Directory
+ *
+ * @param string $directory
+ */
+ public function loadPluginFiles($directory = '') {
+ $pluginFiles = scandir($directory);
+ foreach ($pluginFiles as $pluginFile) {
+ if (stripos($pluginFile, '.') === 0) {
+ continue;
+ }
+
+ $filePath = $directory . $pluginFile;
+ if (is_file($filePath)) {
+ if (!stripos($pluginFile, '.php')) {
+ continue;
+ }
+ $success = include_once $filePath;
+ if (!$success) {
+ trigger_error("Error loading File '{$filePath}'!");
+ }
+ continue;
+ }
+
+ $dirPath = $directory . $pluginFile;
+ if (is_dir($dirPath)) {
+ $this->loadPluginFiles($dirPath . '/');
+ continue;
+ }
+ }
+ }
+
+ /**
+ * Add the class to array of loaded plugin classes
+ *
+ * @param string $pluginClass
+ * @return bool
+ */
+ public function addPluginClass($pluginClass) {
+ $pluginClass = $this->getPluginClass($pluginClass);
+ if (in_array($pluginClass, $this->pluginClasses)) {
+ return false;
+ }
+ if (!$this->isPluginClass($pluginClass)) {
+ return false;
+ }
+ array_push($this->pluginClasses, $pluginClass);
+ sort($this->pluginClasses);
+ return true;
+ }
+
/**
* Get plugin status from database
- *
+ *
* @param string $className
* @return bool
*/
public function getSavedPluginStatus($className) {
- $mysqli = $this->maniaControl->database->mysqli;
+ $mysqli = $this->maniaControl->database->mysqli;
$pluginStatusQuery = "SELECT `active` FROM `" . self::TABLE_PLUGINS . "`
WHERE `className` = ?;";
- $pluginStatement = $mysqli->prepare($pluginStatusQuery);
+ $pluginStatement = $mysqli->prepare($pluginStatusQuery);
if ($mysqli->error) {
trigger_error($mysqli->error);
return false;
@@ -365,44 +321,85 @@ class PluginManager {
return $active;
}
+ /**
+ * Activate and start the plugin with the given name
+ *
+ * @param string $pluginClass
+ * @param string $adminLogin
+ * @return bool
+ */
+ public function activatePlugin($pluginClass, $adminLogin = null) {
+ if (!is_string($pluginClass)) {
+ return false;
+ }
+ if (!$this->isPluginClass($pluginClass)) {
+ return false;
+ }
+ if ($this->isPluginActive($pluginClass)) {
+ return false;
+ }
+ $plugin = new $pluginClass();
+ /**
+ * @var Plugin $plugin
+ */
+ $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->savePluginStatus($pluginClass, true);
+ return true;
+ }
+
+ /**
+ * Returns a Plugin if it is activated
+ *
+ * @param string $pluginClass
+ * @return Plugin
+ */
+ public function getPlugin($pluginClass) {
+ if ($this->isPluginActive($pluginClass)) {
+ return $this->activePlugins[$pluginClass];
+ }
+ return null;
+ }
+
+ /**
+ * Get all declared plugin class names
+ *
+ * @return array
+ */
+ public function getPluginClasses() {
+ return $this->pluginClasses;
+ }
+
+ /**
+ * Get all active plugins
+ *
+ * @return array
+ */
+ public function getActivePlugins() {
+ return $this->activePlugins;
+ }
+
/**
* Fetch the Plugins List from the ManiaControl Website
- *
+ *
* @param $function
*/
public function fetchPluginList($function) {
$url = ManiaControl::URL_WEBSERVICE . 'plugins';
-
- $this->maniaControl->fileReader->loadFile($url, function ($dataJson, $error) use(&$function) {
+
+ $this->maniaControl->fileReader->loadFile($url, function ($dataJson, $error) use (&$function) {
$data = json_decode($dataJson);
call_user_func($function, $data, $error);
});
}
-
- /**
- * Get the Class of the Plugin
- *
- * @param mixed $pluginClass
- * @return string
- */
- public static function getPluginClass($pluginClass) {
- $pluginClass = self::getClass($pluginClass);
- if (!self::isPluginClass($pluginClass)) {
- return false;
- }
- return $pluginClass;
- }
-
- /**
- * Get the Class of the Object
- *
- * @param mixed $pluginClass
- * @return string
- */
- private static function getClass($object) {
- if (is_object($object)) {
- return get_class($object);
- }
- return (string) $object;
- }
}
diff --git a/application/core/Plugins/PluginMenu.php b/application/core/Plugins/PluginMenu.php
index 5c172cfa..5b5d51f0 100644
--- a/application/core/Plugins/PluginMenu.php
+++ b/application/core/Plugins/PluginMenu.php
@@ -8,8 +8,8 @@ use FML\Controls\Frame;
use FML\Controls\Label;
use FML\Controls\Labels\Label_Button;
use FML\Controls\Labels\Label_Text;
-use FML\Controls\Quads\Quad_Icons128x32_1;
use FML\Controls\Quads\Quad_Icons128x128_1;
+use FML\Controls\Quads\Quad_Icons128x32_1;
use FML\Controls\Quads\Quad_Icons64x64_1;
use FML\Script\Features\Paging;
use FML\Script\Script;
@@ -25,9 +25,9 @@ use ManiaControl\Players\Player;
/**
* Configurator for enabling and disabling Plugins
*
- * @author ManiaControl Team
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAnswerListener {
/*
@@ -62,13 +62,6 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_CHANGE_PLUGIN_SETTINGS, AuthenticationManager::AUTH_LEVEL_SUPERADMIN);
}
- /**
- * @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
- */
- public function getTitle() {
- return 'Plugins';
- }
-
/**
* Returns Back to the Plugins
*/
@@ -78,13 +71,20 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
$this->maniaControl->configurator->reopenMenu($player, $menuId);
}
+ /**
+ * @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
+ */
+ public function getTitle() {
+ return 'Plugins';
+ }
+
/**
* @see \ManiaControl\Configurators\ConfiguratorMenu::getMenu()
*/
public function getMenu($width, $height, Script $script, Player $player) {
- $paging = new Paging();
- $script->addFeature($paging);
- $frame = new Frame();
+ $paging = new Paging();
+ $script->addFeature($paging);
+ $frame = new Frame();
$pluginClasses = $this->maniaControl->pluginManager->getPluginClasses();
@@ -107,8 +107,8 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
$pagerNext->setSize($pagerSize, $pagerSize);
$pagerNext->setSubStyle(Quad_Icons64x64_1::SUBSTYLE_ArrowNext);
- $paging->addButton($pagerNext);
- $paging->addButton($pagerPrev);
+ $paging->addButton($pagerNext);
+ $paging->addButton($pagerPrev);
$pageCountLabel = new Label_Text();
$frame->add($pageCountLabel);
@@ -117,7 +117,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
$pageCountLabel->setStyle($pageCountLabel::STYLE_TextTitle1);
$pageCountLabel->setTextSize(2);
- $paging->setLabel($pageCountLabel);
+ $paging->setLabel($pageCountLabel);
//Show Settings Menu
if ($this->settingsClass != '') { //TODO improve
@@ -128,7 +128,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
$y = 0;
$index = 1;
$settingHeight = 5.;
- foreach($settings as $setting) {
+ foreach ($settings as $setting) {
if (!isset($pageFrame)) {
$pageFrame = new Frame();
$frame->add($pageFrame);
@@ -137,7 +137,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
}
array_push($pageFrames, $pageFrame);
$y = $height * 0.41;
- $paging->addPage($pageFrame);
+ $paging->addPage($pageFrame);
}
$settingFrame = new Frame();
@@ -166,7 +166,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
}
array_push($pageFrames, $pageFrame);
$y = $height * 0.41;
- $paging->addPage($pageFrame);
+ $paging->addPage($pageFrame);
}
}
@@ -244,11 +244,11 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
$y = 0.;
$pluginUpdates = $this->maniaControl->updateManager->pluginUpdateManager->getPluginsUpdates();
- usort($pluginClasses, function($a, $b) {
+ usort($pluginClasses, function ($a, $b) {
return strcmp($a::getName(), $b::getName());
});
- foreach($pluginClasses as $index => $pluginClass) {
+ foreach ($pluginClasses as $index => $pluginClass) {
/** @var Plugin $pluginClass */
if (!isset($pageFrame)) {
$pageFrame = new Frame();
@@ -258,7 +258,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
}
array_push($pageFrames, $pageFrame);
- $paging->addPage($pageFrame);
+ $paging->addPage($pageFrame);
$y = $height * 0.41;
}
@@ -299,7 +299,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
$descriptionLabel->setMaxLines(5);
$description = "Author: {$pluginClass::getAuthor()}\nVersion: {$pluginClass::getVersion()}\nDesc: {$pluginClass::getDescription()}";
$descriptionLabel->setText($description);
- $nameLabel->addTooltipFeature($descriptionLabel);
+ $nameLabel->addTooltipFeature($descriptionLabel);
$quad = new Quad_Icons128x32_1();
$pluginFrame->add($quad);
@@ -340,7 +340,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
}
}
- if($pluginUpdates != false) {
+ if ($pluginUpdates != false) {
$updatePluginsButton = new Label_Button();
$frame->add($updatePluginsButton);
$updatePluginsButton->setHAlign(Control::RIGHT);
@@ -349,48 +349,13 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
$updatePluginsButton->setZ(2);
$updatePluginsButton->setWidth(10);
$updatePluginsButton->setStyle($updatePluginsButton::STYLE_CardButtonSmallS);
- $updatePluginsButton->setText(count($pluginUpdates).' update(s)');
+ $updatePluginsButton->setText(count($pluginUpdates) . ' update(s)');
$updatePluginsButton->setAction(self::ACTION_UPDATEPLUGINS);
}
return $frame;
}
- /**
- * @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData()
- */
- public function saveConfigData(array $configData, Player $player) {
- if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_PLUGIN_SETTINGS)) {
- $this->maniaControl->authenticationManager->sendNotAllowed($player);
- return;
- }
- if (!$configData[3] || strpos($configData[3][0]['Name'], self::ACTION_PREFIX_SETTING) !== 0) {
- return;
- }
-
- $maniaControlSettings = $this->maniaControl->settingManager->getSettings();
-
- $prefixLength = strlen(self::ACTION_PREFIX_SETTING);
-
- foreach($configData[3] as $setting) {
- $settingName = substr($setting['Name'], $prefixLength + 1);
-
- if(!isset($maniaControlSettings[$settingName]))
- continue;
-
- $oldSetting = $maniaControlSettings[$settingName];
- if ($setting['Value'] == $oldSetting->value || $oldSetting->type == 'bool') {
- continue;
- }
-
- $this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, $setting['Value']);
- }
-
- //Reopen the Menu
- $menuId = $this->maniaControl->configurator->getMenuId($this->getTitle());
- $this->maniaControl->configurator->reopenMenu($player, $menuId);
- }
-
/**
* Handle PlayerManialinkPageAnswer callback
*
@@ -456,7 +421,7 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
}
/**
- * Toggles a Boolean Value
+ * Toggle a Boolean Value
*
* @param $setting
* @param Player $player
@@ -481,4 +446,40 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
$this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, "1");
}
}
+
+ /**
+ * @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData()
+ */
+ public function saveConfigData(array $configData, Player $player) {
+ if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_CHANGE_PLUGIN_SETTINGS)) {
+ $this->maniaControl->authenticationManager->sendNotAllowed($player);
+ return;
+ }
+ if (!$configData[3] || strpos($configData[3][0]['Name'], self::ACTION_PREFIX_SETTING) !== 0) {
+ return;
+ }
+
+ $maniaControlSettings = $this->maniaControl->settingManager->getSettings();
+
+ $prefixLength = strlen(self::ACTION_PREFIX_SETTING);
+
+ foreach ($configData[3] as $setting) {
+ $settingName = substr($setting['Name'], $prefixLength + 1);
+
+ if (!isset($maniaControlSettings[$settingName])) {
+ continue;
+ }
+
+ $oldSetting = $maniaControlSettings[$settingName];
+ if ($setting['Value'] == $oldSetting->value || $oldSetting->type == 'bool') {
+ continue;
+ }
+
+ $this->maniaControl->settingManager->setSetting($oldSetting->class, $oldSetting->setting, $setting['Value']);
+ }
+
+ //Reopen the Menu
+ $menuId = $this->maniaControl->configurator->getMenuId($this->getTitle());
+ $this->maniaControl->configurator->reopenMenu($player, $menuId);
+ }
}
diff --git a/application/core/Server/Config.php b/application/core/Server/Config.php
index 85598c05..bd591165 100644
--- a/application/core/Server/Config.php
+++ b/application/core/Server/Config.php
@@ -5,9 +5,9 @@ namespace ManiaControl\Server;
/**
* Model Class holding the Server Config
*
- * @author steeffeen
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Config {
/*
@@ -22,17 +22,17 @@ class Config {
/**
* Create a new Server Config Instance
*
- * @param string $id Config Id
- * @param string $host Server Ip
- * @param string $port Server Port
+ * @param string $id Config Id
+ * @param string $host Server Ip
+ * @param string $port Server Port
* @param string $login XmlRpc Login
- * @param string $pass XmlRpc Password
+ * @param string $pass XmlRpc Password
*/
public function __construct($id = null, $host = null, $port = null, $login = null, $pass = null) {
- $this->id = $id;
- $this->host = $host;
- $this->port = $port;
+ $this->id = $id;
+ $this->host = $host;
+ $this->port = $port;
$this->login = $login;
- $this->pass = $pass;
+ $this->pass = $pass;
}
}
diff --git a/application/core/Server/RankingManager.php b/application/core/Server/RankingManager.php
index 3c854f24..845f34f3 100644
--- a/application/core/Server/RankingManager.php
+++ b/application/core/Server/RankingManager.php
@@ -11,8 +11,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
/**
* Class managing Rankings
*
- * @author kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class RankingManager implements CallbackListener {
@@ -42,20 +42,10 @@ class RankingManager implements CallbackListener {
public function onInit() {
try {
$this->maniaControl->client->triggerModeScriptEvent('LibXmlRpc_GetRankings', '');
- } catch(NotInScriptModeException $e) {
+ } catch (NotInScriptModeException $e) {
}
}
- /**
- * Get Rankings
- *
- * @return array
- */
- public function getRankings() {
- return $this->rankings;
- }
-
-
/**
* Handle stats on callbacks (never call this Method)
*
@@ -65,7 +55,7 @@ class RankingManager implements CallbackListener {
$callbackName = $callback[1][0];
//TODO not tested in TrackMania
- switch($callbackName) {
+ switch ($callbackName) {
case 'updateRankings':
$this->updateRankings($callback[1][1][0]);
break;
@@ -89,7 +79,7 @@ class RankingManager implements CallbackListener {
}
$scores = explode(';', $data);
- foreach($scores as $player) {
+ foreach ($scores as $player) {
if (strpos($player, ':') !== false) {
$tmp = explode(':', $player);
$this->rankings[$tmp[0]] = $tmp[1];
@@ -101,6 +91,15 @@ class RankingManager implements CallbackListener {
$this->maniaControl->callbackManager->triggerCallback(Callbacks::RANKINGSUPDATED, $this->getRankings());
}
+ /**
+ * Get Rankings
+ *
+ * @return array
+ */
+ public function getRankings() {
+ return $this->rankings;
+ }
+
/**
* Get the Current Leading Players (as Login Array)
*
@@ -109,7 +108,7 @@ class RankingManager implements CallbackListener {
public function getLeaders() {
$leaders = array();
$prev = -1;
- foreach($this->rankings as $score) {
+ foreach ($this->rankings as $score) {
if ($prev != -1 && $prev < $score) {
return $leaders;
}
diff --git a/application/core/Server/Server.php b/application/core/Server/Server.php
index 787d47a3..61036c37 100644
--- a/application/core/Server/Server.php
+++ b/application/core/Server/Server.php
@@ -4,29 +4,28 @@ namespace ManiaControl\Server;
use ManiaControl\Callbacks\CallbackListener;
use ManiaControl\Callbacks\CallbackManager;
+use ManiaControl\CommandLineHelper;
use ManiaControl\ManiaControl;
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
-use ManiaControl\CommandLineHelper;
/**
* Class providing Access to the connected ManiaPlanet Server
- *
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Server implements CallbackListener {
/*
* Constants
*/
- const TABLE_SERVERS = 'mc_servers';
+ const TABLE_SERVERS = 'mc_servers';
const CB_TEAM_MODE_CHANGED = 'ServerCallback.TeamModeChanged';
-
+
/*
* Public Properties
*/
/**
- *
* @var Config $config
*/
public $config = null;
@@ -40,7 +39,7 @@ class Server implements CallbackListener {
public $serverCommands = null;
public $usageReporter = null;
public $rankingManager = null;
-
+
/*
* Private Properties
*/
@@ -49,28 +48,55 @@ class Server implements CallbackListener {
/**
* Construct a new Server
- *
+ *
* @param ManiaControl $maniaControl
*/
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
$this->initTables();
-
+
$this->serverCommands = new ServerCommands($maniaControl);
- $this->usageReporter = new UsageReporter($maniaControl);
+ $this->usageReporter = new UsageReporter($maniaControl);
$this->rankingManager = new RankingManager($maniaControl);
-
+
// Register for callbacks
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_ONINIT, $this, 'onInit');
}
+ /**
+ * Initialize necessary Database Tables
+ *
+ * @return bool
+ */
+ private function initTables() {
+ $mysqli = $this->maniaControl->database->mysqli;
+ $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_SERVERS . "` (
+ `index` int(11) NOT NULL AUTO_INCREMENT,
+ `login` varchar(100) NOT NULL,
+ PRIMARY KEY (`index`),
+ UNIQUE KEY `login` (`login`)
+ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Servers' AUTO_INCREMENT=1;";
+ $statement = $mysqli->prepare($query);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error, E_USER_ERROR);
+ return false;
+ }
+ $statement->execute();
+ if ($statement->error) {
+ trigger_error($statement->error, E_USER_ERROR);
+ return false;
+ }
+ $statement->close();
+ return true;
+ }
+
/**
* Load the Server Configuration from the Config XML
*/
public function loadConfig() {
// Server id parameter
$serverId = CommandLineHelper::getParameter('-id');
-
+
// Xml server tag with given id
$serverTag = null;
if ($serverId) {
@@ -81,8 +107,7 @@ class Server implements CallbackListener {
if (!$serverTag) {
trigger_error("No Server configured with the ID '{$serverId}'!", E_USER_ERROR);
}
- }
- else {
+ } else {
$serverTags = $this->maniaControl->config->xpath('server');
if ($serverTags) {
$serverTag = $serverTags[0];
@@ -91,62 +116,92 @@ class Server implements CallbackListener {
trigger_error('No Server configured!', E_USER_ERROR);
}
}
-
+
// Host
$host = $serverTag->xpath('host');
if ($host) {
- $host = (string) $host[0];
+ $host = (string)$host[0];
}
if (!$host) {
trigger_error("Invalid server configuration (host).", E_USER_ERROR);
}
-
+
// Port
$port = $serverTag->xpath('port');
if ($port) {
- $port = (string) $port[0];
+ $port = (string)$port[0];
}
if (!$port) {
trigger_error("Invalid server configuration (port).", E_USER_ERROR);
}
-
+
// Login
$login = $serverTag->xpath('login');
if ($login) {
- $login = (string) $login[0];
+ $login = (string)$login[0];
}
if (!$login) {
trigger_error("Invalid server configuration (login).", E_USER_ERROR);
}
-
+
// Password
$pass = $serverTag->xpath('pass');
if ($pass) {
- $pass = (string) $pass[0];
+ $pass = (string)$pass[0];
}
if (!$pass) {
trigger_error("Invalid server configuration (password).", E_USER_ERROR);
}
-
+
// Create config object
$this->config = new Config($serverId, $host, $port, $login, $pass);
}
+ /**
+ * Gets all Servers from the Database
+ *
+ * @return array
+ */
+ public function getAllServers() {
+ $mysqli = $this->maniaControl->database->mysqli;
+ $query = "SELECT * FROM `" . self::TABLE_SERVERS . "`";
+ $result = $mysqli->query($query);
+ if (!$result) {
+ trigger_error($mysqli->error);
+ return array();
+ }
+
+ $servers = array();
+ while ($row = $result->fetch_object()) {
+ array_push($servers, $row);
+ }
+ $result->close();
+
+ return $servers;
+ }
+
+ /**
+ * Handle OnInit Callback
+ */
+ public function onInit() {
+ $this->updateProperties();
+ }
+
/**
* Refetch the Server Properties
*/
private function updateProperties() {
// System info
- $systemInfo = $this->maniaControl->client->getSystemInfo();
- $this->ip = $systemInfo->publishedIp;
- $this->port = $systemInfo->port;
+ $systemInfo = $this->maniaControl->client->getSystemInfo();
+ $this->ip = $systemInfo->publishedIp;
+ $this->port = $systemInfo->port;
$this->p2pPort = $systemInfo->p2PPort;
- $this->login = $systemInfo->serverLogin;
+ $this->login = $systemInfo->serverLogin;
$this->titleId = $systemInfo->titleId;
-
+
// Database index
- $mysqli = $this->maniaControl->database->mysqli;
- $query = "INSERT INTO `" . self::TABLE_SERVERS . "` (
+ $mysqli = $this->maniaControl->database->mysqli;
+ $query = "INSERT INTO `" . self::TABLE_SERVERS . "` (
`login`
) VALUES (
?
@@ -168,72 +223,15 @@ class Server implements CallbackListener {
$statement->close();
}
- /**
- * Initialize necessary Database Tables
- *
- * @return bool
- */
- private function initTables() {
- $mysqli = $this->maniaControl->database->mysqli;
- $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_SERVERS . "` (
- `index` int(11) NOT NULL AUTO_INCREMENT,
- `login` varchar(100) NOT NULL,
- PRIMARY KEY (`index`),
- UNIQUE KEY `login` (`login`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Servers' AUTO_INCREMENT=1;";
- $statement = $mysqli->prepare($query);
- if ($mysqli->error) {
- trigger_error($mysqli->error, E_USER_ERROR);
- return false;
- }
- $statement->execute();
- if ($statement->error) {
- trigger_error($statement->error, E_USER_ERROR);
- return false;
- }
- $statement->close();
- return true;
- }
-
- /**
- * Gets all Servers from the Database
- *
- * @return array
- */
- public function getAllServers() {
- $mysqli = $this->maniaControl->database->mysqli;
- $query = "SELECT * FROM `" . self::TABLE_SERVERS . "`";
- $result = $mysqli->query($query);
- if (!$result) {
- trigger_error($mysqli->error);
- return array();
- }
-
- $servers = array();
- while ($row = $result->fetch_object()) {
- array_push($servers, $row);
- }
- $result->close();
-
- return $servers;
- }
-
- /**
- * Handle OnInit Callback
- */
- public function onInit() {
- $this->updateProperties();
- }
-
/**
* Set if the Server Runs a Team-Mode or not
- *
+ *
* @param bool $teamMode
*/
public function setTeamMode($teamMode = true) {
- $oldStatus = $this->teamMode;
+ $oldStatus = $this->teamMode;
$this->teamMode = $teamMode;
-
+
// Trigger callback
if ($oldStatus != $this->teamMode) {
$this->maniaControl->callbackManager->triggerCallback(self::CB_TEAM_MODE_CHANGED, $teamMode);
@@ -242,28 +240,16 @@ class Server implements CallbackListener {
/**
* Check if the Server Runs a TeamMode
- *
+ *
* @return bool
*/
public function isTeamMode() {
return $this->teamMode;
}
- /**
- * Fetch Game Data Directory
- *
- * @return string
- */
- public function getDataDirectory() {
- if ($this->dataDirectory == '') {
- $this->dataDirectory = $this->maniaControl->client->gameDataDirectory();
- }
- return $this->dataDirectory;
- }
-
/**
* Fetch Maps Directory
- *
+ *
* @return string
*/
public function getMapsDirectory() {
@@ -274,9 +260,87 @@ class Server implements CallbackListener {
return "{$dataDirectory}Maps/";
}
+ /**
+ * Fetch Game Data Directory
+ *
+ * @return string
+ */
+ public function getDataDirectory() {
+ if ($this->dataDirectory == '') {
+ $this->dataDirectory = $this->maniaControl->client->gameDataDirectory();
+ }
+ return $this->dataDirectory;
+ }
+
+ /**
+ * Get Server Player Info
+ *
+ * @return \Maniaplanet\DedicatedServer\Structures\Player
+ */
+ public function getInfo() {
+ return $this->maniaControl->client->getMainServerPlayerInfo();
+ }
+
+ /**
+ * Retrieve Validation Replay for the given Player
+ *
+ * @param $login
+ * @return string
+ */
+ public function getValidationReplay($login) {
+ try {
+ $replay = $this->maniaControl->client->getValidationReplay($login);
+ } catch (Exception $e) {
+ // TODO temp added 19.04.2014
+ $this->maniaControl->errorHandler->triggerDebugNotice("Exception line 330 Server.php" . $e->getMessage());
+
+ trigger_error("Couldn't get validation replay of '{$login}'. " . $e->getMessage());
+ return null;
+ }
+ return $replay;
+ }
+
+ /**
+ * Retrieve Ghost Replay for the given Player
+ *
+ * @param $login
+ * @return string
+ */
+ public function getGhostReplay($login) {
+ $dataDir = $this->getDataDirectory();
+ if (!$this->checkAccess($dataDir)) {
+ return null;
+ }
+
+ // Build file name
+ $map = $this->maniaControl->mapManager->getCurrentMap();
+ $gameMode = $this->getGameMode();
+ $time = time();
+ $fileName = "GhostReplays/Ghost.{$login}.{$gameMode}.{$time}.{$map->uid}.Replay.Gbx";
+
+ // Save ghost replay
+ try {
+ $this->maniaControl->client->saveBestGhostsReplay($login, $fileName);
+ } catch (Exception $e) {
+ // TODO temp added 19.04.2014
+ $this->maniaControl->errorHandler->triggerDebugNotice("Exception line 360 Server.php" . $e->getMessage());
+
+ trigger_error("Couldn't save ghost replay. " . $e->getMessage());
+ return null;
+ }
+
+ // Load replay file
+ $ghostReplay = file_get_contents("{$dataDir}Replays/{$fileName}");
+ if (!$ghostReplay) {
+ trigger_error("Couldn't retrieve saved ghost replay.");
+ return null;
+ }
+ return $ghostReplay;
+ }
+
/**
* Checks if ManiaControl has Access to the given Directory
- *
+ *
* @param string $directory
* @return bool
*/
@@ -287,27 +351,17 @@ class Server implements CallbackListener {
return (is_dir($directory) && is_writable($directory));
}
- /**
- * Get Server Player Info
- *
- * @return \Maniaplanet\DedicatedServer\Structures\Player
- */
- public function getInfo() {
- return $this->maniaControl->client->getMainServerPlayerInfo();
- }
-
/**
* Fetch current Game Mode
- *
+ *
* @param bool $stringValue
- * @param int $parseValue
+ * @param int $parseValue
* @return int | string
*/
public function getGameMode($stringValue = false, $parseValue = null) {
if (is_int($parseValue)) {
$gameMode = $parseValue;
- }
- else {
+ } else {
$gameMode = $this->maniaControl->client->getGameMode();
}
if ($stringValue) {
@@ -333,68 +387,9 @@ class Server implements CallbackListener {
return $gameMode;
}
- /**
- * Retrieve Validation Replay for the given Player
- *
- * @param $login
- * @return string
- */
- public function getValidationReplay($login) {
- try {
- $replay = $this->maniaControl->client->getValidationReplay($login);
- }
- catch (Exception $e) {
- // TODO temp added 19.04.2014
- $this->maniaControl->errorHandler->triggerDebugNotice("Exception line 330 Server.php" . $e->getMessage());
-
- trigger_error("Couldn't get validation replay of '{$login}'. " . $e->getMessage());
- return null;
- }
- return $replay;
- }
-
- /**
- * Retrieve Ghost Replay for the given Player
- *
- * @param $login
- * @return string
- */
- public function getGhostReplay($login) {
- $dataDir = $this->getDataDirectory();
- if (!$this->checkAccess($dataDir)) {
- return null;
- }
-
- // Build file name
- $map = $this->maniaControl->mapManager->getCurrentMap();
- $gameMode = $this->getGameMode();
- $time = time();
- $fileName = "GhostReplays/Ghost.{$login}.{$gameMode}.{$time}.{$map->uid}.Replay.Gbx";
-
- // Save ghost replay
- try {
- $this->maniaControl->client->saveBestGhostsReplay($login, $fileName);
- }
- catch (Exception $e) {
- // TODO temp added 19.04.2014
- $this->maniaControl->errorHandler->triggerDebugNotice("Exception line 360 Server.php" . $e->getMessage());
-
- trigger_error("Couldn't save ghost replay. " . $e->getMessage());
- return null;
- }
-
- // Load replay file
- $ghostReplay = file_get_contents("{$dataDir}Replays/{$fileName}");
- if (!$ghostReplay) {
- trigger_error("Couldn't retrieve saved ghost replay.");
- return null;
- }
- return $ghostReplay;
- }
-
/**
* Wait for the Server to have the given Status
- *
+ *
* @param int $statusCode
* @return bool
*/
@@ -405,9 +400,9 @@ class Server implements CallbackListener {
return true;
}
// Server not yet in given status - Wait for it...
- $waitBegin = time();
+ $waitBegin = time();
$maxWaitTime = 50;
- $lastStatus = $response->name;
+ $lastStatus = $response->name;
$this->maniaControl->log("Waiting for server to reach status {$statusCode}...");
$this->maniaControl->log("Current Status: {$lastStatus}");
while ($response->code !== 4) {
diff --git a/application/core/Server/ServerCommands.php b/application/core/Server/ServerCommands.php
index 4eba6a2b..a4041819 100644
--- a/application/core/Server/ServerCommands.php
+++ b/application/core/Server/ServerCommands.php
@@ -18,8 +18,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
/**
* Class offering various Commands related to the Dedicated Server
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ServerCommands implements CallbackListener, CommandListener, ManialinkPageAnswerListener, TimerListener {
@@ -106,11 +106,11 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
//Check if Pause exists in current GameMode
try {
$scriptInfos = $this->maniaControl->client->getModeScriptInfo();
- } catch(NotInScriptModeException $e) {
+ } catch (NotInScriptModeException $e) {
return;
}
$pauseExists = false;
- foreach($scriptInfos->commandDescs as $param) {
+ foreach ($scriptInfos->commandDescs as $param) {
if ($param->name == "Command_ForceWarmUp") {
$pauseExists = true;
break;
@@ -161,7 +161,7 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
try {
$this->maniaControl->client->triggerModeScriptEvent('WarmUp_Extend', '10');
- } catch(NotInScriptModeException $e) {
+ } catch (NotInScriptModeException $e) {
return;
}
@@ -182,7 +182,7 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
try {
$this->maniaControl->client->triggerModeScriptEvent('WarmUp_Stop', '');
- } catch(NotInScriptModeException $e) {
+ } catch (NotInScriptModeException $e) {
return;
}
@@ -190,9 +190,10 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
}
/**
- * Breaks the current game
+ * Pause the current game
*
- * @param array $callback
+ * @param array $callback
+ * @param Player $player
*/
public function setPause(array $callback, Player $player) {
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_SET_PAUSE)) {
@@ -200,8 +201,8 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
return;
}
try {
- $this->maniaControl->client->sendModeScriptCommands(array('Command_ForceWarmUp' => True));
- } catch(NotInScriptModeException $e) {
+ $this->maniaControl->client->sendModeScriptCommands(array('Command_ForceWarmUp' => true));
+ } catch (NotInScriptModeException $e) {
return;
}
@@ -231,6 +232,16 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
}
}
+ /**
+ * Perform server shutdown
+ *
+ * @param string $login
+ */
+ private function shutdownServer($login = '#') {
+ $this->maniaControl->client->stopServer();
+ $this->maniaControl->quit("Server shutdown requested by '{$login}'");
+ }
+
/**
* Handle //systeminfo command
*
@@ -410,14 +421,4 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
$this->maniaControl->client->setMaxSpectators($amount);
$this->maniaControl->chat->sendSuccess("Changed max spectators to: {$amount}", $player->login);
}
-
- /**
- * Perform server shutdown
- *
- * @param string $login
- */
- private function shutdownServer($login = '#') {
- $this->maniaControl->client->stopServer();
- $this->maniaControl->quit("Server shutdown requested by '{$login}'");
- }
}
diff --git a/application/core/Server/UsageReporter.php b/application/core/Server/UsageReporter.php
index ce99517d..feed6914 100644
--- a/application/core/Server/UsageReporter.php
+++ b/application/core/Server/UsageReporter.php
@@ -11,9 +11,9 @@ use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
/**
* Class reporting ManiaControl Usage for the Server
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class UsageReporter implements TimerListener {
/*
@@ -58,9 +58,9 @@ class UsageReporter implements TimerListener {
$properties['TitleId'] = $this->maniaControl->server->titleId;
$properties['ServerName'] = Formatter::stripDirtyCodes($this->maniaControl->client->getServerName());
- $properties['PlayerCount'] = $this->maniaControl->playerManager->getPlayerCount();
- $properties['MemoryUsage'] = memory_get_usage();
- $properties['MemoryPeakUsage'] = memory_get_peak_usage();
+ $properties['PlayerCount'] = $this->maniaControl->playerManager->getPlayerCount();
+ $properties['MemoryUsage'] = memory_get_usage();
+ $properties['MemoryPeakUsage'] = memory_get_peak_usage();
$maxPlayers = $this->maniaControl->client->getMaxPlayers();
$properties['MaxPlayers'] = $maxPlayers["CurrentValue"];
@@ -68,7 +68,7 @@ class UsageReporter implements TimerListener {
try {
$scriptName = $this->maniaControl->client->getScriptName();
$properties['ScriptName'] = $scriptName["CurrentValue"];
- } catch(Exception $e) {
+ } catch (Exception $e) {
if ($e->getMessage() == 'Not in script mode.') {
$properties['ScriptName'] = '';
} else {
@@ -79,7 +79,7 @@ class UsageReporter implements TimerListener {
$activePlugins = array();
if (is_array($this->maniaControl->pluginManager->getActivePlugins())) {
- foreach($this->maniaControl->pluginManager->getActivePlugins() as $plugin) {
+ foreach ($this->maniaControl->pluginManager->getActivePlugins() as $plugin) {
/** @var Plugin $plugin */
if (!is_null($plugin::getId()) && is_numeric($plugin::getId())) {
$activePlugins[] = $plugin::getId();
@@ -93,7 +93,7 @@ class UsageReporter implements TimerListener {
$info = base64_encode($json);
$self = $this;
- $this->maniaControl->fileReader->loadFile(ManiaControl::URL_WEBSERVICE . "/usagereport?info=" . urlencode($info), function ($response, $error) use(&$self){
+ $this->maniaControl->fileReader->loadFile(ManiaControl::URL_WEBSERVICE . "/usagereport?info=" . urlencode($info), function ($response, $error) use (&$self) {
$response = json_decode($response);
if ($error || !$response) {
$self->maniaControl->log("Error while Sending data: " . $error);
diff --git a/application/core/Settings/SettingManager.php b/application/core/Settings/SettingManager.php
index 2df82e4c..a9d2a60c 100644
--- a/application/core/Settings/SettingManager.php
+++ b/application/core/Settings/SettingManager.php
@@ -9,23 +9,23 @@ use ManiaControl\Plugins\PluginManager;
/**
* Class managing Settings and Configurations
- *
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class SettingManager implements CallbackListener {
/*
* Constants
*/
- const TABLE_SETTINGS = 'mc_settings';
- const TYPE_STRING = 'string';
- const TYPE_INT = 'int';
- const TYPE_REAL = 'real';
- const TYPE_BOOL = 'bool';
- const TYPE_ARRAY = 'array';
+ const TABLE_SETTINGS = 'mc_settings';
+ const TYPE_STRING = 'string';
+ const TYPE_INT = 'int';
+ const TYPE_REAL = 'real';
+ const TYPE_BOOL = 'bool';
+ const TYPE_ARRAY = 'array';
const CB_SETTINGS_CHANGED = 'SettingManager.SettingsChanged';
-
+
/*
* Private Properties
*/
@@ -35,32 +35,25 @@ class SettingManager implements CallbackListener {
/**
* Construct a new Setting Manager
- *
+ *
* @param ManiaControl $maniaControl
*/
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
$this->initTables();
-
+
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_AFTERINIT, $this, 'handleAfterInit');
}
- /**
- * Handle After Init Callback
- */
- public function handleAfterInit() {
- $this->deleteUnusedSettings();
- }
-
/**
* Initialize necessary Database Tables
- *
+ *
* @return bool
*/
private function initTables() {
- $mysqli = $this->maniaControl->database->mysqli;
- $defaultType = "'" . self::TYPE_STRING . "'";
- $typeSet = $defaultType . ",'" . self::TYPE_INT . "','" . self::TYPE_REAL . "','" . self::TYPE_BOOL . "','" . self::TYPE_ARRAY . "'";
+ $mysqli = $this->maniaControl->database->mysqli;
+ $defaultType = "'" . self::TYPE_STRING . "'";
+ $typeSet = $defaultType . ",'" . self::TYPE_INT . "','" . self::TYPE_REAL . "','" . self::TYPE_BOOL . "','" . self::TYPE_ARRAY . "'";
$settingTableQuery = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_SETTINGS . "` (
`index` int(11) NOT NULL AUTO_INCREMENT,
`class` varchar(100) NOT NULL,
@@ -72,121 +65,63 @@ class SettingManager implements CallbackListener {
PRIMARY KEY (`index`),
UNIQUE KEY `settingId` (`class`,`setting`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Settings and Configurations' AUTO_INCREMENT=1;";
- $result = $mysqli->query($settingTableQuery);
+ $result = $mysqli->query($settingTableQuery);
if ($mysqli->error) {
trigger_error($mysqli->error, E_USER_ERROR);
}
-
+
return $result;
}
/**
- * Get Class Name of a Parameter
- *
- * @param mixed $param
- * @return string
+ * Handle After Init Callback
*/
- private function getClassName($param) {
- if (is_object($param)) {
- return get_class($param);
- }
- if (is_string($param)) {
- return $param;
- }
- trigger_error('Invalid class param. ' . $param);
- return (string) $param;
+ public function handleAfterInit() {
+ $this->deleteUnusedSettings();
}
/**
- * Get Type of a Parameter
- *
- * @param mixed $param
- * @return string
+ * Delete all unused Settings that haven't been initialized during the current Startup
+ *
+ * @return bool
*/
- private function getType($param) {
- if (is_int($param)) {
- return self::TYPE_INT;
+ private function deleteUnusedSettings() {
+ $mysqli = $this->maniaControl->database->mysqli;
+ $settingQuery = "DELETE FROM `" . self::TABLE_SETTINGS . "`
+ WHERE `changed` < NOW() - INTERVAL 1 HOUR;";
+ $settingStatement = $mysqli->prepare($settingQuery);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error);
+ return false;
}
- if (is_real($param)) {
- return self::TYPE_REAL;
+ $success = $settingStatement->execute();
+ if ($settingStatement->error) {
+ trigger_error($settingStatement->error);
+ $settingStatement->close();
+ return false;
}
- if (is_bool($param)) {
- return self::TYPE_BOOL;
- }
- if (is_string($param)) {
- return self::TYPE_STRING;
- }
- if (is_array($param)) {
- return self::TYPE_ARRAY;
- }
- trigger_error('Unsupported setting type. ' . print_r($param, true));
- return null;
- }
-
- /**
- * Cast a Setting to the given Type
- *
- * @param string $type
- * @param mixed $value
- * @return mixed
- */
- private function castSetting($type, $value) {
- if ($type === self::TYPE_INT) {
- return (int) $value;
- }
- if ($type === self::TYPE_REAL) {
- return (float) $value;
- }
- if ($type === self::TYPE_BOOL) {
- return (bool) $value;
- }
- if ($type === self::TYPE_STRING) {
- return (string) $value;
- }
- if ($type === self::TYPE_ARRAY) {
- return explode($this->arrayDelimiter, $value);
- }
- trigger_error('Unsupported setting type. ' . print_r($type, true));
- return $value;
- }
-
- /**
- * Format a Setting for saving it to the Database
- *
- * @param mixed $value
- * @param string $type
- * @return mixed
- */
- private function formatSetting($value, $type = null) {
- if ($type === null) {
- $type = $this->getType($value);
- }
- if ($type === self::TYPE_ARRAY) {
- return implode($this->arrayDelimiter, $value);
- }
- if ($type === self::TYPE_BOOL) {
- return ($value ? 1 : 0);
- }
- return $value;
+ $settingStatement->close();
+ $this->storedSettings = array();
+ return $success;
}
/**
* Initialize a Setting for the given Object
- *
- * @param mixed $object
+ *
+ * @param mixed $object
* @param string $settingName
- * @param mixed $default
+ * @param mixed $default
* @return bool
*/
public function initSetting($object, $settingName, $default) {
if (is_null($default) || is_object($default)) {
return false;
}
- $className = $this->getClassName($object);
- $type = $this->getType($default);
- $default = $this->formatSetting($default, $type);
- $mysqli = $this->maniaControl->database->mysqli;
- $settingQuery = "INSERT INTO `" . self::TABLE_SETTINGS . "` (
+ $className = $this->getClassName($object);
+ $type = $this->getType($default);
+ $default = $this->formatSetting($default, $type);
+ $mysqli = $this->maniaControl->database->mysqli;
+ $settingQuery = "INSERT INTO `" . self::TABLE_SETTINGS . "` (
`class`,
`setting`,
`type`,
@@ -217,18 +152,81 @@ class SettingManager implements CallbackListener {
return $success;
}
+ /**
+ * Get Class Name of a Parameter
+ *
+ * @param mixed $param
+ * @return string
+ */
+ private function getClassName($param) {
+ if (is_object($param)) {
+ return get_class($param);
+ }
+ if (is_string($param)) {
+ return $param;
+ }
+ trigger_error('Invalid class param. ' . $param);
+ return (string)$param;
+ }
+
+ /**
+ * Get Type of a Parameter
+ *
+ * @param mixed $param
+ * @return string
+ */
+ private function getType($param) {
+ if (is_int($param)) {
+ return self::TYPE_INT;
+ }
+ if (is_real($param)) {
+ return self::TYPE_REAL;
+ }
+ if (is_bool($param)) {
+ return self::TYPE_BOOL;
+ }
+ if (is_string($param)) {
+ return self::TYPE_STRING;
+ }
+ if (is_array($param)) {
+ return self::TYPE_ARRAY;
+ }
+ trigger_error('Unsupported setting type. ' . print_r($param, true));
+ return null;
+ }
+
+ /**
+ * Format a Setting for saving it to the Database
+ *
+ * @param mixed $value
+ * @param string $type
+ * @return mixed
+ */
+ private function formatSetting($value, $type = null) {
+ if ($type === null) {
+ $type = $this->getType($value);
+ }
+ if ($type === self::TYPE_ARRAY) {
+ return implode($this->arrayDelimiter, $value);
+ }
+ if ($type === self::TYPE_BOOL) {
+ return ($value ? 1 : 0);
+ }
+ return $value;
+ }
+
/**
* Get a Setting by its Index
- *
- * @param int $settingIndex
+ *
+ * @param int $settingIndex
* @param mixed $default
* @return mixed
*/
public function getSettingByIndex($settingIndex, $default = false) {
- $mysqli = $this->maniaControl->database->mysqli;
+ $mysqli = $this->maniaControl->database->mysqli;
$settingQuery = "SELECT * FROM `" . self::TABLE_SETTINGS . "`
WHERE `index` = {$settingIndex};";
- $result = $mysqli->query($settingQuery);
+ $result = $mysqli->query($settingQuery);
if (!$result) {
trigger_error($mysqli->error);
return null;
@@ -244,22 +242,22 @@ class SettingManager implements CallbackListener {
/**
* Get Setting by Name for the given Object
- *
- * @param mixed $object
+ *
+ * @param mixed $object
* @param string $settingName
- * @param mixed $default
+ * @param mixed $default
* @return mixed
*/
public function getSetting($object, $settingName, $default = null) {
$className = $this->getClassName($object);
-
+
// Check if setting is already in the ram
if (isset($this->storedSettings[$className . $settingName])) {
return $this->storedSettings[$className . $settingName];
}
-
- $mysqli = $this->maniaControl->database->mysqli;
- $settingQuery = "SELECT `type`, `value` FROM `" . self::TABLE_SETTINGS . "`
+
+ $mysqli = $this->maniaControl->database->mysqli;
+ $settingQuery = "SELECT `type`, `value` FROM `" . self::TABLE_SETTINGS . "`
WHERE `class` = ?
AND `setting` = ?;";
$settingStatement = $mysqli->prepare($settingQuery);
@@ -283,7 +281,7 @@ class SettingManager implements CallbackListener {
$settingStatement->free_result();
$settingStatement->close();
$setting = $this->castSetting($type, $value);
-
+
// Store setting in the ram
$this->storedSettings[$className . $settingName] = $setting;
return $setting;
@@ -291,17 +289,17 @@ class SettingManager implements CallbackListener {
/**
* Set a Setting for the given Object
- *
- * @param mixed $object
+ *
+ * @param mixed $object
* @param string $settingName
- * @param mixed $value
+ * @param mixed $value
* @return bool
*/
public function setSetting($object, $settingName, $value) {
$className = $this->getClassName($object);
-
- $mysqli = $this->maniaControl->database->mysqli;
- $settingQuery = "UPDATE `" . self::TABLE_SETTINGS . "`
+
+ $mysqli = $this->maniaControl->database->mysqli;
+ $settingQuery = "UPDATE `" . self::TABLE_SETTINGS . "`
SET `value` = ?
WHERE `class` = ?
AND `setting` = ?;";
@@ -319,25 +317,52 @@ class SettingManager implements CallbackListener {
return false;
}
$settingStatement->close();
-
+
$this->storedSettings[$className . $settingName] = $value;
-
+
// Trigger settings changed Callback
$this->maniaControl->callbackManager->triggerCallback(self::CB_SETTINGS_CHANGED, $className, $settingName, $value);
return $success;
}
+ /**
+ * Cast a Setting to the given Type
+ *
+ * @param string $type
+ * @param mixed $value
+ * @return mixed
+ */
+ private function castSetting($type, $value) {
+ if ($type === self::TYPE_INT) {
+ return (int)$value;
+ }
+ if ($type === self::TYPE_REAL) {
+ return (float)$value;
+ }
+ if ($type === self::TYPE_BOOL) {
+ return (bool)$value;
+ }
+ if ($type === self::TYPE_STRING) {
+ return (string)$value;
+ }
+ if ($type === self::TYPE_ARRAY) {
+ return explode($this->arrayDelimiter, $value);
+ }
+ trigger_error('Unsupported setting type. ' . print_r($type, true));
+ return $value;
+ }
+
/**
* Reset a Setting to its default Value
- *
- * @param mixed $object
+ *
+ * @param mixed $object
* @param string $settingName
* @return bool
*/
public function resetSetting($object, $settingName) {
- $className = $this->getClassName($object);
- $mysqli = $this->maniaControl->database->mysqli;
- $settingQuery = "UPDATE `" . self::TABLE_SETTINGS . "`
+ $className = $this->getClassName($object);
+ $mysqli = $this->maniaControl->database->mysqli;
+ $settingQuery = "UPDATE `" . self::TABLE_SETTINGS . "`
SET `value` = `default`
WHERE `class` = ?
AND `setting` = ?;";
@@ -362,15 +387,15 @@ class SettingManager implements CallbackListener {
/**
* Delete a Setting
- *
- * @param mixed $object
+ *
+ * @param mixed $object
* @param string $settingName
* @return bool
*/
public function deleteSetting($object, $settingName) {
- $className = $this->getClassName($object);
- $mysqli = $this->maniaControl->database->mysqli;
- $settingQuery = "DELETE FROM `" . self::TABLE_SETTINGS . "`
+ $className = $this->getClassName($object);
+ $mysqli = $this->maniaControl->database->mysqli;
+ $settingQuery = "DELETE FROM `" . self::TABLE_SETTINGS . "`
WHERE `class` = ?
AND `setting` = ?;";
$settingStatement = $mysqli->prepare($settingQuery);
@@ -394,16 +419,16 @@ class SettingManager implements CallbackListener {
/**
* Get all Settings for the given Class
- *
+ *
* @param mixed $object
* @return array
*/
public function getSettingsByClass($object) {
$className = $this->getClassName($object);
- $mysqli = $this->maniaControl->database->mysqli;
- $query = "SELECT * FROM `" . self::TABLE_SETTINGS . "` WHERE `class` = '" . $mysqli->escape_string($className) . "'
+ $mysqli = $this->maniaControl->database->mysqli;
+ $query = "SELECT * FROM `" . self::TABLE_SETTINGS . "` WHERE `class` = '" . $mysqli->escape_string($className) . "'
ORDER BY `setting` ASC;";
- $result = $mysqli->query($query);
+ $result = $mysqli->query($query);
if ($mysqli->error) {
trigger_error($mysqli->error);
return null;
@@ -418,12 +443,12 @@ class SettingManager implements CallbackListener {
/**
* Get all settings
- *
+ *
* @return array
*/
public function getSettings() {
$mysqli = $this->maniaControl->database->mysqli;
- $query = "SELECT * FROM `" . self::TABLE_SETTINGS . "`
+ $query = "SELECT * FROM `" . self::TABLE_SETTINGS . "`
ORDER BY `class` ASC, `setting` ASC;";
$result = $mysqli->query($query);
if ($mysqli->error) {
@@ -440,12 +465,13 @@ class SettingManager implements CallbackListener {
/**
* Get all Setting Classes
- *
+ *
+ * @param bool $hidePluginClasses
* @return array
*/
public function getSettingClasses($hidePluginClasses = false) {
$mysqli = $this->maniaControl->database->mysqli;
- $query = "SELECT DISTINCT `class` FROM `" . self::TABLE_SETTINGS . "`
+ $query = "SELECT DISTINCT `class` FROM `" . self::TABLE_SETTINGS . "`
ORDER BY `class` ASC;";
$result = $mysqli->query($query);
if ($mysqli->error) {
@@ -461,29 +487,4 @@ class SettingManager implements CallbackListener {
$result->free();
return $settingClasses;
}
-
- /**
- * Delete all unused Settings that haven't been initialized during the current Startup
- *
- * @return bool
- */
- private function deleteUnusedSettings() {
- $mysqli = $this->maniaControl->database->mysqli;
- $settingQuery = "DELETE FROM `" . self::TABLE_SETTINGS . "`
- WHERE `changed` < NOW() - INTERVAL 1 HOUR;";
- $settingStatement = $mysqli->prepare($settingQuery);
- if ($mysqli->error) {
- trigger_error($mysqli->error);
- return false;
- }
- $success = $settingStatement->execute();
- if ($settingStatement->error) {
- trigger_error($settingStatement->error);
- $settingStatement->close();
- return false;
- }
- $settingStatement->close();
- $this->storedSettings = array();
- return $success;
- }
}
diff --git a/application/core/Statistics/SimpleStatsList.php b/application/core/Statistics/SimpleStatsList.php
index 44c7c961..a4fdc687 100644
--- a/application/core/Statistics/SimpleStatsList.php
+++ b/application/core/Statistics/SimpleStatsList.php
@@ -23,10 +23,10 @@ use ManiaControl\Players\PlayerManager;
/**
* Simple Stats List Class
- *
- * @author kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener, CommandListener {
/*
@@ -82,17 +82,6 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
$this->registerStat(StatisticManager::SPECIAL_STAT_HITS_PH, 85, "H/h", 15, StatisticManager::STAT_TYPE_FLOAT);
}
- /**
- * Show the stat List
- *
- * @param array $callback
- * @param Player $player
- */
- public function command_ShowStatsList(array $callback, Player $player) {
- $this->showStatsList($player);
- }
-
-
/**
* Register a Certain Stat
*
@@ -111,11 +100,21 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
$this->statsWidth += $width;
}
+ /**
+ * Show the stat List
+ *
+ * @param array $callback
+ * @param Player $player
+ */
+ public function command_ShowStatsList(array $callback, Player $player) {
+ $this->showStatsList($player);
+ }
/**
- * Show the PlayerList Widget to the Player
+ * Show the StatsList Widget to the Player
*
* @param Player $player
+ * @param string $order
*/
public function showStatsList(Player $player, $order = PlayerManager::STAT_SERVERTIME) {
$height = $this->maniaControl->manialinkManager->styleManager->getListWidgetsHeight();
@@ -173,7 +172,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
//Compute Headline
$x = $xStart + 55;
$statRankings = array();
- foreach($this->statArray as $key => $stat) {
+ foreach ($this->statArray as $key => $stat) {
$ranking = $this->maniaControl->statisticManager->getStatsRanking($stat["Name"]);
if (!empty($ranking)) {
$statRankings[$stat["Name"]] = $ranking;
@@ -188,16 +187,16 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
//Description Label
$i = 2;
- foreach($this->statArray as $statArray) {
+ foreach ($this->statArray as $statArray) {
if (!isset($labels[$i])) {
break;
}
/** @var Label_Text $label [] */
- $label = $labels[$i];
+ $label = $labels[$i];
$label->setAction(self::ACTION_SORT_STATS . '.' . $statArray["Name"]);
- $label->addTooltipLabelFeature($descriptionLabel, '$o '.$statArray["Name"]);
+ $label->addTooltipLabelFeature($descriptionLabel, '$o ' . $statArray["Name"]);
$i++;
}
@@ -213,7 +212,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
return;
}
- foreach($statRankings[$order] as $playerId => $value) {
+ foreach ($statRankings[$order] as $playerId => $value) {
$listPlayer = $this->maniaControl->playerManager->getPlayerByIndex($playerId);
if ($i == 15) {
break;
@@ -234,7 +233,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
$displayArray = array();
- foreach($this->statArray as $stat) {
+ foreach ($this->statArray as $stat) {
$statValue = 0;
if (isset($statRankings[$stat['Name']][$playerId])) {
$statValue = $statRankings[$stat['Name']][$playerId];
@@ -253,7 +252,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
$x = $xStart + 55;
- foreach($displayArray as $key => $array) {
+ foreach ($displayArray as $key => $array) {
$label = new Label_Text();
$playerFrame->add($label);
$label->setHAlign($hAlign);
@@ -262,7 +261,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
$label->setTextSize($textSize);
$label->setText($array['Value']);
$label->setTextColor($textColor);
- $label->addTooltipLabelFeature($descriptionLabel, '$o '.$key);
+ $label->addTooltipLabelFeature($descriptionLabel, '$o ' . $key);
$x += $array['Width'];
}
@@ -300,7 +299,7 @@ class SimpleStatsList implements ManialinkPageAnswerListener, CallbackListener,
$action = $actionArray[0] . "." . $actionArray[1];
- switch($action) {
+ switch ($action) {
case self::ACTION_SORT_STATS:
$playerLogin = $callback[1][1];
$player = $this->maniaControl->playerManager->getPlayer($playerLogin);
diff --git a/application/core/Statistics/StatisticCollector.php b/application/core/Statistics/StatisticCollector.php
index aa26488c..a681c950 100644
--- a/application/core/Statistics/StatisticCollector.php
+++ b/application/core/Statistics/StatisticCollector.php
@@ -11,9 +11,9 @@ use ManiaControl\Players\PlayerManager;
/**
* Statistic Collector Class
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class StatisticCollector implements CallbackListener {
/*
@@ -115,91 +115,12 @@ class StatisticCollector implements CallbackListener {
$leaders = $this->maniaControl->server->rankingManager->getLeaders();
- foreach($leaders as $leaderLogin) {
+ foreach ($leaders as $leaderLogin) {
$leader = $this->maniaControl->playerManager->getPlayer($leaderLogin);
$this->maniaControl->statisticManager->incrementStat(self::STAT_MAP_WINS, $leader);
}
}
- /**
- * Handle Player Shoots
- *
- * @param $login
- */
- private function handleOnShoot($login, $weaponNumber) {
- if (!isset($this->onShootArray[$login])) {
- $this->onShootArray[$login] = array(self::WEAPON_ROCKET => 0, self::WEAPON_ARROW => 0, self::WEAPON_NUCLEUS => 0, self::WEAPON_LASER => 0);
- $this->onShootArray[$login][$weaponNumber]++;
- } else {
- $this->onShootArray[$login][$weaponNumber]++;
- }
-
- //Write Shoot Data into database
- if (array_sum($this->onShootArray[$login]) > $this->maniaControl->settingManager->getSetting($this, self::SETTING_ON_SHOOT_PRESTORE)) {
- $player = $this->maniaControl->playerManager->getPlayer($login);
-
- $rocketShots = $this->onShootArray[$login][self::WEAPON_ROCKET];
- $laserShots = $this->onShootArray[$login][self::WEAPON_LASER];
- $arrowShots = $this->onShootArray[$login][self::WEAPON_ARROW];
- $nucleusShots = $this->onShootArray[$login][self::WEAPON_NUCLEUS];
-
- if ($rocketShots > 0) {
- $this->maniaControl->statisticManager->insertStat(self::STAT_ROCKET_SHOT, $player, $this->maniaControl->server->index, $rocketShots);
- $this->onShootArray[$login][self::WEAPON_ROCKET] = 0;
- }
- if ($laserShots > 0) {
- $this->maniaControl->statisticManager->insertStat(self::STAT_LASER_SHOT, $player, $this->maniaControl->server->index, $laserShots);
- $this->onShootArray[$login][self::WEAPON_LASER] = 0;
- }
- if ($arrowShots > 0) {
- $this->maniaControl->statisticManager->insertStat(self::STAT_ARROW_SHOT, $player, $this->maniaControl->server->index, $arrowShots);
- $this->onShootArray[$login][self::WEAPON_ARROW] = 0;
- }
- if ($nucleusShots > 0) {
- $this->maniaControl->statisticManager->insertStat(self::STAT_NUCLEUS_SHOT, $player, $this->maniaControl->server->index, $nucleusShots);
- $this->onShootArray[$login][self::WEAPON_NUCLEUS] = 0;
- }
-
- $this->maniaControl->statisticManager->insertStat(self::STAT_ON_SHOOT, $player, $this->maniaControl->server->index, $rocketShots + $laserShots + $arrowShots + $nucleusShots);
- }
- }
-
- /**
- * Gets the Weapon stat
- *
- * @param $weaponNumber
- * @return string
- */
- private function getWeaponStat($weaponNumber, $shot = true) {
- if ($shot) {
- switch($weaponNumber) {
- case self::WEAPON_ROCKET:
- return self::STAT_ROCKET_SHOT;
- case self::WEAPON_LASER:
- return self::STAT_LASER_SHOT;
- case self::WEAPON_ARROW:
- return self::STAT_ARROW_SHOT;
- case self::WEAPON_NUCLEUS:
- return self::STAT_NUCLEUS_SHOT;
- default:
- return -1;
- }
- } else {
- switch($weaponNumber) {
- case self::WEAPON_ROCKET:
- return self::STAT_ROCKET_HIT;
- case self::WEAPON_LASER:
- return self::STAT_LASER_HIT;
- case self::WEAPON_ARROW:
- return self::STAT_ARROW_HIT;
- case self::WEAPON_NUCLEUS:
- return self::STAT_NUCLEUS_HIT;
- default:
- return -1;
- }
- }
- }
-
/**
* Insert OnShoot Statistic when a player leaves
*
@@ -238,7 +159,7 @@ class StatisticCollector implements CallbackListener {
$callbackName = $callback[1][0];
- switch($callbackName) {
+ switch ($callbackName) {
case 'LibXmlRpc_OnShoot':
$this->handleOnShoot($callback[1][1][0], $callback[1][1][1]);
break;
@@ -261,7 +182,7 @@ class StatisticCollector implements CallbackListener {
case 'LibXmlRpc_OnCapture':
$logins = $callback[1][1][0];
$logins = explode(';', $logins);
- foreach($logins as $login) {
+ foreach ($logins as $login) {
$player = $this->maniaControl->playerManager->getPlayer($login);
if (!$player) {
continue;
@@ -333,11 +254,92 @@ class StatisticCollector implements CallbackListener {
$paramsObject = json_decode($callback[1][1]);
$durationTime = (int)(($paramsObject->EndTime - $paramsObject->StartTime) / 1000);
$scoresTable = $paramsObject->ScoresTable;
- foreach($scoresTable as $score) {
+ foreach ($scoresTable as $score) {
$player = $this->maniaControl->playerManager->getPlayer($score->Login);
$this->maniaControl->statisticManager->insertStat(self::STAT_PLAYTIME, $player, -1, $durationTime);
}
break;
}
}
+
+ /**
+ * Handle Player Shots
+ *
+ * @param string $login
+ * @param int $weaponNumber
+ */
+ private function handleOnShoot($login, $weaponNumber) {
+ if (!isset($this->onShootArray[$login])) {
+ $this->onShootArray[$login] = array(self::WEAPON_ROCKET => 0, self::WEAPON_ARROW => 0, self::WEAPON_NUCLEUS => 0, self::WEAPON_LASER => 0);
+ $this->onShootArray[$login][$weaponNumber]++;
+ } else {
+ $this->onShootArray[$login][$weaponNumber]++;
+ }
+
+ //Write Shoot Data into database
+ if (array_sum($this->onShootArray[$login]) > $this->maniaControl->settingManager->getSetting($this, self::SETTING_ON_SHOOT_PRESTORE)) {
+ $player = $this->maniaControl->playerManager->getPlayer($login);
+
+ $rocketShots = $this->onShootArray[$login][self::WEAPON_ROCKET];
+ $laserShots = $this->onShootArray[$login][self::WEAPON_LASER];
+ $arrowShots = $this->onShootArray[$login][self::WEAPON_ARROW];
+ $nucleusShots = $this->onShootArray[$login][self::WEAPON_NUCLEUS];
+
+ if ($rocketShots > 0) {
+ $this->maniaControl->statisticManager->insertStat(self::STAT_ROCKET_SHOT, $player, $this->maniaControl->server->index, $rocketShots);
+ $this->onShootArray[$login][self::WEAPON_ROCKET] = 0;
+ }
+ if ($laserShots > 0) {
+ $this->maniaControl->statisticManager->insertStat(self::STAT_LASER_SHOT, $player, $this->maniaControl->server->index, $laserShots);
+ $this->onShootArray[$login][self::WEAPON_LASER] = 0;
+ }
+ if ($arrowShots > 0) {
+ $this->maniaControl->statisticManager->insertStat(self::STAT_ARROW_SHOT, $player, $this->maniaControl->server->index, $arrowShots);
+ $this->onShootArray[$login][self::WEAPON_ARROW] = 0;
+ }
+ if ($nucleusShots > 0) {
+ $this->maniaControl->statisticManager->insertStat(self::STAT_NUCLEUS_SHOT, $player, $this->maniaControl->server->index, $nucleusShots);
+ $this->onShootArray[$login][self::WEAPON_NUCLEUS] = 0;
+ }
+
+ $this->maniaControl->statisticManager->insertStat(self::STAT_ON_SHOOT, $player, $this->maniaControl->server->index, $rocketShots + $laserShots + $arrowShots + $nucleusShots);
+ }
+ }
+
+ /**
+ * Get the Weapon stat
+ *
+ * @param int $weaponNumber
+ * @param bool $shot
+ * @return string
+ */
+ private function getWeaponStat($weaponNumber, $shot = true) {
+ if ($shot) {
+ switch ($weaponNumber) {
+ case self::WEAPON_ROCKET:
+ return self::STAT_ROCKET_SHOT;
+ case self::WEAPON_LASER:
+ return self::STAT_LASER_SHOT;
+ case self::WEAPON_ARROW:
+ return self::STAT_ARROW_SHOT;
+ case self::WEAPON_NUCLEUS:
+ return self::STAT_NUCLEUS_SHOT;
+ default:
+ return -1;
+ }
+ } else {
+ switch ($weaponNumber) {
+ case self::WEAPON_ROCKET:
+ return self::STAT_ROCKET_HIT;
+ case self::WEAPON_LASER:
+ return self::STAT_LASER_HIT;
+ case self::WEAPON_ARROW:
+ return self::STAT_ARROW_HIT;
+ case self::WEAPON_NUCLEUS:
+ return self::STAT_NUCLEUS_HIT;
+ default:
+ return -1;
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/application/core/Statistics/StatisticManager.php b/application/core/Statistics/StatisticManager.php
index 7b9e06d9..59201ff3 100644
--- a/application/core/Statistics/StatisticManager.php
+++ b/application/core/Statistics/StatisticManager.php
@@ -8,9 +8,9 @@ use ManiaControl\Players\Player;
/**
* Statistic Manager Class
*
- * @author steeffeen & kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class StatisticManager {
/*
@@ -59,229 +59,55 @@ class StatisticManager {
}
/**
- * Get the value of an statistic
+ * Initialize necessary database tables
*
- * @param $statName
- * @param $playerId
- * @param int $serverIndex
- * @return int
+ * @return bool
*/
- public function getStatisticData($statName, $playerId, $serverIndex = -1) {
- //Handle Special Stats
- switch($statName) {
- case self::SPECIAL_STAT_KD_RATIO:
- $kills = $this->getStatisticData(StatisticCollector::STAT_ON_KILL, $playerId, $serverIndex);
- $deaths = $this->getStatisticData(StatisticCollector::STAT_ON_DEATH, $playerId, $serverIndex);
- if ($deaths == 0) {
- return -1;
- }
- return intval($kills) / intval($deaths);
- case self::SPECIAL_STAT_HITS_PH:
- $hits = $this->getStatisticData(StatisticCollector::STAT_ON_HIT, $playerId, $serverIndex);
- $time = $this->getStatisticData(StatisticCollector::STAT_PLAYTIME, $playerId, $serverIndex);
- if ($time == 0) {
- return -1;
- }
- return intval($hits) / (intval($time) / 3600);
- case self::SPECIAL_STAT_ARROW_ACC:
- $hits = $this->getStatisticData(StatisticCollector::STAT_ARROW_HIT, $playerId, $serverIndex);
- $shots = $this->getStatisticData(StatisticCollector::STAT_ARROW_SHOT, $playerId, $serverIndex);
- if ($shots == 0) {
- return -1;
- }
- return intval($hits) / intval($shots);
- case self::SPECIAL_STAT_LASER_ACC:
- $hits = $this->getStatisticData(StatisticCollector::STAT_LASER_HIT, $playerId, $serverIndex);
- $shots = $this->getStatisticData(StatisticCollector::STAT_LASER_SHOT, $playerId, $serverIndex);
- if ($shots == 0) {
- return -1;
- }
- return intval($hits) / intval($shots);
- case self::SPECIAL_STAT_NUCLEUS_ACC:
- $hits = $this->getStatisticData(StatisticCollector::STAT_NUCLEUS_HIT, $playerId, $serverIndex);
- $shots = $this->getStatisticData(StatisticCollector::STAT_NUCLEUS_SHOT, $playerId, $serverIndex);
- if ($shots == 0) {
- return -1;
- }
- return intval($hits) / intval($shots);
- case self::SPECIAL_STAT_ROCKET_ACC:
- $hits = $this->getStatisticData(StatisticCollector::STAT_ROCKET_HIT, $playerId, $serverIndex);
- $shots = $this->getStatisticData(StatisticCollector::STAT_ROCKET_SHOT, $playerId, $serverIndex);
- if ($shots == 0) {
- return -1;
- }
- return intval($hits) / intval($shots);
+ private function initTables() {
+ $mysqli = $this->maniaControl->database->mysqli;
+ $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_STATMETADATA . "` (
+ `index` int(11) NOT NULL AUTO_INCREMENT,
+ `name` varchar(100) NOT NULL,
+ `type` int(5) NOT NULL,
+ `description` varchar(150) NOT NULL,
+ PRIMARY KEY (`index`),
+ 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) {
+ trigger_error($mysqli->error, E_USER_ERROR);
+ return false;
}
-
- $mysqli = $this->maniaControl->database->mysqli;
- $statId = $this->getStatId($statName);
-
- if (!$statId) return -1;
-
- 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 . "';";
+ $statement->execute();
+ if ($statement->error) {
+ trigger_error($statement->error, E_USER_ERROR);
+ return false;
}
+ $statement->close();
- $result = $mysqli->query($query);
- if (!$result) {
- trigger_error($mysqli->error);
- return -1;
+ $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,
+ `statId` int(11) NOT NULL,
+ `value` int(20) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`index`),
+ 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) {
+ trigger_error($mysqli->error, E_USER_ERROR);
+ return false;
}
-
- $row = $result->fetch_object();
-
- $result->close();
- return $row->value;
+ $statement->execute();
+ if ($statement->error) {
+ trigger_error($statement->error, E_USER_ERROR);
+ return false;
+ }
+ $statement->close();
+ return true;
}
- /**
- * Get All statistics ordered by an given name
- *
- * @param string $statName
- * @param $serverIndex
- * @param $minValue
- * @internal param $orderedBy
- * @return array
- */
- public function getStatsRanking($statName = '', $serverIndex = -1, $minValue = -1) {
- if (isset($this->specialStats[$statName])) {
- return $this->getStatsRankingOfSpecialStat($statName, $serverIndex);
- }
-
- $mysqli = $this->maniaControl->database->mysqli;
- $statId = $this->getStatId($statName);
-
- if ($minValue == -1) {
- $query = "SELECT playerId, serverIndex, value FROM `" . self::TABLE_STATISTICS . "` WHERE statId = " . $statId . " ORDER BY value DESC;";
- } else {
- $query = "SELECT playerId, serverIndex, value FROM `" . self::TABLE_STATISTICS . "` WHERE statId = " . $statId . " AND value >= " . $minValue . " ORDER BY value DESC;";
- }
-
- $result = $mysqli->query($query);
- if (!$result) {
- trigger_error($mysqli->error);
- return null;
- }
-
- $stats = array();
- while($row = $result->fetch_object()) {
- if ($serverIndex == -1) {
- if (!isset($stats[$row->playerId])) {
- $stats[$row->playerId] = $row->value;
- } else {
- $stats[$row->playerId] += $row->value;
- }
- } else if ($serverIndex == $row->serverIndex) {
- $stats[$row->playerId] = $row->value;
- }
- }
-
- arsort($stats);
- $result->close();
- return $stats;
- }
-
- /**
- * Gets The Ranking of an Special Stat
- *
- * @param string $statName
- * @param $serverIndex
- * @return array
- */
- public function getStatsRankingOfSpecialStat($statName = '', $serverIndex = -1) {
- $statsArray = array();
- switch($statName) {
- case self::SPECIAL_STAT_KD_RATIO:
- $kills = $this->getStatsRanking(StatisticCollector::STAT_ON_KILL, $serverIndex);
- $deaths = $this->getStatsRanking(StatisticCollector::STAT_ON_DEATH, $serverIndex);
- if(!$kills || !$deaths){
- return array();
- }
- foreach($deaths as $key => $death) {
- if ($death == 0 || !isset($kills[$key])) {
- continue;
- }
- $statsArray[$key] = intval($kills[$key]) / intval($death);
- }
- arsort($statsArray);
- break;
- case self::SPECIAL_STAT_HITS_PH:
- $hits = $this->getStatsRanking(StatisticCollector::STAT_ON_HIT, $serverIndex);
- $times = $this->getStatsRanking(StatisticCollector::STAT_PLAYTIME, $serverIndex);
- if(!$hits || !$times){
- return array();
- }
- foreach($times as $key => $time) {
- if ($time == 0 || !isset($hits[$key])) {
- continue;
- }
- $statsArray[$key] = intval($hits[$key]) / (intval($time) / 3600);
- }
- arsort($statsArray);
- break;
- case self::SPECIAL_STAT_ARROW_ACC:
- $hits = $this->getStatsRanking(StatisticCollector::STAT_ARROW_HIT, $serverIndex);
- $shots = $this->getStatsRanking(StatisticCollector::STAT_ARROW_SHOT, $serverIndex);
- if(!$hits || !$shots){
- return array();
- }
- foreach($shots as $key => $shot) {
- if ($shot == 0 || !isset($hits[$key])) {
- continue;
- }
- $statsArray[$key] = intval($hits[$key]) / (intval($shot));
- }
- arsort($statsArray);
- break;
- case self::SPECIAL_STAT_LASER_ACC:
- $hits = $this->getStatsRanking(StatisticCollector::STAT_LASER_HIT, $serverIndex);
- $shots = $this->getStatsRanking(StatisticCollector::STAT_LASER_SHOT, $serverIndex);
- if(!$hits || !$shots){
- return array();
- }
- foreach($shots as $key => $shot) {
- if ($shot == 0 || !isset($hits[$key])) {
- continue;
- }
- $statsArray[$key] = intval($hits[$key]) / (intval($shot));
- }
- arsort($statsArray);
- break;
- case self::SPECIAL_STAT_ROCKET_ACC:
- $hits = $this->getStatsRanking(StatisticCollector::STAT_ROCKET_HIT, $serverIndex);
- $shots = $this->getStatsRanking(StatisticCollector::STAT_ROCKET_SHOT, $serverIndex);
- if(!$hits || !$shots){
- return array();
- }
- foreach($shots as $key => $shot) {
- if ($shot == 0 || !isset($hits[$key])) {
- continue;
- }
- $statsArray[$key] = intval($hits[$key]) / (intval($shot));
- }
- arsort($statsArray);
- break;
- case self::SPECIAL_STAT_NUCLEUS_ACC:
- $hits = $this->getStatsRanking(StatisticCollector::STAT_NUCLEUS_HIT, $serverIndex);
- $shots = $this->getStatsRanking(StatisticCollector::STAT_NUCLEUS_SHOT, $serverIndex);
- if(!$hits || !$shots){
- return array();
- }
- foreach($shots as $key => $shot) {
- if ($shot == 0 || !isset($hits[$key])) {
- continue;
- }
- $statsArray[$key] = intval($hits[$key]) / (intval($shot));
- }
- arsort($statsArray);
- break;
- }
- return $statsArray;
- }
-
-
/**
* Store Stats Meta Data from the Database
*/
@@ -295,13 +121,13 @@ class StatisticManager {
return;
}
- while($row = $result->fetch_object()) {
+ while ($row = $result->fetch_object()) {
$this->stats[$row->name] = $row;
}
$result->close();
-
+
// TODO: own model class
-
+
//Define Special Stat Kill / Death Ratio
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_KD_RATIO;
@@ -339,6 +165,151 @@ class StatisticManager {
$this->specialStats[self::SPECIAL_STAT_ROCKET_ACC] = $stat;
}
+ /**
+ * Get All statistics ordered by an given name
+ *
+ * @param string $statName
+ * @param $serverIndex
+ * @param $minValue
+ * @internal param $orderedBy
+ * @return array
+ */
+ public function getStatsRanking($statName = '', $serverIndex = -1, $minValue = -1) {
+ if (isset($this->specialStats[$statName])) {
+ return $this->getStatsRankingOfSpecialStat($statName, $serverIndex);
+ }
+
+ $mysqli = $this->maniaControl->database->mysqli;
+ $statId = $this->getStatId($statName);
+
+ if ($minValue == -1) {
+ $query = "SELECT playerId, serverIndex, value FROM `" . self::TABLE_STATISTICS . "` WHERE statId = " . $statId . " ORDER BY value DESC;";
+ } else {
+ $query = "SELECT playerId, serverIndex, value FROM `" . self::TABLE_STATISTICS . "` WHERE statId = " . $statId . " AND value >= " . $minValue . " ORDER BY value DESC;";
+ }
+
+ $result = $mysqli->query($query);
+ if (!$result) {
+ trigger_error($mysqli->error);
+ return null;
+ }
+
+ $stats = array();
+ while ($row = $result->fetch_object()) {
+ if ($serverIndex == -1) {
+ if (!isset($stats[$row->playerId])) {
+ $stats[$row->playerId] = $row->value;
+ } else {
+ $stats[$row->playerId] += $row->value;
+ }
+ } else if ($serverIndex == $row->serverIndex) {
+ $stats[$row->playerId] = $row->value;
+ }
+ }
+
+ arsort($stats);
+ $result->close();
+ return $stats;
+ }
+
+ /**
+ * Gets The Ranking of an Special Stat
+ *
+ * @param string $statName
+ * @param $serverIndex
+ * @return array
+ */
+ public function getStatsRankingOfSpecialStat($statName = '', $serverIndex = -1) {
+ $statsArray = array();
+ switch ($statName) {
+ case self::SPECIAL_STAT_KD_RATIO:
+ $kills = $this->getStatsRanking(StatisticCollector::STAT_ON_KILL, $serverIndex);
+ $deaths = $this->getStatsRanking(StatisticCollector::STAT_ON_DEATH, $serverIndex);
+ if (!$kills || !$deaths) {
+ return array();
+ }
+ foreach ($deaths as $key => $death) {
+ if ($death == 0 || !isset($kills[$key])) {
+ continue;
+ }
+ $statsArray[$key] = intval($kills[$key]) / intval($death);
+ }
+ arsort($statsArray);
+ break;
+ case self::SPECIAL_STAT_HITS_PH:
+ $hits = $this->getStatsRanking(StatisticCollector::STAT_ON_HIT, $serverIndex);
+ $times = $this->getStatsRanking(StatisticCollector::STAT_PLAYTIME, $serverIndex);
+ if (!$hits || !$times) {
+ return array();
+ }
+ foreach ($times as $key => $time) {
+ if ($time == 0 || !isset($hits[$key])) {
+ continue;
+ }
+ $statsArray[$key] = intval($hits[$key]) / (intval($time) / 3600);
+ }
+ arsort($statsArray);
+ break;
+ case self::SPECIAL_STAT_ARROW_ACC:
+ $hits = $this->getStatsRanking(StatisticCollector::STAT_ARROW_HIT, $serverIndex);
+ $shots = $this->getStatsRanking(StatisticCollector::STAT_ARROW_SHOT, $serverIndex);
+ if (!$hits || !$shots) {
+ return array();
+ }
+ foreach ($shots as $key => $shot) {
+ if ($shot == 0 || !isset($hits[$key])) {
+ continue;
+ }
+ $statsArray[$key] = intval($hits[$key]) / (intval($shot));
+ }
+ arsort($statsArray);
+ break;
+ case self::SPECIAL_STAT_LASER_ACC:
+ $hits = $this->getStatsRanking(StatisticCollector::STAT_LASER_HIT, $serverIndex);
+ $shots = $this->getStatsRanking(StatisticCollector::STAT_LASER_SHOT, $serverIndex);
+ if (!$hits || !$shots) {
+ return array();
+ }
+ foreach ($shots as $key => $shot) {
+ if ($shot == 0 || !isset($hits[$key])) {
+ continue;
+ }
+ $statsArray[$key] = intval($hits[$key]) / (intval($shot));
+ }
+ arsort($statsArray);
+ break;
+ case self::SPECIAL_STAT_ROCKET_ACC:
+ $hits = $this->getStatsRanking(StatisticCollector::STAT_ROCKET_HIT, $serverIndex);
+ $shots = $this->getStatsRanking(StatisticCollector::STAT_ROCKET_SHOT, $serverIndex);
+ if (!$hits || !$shots) {
+ return array();
+ }
+ foreach ($shots as $key => $shot) {
+ if ($shot == 0 || !isset($hits[$key])) {
+ continue;
+ }
+ $statsArray[$key] = intval($hits[$key]) / (intval($shot));
+ }
+ arsort($statsArray);
+ break;
+ case self::SPECIAL_STAT_NUCLEUS_ACC:
+ $hits = $this->getStatsRanking(StatisticCollector::STAT_NUCLEUS_HIT, $serverIndex);
+ $shots = $this->getStatsRanking(StatisticCollector::STAT_NUCLEUS_SHOT, $serverIndex);
+ if (!$hits || !$shots) {
+ return array();
+ }
+ foreach ($shots as $key => $shot) {
+ if ($shot == 0 || !isset($hits[$key])) {
+ continue;
+ }
+ $statsArray[$key] = intval($hits[$key]) / (intval($shot));
+ }
+ arsort($statsArray);
+ break;
+ }
+ return $statsArray;
+ }
+
/**
* Return the Stat Id
*
@@ -363,13 +334,13 @@ class StatisticManager {
public function getAllPlayerStats(Player $player, $serverIndex = -1) {
// TODO improve performance of the foreach
$playerStats = array();
- foreach($this->stats as $stat) {
+ foreach ($this->stats as $stat) {
$value = $this->getStatisticData($stat->name, $player->index, $serverIndex);
$playerStats[$stat->name] = array($stat, $value);
}
- foreach($this->specialStats as $stat) {
- switch($stat->name) {
+ foreach ($this->specialStats as $stat) {
+ switch ($stat->name) {
case self::SPECIAL_STAT_KD_RATIO:
if (!isset($playerStats[StatisticCollector::STAT_ON_KILL]) || !isset($playerStats[StatisticCollector::STAT_ON_DEATH])) {
continue;
@@ -441,6 +412,98 @@ class StatisticManager {
return $playerStats;
}
+ /**
+ * Get the value of an statistic
+ *
+ * @param $statName
+ * @param $playerId
+ * @param int $serverIndex
+ * @return int
+ */
+ public function getStatisticData($statName, $playerId, $serverIndex = -1) {
+ //Handle Special Stats
+ switch ($statName) {
+ case self::SPECIAL_STAT_KD_RATIO:
+ $kills = $this->getStatisticData(StatisticCollector::STAT_ON_KILL, $playerId, $serverIndex);
+ $deaths = $this->getStatisticData(StatisticCollector::STAT_ON_DEATH, $playerId, $serverIndex);
+ if ($deaths == 0) {
+ return -1;
+ }
+ return intval($kills) / intval($deaths);
+ case self::SPECIAL_STAT_HITS_PH:
+ $hits = $this->getStatisticData(StatisticCollector::STAT_ON_HIT, $playerId, $serverIndex);
+ $time = $this->getStatisticData(StatisticCollector::STAT_PLAYTIME, $playerId, $serverIndex);
+ if ($time == 0) {
+ return -1;
+ }
+ return intval($hits) / (intval($time) / 3600);
+ case self::SPECIAL_STAT_ARROW_ACC:
+ $hits = $this->getStatisticData(StatisticCollector::STAT_ARROW_HIT, $playerId, $serverIndex);
+ $shots = $this->getStatisticData(StatisticCollector::STAT_ARROW_SHOT, $playerId, $serverIndex);
+ if ($shots == 0) {
+ return -1;
+ }
+ return intval($hits) / intval($shots);
+ case self::SPECIAL_STAT_LASER_ACC:
+ $hits = $this->getStatisticData(StatisticCollector::STAT_LASER_HIT, $playerId, $serverIndex);
+ $shots = $this->getStatisticData(StatisticCollector::STAT_LASER_SHOT, $playerId, $serverIndex);
+ if ($shots == 0) {
+ return -1;
+ }
+ return intval($hits) / intval($shots);
+ case self::SPECIAL_STAT_NUCLEUS_ACC:
+ $hits = $this->getStatisticData(StatisticCollector::STAT_NUCLEUS_HIT, $playerId, $serverIndex);
+ $shots = $this->getStatisticData(StatisticCollector::STAT_NUCLEUS_SHOT, $playerId, $serverIndex);
+ if ($shots == 0) {
+ return -1;
+ }
+ return intval($hits) / intval($shots);
+ case self::SPECIAL_STAT_ROCKET_ACC:
+ $hits = $this->getStatisticData(StatisticCollector::STAT_ROCKET_HIT, $playerId, $serverIndex);
+ $shots = $this->getStatisticData(StatisticCollector::STAT_ROCKET_SHOT, $playerId, $serverIndex);
+ if ($shots == 0) {
+ return -1;
+ }
+ return intval($hits) / intval($shots);
+ }
+
+ $mysqli = $this->maniaControl->database->mysqli;
+ $statId = $this->getStatId($statName);
+
+ if (!$statId) {
+ return -1;
+ }
+
+ 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 . "';";
+ }
+
+ $result = $mysqli->query($query);
+ if (!$result) {
+ trigger_error($mysqli->error);
+ return -1;
+ }
+
+ $row = $result->fetch_object();
+
+ $result->close();
+ return $row->value;
+ }
+
+ /**
+ * Increments a Statistic by one
+ *
+ * @param string $statName
+ * @param Player $player
+ * @param int $serverIndex
+ * @return bool
+ */
+ public function incrementStat($statName, Player $player, $serverIndex = -1) {
+ return $this->insertStat($statName, $player, $serverIndex, 1);
+ }
+
/**
* Inserts a Stat into the database
*
@@ -496,18 +559,6 @@ class StatisticManager {
return true;
}
- /**
- * Increments a Statistic by one
- *
- * @param string $statName
- * @param Player $player
- * @param int $serverIndex
- * @return bool
- */
- public function incrementStat($statName, Player $player, $serverIndex = -1) {
- return $this->insertStat($statName, $player, $serverIndex, 1);
- }
-
/**
* Defines a Stat
*
@@ -542,54 +593,4 @@ class StatisticManager {
$statement->close();
return true;
}
-
- /**
- * Initialize necessary database tables
- *
- * @return bool
- */
- private function initTables() {
- $mysqli = $this->maniaControl->database->mysqli;
- $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_STATMETADATA . "` (
- `index` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(100) NOT NULL,
- `type` int(5) NOT NULL,
- `description` varchar(150) NOT NULL,
- PRIMARY KEY (`index`),
- 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) {
- trigger_error($mysqli->error, E_USER_ERROR);
- return false;
- }
- $statement->execute();
- if ($statement->error) {
- trigger_error($statement->error, E_USER_ERROR);
- return false;
- }
- $statement->close();
-
- $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,
- `statId` int(11) NOT NULL,
- `value` int(20) NOT NULL DEFAULT '0',
- PRIMARY KEY (`index`),
- 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) {
- trigger_error($mysqli->error, E_USER_ERROR);
- return false;
- }
- $statement->execute();
- if ($statement->error) {
- trigger_error($statement->error, E_USER_ERROR);
- return false;
- }
- $statement->close();
- return true;
- }
}
diff --git a/application/core/Update/PluginUpdateData.php b/application/core/Update/PluginUpdateData.php
index 84fb14ae..4de4d8e5 100644
--- a/application/core/Update/PluginUpdateData.php
+++ b/application/core/Update/PluginUpdateData.php
@@ -4,10 +4,10 @@ namespace ManiaControl\Update;
/**
* Plugin Update Data Structure
- *
- * @author ManiaControl Team
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PluginUpdateData {
/*
@@ -24,25 +24,25 @@ class PluginUpdateData {
/**
* Construct new Plugin Update Data
- *
+ *
* @param object $updateData
*/
public function __construct($updateData) {
- $this->pluginId = $updateData->id;
- $this->pluginName = $updateData->name;
- $this->pluginAuthor = $updateData->author;
+ $this->pluginId = $updateData->id;
+ $this->pluginName = $updateData->name;
+ $this->pluginAuthor = $updateData->author;
$this->pluginDescription = $updateData->description;
if ($updateData->currentVersion) {
- $this->id = $updateData->currentVersion->id;
+ $this->id = $updateData->currentVersion->id;
$this->version = $updateData->currentVersion->version;
$this->zipfile = $updateData->currentVersion->zipfile;
- $this->url = $updateData->currentVersion->url;
+ $this->url = $updateData->currentVersion->url;
}
}
/**
- * Check if the Plugin Update Data is newer than the given Plugin Versin
- *
+ * Check if the Plugin Update Data is newer than the given Plugin Version
+ *
* @param float $version
* @return bool
*/
diff --git a/application/core/Update/PluginUpdateManager.php b/application/core/Update/PluginUpdateManager.php
index 2e028235..68533960 100644
--- a/application/core/Update/PluginUpdateManager.php
+++ b/application/core/Update/PluginUpdateManager.php
@@ -6,21 +6,21 @@ use ManiaControl\Callbacks\CallbackListener;
use ManiaControl\Callbacks\CallbackManager;
use ManiaControl\Callbacks\TimerListener;
use ManiaControl\Commands\CommandListener;
+use ManiaControl\Files\BackupUtil;
use ManiaControl\Files\FileUtil;
use ManiaControl\ManiaControl;
use ManiaControl\Players\Player;
use ManiaControl\Plugins\Plugin;
use ManiaControl\Plugins\PluginInstallMenu;
-use ManiaControl\Plugins\PluginMenu;
use ManiaControl\Plugins\PluginManager;
-use ManiaControl\Files\BackupUtil;
+use ManiaControl\Plugins\PluginMenu;
/**
* Manager checking for ManiaControl Plugin Updates
- *
- * @author ManiaControl Team
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PluginUpdateManager implements CallbackListener, CommandListener, TimerListener {
/*
@@ -30,15 +30,15 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
/**
* Create a new Plugin Update Manager
- *
+ *
* @param ManiaControl $maniaControl
*/
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
-
+
// Register for callbacks
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_PLAYERMANIALINKPAGEANSWER, $this, 'handleManialinkPageAnswer');
-
+
// Register for chat commands
$this->maniaControl->commandManager->registerCommandListener('checkpluginsupdate', $this, 'handle_CheckPluginsUpdate', true, 'Check for Plugin Updates.');
$this->maniaControl->commandManager->registerCommandListener('pluginsupdate', $this, 'handle_PluginsUpdate', true, 'Perform the Plugin Updates.');
@@ -46,8 +46,8 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
/**
* Handle //checkpluginsupdate command
- *
- * @param array $chatCallback
+ *
+ * @param array $chatCallback
* @param Player $player
*/
public function handle_CheckPluginsUpdate(array $chatCallback, Player $player) {
@@ -55,14 +55,98 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
$this->maniaControl->authenticationManager->sendNotAllowed($player);
return;
}
-
+
$this->checkPluginsUpdate($player);
}
+ /**
+ * Check if there are Outdated Plugins installed
+ *
+ * @param Player $player
+ */
+ public function checkPluginsUpdate(Player $player = null) {
+ $message = 'Checking Plugins for newer Versions...';
+ if ($player) {
+ $this->maniaControl->chat->sendInformation($message, $player);
+ }
+ $this->maniaControl->log($message);
+
+ $self = $this;
+ $this->maniaControl->pluginManager->fetchPluginList(function ($data, $error) use (&$self, &$player) {
+
+ if (!$data || $error) {
+ $message = 'Error while checking Plugins for newer Versions!';
+ if ($player) {
+ $self->maniaControl->chat->sendError($message, $player);
+ }
+ $self->maniaControl->log($message);
+ return;
+ }
+
+ $pluginsData = $self->parsePluginsData($data);
+ $pluginClasses = $self->maniaControl->pluginManager->getPluginClasses();
+ $pluginUpdates = array();
+
+ foreach ($pluginClasses as $pluginClass) {
+ /**
+ * @var Plugin $pluginClass
+ */
+ $pluginId = $pluginClass::getId();
+ if (!isset($pluginsData[$pluginId])) {
+ continue;
+ }
+ /** @var PluginUpdateData $pluginData */
+ $pluginData = $pluginsData[$pluginId];
+ $pluginVersion = $pluginClass::getVersion();
+ if ($pluginData->isNewerThan($pluginVersion)) {
+ $pluginUpdates[$pluginId] = $pluginData;
+ $message = "There is an Update of '{$pluginData->pluginName}' available! ('{$pluginClass}' - Version {$pluginData->version})";
+ if ($player) {
+ $self->maniaControl->chat->sendSuccess($message, $player);
+ }
+ $self->maniaControl->log($message);
+ }
+ }
+
+ if (empty($pluginUpdates)) {
+ $message = 'Plugins Update Check completed: All Plugins are up-to-date!';
+ if ($player) {
+ $self->maniaControl->chat->sendSuccess($message, $player);
+ }
+ $self->maniaControl->log($message);
+ } else {
+ $updatesCount = count($pluginUpdates);
+ $message = "Plugins Update Check completed: There are {$updatesCount} Updates available!";
+ if ($player) {
+ $self->maniaControl->chat->sendSuccess($message, $player);
+ }
+ $self->maniaControl->log($message);
+ }
+ });
+ }
+
+ /**
+ * Get an Array of Plugin Update Data from the given Web Service Result
+ *
+ * @param mixed $webServiceResult
+ * @return mixed
+ */
+ public function parsePluginsData($webServiceResult) {
+ if (!$webServiceResult || !is_array($webServiceResult)) {
+ return false;
+ }
+ $pluginsData = array();
+ foreach ($webServiceResult as $pluginResult) {
+ $pluginData = new PluginUpdateData($pluginResult);
+ $pluginsData[$pluginData->pluginId] = $pluginData;
+ }
+ return $pluginsData;
+ }
+
/**
* Handle //pluginsupdate command
- *
- * @param array $chatCallback
+ *
+ * @param array $chatCallback
* @param Player $player
*/
public function handle_PluginsUpdate(array $chatCallback, Player $player) {
@@ -70,48 +154,200 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
$this->maniaControl->authenticationManager->sendNotAllowed($player);
return;
}
-
+
$this->performPluginsUpdate($player);
}
+ /**
+ * Perform an Update of all outdated Plugins
+ *
+ * @param Player $player
+ */
+ public function performPluginsUpdate(Player $player = null) {
+ $pluginsUpdates = $this->getPluginsUpdates();
+ if (empty($pluginsUpdates)) {
+ $message = 'There are no Plugin Updates available!';
+ if ($player) {
+ $this->maniaControl->chat->sendInformation($message, $player);
+ }
+ $this->maniaControl->log($message);
+ return;
+ }
+
+ $message = "Starting Plugins Updating...";
+ if ($player) {
+ $this->maniaControl->chat->sendInformation($message, $player);
+ }
+ $this->maniaControl->log($message);
+
+ $performBackup = $this->maniaControl->settingManager->getSetting($this->maniaControl->updateManager, UpdateManager::SETTING_PERFORM_BACKUPS);
+ if ($performBackup && !BackupUtil::performPluginsBackup()) {
+ $message = 'Creating Backup before Plugins Update failed!';
+ if ($player) {
+ $this->maniaControl->chat->sendError($message, $player);
+ }
+ $this->maniaControl->log($message);
+ }
+
+ foreach ($pluginsUpdates as $pluginUpdateData) {
+ $this->installPlugin($pluginUpdateData, $player, true);
+ }
+ }
+
+ /**
+ * Check for Plugin Updates
+ *
+ * @return mixed
+ */
+ public function getPluginsUpdates() {
+ $url = ManiaControl::URL_WEBSERVICE . 'plugins';
+ $dataJson = FileUtil::loadFile($url);
+ $pluginData = json_decode($dataJson);
+ if (!$pluginData || empty($pluginData)) {
+ return false;
+ }
+
+ $pluginsUpdates = $this->parsePluginsData($pluginData);
+
+ $updates = array();
+ $pluginClasses = $this->maniaControl->pluginManager->getPluginClasses();
+ foreach ($pluginClasses as $pluginClass) {
+ /**
+ * @var Plugin $pluginClass
+ */
+ $pluginId = $pluginClass::getId();
+ if (isset($pluginsUpdates[$pluginId])) {
+ /** @var PluginUpdateData $pluginUpdateData */
+ $pluginUpdateData = $pluginsUpdates[$pluginId];
+ $pluginVersion = $pluginClass::getVersion();
+ if ($pluginUpdateData->isNewerThan($pluginVersion)) {
+ $updates[$pluginId] = $pluginUpdateData;
+ }
+ }
+ }
+
+ if (empty($updates)) {
+ return false;
+ }
+ return $updates;
+ }
+
+ /**
+ * Load the given Plugin Update Data
+ *
+ * @param PluginUpdateData $pluginUpdateData
+ * @param Player $player
+ * @param bool $update
+ */
+ private function installPlugin(PluginUpdateData $pluginUpdateData, Player $player = null, $update = false) {
+ $self = $this;
+ $this->maniaControl->fileReader->loadFile($pluginUpdateData->url, function ($updateFileContent, $error) use (&$self, &$pluginUpdateData, &$player, &$update) {
+ $actionNoun = ($update ? 'Update' : 'Install');
+ $actionVerb = ($update ? 'Updating' : 'Installing');
+ $actionVerbDone = ($update ? 'updated' : 'installed');
+
+ $message = "Now {$actionVerb} '{$pluginUpdateData->pluginName}'...";
+ if ($player) {
+ $self->maniaControl->chat->sendInformation($message, $player);
+ }
+ $self->maniaControl->log($message);
+
+ $tempDir = FileUtil::getTempFolder();
+ $updateFileName = $tempDir . $pluginUpdateData->zipfile;
+
+ $bytes = file_put_contents($updateFileName, $updateFileContent);
+ if (!$bytes || $bytes <= 0) {
+ $message = "Plugin {$actionNoun} failed: Couldn't save {$actionNoun} Zip!";
+ if ($player) {
+ $self->maniaControl->chat->sendError($message, $player);
+ }
+ trigger_error($message);
+ return;
+ }
+
+ $zip = new \ZipArchive();
+ $result = $zip->open($updateFileName);
+ if ($result !== true) {
+ $message = "Plugin {$actionNoun} failed: Couldn't open {$actionNoun} Zip! ({$result})";
+ if ($player) {
+ $self->maniaControl->chat->sendError($message, $player);
+ }
+ trigger_error($message);
+ return;
+ }
+
+ $zip->extractTo(ManiaControlDir . '/plugins/');
+ $zip->close();
+ unlink($updateFileName);
+ FileUtil::removeTempFolder();
+
+ $messageExtra = '';
+ if ($update) {
+ $messageExtra = ' (Restart ManiaControl to load the new Version!)';
+ }
+ $message = "Successfully {$actionVerbDone} '{$pluginUpdateData->pluginName}'!{$messageExtra}";
+ if ($player) {
+ $self->maniaControl->chat->sendSuccess($message, $player);
+ }
+ $self->maniaControl->log($message);
+
+ if (!$update) {
+ $newPluginClasses = $self->maniaControl->pluginManager->loadPlugins();
+ if (empty($newPluginClasses)) {
+ $message = "Loading fresh installed Plugin '{$pluginUpdateData->pluginName}' failed!";
+ if ($player) {
+ $self->maniaControl->chat->sendError($message, $player);
+ }
+ $self->maniaControl->log($message);
+ } else {
+ $message = "Successfully loaded fresh installed Plugin '{$pluginUpdateData->pluginName}'!";
+ if ($player) {
+ $self->maniaControl->chat->sendSuccess($message, $player);
+ }
+ $self->maniaControl->log($message);
+
+ $menuId = $self->maniaControl->configurator->getMenuId('Install Plugins');
+ $self->maniaControl->configurator->reopenMenu($player, $menuId);
+ }
+ }
+ });
+ }
+
/**
* Handle PlayerManialinkPageAnswer callback
- *
+ *
* @param array $callback
*/
public function handleManialinkPageAnswer(array $callback) {
$actionId = $callback[1][2];
- $update = (strpos($actionId, PluginMenu::ACTION_PREFIX_UPDATEPLUGIN) === 0);
- $install = (strpos($actionId, PluginInstallMenu::ACTION_PREFIX_INSTALLPLUGIN) === 0);
+ $update = (strpos($actionId, PluginMenu::ACTION_PREFIX_UPDATEPLUGIN) === 0);
+ $install = (strpos($actionId, PluginInstallMenu::ACTION_PREFIX_INSTALLPLUGIN) === 0);
if (!$update && !$install) {
return;
}
-
- $login = $callback[1][1];
+
+ $login = $callback[1][1];
$player = $this->maniaControl->playerManager->getPlayer($login);
-
+
if ($update) {
$pluginClass = substr($actionId, strlen(PluginMenu::ACTION_PREFIX_UPDATEPLUGIN));
if ($pluginClass == 'All') {
$this->performPluginsUpdate($player);
- }
- else {
+ } else {
$pluginUpdateData = $this->getPluginUpdate($pluginClass);
if ($pluginUpdateData) {
$this->installPlugin($pluginUpdateData, $player, true);
- }
- else {
+ } else {
$message = 'Error loading Plugin Update Data!';
$this->maniaControl->chat->sendError($message, $player);
}
}
- }
- else {
+ } else {
$pluginId = substr($actionId, strlen(PluginInstallMenu::ACTION_PREFIX_INSTALLPLUGIN));
-
- $url = ManiaControl::URL_WEBSERVICE . 'plugins?id=' . $pluginId;
+
+ $url = ManiaControl::URL_WEBSERVICE . 'plugins?id=' . $pluginId;
$self = $this;
- $this->maniaControl->fileReader->loadFile($url, function ($data, $error) use(&$self, &$player) {
+ $this->maniaControl->fileReader->loadFile($url, function ($data, $error) use (&$self, &$player) {
if ($error || !$data) {
$message = "Error loading Plugin Install Data! {$error}";
$self->maniaControl->chat->sendError($message, $player);
@@ -129,272 +365,29 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
}
}
- /**
- * Check if there are Outdated Plugins installed
- *
- * @param Player $player
- */
- public function checkPluginsUpdate(Player $player = null) {
- $message = 'Checking Plugins for newer Versions...';
- if ($player) {
- $this->maniaControl->chat->sendInformation($message, $player);
- }
- $this->maniaControl->log($message);
-
- $self = $this;
- $this->maniaControl->pluginManager->fetchPluginList(function ($data, $error) use(&$self, &$player) {
-
- if (!$data || $error) {
- $message = 'Error while checking Plugins for newer Versions!';
- if ($player) {
- $self->maniaControl->chat->sendError($message, $player);
- }
- $self->maniaControl->log($message);
- return;
- }
-
- $pluginsData = $self->parsePluginsData($data);
- $pluginClasses = $self->maniaControl->pluginManager->getPluginClasses();
- $pluginUpdates = array();
-
- foreach ($pluginClasses as $pluginClass) {
- /**
- *
- * @var Plugin $pluginClass
- */
- $pluginId = $pluginClass::getId();
- if (!isset($pluginsData[$pluginId])) {
- continue;
- }
- /** @var PluginUpdateData $pluginData */
- $pluginData = $pluginsData[$pluginId];
- $pluginVersion = $pluginClass::getVersion();
- if ($pluginData->isNewerThan($pluginVersion)) {
- $pluginUpdates[$pluginId] = $pluginData;
- $message = "There is an Update of '{$pluginData->pluginName}' available! ('{$pluginClass}' - Version {$pluginData->version})";
- if ($player) {
- $self->maniaControl->chat->sendSuccess($message, $player);
- }
- $self->maniaControl->log($message);
- }
- }
-
- if (empty($pluginUpdates)) {
- $message = 'Plugins Update Check completed: All Plugins are up-to-date!';
- if ($player) {
- $self->maniaControl->chat->sendSuccess($message, $player);
- }
- $self->maniaControl->log($message);
- }
- else {
- $updatesCount = count($pluginUpdates);
- $message = "Plugins Update Check completed: There are {$updatesCount} Updates available!";
- if ($player) {
- $self->maniaControl->chat->sendSuccess($message, $player);
- }
- $self->maniaControl->log($message);
- }
- });
- }
-
- /**
- * Perform an Update of all outdated Plugins
- *
- * @param Player $player
- */
- public function performPluginsUpdate(Player $player = null) {
- $pluginsUpdates = $this->getPluginsUpdates();
- if (empty($pluginsUpdates)) {
- $message = 'There are no Plugin Updates available!';
- if ($player) {
- $this->maniaControl->chat->sendInformation($message, $player);
- }
- $this->maniaControl->log($message);
- return;
- }
-
- $message = "Starting Plugins Updating...";
- if ($player) {
- $this->maniaControl->chat->sendInformation($message, $player);
- }
- $this->maniaControl->log($message);
-
- $performBackup = $this->maniaControl->settingManager->getSetting($this->maniaControl->updateManager, UpdateManager::SETTING_PERFORM_BACKUPS);
- if ($performBackup && !BackupUtil::performPluginsBackup()) {
- $message = 'Creating Backup before Plugins Update failed!';
- if ($player) {
- $this->maniaControl->chat->sendError($message, $player);
- }
- $this->maniaControl->log($message);
- }
-
- foreach ($pluginsUpdates as $pluginUpdateData) {
- $this->installPlugin($pluginUpdateData, $player, true);
- }
- }
-
/**
* Check given Plugin Class for Update
- *
+ *
* @param string $pluginClass
* @return mixed
*/
public function getPluginUpdate($pluginClass) {
$pluginClass = PluginManager::getPluginClass($pluginClass);
/**
- *
* @var Plugin $pluginClass
*/
- $pluginId = $pluginClass::getId();
- $url = ManiaControl::URL_WEBSERVICE . 'plugins?id=' . $pluginId;
- $dataJson = FileUtil::loadFile($url);
+ $pluginId = $pluginClass::getId();
+ $url = ManiaControl::URL_WEBSERVICE . 'plugins?id=' . $pluginId;
+ $dataJson = FileUtil::loadFile($url);
$pluginVersions = json_decode($dataJson);
if (!$pluginVersions || !isset($pluginVersions[0])) {
return false;
}
$pluginUpdateData = new PluginUpdateData($pluginVersions[0]);
- $pluginVersion = $pluginClass::getVersion();
+ $pluginVersion = $pluginClass::getVersion();
if ($pluginUpdateData->isNewerThan($pluginVersion)) {
return $pluginUpdateData;
}
return false;
}
-
- /**
- * Get an Array of Plugin Update Data from the given Web Service Result
- *
- * @param mixed $webServiceResult
- * @return mixed
- */
- public function parsePluginsData($webServiceResult) {
- if (!$webServiceResult || !is_array($webServiceResult)) {
- return false;
- }
- $pluginsData = array();
- foreach ($webServiceResult as $pluginResult) {
- $pluginData = new PluginUpdateData($pluginResult);
- $pluginsData[$pluginData->pluginId] = $pluginData;
- }
- return $pluginsData;
- }
-
- /**
- * Check for Plugin Updates
- *
- * @return mixed
- */
- public function getPluginsUpdates() {
- $url = ManiaControl::URL_WEBSERVICE . 'plugins';
- $dataJson = FileUtil::loadFile($url);
- $pluginData = json_decode($dataJson);
- if (!$pluginData || empty($pluginData)) {
- return false;
- }
-
- $pluginsUpdates = $this->parsePluginsData($pluginData);
-
- $updates = array();
- $pluginClasses = $this->maniaControl->pluginManager->getPluginClasses();
- foreach ($pluginClasses as $pluginClass) {
- /**
- *
- * @var Plugin $pluginClass
- */
- $pluginId = $pluginClass::getId();
- if (isset($pluginsUpdates[$pluginId])) {
- /** @var PluginUpdateData $pluginUpdateData */
- $pluginUpdateData = $pluginsUpdates[$pluginId];
- $pluginVersion = $pluginClass::getVersion();
- if ($pluginUpdateData->isNewerThan($pluginVersion)) {
- $updates[$pluginId] = $pluginUpdateData;
- }
- }
- }
-
- if (empty($updates)) {
- return false;
- }
- return $updates;
- }
-
- /**
- * Load the given Plugin Update Data
- *
- * @param PluginUpdateData $pluginUpdateData
- * @param Player $player
- */
- private function installPlugin(PluginUpdateData $pluginUpdateData, Player $player = null, $update = false) {
- $self = $this;
- $this->maniaControl->fileReader->loadFile($pluginUpdateData->url, function ($updateFileContent, $error) use(&$self, &$pluginUpdateData, &$player, &$update) {
- $actionNoun = ($update ? 'Update' : 'Install');
- $actionVerb = ($update ? 'Updating' : 'Installing');
- $actionVerbDone = ($update ? 'updated' : 'installed');
-
- $message = "Now {$actionVerb} '{$pluginUpdateData->pluginName}'...";
- if ($player) {
- $self->maniaControl->chat->sendInformation($message, $player);
- }
- $self->maniaControl->log($message);
-
- $tempDir = FileUtil::getTempFolder();
- $updateFileName = $tempDir . $pluginUpdateData->zipfile;
-
- $bytes = file_put_contents($updateFileName, $updateFileContent);
- if (!$bytes || $bytes <= 0) {
- $message = "Plugin {$actionNoun} failed: Couldn't save {$actionNoun} Zip!";
- if ($player) {
- $self->maniaControl->chat->sendError($message, $player);
- }
- trigger_error($message);
- return;
- }
-
- $zip = new \ZipArchive();
- $result = $zip->open($updateFileName);
- if ($result !== true) {
- $message = "Plugin {$actionNoun} failed: Couldn't open {$actionNoun} Zip! ({$result})";
- if ($player) {
- $self->maniaControl->chat->sendError($message, $player);
- }
- trigger_error($message);
- return;
- }
-
- $zip->extractTo(ManiaControlDir . '/plugins/');
- $zip->close();
- unlink($updateFileName);
- FileUtil::removeTempFolder();
-
- $messageExtra = '';
- if ($update) {
- $messageExtra = ' (Restart ManiaControl to load the new Version!)';
- }
- $message = "Successfully {$actionVerbDone} '{$pluginUpdateData->pluginName}'!{$messageExtra}";
- if ($player) {
- $self->maniaControl->chat->sendSuccess($message, $player);
- }
- $self->maniaControl->log($message);
-
- if (!$update) {
- $newPluginClasses = $self->maniaControl->pluginManager->loadPlugins();
- if (empty($newPluginClasses)) {
- $message = "Loading fresh installed Plugin '{$pluginUpdateData->pluginName}' failed!";
- if ($player) {
- $self->maniaControl->chat->sendError($message, $player);
- }
- $self->maniaControl->log($message);
- }
- else {
- $message = "Successfully loaded fresh installed Plugin '{$pluginUpdateData->pluginName}'!";
- if ($player) {
- $self->maniaControl->chat->sendSuccess($message, $player);
- }
- $self->maniaControl->log($message);
-
- $menuId = $self->maniaControl->configurator->getMenuId('Install Plugins');
- $self->maniaControl->configurator->reopenMenu($player, $menuId);
- }
- }
- });
- }
}
diff --git a/application/core/Update/UpdateData.php b/application/core/Update/UpdateData.php
index 99b0ee04..e309a74f 100644
--- a/application/core/Update/UpdateData.php
+++ b/application/core/Update/UpdateData.php
@@ -4,10 +4,10 @@ namespace ManiaControl\Update;
/**
* Update Data Structure
- *
- * @author ManiaControl Team
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class UpdateData {
/*
@@ -21,20 +21,20 @@ class UpdateData {
/**
* Construct new Update Data
- *
+ *
* @param object $updateData
*/
public function __construct($updateData) {
- $this->version = $updateData->version;
- $this->channel = $updateData->channel;
- $this->url = $updateData->url;
- $this->releaseDate = $updateData->release_date;
+ $this->version = $updateData->version;
+ $this->channel = $updateData->channel;
+ $this->url = $updateData->url;
+ $this->releaseDate = $updateData->release_date;
$this->minDedicatedBuild = $updateData->min_dedicated_build;
}
/**
* Check if the Update Data is newer than the given Date
- *
+ *
* @param string $compareDate
* @return bool
*/
diff --git a/application/core/Update/UpdateManager.php b/application/core/Update/UpdateManager.php
index 3719deb1..5266e263 100644
--- a/application/core/Update/UpdateManager.php
+++ b/application/core/Update/UpdateManager.php
@@ -6,45 +6,44 @@ use ManiaControl\Admin\AuthenticationManager;
use ManiaControl\Callbacks\CallbackListener;
use ManiaControl\Callbacks\TimerListener;
use ManiaControl\Commands\CommandListener;
+use ManiaControl\Files\BackupUtil;
use ManiaControl\Files\FileUtil;
use ManiaControl\ManiaControl;
use ManiaControl\Players\Player;
use ManiaControl\Players\PlayerManager;
-use ManiaControl\Files\BackupUtil;
/**
* Manager checking for ManiaControl Core Updates
- *
- * @author ManiaControl Team
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
- * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
+ *
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
+ * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class UpdateManager implements CallbackListener, CommandListener, TimerListener {
/*
* Constants
*/
- const SETTING_ENABLEUPDATECHECK = 'Enable Automatic Core Update Check';
- const SETTING_UPDATECHECK_INTERVAL = 'Core Update Check Interval (Hours)';
- const SETTING_UPDATECHECK_CHANNEL = 'Core Update Channel (release, beta, nightly)';
- const SETTING_PERFORM_BACKUPS = 'Perform Backup before Updating';
- const SETTING_AUTO_UPDATE = 'Perform update automatically';
- const SETTING_PERMISSION_UPDATE = 'Update Core';
+ const SETTING_ENABLEUPDATECHECK = 'Enable Automatic Core Update Check';
+ const SETTING_UPDATECHECK_INTERVAL = 'Core Update Check Interval (Hours)';
+ const SETTING_UPDATECHECK_CHANNEL = 'Core Update Channel (release, beta, nightly)';
+ const SETTING_PERFORM_BACKUPS = 'Perform Backup before Updating';
+ const SETTING_AUTO_UPDATE = 'Perform update automatically';
+ const SETTING_PERMISSION_UPDATE = 'Update Core';
const SETTING_PERMISSION_UPDATECHECK = 'Check Core Update';
- const CHANNEL_RELEASE = 'release';
- const CHANNEL_BETA = 'beta';
- const CHANNEL_NIGHTLY = 'nightly';
-
+ const CHANNEL_RELEASE = 'release';
+ const CHANNEL_BETA = 'beta';
+ const CHANNEL_NIGHTLY = 'nightly';
+
/*
* Public Properties
*/
public $pluginUpdateManager = null;
-
+
/*
* Private Properties
*/
private $maniaControl = null;
/**
- *
* @var UpdateData $coreUpdateData
*/
private $coreUpdateData = null;
@@ -52,47 +51,40 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
/**
* Create a new Update Manager
- *
+ *
* @param ManiaControl $maniaControl
*/
public function __construct(ManiaControl $maniaControl) {
$this->maniaControl = $maniaControl;
-
+
// Init settings
$this->maniaControl->settingManager->initSetting($this, self::SETTING_ENABLEUPDATECHECK, true);
$this->maniaControl->settingManager->initSetting($this, self::SETTING_AUTO_UPDATE, true);
$this->maniaControl->settingManager->initSetting($this, self::SETTING_UPDATECHECK_INTERVAL, 1);
$this->maniaControl->settingManager->initSetting($this, self::SETTING_UPDATECHECK_CHANNEL, self::CHANNEL_BETA);
$this->maniaControl->settingManager->initSetting($this, self::SETTING_PERFORM_BACKUPS, true);
-
+
// Register for callbacks
$updateInterval = $this->maniaControl->settingManager->getSetting($this, self::SETTING_UPDATECHECK_INTERVAL);
$this->maniaControl->timerManager->registerTimerListening($this, 'hourlyUpdateCheck', 1000 * 60 * 60 * $updateInterval);
$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERCONNECT, $this, 'handlePlayerJoined');
$this->maniaControl->callbackManager->registerCallbackListener(PlayerManager::CB_PLAYERDISCONNECT, $this, 'handlePlayerDisconnect');
-
+
// define Permissions
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_UPDATE, AuthenticationManager::AUTH_LEVEL_ADMIN);
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_UPDATECHECK, AuthenticationManager::AUTH_LEVEL_MODERATOR);
-
+
// Register for chat commands
$this->maniaControl->commandManager->registerCommandListener('checkupdate', $this, 'handle_CheckUpdate', true, 'Checks if there is a core update.');
$this->maniaControl->commandManager->registerCommandListener('coreupdate', $this, 'handle_CoreUpdate', true, 'Performs the core update.');
-
+
// Plugin update manager
$this->pluginUpdateManager = new PluginUpdateManager($maniaControl);
}
- /**
- * Start an Update Check
- */
- public function checkUpdate() {
- $this->checkCoreUpdateAsync(array($this, 'handleUpdateCheck'));
- }
-
/**
* Perform Hourly Update Check
- *
+ *
* @param $time
*/
public function hourlyUpdateCheck($time) {
@@ -104,9 +96,59 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
$this->checkUpdate();
}
+ /**
+ * Set Core Update Data
+ *
+ * @param UpdateData $coreUpdateData
+ */
+ public function setCoreUpdateData(UpdateData $coreUpdateData = null) {
+ $this->coreUpdateData = $coreUpdateData;
+ }
+
+ /**
+ * Start an Update Check
+ */
+ public function checkUpdate() {
+ $this->checkCoreUpdateAsync(array($this, 'handleUpdateCheck'));
+ }
+
+ /**
+ * Checks a Core Update asynchronously
+ *
+ * @param callable $function
+ */
+ private function checkCoreUpdateAsync($function) {
+ $updateChannel = $this->getCurrentUpdateChannelSetting();
+ $url = ManiaControl::URL_WEBSERVICE . 'versions?current=1&channel=' . $updateChannel;
+
+ $this->maniaControl->fileReader->loadFile($url, function ($dataJson, $error) use (&$function) {
+ $versions = json_decode($dataJson);
+ if (!$versions || !isset($versions[0])) {
+ call_user_func($function, null);
+ } else {
+ $updateData = new UpdateData($versions[0]);
+ call_user_func($function, $updateData);
+ }
+ });
+ }
+
+ /**
+ * Retrieve the Update Channel Setting
+ *
+ * @return string
+ */
+ private function getCurrentUpdateChannelSetting() {
+ $updateChannel = $this->maniaControl->settingManager->getSetting($this, self::SETTING_UPDATECHECK_CHANNEL);
+ $updateChannel = strtolower($updateChannel);
+ if (!in_array($updateChannel, array(self::CHANNEL_RELEASE, self::CHANNEL_BETA, self::CHANNEL_NIGHTLY))) {
+ $updateChannel = self::CHANNEL_RELEASE;
+ }
+ return $updateChannel;
+ }
+
/**
* Handle the fetched Update Data
- *
+ *
* @param UpdateData $updateData
*/
public function handleUpdateCheck(UpdateData $updateData) {
@@ -119,21 +161,20 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
$this->maniaControl->log("Please update Your Server to '{$updateData->minDedicatedBuild}' in order to receive further Updates!");
return;
}
-
+
if ($this->isNightlyUpdateChannel()) {
$this->maniaControl->log("New Nightly Build ({$updateData->releaseDate}) available!");
- }
- else {
+ } else {
$this->maniaControl->log("New ManiaControl Version {$updateData->version} available!");
}
$this->setCoreUpdateData($updateData);
-
+
$this->checkAutoUpdate();
}
/**
* Check if the given Update Data has a new Version and fits for the Server
- *
+ *
* @param UpdateData $updateData
* @return bool
*/
@@ -142,20 +183,48 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
// Data corrupted
return false;
}
-
+
$isNightly = $this->isNightlyUpdateChannel();
$buildDate = $this->getNightlyBuildDate();
-
+
if ($isNightly || $buildDate) {
return $updateData->isNewerThan($buildDate);
}
-
+
return ($updateData->version > ManiaControl::VERSION);
}
+ /**
+ * Check if ManiaControl is running the Nightly Update Channel
+ *
+ * @param string $updateChannel
+ * @return bool
+ */
+ public function isNightlyUpdateChannel($updateChannel = null) {
+ if (!$updateChannel) {
+ $updateChannel = $this->getCurrentUpdateChannelSetting();
+ }
+ return ($updateChannel === self::CHANNEL_NIGHTLY);
+ }
+
+ /**
+ * Get the Build Date of the local Nightly Build Version
+ *
+ * @return string
+ */
+ public function getNightlyBuildDate() {
+ if (!$this->currentBuildDate) {
+ $nightlyBuildDateFile = ManiaControlDir . '/core/nightly_build.txt';
+ if (file_exists($nightlyBuildDateFile)) {
+ $this->currentBuildDate = file_get_contents($nightlyBuildDateFile);
+ }
+ }
+ return $this->currentBuildDate;
+ }
+
/**
* Check if the Update Data is compatible with the Server
- *
+ *
* @param UpdateData $updateData
* @return bool
*/
@@ -164,56 +233,16 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
// Data corrupted
return false;
}
-
+
$version = $this->maniaControl->client->getVersion();
if ($updateData->minDedicatedBuild > $version->build) {
// Server not compatible
return false;
}
-
+
return true;
}
- /**
- * Set Core Update Data
- *
- * @param UpdateData $coreUpdateData
- */
- public function setCoreUpdateData(UpdateData $coreUpdateData = null) {
- $this->coreUpdateData = $coreUpdateData;
- }
-
- /**
- * Handle ManiaControl PlayerJoined callback
- *
- * @param Player $player
- */
- public function handlePlayerJoined(Player $player) {
- if (!$this->coreUpdateData) {
- return;
- }
- // Announce available update
- if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATE)) {
- return;
- }
-
- if ($this->isNightlyUpdateChannel()) {
- $this->maniaControl->chat->sendSuccess('New Nightly Build (' . $this->coreUpdateData->releaseDate . ') available!', $player->login);
- }
- else {
- $this->maniaControl->chat->sendInformation('New ManiaControl Version ' . $this->coreUpdateData->version . ' available!', $player->login);
- }
- }
-
- /**
- * Handle Player Disconnect Callback
- *
- * @param Player $player
- */
- public function handlePlayerDisconnect(Player $player) {
- $this->checkAutoUpdate();
- }
-
/**
* Check if an automatic Update should be performed
*/
@@ -231,145 +260,13 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
// Server not empty
return;
}
-
+
$this->performCoreUpdate();
}
- /**
- * Handle //checkupdate command
- *
- * @param array $chatCallback
- * @param Player $player
- */
- public function handle_CheckUpdate(array $chatCallback, Player $player) {
- if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATECHECK)) {
- $this->maniaControl->authenticationManager->sendNotAllowed($player);
- return;
- }
-
- $self = $this;
- $this->checkCoreUpdateAsync(function (UpdateData $updateData = null) use(&$self, &$player) {
- if (!$self->checkUpdateData($updateData)) {
- $self->maniaControl->chat->sendInformation('No Update available!', $player->login);
- return;
- }
-
- if (!$self->checkUpdateDataBuildVersion($updateData)) {
- $self->maniaControl->chat->sendError("Please update Your Server to '{$updateData->minDedicatedBuild}' in order to receive further Updates!", $player->login);
- return;
- }
-
- $isNightly = $self->isNightlyUpdateChannel();
- if ($isNightly) {
- $buildDate = $self->getNightlyBuildDate();
- if ($buildDate) {
- if ($updateData->isNewerThan($buildDate)) {
- $self->maniaControl->chat->sendInformation("No new Build available! (Current Build: '{$buildDate}')", $player->login);
- }
- else {
- $self->maniaControl->chat->sendSuccess("New Nightly Build ({$updateData->releaseDate}) available! (Current Build: '{$buildDate}')", $player->login);
- }
- }
- else {
- $self->maniaControl->chat->sendSuccess("New Nightly Build ('{$updateData->releaseDate}') available!", $player->login);
- }
- }
- else {
- $self->maniaControl->chat->sendSuccess('Update for Version ' . $updateData->version . ' available!', $player->login);
- }
- });
- }
-
- /**
- * Get the Build Date of the local Nightly Build Version
- *
- * @return string
- */
- public function getNightlyBuildDate() {
- if (!$this->currentBuildDate) {
- $nightlyBuildDateFile = ManiaControlDir . '/core/nightly_build.txt';
- if (file_exists($nightlyBuildDateFile)) {
- $this->currentBuildDate = file_get_contents($nightlyBuildDateFile);
- }
- }
- return $this->currentBuildDate;
- }
-
- /**
- * Set the Build Date of the local Nightly Build Version
- *
- * @param string $date
- * @return bool
- */
- private function setNightlyBuildDate($date) {
- $nightlyBuildDateFile = ManiaControlDir . '/core/nightly_build.txt';
- $success = (bool) file_put_contents($nightlyBuildDateFile, $date);
- $this->currentBuildDate = $date;
- return $success;
- }
-
- /**
- * Handle //coreupdate command
- *
- * @param array $chatCallback
- * @param Player $player
- */
- public function handle_CoreUpdate(array $chatCallback, Player $player) {
- if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATE)) {
- $this->maniaControl->authenticationManager->sendNotAllowed($player);
- return;
- }
-
- $self = $this;
- $this->checkCoreUpdateAsync(function (UpdateData $updateData = null) use(&$self, &$player) {
- if (!$updateData) {
- $self->maniaControl->chat->sendError('Update is currently not possible!', $player->login);
- return;
- }
- if (!$self->checkUpdateDataBuildVersion($updateData)) {
- $self->maniaControl->chat->sendError("The Next ManiaControl Update requires a newer Dedicated Server Version!", $player->login);
- return;
- }
-
- $message = "Starting Update to Version v{$updateData->version}...";
- $self->maniaControl->chat->sendInformation($message, $player->login);
- $self->maniaControl->log($message);
-
- $performBackup = $self->maniaControl->settingManager->getSetting($self, UpdateManager::SETTING_PERFORM_BACKUPS);
- if ($performBackup && !BackupUtil::performFullBackup()) {
- $message = 'Creating Backup failed!';
- $self->maniaControl->chat->sendError($message, $player->login);
- $self->maniaControl->log($message);
- }
-
- $self->performCoreUpdate($player);
- });
- }
-
- /**
- * Checks a Core Update asynchronously
- *
- * @param callable $function
- */
- private function checkCoreUpdateAsync($function) {
- $updateChannel = $this->getCurrentUpdateChannelSetting();
- $url = ManiaControl::URL_WEBSERVICE . 'versions?current=1&channel=' . $updateChannel;
-
- $this->maniaControl->fileReader->loadFile($url, function ($dataJson, $error) use(&$function) {
- $versions = json_decode($dataJson);
- if (!$versions || !isset($versions[0])) {
- call_user_func($function, null);
- }
- else {
- $updateData = new UpdateData($versions[0]);
- call_user_func($function, $updateData);
- }
- });
- }
-
/**
* Perform a Core Update
- *
+ *
* @param Player $player
* @return bool
*/
@@ -382,9 +279,9 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
$this->maniaControl->log($message);
return false;
}
-
+
$this->maniaControl->log("Starting Update to Version v{$this->coreUpdateData->version}...");
-
+
$directories = array('/core/', '/plugins/');
if (!FileUtil::checkWritePermissions($directories)) {
$message = 'Update not possible: Incorrect File System Permissions!';
@@ -394,7 +291,7 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
$this->maniaControl->log($message);
return false;
}
-
+
$performBackup = $this->maniaControl->settingManager->getSetting($this, self::SETTING_PERFORM_BACKUPS);
if ($performBackup && !BackupUtil::performFullBackup()) {
$message = 'Creating Backup before Update failed!';
@@ -403,12 +300,12 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
}
$this->maniaControl->log($message);
}
-
+
$self = $this;
- $this->maniaControl->fileReader->loadFile($this->coreUpdateData->url, function ($updateFileContent, $error) use(&$self, &$updateData, &$player) {
- $tempDir = FileUtil::getTempFolder();
+ $this->maniaControl->fileReader->loadFile($this->coreUpdateData->url, function ($updateFileContent, $error) use (&$self, &$updateData, &$player) {
+ $tempDir = FileUtil::getTempFolder();
$updateFileName = $tempDir . basename($updateData->url);
-
+
$bytes = file_put_contents($updateFileName, $updateFileContent);
if (!$bytes || $bytes <= 0) {
$message = "Update failed: Couldn't save Update zip!";
@@ -418,8 +315,8 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
logMessage($message);
return;
}
-
- $zip = new \ZipArchive();
+
+ $zip = new \ZipArchive();
$result = $zip->open($updateFileName);
if ($result !== true) {
trigger_error("Couldn't open Update Zip. ({$result})");
@@ -428,50 +325,147 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
}
return;
}
-
+
$zip->extractTo(ManiaControlDir);
$zip->close();
unlink($updateFileName);
FileUtil::removeTempFolder();
-
+
// Set the Nightly Build Date
$self->setNightlyBuildDate($updateData->releaseDate);
-
+
$message = 'Update finished!';
if ($player) {
$self->maniaControl->chat->sendSuccess($message, $player);
}
$self->maniaControl->log($message);
-
+
$self->maniaControl->restart();
});
-
+
return true;
}
/**
- * Check if ManiaControl is running the Nightly Update Channel
- *
- * @param string $updateChannel
+ * Set the Build Date of the local Nightly Build Version
+ *
+ * @param string $date
+ * @return bool
*/
- public function isNightlyUpdateChannel($updateChannel = null) {
- if (!$updateChannel) {
- $updateChannel = $this->getCurrentUpdateChannelSetting();
- }
- return ($updateChannel === self::CHANNEL_NIGHTLY);
+ private function setNightlyBuildDate($date) {
+ $nightlyBuildDateFile = ManiaControlDir . '/core/nightly_build.txt';
+ $success = (bool)file_put_contents($nightlyBuildDateFile, $date);
+ $this->currentBuildDate = $date;
+ return $success;
}
/**
- * Retrieve the Update Channel Setting
- *
- * @return string
+ * Handle ManiaControl PlayerJoined callback
+ *
+ * @param Player $player
*/
- private function getCurrentUpdateChannelSetting() {
- $updateChannel = $this->maniaControl->settingManager->getSetting($this, self::SETTING_UPDATECHECK_CHANNEL);
- $updateChannel = strtolower($updateChannel);
- if (!in_array($updateChannel, array(self::CHANNEL_RELEASE, self::CHANNEL_BETA, self::CHANNEL_NIGHTLY))) {
- $updateChannel = self::CHANNEL_RELEASE;
+ public function handlePlayerJoined(Player $player) {
+ if (!$this->coreUpdateData) {
+ return;
}
- return $updateChannel;
+ // Announce available update
+ if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATE)) {
+ return;
+ }
+
+ if ($this->isNightlyUpdateChannel()) {
+ $this->maniaControl->chat->sendSuccess('New Nightly Build (' . $this->coreUpdateData->releaseDate . ') available!', $player->login);
+ } else {
+ $this->maniaControl->chat->sendInformation('New ManiaControl Version ' . $this->coreUpdateData->version . ' available!', $player->login);
+ }
+ }
+
+ /**
+ * Handle Player Disconnect Callback
+ *
+ * @param Player $player
+ */
+ public function handlePlayerDisconnect(Player $player) {
+ $this->checkAutoUpdate();
+ }
+
+ /**
+ * Handle //checkupdate command
+ *
+ * @param array $chatCallback
+ * @param Player $player
+ */
+ public function handle_CheckUpdate(array $chatCallback, Player $player) {
+ if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATECHECK)) {
+ $this->maniaControl->authenticationManager->sendNotAllowed($player);
+ return;
+ }
+
+ $self = $this;
+ $this->checkCoreUpdateAsync(function (UpdateData $updateData = null) use (&$self, &$player) {
+ if (!$self->checkUpdateData($updateData)) {
+ $self->maniaControl->chat->sendInformation('No Update available!', $player->login);
+ return;
+ }
+
+ if (!$self->checkUpdateDataBuildVersion($updateData)) {
+ $self->maniaControl->chat->sendError("Please update Your Server to '{$updateData->minDedicatedBuild}' in order to receive further Updates!", $player->login);
+ return;
+ }
+
+ $isNightly = $self->isNightlyUpdateChannel();
+ if ($isNightly) {
+ $buildDate = $self->getNightlyBuildDate();
+ if ($buildDate) {
+ if ($updateData->isNewerThan($buildDate)) {
+ $self->maniaControl->chat->sendInformation("No new Build available! (Current Build: '{$buildDate}')", $player->login);
+ } else {
+ $self->maniaControl->chat->sendSuccess("New Nightly Build ({$updateData->releaseDate}) available! (Current Build: '{$buildDate}')", $player->login);
+ }
+ } else {
+ $self->maniaControl->chat->sendSuccess("New Nightly Build ('{$updateData->releaseDate}') available!", $player->login);
+ }
+ } else {
+ $self->maniaControl->chat->sendSuccess('Update for Version ' . $updateData->version . ' available!', $player->login);
+ }
+ });
+ }
+
+ /**
+ * Handle //coreupdate command
+ *
+ * @param array $chatCallback
+ * @param Player $player
+ */
+ public function handle_CoreUpdate(array $chatCallback, Player $player) {
+ if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_UPDATE)) {
+ $this->maniaControl->authenticationManager->sendNotAllowed($player);
+ return;
+ }
+
+ $self = $this;
+ $this->checkCoreUpdateAsync(function (UpdateData $updateData = null) use (&$self, &$player) {
+ if (!$updateData) {
+ $self->maniaControl->chat->sendError('Update is currently not possible!', $player->login);
+ return;
+ }
+ if (!$self->checkUpdateDataBuildVersion($updateData)) {
+ $self->maniaControl->chat->sendError("The Next ManiaControl Update requires a newer Dedicated Server Version!", $player->login);
+ return;
+ }
+
+ $message = "Starting Update to Version v{$updateData->version}...";
+ $self->maniaControl->chat->sendInformation($message, $player->login);
+ $self->maniaControl->log($message);
+
+ $performBackup = $self->maniaControl->settingManager->getSetting($self, UpdateManager::SETTING_PERFORM_BACKUPS);
+ if ($performBackup && !BackupUtil::performFullBackup()) {
+ $message = 'Creating Backup failed!';
+ $self->maniaControl->chat->sendError($message, $player->login);
+ $self->maniaControl->log($message);
+ }
+
+ $self->performCoreUpdate($player);
+ });
}
}
diff --git a/application/plugins/ChatMessagePlugin.php b/application/plugins/ChatMessagePlugin.php
index 3de12242..99f084f5 100644
--- a/application/plugins/ChatMessagePlugin.php
+++ b/application/plugins/ChatMessagePlugin.php
@@ -11,8 +11,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
/**
* ManiaControl Chat-Message Plugin
*
- * @author kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author kremsy
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ChatMessagePlugin implements CommandListener, Plugin {
@@ -43,6 +43,51 @@ class ChatMessagePlugin implements CommandListener, Plugin {
//do nothing
}
+ /**
+ * Get plugin id
+ *
+ * @return int
+ */
+ public static function getId() {
+ return self::PLUGIN_ID;
+ }
+
+ /**
+ * Get Plugin Name
+ *
+ * @return string
+ */
+ public static function getName() {
+ return self::PLUGIN_NAME;
+ }
+
+ /**
+ * Get Plugin Version
+ *
+ * @return float,,
+ */
+ public static function getVersion() {
+ return self::PLUGIN_VERSION;
+ }
+
+ /**
+ * Get Plugin Author
+ *
+ * @return string
+ */
+ public static function getAuthor() {
+ return self::PLUGIN_AUTHOR;
+ }
+
+ /**
+ * Get Plugin Description
+ *
+ * @return string
+ */
+ public static function getDescription() {
+ return "Plugin offers various Chat-Commands like /gg /hi /afk /rq...";
+ }
+
/**
* Load the plugin
*
@@ -113,6 +158,30 @@ class ChatMessagePlugin implements CommandListener, Plugin {
$this->maniaControl->chat->sendChat($msg, null, false);
}
+ /**
+ * Checks if a Player is in the PlayerList and returns the nickname if he is, can be called per login, pid or nickname or lj for
+ * (last joined)
+ *
+ * @param $login
+ * @return mixed
+ */
+ private function getTarget($login) {
+ /** @var Player $player */
+ $player = null;
+ foreach ($this->maniaControl->playerManager->getPlayers() as $player) {
+ if ($login == $player->login || $login == $player->pid || $login == $player->nickname) {
+ return $player->nickname;
+ }
+ }
+
+ if ($player && $login == 'lj') {
+ return $player->nickname;
+ }
+
+ //returns the text given if nothing matches
+ return $login;
+ }
+
/**
* Bye Message
*
@@ -314,7 +383,7 @@ class ChatMessagePlugin implements CommandListener, Plugin {
$message = '$39F Thanks for Playing, see you around!$z';
try {
$this->maniaControl->client->kick($player->login, $message);
- } catch(Exception $e) {
+ } catch (Exception $e) {
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line 316: " . $e->getMessage());
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
@@ -335,7 +404,7 @@ class ChatMessagePlugin implements CommandListener, Plugin {
$message = '$39F Thanks for Playing, please come back soon!$z ';
try {
$this->maniaControl->client->kick($player->login, $message);
- } catch(Exception $e) {
+ } catch (Exception $e) {
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line " . $e->getLine() . ": " . $e->getMessage());
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
@@ -361,7 +430,7 @@ class ChatMessagePlugin implements CommandListener, Plugin {
// force into spec
try {
$this->maniaControl->client->forceSpectator($player->login, 3);
- } catch(Exception $e) {
+ } catch (Exception $e) {
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line " . $e->getLine() . ": " . $e->getMessage());
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login);
@@ -371,7 +440,7 @@ class ChatMessagePlugin implements CommandListener, Plugin {
// free player slot
try {
$this->maniaControl->client->spectatorReleasePlayerSlot($player->login);
- } catch(Exception $e) {
+ } catch (Exception $e) {
if ($e->getMessage() != 'The player is not a spectator') {
$this->maniaControl->errorHandler->triggerDebugNotice("ChatMessagePlugin Debug Line " . $e->getLine() . ": " . $e->getMessage());
// TODO: only possible valid exception should be "wrong login" - throw others (like connection error)
@@ -380,73 +449,4 @@ class ChatMessagePlugin implements CommandListener, Plugin {
}
}
}
-
- /**
- * Checks if a Player is in the PlayerList and returns the nickname if he is, can be called per login, pid or nickname or lj for
- * (last joined)
- *
- * @param $login
- * @return mixed
- */
- private function getTarget($login) {
- /** @var Player $player */
- $player = null;
- foreach($this->maniaControl->playerManager->getPlayers() as $player) {
- if ($login == $player->login || $login == $player->pid || $login == $player->nickname) {
- return $player->nickname;
- }
- }
-
- if ($player && $login == 'lj') {
- return $player->nickname;
- }
-
- //returns the text given if nothing matches
- return $login;
- }
-
- /**
- * Get plugin id
- *
- * @return int
- */
- public static function getId() {
- return self::PLUGIN_ID;
- }
-
- /**
- * Get Plugin Name
- *
- * @return string
- */
- public static function getName() {
- return self::PLUGIN_NAME;
- }
-
- /**
- * Get Plugin Version
- *
- * @return float,,
- */
- public static function getVersion() {
- return self::PLUGIN_VERSION;
- }
-
- /**
- * Get Plugin Author
- *
- * @return string
- */
- public static function getAuthor() {
- return self::PLUGIN_AUTHOR;
- }
-
- /**
- * Get Plugin Description
- *
- * @return string
- */
- public static function getDescription() {
- return "Plugin offers various Chat-Commands like /gg /hi /afk /rq...";
- }
}
\ No newline at end of file
diff --git a/application/plugins/Karma.php b/application/plugins/Karma.php
index 543bfca4..188e09c6 100644
--- a/application/plugins/Karma.php
+++ b/application/plugins/Karma.php
@@ -22,8 +22,8 @@ use ManiaControl\Settings\SettingManager;
/**
* ManiaControl Karma Plugin
*
- * @author kremsy and steeffeen
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
@@ -81,11 +81,46 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
$maniaControl->settingManager->initSetting(get_class(), self::SETTING_MX_KARMA_IMPORTING, true);
$maniaControl->settingManager->initSetting(get_class(), self::SETTING_WIDGET_DISPLAY_MX, true);
$servers = $maniaControl->server->getAllServers();
- foreach($servers as $server) {
+ foreach ($servers as $server) {
$maniaControl->settingManager->initSetting(get_class(), '$l[http://karma.mania-exchange.com/auth/getapikey?server=' . $server->login . ']MX Karma Code for ' . $server->login . '$l', '');
}
}
+ /**
+ * @see \ManiaControl\Plugins\Plugin::getId()
+ */
+ public static function getId() {
+ return self::ID;
+ }
+
+ /**
+ * @see \ManiaControl\Plugins\Plugin::getName()
+ */
+ public static function getName() {
+ return 'Karma Plugin';
+ }
+
+ /**
+ * @see \ManiaControl\Plugins\Plugin::getVersion()
+ */
+ public static function getVersion() {
+ return self::VERSION;
+ }
+
+ /**
+ * @see \ManiaControl\Plugins\Plugin::getAuthor()
+ */
+ public static function getAuthor() {
+ return 'steeffeen and kremsy';
+ }
+
+ /**
+ * @see \ManiaControl\Plugins\Plugin::getDescription()
+ */
+ public static function getDescription() {
+ return 'Plugin offering Karma Voting for Maps.';
+ }
+
/**
* @see \ManiaControl\Plugins\Plugin::load()
*/
@@ -129,6 +164,221 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
return true;
}
+ /**
+ * Create necessary database tables
+ */
+ private function initTables() {
+ $mysqli = $this->maniaControl->database->mysqli;
+
+ // Create local table
+ $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_KARMA . "` (
+ `index` int(11) NOT NULL AUTO_INCREMENT,
+ `mapIndex` int(11) NOT NULL,
+ `playerIndex` int(11) NOT NULL,
+ `vote` float NOT NULL DEFAULT '-1',
+ `changed` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ PRIMARY KEY (`index`),
+ UNIQUE KEY `player_map_vote` (`mapIndex`, `playerIndex`)
+ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Save players map votes' AUTO_INCREMENT=1;";
+ $mysqli->query($query);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error, E_USER_ERROR);
+ }
+
+ // Migrate settings
+ $this->maniaControl->database->migrationHelper->transferSettings('KarmaPlugin', $this);
+
+ if (!$this->maniaControl->settingManager->getSetting($this, self::SETTING_MX_KARMA_ACTIVATED)) {
+ return;
+ }
+
+ // Create mx table
+ $query = "CREATE TABLE IF NOT EXISTS `" . self::MX_IMPORT_TABLE . "` (
+ `index` int(11) NOT NULL AUTO_INCREMENT,
+ `mapIndex` int(11) NOT NULL,
+ `mapImported` tinyint(1) NOT NULL,
+ `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ PRIMARY KEY (`index`),
+ UNIQUE KEY `mapIndex` (`mapIndex`)
+ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MX Karma Import Table' AUTO_INCREMENT=1;";
+ $mysqli->query($query);
+ if ($mysqli->error) {
+ trigger_error($mysqli->error, E_USER_ERROR);
+ }
+ }
+
+ /**
+ * Open a Mx Karma Session
+ */
+ private function mxKarmaOpenSession() {
+ if (!$this->maniaControl->settingManager->getSetting($this, self::SETTING_MX_KARMA_ACTIVATED)) {
+ return;
+ }
+
+ $serverLogin = $this->maniaControl->server->login;
+ $mxKarmaCode = $this->maniaControl->settingManager->getSetting($this, '$l[http://karma.mania-exchange.com/auth/getapikey?server=' . $serverLogin . ']MX Karma Code for ' . $serverLogin . '$l');
+
+ if ($mxKarmaCode == '') {
+ return;
+ }
+
+ $applicationIdentifier = 'ManiaControl v' . ManiaControl::VERSION;
+ $testMode = 'true';
+
+ $query = self::MX_KARMA_URL . self::MX_KARMA_STARTSESSION;
+ $query .= '?serverLogin=' . $serverLogin;
+ $query .= '&applicationIdentifier=' . urlencode($applicationIdentifier);
+ $query .= '&testMode=' . $testMode;
+
+ $this->mxKarma['connectionInProgress'] = true;
+
+ $self = $this;
+ $this->maniaControl->fileReader->loadFile($query, function ($data, $error) use (&$self, $mxKarmaCode) {
+ if (!$error) {
+ $data = json_decode($data);
+ if ($data->success) {
+ $self->mxKarma['session'] = $data->data;
+ $self->activateSession($mxKarmaCode);
+ } else {
+ $self->maniaControl->log("Error while authenticating on Mania-Exchange Karma");
+ // TODO remove temp trigger
+ $self->maniaControl->errorHandler->triggerDebugNotice("Error while authenticating on Mania-Exchange Karma " . $data->data->message);
+ $self->mxKarma['connectionInProgress'] = false;
+ }
+ } else {
+ $self->maniaControl->log($error);
+ // TODO remove temp trigger
+ $self->maniaControl->errorHandler->triggerDebugNotice("Error while authenticating on Mania-Exchange Karma " . $error);
+ $self->mxKarma['connectionInProgress'] = false;
+ }
+ }, "application/json", 1000);
+ }
+
+ /**
+ * Activates the MX-Karma Session
+ *
+ * @param $mxKarmaCode
+ */
+ private function activateSession($mxKarmaCode) {
+ $hash = $this->buildActivationHash($this->mxKarma['session']->sessionSeed, $mxKarmaCode);
+
+ $query = self::MX_KARMA_URL . self::MX_KARMA_ACTIVATESESSION;
+ $query .= '?sessionKey=' . urlencode($this->mxKarma['session']->sessionKey);
+ $query .= '&activationHash=' . urlencode($hash);
+
+ $self = $this;
+ $this->maniaControl->fileReader->loadFile($query, function ($data, $error) use (&$self, $query) {
+ if (!$error) {
+ $data = json_decode($data);
+ if ($data->success && $data->data->activated) {
+ $self->maniaControl->log("Successfully authenticated on Mania-Exchange Karma");
+ $self->mxKarma['connectionInProgress'] = false;
+
+ // Fetch the Mx Karma Votes
+ $self->getMxKarmaVotes();
+ } else {
+ $self->maniaControl->log("Error while authenticating on Mania-Exchange Karma " . $data->data->message);
+ // TODO remove temp trigger
+ $self->maniaControl->errorHandler->triggerDebugNotice("Error while authenticating on Mania-Exchange Karma " . $data->data->message . " url Query " . $query);
+ $self->mxKarma['connectionInProgress'] = false;
+ }
+ } else {
+ // TODO remove temp trigger
+ $self->maniaControl->errorHandler->triggerDebugNotice("Error while authenticating on Mania-Exchange Karma " . $error);
+ $self->maniaControl->log($error);
+ $self->mxKarma['connectionInProgress'] = false;
+ }
+ }, "application/json", 1000);
+ }
+
+ /**
+ * Builds a sha512 activation Hash for the MX-Karma
+ *
+ * @param $sessionSeed
+ * @param $mxKey
+ * @return string
+ */
+ private function buildActivationHash($sessionSeed, $mxKey) {
+ return hash('sha512', $mxKey . $sessionSeed);
+ }
+
+ /**
+ * Fetch the mxKarmaVotes for the current map
+ */
+ public function getMxKarmaVotes(Player $player = null) {
+ if (!$this->maniaControl->settingManager->getSetting($this, self::SETTING_MX_KARMA_ACTIVATED)) {
+ return;
+ }
+
+ if (!isset($this->mxKarma['session'])) {
+ if (!isset($this->mxKarma['connectionInProgress']) || !$this->mxKarma['connectionInProgress']) {
+ $this->mxKarmaOpenSession();
+ }
+ return;
+ }
+
+ $map = $this->maniaControl->mapManager->getCurrentMap();
+
+ $properties = array();
+
+ $gameMode = $this->maniaControl->server->getGameMode(true);
+ if ($gameMode == 'Script') {
+ $scriptName = $this->maniaControl->client->getScriptName();
+ $properties['gamemode'] = $scriptName["CurrentValue"];
+ } else {
+ $properties['gamemode'] = $gameMode;
+ }
+
+ $properties['titleid'] = $this->maniaControl->server->titleId;
+ $properties['mapuid'] = $map->uid;
+
+ if (!$player) {
+ $properties['getvotesonly'] = false;
+ $properties['playerlogins'] = array();
+ foreach ($this->maniaControl->playerManager->getPlayers() as $plyr) {
+ /**
+ * @var Player $player
+ */
+ $properties['playerlogins'][] = $plyr->login;
+ }
+ } else {
+ $properties['getvotesonly'] = true;
+ $properties['playerlogins'] = array($player->login);
+ }
+
+ $content = json_encode($properties);
+ $self = $this;
+ $this->maniaControl->fileReader->postData(self::MX_KARMA_URL . self::MX_KARMA_GETMAPRATING . "?sessionKey=" . urlencode($this->mxKarma['session']->sessionKey), function ($data, $error) use (&$self, &$player) {
+ if (!$error) {
+ $data = json_decode($data);
+ if ($data->success) {
+
+ // Fetch averages if its for the whole server
+ if (!$player) {
+ $self->mxKarma["voteCount"] = $data->data->votecount;
+ $self->mxKarma["voteAverage"] = $data->data->voteaverage;
+ $self->mxKarma["modeVoteCount"] = $data->data->modevotecount;
+ $self->mxKarma["modeVoteAverage"] = $data->data->modevoteaverage;
+ }
+
+ foreach ($data->data->votes as $votes) {
+ $self->mxKarma["votes"][$votes->login] = $votes->vote;
+ }
+
+ $self->updateManialink = true;
+ $self->maniaControl->callbackManager->triggerCallback($self::CB_KARMA_MXUPDATED, $self->mxKarma);
+ $self->maniaControl->log("MX-Karma Votes successfully fetched");
+ } else {
+ $self->maniaControl->log("Error while fetching votes: " . $data->data->message);
+ // TODO remove temp trigger
+ $self->maniaControl->errorHandler->triggerDebugNotice("Error while fetching votes: " . $data->data->message . " " . KarmaPlugin::MX_KARMA_URL . KarmaPlugin::MX_KARMA_SAVEVOTES . "?sessionKey=" . urlencode($self->mxKarma['session']->sessionKey));
+ }
+ } else {
+ $self->maniaControl->log($error);
+ }
+ }, $content, false, 'application/json');
+ }
+
/**
* @see \ManiaControl\Plugins\Plugin::unload()
*/
@@ -139,112 +389,6 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
unset($this->maniaControl);
}
- /**
- * @see \ManiaControl\Plugins\Plugin::getId()
- */
- public static function getId() {
- return self::ID;
- }
-
- /**
- * @see \ManiaControl\Plugins\Plugin::getName()
- */
- public static function getName() {
- return 'Karma Plugin';
- }
-
- /**
- * @see \ManiaControl\Plugins\Plugin::getVersion()
- */
- public static function getVersion() {
- return self::VERSION;
- }
-
- /**
- * @see \ManiaControl\Plugins\Plugin::getAuthor()
- */
- public static function getAuthor() {
- return 'steeffeen and kremsy';
- }
-
- /**
- * @see \ManiaControl\Plugins\Plugin::getDescription()
- */
- public static function getDescription() {
- return 'Plugin offering Karma Voting for Maps.';
- }
-
- /**
- * Handle ManiaControl 1 Second callback
- *
- * @param $time
- */
- public function handle1Second($time) {
- if (!$this->updateManialink) {
- return;
- }
-
- $displayMxKarma = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_DISPLAY_MX);
-
- // Get players
- $players = $this->updateManialink;
- if ($players === true) {
- $players = $this->maniaControl->playerManager->getPlayers();
- }
- $this->updateManialink = false;
-
- // Get map karma
- $map = $this->maniaControl->mapManager->getCurrentMap();
-
- // Display the mx Karma if the setting is choosen and the MX session is available
- if ($displayMxKarma && isset($this->mxKarma['session']) && isset($this->mxKarma['voteCount'])) {
- $karma = $this->mxKarma['modeVoteAverage'] / 100;
- $voteCount = $this->mxKarma['modeVoteCount'];
- } else {
- $karma = $this->getMapKarma($map);
- $votes = $this->getMapVotes($map);
- $voteCount = $votes['count'];
- }
-
- if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_ENABLE)) {
- // Build karma manialink
- $this->buildManialink();
-
- // Update karma gauge & label
- /**
- * @var Gauge $karmaGauge
- */
- $karmaGauge = $this->manialink->karmaGauge;
- /**
- * @var Label $karmaLabel
- */
- $karmaLabel = $this->manialink->karmaLabel;
- if (is_numeric($karma) && $voteCount > 0) {
- $karma = floatval($karma);
- $karmaGauge->setRatio($karma + 0.15 - $karma * 0.15);
- $karmaColor = ColorUtil::floatToStatusColor($karma);
- $karmaGauge->setColor($karmaColor . '7');
- $karmaLabel->setText(' ' . round($karma * 100.) . '% (' . $voteCount . ')');
- } else {
- $karmaGauge->setRatio(0.);
- $karmaGauge->setColor('00fb');
- $karmaLabel->setText('-');
- }
-
- // Loop players
- foreach($players as $login => $player) {
- // Get player vote
- // TODO: show the player his own vote in some way
- // $vote = $this->getPlayerVote($player, $map);
- // $votesFrame = $this->manialink->votesFrame;
- // $votesFrame->removeChildren();
-
- // Send manialink
- $this->maniaControl->manialinkManager->sendManialink($this->manialink, $login);
- }
- }
- }
-
/**
* Handle BeginMap ManiaControl callback
*
@@ -254,7 +398,7 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
// send Map Karma to MX from previous Map
if (isset($this->mxKarma['map'])) {
$votes = array();
- foreach($this->mxKarma['votes'] as $login => $value) {
+ foreach ($this->mxKarma['votes'] as $login => $value) {
$player = $this->maniaControl->playerManager->getPlayer($login);
array_push($votes, array("login" => $login, "nickname" => $player->rawNickname, "vote" => $value));
}
@@ -270,6 +414,67 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
$this->getMxKarmaVotes();
}
+ /**
+ * Post the Karma votes to MX-Karma
+ *
+ * @param Map $map
+ * @param array $votes
+ * @param bool $import
+ */
+ private function postKarmaVotes(Map $map, array $votes, $import = false) {
+ if (!isset($this->mxKarma['session'])) {
+ if (!isset($this->mxKarma['connectionInProgress']) || !$this->mxKarma['connectionInProgress']) {
+ $this->mxKarmaOpenSession();
+ }
+ return;
+ }
+
+ $gameMode = $this->maniaControl->server->getGameMode(true);
+
+ if (count($votes) == 0) {
+ return;
+ }
+
+ $properties = array();
+ if ($gameMode == 'Script') {
+ $scriptName = $this->maniaControl->client->getScriptName();
+ $properties['gamemode'] = $scriptName["CurrentValue"];
+ } else {
+ $properties['gamemode'] = $gameMode;
+ }
+
+ if ($import) {
+ $properties['maptime'] = 0;
+ } else {
+ $properties['maptime'] = time() - $this->mxKarma['startTime'];
+ }
+
+ $properties['votes'] = $votes;
+ $properties['titleid'] = $this->maniaControl->server->titleId;
+ $properties['mapname'] = $map->rawName;
+ $properties['mapuid'] = $map->uid;
+ $properties['mapauthor'] = $map->authorLogin;
+ $properties['isimport'] = $import;
+
+ $content = json_encode($properties);
+
+ $self = $this;
+ $this->maniaControl->fileReader->postData(self::MX_KARMA_URL . self::MX_KARMA_SAVEVOTES . "?sessionKey=" . urlencode($this->mxKarma['session']->sessionKey), function ($data, $error) use (&$self) {
+ if (!$error) {
+ $data = json_decode($data);
+ if ($data->success) {
+ $self->maniaControl->log("Votes successfully permitted");
+ } else {
+ $self->maniaControl->log("Error while updating votes: " . $data->data->message);
+ // TODO remove temp trigger
+ $self->maniaControl->errorHandler->triggerDebugNotice("Error while updating votes: " . $data->data->message . " " . KarmaPlugin::MX_KARMA_URL . $self::MX_KARMA_SAVEVOTES . "?sessionKey=" . urlencode($self->mxKarma['session']->sessionKey));
+ }
+ } else {
+ $self->maniaControl->log($error);
+ }
+ }, $content, false, 'application/json');
+ }
+
/**
* Handle PlayerConnect callback
*
@@ -285,6 +490,21 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
$this->getMxKarmaVotes($player);
}
+ /**
+ * Query the player to update the manialink
+ *
+ * @param Player $player
+ */
+ private function queryManialinkUpdateFor(Player $player) {
+ if ($this->updateManialink === true) {
+ return;
+ }
+ if (!is_array($this->updateManialink)) {
+ $this->updateManialink = array();
+ }
+ $this->updateManialink[$player->login] = $player;
+ }
+
/**
* Handle PlayerChat callback
*
@@ -379,61 +599,31 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
}
/**
- * Query the player to update the manialink
+ * Get the current vote of the player for the map
*
* @param Player $player
+ * @param Map $map
+ * @return int
*/
- private function queryManialinkUpdateFor(Player $player) {
- if ($this->updateManialink === true) {
- return;
- }
- if (!is_array($this->updateManialink)) {
- $this->updateManialink = array();
- }
- $this->updateManialink[$player->login] = $player;
- }
-
- /**
- * Create necessary database tables
- */
- private function initTables() {
+ public function getPlayerVote(Player $player, Map $map) {
$mysqli = $this->maniaControl->database->mysqli;
-
- // Create local table
- $query = "CREATE TABLE IF NOT EXISTS `" . self::TABLE_KARMA . "` (
- `index` int(11) NOT NULL AUTO_INCREMENT,
- `mapIndex` int(11) NOT NULL,
- `playerIndex` int(11) NOT NULL,
- `vote` float NOT NULL DEFAULT '-1',
- `changed` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`index`),
- UNIQUE KEY `player_map_vote` (`mapIndex`, `playerIndex`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Save players map votes' AUTO_INCREMENT=1;";
- $mysqli->query($query);
+ $query = "SELECT * FROM `" . self::TABLE_KARMA . "`
+ WHERE `playerIndex` = {$player->index}
+ AND `mapIndex` = {$map->index}
+ AND `vote` >= 0;";
+ $result = $mysqli->query($query);
if ($mysqli->error) {
- trigger_error($mysqli->error, E_USER_ERROR);
+ trigger_error($mysqli->error);
+ return false;
}
-
- // Migrate settings
- $this->maniaControl->database->migrationHelper->transferSettings('KarmaPlugin', $this);
-
- if (!$this->maniaControl->settingManager->getSetting($this, self::SETTING_MX_KARMA_ACTIVATED)) {
- return;
- }
-
- // Create mx table
- $query = "CREATE TABLE IF NOT EXISTS `" . self::MX_IMPORT_TABLE . "` (
- `index` int(11) NOT NULL AUTO_INCREMENT,
- `mapIndex` int(11) NOT NULL,
- `mapImported` tinyint(1) NOT NULL,
- `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`index`),
- UNIQUE KEY `mapIndex` (`mapIndex`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MX Karma Import Table' AUTO_INCREMENT=1;";
- $mysqli->query($query);
- if ($mysqli->error) {
- trigger_error($mysqli->error, E_USER_ERROR);
+ if ($result->num_rows <= 0) {
+ $result->free();
+ return false;
}
+ $item = $result->fetch_object();
+ $result->free();
+ $vote = $item->vote;
+ return floatval($vote);
}
/**
@@ -466,31 +656,134 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
}
/**
- * Get the current vote of the player for the map
+ * Get all players votes
*
- * @param Player $player
- * @param Map $map
- * @return int
+ * @param Map $map
+ * @return array
*/
- public function getPlayerVote(Player $player, Map $map) {
+ public function getMapPlayerVotes(Map $map) {
$mysqli = $this->maniaControl->database->mysqli;
$query = "SELECT * FROM `" . self::TABLE_KARMA . "`
- WHERE `playerIndex` = {$player->index}
- AND `mapIndex` = {$map->index}
- AND `vote` >= 0;";
+ WHERE `mapIndex` = {$map->index}
+ AND `vote` >= 0";
$result = $mysqli->query($query);
if ($mysqli->error) {
trigger_error($mysqli->error);
return false;
}
- if ($result->num_rows <= 0) {
- $result->free();
- return false;
+
+ $votes = array();
+ while ($vote = $result->fetch_object()) {
+ $player = $this->maniaControl->playerManager->getPlayerByIndex($vote->playerIndex);
+ $karma = $vote->vote;
+ $votes[] = array('player' => $player, 'karma' => $karma);
+ }
+
+ usort($votes, function ($a, $b) {
+ return $a['karma'] - $b['karma'];
+ });
+ $votes = array_reverse($votes);
+
+ return $votes;
+ }
+
+ /**
+ * Update Settings
+ *
+ * @param $class
+ * @param $settingName
+ * @param $value
+ */
+ public function updateSettings($class, $settingName, $value) {
+ if (!$class = get_class()) {
+ return;
+ }
+
+ $serverLogin = $this->maniaControl->server->login;
+ if ($settingName == '$l[http://karma.mania-exchange.com/auth/getapikey?server=' . $serverLogin . ']MX Karma Code for ' . $serverLogin . '$l') {
+ $this->mxKarmaOpenSession();
+ }
+
+ if ($settingName == 'Enable Karma Widget' && $value == true) {
+ $this->updateManialink = true;
+ $this->handle1Second(time());
+ } elseif ($settingName == 'Enable Karma Widget' && $value == false) {
+ $this->updateManialink = false;
+ $ml = new ManiaLink(self::MLID_KARMA);
+ $mltext = $ml->render()->saveXML();
+ $this->maniaControl->manialinkManager->sendManialink($mltext);
+ }
+ }
+
+ /**
+ * Handle ManiaControl 1 Second callback
+ *
+ * @param $time
+ */
+ public function handle1Second($time) {
+ if (!$this->updateManialink) {
+ return;
+ }
+
+ $displayMxKarma = $this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_DISPLAY_MX);
+
+ // Get players
+ $players = $this->updateManialink;
+ if ($players === true) {
+ $players = $this->maniaControl->playerManager->getPlayers();
+ }
+ $this->updateManialink = false;
+
+ // Get map karma
+ $map = $this->maniaControl->mapManager->getCurrentMap();
+
+ // Display the mx Karma if the setting is choosen and the MX session is available
+ if ($displayMxKarma && isset($this->mxKarma['session']) && isset($this->mxKarma['voteCount'])) {
+ $karma = $this->mxKarma['modeVoteAverage'] / 100;
+ $voteCount = $this->mxKarma['modeVoteCount'];
+ } else {
+ $karma = $this->getMapKarma($map);
+ $votes = $this->getMapVotes($map);
+ $voteCount = $votes['count'];
+ }
+
+ if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_WIDGET_ENABLE)) {
+ // Build karma manialink
+ $this->buildManialink();
+
+ // Update karma gauge & label
+ /**
+ * @var Gauge $karmaGauge
+ */
+ $karmaGauge = $this->manialink->karmaGauge;
+ /**
+ * @var Label $karmaLabel
+ */
+ $karmaLabel = $this->manialink->karmaLabel;
+ if (is_numeric($karma) && $voteCount > 0) {
+ $karma = floatval($karma);
+ $karmaGauge->setRatio($karma + 0.15 - $karma * 0.15);
+ $karmaColor = ColorUtil::floatToStatusColor($karma);
+ $karmaGauge->setColor($karmaColor . '7');
+ $karmaLabel->setText(' ' . round($karma * 100.) . '% (' . $voteCount . ')');
+ } else {
+ $karmaGauge->setRatio(0.);
+ $karmaGauge->setColor('00fb');
+ $karmaLabel->setText('-');
+ }
+
+ // Loop players
+ foreach ($players as $login => $player) {
+ // Get player vote
+ // TODO: show the player his own vote in some way
+ // $vote = $this->getPlayerVote($player, $map);
+ // $votesFrame = $this->manialink->votesFrame;
+ // $votesFrame->removeChildren();
+
+ // Send manialink
+ $this->maniaControl->manialinkManager->sendManialink($this->manialink, $login);
+ }
}
- $item = $result->fetch_object();
- $result->free();
- $vote = $item->vote;
- return floatval($vote);
}
/**
@@ -541,7 +834,7 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
}
$votes = array();
$count = 0;
- while($vote = $result->fetch_object()) {
+ while ($vote = $result->fetch_object()) {
$votes[$vote->vote] = $vote;
$count += $vote->count;
}
@@ -550,38 +843,6 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
return $votes;
}
- /**
- * Get all players votes
- *
- * @param Map $map
- * @return array
- */
- public function getMapPlayerVotes(Map $map) {
- $mysqli = $this->maniaControl->database->mysqli;
- $query = "SELECT * FROM `" . self::TABLE_KARMA . "`
- WHERE `mapIndex` = {$map->index}
- AND `vote` >= 0";
- $result = $mysqli->query($query);
- if ($mysqli->error) {
- trigger_error($mysqli->error);
- return false;
- }
-
- $votes = array();
- while($vote = $result->fetch_object()) {
- $player = $this->maniaControl->playerManager->getPlayerByIndex($vote->playerIndex);
- $karma = $vote->vote;
- $votes[] = array('player' => $player, 'karma' => $karma);
- }
-
- usort($votes, function($a, $b) {
- return $a['karma'] - $b['karma'];
- });
- $votes = array_reverse($votes);
-
- return $votes;
- }
-
/**
* Build karma voting manialink if necessary
*
@@ -644,195 +905,6 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
$this->manialink = $manialink;
}
- /**
- * Update Settings
- *
- * @param $class
- * @param $settingName
- * @param $value
- */
- public function updateSettings($class, $settingName, $value) {
- if (!$class = get_class()) {
- return;
- }
-
- $serverLogin = $this->maniaControl->server->login;
- if ($settingName == '$l[http://karma.mania-exchange.com/auth/getapikey?server=' . $serverLogin . ']MX Karma Code for ' . $serverLogin . '$l') {
- $this->mxKarmaOpenSession();
- }
-
- if ($settingName == 'Enable Karma Widget' && $value == true) {
- $this->updateManialink = true;
- $this->handle1Second(time());
- } elseif ($settingName == 'Enable Karma Widget' && $value == false) {
- $this->updateManialink = false;
- $ml = new ManiaLink(self::MLID_KARMA);
- $mltext = $ml->render()->saveXML();
- $this->maniaControl->manialinkManager->sendManialink($mltext);
- }
- }
-
- /**
- * Open a Mx Karma Session
- */
- private function mxKarmaOpenSession() {
- if (!$this->maniaControl->settingManager->getSetting($this, self::SETTING_MX_KARMA_ACTIVATED)) {
- return;
- }
-
- $serverLogin = $this->maniaControl->server->login;
- $mxKarmaCode = $this->maniaControl->settingManager->getSetting($this, '$l[http://karma.mania-exchange.com/auth/getapikey?server=' . $serverLogin . ']MX Karma Code for ' . $serverLogin . '$l');
-
- if ($mxKarmaCode == '') {
- return;
- }
-
- $applicationIdentifier = 'ManiaControl v' . ManiaControl::VERSION;
- $testMode = 'true';
-
- $query = self::MX_KARMA_URL . self::MX_KARMA_STARTSESSION;
- $query .= '?serverLogin=' . $serverLogin;
- $query .= '&applicationIdentifier=' . urlencode($applicationIdentifier);
- $query .= '&testMode=' . $testMode;
-
- $this->mxKarma['connectionInProgress'] = true;
-
- $self = $this;
- $this->maniaControl->fileReader->loadFile($query, function ($data, $error) use (&$self, $mxKarmaCode) {
- if (!$error) {
- $data = json_decode($data);
- if ($data->success) {
- $self->mxKarma['session'] = $data->data;
- $self->activateSession($mxKarmaCode);
- } else {
- $self->maniaControl->log("Error while authenticating on Mania-Exchange Karma");
- // TODO remove temp trigger
- $self->maniaControl->errorHandler->triggerDebugNotice("Error while authenticating on Mania-Exchange Karma " . $data->data->message);
- $self->mxKarma['connectionInProgress'] = false;
- }
- } else {
- $self->maniaControl->log($error);
- // TODO remove temp trigger
- $self->maniaControl->errorHandler->triggerDebugNotice("Error while authenticating on Mania-Exchange Karma " . $error);
- $self->mxKarma['connectionInProgress'] = false;
- }
- }, "application/json", 1000);
- }
-
- /**
- * Activates the MX-Karma Session
- *
- * @param $mxKarmaCode
- */
- private function activateSession($mxKarmaCode) {
- $hash = $this->buildActivationHash($this->mxKarma['session']->sessionSeed, $mxKarmaCode);
-
- $query = self::MX_KARMA_URL . self::MX_KARMA_ACTIVATESESSION;
- $query .= '?sessionKey=' . urlencode($this->mxKarma['session']->sessionKey);
- $query .= '&activationHash=' . urlencode($hash);
-
- $self = $this;
- $this->maniaControl->fileReader->loadFile($query, function ($data, $error) use (&$self, $query) {
- if (!$error) {
- $data = json_decode($data);
- if ($data->success && $data->data->activated) {
- $self->maniaControl->log("Successfully authenticated on Mania-Exchange Karma");
- $self->mxKarma['connectionInProgress'] = false;
-
- // Fetch the Mx Karma Votes
- $self->getMxKarmaVotes();
- } else {
- $self->maniaControl->log("Error while authenticating on Mania-Exchange Karma " . $data->data->message);
- // TODO remove temp trigger
- $self->maniaControl->errorHandler->triggerDebugNotice("Error while authenticating on Mania-Exchange Karma " . $data->data->message . " url Query " . $query);
- $self->mxKarma['connectionInProgress'] = false;
- }
- } else {
- // TODO remove temp trigger
- $self->maniaControl->errorHandler->triggerDebugNotice("Error while authenticating on Mania-Exchange Karma " . $error);
- $self->maniaControl->log($error);
- $self->mxKarma['connectionInProgress'] = false;
- }
- }, "application/json", 1000);
- }
-
- /**
- * Fetch the mxKarmaVotes for the current map
- */
- public function getMxKarmaVotes(Player $player = null) {
- if (!$this->maniaControl->settingManager->getSetting($this, self::SETTING_MX_KARMA_ACTIVATED)) {
- return;
- }
-
- if (!isset($this->mxKarma['session'])) {
- if (!isset($this->mxKarma['connectionInProgress']) || !$this->mxKarma['connectionInProgress']) {
- $this->mxKarmaOpenSession();
- }
- return;
- }
-
- $map = $this->maniaControl->mapManager->getCurrentMap();
-
- $properties = array();
-
- $gameMode = $this->maniaControl->server->getGameMode(true);
- if ($gameMode == 'Script') {
- $scriptName = $this->maniaControl->client->getScriptName();
- $properties['gamemode'] = $scriptName["CurrentValue"];
- } else {
- $properties['gamemode'] = $gameMode;
- }
-
- $properties['titleid'] = $this->maniaControl->server->titleId;
- $properties['mapuid'] = $map->uid;
-
- if (!$player) {
- $properties['getvotesonly'] = false;
- $properties['playerlogins'] = array();
- foreach($this->maniaControl->playerManager->getPlayers() as $plyr) {
- /**
- * @var Player $player
- */
- $properties['playerlogins'][] = $plyr->login;
- }
- } else {
- $properties['getvotesonly'] = true;
- $properties['playerlogins'] = array($player->login);
- }
-
- $content = json_encode($properties);
- $self = $this;
- $this->maniaControl->fileReader->postData(self::MX_KARMA_URL . self::MX_KARMA_GETMAPRATING . "?sessionKey=" . urlencode($this->mxKarma['session']->sessionKey), function ($data, $error) use (&$self, &$player) {
- if (!$error) {
- $data = json_decode($data);
- if ($data->success) {
-
- // Fetch averages if its for the whole server
- if (!$player) {
- $self->mxKarma["voteCount"] = $data->data->votecount;
- $self->mxKarma["voteAverage"] = $data->data->voteaverage;
- $self->mxKarma["modeVoteCount"] = $data->data->modevotecount;
- $self->mxKarma["modeVoteAverage"] = $data->data->modevoteaverage;
- }
-
- foreach($data->data->votes as $votes) {
- $self->mxKarma["votes"][$votes->login] = $votes->vote;
- }
-
- $self->updateManialink = true;
- $self->maniaControl->callbackManager->triggerCallback($self::CB_KARMA_MXUPDATED, $self->mxKarma);
- $self->maniaControl->log("MX-Karma Votes successfully fetched");
- } else {
- $self->maniaControl->log("Error while fetching votes: " . $data->data->message);
- // TODO remove temp trigger
- $self->maniaControl->errorHandler->triggerDebugNotice("Error while fetching votes: " . $data->data->message . " " . KarmaPlugin::MX_KARMA_URL . KarmaPlugin::MX_KARMA_SAVEVOTES . "?sessionKey=" . urlencode($self->mxKarma['session']->sessionKey));
- }
- } else {
- $self->maniaControl->log($error);
- }
- }, $content, false, 'application/json');
- }
-
/**
* Import old Karma votes to Mania-Exchange Karma
*
@@ -872,7 +944,7 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
}
$votes = array();
- while($row = $result2->fetch_object()) {
+ while ($row = $result2->fetch_object()) {
array_push($votes, array("login" => $row->login, "nickname" => $row->nickname, "vote" => $row->vote * 100));
}
@@ -913,76 +985,4 @@ class KarmaPlugin implements CallbackListener, TimerListener, Plugin {
$this->mxKarma['map'] = $map;
}
-
- /**
- * Post the Karma votes to MX-Karma
- *
- * @param Map $map
- * @param array $votes
- * @param bool $import
- */
- private function postKarmaVotes(Map $map, array $votes, $import = false) {
- if (!isset($this->mxKarma['session'])) {
- if (!isset($this->mxKarma['connectionInProgress']) || !$this->mxKarma['connectionInProgress']) {
- $this->mxKarmaOpenSession();
- }
- return;
- }
-
- $gameMode = $this->maniaControl->server->getGameMode(true);
-
- if (count($votes) == 0) {
- return;
- }
-
- $properties = array();
- if ($gameMode == 'Script') {
- $scriptName = $this->maniaControl->client->getScriptName();
- $properties['gamemode'] = $scriptName["CurrentValue"];
- } else {
- $properties['gamemode'] = $gameMode;
- }
-
- if ($import) {
- $properties['maptime'] = 0;
- } else {
- $properties['maptime'] = time() - $this->mxKarma['startTime'];
- }
-
- $properties['votes'] = $votes;
- $properties['titleid'] = $this->maniaControl->server->titleId;
- $properties['mapname'] = $map->rawName;
- $properties['mapuid'] = $map->uid;
- $properties['mapauthor'] = $map->authorLogin;
- $properties['isimport'] = $import;
-
- $content = json_encode($properties);
-
- $self = $this;
- $this->maniaControl->fileReader->postData(self::MX_KARMA_URL . self::MX_KARMA_SAVEVOTES . "?sessionKey=" . urlencode($this->mxKarma['session']->sessionKey), function ($data, $error) use (&$self) {
- if (!$error) {
- $data = json_decode($data);
- if ($data->success) {
- $self->maniaControl->log("Votes successfully permitted");
- } else {
- $self->maniaControl->log("Error while updating votes: " . $data->data->message);
- // TODO remove temp trigger
- $self->maniaControl->errorHandler->triggerDebugNotice("Error while updating votes: " . $data->data->message . " " . KarmaPlugin::MX_KARMA_URL . $self::MX_KARMA_SAVEVOTES . "?sessionKey=" . urlencode($self->mxKarma['session']->sessionKey));
- }
- } else {
- $self->maniaControl->log($error);
- }
- }, $content, false, 'application/json');
- }
-
- /**
- * Builds a sha512 activation Hash for the MX-Karma
- *
- * @param $sessionSeed
- * @param $mxKey
- * @return string
- */
- private function buildActivationHash($sessionSeed, $mxKey) {
- return hash('sha512', $mxKey . $sessionSeed);
- }
}
diff --git a/application/plugins/WidgetPlugin.php b/application/plugins/WidgetPlugin.php
index 6aacbbcf..d1555c99 100644
--- a/application/plugins/WidgetPlugin.php
+++ b/application/plugins/WidgetPlugin.php
@@ -24,8 +24,8 @@ use ManiaControl\Plugins\Plugin;
/**
* ManiaControl Widget Plugin
*
- * @author steeffeen and kremsy
- * @copyright ManiaControl Copyright © 2014 ManiaControl Team
+ * @author ManiaControl Team
+ * @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
@@ -88,6 +88,51 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
//do nothing
}
+ /**
+ * Get plugin id
+ *
+ * @return int
+ */
+ public static function getId() {
+ return self::PLUGIN_ID;
+ }
+
+ /**
+ * Get Plugin Name
+ *
+ * @return string
+ */
+ public static function getName() {
+ return self::PLUGIN_NAME;
+ }
+
+ /**
+ * Get Plugin Version
+ *
+ * @return float,,
+ */
+ public static function getVersion() {
+ return self::PLUGIN_VERSION;
+ }
+
+ /**
+ * Get Plugin Author
+ *
+ * @return string
+ */
+ public static function getAuthor() {
+ return self::PLUGIN_AUTHOR;
+ }
+
+ /**
+ * Get Plugin Description
+ *
+ * @return string
+ */
+ public static function getDescription() {
+ return 'Plugin offers some Widgets';
+ }
+
/**
* Load the plugin
*
@@ -136,22 +181,7 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
}
/**
- * Unload the plugin and its resources
- */
- public function unload() {
- $this->closeWidget(self::MLID_CLOCKWIDGET);
- $this->closeWidget(self::MLID_SERVERINFOWIDGET);
- $this->closeWidget(self::MLID_MAPWIDGET);
- $this->closeWidget(self::MLID_NEXTMAPWIDGET);
- $this->maniaControl->callbackManager->unregisterCallbackListener($this);
- $this->maniaControl->timerManager->unregisterTimerListenings($this);
- unset($this->maniaControl);
- }
-
- /**
- * Displays the Widgets onLoad
- *
- * @param array $callback
+ * Display the Widgets
*/
private function displayWidgets() {
// Display Map Widget
@@ -168,11 +198,11 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
}
/**
- * Displays the Map Widget
+ * Display the Map Widget
*
- * @param String $login
+ * @param string $login
*/
- public function displayMapWidget($login = false) {
+ public function displayMapWidget($login = null) {
$pos_x = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_POSX);
$pos_y = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_POSY);
$width = $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_WIDTH);
@@ -280,11 +310,11 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
}
/**
- * Displays the Server Info Widget
+ * Display the Server Info Widget
*
- * @param String $login
+ * @param string $login
*/
- public function displayServerInfoWidget($login = false) {
+ public function displayServerInfoWidget($login = null) {
$pos_x = $this->maniaControl->settingManager->getSetting($this, self::SETTING_SERVERINFO_WIDGET_POSX);
$pos_y = $this->maniaControl->settingManager->getSetting($this, self::SETTING_SERVERINFO_WIDGET_POSY);
$width = $this->maniaControl->settingManager->getSetting($this, self::SETTING_SERVERINFO_WIDGET_WIDTH);
@@ -318,7 +348,7 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
/**
* @var Player $player
*/
- foreach($players as $player) {
+ foreach ($players as $player) {
if ($player->isSpectator) {
$spectatorCount++;
} else {
@@ -383,16 +413,16 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
}
/**
- * Handle on Begin Map
- *
- * @param Map $map
+ * Unload the plugin and its resources
*/
- public function handleOnBeginMap(Map $map) {
- // Display Map Widget
- if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_ACTIVATED)) {
- $this->displayMapWidget();
- }
+ public function unload() {
+ $this->closeWidget(self::MLID_CLOCKWIDGET);
+ $this->closeWidget(self::MLID_SERVERINFOWIDGET);
+ $this->closeWidget(self::MLID_MAPWIDGET);
$this->closeWidget(self::MLID_NEXTMAPWIDGET);
+ $this->maniaControl->callbackManager->unregisterCallbackListener($this);
+ $this->maniaControl->timerManager->unregisterTimerListenings($this);
+ unset($this->maniaControl);
}
/**
@@ -405,6 +435,19 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
$this->maniaControl->manialinkManager->sendManialink($emptyManialink);
}
+ /**
+ * Handle on Begin Map
+ *
+ * @param Map $map
+ */
+ public function handleOnBeginMap(Map $map) {
+ // Display Map Widget
+ if ($this->maniaControl->settingManager->getSetting($this, self::SETTING_MAP_WIDGET_ACTIVATED)) {
+ $this->displayMapWidget();
+ }
+ $this->closeWidget(self::MLID_NEXTMAPWIDGET);
+ }
+
/**
* Handle on End Map
*
@@ -543,49 +586,4 @@ class WidgetPlugin implements CallbackListener, TimerListener, Plugin {
$this->displayServerInfoWidget();
}
}
-
- /**
- * Get plugin id
- *
- * @return int
- */
- public static function getId() {
- return self::PLUGIN_ID;
- }
-
- /**
- * Get Plugin Name
- *
- * @return string
- */
- public static function getName() {
- return self::PLUGIN_NAME;
- }
-
- /**
- * Get Plugin Version
- *
- * @return float,,
- */
- public static function getVersion() {
- return self::PLUGIN_VERSION;
- }
-
- /**
- * Get Plugin Author
- *
- * @return string
- */
- public static function getAuthor() {
- return self::PLUGIN_AUTHOR;
- }
-
- /**
- * Get Plugin Description
- *
- * @return string
- */
- public static function getDescription() {
- return 'Plugin offers some Widgets';
- }
}
\ No newline at end of file