コード例 #1
0
/**
 *	получение данных по модераторам и запись их в memfs и memcache
 *	moderatorsDetails[ uid ] = array( name => '', bansCount => '' )
 *	содержит uid, имя модератора и, возможно, кол-во банов bansCount,
 *	которое устанавливается в chat.php при бане
 */
function DumpModeratorsDetails()
{
    global $memcache;
    //$memcache->Delete( MODERATORS_DETAILS_MEMCACHE_KEY );
    $moderatorsDetails = $memcache->Get(MODERATORS_DETAILS_MEMCACHE_KEY);
    //SaveForDebug( 'cron dump moder details debug, get from memcache: ' . var_export( $moderatorsDetails, true ) );
    // попытка считать статистику из файла, если ее нет в memcache
    if ($moderatorsDetails === FALSE) {
        $moderatorsDetails = GetModeratorDetailsFromFile();
    }
    if ($moderatorsDetails === FALSE) {
        //получаем из базы
        $queryString = '
			SELECT users.uid, name
			FROM users
			INNER JOIN users_roles using(uid)
			WHERE rid IN (3,4,5)
			AND status = 1
			GROUP BY users.uid';
        $db = GetDb();
        $queryResult = $db->Query($queryString);
        if ($queryResult === FALSE) {
            SaveForDebug(CHAT_RUNTIME_ERROR . ' cron dump moderrators details 1');
        }
        while ($moderatorDetail = $queryResult->fetch_assoc()) {
            $moderatorsDetails[$moderatorDetail['uid']]['name'] = $moderatorDetail['name'];
        }
        //SaveForDebug( 'moderatorsDetails dump from bd' );
    }
    $memcache->Set(MODERATORS_DETAILS_MEMCACHE_KEY, $moderatorsDetails, CHAT_MODERATORS_DETAILS_TTL);
    //SaveForDebug( 'send to memcache: ' . var_export( $moderatorsDetails, true ) );
    $dataJS = 'var moderatorsDetails = ' . json_encode($moderatorsDetails);
    file_put_contents(CHAT_MODERATORS_DETAILS, $dataJS);
}
コード例 #2
0
var_dump( $banInfo );
exit;
*/
global $memcache;
$memcache->Set(PRIME_TIME_ADVERT_FROM_STREAMER, 'streamer test 15', 15);
$memcache->Set(PRIME_TIME_ADVERT_FROM_USER, 'user 30 :s:notbad: :s:kawai: :s:joyful:', 30);
$test = $memcache->Get(PRIME_TIME_ADVERT_FROM_STREAMER);
var_dump($test);
$test = $memcache->Get(PRIME_TIME_ADVERT_FROM_USER);
var_dump($test);
exit;
$memcache->Delete(MODERATORS_DETAILS_MEMCACHE_KEY);
$moderatorsDetails = $memcache->Get(MODERATORS_DETAILS_MEMCACHE_KEY);
var_dump($moderatorsDetails);
$moderatorsDetails = $memcache->Get(MODERATORS_DETAILS_MEMCACHE_KEY);
var_dump(GetModeratorDetailsFromFile());
exit;
if (empty($_COOKIE[DRUPAL_SESSION]) || preg_match('/[^a-z\\d]+/i', $_COOKIE[DRUPAL_SESSION])) {
    exit;
}
$drupalSession = $_COOKIE[DRUPAL_SESSION];
$chatAuthMemcacheKey = 'ChatUserInfo_' . $drupalSession;
$memcacheAuthInfo = $memcache->Get($chatAuthMemcacheKey);
var_dump($memcacheAuthInfo);
$memcache->Delete($chatAuthMemcacheKey);
$memcacheAuthInfo = $memcache->Get($chatAuthMemcacheKey);
var_dump($memcacheAuthInfo);
exit;
// relogin banned
$uid = (int) $_GET['uid'];
$banInfoMemcacheKey = 'Chat_uid_' . $uid . '_BanInfo';
コード例 #3
0
ファイル: chat.php プロジェクト: sc2tvru-main/chat-sc2tv
    /**
    *  бан пользователя
    *  @param int banUid id пользователя, которого баним
    *  @param string banUserName его имя
    *  @param int banDurationInMin длительность бана в минутах
    *  @param int banMessageId id сообщения, за которое выдается бан
    *	@param int channelId id канала юзера
    *  @param int banReasonId id причины бана, для модеров 0
    *  @param bool isAutoBan если автобан, TRUE, иначе FALSE
    *  @return array возвращает массив вида
    *  array(
    			'code' => 0,// код результата: 0 для ошибки | 1 для успеха
    			'error' => 'hack';// текст ошибки
    		)
    */
    public function BanUser($banUid, $banUserName, $banDurationInMin, $banMessageId, $channelId, $banReasonId = 0, $isAutoBan = FALSE)
    {
        $banUid = (int) $banUid;
        $banMessageId = (int) $banMessageId;
        $banReasonId = (int) $banReasonId;
        $banDurationInMin = (int) $banDurationInMin;
        $channelId = (int) $channelId;
        // выдаем ошибку, если есть права, но неправильный id сообщения
        if ($this->user['rights'] === 1 && $banMessageId < 0 || $this->user['rights'] != 1 && $isAutoBan === FALSE || $banUid === 0 || $banUserName === '' || $banDurationInMin === 0 || $banReasonId < 0) {
            SaveForDebug(var_export($_REQUEST, TRUE));
            $result = array('code' => 0, 'error' => CHAT_RUNTIME_ERROR . '2');
            return $result;
        }
        $banDuration = $banDurationInMin * 60;
        $banExpirationTime = CURRENT_TIME + $banDuration;
        // проверяем флаг в memcache на случай бана от модератора или граждан
        $banInfoMemcacheKey = 'Chat_uid_' . $banUid . '_BanInfo';
        // делаем через Add, чтобы одновременно проверить отсутствие флага
        // и установить его
        $isUserBanned = $this->memcache->Add($banInfoMemcacheKey, array('banTime' => CURRENT_TIME, 'banExpirationTime' => $banExpirationTime), $banDuration);
        if ($isUserBanned === FALSE) {
            $result = array('code' => 0, 'error' => 'Уже забанен');
            return $result;
        }
        list($banUserName) = $this->db->PrepareParams($banUserName);
        $moderatorName = $this->user['name'];
        $moderatorId = $this->user['uid'];
        $queryString = '
			INSERT INTO chat_ban
			( uid, moderatorId, banExpirationTime, banMessageId, banReasonId, banTime,
			banDuration )
			VALUES( "' . $banUid . '", "' . $moderatorId . '", "' . $banExpirationTime . '", "' . $banMessageId . '", "' . $banReasonId . '", "' . CURRENT_TIME . '", "' . $banDuration . '")';
        $queryResult = $this->db->Query($queryString);
        if ($queryResult === FALSE) {
            // в случае ошибки с запросом удаляем флаг в мемкеше,
            // чтобы юзера можно было забанить в следующий раз
            $this->memcache->Delete($banInfoMemcacheKey);
            $result = array('code' => 0, 'error' => CHAT_RUNTIME_ERROR . '3');
            return $result;
        }
        if (CHAT_DELETE_BANNED_USERS_MESSAGE && $isAutoBan === FALSE) {
            $queryString = '
				UPDATE chat_message
				SET deletedBy = "' . $moderatorId . '"
				WHERE id = "' . $banMessageId . '"';
            $queryResult = $this->db->Query($queryString);
            if ($queryResult === FALSE) {
                $this->memcache->Delete($banInfoMemcacheKey);
                $result = array('code' => 0, 'error' => CHAT_RUNTIME_ERROR . '4');
                return $result;
            }
        }
        // сохраняем для модераторов кол-во банов
        if ($this->user['type'] === 'chatAdmin') {
            $moderatorsDetails = $this->memcache->Get(MODERATORS_DETAILS_MEMCACHE_KEY);
            // попытка считать статистику из файла, если ее нет в memcache
            if ($moderatorsDetails === FALSE) {
                $moderatorsDetails = GetModeratorDetailsFromFile();
            }
            if ($moderatorsDetails !== FALSE) {
                if (isset($moderatorsDetails[$moderatorId])) {
                    // TODO += ?
                    if (isset($moderatorsDetails[$moderatorId]['bansCount'])) {
                        $moderatorsDetails[$moderatorId]['bansCount'] = $moderatorsDetails[$moderatorId]['bansCount'] + 1;
                    } else {
                        $moderatorsDetails[$moderatorId]['bansCount'] = 1;
                    }
                } else {
                    $moderatorsDetails[$moderatorId] = array('name' => $moderatorName, 'bansCount' => 1);
                }
                $this->memcache->Set(MODERATORS_DETAILS_MEMCACHE_KEY, $moderatorsDetails, CHAT_MODERATORS_DETAILS_TTL);
            }
        }
        if (!$isAutoBan) {
            // кэш текущего канала
            $this->WriteChannelCache($channelId);
            // кэш модераторов
            $this->WriteChannelCache(-1);
        }
        $message = $moderatorName . ' забанил ' . $banUserName . ' на ' . $banDurationInMin . ' минут.';
        $this->WriteSystemMessage($message);
        $result = array('code' => 1, 'error' => '');
        return $result;
    }