Multiple Features to improve ManiaControl usability (#234)

* ServerUIPropertiesMenu for Configurator to edit builtin UIProperties of MP

* fixed unregister-functions of CallbackManager

* Reducing menuItemHeight in Configurator to avoid overlapping of the menu items

* Fully rebuild the admins menu after a player rights changed

* Added function to FileUtil to improve realpath, so symbolic links can be resolved

* Fixed indentation

* Update FileUtil.php

Fixed error in case of an absolute path on Unix-like systems.

* New CallQueue which runs once inbetween the MC-loops

* Added important queued call to be executed earlier

* ErrorMethod made optional, as in some cases, there might be nothing to fail

* Clean up repository from unnecessary files

* Added easy installation script for DB on Unix-like systems

* Replaced deprecated is_real by is_float

* Add milliseconds with dot instead of double colon

* Resolved deprecated curly braces error

* gitignore all hidden files (except git and gitignore)

* Update MC-update-check-interval, so that a restart is not required

* Update gitignore to not ignore changes in MCTeam-Plugins

* Update gitignore again

* And another try

* fixed MasterAdmin //delrec, added personal /delrec-command with permission-setting

* Increase version number of local records plugin

* Add Permission to delete any record

* Reworked notifications of locals, removed private only, added private at rank

* Fix formatting

* Allow AuthenticationManager to store Plugin Permissions

* Method to check, if a named function call is already queued

* Added command disable feature

* Reset timer if DeltaTime updated, so it does not try to catch up missed timings

* Added private notification setting

* To reduce load of multiple records (especially in rounds), queue call chat notifications

* Added internal function to plugin manager to return plugin menu

* restore .idea codestyle files

* Update MC-Version number to 0.250
This commit is contained in:
axelalex2
2020-02-24 17:20:51 +01:00
committed by GitHub
parent 9252605be0
commit fa7ea9f4f3
18 changed files with 700 additions and 91 deletions

View File

@ -14,6 +14,7 @@ use ManiaControl\Logger;
use ManiaControl\ManiaControl;
use ManiaControl\Players\Player;
use ManiaControl\Players\PlayerManager;
use ManiaControl\Plugins\Plugin;
use ManiaControl\Settings\Setting;
/**
@ -133,8 +134,10 @@ class AuthenticationManager implements CallbackListener, EchoListener, Communica
return self::AUTH_NAME_ADMIN;
case self::AUTH_LEVEL_MODERATOR:
return self::AUTH_NAME_MODERATOR;
case self::AUTH_LEVEL_PLAYER:
return self::AUTH_NAME_PLAYER;
}
return self::AUTH_NAME_PLAYER;
return '-';
}
/**
@ -172,8 +175,10 @@ class AuthenticationManager implements CallbackListener, EchoListener, Communica
return self::AUTH_LEVEL_ADMIN;
case self::AUTH_NAME_MODERATOR:
return self::AUTH_LEVEL_MODERATOR;
case self::AUTH_NAME_PLAYER:
return self::AUTH_LEVEL_PLAYER;
}
return self::AUTH_LEVEL_PLAYER;
return -1;
}
/**
@ -420,7 +425,21 @@ class AuthenticationManager implements CallbackListener, EchoListener, Communica
*/
public function checkPermission(Player $player, $rightName) {
$right = $this->maniaControl->getSettingManager()->getSettingValue($this, $rightName);
return $this->checkRight($player, $this->getAuthLevel($right));
return self::checkRight($player, self::getAuthLevel($right));
}
/**
* Checks the permission by a right name
*
* @api
* @param Plugin $plugin
* @param Player $player
* @param $rightName
* @return bool
*/
public function checkPluginPermission(Plugin $plugin, Player $player, $rightName) {
$right = $this->maniaControl->getSettingManager()->getSettingValue($plugin, $rightName);
return self::checkRight($player, self::getAuthLevel($right));
}
/**
@ -429,9 +448,23 @@ class AuthenticationManager implements CallbackListener, EchoListener, Communica
* @api
* @param string $rightName
* @param int $authLevelNeeded
* @param string $authLevelsAllowed
*/
public function definePermissionLevel($rightName, $authLevelNeeded) {
$this->maniaControl->getSettingManager()->initSetting($this, $rightName, self::getPermissionLevelNameArray($authLevelNeeded));
public function definePermissionLevel($rightName, $authLevelNeeded, $authLevelsAllowed = self::AUTH_LEVEL_MODERATOR) {
$this->maniaControl->getSettingManager()->initSetting($this, $rightName, self::getPermissionLevelNameArray($authLevelNeeded, $authLevelsAllowed));
}
/**
* Define a Minimum Right Level needed for an Action
*
* @api
* @param Plugin $plugin
* @param string $rightName
* @param int $authLevelNeeded
* @param string $authLevelsAllowed
*/
public function definePluginPermissionLevel(Plugin $plugin, $rightName, $authLevelNeeded, $authLevelsAllowed = self::AUTH_LEVEL_MODERATOR) {
$this->maniaControl->getSettingManager()->initSetting($plugin, $rightName, self::getPermissionLevelNameArray($authLevelNeeded, $authLevelsAllowed));
}
/**
@ -439,19 +472,70 @@ class AuthenticationManager implements CallbackListener, EchoListener, Communica
*
* @api
* @param $authLevelNeeded
* @param $authLevelsAllowed
* @return array[]
*/
public static function getPermissionLevelNameArray($authLevelNeeded) {
switch ($authLevelNeeded) {
public static function getPermissionLevelNameArray($authLevelNeeded, $authLevelsAllowed = self::AUTH_LEVEL_MODERATOR) {
assert($authLevelNeeded >= $authLevelsAllowed);
switch ($authLevelsAllowed) {
case self::AUTH_LEVEL_PLAYER:
switch ($authLevelNeeded) {
case self::AUTH_LEVEL_PLAYER:
return array(self::AUTH_NAME_PLAYER, self::AUTH_NAME_MODERATOR, self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN);
case self::AUTH_LEVEL_MODERATOR:
return array(self::AUTH_NAME_MODERATOR, self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_PLAYER);
case self::AUTH_LEVEL_ADMIN:
return array(self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_PLAYER, self::AUTH_NAME_MODERATOR);
case self::AUTH_LEVEL_SUPERADMIN:
return array(self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_PLAYER, self::AUTH_NAME_MODERATOR, self::AUTH_NAME_ADMIN);
case self::AUTH_LEVEL_MASTERADMIN:
return array(self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_PLAYER, self::AUTH_NAME_MODERATOR, self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN);
}
break;
case self::AUTH_LEVEL_MODERATOR:
return array(self::AUTH_NAME_MODERATOR, self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN);
switch ($authLevelNeeded) {
case self::AUTH_LEVEL_MODERATOR:
return array(self::AUTH_NAME_MODERATOR, self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN);
case self::AUTH_LEVEL_ADMIN:
return array(self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_MODERATOR);
case self::AUTH_LEVEL_SUPERADMIN:
return array(self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_MODERATOR, self::AUTH_NAME_ADMIN);
case self::AUTH_LEVEL_MASTERADMIN:
return array(self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_MODERATOR, self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN);
}
break;
case self::AUTH_LEVEL_ADMIN:
return array(self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_MODERATOR);
switch ($authLevelNeeded) {
case self::AUTH_LEVEL_ADMIN:
return array(self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN);
case self::AUTH_LEVEL_SUPERADMIN:
return array(self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_ADMIN);
case self::AUTH_LEVEL_MASTERADMIN:
return array(self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN);
}
break;
case self::AUTH_LEVEL_SUPERADMIN:
return array(self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_MODERATOR, self::AUTH_NAME_ADMIN);
switch ($authLevelNeeded) {
case self::AUTH_LEVEL_SUPERADMIN:
return array(self::AUTH_NAME_SUPERADMIN, self::AUTH_NAME_MASTERADMIN);
case self::AUTH_LEVEL_MASTERADMIN:
return array(self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_SUPERADMIN);
}
break;
// just for completeness, should not be used this way
case self::AUTH_LEVEL_MASTERADMIN:
return array(self::AUTH_NAME_MASTERADMIN, self::AUTH_NAME_MODERATOR, self::AUTH_NAME_ADMIN, self::AUTH_NAME_SUPERADMIN);
switch ($authLevelNeeded) {
case self::AUTH_LEVEL_MASTERADMIN:
return array(self::AUTH_NAME_MASTERADMIN);
}
break;
}
return array("-");
}
}