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;
|
namespace wcf\acp\form;
|
||||||
use \wcf\system\exception\UserInputException;
|
use \wcf\system\exception\UserInputException;
|
||||||
use \wcf\system\language\I18nHandler;
|
use \wcf\system\language\I18nHandler;
|
||||||
use \wcf\system\package\PackageDependencyHandler;
|
|
||||||
use \wcf\system\WCF;
|
use \wcf\system\WCF;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -99,7 +98,7 @@ public function save() {
|
|||||||
$roomID = $returnValues['returnValues']->roomID;
|
$roomID = $returnValues['returnValues']->roomID;
|
||||||
|
|
||||||
if (!I18nHandler::getInstance()->isPlainValue('title')) {
|
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
|
// update title
|
||||||
$chatRoomEditor->update(array(
|
$chatRoomEditor->update(array(
|
||||||
@ -108,7 +107,7 @@ public function save() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!I18nHandler::getInstance()->isPlainValue('topic')) {
|
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
|
// update topic
|
||||||
$chatRoomEditor->update(array(
|
$chatRoomEditor->update(array(
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace wcf\acp\form;
|
namespace wcf\acp\form;
|
||||||
use \wcf\system\language\I18nHandler;
|
use \wcf\system\language\I18nHandler;
|
||||||
use \wcf\system\package\PackageDependencyHandler;
|
|
||||||
use \wcf\system\WCF;
|
use \wcf\system\WCF;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -64,20 +63,20 @@ public function save() {
|
|||||||
|
|
||||||
$this->title = 'wcf.chat.room.title'.$this->roomObj->roomID;
|
$this->title = 'wcf.chat.room.title'.$this->roomObj->roomID;
|
||||||
if (I18nHandler::getInstance()->isPlainValue('title')) {
|
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');
|
$this->title = I18nHandler::getInstance()->getValue('title');
|
||||||
}
|
}
|
||||||
else {
|
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;
|
$this->topic = 'wcf.chat.room.topic'.$this->roomObj->roomID;
|
||||||
if (I18nHandler::getInstance()->isPlainValue('topic')) {
|
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');
|
$this->topic = I18nHandler::getInstance()->getValue('topic');
|
||||||
}
|
}
|
||||||
else {
|
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);
|
\wcf\system\acl\ACLHandler::getInstance()->save($this->roomID, $this->objectTypeID);
|
||||||
@ -105,8 +104,8 @@ public function readData() {
|
|||||||
parent::readData();
|
parent::readData();
|
||||||
|
|
||||||
if (!count($_POST)) {
|
if (!count($_POST)) {
|
||||||
I18nHandler::getInstance()->setOptions('title', PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat'), $this->roomObj->title, 'wcf.chat.room.title\d+');
|
I18nHandler::getInstance()->setOptions('title', \wcf\util\ChatUtil::getPackageID(), $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('topic', \wcf\util\ChatUtil::getPackageID(), $this->roomObj->topic, 'wcf.chat.room.topic\d+');
|
||||||
|
|
||||||
$this->title = $this->roomObj->title;
|
$this->title = $this->roomObj->title;
|
||||||
$this->topic = $this->roomObj->topic;
|
$this->topic = $this->roomObj->topic;
|
||||||
|
@ -23,17 +23,19 @@ class ChatMessageEditor extends \wcf\data\DatabaseObjectEditor {
|
|||||||
* @param integer $lifetime Delete messages older that this time.
|
* @param integer $lifetime Delete messages older that this time.
|
||||||
* @return integer Number of deleted messages.
|
* @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
|
$sql = "SELECT
|
||||||
".static::getDatabaseIndexName()."
|
".$baseClass::getDatabaseTableIndexName()."
|
||||||
FROM
|
FROM
|
||||||
".static::getDatabaseTableName()."
|
".$baseClass::getDatabaseTableName()."
|
||||||
WHERE
|
WHERE
|
||||||
time < ?";
|
time < ?";
|
||||||
$statement = \wcf\system\WCF::getDB()->prepareStatement($sql);
|
$stmt = \wcf\system\WCF::getDB()->prepareStatement($sql);
|
||||||
$statement->execute(TIME_NOW - $lifetime);
|
$stmt->execute(array(TIME_NOW - $lifetime));
|
||||||
$objectIDs = array();
|
$objectIDs = array();
|
||||||
while ($objectIDs[] = $statement->fetchColumn());
|
while ($objectIDs[] = $stmt->fetchColumn());
|
||||||
return static::deleteAll($objectIDs);
|
|
||||||
|
return self::deleteAll($objectIDs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ public function __toString() {
|
|||||||
* @return integer
|
* @return integer
|
||||||
*/
|
*/
|
||||||
public function countUsers() {
|
public function countUsers() {
|
||||||
$packageID = \wcf\system\package\PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||||
|
|
||||||
$sql = "SELECT
|
$sql = "SELECT
|
||||||
count(*) as count
|
count(*) as count
|
||||||
@ -100,7 +100,7 @@ public function getTitle() {
|
|||||||
* @return array<\wcf\data\user\User>
|
* @return array<\wcf\data\user\User>
|
||||||
*/
|
*/
|
||||||
public function getUsers() {
|
public function getUsers() {
|
||||||
$packageID = \wcf\system\package\PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||||
|
|
||||||
$sql = "SELECT
|
$sql = "SELECT
|
||||||
userID
|
userID
|
||||||
|
@ -17,19 +17,13 @@ class ChatRoomEditor extends \wcf\data\DatabaseObjectEditor implements \wcf\data
|
|||||||
*/
|
*/
|
||||||
protected static $baseClass = '\wcf\data\chat\room\ChatRoom';
|
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()
|
* @see \wcf\data\DatabaseObjectEditor::deleteAll()
|
||||||
*/
|
*/
|
||||||
public static function deleteAll(array $objectIDs = array()) {
|
public static function deleteAll(array $objectIDs = array()) {
|
||||||
parent::deleteAll($objectIDs);
|
parent::deleteAll($objectIDs);
|
||||||
$packageID = \wcf\system\package\PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||||
|
|
||||||
WCF::getDB()->beginTransaction();
|
WCF::getDB()->beginTransaction();
|
||||||
foreach ($objectIDs as $objectID) {
|
foreach ($objectIDs as $objectID) {
|
||||||
@ -40,4 +34,40 @@ public static function deleteAll(array $objectIDs = array()) {
|
|||||||
|
|
||||||
return count($objectIDs);
|
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 {
|
try {
|
||||||
\wcf\util\ChatUtil::writeUserData(array('lastSeen' => end($this->newestMessages)->messageID));
|
\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));
|
\wcf\util\ChatUtil::writeUserData(array('lastSeen' => 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,12 +161,15 @@ public function show() {
|
|||||||
if (!WCF::getUser()->userID) {
|
if (!WCF::getUser()->userID) {
|
||||||
throw new \wcf\system\exception\PermissionDeniedException();
|
throw new \wcf\system\exception\PermissionDeniedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
\wcf\system\menu\page\PageMenu::getInstance()->setActiveMenuItem('wcf.header.menu.chat');
|
\wcf\system\menu\page\PageMenu::getInstance()->setActiveMenuItem('wcf.header.menu.chat');
|
||||||
|
|
||||||
// remove index breadcrumb
|
// remove index breadcrumb
|
||||||
WCF::getBreadcrumbs()->remove(0);
|
WCF::getBreadcrumbs()->remove(0);
|
||||||
|
|
||||||
parent::show();
|
parent::show();
|
||||||
// break if not ajax
|
|
||||||
|
// break if not using ajax
|
||||||
if ($this->useTemplate) exit;
|
if ($this->useTemplate) exit;
|
||||||
@header('Content-type: application/json');
|
@header('Content-type: application/json');
|
||||||
|
|
||||||
|
@ -31,9 +31,9 @@ public function getData(array $cacheResource) {
|
|||||||
FROM wcf".WCF_N."_acl_option acl_option,
|
FROM wcf".WCF_N."_acl_option acl_option,
|
||||||
wcf".WCF_N."_acl_option_to_group option_to_group
|
wcf".WCF_N."_acl_option_to_group option_to_group
|
||||||
".$conditionBuilder;
|
".$conditionBuilder;
|
||||||
$statement = WCF::getDB()->prepareStatement($sql);
|
$stmt = WCF::getDB()->prepareStatement($sql);
|
||||||
$statement->execute($conditionBuilder->getParameters());
|
$stmt->execute($conditionBuilder->getParameters());
|
||||||
while ($row = $statement->fetchArray()) {
|
while ($row = $stmt->fetchArray()) {
|
||||||
if (!isset($data[$row['roomID']][$row['permission']])) $data[$row['roomID']][$row['permission']] = $row['optionValue'];
|
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']];
|
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()
|
* @see \wcf\system\SingletonFactory::init()
|
||||||
*/
|
*/
|
||||||
protected function init() {
|
protected function init() {
|
||||||
$packageID = PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||||
$ush = \wcf\system\user\storage\UserStorageHandler::getInstance();
|
$ush = \wcf\system\user\storage\UserStorageHandler::getInstance();
|
||||||
|
|
||||||
// get groups permissions
|
// get groups permissions
|
||||||
@ -58,9 +58,9 @@ protected function init() {
|
|||||||
FROM wcf".WCF_N."_acl_option acl_option,
|
FROM wcf".WCF_N."_acl_option acl_option,
|
||||||
wcf".WCF_N."_acl_option_to_user option_to_user
|
wcf".WCF_N."_acl_option_to_user option_to_user
|
||||||
".$conditionBuilder;
|
".$conditionBuilder;
|
||||||
$statement = WCF::getDB()->prepareStatement($sql);
|
$stmt = WCF::getDB()->prepareStatement($sql);
|
||||||
$statement->execute($conditionBuilder->getParameters());
|
$stmt->execute($conditionBuilder->getParameters());
|
||||||
while ($row = $statement->fetchArray()) {
|
while ($row = $stmt->fetchArray()) {
|
||||||
$userPermissions[$row['roomID']][$row['permission']] = $row['optionValue'];
|
$userPermissions[$row['roomID']][$row['permission']] = $row['optionValue'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,7 +97,7 @@ public function getPermission(\wcf\data\chat\room\ChatRoom $room, $permission) {
|
|||||||
* Clears the cache.
|
* Clears the cache.
|
||||||
*/
|
*/
|
||||||
public static function clearCache() {
|
public static function clearCache() {
|
||||||
$packageID = PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
$packageID = \wcf\util\ChatUtil::getPackageID();
|
||||||
$ush = \wcf\system\user\storage\UserStorageHandler::getInstance();
|
$ush = \wcf\system\user\storage\UserStorageHandler::getInstance();
|
||||||
|
|
||||||
$ush->resetAll('chatUserPermissions', $packageID);
|
$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]?,?)+)';
|
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);
|
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.
|
* 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.
|
* 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) {
|
public static function readUserData($field) {
|
||||||
$ush = UserStorageHandler::getInstance();
|
$ush = UserStorageHandler::getInstance();
|
||||||
$packageID = PackageDependencyHandler::getInstance()->getPackageID('timwolla.wcf.chat');
|
$packageID = self::getPackageID();
|
||||||
|
|
||||||
// load storage
|
// load storage
|
||||||
$ush->loadStorage(array(WCF::getUser()->userID), $packageID);
|
$ush->loadStorage(array(WCF::getUser()->userID), $packageID);
|
||||||
@ -79,30 +114,6 @@ public static function readUserData($field) {
|
|||||||
else return $data[WCF::getUser()->userID];
|
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.
|
* Splits a string into smaller chunks.
|
||||||
* UTF-8 safe version of str_split().
|
* UTF-8 safe version of str_split().
|
||||||
@ -175,4 +186,18 @@ public static function timeModifier($time) {
|
|||||||
|
|
||||||
return (int) round($result, 0);
|
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