improved chatlog plugin & transformed it to a MCTeam plugin
This commit is contained in:
		
							
								
								
									
										180
									
								
								application/plugins/MCTeam/ChatlogPlugin.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								application/plugins/MCTeam/ChatlogPlugin.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,180 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace MCTeam; | ||||||
|  |  | ||||||
|  | use ManiaControl\Callbacks\CallbackListener; | ||||||
|  | use ManiaControl\Callbacks\CallbackManager; | ||||||
|  | use ManiaControl\Files\FileUtil; | ||||||
|  | use ManiaControl\ManiaControl; | ||||||
|  | use ManiaControl\Plugins\Plugin; | ||||||
|  | use ManiaControl\Settings\SettingManager; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * ManiaControl Chatlog Plugin | ||||||
|  |  * | ||||||
|  |  * @author    ManiaControl Team <mail@maniacontrol.com> | ||||||
|  |  * @copyright 2014 ManiaControl Team | ||||||
|  |  * @license   http://www.gnu.org/licenses/ GNU General Public License, Version 3 | ||||||
|  |  */ | ||||||
|  | class ChatlogPlugin implements CallbackListener, Plugin { | ||||||
|  | 	/** | ||||||
|  | 	 * Constants | ||||||
|  | 	 */ | ||||||
|  | 	const ID                        = 26; | ||||||
|  | 	const VERSION                   = 0.2; | ||||||
|  | 	const NAME                      = 'Chatlog Plugin'; | ||||||
|  | 	const AUTHOR                    = 'MCTeam'; | ||||||
|  | 	const DATE                      = 'd-m-y h:i:sa T'; | ||||||
|  | 	const SETTING_FOLDERNAME        = 'Log-Folder Name'; | ||||||
|  | 	const SETTING_FILENAME          = 'Log-File Name'; | ||||||
|  | 	const SETTING_USEPID            = 'Use Process-Id for File Name'; | ||||||
|  | 	const SETTING_LOGSERVERMESSAGES = 'Log Server Messages'; | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Private properties | ||||||
|  | 	 */ | ||||||
|  | 	/** @var ManiaControl $maniaControl */ | ||||||
|  | 	private $maniaControl = null; | ||||||
|  | 	private $fileName = null; | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @see \ManiaControl\Plugins\Plugin::prepare() | ||||||
|  | 	 */ | ||||||
|  | 	public static function prepare(ManiaControl $maniaControl) { | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @see \ManiaControl\Plugins\Plugin::getId() | ||||||
|  | 	 */ | ||||||
|  | 	public static function getId() { | ||||||
|  | 		return self::ID; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @see \ManiaControl\Plugins\Plugin::getName() | ||||||
|  | 	 */ | ||||||
|  | 	public static function getName() { | ||||||
|  | 		return self::NAME; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @see \ManiaControl\Plugins\Plugin::getVersion() | ||||||
|  | 	 */ | ||||||
|  | 	public static function getVersion() { | ||||||
|  | 		return self::VERSION; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @see \ManiaControl\Plugins\Plugin::getAuthor() | ||||||
|  | 	 */ | ||||||
|  | 	public static function getAuthor() { | ||||||
|  | 		return self::AUTHOR; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @see \ManiaControl\Plugins\Plugin::getDescription() | ||||||
|  | 	 */ | ||||||
|  | 	public static function getDescription() { | ||||||
|  | 		return 'Plugin logging the Chat Messages of the Server for later Checks and Controlling.'; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @see \ManiaControl\Plugins\Plugin::load() | ||||||
|  | 	 */ | ||||||
|  | 	public function load(ManiaControl $maniaControl) { | ||||||
|  | 		$this->maniaControl = $maniaControl; | ||||||
|  |  | ||||||
|  | 		// Init settings | ||||||
|  | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_FOLDERNAME, 'logs'); | ||||||
|  | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_FILENAME, 'ChatLog.log'); | ||||||
|  | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_USEPID, false); | ||||||
|  | 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_LOGSERVERMESSAGES, true); | ||||||
|  |  | ||||||
|  | 		// Register for callbacks | ||||||
|  | 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_PLAYERCHAT, $this, 'handlePlayerChatCallback'); | ||||||
|  | 		$this->maniaControl->callbackManager->registerCallbackListener(SettingManager::CB_SETTINGS_CHANGED, $this, 'handleSettingsChangedCallback'); | ||||||
|  |  | ||||||
|  | 		$this->buildLogFileName(); | ||||||
|  |  | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Build the Log File Name and Folder | ||||||
|  | 	 */ | ||||||
|  | 	private function buildLogFileName() { | ||||||
|  | 		$folderName = $this->maniaControl->settingManager->getSetting($this, self::SETTING_FOLDERNAME); | ||||||
|  | 		$folderName = FileUtil::getClearedFileName($folderName); | ||||||
|  | 		$folderDir  = ManiaControlDir . $folderName; | ||||||
|  | 		if (!is_dir($folderDir)) { | ||||||
|  | 			$success = mkdir($folderDir); | ||||||
|  | 			if (!$success) { | ||||||
|  | 				trigger_error("Couldn't create ChatlogPlugin Log-Folder '{$folderName}'!"); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		$fileName = $this->maniaControl->settingManager->getSetting($this, self::SETTING_FILENAME); | ||||||
|  | 		$fileName = FileUtil::getClearedFileName($fileName); | ||||||
|  | 		$usePId   = $this->maniaControl->settingManager->getSetting($this, self::SETTING_USEPID); | ||||||
|  | 		if ($usePId) { | ||||||
|  | 			$dotIndex = strripos($fileName, '.'); | ||||||
|  | 			$pIdPart  = '_' . getmypid(); | ||||||
|  | 			if ($dotIndex !== false && $dotIndex >= 0) { | ||||||
|  | 				$fileName = substr($fileName, 0, $dotIndex) . $pIdPart . substr($fileName, $dotIndex); | ||||||
|  | 			} else { | ||||||
|  | 				$fileName .= $pIdPart; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		$this->fileName = $folderDir . DIRECTORY_SEPARATOR . $fileName; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @see \ManiaControl\Plugins\Plugin::unload() | ||||||
|  | 	 */ | ||||||
|  | 	public function unload() { | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Handle PlayerChat callback | ||||||
|  | 	 * | ||||||
|  | 	 * @param array $chatCallback | ||||||
|  | 	 */ | ||||||
|  | 	public function handlePlayerChatCallback(array $chatCallback) { | ||||||
|  | 		$data = $chatCallback[1]; | ||||||
|  | 		if ($data[0] <= 0) { | ||||||
|  | 			// Server message | ||||||
|  | 			$logServerMessages = $this->maniaControl->settingManager->getSetting($this, self::SETTING_LOGSERVERMESSAGES); | ||||||
|  | 			if (!$logServerMessages) { | ||||||
|  | 				// Skip it | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		$this->logText($data[2], $data[1]); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Log the given message | ||||||
|  | 	 * | ||||||
|  | 	 * @param string $text | ||||||
|  | 	 * @param string $login | ||||||
|  | 	 */ | ||||||
|  | 	private function logText($text, $login = null) { | ||||||
|  | 		$message = date(self::DATE) . ' >> ';; | ||||||
|  | 		if ($login) { | ||||||
|  | 			$message .= $login . ': '; | ||||||
|  | 		} | ||||||
|  | 		$message .= $text . PHP_EOL; | ||||||
|  | 		file_put_contents($this->fileName, $message, FILE_APPEND); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * Handle Settings Changed Callback | ||||||
|  | 	 * | ||||||
|  | 	 * @param array $changedCallback | ||||||
|  | 	 */ | ||||||
|  | 	public function handleSettingsChangedCallback($settingClass) { | ||||||
|  | 		if ($settingClass !== get_class()) { | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
|  | 		$this->buildLogFileName(); | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -1,158 +0,0 @@ | |||||||
| <?php |  | ||||||
|  |  | ||||||
| namespace steeffeen; |  | ||||||
|  |  | ||||||
| use ManiaControl\Callbacks\CallbackListener; |  | ||||||
| use ManiaControl\Callbacks\CallbackManager; |  | ||||||
| use ManiaControl\Files\FileUtil; |  | ||||||
| use ManiaControl\ManiaControl; |  | ||||||
| use ManiaControl\Plugins\Plugin; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * ManiaControl Chatlog Plugin |  | ||||||
|  * |  | ||||||
|  * @author steeffeen |  | ||||||
|  * @copyright ManiaControl Copyright © 2014 ManiaControl Team |  | ||||||
|  * @license http://www.gnu.org/licenses/ GNU General Public License, Version 3 |  | ||||||
|  */ |  | ||||||
| class ChatlogPlugin implements CallbackListener, Plugin { |  | ||||||
| 	/** |  | ||||||
| 	 * Constants |  | ||||||
| 	 */ |  | ||||||
| 	const ID                        = 26; |  | ||||||
| 	const VERSION                   = 0.2; |  | ||||||
| 	const DATE                      = 'd-m-y h:i:sa T'; |  | ||||||
| 	const SETTING_FOLDERNAME        = 'Log-Folder Name'; |  | ||||||
| 	const SETTING_FILENAME          = 'Log-File Name'; |  | ||||||
| 	const SETTING_USEPID            = 'Use Process-Id for File Name'; |  | ||||||
| 	const SETTING_LOGSERVERMESSAGES = 'Log Server Messages'; |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * Private properties |  | ||||||
| 	 */ |  | ||||||
| 	/** @var maniaControl $maniaControl */ |  | ||||||
| 	private $maniaControl = null; |  | ||||||
| 	private $fileName = null; |  | ||||||
| 	private $logServerMessages = true; |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * Prepares the Plugin |  | ||||||
| 	 * |  | ||||||
| 	 * @param ManiaControl $maniaControl |  | ||||||
| 	 * @return mixed |  | ||||||
| 	 */ |  | ||||||
| 	public static function prepare(ManiaControl $maniaControl) { |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * @see \ManiaControl\Plugins\Plugin::load() |  | ||||||
| 	 */ |  | ||||||
| 	public function load(ManiaControl $maniaControl) { |  | ||||||
| 		$this->maniaControl = $maniaControl; |  | ||||||
|  |  | ||||||
| 		// Init settings |  | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_FOLDERNAME, 'logs'); |  | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_FILENAME, 'ChatLog.log'); |  | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_USEPID, false); |  | ||||||
| 		$this->maniaControl->settingManager->initSetting($this, self::SETTING_LOGSERVERMESSAGES, true); |  | ||||||
|  |  | ||||||
| 		// Get settings |  | ||||||
| 		$folderName = $this->maniaControl->settingManager->getSetting($this, self::SETTING_FOLDERNAME); |  | ||||||
| 		$folderName = FileUtil::getClearedFileName($folderName); |  | ||||||
| 		$folderDir  = ManiaControlDir . $folderName; |  | ||||||
| 		if (!is_dir($folderDir)) { |  | ||||||
| 			$success = mkdir($folderDir); |  | ||||||
| 			if (!$success) { |  | ||||||
| 				trigger_error("Couldn't create chat log folder '{$folderName}'."); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		$fileName = $this->maniaControl->settingManager->getSetting($this, self::SETTING_FILENAME); |  | ||||||
| 		$fileName = FileUtil::getClearedFileName($fileName); |  | ||||||
| 		$usePId   = $this->maniaControl->settingManager->getSetting($this, self::SETTING_USEPID); |  | ||||||
| 		if ($usePId) { |  | ||||||
| 			$dotIndex = strripos($fileName, '.'); |  | ||||||
| 			$pIdPart  = '_' . getmypid(); |  | ||||||
| 			if ($dotIndex !== false && $dotIndex >= 0) { |  | ||||||
| 				$fileName = substr($fileName, 0, $dotIndex) . $pIdPart . substr($fileName, $dotIndex); |  | ||||||
| 			} else { |  | ||||||
| 				$fileName .= $pIdPart; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		$this->fileName          = $folderDir . DIRECTORY_SEPARATOR . $fileName; |  | ||||||
| 		$this->logServerMessages = $this->maniaControl->settingManager->getSetting($this, self::SETTING_LOGSERVERMESSAGES); |  | ||||||
|  |  | ||||||
| 		// Register for callbacks |  | ||||||
| 		$this->maniaControl->callbackManager->registerCallbackListener(CallbackManager::CB_MP_PLAYERCHAT, $this, 'handlePlayerChatCallback'); |  | ||||||
|  |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * @see \ManiaControl\Plugins\Plugin::unload() |  | ||||||
| 	 */ |  | ||||||
| 	public function unload() { |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * @see \ManiaControl\Plugins\Plugin::getId() |  | ||||||
| 	 */ |  | ||||||
| 	public static function getId() { |  | ||||||
| 		return self::ID; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * @see \ManiaControl\Plugins\Plugin::getName() |  | ||||||
| 	 */ |  | ||||||
| 	public static function getName() { |  | ||||||
| 		return 'Chatlog Plugin'; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * @see \ManiaControl\Plugins\Plugin::getVersion() |  | ||||||
| 	 */ |  | ||||||
| 	public static function getVersion() { |  | ||||||
| 		return self::VERSION; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * @see \ManiaControl\Plugins\Plugin::getAuthor() |  | ||||||
| 	 */ |  | ||||||
| 	public static function getAuthor() { |  | ||||||
| 		return 'steeffeen'; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * @see \ManiaControl\Plugins\Plugin::getDescription() |  | ||||||
| 	 */ |  | ||||||
| 	public static function getDescription() { |  | ||||||
| 		return 'Plugin logging the Chat Messages of the Server for later Checks and Controlling.'; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * Handle PlayerChat callback |  | ||||||
| 	 * |  | ||||||
| 	 * @param array $chatCallback |  | ||||||
| 	 */ |  | ||||||
| 	public function handlePlayerChatCallback(array $chatCallback) { |  | ||||||
| 		$data = $chatCallback[1]; |  | ||||||
| 		if ($data[0] <= 0 && !$this->logServerMessages) { |  | ||||||
| 			// Skip server message |  | ||||||
| 			return; |  | ||||||
| 		} |  | ||||||
| 		$this->logText($data[2], $data[1]); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/** |  | ||||||
| 	 * Log the given message |  | ||||||
| 	 * |  | ||||||
| 	 * @param string $text |  | ||||||
| 	 * @param string $login |  | ||||||
| 	 */ |  | ||||||
| 	private function logText($text, $login = null) { |  | ||||||
| 		if (!$login) { |  | ||||||
| 			$login = ''; |  | ||||||
| 		} |  | ||||||
| 		$message = date(self::DATE) . " >> {$login}: {$text}" . PHP_EOL; |  | ||||||
| 		file_put_contents($this->fileName, $message, FILE_APPEND); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user