2009-05-10 10:50:39 +03:00
|
|
|
|
<?php
|
2014-10-08 08:20:29 +03:00
|
|
|
|
/*
|
|
|
|
|
* LiveStreet CMS
|
|
|
|
|
* Copyright © 2013 OOO "ЛС-СОФТ"
|
|
|
|
|
*
|
|
|
|
|
* ------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* Official site: www.livestreetcms.com
|
|
|
|
|
* Contact e-mail: office@livestreetcms.com
|
|
|
|
|
*
|
|
|
|
|
* GNU General Public License, version 2:
|
|
|
|
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
|
|
|
*
|
|
|
|
|
* ------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* @link http://www.livestreetcms.com
|
|
|
|
|
* @copyright 2013 OOO "ЛС-СОФТ"
|
|
|
|
|
* @author Maxim Mzhelskiy <rus.engine@gmail.com>
|
|
|
|
|
*
|
|
|
|
|
*/
|
2008-09-21 09:36:57 +03:00
|
|
|
|
|
2012-06-24 16:32:29 +03:00
|
|
|
|
/**
|
|
|
|
|
* Объект маппера для работы с БД
|
|
|
|
|
*
|
2014-10-08 08:20:29 +03:00
|
|
|
|
* @package application.modules.talk
|
2012-06-24 16:32:29 +03:00
|
|
|
|
* @since 1.0
|
|
|
|
|
*/
|
2014-10-08 11:49:34 +03:00
|
|
|
|
class ModuleTalk_MapperTalk extends Mapper
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Добавляет новую тему разговора
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTalk_EntityTalk $oTalk Объект сообщения
|
|
|
|
|
* @return int|bool
|
|
|
|
|
*/
|
|
|
|
|
public function AddTalk(ModuleTalk_EntityTalk $oTalk)
|
|
|
|
|
{
|
|
|
|
|
$sql = "INSERT INTO " . Config::Get('db.table.talk') . "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
(user_id,
|
|
|
|
|
talk_title,
|
|
|
|
|
talk_text,
|
|
|
|
|
talk_date,
|
2009-02-01 20:08:29 +02:00
|
|
|
|
talk_date_last,
|
2012-04-03 07:19:39 +03:00
|
|
|
|
talk_user_id_last,
|
|
|
|
|
talk_user_ip
|
2008-09-21 09:36:57 +03:00
|
|
|
|
)
|
2012-04-03 07:19:39 +03:00
|
|
|
|
VALUES(?d, ?, ?, ?, ?, ?, ?)
|
2012-06-24 16:32:29 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($iId = $this->oDb->query($sql, $oTalk->getUserId(), $oTalk->getTitle(), $oTalk->getText(),
|
|
|
|
|
$oTalk->getDate(), $oTalk->getDateLast(), $oTalk->getUserIdLast(), $oTalk->getUserIp())
|
|
|
|
|
) {
|
|
|
|
|
return $iId;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаление письма из БД
|
|
|
|
|
*
|
|
|
|
|
* @param int $iTalkId ID разговора
|
|
|
|
|
*/
|
|
|
|
|
public function DeleteTalk($iTalkId)
|
|
|
|
|
{
|
|
|
|
|
// Удаление беседы
|
|
|
|
|
$sql = 'DELETE FROM ' . Config::Get('db.table.talk') . ' WHERE talk_id = ?d';
|
|
|
|
|
$this->oDb->query($sql, $iTalkId);
|
|
|
|
|
// Физическое удаление пользователей беседы (не флагом)
|
|
|
|
|
$sql = 'DELETE FROM ' . Config::Get('db.table.talk_user') . ' WHERE talk_id = ?d';
|
|
|
|
|
$this->oDb->query($sql, $iTalkId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Обновление разговора
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTalk_EntityTalk $oTalk Объект сообщения
|
|
|
|
|
* @return int
|
|
|
|
|
*/
|
|
|
|
|
public function UpdateTalk(ModuleTalk_EntityTalk $oTalk)
|
|
|
|
|
{
|
|
|
|
|
$sql = "UPDATE " . Config::Get('db.table.talk') . " SET
|
2009-07-05 00:41:42 +03:00
|
|
|
|
talk_date_last = ? ,
|
2012-04-03 07:19:39 +03:00
|
|
|
|
talk_user_id_last = ? ,
|
2012-04-09 12:39:40 +03:00
|
|
|
|
talk_comment_id_last = ? ,
|
2012-04-03 07:19:39 +03:00
|
|
|
|
talk_count_comment = ?
|
2009-02-01 20:08:29 +02:00
|
|
|
|
WHERE
|
|
|
|
|
talk_id = ?d
|
2012-06-24 16:32:29 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $oTalk->getDateLast(), $oTalk->getUserIdLast(), $oTalk->getCommentIdLast(),
|
|
|
|
|
$oTalk->getCountComment(), $oTalk->getId());
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получить список разговоров по списку айдишников
|
|
|
|
|
*
|
|
|
|
|
* @param array $aArrayId Список ID сообщений
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetTalksByArrayId($aArrayId)
|
|
|
|
|
{
|
|
|
|
|
if (!is_array($aArrayId) or count($aArrayId) == 0) {
|
|
|
|
|
return array();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT
|
2009-07-05 00:41:42 +03:00
|
|
|
|
t.*
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk') . " as t
|
2009-07-05 00:41:42 +03:00
|
|
|
|
WHERE
|
|
|
|
|
t.talk_id IN(?a)
|
|
|
|
|
ORDER BY FIELD(t.talk_id,?a) ";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aTalks = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql, $aArrayId, $aArrayId)) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aTalks[] = Engine::GetEntity('Talk', $aRow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aTalks;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получить список отношений разговор-юзер по списку айдишников
|
|
|
|
|
*
|
|
|
|
|
* @param array $aArrayId Список ID сообщений
|
|
|
|
|
* @param int $sUserId ID пользователя
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetTalkUserByArray($aArrayId, $sUserId)
|
|
|
|
|
{
|
|
|
|
|
if (!is_array($aArrayId) or count($aArrayId) == 0) {
|
|
|
|
|
return array();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT
|
2009-07-05 00:41:42 +03:00
|
|
|
|
t.*
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk_user') . " as t
|
2009-07-05 00:41:42 +03:00
|
|
|
|
WHERE
|
2010-04-04 17:58:11 +03:00
|
|
|
|
t.talk_id IN(?a)
|
2009-07-05 00:41:42 +03:00
|
|
|
|
AND
|
2010-04-04 17:58:11 +03:00
|
|
|
|
t.user_id = ?d
|
2009-07-05 00:41:42 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aTalkUsers = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql, $aArrayId, $sUserId)) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aTalkUsers[] = Engine::GetEntity('Talk_TalkUser', $aRow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aTalkUsers;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает тему разговора по айдишнику
|
|
|
|
|
*
|
|
|
|
|
* @param int $sId ID сообщения
|
|
|
|
|
* @return ModuleTalk_EntityTalk|null
|
|
|
|
|
*/
|
|
|
|
|
public function GetTalkById($sId)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT
|
2008-09-21 09:36:57 +03:00
|
|
|
|
t.*,
|
|
|
|
|
u.user_login as user_login
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk') . " as t,
|
|
|
|
|
" . Config::Get('db.table.user') . " as u
|
2008-09-21 09:36:57 +03:00
|
|
|
|
WHERE
|
|
|
|
|
t.talk_id = ?d
|
|
|
|
|
AND
|
|
|
|
|
t.user_id=u.user_id
|
|
|
|
|
";
|
2012-06-24 16:32:29 +03:00
|
|
|
|
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($aRow = $this->oDb->selectRow($sql, $sId)) {
|
|
|
|
|
return Engine::GetEntity('Talk', $aRow);
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Добавляет юзера к разговору(теме)
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTalk_EntityTalkUser $oTalkUser Объект связи пользователя и сообщения(разговора)
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function AddTalkUser(ModuleTalk_EntityTalkUser $oTalkUser)
|
|
|
|
|
{
|
|
|
|
|
$sql = "INSERT INTO " . Config::Get('db.table.talk_user') . "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
(talk_id,
|
|
|
|
|
user_id,
|
2009-08-27 22:54:31 +03:00
|
|
|
|
date_last,
|
|
|
|
|
talk_user_active
|
2008-09-21 09:36:57 +03:00
|
|
|
|
)
|
2009-08-27 22:54:31 +03:00
|
|
|
|
VALUES(?d, ?d, ?, ?d)
|
|
|
|
|
ON DUPLICATE KEY
|
|
|
|
|
UPDATE talk_user_active = ?d
|
2012-06-24 16:32:29 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($this->oDb->query($sql,
|
|
|
|
|
$oTalkUser->getTalkId(),
|
|
|
|
|
$oTalkUser->getUserId(),
|
|
|
|
|
$oTalkUser->getDateLast(),
|
|
|
|
|
$oTalkUser->getUserActive(),
|
|
|
|
|
$oTalkUser->getUserActive()
|
|
|
|
|
) === 0
|
|
|
|
|
) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Обновляет связку разговор-юзер
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTalk_EntityTalkUser $oTalkUser Объект связи пользователя с разговором
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function UpdateTalkUser(ModuleTalk_EntityTalkUser $oTalkUser)
|
|
|
|
|
{
|
|
|
|
|
$sql = "UPDATE " . Config::Get('db.table.talk_user') . "
|
2009-08-25 21:05:59 +03:00
|
|
|
|
SET
|
|
|
|
|
date_last = ?,
|
|
|
|
|
comment_id_last = ?d,
|
|
|
|
|
comment_count_new = ?d,
|
|
|
|
|
talk_user_active = ?d
|
|
|
|
|
WHERE
|
|
|
|
|
talk_id = ?d
|
|
|
|
|
AND
|
|
|
|
|
user_id = ?d
|
2012-06-24 16:32:29 +03:00
|
|
|
|
";
|
|
|
|
|
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query(
|
|
|
|
|
$sql,
|
|
|
|
|
$oTalkUser->getDateLast(),
|
|
|
|
|
$oTalkUser->getCommentIdLast(),
|
|
|
|
|
$oTalkUser->getCommentCountNew(),
|
|
|
|
|
$oTalkUser->getUserActive(),
|
|
|
|
|
$oTalkUser->getTalkId(),
|
|
|
|
|
$oTalkUser->getUserId()
|
|
|
|
|
);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаляет юзера из разговора
|
|
|
|
|
*
|
|
|
|
|
* @param array $aTalkId Список ID сообщений
|
|
|
|
|
* @param int $sUserId ID пользователя
|
|
|
|
|
* @param int $iActive Статус связи
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function DeleteTalkUserByArray($aTalkId, $sUserId, $iActive)
|
|
|
|
|
{
|
|
|
|
|
if (!is_array($aTalkId)) {
|
|
|
|
|
$aTalkId = array($aTalkId);
|
|
|
|
|
}
|
|
|
|
|
$sql = "
|
|
|
|
|
UPDATE " . Config::Get('db.table.talk_user') . "
|
2009-08-25 21:05:59 +03:00
|
|
|
|
SET
|
2009-08-27 22:54:31 +03:00
|
|
|
|
talk_user_active = ?d
|
2008-09-21 09:36:57 +03:00
|
|
|
|
WHERE
|
2009-07-05 14:30:55 +03:00
|
|
|
|
talk_id IN (?a)
|
2008-09-21 09:36:57 +03:00
|
|
|
|
AND
|
|
|
|
|
user_id = ?d
|
2012-06-24 16:32:29 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $iActive, $aTalkId, $sUserId);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Возвращает количество новых комментариев
|
|
|
|
|
*
|
|
|
|
|
* @param $sUserId
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function GetCountCommentNew($sUserId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
SELECT
|
2009-07-05 14:30:55 +03:00
|
|
|
|
SUM(tu.comment_count_new) as count_new
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk_user') . " as tu
|
2009-07-05 14:30:55 +03:00
|
|
|
|
WHERE
|
2009-08-25 21:05:59 +03:00
|
|
|
|
tu.user_id = ?d
|
|
|
|
|
AND
|
2009-08-27 22:54:31 +03:00
|
|
|
|
tu.talk_user_active=?d
|
2008-09-21 09:36:57 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($aRow = $this->oDb->selectRow($sql, $sUserId, ModuleTalk::TALK_USER_ACTIVE)) {
|
|
|
|
|
return $aRow['count_new'];
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает число новых тем и комментов где есть юзер
|
|
|
|
|
*
|
|
|
|
|
* @param int $sUserId ID пользователя
|
|
|
|
|
* @return int
|
|
|
|
|
*/
|
|
|
|
|
public function GetCountTalkNew($sUserId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
SELECT
|
|
|
|
|
COUNT(tu.talk_id) as count_new
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk_user') . " as tu
|
2008-09-21 09:36:57 +03:00
|
|
|
|
WHERE
|
2010-04-04 17:58:11 +03:00
|
|
|
|
tu.user_id = ?d
|
2008-09-21 09:36:57 +03:00
|
|
|
|
AND
|
2010-04-04 17:58:11 +03:00
|
|
|
|
tu.date_last IS NULL
|
2009-08-25 21:05:59 +03:00
|
|
|
|
AND
|
2009-08-27 22:54:31 +03:00
|
|
|
|
tu.talk_user_active=?d
|
2008-09-21 09:36:57 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($aRow = $this->oDb->selectRow($sql, $sUserId, ModuleTalk::TALK_USER_ACTIVE)) {
|
|
|
|
|
return $aRow['count_new'];
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получить все темы разговора где есть юзер
|
|
|
|
|
*
|
|
|
|
|
* @param int $sUserId ID пользователя
|
|
|
|
|
* @param int $iCount Возвращает общее количество элементов
|
|
|
|
|
* @param int $iCurrPage Номер страницы
|
|
|
|
|
* @param int $iPerPage Количество элементов на страницу
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetTalksByUserId($sUserId, &$iCount, $iCurrPage, $iPerPage)
|
|
|
|
|
{
|
|
|
|
|
$sql = "SELECT
|
2009-08-25 21:05:59 +03:00
|
|
|
|
tu.talk_id
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk_user') . " as tu,
|
|
|
|
|
" . Config::Get('db.table.talk') . " as t
|
2009-08-25 21:05:59 +03:00
|
|
|
|
WHERE
|
|
|
|
|
tu.user_id = ?d
|
|
|
|
|
AND
|
|
|
|
|
tu.talk_id=t.talk_id
|
|
|
|
|
AND
|
2009-08-27 22:54:31 +03:00
|
|
|
|
tu.talk_user_active = ?d
|
2009-08-25 21:05:59 +03:00
|
|
|
|
ORDER BY t.talk_date_last desc, t.talk_date desc
|
|
|
|
|
LIMIT ?d, ?d
|
|
|
|
|
";
|
2012-06-24 16:32:29 +03:00
|
|
|
|
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aTalks = array();
|
|
|
|
|
if ($aRows = $this->oDb->selectPage($iCount, $sql, $sUserId, ModuleTalk::TALK_USER_ACTIVE,
|
|
|
|
|
($iCurrPage - 1) * $iPerPage, $iPerPage)
|
|
|
|
|
) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aTalks[] = $aRow['talk_id'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aTalks;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает список юзеров в теме разговора
|
|
|
|
|
*
|
|
|
|
|
* @param int $sTalkId ID разговора
|
|
|
|
|
* @param array $aUserActive Список статусов
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetUsersTalk($sTalkId, $aUserActive = array())
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
2009-08-24 12:30:25 +03:00
|
|
|
|
SELECT
|
2009-08-25 21:05:59 +03:00
|
|
|
|
user_id
|
2008-09-21 09:36:57 +03:00
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk_user') . "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
WHERE
|
2009-08-24 12:30:25 +03:00
|
|
|
|
talk_id = ?
|
2009-11-20 19:15:16 +02:00
|
|
|
|
{ AND talk_user_active IN(?a) }
|
2012-06-24 16:32:29 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aReturn = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql, $sTalkId,
|
|
|
|
|
(count($aUserActive) ? $aUserActive : DBSIMPLE_SKIP)
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aReturn[] = $aRow['user_id'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $aReturn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Увеличивает число новых комментов у юзеров
|
|
|
|
|
*
|
|
|
|
|
* @param int $sTalkId ID разговора
|
|
|
|
|
* @param array $aExcludeId Список ID пользователей для исключения
|
|
|
|
|
* @return int
|
|
|
|
|
*/
|
|
|
|
|
public function increaseCountCommentNew($sTalkId, $aExcludeId)
|
|
|
|
|
{
|
|
|
|
|
if (!is_null($aExcludeId) and !is_array($aExcludeId)) {
|
|
|
|
|
$aExcludeId = array($aExcludeId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sql = "UPDATE
|
|
|
|
|
" . Config::Get('db.table.talk_user') . "
|
2009-07-05 00:41:42 +03:00
|
|
|
|
SET comment_count_new=comment_count_new+1
|
|
|
|
|
WHERE
|
|
|
|
|
talk_id = ?
|
2012-06-24 16:32:29 +03:00
|
|
|
|
{ AND user_id NOT IN (?a) }";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->select($sql, $sTalkId, !is_null($aExcludeId) ? $aExcludeId : DBSIMPLE_SKIP);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Возвращает массив пользователей, участвующих в разговоре
|
|
|
|
|
*
|
|
|
|
|
* @param int $sTalkId ID разговора
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetTalkUsers($sTalkId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
2009-08-25 21:05:59 +03:00
|
|
|
|
SELECT
|
|
|
|
|
t.*
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk_user') . " as t
|
2009-08-25 21:05:59 +03:00
|
|
|
|
WHERE
|
|
|
|
|
talk_id = ?
|
|
|
|
|
|
2012-06-24 16:32:29 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aReturn = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql, $sTalkId)) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aReturn[] = Engine::GetEntity('Talk_TalkUser', $aRow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $aReturn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получить все темы разговора по фильтру
|
|
|
|
|
*
|
|
|
|
|
* @param array $aFilter Фильтр
|
|
|
|
|
* @param int $iCount Возвращает общее количество элементов
|
|
|
|
|
* @param int $iCurrPage Номер страницы
|
|
|
|
|
* @param int $iPerPage Количество элементов на страницу
|
|
|
|
|
* @return array('collection'=>array,'count'=>int)
|
|
|
|
|
*/
|
|
|
|
|
public function GetTalksByFilter($aFilter, &$iCount, $iCurrPage, $iPerPage)
|
|
|
|
|
{
|
|
|
|
|
if (isset($aFilter['id']) and !is_array($aFilter['id'])) {
|
|
|
|
|
$aFilter['id'] = array($aFilter['id']);
|
|
|
|
|
}
|
|
|
|
|
$sql = "SELECT
|
2009-08-26 01:15:58 +03:00
|
|
|
|
tu.talk_id
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk_user') . " as tu,
|
|
|
|
|
" . Config::Get('db.table.talk') . " as t,
|
|
|
|
|
" . Config::Get('db.table.user') . " as u
|
2009-08-26 01:15:58 +03:00
|
|
|
|
WHERE
|
|
|
|
|
tu.talk_id=t.talk_id
|
2009-08-27 22:54:31 +03:00
|
|
|
|
AND tu.talk_user_active = ?d
|
2009-08-26 01:15:58 +03:00
|
|
|
|
AND u.user_id=t.user_id
|
|
|
|
|
{ AND tu.user_id = ?d }
|
2012-04-03 06:52:27 +03:00
|
|
|
|
{ AND tu.talk_id IN (?a) }
|
2012-04-09 12:39:40 +03:00
|
|
|
|
{ AND ( tu.comment_count_new > ?d OR tu.date_last IS NULL ) }
|
2009-09-26 04:36:28 +03:00
|
|
|
|
{ AND t.talk_date <= ? }
|
|
|
|
|
{ AND t.talk_date >= ? }
|
2009-08-26 01:15:58 +03:00
|
|
|
|
{ AND t.talk_title LIKE ? }
|
2012-04-03 06:52:27 +03:00
|
|
|
|
{ AND t.talk_text LIKE ? }
|
2009-08-26 01:15:58 +03:00
|
|
|
|
{ AND u.user_login = ? }
|
2009-11-04 12:36:08 +02:00
|
|
|
|
{ AND t.user_id = ? }
|
2014-06-13 06:55:03 +03:00
|
|
|
|
{ AND tu.talk_id IN (
|
|
|
|
|
SELECT stu.talk_id
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk_user') . " as stu,
|
|
|
|
|
" . Config::Get('db.table.talk') . " as st
|
2014-06-13 06:55:03 +03:00
|
|
|
|
WHERE
|
|
|
|
|
stu.user_id = ?d
|
|
|
|
|
AND stu.talk_id = st.talk_id
|
|
|
|
|
AND st.user_id != stu.user_id
|
|
|
|
|
) }
|
2009-08-26 01:15:58 +03:00
|
|
|
|
ORDER BY t.talk_date_last desc, t.talk_date desc
|
|
|
|
|
LIMIT ?d, ?d
|
|
|
|
|
";
|
2012-06-24 16:32:29 +03:00
|
|
|
|
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aTalks = array();
|
|
|
|
|
if (
|
|
|
|
|
$aRows = $this->oDb->selectPage(
|
|
|
|
|
$iCount,
|
|
|
|
|
$sql,
|
|
|
|
|
ModuleTalk::TALK_USER_ACTIVE,
|
|
|
|
|
(!empty($aFilter['user_id']) ? $aFilter['user_id'] : DBSIMPLE_SKIP),
|
|
|
|
|
((isset($aFilter['id']) and count($aFilter['id'])) ? $aFilter['id'] : DBSIMPLE_SKIP),
|
|
|
|
|
(!empty($aFilter['only_new']) ? 0 : DBSIMPLE_SKIP),
|
|
|
|
|
(!empty($aFilter['date_max']) ? $aFilter['date_max'] : DBSIMPLE_SKIP),
|
|
|
|
|
(!empty($aFilter['date_min']) ? $aFilter['date_min'] : DBSIMPLE_SKIP),
|
|
|
|
|
(!empty($aFilter['keyword']) ? $aFilter['keyword'] : DBSIMPLE_SKIP),
|
|
|
|
|
(!empty($aFilter['text_like']) ? $aFilter['text_like'] : DBSIMPLE_SKIP),
|
|
|
|
|
(!empty($aFilter['user_login']) ? $aFilter['user_login'] : DBSIMPLE_SKIP),
|
|
|
|
|
(!empty($aFilter['sender_id']) ? $aFilter['sender_id'] : DBSIMPLE_SKIP),
|
|
|
|
|
(!empty($aFilter['receiver_user_id']) ? $aFilter['receiver_user_id'] : DBSIMPLE_SKIP),
|
|
|
|
|
($iCurrPage - 1) * $iPerPage,
|
|
|
|
|
$iPerPage
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aTalks[] = $aRow['talk_id'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aTalks;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает информацию о пользователях, занесенных в блеклист
|
|
|
|
|
*
|
|
|
|
|
* @param int $sUserId ID пользователя
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetBlacklistByUserId($sUserId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "SELECT
|
2009-08-27 04:05:34 +03:00
|
|
|
|
tb.user_target_id
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk_blacklist') . " as tb
|
2009-08-27 04:05:34 +03:00
|
|
|
|
WHERE
|
2012-06-24 16:32:29 +03:00
|
|
|
|
tb.user_id = ?d";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aTargetId = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql, $sUserId)) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aTargetId[] = $aRow['user_target_id'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aTargetId;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Возвращает пользователей, у которых данный занесен в Blacklist
|
|
|
|
|
*
|
|
|
|
|
* @param int $sUserId ID пользователя
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetBlacklistByTargetId($sUserId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "SELECT
|
2009-08-27 04:05:34 +03:00
|
|
|
|
tb.user_id
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.talk_blacklist') . " as tb
|
2009-08-27 04:05:34 +03:00
|
|
|
|
WHERE
|
2012-06-24 16:32:29 +03:00
|
|
|
|
tb.user_target_id = ?d";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aUserId = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql, $sUserId)) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aUserId[] = $aRow['user_id'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aUserId;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Добавление пользователя в блеклист по переданному идентификатору
|
|
|
|
|
*
|
|
|
|
|
* @param int $sTargetId ID пользователя, которого добавляем в блэклист
|
|
|
|
|
* @param int $sUserId ID пользователя
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function AddUserToBlacklist($sTargetId, $sUserId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
|
|
|
|
INSERT INTO " . Config::Get('db.table.talk_blacklist') . "
|
2009-08-27 04:05:34 +03:00
|
|
|
|
( user_id, user_target_id )
|
|
|
|
|
VALUES
|
|
|
|
|
(?d, ?d)
|
2012-06-24 16:32:29 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($this->oDb->query($sql, $sUserId, $sTargetId) === 0) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаляем пользователя из блеклиста
|
|
|
|
|
*
|
|
|
|
|
* @param int $sTargetId ID пользователя, которого удаляем из блэклиста
|
|
|
|
|
* @param int $sUserId ID пользователя
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function DeleteUserFromBlacklist($sTargetId, $sUserId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
|
|
|
|
DELETE FROM " . Config::Get('db.table.talk_blacklist') . "
|
2009-08-27 04:05:34 +03:00
|
|
|
|
WHERE
|
|
|
|
|
user_id = ?d
|
|
|
|
|
AND
|
|
|
|
|
user_target_id = ?d
|
2012-06-24 16:32:29 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $sUserId, $sTargetId);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Добавление пользователя в блеклист по списку идентификаторов
|
|
|
|
|
*
|
|
|
|
|
* @param array $aTargetId Список ID пользователей, которых добавляем в блэклист
|
|
|
|
|
* @param int $sUserId ID пользователя
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function AddUserArrayToBlacklist($aTargetId, $sUserId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
|
|
|
|
INSERT INTO " . Config::Get('db.table.talk_blacklist') . "
|
2009-08-27 04:05:34 +03:00
|
|
|
|
( user_id, user_target_id )
|
|
|
|
|
VALUES
|
|
|
|
|
(?d, ?d)
|
2012-06-24 16:32:29 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$bOk = true;
|
|
|
|
|
foreach ($aTargetId as $sTarget) {
|
|
|
|
|
$bOk = $bOk && $this->oDb->query($sql, $sUserId, $sTarget);
|
|
|
|
|
}
|
|
|
|
|
return $bOk;
|
|
|
|
|
}
|
2014-05-28 08:37:30 +03:00
|
|
|
|
}
|