Merge remote-tracking branch 'origin/master'

Conflicts:
	application/plugins/Donations.php
This commit is contained in:
Max Klaversma 2014-05-02 17:53:37 +02:00
commit fa5752d9ce
76 changed files with 5750 additions and 5533 deletions

213
.idea/codeStyleSettings.xml Normal file
View File

@ -0,0 +1,213 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
<option name="OTHER_INDENT_OPTIONS">
<value>
<option name="INDENT_SIZE" value="4" />
<option name="CONTINUATION_INDENT_SIZE" value="8" />
<option name="TAB_SIZE" value="4" />
<option name="USE_TAB_CHARACTER" value="true" />
<option name="SMART_TABS" value="false" />
<option name="LABEL_INDENT_SIZE" value="0" />
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
<option name="USE_RELATIVE_INDENTS" value="false" />
</value>
</option>
<PHPCodeStyleSettings>
<option name="ALIGN_PHPDOC_PARAM_NAMES" value="true" />
<option name="ALIGN_PHPDOC_COMMENTS" value="true" />
<option name="ALIGN_ASSIGNMENTS" value="true" />
<option name="PHPDOC_BLANK_LINE_BEFORE_TAGS" value="true" />
<option name="PHPDOC_KEEP_BLANK_LINES" value="false" />
<option name="LOWER_CASE_BOOLEAN_CONST" value="true" />
<option name="LOWER_CASE_NULL_CONST" value="true" />
<option name="KEEP_RPAREN_AND_LBRACE_ON_ONE_LINE" value="true" />
</PHPCodeStyleSettings>
<XML>
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
</XML>
<codeStyleSettings language="HTML">
<indentOptions>
<option name="USE_TAB_CHARACTER" value="true" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="PHP">
<option name="KEEP_LINE_BREAKS" value="false" />
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
<option name="BLANK_LINES_AFTER_PACKAGE" value="1" />
<option name="CLASS_BRACE_STYLE" value="1" />
<option name="METHOD_BRACE_STYLE" value="1" />
<option name="SPECIAL_ELSE_IF_TREATMENT" value="true" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
<indentOptions>
<option name="USE_TAB_CHARACTER" value="true" />
</indentOptions>
<arrangement>
<groups>
<group>
<type>GETTERS_AND_SETTERS</type>
<order>KEEP</order>
</group>
<group>
<type>DEPENDENT_METHODS</type>
<order>DEPTH_FIRST</order>
</group>
</groups>
<rules>
<rule>
<match>
<CONST />
</match>
</rule>
<rule>
<match>
<AND>
<FIELD />
<PUBLIC />
<STATIC />
</AND>
</match>
</rule>
<rule>
<match>
<AND>
<FIELD />
<PROTECTED />
<STATIC />
</AND>
</match>
</rule>
<rule>
<match>
<AND>
<FIELD />
<PRIVATE />
<STATIC />
</AND>
</match>
</rule>
<rule>
<match>
<AND>
<FIELD />
<PUBLIC />
</AND>
</match>
</rule>
<rule>
<match>
<AND>
<FIELD />
<PROTECTED />
</AND>
</match>
</rule>
<rule>
<match>
<AND>
<FIELD />
<PRIVATE />
</AND>
</match>
</rule>
<rule>
<match>
<CONSTRUCTOR />
</match>
</rule>
<rule>
<match>
<AND>
<METHOD />
<PUBLIC />
<STATIC />
</AND>
</match>
</rule>
<rule>
<match>
<AND>
<METHOD />
<PROTECTED />
<STATIC />
</AND>
</match>
</rule>
<rule>
<match>
<AND>
<METHOD />
<PRIVATE />
<STATIC />
</AND>
</match>
</rule>
<rule>
<match>
<AND>
<METHOD />
<PUBLIC />
</AND>
</match>
</rule>
<rule>
<match>
<AND>
<METHOD />
<PROTECTED />
</AND>
</match>
</rule>
<rule>
<match>
<AND>
<METHOD />
<PRIVATE />
</AND>
</match>
</rule>
<rule>
<match>
<TRAIT />
</match>
</rule>
<rule>
<match>
<INTERFACE />
</match>
</rule>
<rule>
<match>
<CLASS />
</match>
</rule>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="XML">
<indentOptions>
<option name="USE_TAB_CHARACTER" value="true" />
</indentOptions>
<arrangement>
<rules>
<rule>
<match>
<NAME>xmlns:.*</NAME>
</match>
</rule>
</rules>
</arrangement>
</codeStyleSettings>
</value>
</option>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</component>
</project>

7
.idea/encodings.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false">
<file url="PROJECT" charset="UTF-8" />
</component>
</project>

View File

@ -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();
@ -72,6 +70,7 @@ 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");

View File

@ -18,8 +18,8 @@ use ManiaControl\Players\PlayerManager;
/**
* Class managing Actions Menus
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
@ -71,28 +71,11 @@ class ActionsMenu implements CallbackListener, ManialinkPageAnswerListener {
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
*
@ -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
*
@ -314,4 +263,53 @@ 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);
}
}

View File

@ -21,8 +21,8 @@ use ManiaControl\Players\Player;
/**
* Widget Class listing Authorized Players
*
* @author kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class AdminLists implements ManialinkPageAnswerListener, CallbackListener {
@ -227,7 +227,7 @@ 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) {

View File

@ -2,15 +2,15 @@
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
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class AuthCommands implements CommandListener {
@ -28,9 +28,9 @@ class AuthCommands implements CommandListener {
$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.');
}
/**
@ -64,6 +64,17 @@ 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
*
@ -95,6 +106,17 @@ 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
*
@ -126,28 +148,6 @@ 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
*

View File

@ -11,8 +11,8 @@ use ManiaControl\Players\PlayerManager;
/**
* Class managing Authentication Levels
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class AuthenticationManager implements CallbackListener {
@ -53,6 +53,85 @@ class AuthenticationManager implements CallbackListener {
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_ONINIT, $this, 'handleOnInit');
}
/**
* Get Name of the Authentication Level from Level Int
*
* @param mixed $authLevelInt
* @return string
*/
public static function getAuthLevelName($authLevelInt) {
$authLevelInt = self::getAuthLevelInt($authLevelInt);
switch ($authLevelInt) {
case self::AUTH_LEVEL_MASTERADMIN:
return self::AUTH_NAME_MASTERADMIN;
case self::AUTH_LEVEL_SUPERADMIN:
return self::AUTH_NAME_SUPERADMIN;
case self::AUTH_LEVEL_ADMIN:
return self::AUTH_NAME_ADMIN;
case self::AUTH_LEVEL_MODERATOR:
return self::AUTH_NAME_MODERATOR;
}
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
*/
public static function getAuthLevelAbbreviation($authLevelInt) {
$authLevelInt = self::getAuthLevelInt($authLevelInt);
switch ($authLevelInt) {
case self::AUTH_LEVEL_MASTERADMIN:
return 'MA';
case self::AUTH_LEVEL_SUPERADMIN:
return 'SA';
case self::AUTH_LEVEL_ADMIN:
return 'AD';
case self::AUTH_LEVEL_MODERATOR:
return 'MOD';
}
return '';
}
/**
* Handle ManiaControl OnInit Callback
*/
@ -61,7 +140,7 @@ class AuthenticationManager implements CallbackListener {
}
/**
* Update MasterAdmins based on config
* Update MasterAdmins based on Config
*
* @return bool
*/
@ -124,8 +203,7 @@ class AuthenticationManager implements CallbackListener {
$mysqli = $this->maniaControl->database->mysqli;
if ($authLevel < 0) {
$query = "SELECT * FROM `" . PlayerManager::TABLE_PLAYERS . "` WHERE `authLevel` > 0 ORDER BY `authLevel` DESC;";
}
else {
} else {
$query = "SELECT * FROM `" . PlayerManager::TABLE_PLAYERS . "` WHERE `authLevel` = " . $authLevel . ";";
}
$result = $mysqli->query($query);
@ -197,17 +275,6 @@ class AuthenticationManager implements CallbackListener {
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
*
@ -220,6 +287,17 @@ class AuthenticationManager implements CallbackListener {
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
*
@ -229,83 +307,4 @@ class AuthenticationManager implements CallbackListener {
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
*/
public static function getAuthLevelName($authLevelInt) {
$authLevelInt = self::getAuthLevelInt($authLevelInt);
switch ($authLevelInt) {
case self::AUTH_LEVEL_MASTERADMIN:
return self::AUTH_NAME_MASTERADMIN;
case self::AUTH_LEVEL_SUPERADMIN:
return self::AUTH_NAME_SUPERADMIN;
case self::AUTH_LEVEL_ADMIN:
return self::AUTH_NAME_ADMIN;
case self::AUTH_LEVEL_MODERATOR:
return self::AUTH_NAME_MODERATOR;
}
return self::AUTH_NAME_PLAYER;
}
/**
* Get the Abbreviation of the Authentication Level from Level Int
*
* @param mixed $authLevelInt
* @return string
*/
public static function getAuthLevelAbbreviation($authLevelInt) {
$authLevelInt = self::getAuthLevelInt($authLevelInt);
switch ($authLevelInt) {
case self::AUTH_LEVEL_MASTERADMIN:
return 'MA';
case self::AUTH_LEVEL_SUPERADMIN:
return 'SA';
case self::AUTH_LEVEL_ADMIN:
return 'AD';
case self::AUTH_LEVEL_MODERATOR:
return 'MOD';
}
return '';
}
/**
* 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 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;
}
}

View File

@ -1,13 +1,14 @@
<?php
namespace ManiaControl\Bills;
use ManiaControl\Players\Player;
/**
* ManiaControl BillData Structure
*
* @author kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @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 Player $player
* @param int $amount
* @param string $pay
* @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;

View File

@ -11,8 +11,8 @@ use Maniaplanet\DedicatedServer\Structures\Bill;
/**
* ManiaControl Bill-Manager
*
* @author kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class BillManager implements CallbackListener {

View File

@ -5,8 +5,8 @@ namespace ManiaControl\Callbacks;
/**
* Interface for Callback Listener
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface CallbackListener {

View File

@ -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 <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class CallbackManager {
@ -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
*/
@ -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);
}
}
}

View File

@ -1,11 +1,12 @@
<?php
namespace ManiaControl\Callbacks;
//TODO method class for all the libxmlrpc get Methods, to fetch the callback asnyc
/**
* Callbacks Interface
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface Callbacks {

View File

@ -5,6 +5,13 @@ namespace ManiaControl\Callbacks;
use ManiaControl\ManiaControl;
/**
* Class managing & converting LibXmlRpc Callbacks
*
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class LibXmlRpcCallbackManager implements CallbackListener {
/*
* Private Properties
@ -15,6 +22,7 @@ class LibXmlRpcCallbackManager implements CallbackListener {
* Create a new LibXmlRpc Callbacks Instance
*
* @param ManiaControl $maniaControl
* @param CallbackManager $callbackManager
*/
public function __construct(ManiaControl $maniaControl, CallbackManager $callbackManager) {
$this->maniaControl = $maniaControl;
@ -24,10 +32,10 @@ class LibXmlRpcCallbackManager implements CallbackListener {
/**
* Handle Script Callbacks
*
* @param $name
* @param $data
* @param string $name
* @param array $data
*/
public function handleScriptCallbacks($name, $data) {
public function handleScriptCallbacks($name, array $data) {
switch ($name) {
case 'LibXmlRpc_BeginMatch':
$this->maniaControl->callbackManager->triggerCallback(Callbacks::BEGINMATCH, $data[0]);
@ -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]);
}

View File

@ -7,8 +7,8 @@ use ManiaControl\ManiaControl;
/**
* Class handling and parsing ShootMania Callbacks
*
* @author steeffeen
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ShootManiaCallbacks implements CallbackListener {
@ -29,6 +29,7 @@ class ShootManiaCallbacks implements CallbackListener {
* Create a new ShootMania Callbacks Instance
*
* @param ManiaControl $maniaControl
* @param CallbackManager $callbackManager
*/
public function __construct(ManiaControl $maniaControl, CallbackManager $callbackManager) {
$this->maniaControl = $maniaControl;
@ -42,8 +43,8 @@ class ShootManiaCallbacks implements CallbackListener {
/**
* Handle Script Callbacks
*
* @param $name
* @param $data
* @param string $name
* @param array $data
*/
public function handleScriptCallbacks($name, $data) {
switch ($name) {
@ -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);

View File

@ -5,8 +5,8 @@ namespace ManiaControl\Callbacks;
/**
* Interface for TimerListener
*
* @author kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface TimerListener {

View File

@ -7,8 +7,8 @@ use ManiaControl\ManiaControl;
/**
* Class for managing Timers
*
* @author kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @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 string $method
* @param float $time
* @param bool $oneTime
* @return bool
*/
public function registerTimerListening(TimerListener $listener, $method, $time, $oneTime = false) {
@ -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
*

View File

@ -2,14 +2,13 @@
namespace ManiaControl;
use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
use Maniaplanet\DedicatedServer\Xmlrpc\LoginUnknownException;
/**
* Chat Utility Class
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Chat {
@ -44,19 +43,16 @@ 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);
}
/**
@ -90,16 +86,19 @@ class Chat {
}
/**
* 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
*
@ -128,19 +140,6 @@ 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);
$this->sendError($message, $login);
}
/**
* Send an usage info message to the given login
*

View File

@ -5,8 +5,8 @@ namespace ManiaControl;
/**
* Utility Class offering Methods to convert and use ManiaPlanet Colors
*
* @author steeffeen
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
abstract class ColorUtil {

View File

@ -5,8 +5,8 @@ namespace ManiaControl;
/**
* Command Line Helper Class
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class CommandLineHelper {

View File

@ -5,8 +5,8 @@ namespace ManiaControl\Commands;
/**
* Interface for Command Listeners
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface CommandListener {

View File

@ -9,8 +9,8 @@ use ManiaControl\ManiaControl;
/**
* Class for handling Chat Commands
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class CommandManager implements CallbackListener {

View File

@ -7,18 +7,17 @@ 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
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class HelpManager implements CommandListener, CallbackListener {
@ -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.
*
@ -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
*

View File

@ -23,8 +23,8 @@ use ManiaControl\Players\Player;
/**
* Class managing ingame ManiaControl Configuration
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Configurator implements CallbackListener, CommandListener, ManialinkPageAnswerListener {
@ -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);
public function handleConfigCommand(array $callback, Player $player) {
if (!$this->maniaControl->authenticationManager->checkPermission($player, self::SETTING_PERMISSION_OPEN_CONFIGURATOR)) {
$this->maniaControl->authenticationManager->sendNotAllowed($player);
return;
}
/**
* 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]);
$this->showMenu($player);
}
/**
@ -177,73 +146,10 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
}
/**
* 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]);
}
/**
* 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
* Build Menu ManiaLink if necessary
*
* @param int $menuIdShown
* @internal param bool $forceBuild
* @param Player $player
* @return \FML\ManiaLink
*/
private function buildManialink($menuIdShown = 0, Player $player) {
@ -347,6 +253,112 @@ class Configurator implements CallbackListener, CommandListener, ManialinkPageAn
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');
}
}

View File

@ -8,8 +8,8 @@ use ManiaControl\Players\Player;
/**
* Interface for Configurator Menus
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface ConfiguratorMenu {

View File

@ -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,14 +16,13 @@ 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
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
@ -67,115 +67,16 @@ 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
* @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;
foreach ($settingClasses as $settingClass) {
if (!$pageFrame) {
$pageFrame = new Frame();
$frame->add($pageFrame);
$y = $height * 0.41;
$paging->addPage($pageFrame);
}
$classLabel = new Label_Text();
$settingClassArray = explode('\\', $settingClass);
$className = "";
for($i = 1; $i < count($settingClassArray); $i++){
$className .= $settingClassArray[$i] . " - ";
}
$className = substr($className, 0, -3);
$pageFrame->add($classLabel);
$classLabel->setHAlign($classLabel::LEFT);
$classLabel->setPosition($width * -0.45, $y);
$classLabel->setSize($width * 0.9, $settingHeight * 0.9);
$classLabel->setStyle($classLabel::STYLE_TextCardSmall);
$classLabel->setTextSize(2);
$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
*
@ -280,8 +181,7 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
$quad->setSubStyle(($setting->value ? $quad::SUBSTYLE_LvlGreen : $quad::SUBSTYLE_LvlRed));
$quad->setSize(4, 4);
$quad->setAction(self::ACTION_SETTING_BOOL . $setting->index);
}
else {
} else {
$entry = new Entry();
$settingFrame->add($entry);
$entry->setStyle(Label_Text::STYLE_TextValueSmall);
@ -303,6 +203,163 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
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;
foreach ($settingClasses as $settingClass) {
if (!$pageFrame) {
$pageFrame = new Frame();
$frame->add($pageFrame);
$y = $height * 0.41;
$paging->addPage($pageFrame);
}
$classLabel = new Label_Text();
$settingClassArray = explode('\\', $settingClass);
$className = "";
for ($i = 1; $i < count($settingClassArray); $i++) {
$className .= $settingClassArray[$i] . " - ";
}
$className = substr($className, 0, -3);
$pageFrame->add($classLabel);
$classLabel->setHAlign($classLabel::LEFT);
$classLabel->setPosition($width * -0.45, $y);
$classLabel->setSize($width * 0.9, $settingHeight * 0.9);
$classLabel->setStyle($classLabel::STYLE_TextCardSmall);
$classLabel->setTextSize(2);
$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;
}
/**
* Handle ManialinkPageAnswer Callback
*
* @param array $callback
*/
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);
}
/**
* Save the Config Data
*
@ -340,74 +397,11 @@ class ManiaControlSettings implements ConfiguratorMenu, CallbackListener {
}
/**
* Handle ManialinkPageAnswer Callback
* Get the Menu Title
*
* @param array $callback
* @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;
}
}

View File

@ -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 <mail@maniacontrol.com>
* @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
*
@ -155,10 +144,14 @@ 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();
}
}
/**
@ -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
*
@ -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) {
@ -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';
}
}

View File

@ -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 <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ServerSettings implements ConfiguratorMenu, CallbackListener {
@ -127,13 +127,6 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
return true;
}
/**
* @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
*/
public function getTitle() {
return 'Server Settings';
}
/**
* @see \ManiaControl\Configurators\ConfiguratorMenu::getMenu()
*/
@ -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()
*/
@ -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
*
@ -382,4 +375,11 @@ class ServerSettings implements ConfiguratorMenu, CallbackListener {
return true;
}
/**
* @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle()
*/
public function getTitle() {
return 'Server Settings';
}
}

View File

@ -8,8 +8,8 @@ use ManiaControl\ManiaControl;
/**
* Database Connection Class
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Database implements TimerListener {
@ -74,26 +74,6 @@ class Database implements TimerListener {
$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)
*
@ -109,7 +89,9 @@ class Database implements TimerListener {
// Try to connect
$result = $this->mysqli->select_db($dbName);
if ($result) return true;
if ($result) {
return true;
}
// Create database
$databaseQuery = "CREATE DATABASE ?;";
@ -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();
}
}
}

View File

@ -2,14 +2,14 @@
namespace ManiaControl\Database;
use ManiaControl\Settings\SettingManager;
use ManiaControl\ManiaControl;
use ManiaControl\Settings\SettingManager;
/**
* Database Migration Assistant
*
* @author steeffeen
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class MigrationHelper {

View File

@ -8,8 +8,8 @@ use ManiaControl\Update\UpdateManager;
/**
* Error and Exception Manager Class
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ErrorHandler {
@ -43,9 +43,9 @@ class ErrorHandler {
/**
* ManiaControl ExceptionHandler
* ManiaControl Shuts down after exception
*
* @param \Exception $ex
* @param bool $shutdown
*/
public function exceptionHandler(\Exception $ex, $shutdown = true) {
// Log exception
@ -64,16 +64,14 @@ class ErrorHandler {
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['ManiaControlVersion'] = $this->maniaControl->updateManager->getNightlyBuildDate();
}
else {
} else {
$error['UpdateChannel'] = '';
$error['ManiaControlVersion'] = ManiaControl::VERSION;
}
@ -86,8 +84,7 @@ class ErrorHandler {
if (!json_decode($success)) {
logMessage("Exception-Report failed!");
}
else {
} else {
logMessage("Exception successfully reported!");
}
}
@ -100,6 +97,28 @@ 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
*
@ -136,16 +155,14 @@ class ErrorHandler {
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['ManiaControlVersion'] = ManiaControl::VERSION . '#' . $this->maniaControl->updateManager->getNightlyBuildDate();
}
else {
} else {
$error['UpdateChannel'] = '';
$error['ManiaControlVersion'] = ManiaControl::VERSION;
}
@ -158,8 +175,7 @@ class ErrorHandler {
if (!json_decode($success)) {
logMessage("Error-Report failed!");
}
else {
} else {
logMessage("Error successfully reported!");
}
}
@ -180,15 +196,6 @@ 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
*
@ -229,29 +236,6 @@ 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
@ -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);
}
}

View File

@ -11,8 +11,8 @@ use ManiaControl\ManiaControl;
/**
* Asynchronous File Reader
*
* @author kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class AsynchronousFileReader {
@ -55,8 +55,9 @@ class AsynchronousFileReader {
* Load a remote file
*
* @param string $url
* @param $function
* @param callable $function
* @param string $contentType
* @param int $keepAlive
* @return bool
*/
public function loadFile($url, $function, $contentType = 'UTF-8', $keepAlive = 0) {
@ -118,10 +119,10 @@ class AsynchronousFileReader {
/**
* Send Data via POST Method
*
* @param $url
* @param $function
* @param $content
* @param string $compression
* @param string $url
* @param callable $function
* @param string $content
* @param bool $compression
* @param string $contentType
* @return bool
*/

View File

@ -1,13 +1,14 @@
<?php
namespace ManiaControl\Files;
use ManiaControl\ManiaControl;
/**
* Backup Utility Class
*
* @author ManiaControl Team
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
abstract class BackupUtil {
@ -25,7 +26,7 @@ abstract class BackupUtil {
$backupFolder = self::getBackupFolder();
$backupFileName = $backupFolder . 'backup_' . ManiaControl::VERSION . '_' . date('y-m-d') . '_' . time() . '.zip';
$backupZip = new \ZipArchive();
if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== TRUE) {
if ($backupZip->open($backupFileName, \ZipArchive::CREATE) !== true) {
trigger_error("Couldn't create Backup Zip!");
return false;
}
@ -39,29 +40,6 @@ abstract class BackupUtil {
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
*
@ -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;
}
}

View File

@ -2,14 +2,14 @@
namespace ManiaControl\Files;
use ManiaControl\ManiaControl;
use ManiaControl\Formatter;
use ManiaControl\ManiaControl;
/**
* Files Utility Class
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
abstract class FileUtil {
@ -100,6 +100,16 @@ 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
*
@ -114,16 +124,6 @@ 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
*

View File

@ -5,8 +5,8 @@ namespace ManiaControl;
/**
* Class offering Methods to format Texts and Values
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
abstract class Formatter {
@ -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('/(?<!\$)((?:\$\$)*)\$[hlp](?:\[.*?\])?(.*?)(?:\$[hlp]|(\$z)|$)/iu', '$1$2$3', $string);
}
/**
* Remove all Codes from the String
*
@ -124,16 +134,6 @@ abstract class Formatter {
return $string;
}
/**
* Remove Links from the String
*
* @param string $string
* @return string
*/
public static function stripLinks($string) {
return preg_replace('/(?<!\$)((?:\$\$)*)\$[hlp](?:\[.*?\])?(.*?)(?:\$[hlp]|(\$z)|$)/iu', '$1$2$3', $string);
}
/**
* Remove Colors from the String
*

View File

@ -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';
@ -37,8 +37,8 @@ require_once __DIR__ . '/Libs/curl-easy/autoload.php';
/**
* ManiaControl Server Controller for ManiaPlanet Server
*
* @author ManiaControl Team
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ManiaControl implements CommandListener, TimerListener {
@ -66,7 +66,6 @@ class ManiaControl implements CommandListener, TimerListener {
public $config = null;
public $configurator = null;
/**
*
* @var Connection $client
*/
public $client = null;
@ -137,6 +136,19 @@ class ManiaControl implements CommandListener, TimerListener {
$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
*/
@ -163,40 +175,6 @@ class ManiaControl implements CommandListener, TimerListener {
}
}
/**
* Print a message to console and log
*
* @param string $message
*/
public function log($message, $stripCodes = false) {
if ($stripCodes) {
$message = Formatter::stripCodes($message);
}
logMessage($message);
}
/**
* Get the Operating System on which ManiaControl is running
*
* @param string $compareOS
* @return string
*/
public function getOS($compareOS = null) {
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
if ($compareOS) {
// Return bool whether OS equals $compareOS
if ($compareOS == self::OS_WIN) {
return $windows;
}
return !$windows;
}
// Return OS
if ($windows) {
return self::OS_WIN;
}
return self::OS_UNIX;
}
/**
* Handle Version Command
*
@ -222,6 +200,60 @@ class ManiaControl implements CommandListener, TimerListener {
$this->restart("ManiaControl Restart requested by '{$player->login}'!");
}
/**
* 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();
}
/**
* Get the Operating System on which ManiaControl is running
*
* @param string $compareOS
* @return string
*/
public function getOS($compareOS = null) {
$windows = defined('PHP_WINDOWS_VERSION_MAJOR');
if ($compareOS) {
// Return bool whether OS equals $compareOS
if ($compareOS == self::OS_WIN) {
return $windows;
}
return !$windows;
}
// Return OS
if ($windows) {
return self::OS_WIN;
}
return self::OS_UNIX;
}
/**
* Handle //shutdown command
*
@ -265,8 +297,7 @@ class ManiaControl implements CommandListener, TimerListener {
$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());
}
}
@ -286,36 +317,10 @@ class ManiaControl implements CommandListener, TimerListener {
}
/**
* Restart ManiaControl
*
* @param string $message
* Collect Garbage
*/
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();
public function collectGarbage() {
gc_collect_cycles();
}
/**
@ -367,8 +372,7 @@ class ManiaControl implements CommandListener, TimerListener {
try {
// Manager callbacks
$this->callbackManager->manageCallbacks();
}
catch (TransportException $e) {
} catch (TransportException $e) {
$this->log("Connection interrupted!");
// TODO remove
if ($this->errorHandler) {
@ -393,13 +397,6 @@ class ManiaControl implements CommandListener, TimerListener {
$this->quit();
}
/**
* Collect Garbage
*/
public function collectGarbage() {
gc_collect_cycles();
}
/**
* Connect to ManiaPlanet server
*/
@ -411,8 +408,7 @@ class ManiaControl implements CommandListener, TimerListener {
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);
}
@ -424,8 +420,7 @@ class ManiaControl implements CommandListener, TimerListener {
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());
@ -446,8 +441,7 @@ class ManiaControl implements CommandListener, TimerListener {
try {
$scriptSettings = $this->client->getModeScriptSettings();
}
catch (NotInScriptModeException $e) {
} catch (NotInScriptModeException $e) {
return;
}
@ -458,8 +452,7 @@ class ManiaControl implements CommandListener, TimerListener {
$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());

View File

@ -8,8 +8,8 @@ use ManiaControl\Formatter;
* Mania Exchange Map Info Object
*
* @author Xymph
* @updated kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @updated kremsy <kremsy@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class MXMapInfo {
@ -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
*

View File

@ -29,8 +29,8 @@ use ManiaControl\Players\Player;
/**
* ManiaExchange List Widget Class
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @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
@ -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]);
}
}

View File

@ -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 <mail@maniacontrol.com>
* @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
*
@ -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
*
@ -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
*

View File

@ -12,8 +12,8 @@ use ManiaControl\Players\PlayerManager;
/**
* Class managing the Custom UI Settings
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @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
*

View File

@ -8,14 +8,14 @@ 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
* @author ManiaControl Team <mail@maniacontrol.com>
* @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
*
@ -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);
}
}

View File

@ -16,8 +16,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
/**
* Manialink Manager Class
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener {
@ -214,46 +214,13 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
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)
*
@ -273,6 +240,21 @@ 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
*
@ -297,13 +279,27 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener
// 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
*

View File

@ -5,8 +5,8 @@ namespace ManiaControl\Manialinks;
/**
* Interface for Manialink Page Answer Listeners
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
interface ManialinkPageAnswerListener {

View File

@ -16,8 +16,8 @@ use ManiaControl\ManiaControl;
/**
* Class managing default Control Styles
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class StyleManager {
@ -98,21 +98,23 @@ class StyleManager {
}
/**
* Get the default main window style
* Gets the Default Description Label
*
* @return string
* @return Label
*/
public function getDefaultMainWindowStyle() {
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAIN_WIDGET_DEFAULT_STYLE);
}
public function getDefaultDescriptionLabel() {
$width = $this->getListWidgetsWidth();
$height = $this->getListWidgetsHeight();
/**
* Get the default main window substyle
*
* @return string
*/
public function getDefaultMainWindowSubStyle() {
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_MAIN_WIDGET_DEFAULT_SUBSTYLE);
// Predefine Description Label
$descriptionLabel = new Label();
$descriptionLabel->setAlign(Control::LEFT, Control::TOP);
$descriptionLabel->setPosition(-$width / 2 + 10, -$height / 2 + 5);
$descriptionLabel->setSize($width * 0.7, 4);
$descriptionLabel->setTextSize(2);
$descriptionLabel->setVisible(false);
return $descriptionLabel;
}
/**
@ -133,27 +135,6 @@ class StyleManager {
return $this->maniaControl->settingManager->getSetting($this, self::SETTING_LIST_WIDGETS_HEIGHT);
}
/**
* Gets the Default Description Label
*
* @return Label
*/
public function getDefaultDescriptionLabel() {
$width = $this->getListWidgetsWidth();
$height = $this->getListWidgetsHeight();
// Predefine Description Label
$descriptionLabel = new Label();
$descriptionLabel->setAlign(Control::LEFT, Control::TOP);
$descriptionLabel->setPosition(-$width / 2 + 10, -$height / 2 + 5);
$descriptionLabel->setSize($width * 0.7, 4);
$descriptionLabel->setTextSize(2);
$descriptionLabel->setVisible(false);
return $descriptionLabel;
}
/**
* Builds the Default List Frame
*
@ -228,4 +209,22 @@ class StyleManager {
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);
}
}

View File

@ -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 <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Map {

View File

@ -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 <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class MapCommands implements CommandListener, ManialinkPageAnswerListener, CallbackListener {
@ -312,6 +312,11 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
}
}
/**
* Handle ManialinkPageAnswer Callback
*
* @param array $callback
*/
public function handleManialinkPageAnswer(array $callback) {
$actionId = $callback[1][2];
@ -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
*
@ -357,25 +386,13 @@ 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) {
@ -418,15 +435,17 @@ 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;
return ($a->index - $b->index);
});
if ($newest) {
@ -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);
}
}

View File

@ -2,7 +2,6 @@
namespace ManiaControl\Maps;
use MCTeam\CustomVotesPlugin;
use FML\Controls\Control;
use FML\Controls\Frame;
use FML\Controls\Gauge;
@ -25,13 +24,14 @@ 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
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class MapList implements ManialinkPageAnswerListener, CallbackListener {
@ -127,14 +127,12 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$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)) {
} 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 {
} 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();
@ -145,7 +143,9 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$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);
@ -204,8 +204,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$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);
$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
@ -214,7 +213,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$queuedMaps = $this->maniaControl->mapManager->mapQueue->getQueuedMapsRanking();
/**
*
* @var KarmaPlugin $karmaPlugin
*/
$karmaPlugin = $this->maniaControl->pluginManager->getPlugin(self::DEFAULT_KARMA_PLUGIN);
@ -227,7 +225,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$y = $height / 2 - 10;
$pageFrames = array();
/**
*
* @var Map $map
*/
$currentMap = $this->maniaControl->mapManager->getCurrentMap();
@ -312,7 +309,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$labels = $this->maniaControl->manialinkManager->labelLine($mapFrame, $array);
if (isset($labels[3])) {
/**
*
* @var Label $label
*/
$label = $labels[3];
@ -340,13 +336,11 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$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);
@ -403,8 +397,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$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);
@ -527,8 +520,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$buttLabel->setText('»');
$buttLabel->setTextColor('0f0');
$buttLabel->setTextSize(2);
}
else {
} else {
$buttLabel->setTextSize(1);
$buttLabel->setText('x');
$buttLabel->setTextColor('a00');
@ -560,17 +552,6 @@ 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
*
@ -602,8 +583,7 @@ 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;
@ -619,7 +599,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
break;
case self::ACTION_START_SWITCH_VOTE:
/**
*
* @var $votesPlugin CustomVotesPlugin
*/
$votesPlugin = $this->maniaControl->pluginManager->getPlugin(self::DEFAULT_CUSTOM_VOTE_PLUGIN);
@ -629,7 +608,6 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
$message = '$<' . $player->nickname . '$>$s started a vote to switch to $<' . $map->name . '$>!';
/**
*
* @var Map $map
*/
$votesPlugin->defineVote('switchmap', "Goto " . $map->name, true, $message);
@ -642,8 +620,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
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());
@ -670,6 +647,17 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
}
}
/**
* 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]);
}
}

View File

@ -22,8 +22,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\StartIndexOutOfBoundException;
/**
* Manager for Maps
*
* @author kremsy & steeffeen
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @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
*
@ -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
*
@ -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
}

View File

@ -14,8 +14,8 @@ use ManiaControl\Players\Player;
/**
* MapQueue Class
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class MapQueue implements CallbackListener, CommandListener {
@ -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
*
@ -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,9 +216,7 @@ 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;
}
@ -297,7 +295,7 @@ 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) {
@ -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;

View File

@ -7,8 +7,8 @@ use ManiaControl\Formatter;
/**
* Player Model Class
*
* @author kremsy & steeffeen
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Player {

View File

@ -21,8 +21,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\PlayerNotIgnoredException;
/**
* Player Actions Class
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PlayerActions {
@ -70,6 +70,49 @@ class PlayerActions {
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_FORCE_PLAYER_SPEC, AuthenticationManager::AUTH_LEVEL_MODERATOR);
}
/**
* Force a Player to a certain Team
*
* @param string $adminLogin
* @param string $targetLogin
* @param int $teamId
*/
public function forcePlayerToTeam($adminLogin, $targetLogin, $teamId) {
$admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
if (!$this->maniaControl->authenticationManager->checkPermission($admin, self::SETTING_PERMISSION_FORCE_PLAYER_TEAM)) {
$this->maniaControl->authenticationManager->sendNotAllowed($admin);
return;
}
$target = $this->maniaControl->playerManager->getPlayer($targetLogin);
if (!$target || !$admin) {
return;
}
if ($target->isSpectator) {
$this->forcePlayerToPlay($adminLogin, $targetLogin, true, false);
}
try {
$this->maniaControl->client->forcePlayerTeam($target->login, $teamId);
} catch (NotInTeamModeException $e) {
$this->forcePlayerToPlay($adminLogin, $targetLogin);
return;
}
$chatMessage = false;
$title = $this->maniaControl->authenticationManager->getAuthLevelName($admin->authLevel);
if ($teamId == self::TEAM_BLUE) {
$chatMessage = $title . ' $<' . $admin->nickname . '$> forced $<' . $target->nickname . '$> into the Blue-Team!';
} else if ($teamId == self::TEAM_RED) {
$chatMessage = $title . ' $<' . $admin->nickname . '$> forced $<' . $target->nickname . '$> into the Red-Team!';
}
if (!$chatMessage) {
return;
}
$this->maniaControl->chat->sendInformation($chatMessage);
$this->maniaControl->log($chatMessage, true);
}
/**
* Force a Player to Play
*
@ -114,49 +157,6 @@ class PlayerActions {
}
}
/**
* Force a Player to a certain Team
*
* @param string $adminLogin
* @param string $targetLogin
* @param int $teamId
*/
public function forcePlayerToTeam($adminLogin, $targetLogin, $teamId) {
$admin = $this->maniaControl->playerManager->getPlayer($adminLogin);
if (!$this->maniaControl->authenticationManager->checkPermission($admin, self::SETTING_PERMISSION_FORCE_PLAYER_TEAM)) {
$this->maniaControl->authenticationManager->sendNotAllowed($admin);
return;
}
$target = $this->maniaControl->playerManager->getPlayer($targetLogin);
if (!$target || !$admin) {
return;
}
if ($target->isSpectator) {
$this->forcePlayerToPlay($adminLogin, $targetLogin, true, false);
}
try {
$this->maniaControl->client->forcePlayerTeam($target->login, $teamId);
} catch(NotInTeamModeException $e) {
$this->forcePlayerToPlay($adminLogin, $targetLogin);
return;
}
$chatMessage = false;
$title = $this->maniaControl->authenticationManager->getAuthLevelName($admin->authLevel);
if ($teamId == self::TEAM_BLUE) {
$chatMessage = $title . ' $<' . $admin->nickname . '$> forced $<' . $target->nickname . '$> into the Blue-Team!';
} else if ($teamId == self::TEAM_RED) {
$chatMessage = $title . ' $<' . $admin->nickname . '$> forced $<' . $target->nickname . '$> into the Red-Team!';
}
if (!$chatMessage) {
return;
}
$this->maniaControl->chat->sendInformation($chatMessage);
$this->maniaControl->log($chatMessage, true);
}
/**
* Force a Player to Spectator
*
@ -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);
@ -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);

View File

@ -15,8 +15,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
/**
* Class offering various Admin Commands related to Players
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PlayerCommands implements CommandListener, ManialinkPageAnswerListener, CallbackListener {
@ -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;

View File

@ -8,8 +8,8 @@ use ManiaControl\ManiaControl;
/**
* Player Data Manager
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @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;
}
}

View File

@ -14,12 +14,13 @@ 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
* @author ManiaControl Team <mail@maniacontrol.com>
* @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);

View File

@ -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 <mail@maniacontrol.com>
* @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
*
@ -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
*
@ -765,6 +753,20 @@ class PlayerList implements ManialinkPageAnswerListener, CallbackListener, Timer
}
}
/**
* 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
*

View File

@ -14,8 +14,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\LoginUnknownException;
/**
* Class managing Players
*
* @author kremsy & steeffeen
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PlayerManager implements CallbackListener, TimerListener {
@ -141,6 +141,76 @@ class PlayerManager implements CallbackListener, TimerListener {
}
}
/**
* Add a player
*
* @param Player $player
* @return bool
*/
private function addPlayer(Player $player) {
$this->savePlayer($player);
$this->players[$player->login] = $player;
return true;
}
/**
* Save player in Database and fill up Object Properties
*
* @param Player $player
* @return bool
*/
private function savePlayer(Player &$player) {
$mysqli = $this->maniaControl->database->mysqli;
// Save player
$playerQuery = "INSERT INTO `" . self::TABLE_PLAYERS . "` (
`login`,
`nickname`,
`path`
) VALUES (
?, ?, ?
) ON DUPLICATE KEY UPDATE
`index` = LAST_INSERT_ID(`index`),
`nickname` = VALUES(`nickname`),
`path` = VALUES(`path`);";
$playerStatement = $mysqli->prepare($playerQuery);
if ($mysqli->error) {
trigger_error($mysqli->error);
return false;
}
$playerStatement->bind_param('sss', $player->login, $player->rawNickname, $player->path);
$playerStatement->execute();
if ($playerStatement->error) {
trigger_error($playerStatement->error);
$playerStatement->close();
return false;
}
$player->index = $playerStatement->insert_id;
$playerStatement->close();
// Get Player Auth Level from DB
$playerQuery = "SELECT `authLevel` FROM `" . self::TABLE_PLAYERS . "` WHERE `index` = ?;";
$playerStatement = $mysqli->prepare($playerQuery);
if ($mysqli->error) {
trigger_error($mysqli->error);
return false;
}
$playerStatement->bind_param('i', $player->index);
$playerStatement->execute();
if ($playerStatement->error) {
trigger_error($playerStatement->error);
$playerStatement->close();
return false;
}
$playerStatement->store_result();
$playerStatement->bind_result($player->authLevel);
$playerStatement->fetch();
$playerStatement->free_result();
$playerStatement->close();
return true;
}
/**
* Handle playerConnect callback
*
@ -188,6 +258,40 @@ class PlayerManager implements CallbackListener, TimerListener {
$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
*
* @param Player $player
* @return bool
*/
private function updatePlayedTime(Player $player) {
if (!$player) {
return false;
}
$playedTime = time() - $player->joinTime;
return $this->maniaControl->statisticManager->insertStat(self::STAT_SERVERTIME, $player, $this->maniaControl->server->index, $playedTime);
}
/**
* Update PlayerInfo
*
@ -237,6 +341,56 @@ class PlayerManager implements CallbackListener, TimerListener {
$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
@ -301,55 +455,6 @@ class PlayerManager implements CallbackListener, TimerListener {
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
*
* @param Player $player
* @return bool
*/
private function addPlayer(Player $player) {
$this->savePlayer($player);
$this->players[$player->login] = $player;
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
*
@ -387,112 +492,4 @@ class PlayerManager implements CallbackListener, TimerListener {
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
*
* @param Player $player
* @return bool
*/
private function savePlayer(Player &$player) {
$mysqli = $this->maniaControl->database->mysqli;
// Save player
$playerQuery = "INSERT INTO `" . self::TABLE_PLAYERS . "` (
`login`,
`nickname`,
`path`
) VALUES (
?, ?, ?
) ON DUPLICATE KEY UPDATE
`index` = LAST_INSERT_ID(`index`),
`nickname` = VALUES(`nickname`),
`path` = VALUES(`path`);";
$playerStatement = $mysqli->prepare($playerQuery);
if ($mysqli->error) {
trigger_error($mysqli->error);
return false;
}
$playerStatement->bind_param('sss', $player->login, $player->rawNickname, $player->path);
$playerStatement->execute();
if ($playerStatement->error) {
trigger_error($playerStatement->error);
$playerStatement->close();
return false;
}
$player->index = $playerStatement->insert_id;
$playerStatement->close();
// Get Player Auth Level from DB
$playerQuery = "SELECT `authLevel` FROM `" . self::TABLE_PLAYERS . "` WHERE `index` = ?;";
$playerStatement = $mysqli->prepare($playerQuery);
if ($mysqli->error) {
trigger_error($mysqli->error);
return false;
}
$playerStatement->bind_param('i', $player->index);
$playerStatement->execute();
if ($playerStatement->error) {
trigger_error($playerStatement->error);
$playerStatement->close();
return false;
}
$playerStatement->store_result();
$playerStatement->bind_result($player->authLevel);
$playerStatement->fetch();
$playerStatement->free_result();
$playerStatement->close();
return true;
}
/**
* Update total played time of the player
*
* @param Player $player
* @return bool
*/
private function updatePlayedTime(Player $player) {
if (!$player) {
return false;
}
$playedTime = time() - $player->joinTime;
return $this->maniaControl->statisticManager->insertStat(self::STAT_SERVERTIME, $player, $this->maniaControl->server->index, $playedTime);
}
}

View File

@ -7,8 +7,8 @@ use ManiaControl\ManiaControl;
/**
* Interface for ManiaControl Plugins
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @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();
}

View File

@ -21,8 +21,8 @@ use ManiaControl\Players\Player;
/**
* Configurator for enabling and disabling Plugins
*
* @author steeffeen
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PluginInstallMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAnswerListener {
@ -58,6 +58,7 @@ 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) {

View File

@ -3,16 +3,16 @@
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
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PluginManager {
@ -76,14 +76,64 @@ class PluginManager {
}
/**
* Check if the plugin is running
* Deactivate the plugin with the given class
*
* @param string $pluginClass
* @return bool
*/
public function isPluginActive($pluginClass) {
public function deactivatePlugin($pluginClass) {
$pluginClass = $this->getPluginClass($pluginClass);
return isset($this->activePlugins[$pluginClass]);
if (!$this->isPluginActive($pluginClass)) {
return false;
}
$plugin = $this->activePlugins[$pluginClass];
/**
* @var Plugin $plugin
*/
$plugin->unload();
unset($this->activePlugins[$pluginClass]);
if ($plugin instanceof CallbackListener) {
$this->maniaControl->callbackManager->unregisterCallbackListener($plugin);
$this->maniaControl->callbackManager->unregisterScriptCallbackListener($plugin);
}
if ($plugin instanceof CommandListener) {
$this->maniaControl->commandManager->unregisterCommandListener($plugin);
}
if ($plugin instanceof ManialinkPageAnswerListener) {
$this->maniaControl->manialinkManager->unregisterManialinkPageAnswerListener($plugin);
}
if ($plugin instanceof TimerListener) {
$this->maniaControl->timerManager->unregisterTimerListenings($plugin);
}
$this->savePluginStatus($pluginClass, false);
return true;
}
/**
* 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 $object
* @return string
*/
private static function getClass($object) {
if (is_object($object)) {
return get_class($object);
}
return (string)$object;
}
/**
@ -104,95 +154,46 @@ class PluginManager {
}
/**
* Add the class to array of loaded plugin classes
* Check if the plugin is running
*
* @param string $pluginClass
* @return bool
*/
public function addPluginClass($pluginClass) {
public function isPluginActive($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;
return isset($this->activePlugins[$pluginClass]);
}
/**
* Activate and start the plugin with the given name
* Save plugin status in database
*
* @param string $pluginClass
* @param string $adminLogin
* @param string $className
* @param bool $active
* @return bool
*/
public function activatePlugin($pluginClass, $adminLogin = null) {
if (!is_string($pluginClass)) {
private function savePluginStatus($className, $active) {
$mysqli = $this->maniaControl->database->mysqli;
$pluginStatusQuery = "INSERT INTO `" . self::TABLE_PLUGINS . "` (
`className`,
`active`
) VALUES (
?, ?
) ON DUPLICATE KEY UPDATE
`active` = VALUES(`active`);";
$pluginStatement = $mysqli->prepare($pluginStatusQuery);
if ($mysqli->error) {
trigger_error($mysqli->error);
return false;
}
if (!$this->isPluginClass($pluginClass)) {
$activeInt = ($active ? 1 : 0);
$pluginStatement->bind_param('si', $className, $activeInt);
$pluginStatement->execute();
if ($pluginStatement->error) {
trigger_error($pluginStatement->error);
$pluginStatement->close();
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
*/
public function deactivatePlugin($pluginClass) {
$pluginClass = $this->getPluginClass($pluginClass);
if (!$this->isPluginActive($pluginClass)) {
return false;
}
$plugin = $this->activePlugins[$pluginClass];
/**
*
* @var Plugin $plugin
*/
$plugin->unload();
unset($this->activePlugins[$pluginClass]);
if ($plugin instanceof CallbackListener) {
$this->maniaControl->callbackManager->unregisterCallbackListener($plugin);
$this->maniaControl->callbackManager->unregisterScriptCallbackListener($plugin);
}
if ($plugin instanceof CommandListener) {
$this->maniaControl->commandManager->unregisterCommandListener($plugin);
}
if ($plugin instanceof ManialinkPageAnswerListener) {
$this->maniaControl->manialinkManager->unregisterManialinkPageAnswerListener($plugin);
}
if ($plugin instanceof TimerListener) {
$this->maniaControl->timerManager->unregisterTimerListenings($plugin);
}
$this->savePluginStatus($pluginClass, false);
$pluginStatement->close();
return true;
}
@ -265,66 +266,21 @@ class PluginManager {
}
/**
* Returns a Plugin if it is activated
* Add the class to array of loaded plugin classes
*
* @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;
}
/**
* Save plugin status in database
*
* @param string $className
* @param bool $active
* @return bool
*/
private function savePluginStatus($className, $active) {
$mysqli = $this->maniaControl->database->mysqli;
$pluginStatusQuery = "INSERT INTO `" . self::TABLE_PLUGINS . "` (
`className`,
`active`
) VALUES (
?, ?
) ON DUPLICATE KEY UPDATE
`active` = VALUES(`active`);";
$pluginStatement = $mysqli->prepare($pluginStatusQuery);
if ($mysqli->error) {
trigger_error($mysqli->error);
public function addPluginClass($pluginClass) {
$pluginClass = $this->getPluginClass($pluginClass);
if (in_array($pluginClass, $this->pluginClasses)) {
return false;
}
$activeInt = ($active ? 1 : 0);
$pluginStatement->bind_param('si', $className, $activeInt);
$pluginStatement->execute();
if ($pluginStatement->error) {
trigger_error($pluginStatement->error);
$pluginStatement->close();
if (!$this->isPluginClass($pluginClass)) {
return false;
}
$pluginStatement->close();
array_push($this->pluginClasses, $pluginClass);
sort($this->pluginClasses);
return true;
}
@ -365,6 +321,74 @@ 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
*
@ -378,31 +402,4 @@ class PluginManager {
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;
}
}

View File

@ -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,8 +25,8 @@ use ManiaControl\Players\Player;
/**
* Configurator for enabling and disabling Plugins
*
* @author ManiaControl Team
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @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,6 +71,13 @@ 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()
*/
@ -356,41 +356,6 @@ class PluginMenu implements CallbackListener, ConfiguratorMenu, ManialinkPageAns
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);
}
}

View File

@ -5,8 +5,8 @@ namespace ManiaControl\Server;
/**
* Model Class holding the Server Config
*
* @author steeffeen
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Config {

View File

@ -11,8 +11,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\NotInScriptModeException;
/**
* Class managing Rankings
*
* @author kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class RankingManager implements CallbackListener {
@ -46,16 +46,6 @@ class RankingManager implements CallbackListener {
}
}
/**
* Get Rankings
*
* @return array
*/
public function getRankings() {
return $this->rankings;
}
/**
* Handle stats on callbacks (never call this Method)
*
@ -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)
*

View File

@ -4,15 +4,15 @@ 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
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class Server implements CallbackListener {
@ -26,7 +26,6 @@ class Server implements CallbackListener {
* Public Properties
*/
/**
*
* @var Config $config
*/
public $config = null;
@ -64,6 +63,33 @@ class Server implements CallbackListener {
$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
*/
@ -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];
@ -132,6 +157,36 @@ class Server implements CallbackListener {
$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
*/
@ -168,63 +223,6 @@ 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
*
@ -249,18 +247,6 @@ class Server implements CallbackListener {
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
*
@ -275,16 +261,15 @@ class Server implements CallbackListener {
}
/**
* Checks if ManiaControl has Access to the given Directory
* Fetch Game Data Directory
*
* @param string $directory
* @return bool
* @return string
*/
public function checkAccess($directory) {
if (!$directory) {
return false;
public function getDataDirectory() {
if ($this->dataDirectory == '') {
$this->dataDirectory = $this->maniaControl->client->gameDataDirectory();
}
return (is_dir($directory) && is_writable($directory));
return $this->dataDirectory;
}
/**
@ -296,43 +281,6 @@ class Server implements CallbackListener {
return $this->maniaControl->client->getMainServerPlayerInfo();
}
/**
* Fetch current Game Mode
*
* @param bool $stringValue
* @param int $parseValue
* @return int | string
*/
public function getGameMode($stringValue = false, $parseValue = null) {
if (is_int($parseValue)) {
$gameMode = $parseValue;
}
else {
$gameMode = $this->maniaControl->client->getGameMode();
}
if ($stringValue) {
switch ($gameMode) {
case 0:
return 'Script';
case 1:
return 'Rounds';
case 2:
return 'TimeAttack';
case 3:
return 'Team';
case 4:
return 'Laps';
case 5:
return 'Cup';
case 6:
return 'Stunts';
default:
return 'Unknown';
}
}
return $gameMode;
}
/**
* Retrieve Validation Replay for the given Player
*
@ -342,8 +290,7 @@ class Server implements CallbackListener {
public function getValidationReplay($login) {
try {
$replay = $this->maniaControl->client->getValidationReplay($login);
}
catch (Exception $e) {
} catch (Exception $e) {
// TODO temp added 19.04.2014
$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 330 Server.php" . $e->getMessage());
@ -374,8 +321,7 @@ class Server implements CallbackListener {
// Save ghost replay
try {
$this->maniaControl->client->saveBestGhostsReplay($login, $fileName);
}
catch (Exception $e) {
} catch (Exception $e) {
// TODO temp added 19.04.2014
$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 360 Server.php" . $e->getMessage());
@ -392,6 +338,55 @@ class Server implements CallbackListener {
return $ghostReplay;
}
/**
* Checks if ManiaControl has Access to the given Directory
*
* @param string $directory
* @return bool
*/
public function checkAccess($directory) {
if (!$directory) {
return false;
}
return (is_dir($directory) && is_writable($directory));
}
/**
* Fetch current Game Mode
*
* @param bool $stringValue
* @param int $parseValue
* @return int | string
*/
public function getGameMode($stringValue = false, $parseValue = null) {
if (is_int($parseValue)) {
$gameMode = $parseValue;
} else {
$gameMode = $this->maniaControl->client->getGameMode();
}
if ($stringValue) {
switch ($gameMode) {
case 0:
return 'Script';
case 1:
return 'Rounds';
case 2:
return 'TimeAttack';
case 3:
return 'Team';
case 4:
return 'Laps';
case 5:
return 'Cup';
case 6:
return 'Stunts';
default:
return 'Unknown';
}
}
return $gameMode;
}
/**
* Wait for the Server to have the given Status
*

View File

@ -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 <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class ServerCommands implements CallbackListener, CommandListener, ManialinkPageAnswerListener, TimerListener {
@ -190,9 +190,10 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
}
/**
* Breaks the current game
* Pause the current game
*
* @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,7 +201,7 @@ class ServerCommands implements CallbackListener, CommandListener, ManialinkPage
return;
}
try {
$this->maniaControl->client->sendModeScriptCommands(array('Command_ForceWarmUp' => True));
$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}'");
}
}

View File

@ -11,8 +11,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
/**
* Class reporting ManiaControl Usage for the Server
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class UsageReporter implements TimerListener {

View File

@ -10,8 +10,8 @@ use ManiaControl\Plugins\PluginManager;
/**
* Class managing Settings and Configurations
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class SettingManager implements CallbackListener {
@ -45,13 +45,6 @@ class SettingManager implements CallbackListener {
$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_AFTERINIT, $this, 'handleAfterInit');
}
/**
* Handle After Init Callback
*/
public function handleAfterInit() {
$this->deleteUnusedSettings();
}
/**
* Initialize necessary Database Tables
*
@ -81,93 +74,35 @@ class SettingManager implements CallbackListener {
}
/**
* 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
* Delete all unused Settings that haven't been initialized during the current Startup
*
* @param mixed $param
* @return string
* @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;
}
/**
@ -217,6 +152,69 @@ 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
*
@ -327,6 +325,33 @@ class SettingManager implements CallbackListener {
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
*
@ -441,6 +466,7 @@ class SettingManager implements CallbackListener {
/**
* Get all Setting Classes
*
* @param bool $hidePluginClasses
* @return array
*/
public function getSettingClasses($hidePluginClasses = false) {
@ -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;
}
}

View File

@ -24,8 +24,8 @@ use ManiaControl\Players\PlayerManager;
/**
* Simple Stats List Class
*
* @author kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @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();

View File

@ -11,8 +11,8 @@ use ManiaControl\Players\PlayerManager;
/**
* Statistic Collector Class
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class StatisticCollector implements CallbackListener {
@ -121,85 +121,6 @@ class StatisticCollector implements CallbackListener {
}
}
/**
* 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
*
@ -340,4 +261,85 @@ class StatisticCollector implements CallbackListener {
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;
}
}
}
}

View File

@ -8,8 +8,8 @@ use ManiaControl\Players\Player;
/**
* Statistic Manager Class
*
* @author steeffeen & kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class StatisticManager {
@ -59,81 +59,110 @@ 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;
$statId = $this->getStatId($statName);
$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();
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 . "';";
$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;
}
/**
* Store Stats Meta Data from the Database
*/
private function storeStatMetaData() {
$mysqli = $this->maniaControl->database->mysqli;
$query = "SELECT * FROM `" . self::TABLE_STATMETADATA . "`;";
$result = $mysqli->query($query);
if (!$result) {
trigger_error($mysqli->error);
return -1;
return;
}
$row = $result->fetch_object();
while ($row = $result->fetch_object()) {
$this->stats[$row->name] = $row;
}
$result->close();
return $row->value;
// TODO: own model class
//Define Special Stat Kill / Death Ratio
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_KD_RATIO;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_KD_RATIO] = $stat;
//Hits Per Hour
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_HITS_PH;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_HITS_PH] = $stat;
//Laser Accuracy
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_LASER_ACC;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_LASER_ACC] = $stat;
//Nucleus Accuracy
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_NUCLEUS_ACC;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_NUCLEUS_ACC] = $stat;
//Arrow Accuracy
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_ARROW_ACC;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_ARROW_ACC] = $stat;
//Rocket Accuracy
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_ROCKET_ACC;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_ROCKET_ACC] = $stat;
}
/**
@ -281,64 +310,6 @@ class StatisticManager {
return $statsArray;
}
/**
* Store Stats Meta Data from the Database
*/
private function storeStatMetaData() {
$mysqli = $this->maniaControl->database->mysqli;
$query = "SELECT * FROM `" . self::TABLE_STATMETADATA . "`;";
$result = $mysqli->query($query);
if (!$result) {
trigger_error($mysqli->error);
return;
}
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;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_KD_RATIO] = $stat;
//Hits Per Hour
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_HITS_PH;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_HITS_PH] = $stat;
//Laser Accuracy
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_LASER_ACC;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_LASER_ACC] = $stat;
//Nucleus Accuracy
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_NUCLEUS_ACC;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_NUCLEUS_ACC] = $stat;
//Arrow Accuracy
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_ARROW_ACC;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_ARROW_ACC] = $stat;
//Rocket Accuracy
$stat = new \stdClass();
$stat->name = self::SPECIAL_STAT_ROCKET_ACC;
$stat->type = self::STAT_TYPE_FLOAT;
$this->specialStats[self::SPECIAL_STAT_ROCKET_ACC] = $stat;
}
/**
* Return the Stat Id
*
@ -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;
}
}

View File

@ -5,8 +5,8 @@ namespace ManiaControl\Update;
/**
* Plugin Update Data Structure
*
* @author ManiaControl Team
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PluginUpdateData {
@ -41,7 +41,7 @@ class PluginUpdateData {
}
/**
* 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

View File

@ -6,20 +6,20 @@ 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
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class PluginUpdateManager implements CallbackListener, CommandListener, TimerListener {
@ -59,76 +59,6 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
$this->checkPluginsUpdate($player);
}
/**
* Handle //pluginsupdate command
*
* @param array $chatCallback
* @param Player $player
*/
public function handle_PluginsUpdate(array $chatCallback, Player $player) {
if (!$this->maniaControl->authenticationManager->checkPermission($player, UpdateManager::SETTING_PERMISSION_UPDATE)) {
$this->maniaControl->authenticationManager->sendNotAllowed($player);
return;
}
$this->performPluginsUpdate($player);
}
/**
* 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);
if (!$update && !$install) {
return;
}
$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 {
$pluginUpdateData = $this->getPluginUpdate($pluginClass);
if ($pluginUpdateData) {
$this->installPlugin($pluginUpdateData, $player, true);
}
else {
$message = 'Error loading Plugin Update Data!';
$this->maniaControl->chat->sendError($message, $player);
}
}
}
else {
$pluginId = substr($actionId, strlen(PluginInstallMenu::ACTION_PREFIX_INSTALLPLUGIN));
$url = ManiaControl::URL_WEBSERVICE . 'plugins?id=' . $pluginId;
$self = $this;
$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);
return;
}
$data = json_decode($data);
if (!isset($data[0])) {
$message = "Error loading Plugin Install Data! {$error}";
$self->maniaControl->chat->sendError($message, $player);
return;
}
$pluginUpdateData = new PluginUpdateData($data[0]);
$self->installPlugin($pluginUpdateData, $player);
});
}
}
/**
* Check if there are Outdated Plugins installed
*
@ -159,7 +89,6 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
foreach ($pluginClasses as $pluginClass) {
/**
*
* @var Plugin $pluginClass
*/
$pluginId = $pluginClass::getId();
@ -185,8 +114,7 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
$self->maniaControl->chat->sendSuccess($message, $player);
}
$self->maniaControl->log($message);
}
else {
} else {
$updatesCount = count($pluginUpdates);
$message = "Plugins Update Check completed: There are {$updatesCount} Updates available!";
if ($player) {
@ -197,6 +125,39 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
});
}
/**
* 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 Player $player
*/
public function handle_PluginsUpdate(array $chatCallback, Player $player) {
if (!$this->maniaControl->authenticationManager->checkPermission($player, UpdateManager::SETTING_PERMISSION_UPDATE)) {
$this->maniaControl->authenticationManager->sendNotAllowed($player);
return;
}
$this->performPluginsUpdate($player);
}
/**
* Perform an Update of all outdated Plugins
*
@ -233,51 +194,6 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
}
}
/**
* 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);
$pluginVersions = json_decode($dataJson);
if (!$pluginVersions || !isset($pluginVersions[0])) {
return false;
}
$pluginUpdateData = new PluginUpdateData($pluginVersions[0]);
$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
*
@ -297,7 +213,6 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
$pluginClasses = $this->maniaControl->pluginManager->getPluginClasses();
foreach ($pluginClasses as $pluginClass) {
/**
*
* @var Plugin $pluginClass
*/
$pluginId = $pluginClass::getId();
@ -322,6 +237,7 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
*
* @param PluginUpdateData $pluginUpdateData
* @param Player $player
* @param bool $update
*/
private function installPlugin(PluginUpdateData $pluginUpdateData, Player $player = null, $update = false) {
$self = $this;
@ -383,8 +299,7 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
$self->maniaControl->chat->sendError($message, $player);
}
$self->maniaControl->log($message);
}
else {
} else {
$message = "Successfully loaded fresh installed Plugin '{$pluginUpdateData->pluginName}'!";
if ($player) {
$self->maniaControl->chat->sendSuccess($message, $player);
@ -397,4 +312,82 @@ class PluginUpdateManager implements CallbackListener, CommandListener, TimerLis
}
});
}
/**
* 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);
if (!$update && !$install) {
return;
}
$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 {
$pluginUpdateData = $this->getPluginUpdate($pluginClass);
if ($pluginUpdateData) {
$this->installPlugin($pluginUpdateData, $player, true);
} else {
$message = 'Error loading Plugin Update Data!';
$this->maniaControl->chat->sendError($message, $player);
}
}
} else {
$pluginId = substr($actionId, strlen(PluginInstallMenu::ACTION_PREFIX_INSTALLPLUGIN));
$url = ManiaControl::URL_WEBSERVICE . 'plugins?id=' . $pluginId;
$self = $this;
$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);
return;
}
$data = json_decode($data);
if (!isset($data[0])) {
$message = "Error loading Plugin Install Data! {$error}";
$self->maniaControl->chat->sendError($message, $player);
return;
}
$pluginUpdateData = new PluginUpdateData($data[0]);
$self->installPlugin($pluginUpdateData, $player);
});
}
}
/**
* 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);
$pluginVersions = json_decode($dataJson);
if (!$pluginVersions || !isset($pluginVersions[0])) {
return false;
}
$pluginUpdateData = new PluginUpdateData($pluginVersions[0]);
$pluginVersion = $pluginClass::getVersion();
if ($pluginUpdateData->isNewerThan($pluginVersion)) {
return $pluginUpdateData;
}
return false;
}
}

View File

@ -5,8 +5,8 @@ namespace ManiaControl\Update;
/**
* Update Data Structure
*
* @author ManiaControl Team
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class UpdateData {

View File

@ -6,17 +6,17 @@ 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
* @author ManiaControl Team <mail@maniacontrol.com>
* @copyright 2014 ManiaControl Team
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
*/
class UpdateManager implements CallbackListener, CommandListener, TimerListener {
@ -44,7 +44,6 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
*/
private $maniaControl = null;
/**
*
* @var UpdateData $coreUpdateData
*/
private $coreUpdateData = null;
@ -83,13 +82,6 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
$this->pluginUpdateManager = new PluginUpdateManager($maniaControl);
}
/**
* Start an Update Check
*/
public function checkUpdate() {
$this->checkCoreUpdateAsync(array($this, 'handleUpdateCheck'));
}
/**
* Perform Hourly Update Check
*
@ -104,6 +96,56 @@ 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
*
@ -122,8 +164,7 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
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);
@ -153,6 +194,34 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
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
*
@ -174,46 +243,6 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
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
*/
@ -235,138 +264,6 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
$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
*
@ -450,28 +347,125 @@ class UpdateManager implements CallbackListener, CommandListener, TimerListener
}
/**
* Check if ManiaControl is running the Nightly Update Channel
* Set the Build Date of the local Nightly Build Version
*
* @param string $updateChannel
* @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
* Handle ManiaControl PlayerJoined callback
*
* @return string
* @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);
});
}
}

View File

@ -11,8 +11,8 @@ use Maniaplanet\DedicatedServer\Xmlrpc\Exception;
/**
* ManiaControl Chat-Message Plugin
*
* @author kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author kremsy <kremsy@maniacontrol.com>
* @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
*
@ -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...";
}
}

File diff suppressed because it is too large Load Diff

View File

@ -24,8 +24,8 @@ use ManiaControl\Plugins\Plugin;
/**
* ManiaControl Widget Plugin
*
* @author steeffeen and kremsy
* @copyright ManiaControl Copyright © 2014 ManiaControl Team
* @author ManiaControl Team <mail@maniacontrol.com>
* @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);
@ -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';
}
}