/**
 *	получение данных по модераторам и запись их в 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);
}
Example #2
0
 /**
  *	настройка на использование базы
  */
 public function SetDatabase($db = '')
 {
     // если указана база, используем ее
     if (is_object($db)) {
         $this->db = $db;
     } else {
         // и база еще не была настроена, настраиваем ее
         if (!isset($this->db)) {
             $this->db = GetDb();
         }
     }
 }
Example #3
0
function getPager($sql_count, $sql_query, $page, $pagesize, $isall = true)
{
    if (!$db) {
        $db = GetDb();
    }
    $querycount = $db->query($sql_count);
    $num = mysql_num_rows($querycount);
    $result = array();
    if (isall) {
        $startindex = ($page - 1) * $pagesize;
        //开始位置
        $sql_query = $sql_query . " limit " . $startindex . "," . $pagesize;
        $query = $db->query($sql_query);
        while ($rows = $db->fetch_array($query)) {
            $result[] = $rows;
        }
    }
    $db->close();
    return array("count" => $num, "list" => $result, "range" => $startindex . "-" . ($startindex + $pagesize));
}
Example #4
0
<?php

require_once 'core.php';
header('Content-Type: application/javascript');
$db = GetDb();
$smilesResult = $db->Query('SELECT * FROM chat_smile ORDER BY `page` ASC, `sid` ASC');
if ($smilesResult === FALSE) {
    SaveForDebug('Fetching smiles failed');
    return;
}
$smiles = array();
while ($smile = $smilesResult->fetch_assoc()) {
    $smile['roles'] = array();
    $smiles[$smile['code']] = $smile;
}
$rolesResult = $db->Query('SELECT * FROM role_smiles');
if ($rolesResult === FALSE) {
    SaveForDebug('Fetching role smiles failed');
    return;
}
$smile_roles = array();
while ($role = $rolesResult->fetch_assoc()) {
    $rid = intval($role['rid']);
    foreach (explode(',', $role['smiles']) as $smile) {
        if (array_key_exists($smile, $smiles)) {
            $smiles[$smile]['roles'][] = $rid;
        }
    }
}
$public = array();
$private = array();
Example #5
0
function OnGetBussionessSubItem()
{
    ShowMsg("OnGetBussionessSubItem");
    $industyid = $_GET['id'];
    //global $db;
    //global $dbaddr, $dbuser, $dbpwd, $dbname;
    $db = GetDb();
    if (null == $db) {
        ShowMsg("db created new in fun .");
        $db = new db_sql();
        $db->connect($dbaddr, $dbuser, $dbpwd, $dbname);
    }
    $sql = "select * from tb_bussinesssub where businessid='" . $industyid . "'";
    ShowMsg("query db width ." . $sql);
    $query = $db->query($sql);
    if (!$query) {
        echo GetErrorResult("GET_BU_SUB_ITEM", 2);
        return;
    }
    $count = $db->num_rows($query);
    if ($count < 0) {
        echo GetErrorResult("GET_BU_SUB_ITEM", 3);
        return;
    }
    ShowMsg("sql return count " . $count);
    $writer = new DhcXmlWriter();
    if (!$writer) {
        echo GetErrorResult("GET_BU_SUB_ITEM", 4);
        return TRUE;
    }
    $writer->AddXmlMsg("GET_BU_SUB_ITEM");
    $writer->AddXmlNode("RESULT");
    $writer->AddXmlAttribute("Code", 0);
    ShowMsg("begin to send result\r\n");
    while ($rows = $db->fetch_array($query)) {
        $writer->AddXmlNode("CHECK_ITEM");
        $writer->AddXmlAttribute("bussinesssubid", $rows['bussinesssubid']);
        $writer->AddXmlAttribute("bussinesssubname", $rows['bussinesssubname']);
        ////iconv("utf-8", "gbk",$rows['businessname']));
    }
    $xml = $writer->GetXmlData();
    unset($writer);
    if (!$xml) {
        SShowMsg("xml data error.");
        return 13;
    }
    if (strlen($xml) < 10) {
        ShowMsg("xml data length error." . strlen($xml));
        return 14;
    }
    ShowMsg("begin to send result\r\n");
    $db->close();
    echo $xml;
    return TRUE;
}
Example #6
0
    /**
     *	получение истории
     *	@param channelId id канала
     *	@param startDate дата начала
     *	@param endDate дата конца
     *	@param userNames имена пользователей, разделенные ;
     *	@param boolean isModeratorRequest флаг true, если запрос от модератора, иначе false
     *	@param historyCache имя файла для сохранения кэша, если не задано, будет
     *	использоваться 
     */
    public function Get($channelId, $startDate, $endDate, $userNames = '', $isModeratorRequest = false, $historyCache = '')
    {
        if ($isModeratorRequest == true) {
            $timeDifference = CHAT_HISTORY_MAX_TIME_DIFFERENCE_MODERATOR;
        } else {
            $timeDifference = CHAT_HISTORY_MAX_TIME_DIFFERENCE;
        }
        $startDate = $this->PrepareDate($startDate);
        $endDate = $this->PrepareDate($endDate);
        $startTime = strtotime($startDate);
        $endTime = strtotime($endDate);
        if ($startTime === FALSE || $endTime === FALSE || $endTime - $startTime > $timeDifference) {
            $result = array('messages' => '', 'error' => CHAT_HISTORY_CHECK_PARAMS);
            return $result;
        }
        $options = '';
        $userNamesCopy = '';
        if ($userNames != '') {
            $userNames = $this->PrepareUserNames($userNames);
            $userNamesCopy = $userNames;
            $userNames = explode(';', $userNames);
            if (count($userNames) > 0) {
                $options = '(';
                $operator = '';
                $this->db = GetDb();
                foreach ($userNames as $userName) {
                    list($userName) = $this->db->PrepareParams($userName);
                    // если длина логина больше максимальной, прислали что-то не то
                    if (mb_strlen($userName) > CHAT_MAX_USERNAME_LENGTH) {
                        SaveForDebug($userNamesCopy . "\n\n" . $userName);
                        $result = array('messages' => '', 'error' => CHAT_USERNAME_TOO_LONG);
                        return $result;
                    }
                    $options .= $operator . 'name="' . $userName . '"';
                    if ($operator === '') {
                        $operator = ' OR ';
                    }
                }
                $options .= ') AND ';
            }
        }
        if (!($channelId == '' || $channelId == 'all')) {
            $channelId = (int) $channelId;
            $options .= 'channelId = "' . $channelId . '" AND ';
        }
        $queryString = '
			SELECT id, chat_message.uid, name, message, date, channelId, (
				SELECT IFNULL((
					SELECT min(rid)
					FROM users_roles
					WHERE users_roles.uid = chat_message.uid), 2
				)
			) as rid
			FROM chat_message
			INNER JOIN users using(uid)
			WHERE ' . $options . '
			date BETWEEN STR_TO_DATE("' . $startDate . '", "%Y-%m-%d %H:%i:%s")
			AND STR_TO_DATE("' . $endDate . '", "%Y-%m-%d %H:%i:%s")
			AND deletedBy is NULL';
        //echo '<!--' . $queryString . '-->';exit;
        $this->db = GetDb();
        $queryResult = $this->db->Query($queryString);
        if ($queryResult === false) {
            SaveForDebug($queryResult);
            $result = array('messages' => '', 'error' => CHAT_RUNTIME_ERROR . ' history 1');
            return $result;
        }
        $messages = array();
        while ($msg = $queryResult->fetch_assoc()) {
            $messages[] = $msg;
        }
        $dataJson = json_encode(array('messages' => $messages));
        if ($historyCache == '') {
            $historyCache = $channelId . '_' . $startDate . '_' . $endDate . '_' . $userNamesCopy . '.json';
            $historyCache = preg_replace('#[\\s]+#uis', '_', $historyCache);
        }
        $historyCache = CHAT_HISTORY_MEMFS_DIR . '/' . $historyCache;
        file_put_contents($historyCache, $dataJson);
        $historyCacheGz = $historyCache . '.gz';
        $historyCacheGzFile = gzopen($historyCacheGz, 'w');
        gzwrite($historyCacheGzFile, $dataJson);
        gzclose($historyCacheGzFile);
        $result = array('messages' => $messages, 'error' => '');
        return $result;
    }
    /**
     *	получение истории автомодерации
     *	@param int channelId id канала
     *	@param string startDate дата начала
     *	@param string endDate дата конца
     *	@param string userNames имена модераторов, разделенные ;
     *	@param string bannedNickNames имена забаненных пользователей, разделенные ;
     *	@param boolean isModeratorRequest флаг true, если запрос от модератора, иначе false
     *	@param string historyCache имя файла для сохранения кэша, если не задано, будет
     *	использоваться last.json
     */
    public function Get($channelId, $startDate, $endDate, $userNames = '', $bannedNickNames = '', $isModeratorRequest = false, $historyCache = '')
    {
        if ($isModeratorRequest == true) {
            $timeDifference = CHAT_HISTORY_MAX_TIME_DIFFERENCE_MODERATOR;
        } else {
            $timeDifference = CHAT_HISTORY_MAX_TIME_DIFFERENCE;
        }
        $startDate = $this->PrepareDate($startDate);
        $endDate = $this->PrepareDate($endDate);
        $startTime = strtotime($startDate);
        $endTime = strtotime($endDate);
        if ($startTime === FALSE || $endTime === FALSE || $endTime - $startTime > $timeDifference) {
            $result = array('messages' => '', 'error' => CHAT_HISTORY_CHECK_PARAMS);
            return $result;
        }
        $options = '';
        $userNamesCopy = '';
        if ($userNames != '') {
            $userNames = $this->PrepareNickNames($userNames);
            $userNamesCopy = $userNames;
            $userNames = explode(';', $userNames);
            if (count($userNames) > 0) {
                $options = '(';
                $operator = '';
                $this->db = GetDb();
                foreach ($userNames as $currentNick) {
                    list($currentNick) = $this->db->PrepareParams($currentNick);
                    // если длина логина больше максимальной, прислали что-то не то
                    if (mb_strlen($currentNick) > CHAT_MAX_USERNAME_LENGTH) {
                        SaveForDebug($userNamesCopy . "\n\n" . $currentNick);
                        $result = array('messages' => '', 'error' => CHAT_USERNAME_TOO_LONG);
                        return $result;
                    }
                    $options .= $operator . ' mu.name = "' . $currentNick . '"';
                    if ($operator === '') {
                        $operator = ' OR ';
                    }
                }
                $options .= ') AND ';
            }
        }
        $bannedNickNamesCopy = '';
        if ($bannedNickNames != '') {
            $bannedNickNames = $this->PrepareNickNames($bannedNickNames);
            $bannedNickNamesCopy = $bannedNickNames;
            $bannedNickNames = explode(';', $bannedNickNames);
            if (count($bannedNickNames) > 0) {
                $options .= '(';
                $operator = '';
                $this->db = GetDb();
                foreach ($bannedNickNames as $currentNick) {
                    list($currentNick) = $this->db->PrepareParams($currentNick);
                    // если длина логина больше максимальной, прислали что-то не то
                    if (mb_strlen($currentNick) > CHAT_MAX_USERNAME_LENGTH) {
                        SaveForDebug($userNamesCopy . "\n\n" . $currentNick);
                        $result = array('messages' => '', 'error' => CHAT_USERNAME_TOO_LONG);
                        return $result;
                    }
                    $options .= $operator . ' ru.name = "' . $currentNick . '"';
                    if ($operator === '') {
                        $operator = ' OR ';
                    }
                }
                $options .= ') AND ';
            }
        }
        $channelOptions = '';
        if (!($channelId == '' || $channelId == 'all')) {
            $channelId = (int) $channelId;
            $options .= 'channelId = "' . $channelId . '" AND ';
        }
        $queryString = '
			SELECT chat_ban.id, ru.uid as bannedUserId, ru.name as userName,
			chat_ban.banExpirationTime, chat_ban.banMessageId, chat_ban.banTime,
			chat_ban.banDuration, chat_ban.banModificationUserId,
			chat_message.message as bannedForMessage, chat_ban.status as chatBanStatus,
			chat_ban.banReasonId, mu.name as moderatorName, banModificationReason
			FROM chat_ban
			INNER JOIN users AS ru ON ru.uid = chat_ban.uid
			INNER JOIN users AS mu ON mu.uid = chat_ban. moderatorId
			LEFT OUTER JOIN chat_message on chat_message.id = banMessageId
			WHERE ' . $options . '
			banTime BETWEEN "' . strtotime($startDate) . '" AND "' . strtotime($endDate) . '"';
        //echo '<!--' . $queryString . '-->';
        $this->db = GetDb();
        $queryResult = $this->db->Query($queryString);
        if ($queryResult === false) {
            SaveForDebug($queryResult);
            $result = array('messages' => '', 'error' => CHAT_RUNTIME_ERROR . ' am history 1');
            return $result;
        }
        $messages = array();
        while ($msg = $queryResult->fetch_assoc()) {
            $messages[] = $msg;
        }
        $dataJson = json_encode(array('messages' => $messages));
        if ($historyCache == '') {
            $historyCache = $channelId . '_' . $startDate . '_' . $endDate . '_' . $userNamesCopy . '_' . $bannedNickNamesCopy . '.json';
            $historyCache = preg_replace('#[\\s]+#uis', '_', $historyCache);
        }
        $historyCache = CHAT_AUTOMODERATION_HISTORY_MEMFS_DIR . '/' . $historyCache;
        file_put_contents($historyCache, $dataJson);
        $historyCacheGz = $historyCache . '.gz';
        $historyCacheGzFile = gzopen($historyCacheGz, 'w');
        gzwrite($historyCacheGzFile, $dataJson);
        gzclose($historyCacheGzFile);
        $result = array('messages' => $messages, 'error' => '');
        return $result;
    }