proper use of 'remove' and 'erase' map
- added auth level for 'erase' actions
This commit is contained in:
parent
d5cfa925b2
commit
2cca641d2e
@ -170,7 +170,7 @@ class DirectoryBrowser implements ManialinkPageAnswerListener {
|
|||||||
$pageFrame->add($mapFrame);
|
$pageFrame->add($mapFrame);
|
||||||
$mapFrame->setY($posY);
|
$mapFrame->setY($posY);
|
||||||
|
|
||||||
if ($index % 2 !== 0) {
|
if ($index % 2 === 0) {
|
||||||
// Striped background line
|
// Striped background line
|
||||||
$lineQuad = new Quad_BgsPlayerCard();
|
$lineQuad = new Quad_BgsPlayerCard();
|
||||||
$mapFrame->add($lineQuad);
|
$mapFrame->add($lineQuad);
|
||||||
@ -195,9 +195,8 @@ class DirectoryBrowser implements ManialinkPageAnswerListener {
|
|||||||
$nameLabel->setAction($folderAction);
|
$nameLabel->setAction($folderAction);
|
||||||
} else {
|
} else {
|
||||||
// File
|
// File
|
||||||
|
|
||||||
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_ADD_MAP)) {
|
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_ADD_MAP)) {
|
||||||
// Add file button
|
// 'Add' button
|
||||||
$addButton = new Label_Button();
|
$addButton = new Label_Button();
|
||||||
$mapFrame->add($addButton);
|
$mapFrame->add($addButton);
|
||||||
$addButton->setPosition($width / 2 - 9, 0, 0.2)
|
$addButton->setPosition($width / 2 - 9, 0, 0.2)
|
||||||
@ -207,8 +206,8 @@ class DirectoryBrowser implements ManialinkPageAnswerListener {
|
|||||||
->setAction(self::ACTION_ADD_FILE);
|
->setAction(self::ACTION_ADD_FILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_REMOVE_MAP)) {
|
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_ERASE_MAP)) {
|
||||||
// Erase file button
|
// 'Erase' button
|
||||||
$eraseButton = new Label_Button();
|
$eraseButton = new Label_Button();
|
||||||
$mapFrame->add($eraseButton);
|
$mapFrame->add($eraseButton);
|
||||||
$eraseButton->setPosition($width / 2 - 9, 0, 0.2)
|
$eraseButton->setPosition($width / 2 - 9, 0, 0.2)
|
||||||
|
@ -23,7 +23,6 @@ use Maniaplanet\DedicatedServer\Xmlrpc\FaultException;
|
|||||||
* @copyright 2014 ManiaControl Team
|
* @copyright 2014 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
// TODO: dedicated commands for remove map and erase map
|
|
||||||
class MapCommands implements CommandListener, ManialinkPageAnswerListener, CallbackListener {
|
class MapCommands implements CommandListener, ManialinkPageAnswerListener, CallbackListener {
|
||||||
/*
|
/*
|
||||||
* Constants
|
* Constants
|
||||||
@ -53,7 +52,8 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
$this->maniaControl->commandManager->registerCommandListener(array('restartmap', 'resmap', 'res'), $this, 'command_RestartMap', true, 'Restarts the current map.');
|
$this->maniaControl->commandManager->registerCommandListener(array('restartmap', 'resmap', 'res'), $this, 'command_RestartMap', true, 'Restarts the current map.');
|
||||||
$this->maniaControl->commandManager->registerCommandListener(array('replaymap', 'replay'), $this, 'command_ReplayMap', true, 'Replays the current map (after the end of the map).');
|
$this->maniaControl->commandManager->registerCommandListener(array('replaymap', 'replay'), $this, 'command_ReplayMap', true, 'Replays the current map (after the end of the map).');
|
||||||
$this->maniaControl->commandManager->registerCommandListener(array('addmap', 'add'), $this, 'command_AddMap', true, 'Adds map from ManiaExchange.');
|
$this->maniaControl->commandManager->registerCommandListener(array('addmap', 'add'), $this, 'command_AddMap', true, 'Adds map from ManiaExchange.');
|
||||||
$this->maniaControl->commandManager->registerCommandListener(array('removemap', 'removethis', 'erasemap', 'erasethis'), $this, 'command_RemoveMap', true, 'Removes the current map.');
|
$this->maniaControl->commandManager->registerCommandListener(array('removemap', 'removethis'), $this, 'command_RemoveMap', true, 'Removes the current map.');
|
||||||
|
$this->maniaControl->commandManager->registerCommandListener(array('erasemap', 'erasethis'), $this, 'command_EraseMap', true, 'Erases the current map.');
|
||||||
$this->maniaControl->commandManager->registerCommandListener(array('shufflemaps', 'shuffle'), $this, 'command_ShuffleMaps', true, 'Shuffles the maplist.');
|
$this->maniaControl->commandManager->registerCommandListener(array('shufflemaps', 'shuffle'), $this, 'command_ShuffleMaps', true, 'Shuffles the maplist.');
|
||||||
$this->maniaControl->commandManager->registerCommandListener(array('writemaplist', 'wml'), $this, 'command_WriteMapList', true, 'Writes the current maplist to a file.');
|
$this->maniaControl->commandManager->registerCommandListener(array('writemaplist', 'wml'), $this, 'command_WriteMapList', true, 'Writes the current maplist to a file.');
|
||||||
$this->maniaControl->commandManager->registerCommandListener(array('readmaplist', 'rml'), $this, 'command_ReadMapList', true, 'Loads a maplist into the server.');
|
$this->maniaControl->commandManager->registerCommandListener(array('readmaplist', 'rml'), $this, 'command_ReadMapList', true, 'Loads a maplist into the server.');
|
||||||
@ -124,7 +124,7 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle removemap command
|
* Handle //removemap command
|
||||||
*
|
*
|
||||||
* @param array $chatCallback
|
* @param array $chatCallback
|
||||||
* @param Player $player
|
* @param Player $player
|
||||||
@ -141,10 +141,32 @@ class MapCommands implements CommandListener, ManialinkPageAnswerListener, Callb
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//RemoveMap
|
// Remove map
|
||||||
$this->maniaControl->mapManager->removeMap($player, $map->uid);
|
$this->maniaControl->mapManager->removeMap($player, $map->uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle //erasemap command
|
||||||
|
*
|
||||||
|
* @param array $chatCallback
|
||||||
|
* @param Player $player
|
||||||
|
*/
|
||||||
|
public function command_EraseMap(array $chatCallback, Player $player) {
|
||||||
|
if (!$this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_ERASE_MAP)) {
|
||||||
|
$this->maniaControl->authenticationManager->sendNotAllowed($player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Get map
|
||||||
|
$map = $this->maniaControl->mapManager->getCurrentMap();
|
||||||
|
if (!$map) {
|
||||||
|
$this->maniaControl->chat->sendError("Couldn't erase map.", $player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Erase map
|
||||||
|
$this->maniaControl->mapManager->removeMap($player, $map->uid, true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle shufflemaps command
|
* Handle shufflemaps command
|
||||||
*
|
*
|
||||||
|
@ -41,7 +41,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
* Constants
|
* Constants
|
||||||
*/
|
*/
|
||||||
const ACTION_UPDATE_MAP = 'MapList.UpdateMap';
|
const ACTION_UPDATE_MAP = 'MapList.UpdateMap';
|
||||||
const ACTION_ERASE_MAP = 'MapList.EraseMap';
|
const ACTION_REMOVE_MAP = 'MapList.RemoveMap';
|
||||||
const ACTION_SWITCH_MAP = 'MapList.SwitchMap';
|
const ACTION_SWITCH_MAP = 'MapList.SwitchMap';
|
||||||
const ACTION_START_SWITCH_VOTE = 'MapList.StartMapSwitchVote';
|
const ACTION_START_SWITCH_VOTE = 'MapList.StartMapSwitchVote';
|
||||||
const ACTION_QUEUED_MAP = 'MapList.QueueMap';
|
const ACTION_QUEUED_MAP = 'MapList.QueueMap';
|
||||||
@ -366,24 +366,24 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_REMOVE_MAP)) {
|
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_REMOVE_MAP)) {
|
||||||
// erase map quad
|
// remove map button
|
||||||
$eraseLabel = new Label_Button();
|
$removeButton = new Label_Button();
|
||||||
$mapFrame->add($eraseLabel);
|
$mapFrame->add($removeButton);
|
||||||
$eraseLabel->setX($width / 2 - 5);
|
$removeButton->setX($width / 2 - 5);
|
||||||
$eraseLabel->setZ(0.2);
|
$removeButton->setZ(0.2);
|
||||||
$eraseLabel->setSize(3, 3);
|
$removeButton->setSize(3, 3);
|
||||||
$eraseLabel->setTextSize(1);
|
$removeButton->setTextSize(1);
|
||||||
$eraseLabel->setText('x');
|
$removeButton->setText('x');
|
||||||
$eraseLabel->setTextColor('a00');
|
$removeButton->setTextColor('a00');
|
||||||
|
|
||||||
$confirmFrame = $this->buildConfirmFrame($maniaLink, $posY, $map->uid, true);
|
$confirmFrame = $this->buildConfirmFrame($maniaLink, $posY, $map->uid, true);
|
||||||
$eraseLabel->addToggleFeature($confirmFrame);
|
$removeButton->addToggleFeature($confirmFrame);
|
||||||
$description = 'Remove Map: $<' . $map->name . '$>';
|
$description = 'Remove Map: $<' . $map->name . '$>';
|
||||||
$eraseLabel->addTooltipLabelFeature($descriptionLabel, $description);
|
$removeButton->addTooltipLabelFeature($descriptionLabel, $description);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_ADD_MAP)) {
|
if ($this->maniaControl->authenticationManager->checkPermission($player, MapManager::SETTING_PERMISSION_ADD_MAP)) {
|
||||||
// Switch to map
|
// Switch to button
|
||||||
$switchLabel = new Label_Button();
|
$switchLabel = new Label_Button();
|
||||||
$mapFrame->add($switchLabel);
|
$mapFrame->add($switchLabel);
|
||||||
$switchLabel->setX($width / 2 - 9);
|
$switchLabel->setX($width / 2 - 9);
|
||||||
@ -513,10 +513,10 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
* @param ManiaLink $maniaLink
|
* @param ManiaLink $maniaLink
|
||||||
* @param float $posY
|
* @param float $posY
|
||||||
* @param bool $mapUid
|
* @param bool $mapUid
|
||||||
* @param bool $erase
|
* @param bool $remove
|
||||||
* @return Frame
|
* @return Frame
|
||||||
*/
|
*/
|
||||||
public function buildConfirmFrame(Manialink $maniaLink, $posY, $mapUid, $erase = false) {
|
public function buildConfirmFrame(Manialink $maniaLink, $posY, $mapUid, $remove = false) {
|
||||||
// TODO: get rid of the confirm frame to decrease xml size & network usage
|
// TODO: get rid of the confirm frame to decrease xml size & network usage
|
||||||
// SUGGESTION: just send them as own manialink again on clicking?
|
// SUGGESTION: just send them as own manialink again on clicking?
|
||||||
|
|
||||||
@ -551,16 +551,16 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$buttLabel->setPosition(3.2, 0.4, 0.2);
|
$buttLabel->setPosition(3.2, 0.4, 0.2);
|
||||||
$buttLabel->setSize(3, 3);
|
$buttLabel->setSize(3, 3);
|
||||||
|
|
||||||
if (!$erase) {
|
if ($remove) {
|
||||||
$quad->setAction(self::ACTION_SWITCH_MAP . '.' . $mapUid);
|
|
||||||
$buttLabel->setText('»');
|
|
||||||
$buttLabel->setTextColor('0f0');
|
|
||||||
$buttLabel->setTextSize(2);
|
|
||||||
} else {
|
|
||||||
$buttLabel->setTextSize(1);
|
$buttLabel->setTextSize(1);
|
||||||
$buttLabel->setText('x');
|
|
||||||
$buttLabel->setTextColor('a00');
|
$buttLabel->setTextColor('a00');
|
||||||
$quad->setAction(self::ACTION_ERASE_MAP . '.' . $mapUid);
|
$buttLabel->setText('x');
|
||||||
|
$quad->setAction(self::ACTION_REMOVE_MAP . '.' . $mapUid);
|
||||||
|
} else {
|
||||||
|
$buttLabel->setTextSize(2);
|
||||||
|
$buttLabel->setTextColor('0f0');
|
||||||
|
$buttLabel->setText('»');
|
||||||
|
$quad->setAction(self::ACTION_SWITCH_MAP . '.' . $mapUid);
|
||||||
}
|
}
|
||||||
return $confirmFrame;
|
return $confirmFrame;
|
||||||
}
|
}
|
||||||
@ -611,7 +611,7 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
$this->maniaControl->mapManager->updateMap($player, $mapUid);
|
$this->maniaControl->mapManager->updateMap($player, $mapUid);
|
||||||
$this->showMapList($player);
|
$this->showMapList($player);
|
||||||
break;
|
break;
|
||||||
case self::ACTION_ERASE_MAP:
|
case self::ACTION_REMOVE_MAP:
|
||||||
$this->maniaControl->mapManager->removeMap($player, $mapUid);
|
$this->maniaControl->mapManager->removeMap($player, $mapUid);
|
||||||
break;
|
break;
|
||||||
case self::ACTION_SWITCH_MAP:
|
case self::ACTION_SWITCH_MAP:
|
||||||
@ -639,7 +639,8 @@ class MapList implements ManialinkPageAnswerListener, CallbackListener {
|
|||||||
|
|
||||||
$message = $player->getEscapedNickname() . '$s started a vote to switch to ' . $map->getEscapedName() . '!';
|
$message = $player->getEscapedNickname() . '$s started a vote to switch to ' . $map->getEscapedName() . '!';
|
||||||
|
|
||||||
$votesPlugin->defineVote('switchmap', "Goto " . $map->name, true, $message)->setStopCallback(Callbacks::ENDMAP);
|
$votesPlugin->defineVote('switchmap', "Goto " . $map->name, true, $message)
|
||||||
|
->setStopCallback(Callbacks::ENDMAP);
|
||||||
|
|
||||||
$votesPlugin->startVote($player, 'switchmap', function ($result) use (&$votesPlugin, &$map) {
|
$votesPlugin->startVote($player, 'switchmap', function ($result) use (&$votesPlugin, &$map) {
|
||||||
$votesPlugin->undefineVote('switchmap');
|
$votesPlugin->undefineVote('switchmap');
|
||||||
|
@ -40,6 +40,7 @@ class MapManager implements CallbackListener {
|
|||||||
const CB_KARMA_UPDATED = 'MapManager.KarmaUpdated';
|
const CB_KARMA_UPDATED = 'MapManager.KarmaUpdated';
|
||||||
const SETTING_PERMISSION_ADD_MAP = 'Add Maps';
|
const SETTING_PERMISSION_ADD_MAP = 'Add Maps';
|
||||||
const SETTING_PERMISSION_REMOVE_MAP = 'Remove Maps';
|
const SETTING_PERMISSION_REMOVE_MAP = 'Remove Maps';
|
||||||
|
const SETTING_PERMISSION_ERASE_MAP = 'Erase Maps';
|
||||||
const SETTING_PERMISSION_SHUFFLE_MAPS = 'Shuffle Maps';
|
const SETTING_PERMISSION_SHUFFLE_MAPS = 'Shuffle Maps';
|
||||||
const SETTING_PERMISSION_CHECK_UPDATE = 'Check Map Update';
|
const SETTING_PERMISSION_CHECK_UPDATE = 'Check Map Update';
|
||||||
const SETTING_PERMISSION_SKIP_MAP = 'Skip Map';
|
const SETTING_PERMISSION_SKIP_MAP = 'Skip Map';
|
||||||
@ -99,6 +100,7 @@ class MapManager implements CallbackListener {
|
|||||||
// Define Rights
|
// Define Rights
|
||||||
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_ADD_MAP, AuthenticationManager::AUTH_LEVEL_ADMIN);
|
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_ADD_MAP, AuthenticationManager::AUTH_LEVEL_ADMIN);
|
||||||
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_REMOVE_MAP, AuthenticationManager::AUTH_LEVEL_ADMIN);
|
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_REMOVE_MAP, AuthenticationManager::AUTH_LEVEL_ADMIN);
|
||||||
|
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_ERASE_MAP, AuthenticationManager::AUTH_LEVEL_SUPERADMIN);
|
||||||
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_SHUFFLE_MAPS, AuthenticationManager::AUTH_LEVEL_ADMIN);
|
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_SHUFFLE_MAPS, AuthenticationManager::AUTH_LEVEL_ADMIN);
|
||||||
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_CHECK_UPDATE, AuthenticationManager::AUTH_LEVEL_MODERATOR);
|
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_CHECK_UPDATE, AuthenticationManager::AUTH_LEVEL_MODERATOR);
|
||||||
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_SKIP_MAP, AuthenticationManager::AUTH_LEVEL_MODERATOR);
|
$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_SKIP_MAP, AuthenticationManager::AUTH_LEVEL_MODERATOR);
|
||||||
@ -222,18 +224,22 @@ class MapManager implements CallbackListener {
|
|||||||
if ($eraseFile) {
|
if ($eraseFile) {
|
||||||
// Check if ManiaControl can even write to the maps dir
|
// Check if ManiaControl can even write to the maps dir
|
||||||
$mapDir = $this->maniaControl->client->getMapsDirectory();
|
$mapDir = $this->maniaControl->client->getMapsDirectory();
|
||||||
|
if ($this->maniaControl->server->checkAccess($mapDir)) {
|
||||||
// Delete map file
|
// Delete map file
|
||||||
if (!@unlink($mapDir . $map->fileName)) {
|
if (!@unlink($mapDir . $map->fileName)) {
|
||||||
trigger_error("Couldn't remove Map '{$mapDir}{$map->fileName}'.");
|
$this->maniaControl->chat->sendError("Couldn't erase the map file.", $admin);
|
||||||
$this->maniaControl->chat->sendError("ManiaControl couldn't remove the MapFile.", $admin);
|
$eraseFile = false;
|
||||||
return;
|
}
|
||||||
|
} else {
|
||||||
|
$this->maniaControl->chat->sendError("Couldn't erase the map file (no access).", $admin);
|
||||||
|
$eraseFile = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show Message
|
// Show Message
|
||||||
if ($message) {
|
if ($message) {
|
||||||
$message = $admin->getEscapedNickname() . ' removed ' . $map->getEscapedName() . '!';
|
$action = ($eraseFile ? 'erased' : 'removed');
|
||||||
|
$message = $admin->getEscapedNickname() . ' ' . $action . ' ' . $map->getEscapedName() . '!';
|
||||||
$this->maniaControl->chat->sendSuccess($message);
|
$this->maniaControl->chat->sendSuccess($message);
|
||||||
$this->maniaControl->log($message, true);
|
$this->maniaControl->log($message, true);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user