script settings with fml checkbox
This commit is contained in:
		| @@ -7,12 +7,12 @@ use FML\Controls\Entry; | ||||
| use FML\Controls\Frame; | ||||
| use FML\Controls\Label; | ||||
| use FML\Controls\Labels\Label_Text; | ||||
| use FML\Controls\Quad; | ||||
| use FML\Controls\Quads\Quad_Icons64x64_1; | ||||
| use FML\Script\Features\Paging; | ||||
| use FML\Script\Script; | ||||
| use ManiaControl\Admin\AuthenticationManager; | ||||
| use ManiaControl\Callbacks\CallbackListener; | ||||
| use ManiaControl\Callbacks\CallbackManager; | ||||
| use ManiaControl\Callbacks\Callbacks; | ||||
| use ManiaControl\ManiaControl; | ||||
| use ManiaControl\Players\Player; | ||||
| @@ -30,8 +30,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { | ||||
| 	/* | ||||
| 	 * Constants | ||||
| 	 */ | ||||
| 	const ACTION_PREFIX_SETTING                     = 'ScriptSetting'; | ||||
| 	const ACTION_SETTING_BOOL                       = 'ScriptSetting.ActionBoolSetting.'; | ||||
| 	const ACTION_PREFIX_SETTING                     = 'ScriptSetting.'; | ||||
| 	const CB_SCRIPTSETTING_CHANGED                  = 'ScriptSettings.SettingChanged'; | ||||
| 	const CB_SCRIPTSETTINGS_CHANGED                 = 'ScriptSettings.SettingsChanged'; | ||||
| 	const TABLE_SCRIPT_SETTINGS                     = 'mc_scriptsettings'; | ||||
| @@ -50,13 +49,12 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { | ||||
| 	 */ | ||||
| 	public function __construct(ManiaControl $maniaControl) { | ||||
| 		$this->maniaControl = $maniaControl; | ||||
| 		$this->initTables(); | ||||
|  | ||||
| 		// Register for callbacks | ||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_PLAYERMANIALINKPAGEANSWER, $this, 'handleManialinkPageAnswer'); | ||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(Callbacks::ONINIT, $this, 'onInit'); | ||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(Callbacks::BEGINMAP, $this, 'onBeginMap'); | ||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_LOAD_DEFAULT_SETTINGS_MAP_BEGIN, true); | ||||
| 		$this->initTables(); | ||||
|  | ||||
| 		//Permission for Change Script-Settings | ||||
| 		$this->maniaControl->authenticationManager->definePermissionLevel(self::SETTING_PERMISSION_CHANGE_SCRIPT_SETTINGS, AuthenticationManager::AUTH_LEVEL_ADMIN); | ||||
| @@ -230,7 +228,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { | ||||
|  | ||||
| 			$nameLabel = new Label_Text(); | ||||
| 			$settingFrame->add($nameLabel); | ||||
| 			$nameLabel->setHAlign(Control::LEFT); | ||||
| 			$nameLabel->setHAlign($nameLabel::LEFT); | ||||
| 			$nameLabel->setX($width * -0.46); | ||||
| 			$nameLabel->setSize($width * 0.4, $settingHeight); | ||||
| 			$nameLabel->setStyle($nameLabel::STYLE_TextCardSmall); | ||||
| @@ -239,29 +237,22 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { | ||||
|  | ||||
| 			$settingValue = $scriptSettings[$settingName]; | ||||
|  | ||||
| 			$substyle = ''; | ||||
| 			if ($settingValue === false) { | ||||
| 				$substyle = Quad_Icons64x64_1::SUBSTYLE_LvlRed; | ||||
| 			} else if ($settingValue === true) { | ||||
| 				$substyle = Quad_Icons64x64_1::SUBSTYLE_LvlGreen; | ||||
| 			} | ||||
|  | ||||
| 			if ($substyle) { | ||||
| 				$quad = new Quad_Icons64x64_1(); | ||||
| 				$settingFrame->add($quad); | ||||
| 			if (is_bool($settingValue)) { | ||||
| 				// Boolean checkbox | ||||
| 				$quad = new Quad(); | ||||
| 				$quad->setX($width / 2 * 0.545); | ||||
| 				$quad->setZ(-0.01); | ||||
| 				$quad->setSubStyle($substyle); | ||||
| 				$quad->setSize(4, 4); | ||||
| 				$quad->setAction(self::ACTION_SETTING_BOOL . $settingName); | ||||
| 				$checkBox = new CheckBox(self::ACTION_PREFIX_SETTING . $settingName, $settingValue, $quad); | ||||
| 				$settingFrame->add($checkBox); | ||||
| 			} else { | ||||
| 				// Value entry | ||||
| 				$entry = new Entry(); | ||||
| 				$settingFrame->add($entry); | ||||
| 				$entry->setStyle(Label_Text::STYLE_TextValueSmall); | ||||
| 				$entry->setX($width / 2 * 0.55); | ||||
| 				$entry->setTextSize(1); | ||||
| 				$entry->setSize($width * 0.3, $settingHeight * 0.9); | ||||
| 				$entry->setName(self::ACTION_PREFIX_SETTING . '.' . $settingName); | ||||
| 				$entry->setName(self::ACTION_PREFIX_SETTING . $settingName); | ||||
| 				$entry->setDefault($settingValue); | ||||
| 			} | ||||
|  | ||||
| @@ -282,52 +273,52 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Handle ManialinkPageAnswer Callback | ||||
| 	 * | ||||
| 	 * @param array $callback | ||||
| 	 * @see \ManiaControl\Configurators\ConfiguratorMenu::saveConfigData() | ||||
| 	 */ | ||||
| 	public function handleManialinkPageAnswer(array $callback) { | ||||
| 		$actionId    = $callback[1][2]; | ||||
| 		$boolSetting = (strpos($actionId, self::ACTION_SETTING_BOOL) === 0); | ||||
| 		if (!$boolSetting) { | ||||
| 	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; | ||||
| 		} | ||||
|  | ||||
| 		$actionArray = explode(".", $actionId); | ||||
| 		$setting     = $actionArray[2]; | ||||
|  | ||||
| 		$login  = $callback[1][1]; | ||||
| 		$player = $this->maniaControl->playerManager->getPlayer($login); | ||||
|  | ||||
| 		// Toggle the Boolean Setting | ||||
| 		$this->toggleBooleanSetting($setting, $player); | ||||
|  | ||||
| 		// Save all Changes | ||||
| 		$this->saveConfigData($callback[1], $player); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Toggle a Boolean Setting | ||||
| 	 * | ||||
| 	 * @param Player $player | ||||
| 	 * @param        $setting | ||||
| 	 */ | ||||
| 	public function toggleBooleanSetting($setting, Player $player) { | ||||
| 		try { | ||||
| 			$scriptSettings = $this->maniaControl->client->getModeScriptSettings(); | ||||
| 		} catch (GameModeException $e) { | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		if (!isset($scriptSettings[$setting])) { | ||||
| 			var_dump('no setting ' . $setting); | ||||
| 			return; | ||||
| 		$prefixLength = strlen(self::ACTION_PREFIX_SETTING); | ||||
|  | ||||
| 		$newSettings = array(); | ||||
| 		foreach ($configData[3] as $setting) { | ||||
| 			$settingName = substr($setting['Name'], $prefixLength); | ||||
| 			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])); | ||||
| 		} | ||||
|  | ||||
| 		$newSettings           = array(); | ||||
| 		$newSettings[$setting] = ($scriptSettings[$setting] ? false : true); | ||||
| 		$success = $this->applyNewScriptSettings($newSettings, $player); | ||||
| 		if ($success) { | ||||
| 			$this->maniaControl->chat->sendSuccess('Script Settings saved!', $player); | ||||
| 		} else { | ||||
| 			$this->maniaControl->chat->sendError('Script Settings Saving failed!', $player); | ||||
| 		} | ||||
|  | ||||
| 		$this->applyNewScriptSettings($newSettings, $player); | ||||
| 		//Reopen the Menu | ||||
| 		$menuId = $this->maniaControl->configurator->getMenuId($this->getTitle()); | ||||
| 		$this->maniaControl->configurator->reopenMenu($player, $menuId); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @@ -335,7 +326,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { | ||||
| 	 * | ||||
| 	 * @param array  $newSettings | ||||
| 	 * @param Player $player | ||||
| 	 * @return        bool | ||||
| 	 * @return bool | ||||
| 	 */ | ||||
| 	private function applyNewScriptSettings(array $newSettings, Player $player) { | ||||
| 		if (!$newSettings) { | ||||
| @@ -346,8 +337,8 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { | ||||
| 			$this->maniaControl->client->setModeScriptSettings($newSettings); | ||||
| 		} catch (Exception $e) { | ||||
| 			//TODO temp added 19.04.2014 | ||||
| 			$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 416 ScriptSettings.php" . $e->getMessage()); | ||||
| 			$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player->login); | ||||
| 			$this->maniaControl->errorHandler->triggerDebugNotice("Exception line 416 ScriptSettings.php" . $e->getMessage(), $e); | ||||
| 			$this->maniaControl->chat->sendError('Error occurred: ' . $e->getMessage(), $player); | ||||
| 			return false; | ||||
| 		} | ||||
|  | ||||
| @@ -370,7 +361,7 @@ class ScriptSettings implements ConfiguratorMenu, CallbackListener { | ||||
| 		// Notifications | ||||
| 		$settingsCount = count($newSettings); | ||||
| 		$settingIndex  = 0; | ||||
| 		$title         = $this->maniaControl->authenticationManager->getAuthLevelName($player->authLevel); | ||||
| 		$title         = $this->maniaControl->authenticationManager->getAuthLevelName($player); | ||||
| 		$chatMessage   = '$ff0' . $title . ' $<' . $player->nickname . '$> set ScriptSetting' . ($settingsCount > 1 ? 's' : '') . ' '; | ||||
| 		foreach ($newSettings as $setting => $value) { | ||||
| 			$chatMessage .= '$<' . '$fff' . preg_replace('/^S_/', '', $setting) . '$z$s$ff0 '; | ||||
| @@ -415,56 +406,6 @@ 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 (GameModeException $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])); | ||||
| 		} | ||||
|  | ||||
| 		$success = $this->applyNewScriptSettings($newSettings, $player); | ||||
| 		if ($success) { | ||||
| 			$this->maniaControl->chat->sendSuccess('Script Settings saved!', $player); | ||||
| 		} else { | ||||
|  | ||||
| 			$this->maniaControl->chat->sendError('Script Settings Saving failed!', $player); | ||||
| 		} | ||||
|  | ||||
| 		//Reopen the Menu | ||||
| 		$menuId = $this->maniaControl->configurator->getMenuId($this->getTitle()); | ||||
| 		$this->maniaControl->configurator->reopenMenu($player, $menuId); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @see \ManiaControl\Configurators\ConfiguratorMenu::getTitle() | ||||
| 	 */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user