1
0
mirror of https://github.com/wbbaddons/Tims-Chat.git synced 2025-03-31 10:44:52 +00:00

Fix Suspension commands and clean up

This commit is contained in:
Tim Düsterhus 2013-05-24 01:21:46 +02:00
parent d64f11b315
commit 2936b2f3aa
14 changed files with 55 additions and 45 deletions

@ -36,8 +36,9 @@ class MessageAction extends \wcf\data\AbstractDatabaseObjectAction {
time < ?";
$stmt = \wcf\system\WCF::getDB()->prepareStatement($sql);
$stmt->execute(array(TIME_NOW - CHAT_LOG_ARCHIVETIME));
$objectIDs = array();
while ($objectIDs[] = $stmt->fetchColumn());
while ($objectID = $stmt->fetchColumn()) $objectIDs[] = $objectID;
return call_user_func(array($this->className, 'deleteAll'), $objectIDs);
}

@ -46,14 +46,14 @@ class Room extends \chat\data\CHATDatabaseObject implements \wcf\system\request\
$canEnter = $ph->getPermission($this, 'user.canEnter');
// room suspension
if ($canEnter && isset($suspensions[$this->roomID][Suspension::TYPE_BAN])) {
if ($suspensions[$this->roomID][Suspension::TYPE_BAN]->time > TIME_NOW) {
if ($suspensions[$this->roomID][Suspension::TYPE_BAN]->isValid()) {
$canEnter = false;
}
}
// global suspension
if ($canEnter && isset($suspensions[null][Suspension::TYPE_BAN])) {
if ($suspensions[null][Suspension::TYPE_BAN]->time > TIME_NOW) {
if ($suspensions[null][Suspension::TYPE_BAN]->isValid()) {
$canEnter = false;
}
}
@ -77,14 +77,14 @@ class Room extends \chat\data\CHATDatabaseObject implements \wcf\system\request\
$canWrite = $ph->getPermission($this, 'user.canWrite');
// room suspension
if ($canWrite && isset($suspensions[$this->roomID][Suspension::TYPE_MUTE])) {
if ($suspensions[$this->roomID][Suspension::TYPE_MUTE]->time > TIME_NOW) {
if ($suspensions[$this->roomID][Suspension::TYPE_MUTE]->isValid()) {
$canWrite = false;
}
}
// global suspension
if ($canWrite && isset($suspensions[null][Suspension::TYPE_MUTE])) {
if ($suspensions[null][Suspension::TYPE_MUTE]->time > TIME_NOW) {
if ($suspensions[null][Suspension::TYPE_MUTE]->isValid()) {
$canWrite = false;
}
}

@ -79,7 +79,7 @@ class RoomAction extends \wcf\data\AbstractDatabaseObjectAction implements \wcf\
$stmt->execute(array(0, 'roomID'));
$objectIDs = array();
while ($objectIDs[] = $stmt->fetchColumn());
while ($objectID = $stmt->fetchColumn()) $objectIDs[] = $objectID;
return call_user_func(array($this->className, 'deleteAll'), $objectIDs);
}

@ -25,6 +25,15 @@ class Suspension extends \chat\data\CHATDatabaseObject {
const TYPE_MUTE = 1;
const TYPE_BAN = 2;
/**
* Returns whether the suspension still is valid.
*
* @return boolean
*/
public function isValid() {
return $this->expires > TIME_NOW;
}
/**
* Returns all the suspensions for the specified user (current user if no user was specified).
*
@ -42,7 +51,7 @@ class Suspension extends \chat\data\CHATDatabaseObject {
chat".WCF_N."_suspension
WHERE
userID = ?
AND time > ?";
AND expires > ?";
$stmt = WCF::getDB()->prepareStatement($sql);
$stmt->execute(array($user->userID, TIME_NOW));

@ -27,7 +27,7 @@ class SuspensionAction extends \wcf\data\AbstractDatabaseObjectAction {
FROM
".call_user_func(array($this->className, 'getDatabaseTableName'))."
WHERE
time < ?";
expires < ?";
$stmt = \wcf\system\WCF::getDB()->prepareStatement($sql);
$stmt->execute(array(TIME_NOW));
$objectIDs = array();

@ -17,12 +17,12 @@ use \wcf\system\WCF;
class BanCommand extends MuteCommand {
public function executeAction() {
if ($suspension = suspension\Suspension::getSuspensionByUserRoomAndType($this->user, $this->room, suspension\Suspension::TYPE_BAN)) {
if ($suspension->time > TIME_NOW + $this->time) {
if ($suspension->expires > $this->expires) {
throw new \wcf\system\exception\UserInputException('text', WCF::getLanguage()->get('wcf.chat.suspension.exists'));
}
$editor = new suspension\SuspensionEditor($suspension);
$editor->delete();
$action = new suspension\SuspensionAction(array($suspension), 'delete');
$action->executeAction();
}
$this->suspensionAction = new suspension\SuspensionAction(array(), 'create', array(
@ -30,7 +30,7 @@ class BanCommand extends MuteCommand {
'userID' => $this->user->userID,
'roomID' => ChatUtil::readUserData('roomID'),
'type' => suspension\Suspension::TYPE_BAN,
'time' => TIME_NOW + $this->time
'expires' => $this->expires
)
));
$this->suspensionAction->executeAction();

@ -19,12 +19,12 @@ class GbanCommand extends MuteCommand {
$room = new \chat\data\room\Room(null, array('roomID' => null));
if ($suspension = suspension\Suspension::getSuspensionByUserRoomAndType($this->user, $room, suspension\Suspension::TYPE_BAN)) {
if ($suspension->time > TIME_NOW + $this->time) {
if ($suspension->expires > $this->expires) {
throw new \wcf\system\exception\UserInputException('text', WCF::getLanguage()->get('wcf.chat.suspension.exists'));
}
$editor = new suspension\SuspensionEditor($suspension);
$editor->delete();
$action = new suspension\SuspensionAction(array($suspension), 'delete');
$action->executeAction();
}
$this->suspensionAction = new suspension\SuspensionAction(array(), 'create', array(
@ -32,7 +32,7 @@ class GbanCommand extends MuteCommand {
'userID' => $this->user->userID,
'roomID' => null,
'type' => suspension\Suspension::TYPE_BAN,
'time' => TIME_NOW + $this->time
'expires' => $this->expires
)
));
$this->suspensionAction->executeAction();

@ -19,12 +19,12 @@ class GmuteCommand extends MuteCommand {
$room = new \chat\data\room\Room(null, array('roomID' => null));
if ($suspension = suspension\Suspension::getSuspensionByUserRoomAndType($this->user, $room, suspension\Suspension::TYPE_MUTE)) {
if ($suspension->time > TIME_NOW + $this->time) {
if ($suspension->expires > $this->expires) {
throw new \wcf\system\exception\UserInputException('text', WCF::getLanguage()->get('wcf.chat.suspension.exists'));
}
$editor = new suspension\SuspensionEditor($suspension);
$editor->delete();
$action = new suspension\SuspensionAction(array($suspension), 'delete');
$action->executeAction();
}
$this->suspensionAction = new suspension\SuspensionAction(array(), 'create', array(
@ -32,7 +32,7 @@ class GmuteCommand extends MuteCommand {
'userID' => $this->user->userID,
'roomID' => null,
'type' => suspension\Suspension::TYPE_MUTE,
'time' => TIME_NOW + $this->time
'expires' => $this->expires
)
));
$this->suspensionAction->executeAction();

@ -49,7 +49,9 @@ class InfoCommand extends \chat\system\command\AbstractCommand {
$suspensions = \chat\data\suspension\Suspension::getSuspensionsForUser($this->user);
foreach ($suspensions as $roomSuspensions) {
foreach ($roomSuspensions as $typeSuspension) {
$dateTime = DateUtil::getDateTimeByTimestamp($typeSuspension->time);
if (!$typeSuspension->isValid()) continue;
$dateTime = DateUtil::getDateTimeByTimestamp($typeSuspension->expires);
$this->lines[$typeSuspension->type.'-'.$typeSuspension->roomID] = str_replace('%time%', DateUtil::format($dateTime, DateUtil::TIME_FORMAT), str_replace('%date%', DateUtil::format($dateTime, DateUtil::DATE_FORMAT), WCF::getLanguage()->get('wcf.date.dateTimeFormat')));
}
}

@ -16,7 +16,7 @@ use \wcf\system\WCF;
*/
class MuteCommand extends \chat\system\command\AbstractRestrictedCommand {
public $user = null;
public $time = 0;
public $expires = 0;
public $suspensionAction = null;
public $link = '';
public $room = null;
@ -27,8 +27,8 @@ class MuteCommand extends \chat\system\command\AbstractRestrictedCommand {
try {
list($username, $modifier) = explode(',', $commandHandler->getParameters(), 2);
$modifier = ChatUtil::timeModifier(\wcf\util\StringUtil::trim($modifier));
$this->time = strtotime($modifier, TIME_NOW);
$this->time = min(max(-0x80000000, $this->time), 0x7FFFFFFF);
$expires = strtotime($modifier, TIME_NOW);
$this->expires = min(max(-0x80000000, $expires), 0x7FFFFFFF);
}
catch (\wcf\system\exception\SystemException $e) {
throw new \chat\system\command\NotFoundException();
@ -49,7 +49,7 @@ class MuteCommand extends \chat\system\command\AbstractRestrictedCommand {
public function executeAction() {
if ($suspension = suspension\Suspension::getSuspensionByUserRoomAndType($this->user, $this->room, suspension\Suspension::TYPE_MUTE)) {
if ($suspension->time > $this->time) {
if ($suspension->expires > $this->expires) {
throw new \wcf\system\exception\UserInputException('text', WCF::getLanguage()->get('wcf.chat.suspension.exists'));
}
@ -62,7 +62,7 @@ class MuteCommand extends \chat\system\command\AbstractRestrictedCommand {
'userID' => $this->user->userID,
'roomID' => ChatUtil::readUserData('roomID'),
'type' => suspension\Suspension::TYPE_MUTE,
'time' => $this->time
'expires' => $this->expires
)
));
$this->suspensionAction->executeAction();
@ -92,7 +92,7 @@ class MuteCommand extends \chat\system\command\AbstractRestrictedCommand {
public function getMessage() {
return serialize(array(
'link' => $this->link,
'until' => $this->time,
'expires' => $this->expires,
'type' => str_replace(array('chat\system\command\commands\\', 'command'), '', strtolower(get_class($this)))
));
}

@ -15,7 +15,6 @@ use \wcf\system\WCF;
*/
class UnmuteCommand extends \chat\system\command\AbstractRestrictedCommand {
public $user = null;
public $time = 0;
public $suspensionAction = null;
public $link = '';
public $room = null;
@ -71,7 +70,6 @@ class UnmuteCommand extends \chat\system\command\AbstractRestrictedCommand {
public function getMessage() {
return serialize(array(
'link' => $this->link,
'until' => TIME_NOW + $this->time,
'type' => str_replace(array('chat\system\command\commands\\', 'command'), '', strtolower(get_class($this)))
));
}

@ -22,22 +22,22 @@ CREATE TABLE chat1_message (
color1 INT(10) NOT NULL DEFAULT 0,
color2 INT(10) NOT NULL DEFAULT 0,
KEY roomID (roomID),
KEY sender (sender),
KEY receiver (receiver)
KEY (roomID),
KEY (sender),
KEY (receiver)
);
DROP TABLE IF EXISTS chat1_room;
CREATE TABLE chat1_room (
roomID INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
topic VARCHAR(255) NOT NULL,
topic VARCHAR(255) NOT NULL DEFAULT '',
showOrder INT(10) NOT NULL DEFAULT 0,
permanent TINYINT(1) NOT NULL DEFAULT 1,
owner INT(10) DEFAULT NULL,
KEY showOrder (showOrder),
KEY owner (owner)
KEY (showOrder),
KEY (owner)
);
DROP TABLE IF EXISTS chat1_suspension;
@ -46,12 +46,12 @@ CREATE TABLE chat1_suspension (
userID INT(10) NOT NULL,
roomID INT(10) DEFAULT NULL,
type TINYINT(3) NOT NULL,
time INT(10) NOT NULL,
expires INT(10) NOT NULL,
UNIQUE KEY suspension (userID, roomID, type),
KEY roomID (roomID),
KEY type (type),
KEY time (time)
KEY (roomID),
KEY (type),
KEY (time)
);
ALTER TABLE chat1_message ADD FOREIGN KEY (receiver) REFERENCES wcf1_user (userID) ON DELETE CASCADE;

@ -107,10 +107,10 @@
<item name="chat.message.4"><![CDATA[ist jetzt wieder da.]]></item>
<!-- 5 = TYPE_MODERATE -->
<item name="chat.message.5.restore"><![CDATA[hat {@$link} zurückgesetzt.]]></item>
<item name="chat.message.5.mute"><![CDATA[hat {@$link} bis {@$until|plainTime} geknebelt.]]></item>
<item name="chat.message.5.ban"><![CDATA[hat {@$link} bis {@$until|plainTime} gebannt.]]></item>
<item name="chat.message.5.gmute"><![CDATA[hat {@$link} bis {@$until|plainTime} global geknebelt.]]></item>
<item name="chat.message.5.gban"><![CDATA[hat {@$link} bis {@$until|plainTime} global gebannt.]]></item>
<item name="chat.message.5.mute"><![CDATA[hat {@$link} bis {@$expires|plainTime} geknebelt.]]></item>
<item name="chat.message.5.ban"><![CDATA[hat {@$link} bis {@$expires|plainTime} gebannt.]]></item>
<item name="chat.message.5.gmute"><![CDATA[hat {@$link} bis {@$expires|plainTime} global geknebelt.]]></item>
<item name="chat.message.5.gban"><![CDATA[hat {@$link} bis {@$expires|plainTime} global gebannt.]]></item>
<item name="chat.message.5.unmute"><![CDATA[hat {@$link} entknebelt.]]></item>
<item name="chat.message.color.success"><![CDATA[Die Farbe wurde erfolgreich geändert.]]></item>

@ -15,7 +15,7 @@
</authorinformation>
<requiredpackages>
<requiredpackage minversion="2.0.0 Alpha 1">com.woltlab.wcf</requiredpackage>
<requiredpackage minversion="2.0.0 Beta 1">com.woltlab.wcf</requiredpackage>
<requiredpackage file="requirements/be.bastelstu.max.wcf.jCounter.tar">be.bastelstu.max.wcf.jCounter</requiredpackage>
<requiredpackage file="requirements/be.bastelstu.wcf.nodePush.tar">be.bastelstu.wcf.nodePush</requiredpackage>
</requiredpackages>