mirror of
https://github.com/wbbaddons/Tims-Chat.git
synced 2024-10-31 14:10:08 +00:00
Adding cleanup-cronjob (Currently missing the PIP)
Moving getPackageID into the Util
This commit is contained in:
parent
8b0dd6e391
commit
6e89b04751
@ -2,7 +2,6 @@
|
||||
namespace wcf\acp\form;
|
||||
use \wcf\system\exception\UserInputException;
|
||||
use \wcf\system\language\I18nHandler;
|
||||
use \wcf\system\package\PackageDependencyHandler;
|
||||
use \wcf\system\WCF;
|
||||
|
||||
/**
|
||||
@ -99,7 +98,7 @@ public function save() {
|
||||
$roomID = $returnValues['returnValues']->roomID;
|
||||
|
||||
if (!I18nHandler::getInstance()->isPlainValue('title')) {
|
||||
I18nHandler::getInstance()->save('title', 'wcf.chat.room.title'.$roomID, 'wcf.chat.room', PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->save('title', 'wcf.chat.room.title'.$roomID, 'wcf.chat.room', \wcf\util\ChatUtil::getPackageID());
|
||||
|
||||
// update title
|
||||
$chatRoomEditor->update(array(
|
||||
@ -108,7 +107,7 @@ public function save() {
|
||||
}
|
||||
|
||||
if (!I18nHandler::getInstance()->isPlainValue('topic')) {
|
||||
I18nHandler::getInstance()->save('topic', 'wcf.chat.room.topic'.$roomID, 'wcf.chat.room', PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->save('topic', 'wcf.chat.room.topic'.$roomID, 'wcf.chat.room', \wcf\util\ChatUtil::getPackageID());
|
||||
|
||||
// update topic
|
||||
$chatRoomEditor->update(array(
|
||||
|
@ -1,7 +1,6 @@
|
||||
<?php
|
||||
namespace wcf\acp\form;
|
||||
use \wcf\system\language\I18nHandler;
|
||||
use \wcf\system\package\PackageDependencyHandler;
|
||||
use \wcf\system\WCF;
|
||||
|
||||
/**
|
||||
@ -64,20 +63,20 @@ public function save() {
|
||||
|
||||
$this->title = 'wcf.chat.room.title'.$this->roomObj->roomID;
|
||||
if (I18nHandler::getInstance()->isPlainValue('title')) {
|
||||
I18nHandler::getInstance()->remove($this->title, PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->remove($this->title, \wcf\util\ChatUtil::getPackageID());
|
||||
$this->title = I18nHandler::getInstance()->getValue('title');
|
||||
}
|
||||
else {
|
||||
I18nHandler::getInstance()->save('title', $this->title, 'wcf.chat.room', PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->save('title', $this->title, 'wcf.chat.room', \wcf\util\ChatUtil::getPackageID());
|
||||
}
|
||||
|
||||
$this->topic = 'wcf.chat.room.topic'.$this->roomObj->roomID;
|
||||
if (I18nHandler::getInstance()->isPlainValue('topic')) {
|
||||
I18nHandler::getInstance()->remove($this->topic, PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->remove($this->topic, \wcf\util\ChatUtil::getPackageID());
|
||||
$this->topic = I18nHandler::getInstance()->getValue('topic');
|
||||
}
|
||||
else {
|
||||
I18nHandler::getInstance()->save('topic', $this->topic, 'wcf.chat.room', PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat'));
|
||||
I18nHandler::getInstance()->save('topic', $this->topic, 'wcf.chat.room', \wcf\util\ChatUtil::getPackageID());
|
||||
}
|
||||
|
||||
\wcf\system\acl\ACLHandler::getInstance()->save($this->roomID, $this->objectTypeID);
|
||||
@ -105,8 +104,8 @@ public function readData() {
|
||||
parent::readData();
|
||||
|
||||
if (!count($_POST)) {
|
||||
I18nHandler::getInstance()->setOptions('title', PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat'), $this->roomObj->title, 'wcf.chat.room.title\d+');
|
||||
I18nHandler::getInstance()->setOptions('topic', PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat'), $this->roomObj->topic, 'wcf.chat.room.topic\d+');
|
||||
I18nHandler::getInstance()->setOptions('title', \wcf\util\ChatUtil::getPackageID(), $this->roomObj->title, 'wcf.chat.room.title\d+');
|
||||
I18nHandler::getInstance()->setOptions('topic', \wcf\util\ChatUtil::getPackageID(), $this->roomObj->topic, 'wcf.chat.room.topic\d+');
|
||||
|
||||
$this->title = $this->roomObj->title;
|
||||
$this->topic = $this->roomObj->topic;
|
||||
|
@ -23,17 +23,19 @@ class ChatMessageEditor extends \wcf\data\DatabaseObjectEditor {
|
||||
* @param integer $lifetime Delete messages older that this time.
|
||||
* @return integer Number of deleted messages.
|
||||
*/
|
||||
public static function cleanup($lifetime = CHAT_ARCHIVETIME) {
|
||||
public static function prune($lifetime = CHAT_ARCHIVETIME) {
|
||||
$baseClass = self::$baseClass;
|
||||
$sql = "SELECT
|
||||
".static::getDatabaseIndexName()."
|
||||
".$baseClass::getDatabaseTableIndexName()."
|
||||
FROM
|
||||
".static::getDatabaseTableName()."
|
||||
".$baseClass::getDatabaseTableName()."
|
||||
WHERE
|
||||
time < ?";
|
||||
$statement = \wcf\system\WCF::getDB()->prepareStatement($sql);
|
||||
$statement->execute(TIME_NOW - $lifetime);
|
||||
time < ?";
|
||||
$stmt = \wcf\system\WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute(array(TIME_NOW - $lifetime));
|
||||
$objectIDs = array();
|
||||
while ($objectIDs[] = $statement->fetchColumn());
|
||||
return static::deleteAll($objectIDs);
|
||||
while ($objectIDs[] = $stmt->fetchColumn());
|
||||
|
||||
return self::deleteAll($objectIDs);
|
||||
}
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ public function __toString() {
|
||||
* @return integer
|
||||
*/
|
||||
public function countUsers() {
|
||||
$packageID = \wcf\system\package\PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
||||
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||
|
||||
$sql = "SELECT
|
||||
count(*) as count
|
||||
@ -100,7 +100,7 @@ public function getTitle() {
|
||||
* @return array<\wcf\data\user\User>
|
||||
*/
|
||||
public function getUsers() {
|
||||
$packageID = \wcf\system\package\PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
||||
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||
|
||||
$sql = "SELECT
|
||||
userID
|
||||
|
@ -17,19 +17,13 @@ class ChatRoomEditor extends \wcf\data\DatabaseObjectEditor implements \wcf\data
|
||||
*/
|
||||
protected static $baseClass = '\wcf\data\chat\room\ChatRoom';
|
||||
|
||||
/**
|
||||
* Clears the room cache.
|
||||
*/
|
||||
public static function resetCache() {
|
||||
\wcf\system\cache\CacheHandler::getInstance()->clear(WCF_DIR.'cache', 'cache.chatrooms.php');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @see \wcf\data\DatabaseObjectEditor::deleteAll()
|
||||
*/
|
||||
public static function deleteAll(array $objectIDs = array()) {
|
||||
parent::deleteAll($objectIDs);
|
||||
$packageID = \wcf\system\package\PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
||||
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||
|
||||
WCF::getDB()->beginTransaction();
|
||||
foreach ($objectIDs as $objectID) {
|
||||
@ -40,4 +34,40 @@ public static function deleteAll(array $objectIDs = array()) {
|
||||
|
||||
return count($objectIDs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes temporary rooms that are unused.
|
||||
*
|
||||
* @return integer Number of deleted rooms
|
||||
*/
|
||||
public static function prune() {
|
||||
$baseClass = self::$baseClass;
|
||||
$sql = "SELECT
|
||||
".$baseClass::getDatabaseTableIndexName()."
|
||||
FROM
|
||||
".$baseClass::getDatabaseTableName()."
|
||||
WHERE
|
||||
permanent = ?
|
||||
AND roomID NOT IN(
|
||||
SELECT
|
||||
fieldValue AS roomID
|
||||
FROM
|
||||
wcf".WCF_N."_user_storage
|
||||
WHERE
|
||||
packageID = ?
|
||||
AND field = ?)";
|
||||
$stmt = \wcf\system\WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute(array(0, \wcf\util\ChatUtil::getPackageID(), 'roomID'));
|
||||
$objectIDs = array();
|
||||
|
||||
while ($objectIDs[] = $stmt->fetchColumn());
|
||||
return self::deleteAll($objectIDs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the room cache.
|
||||
*/
|
||||
public static function resetCache() {
|
||||
\wcf\system\cache\CacheHandler::getInstance()->clear(WCF_DIR.'cache', 'cache.chatrooms.php');
|
||||
}
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ public function readData() {
|
||||
try {
|
||||
\wcf\util\ChatUtil::writeUserData(array('lastSeen' => end($this->newestMessages)->messageID));
|
||||
}
|
||||
catch (\wcf\system\SystemException $e) {
|
||||
catch (\wcf\system\exception\SystemException $e) {
|
||||
\wcf\util\ChatUtil::writeUserData(array('lastSeen' => 0));
|
||||
}
|
||||
|
||||
@ -161,12 +161,15 @@ public function show() {
|
||||
if (!WCF::getUser()->userID) {
|
||||
throw new \wcf\system\exception\PermissionDeniedException();
|
||||
}
|
||||
|
||||
\wcf\system\menu\page\PageMenu::getInstance()->setActiveMenuItem('wcf.header.menu.chat');
|
||||
|
||||
// remove index breadcrumb
|
||||
WCF::getBreadcrumbs()->remove(0);
|
||||
|
||||
parent::show();
|
||||
// break if not ajax
|
||||
|
||||
// break if not using ajax
|
||||
if ($this->useTemplate) exit;
|
||||
@header('Content-type: application/json');
|
||||
|
||||
|
@ -31,9 +31,9 @@ public function getData(array $cacheResource) {
|
||||
FROM wcf".WCF_N."_acl_option acl_option,
|
||||
wcf".WCF_N."_acl_option_to_group option_to_group
|
||||
".$conditionBuilder;
|
||||
$statement = WCF::getDB()->prepareStatement($sql);
|
||||
$statement->execute($conditionBuilder->getParameters());
|
||||
while ($row = $statement->fetchArray()) {
|
||||
$stmt = WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute($conditionBuilder->getParameters());
|
||||
while ($row = $stmt->fetchArray()) {
|
||||
if (!isset($data[$row['roomID']][$row['permission']])) $data[$row['roomID']][$row['permission']] = $row['optionValue'];
|
||||
else $data[$row['roomID']][$row['permission']] = $row['optionValue'] || $data[$row['roomID']][$row['permission']];
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ class ChatPermissionHandler extends \wcf\system\SingletonFactory {
|
||||
* @see \wcf\system\SingletonFactory::init()
|
||||
*/
|
||||
protected function init() {
|
||||
$packageID = PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
||||
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||
$ush = \wcf\system\user\storage\UserStorageHandler::getInstance();
|
||||
|
||||
// get groups permissions
|
||||
@ -58,9 +58,9 @@ protected function init() {
|
||||
FROM wcf".WCF_N."_acl_option acl_option,
|
||||
wcf".WCF_N."_acl_option_to_user option_to_user
|
||||
".$conditionBuilder;
|
||||
$statement = WCF::getDB()->prepareStatement($sql);
|
||||
$statement->execute($conditionBuilder->getParameters());
|
||||
while ($row = $statement->fetchArray()) {
|
||||
$stmt = WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute($conditionBuilder->getParameters());
|
||||
while ($row = $stmt->fetchArray()) {
|
||||
$userPermissions[$row['roomID']][$row['permission']] = $row['optionValue'];
|
||||
}
|
||||
|
||||
@ -97,7 +97,7 @@ public function getPermission(\wcf\data\chat\room\ChatRoom $room, $permission) {
|
||||
* Clears the cache.
|
||||
*/
|
||||
public static function clearCache() {
|
||||
$packageID = PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
||||
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||
$ush = \wcf\system\user\storage\UserStorageHandler::getInstance();
|
||||
|
||||
$ush->resetAll('chatUserPermissions', $packageID);
|
||||
|
21
file/lib/system/cronjob/ChatCleanupCronjob.class.php
Normal file
21
file/lib/system/cronjob/ChatCleanupCronjob.class.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
namespace wcf\system\cronjob;
|
||||
|
||||
/**
|
||||
* Vaporizes unneeded data.
|
||||
*
|
||||
* @author Tim Düsterhus
|
||||
* @copyright 2010-2012 Tim Düsterhus
|
||||
* @license Creative Commons Attribution-NonCommercial-ShareAlike <http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode>
|
||||
* @package timwolla.wcf.chat
|
||||
* @subpackage system.cronjob
|
||||
*/
|
||||
class ChatCleanupCronjob implements ICronjob {
|
||||
/**
|
||||
* @see wcf\system\ICronjob::execute()
|
||||
*/
|
||||
public function execute(\wcf\data\cronjob\Cronjob $cronjob) {
|
||||
\wcf\data\chat\message\ChatMessageEditor::prune();
|
||||
\wcf\data\chat\room\ChatRoomEditor::prune();
|
||||
}
|
||||
}
|
@ -22,8 +22,43 @@ class ChatUtil {
|
||||
*/
|
||||
const TIME_MODIFIER_REGEX = '((?:[0-9]+[s|h|d|w|m|y|S|H|D|W|M|Y]?,?)+)';
|
||||
|
||||
/**
|
||||
* Package identifier of Tims Chat.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const PACKAGE_IDENTIFIER = 'timwolla.wcf.chat';
|
||||
|
||||
public static $serialize = array('color' => true);
|
||||
|
||||
/**
|
||||
* Cached packageID of Tims Chat.
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
private static $packageID = null;
|
||||
|
||||
/**
|
||||
* Returns the packageID of Tims Chat.
|
||||
*/
|
||||
public static function getPackageID() {
|
||||
if (self::$packageID === null) {
|
||||
self::$packageID = PackageDependencyHandler::getInstance()->getPackageID(self::PACKAGE_IDENTIFIER);
|
||||
}
|
||||
|
||||
return self::$packageID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a random number.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public static function /* int */ getRandomNumber() {
|
||||
return 4; // chosen by a fair dice roll
|
||||
// guaranteed to be random
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a gradient out of two colors represented by an integer.
|
||||
* The first byte is red, the second byte is green, the third one is blue.
|
||||
@ -58,7 +93,7 @@ public static function gradient($string, $start, $end) {
|
||||
*/
|
||||
public static function readUserData($field) {
|
||||
$ush = UserStorageHandler::getInstance();
|
||||
$packageID = PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
||||
$packageID = self::getPackageID();
|
||||
|
||||
// load storage
|
||||
$ush->loadStorage(array(WCF::getUser()->userID), $packageID);
|
||||
@ -79,30 +114,6 @@ public static function readUserData($field) {
|
||||
else return $data[WCF::getUser()->userID];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a random number.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public static function /* int */ getRandomNumber() {
|
||||
return 4; // chosen by a fair dice roll
|
||||
// guaranteed to be random
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes user data
|
||||
*
|
||||
* @param array $data
|
||||
*/
|
||||
public static function writeUserData(array $data) {
|
||||
$ush = UserStorageHandler::getInstance();
|
||||
$packageID = PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
||||
|
||||
foreach($data as $key => $value) {
|
||||
$ush->update(WCF::getUser()->userID, $key, (isset(static::$serialize[$key])) ? serialize($value) : $value, $packageID);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits a string into smaller chunks.
|
||||
* UTF-8 safe version of str_split().
|
||||
@ -175,4 +186,18 @@ public static function timeModifier($time) {
|
||||
|
||||
return (int) round($result, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes user data
|
||||
*
|
||||
* @param array $data
|
||||
*/
|
||||
public static function writeUserData(array $data) {
|
||||
$ush = UserStorageHandler::getInstance();
|
||||
$packageID = self::getPackageID();
|
||||
|
||||
foreach($data as $key => $value) {
|
||||
$ush->update(WCF::getUser()->userID, $key, (isset(static::$serialize[$key])) ? serialize($value) : $value, $packageID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user