mirror of
https://github.com/wbbaddons/Tims-Chat.git
synced 2024-10-31 14:10:08 +00:00
Moving pruning to *Action
This commit is contained in:
parent
0958416f93
commit
f72dfb4e54
@ -15,4 +15,24 @@ class ChatMessageAction extends \wcf\data\AbstractDatabaseObjectAction {
|
||||
* @see \wcf\data\AbstractDatabaseObjectAction::$className
|
||||
*/
|
||||
protected $className = '\wcf\data\chat\message\ChatMessageEditor';
|
||||
|
||||
/**
|
||||
* Removes old messages.
|
||||
*
|
||||
* @return integer Number of deleted messages.
|
||||
*/
|
||||
public function prune() {
|
||||
$sql = "SELECT
|
||||
".call_user_func(array($this->className, 'getDatabaseTableIndexName'))."
|
||||
FROM
|
||||
".call_user_func(array($this->className, 'getDatabaseTableName'))."
|
||||
WHERE
|
||||
time < ?";
|
||||
$stmt = \wcf\system\WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute(array(TIME_NOW - CHAT_LOG_ARCHIVETIME));
|
||||
$objectIDs = array();
|
||||
while ($objectIDs[] = $stmt->fetchColumn());
|
||||
|
||||
return call_user_func(array($this->className, 'deleteAll'), $objectIDs);
|
||||
}
|
||||
}
|
||||
|
@ -30,25 +30,4 @@ public static function create(array $parameters = array()) {
|
||||
|
||||
return parent::create($parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes old messages.
|
||||
*
|
||||
* @param integer $lifetime Delete messages older that this time.
|
||||
* @return integer Number of deleted messages.
|
||||
*/
|
||||
public static function prune($lifetime = CHAT_LOG_ARCHIVETIME) {
|
||||
$sql = "SELECT
|
||||
".static::getDatabaseTableIndexName()."
|
||||
FROM
|
||||
".static::getDatabaseTableName()."
|
||||
WHERE
|
||||
time < ?";
|
||||
$stmt = \wcf\system\WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute(array(TIME_NOW - $lifetime));
|
||||
$objectIDs = array();
|
||||
while ($objectIDs[] = $stmt->fetchColumn());
|
||||
|
||||
return self::deleteAll($objectIDs);
|
||||
}
|
||||
}
|
||||
|
@ -35,21 +35,49 @@ public function create() {
|
||||
|
||||
WCF::getDB()->beginTransaction();
|
||||
$sql = "SELECT MAX(position)
|
||||
FROM wcf".WCF_N."_chat_room
|
||||
FROM ".call_user_func(array($this->className, 'getDatabaseTableName'))."
|
||||
FOR UPDATE";
|
||||
$stmt = WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute();
|
||||
|
||||
$sql = "UPDATE wcf".WCF_N."_chat_room
|
||||
SET position = ".($stmt->fetchColumn() + 1)."
|
||||
WHERE roomID = ?";
|
||||
$stmt = WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute(array($room->roomID));
|
||||
$editor = new ChatRoomEditor($room);
|
||||
$editor->update(array('position' => ($stmt->fetchColumn() + 1)));
|
||||
WCF::getDB()->commitTransaction();
|
||||
|
||||
return $room;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes temporary rooms that are unused.
|
||||
*
|
||||
* @return integer Number of deleted rooms
|
||||
*/
|
||||
public function prune() {
|
||||
$sql = "SELECT
|
||||
".call_user_func(array($this->className, 'getDatabaseTableIndexName'))."
|
||||
FROM
|
||||
".call_user_func(array($this->className, 'getDatabaseTableName'))."
|
||||
WHERE
|
||||
permanent = ?
|
||||
AND roomID NOT IN (
|
||||
SELECT
|
||||
fieldValue AS roomID
|
||||
FROM
|
||||
wcf".WCF_N."_user_storage
|
||||
WHERE
|
||||
packageID = ?
|
||||
AND field = ?
|
||||
AND fieldValue IS NOT NULL
|
||||
)";
|
||||
$stmt = \wcf\system\WCF::getDB()->prepareStatement($sql);
|
||||
$stmt->execute(array(0, \wcf\util\ChatUtil::getPackageID(), 'roomID'));
|
||||
$objectIDs = array();
|
||||
|
||||
while ($objectIDs[] = $stmt->fetchColumn());
|
||||
|
||||
return call_user_func(array($this->className, 'deleteAll'), $objectIDs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates parameters to update sorting.
|
||||
*/
|
||||
|
@ -57,36 +57,6 @@ public static function deleteAll(array $objectIDs = array()) {
|
||||
return parent::deleteAll($objectIDs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes temporary rooms that are unused.
|
||||
*
|
||||
* @return integer Number of deleted rooms
|
||||
*/
|
||||
public static function prune() {
|
||||
$sql = "SELECT
|
||||
".static::getDatabaseTableIndexName()."
|
||||
FROM
|
||||
".static::getDatabaseTableName()."
|
||||
WHERE
|
||||
permanent = ?
|
||||
AND roomID NOT IN (
|
||||
SELECT
|
||||
fieldValue AS roomID
|
||||
FROM
|
||||
wcf".WCF_N."_user_storage
|
||||
WHERE
|
||||
packageID = ?
|
||||
AND field = ?
|
||||
AND fieldValue IS NOT NULL
|
||||
)";
|
||||
$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.
|
||||
*/
|
||||
|
@ -1,5 +1,6 @@
|
||||
<?php
|
||||
namespace wcf\system\cronjob;
|
||||
use \wcf\data\chat;
|
||||
|
||||
/**
|
||||
* Vaporizes unneeded data.
|
||||
@ -15,8 +16,10 @@ 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();
|
||||
$messageAction = new chat\message\ChatMessageAction(array(), 'prune');
|
||||
$messageAction->executeAction();
|
||||
$roomAction = new chat\room\ChatRoomAction(array(), 'prune');
|
||||
$roomAction->executeAction();
|
||||
|
||||
// kill dead users
|
||||
$deadUsers = \wcf\util\ChatUtil::getDiedUsers();
|
||||
|
Loading…
Reference in New Issue
Block a user