diff --git a/application/plugins/MCTeam/ChatlogPlugin.php b/application/plugins/MCTeam/ChatlogPlugin.php new file mode 100644 index 00000000..bd25b1b7 --- /dev/null +++ b/application/plugins/MCTeam/ChatlogPlugin.php @@ -0,0 +1,180 @@ + + * @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(); + } +} diff --git a/application/plugins/steeffeen/ChatlogPlugin.php b/application/plugins/steeffeen/ChatlogPlugin.php index 91d85e3e..e69de29b 100644 --- a/application/plugins/steeffeen/ChatlogPlugin.php +++ b/application/plugins/steeffeen/ChatlogPlugin.php @@ -1,158 +0,0 @@ -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); - } -}