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-25 20:53:05 +03:00
|
|
|
|
/**
|
|
|
|
|
* Объект маппера для работы с БД
|
|
|
|
|
*
|
2014-10-08 08:20:29 +03:00
|
|
|
|
* @package application.modules.topic
|
2012-06-25 20:53:05 +03:00
|
|
|
|
* @since 1.0
|
|
|
|
|
*/
|
2014-10-08 11:49:34 +03:00
|
|
|
|
class ModuleTopic_MapperTopic extends Mapper
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Добавляет топик
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTopic_EntityTopic $oTopic Объект топика
|
|
|
|
|
* @return int|bool
|
|
|
|
|
*/
|
|
|
|
|
public function AddTopic(ModuleTopic_EntityTopic $oTopic)
|
|
|
|
|
{
|
|
|
|
|
$sql = "INSERT INTO " . Config::Get('db.table.topic') . "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
(blog_id,
|
2014-12-30 18:38:04 +02:00
|
|
|
|
blog_id2,
|
|
|
|
|
blog_id3,
|
|
|
|
|
blog_id4,
|
|
|
|
|
blog_id5,
|
2008-09-21 09:36:57 +03:00
|
|
|
|
user_id,
|
|
|
|
|
topic_type,
|
2008-09-27 18:21:07 +03:00
|
|
|
|
topic_title,
|
2015-03-17 10:38:47 +02:00
|
|
|
|
topic_slug,
|
2008-09-21 09:36:57 +03:00
|
|
|
|
topic_tags,
|
|
|
|
|
topic_date_add,
|
2015-03-27 13:45:43 +02:00
|
|
|
|
topic_date_publish,
|
2008-09-21 09:36:57 +03:00
|
|
|
|
topic_user_ip,
|
2008-10-11 00:02:31 +03:00
|
|
|
|
topic_publish,
|
2009-02-15 10:10:07 +02:00
|
|
|
|
topic_publish_draft,
|
2008-10-25 23:31:29 +03:00
|
|
|
|
topic_publish_index,
|
2014-12-28 16:59:55 +02:00
|
|
|
|
topic_skip_index,
|
2008-10-25 23:31:29 +03:00
|
|
|
|
topic_cut_text,
|
2009-03-01 12:19:06 +02:00
|
|
|
|
topic_forbid_comment,
|
|
|
|
|
topic_text_hash
|
2008-09-21 09:36:57 +03:00
|
|
|
|
)
|
2015-03-27 13:45:43 +02:00
|
|
|
|
VALUES(?d, ?d, ?d, ?d, ?d, ?d, ?, ?, ?, ?, ?, ?, ?, ?d, ?d, ?d, ?d, ?, ?, ?)
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-12-30 18:38:04 +02:00
|
|
|
|
if ($iId = $this->oDb->query($sql, $oTopic->getBlogId(), $oTopic->getBlogId2(), $oTopic->getBlogId3(),
|
2015-03-17 10:38:47 +02:00
|
|
|
|
$oTopic->getBlogId4(), $oTopic->getBlogId5(), $oTopic->getUserId(), $oTopic->getType(), $oTopic->getTitle(), $oTopic->getSlug(),
|
2015-03-27 13:45:43 +02:00
|
|
|
|
$oTopic->getTags(), $oTopic->getDateAdd(), $oTopic->getDatePublish(), $oTopic->getUserIp(), $oTopic->getPublish(),
|
2014-12-28 16:59:55 +02:00
|
|
|
|
$oTopic->getPublishDraft(), $oTopic->getPublishIndex(), $oTopic->getSkipIndex(), $oTopic->getCutText(),
|
|
|
|
|
$oTopic->getForbidComment(), $oTopic->getTextHash())
|
2014-10-08 11:49:34 +03:00
|
|
|
|
) {
|
|
|
|
|
$oTopic->setId($iId);
|
|
|
|
|
$this->AddTopicContent($oTopic);
|
|
|
|
|
return $iId;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Добавляет контент топика
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTopic_EntityTopic $oTopic Объект топика
|
|
|
|
|
* @return int|bool
|
|
|
|
|
*/
|
|
|
|
|
public function AddTopicContent(ModuleTopic_EntityTopic $oTopic)
|
|
|
|
|
{
|
|
|
|
|
$sql = "INSERT INTO " . Config::Get('db.table.topic_content') . "
|
2008-09-27 18:21:07 +03:00
|
|
|
|
(topic_id,
|
|
|
|
|
topic_text,
|
|
|
|
|
topic_text_short,
|
|
|
|
|
topic_text_source,
|
|
|
|
|
topic_extra
|
|
|
|
|
)
|
|
|
|
|
VALUES(?d, ?, ?, ?, ? )
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($iId = $this->oDb->query($sql, $oTopic->getId(), $oTopic->getText(),
|
|
|
|
|
$oTopic->getTextShort(), $oTopic->getTextSource(), $oTopic->getExtra())
|
|
|
|
|
) {
|
|
|
|
|
return $iId;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Добавление тега к топику
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTopic_EntityTopicTag $oTopicTag Объект тега топика
|
|
|
|
|
* @return int
|
|
|
|
|
*/
|
|
|
|
|
public function AddTopicTag(ModuleTopic_EntityTopicTag $oTopicTag)
|
|
|
|
|
{
|
|
|
|
|
$sql = "INSERT INTO " . Config::Get('db.table.topic_tag') . "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
(topic_id,
|
|
|
|
|
user_id,
|
|
|
|
|
blog_id,
|
|
|
|
|
topic_tag_text
|
|
|
|
|
)
|
|
|
|
|
VALUES(?d, ?d, ?d, ?)
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($iId = $this->oDb->query($sql, $oTopicTag->getTopicId(), $oTopicTag->getUserId(), $oTopicTag->getBlogId(),
|
|
|
|
|
$oTopicTag->getText())
|
|
|
|
|
) {
|
|
|
|
|
return $iId;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаление контента топика по его номеру
|
|
|
|
|
*
|
|
|
|
|
* @param int $iTopicId ID топика
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function DeleteTopicContentByTopicId($iTopicId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "DELETE FROM " . Config::Get('db.table.topic_content') . " WHERE topic_id = ?d ";
|
|
|
|
|
$res = $this->oDb->query($sql, $iTopicId);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаляет теги у топика
|
|
|
|
|
*
|
|
|
|
|
* @param int $sTopicId ID топика
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function DeleteTopicTagsByTopicId($sTopicId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "DELETE FROM " . Config::Get('db.table.topic_tag') . "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
WHERE
|
|
|
|
|
topic_id = ?d
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $sTopicId);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаляет топик.
|
|
|
|
|
* Если тип таблиц в БД InnoDB, то удалятся всё связи по топику(комменты,голосования,избранное)
|
|
|
|
|
*
|
|
|
|
|
* @param int $sTopicId Объект топика или ID
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function DeleteTopic($sTopicId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "DELETE FROM " . Config::Get('db.table.topic') . "
|
2008-11-22 19:30:25 +02:00
|
|
|
|
WHERE
|
|
|
|
|
topic_id = ?d
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $sTopicId);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает топик по уникальному хешу(текст топика)
|
|
|
|
|
*
|
|
|
|
|
* @param int $sUserId
|
|
|
|
|
* @param string $sHash
|
|
|
|
|
* @return int|null
|
|
|
|
|
*/
|
|
|
|
|
public function GetTopicUnique($sUserId, $sHash)
|
|
|
|
|
{
|
|
|
|
|
$sql = "SELECT topic_id FROM " . Config::Get('db.table.topic') . "
|
2009-03-01 12:19:06 +02:00
|
|
|
|
WHERE
|
2010-04-04 17:58:11 +03:00
|
|
|
|
topic_text_hash =?
|
2009-03-01 12:19:06 +02:00
|
|
|
|
AND
|
2010-04-04 17:58:11 +03:00
|
|
|
|
user_id = ?d
|
|
|
|
|
LIMIT 0,1
|
2009-03-01 12:19:06 +02:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($aRow = $this->oDb->selectRow($sql, $sHash, $sUserId)) {
|
|
|
|
|
return $aRow['topic_id'];
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получить список топиков по списку айдишников
|
|
|
|
|
*
|
|
|
|
|
* @param array $aArrayId Список ID топиков
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetTopicsByArrayId($aArrayId)
|
|
|
|
|
{
|
|
|
|
|
if (!is_array($aArrayId) or count($aArrayId) == 0) {
|
|
|
|
|
return array();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT
|
2009-05-29 18:32:37 +03:00
|
|
|
|
t.*,
|
|
|
|
|
tc.*
|
2009-05-17 20:35:47 +03:00
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.topic') . " as t
|
|
|
|
|
JOIN " . Config::Get('db.table.topic_content') . " AS tc ON t.topic_id=tc.topic_id
|
2009-05-17 20:35:47 +03:00
|
|
|
|
WHERE
|
2009-05-29 18:32:37 +03:00
|
|
|
|
t.topic_id IN(?a)
|
2009-05-17 20:35:47 +03:00
|
|
|
|
ORDER BY FIELD(t.topic_id,?a) ";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aTopics = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql, $aArrayId, $aArrayId)) {
|
|
|
|
|
foreach ($aRows as $aTopic) {
|
|
|
|
|
$aTopics[] = Engine::GetEntity('Topic', $aTopic);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aTopics;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Список топиков по фильтру
|
|
|
|
|
*
|
|
|
|
|
* @param array $aFilter Фильтр
|
|
|
|
|
* @param int $iCount Возвращает общее число элементов
|
|
|
|
|
* @param int $iCurrPage Номер страницы
|
|
|
|
|
* @param int $iPerPage Количество элементов на страницу
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetTopics($aFilter, &$iCount, $iCurrPage, $iPerPage)
|
|
|
|
|
{
|
|
|
|
|
$sWhere = $this->buildFilter($aFilter);
|
|
|
|
|
|
|
|
|
|
if (!isset($aFilter['order'])) {
|
2015-03-27 13:45:43 +02:00
|
|
|
|
$aFilter['order'] = 't.topic_date_publish desc';
|
2014-10-08 11:49:34 +03:00
|
|
|
|
}
|
|
|
|
|
if (!is_array($aFilter['order'])) {
|
|
|
|
|
$aFilter['order'] = array($aFilter['order']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT
|
2009-05-24 14:02:34 +03:00
|
|
|
|
t.topic_id
|
2008-09-26 23:52:26 +03:00
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.topic') . " as t,
|
|
|
|
|
" . Config::Get('db.table.blog') . " as b
|
2008-09-26 23:52:26 +03:00
|
|
|
|
WHERE
|
2009-05-17 20:35:47 +03:00
|
|
|
|
1=1
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . $sWhere . "
|
2008-09-26 23:52:26 +03:00
|
|
|
|
AND
|
2009-09-18 23:36:07 +03:00
|
|
|
|
t.blog_id=b.blog_id
|
2014-10-08 11:49:34 +03:00
|
|
|
|
ORDER BY " .
|
|
|
|
|
implode(', ', $aFilter['order'])
|
|
|
|
|
. "
|
2012-06-25 20:53:05 +03:00
|
|
|
|
LIMIT ?d, ?d";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aTopics = array();
|
|
|
|
|
if ($aRows = $this->oDb->selectPage($iCount, $sql, ($iCurrPage - 1) * $iPerPage, $iPerPage)) {
|
|
|
|
|
foreach ($aRows as $aTopic) {
|
|
|
|
|
$aTopics[] = $aTopic['topic_id'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aTopics;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Количество топиков по фильтру
|
|
|
|
|
*
|
|
|
|
|
* @param array $aFilter Фильтр
|
|
|
|
|
* @return int
|
|
|
|
|
*/
|
|
|
|
|
public function GetCountTopics($aFilter)
|
|
|
|
|
{
|
|
|
|
|
$sWhere = $this->buildFilter($aFilter);
|
|
|
|
|
$sql = "SELECT
|
2008-09-21 09:36:57 +03:00
|
|
|
|
count(t.topic_id) as count
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.topic') . " as t,
|
|
|
|
|
" . Config::Get('db.table.blog') . " as b
|
2008-09-21 09:36:57 +03:00
|
|
|
|
WHERE
|
|
|
|
|
1=1
|
|
|
|
|
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . $sWhere . "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
|
|
|
|
|
AND
|
2012-06-25 20:53:05 +03:00
|
|
|
|
t.blog_id=b.blog_id;";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($aRow = $this->oDb->selectRow($sql)) {
|
|
|
|
|
return $aRow['count'];
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Возвращает все топики по фильтру
|
|
|
|
|
*
|
|
|
|
|
* @param array $aFilter Фильтр
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetAllTopics($aFilter)
|
|
|
|
|
{
|
|
|
|
|
$sWhere = $this->buildFilter($aFilter);
|
|
|
|
|
|
|
|
|
|
if (!isset($aFilter['order'])) {
|
|
|
|
|
$aFilter['order'] = 't.topic_id desc';
|
|
|
|
|
}
|
|
|
|
|
if (!is_array($aFilter['order'])) {
|
|
|
|
|
$aFilter['order'] = array($aFilter['order']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT
|
2009-09-18 23:36:07 +03:00
|
|
|
|
t.topic_id
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.topic') . " as t,
|
|
|
|
|
" . Config::Get('db.table.blog') . " as b
|
2009-09-18 23:36:07 +03:00
|
|
|
|
WHERE
|
|
|
|
|
1=1
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . $sWhere . "
|
2009-09-18 23:36:07 +03:00
|
|
|
|
AND
|
|
|
|
|
t.blog_id=b.blog_id
|
2014-10-08 11:49:34 +03:00
|
|
|
|
ORDER by " . implode(', ', $aFilter['order']) . " ";
|
|
|
|
|
$aTopics = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql)) {
|
|
|
|
|
foreach ($aRows as $aTopic) {
|
|
|
|
|
$aTopics[] = $aTopic['topic_id'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $aTopics;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает список топиков по тегу
|
|
|
|
|
*
|
|
|
|
|
* @param string $sTag Тег
|
|
|
|
|
* @param array $aExcludeBlog Список ID блогов для исключения
|
|
|
|
|
* @param int $iCount Возвращает общее количество элементов
|
|
|
|
|
* @param int $iCurrPage Номер страницы
|
|
|
|
|
* @param int $iPerPage Количество элементов на страницу
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetTopicsByTag($sTag, $aExcludeBlog, &$iCount, $iCurrPage, $iPerPage)
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
2008-09-27 18:21:07 +03:00
|
|
|
|
SELECT
|
|
|
|
|
topic_id
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.topic_tag') . "
|
2008-09-27 18:21:07 +03:00
|
|
|
|
WHERE
|
2009-05-24 14:02:34 +03:00
|
|
|
|
topic_tag_text = ?
|
2010-04-25 16:56:03 +03:00
|
|
|
|
{ AND blog_id NOT IN (?a) }
|
2008-09-27 18:21:07 +03:00
|
|
|
|
ORDER BY topic_id DESC
|
2009-05-24 14:02:34 +03:00
|
|
|
|
LIMIT ?d, ?d ";
|
2012-06-25 20:53:05 +03:00
|
|
|
|
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aTopics = array();
|
|
|
|
|
if ($aRows = $this->oDb->selectPage(
|
|
|
|
|
$iCount, $sql, $sTag,
|
|
|
|
|
(is_array($aExcludeBlog) && count($aExcludeBlog)) ? $aExcludeBlog : DBSIMPLE_SKIP,
|
|
|
|
|
($iCurrPage - 1) * $iPerPage, $iPerPage
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
foreach ($aRows as $aTopic) {
|
|
|
|
|
$aTopics[] = $aTopic['topic_id'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aTopics;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает топики по рейтингу и дате
|
|
|
|
|
*
|
|
|
|
|
* @param string $sDate Дата
|
|
|
|
|
* @param int $iLimit Количество
|
|
|
|
|
* @param array $aExcludeBlog Список ID блогов для исключения
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetTopicsRatingByDate($sDate, $iLimit, $aExcludeBlog = array())
|
|
|
|
|
{
|
|
|
|
|
$sql = "SELECT
|
2009-05-24 14:02:34 +03:00
|
|
|
|
t.topic_id
|
2008-09-27 18:21:07 +03:00
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.topic') . " as t
|
2008-09-27 18:21:07 +03:00
|
|
|
|
WHERE
|
|
|
|
|
t.topic_publish = 1
|
|
|
|
|
AND
|
2015-03-27 13:45:43 +02:00
|
|
|
|
t.topic_date_publish >= ?
|
2008-09-27 18:21:07 +03:00
|
|
|
|
AND
|
2009-09-19 17:48:28 +03:00
|
|
|
|
t.topic_rating >= 0
|
|
|
|
|
{ AND t.blog_id NOT IN(?a) }
|
2008-09-27 18:21:07 +03:00
|
|
|
|
ORDER by t.topic_rating desc, t.topic_id desc
|
2012-06-25 20:53:05 +03:00
|
|
|
|
LIMIT 0, ?d ";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aTopics = array();
|
|
|
|
|
if ($aRows = $this->oDb->select(
|
|
|
|
|
$sql, $sDate,
|
|
|
|
|
(is_array($aExcludeBlog) && count($aExcludeBlog)) ? $aExcludeBlog : DBSIMPLE_SKIP,
|
|
|
|
|
$iLimit
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
foreach ($aRows as $aTopic) {
|
|
|
|
|
$aTopics[] = $aTopic['topic_id'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aTopics;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает список тегов топиков
|
|
|
|
|
*
|
|
|
|
|
* @param int $iLimit Количество
|
|
|
|
|
* @param array $aExcludeTopic Список ID топиков для исключения
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetTopicTags($iLimit, $aExcludeTopic = array())
|
|
|
|
|
{
|
|
|
|
|
$sql = "SELECT
|
2008-09-21 09:36:57 +03:00
|
|
|
|
tt.topic_tag_text,
|
|
|
|
|
count(tt.topic_tag_text) as count
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.topic_tag') . " as tt
|
2009-09-19 21:25:11 +03:00
|
|
|
|
WHERE
|
|
|
|
|
1=1
|
|
|
|
|
{AND tt.topic_id NOT IN(?a) }
|
2008-09-21 09:36:57 +03:00
|
|
|
|
GROUP BY
|
|
|
|
|
tt.topic_tag_text
|
|
|
|
|
ORDER BY
|
|
|
|
|
count desc
|
2009-09-19 21:25:11 +03:00
|
|
|
|
LIMIT 0, ?d
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aReturn = array();
|
|
|
|
|
$aReturnSort = array();
|
|
|
|
|
if ($aRows = $this->oDb->select(
|
|
|
|
|
$sql,
|
|
|
|
|
(is_array($aExcludeTopic) && count($aExcludeTopic)) ? $aExcludeTopic : DBSIMPLE_SKIP,
|
|
|
|
|
$iLimit
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aReturn[mb_strtolower($aRow['topic_tag_text'], 'UTF-8')] = $aRow;
|
|
|
|
|
}
|
|
|
|
|
ksort($aReturn);
|
|
|
|
|
foreach ($aReturn as $aRow) {
|
|
|
|
|
$aReturnSort[] = Engine::GetEntity('Topic_TopicTag', $aRow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aReturnSort;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает список тегов из топиков открытых блогов (open,personal)
|
|
|
|
|
*
|
|
|
|
|
* @param int $iLimit Количество
|
|
|
|
|
* @param int|null $iUserId ID пользователя, чью теги получаем
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetOpenTopicTags($iLimit, $iUserId = null)
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
2009-09-20 21:43:20 +03:00
|
|
|
|
SELECT
|
|
|
|
|
tt.topic_tag_text,
|
|
|
|
|
count(tt.topic_tag_text) as count
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.topic_tag') . " as tt,
|
|
|
|
|
" . Config::Get('db.table.blog') . " as b
|
2012-04-06 08:02:37 +03:00
|
|
|
|
WHERE
|
|
|
|
|
1 = 1
|
|
|
|
|
{ AND tt.user_id = ?d }
|
|
|
|
|
AND
|
2009-09-20 21:43:20 +03:00
|
|
|
|
tt.blog_id = b.blog_id
|
|
|
|
|
AND
|
2012-04-29 19:21:49 +03:00
|
|
|
|
b.blog_type <> 'close'
|
2009-09-20 21:43:20 +03:00
|
|
|
|
GROUP BY
|
|
|
|
|
tt.topic_tag_text
|
|
|
|
|
ORDER BY
|
|
|
|
|
count desc
|
|
|
|
|
LIMIT 0, ?d
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aReturn = array();
|
|
|
|
|
$aReturnSort = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql, is_null($iUserId) ? DBSIMPLE_SKIP : $iUserId, $iLimit)) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aReturn[mb_strtolower($aRow['topic_tag_text'], 'UTF-8')] = $aRow;
|
|
|
|
|
}
|
|
|
|
|
ksort($aReturn);
|
|
|
|
|
foreach ($aReturn as $aRow) {
|
|
|
|
|
$aReturnSort[] = Engine::GetEntity('Topic_TopicTag', $aRow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aReturnSort;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Увеличивает у топика число комментов
|
|
|
|
|
*
|
|
|
|
|
* @param int $sTopicId ID топика
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function increaseTopicCountComment($sTopicId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "UPDATE " . Config::Get('db.table.topic') . "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
SET
|
|
|
|
|
topic_count_comment=topic_count_comment+1
|
|
|
|
|
WHERE
|
|
|
|
|
topic_id = ?
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $sTopicId);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Обновляет топик
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTopic_EntityTopic $oTopic Объект топика
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function UpdateTopic(ModuleTopic_EntityTopic $oTopic)
|
|
|
|
|
{
|
|
|
|
|
$sql = "UPDATE " . Config::Get('db.table.topic') . "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
SET
|
|
|
|
|
blog_id= ?d,
|
2014-12-30 18:38:04 +02:00
|
|
|
|
blog_id2= ?d,
|
|
|
|
|
blog_id3= ?d,
|
|
|
|
|
blog_id4= ?d,
|
|
|
|
|
blog_id5= ?d,
|
|
|
|
|
topic_title= ?,
|
2015-03-17 10:38:47 +02:00
|
|
|
|
topic_slug= ?,
|
2008-09-21 09:36:57 +03:00
|
|
|
|
topic_tags= ?,
|
2009-02-15 10:10:07 +02:00
|
|
|
|
topic_date_add = ?,
|
2008-09-21 09:36:57 +03:00
|
|
|
|
topic_date_edit = ?,
|
2014-07-22 10:53:33 +03:00
|
|
|
|
topic_date_edit_content = ?,
|
2015-03-27 13:45:43 +02:00
|
|
|
|
topic_date_publish = ?,
|
2008-09-21 09:36:57 +03:00
|
|
|
|
topic_user_ip= ?,
|
2009-02-15 10:10:07 +02:00
|
|
|
|
topic_publish= ?d ,
|
|
|
|
|
topic_publish_draft= ?d ,
|
|
|
|
|
topic_publish_index= ?d,
|
2014-12-28 16:59:55 +02:00
|
|
|
|
topic_skip_index= ?d,
|
2008-09-21 09:36:57 +03:00
|
|
|
|
topic_rating= ?f,
|
|
|
|
|
topic_count_vote= ?d,
|
2012-03-10 07:45:19 +02:00
|
|
|
|
topic_count_vote_up= ?d,
|
|
|
|
|
topic_count_vote_down= ?d,
|
|
|
|
|
topic_count_vote_abstain= ?d,
|
2008-09-21 09:36:57 +03:00
|
|
|
|
topic_count_read= ?d,
|
2008-10-25 23:31:29 +03:00
|
|
|
|
topic_count_comment= ?d,
|
2011-10-09 20:23:38 +03:00
|
|
|
|
topic_count_favourite= ?d,
|
2008-10-25 23:31:29 +03:00
|
|
|
|
topic_cut_text = ? ,
|
2009-03-01 12:19:06 +02:00
|
|
|
|
topic_forbid_comment = ? ,
|
|
|
|
|
topic_text_hash = ?
|
2008-09-21 09:36:57 +03:00
|
|
|
|
WHERE
|
|
|
|
|
topic_id = ?d
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-12-30 18:38:04 +02:00
|
|
|
|
$res = $this->oDb->query($sql, $oTopic->getBlogId(), $oTopic->getBlogId2(), $oTopic->getBlogId3(),
|
2015-03-17 10:38:47 +02:00
|
|
|
|
$oTopic->getBlogId4(), $oTopic->getBlogId5(), $oTopic->getTitle(), $oTopic->getSlug(), $oTopic->getTags(),
|
2015-03-27 13:45:43 +02:00
|
|
|
|
$oTopic->getDateAdd(), $oTopic->getDateEdit(), $oTopic->getDateEditContent(), $oTopic->getDatePublish(), $oTopic->getUserIp(),
|
2014-12-30 18:38:04 +02:00
|
|
|
|
$oTopic->getPublish(), $oTopic->getPublishDraft(), $oTopic->getPublishIndex(), $oTopic->getSkipIndex(),
|
|
|
|
|
$oTopic->getRating(), $oTopic->getCountVote(), $oTopic->getCountVoteUp(), $oTopic->getCountVoteDown(),
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$oTopic->getCountVoteAbstain(), $oTopic->getCountRead(), $oTopic->getCountComment(),
|
|
|
|
|
$oTopic->getCountFavourite(), $oTopic->getCutText(), $oTopic->getForbidComment(), $oTopic->getTextHash(),
|
|
|
|
|
$oTopic->getId());
|
|
|
|
|
if ($res !== false and !is_null($res)) {
|
|
|
|
|
$this->UpdateTopicContent($oTopic);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Обновляет контент топика
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTopic_EntityTopic $oTopic Объект топика
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function UpdateTopicContent(ModuleTopic_EntityTopic $oTopic)
|
|
|
|
|
{
|
|
|
|
|
$sql = "UPDATE " . Config::Get('db.table.topic_content') . "
|
2008-09-27 18:21:07 +03:00
|
|
|
|
SET
|
|
|
|
|
topic_text= ?,
|
|
|
|
|
topic_text_short= ?,
|
|
|
|
|
topic_text_source= ?,
|
|
|
|
|
topic_extra= ?
|
|
|
|
|
WHERE
|
|
|
|
|
topic_id = ?d
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $oTopic->getText(), $oTopic->getTextShort(), $oTopic->getTextSource(),
|
|
|
|
|
$oTopic->getExtra(), $oTopic->getId());
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Строит строку условий для SQL запроса топиков
|
|
|
|
|
*
|
|
|
|
|
* @param array $aFilter Фильтр
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
protected function buildFilter($aFilter)
|
|
|
|
|
{
|
2015-03-27 13:45:43 +02:00
|
|
|
|
$sDateNow=date('Y-m-d H:i:s');
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$sWhere = '';
|
|
|
|
|
if (isset($aFilter['topic_date_more'])) {
|
2015-03-27 13:45:43 +02:00
|
|
|
|
$sWhere .= " AND t.topic_date_publish > " . $this->oDb->escape($aFilter['topic_date_more']);
|
2014-10-08 11:49:34 +03:00
|
|
|
|
}
|
2015-03-17 10:38:47 +02:00
|
|
|
|
if (isset($aFilter['topic_slug'])) {
|
|
|
|
|
$sWhere .= " AND t.topic_slug = " . $this->oDb->escape($aFilter['topic_slug']);
|
|
|
|
|
}
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if (isset($aFilter['topic_publish'])) {
|
2015-03-27 13:45:43 +02:00
|
|
|
|
$sWhere .= " AND t.topic_publish = " . (int)$aFilter['topic_publish'] . " AND t.topic_date_publish <= '{$sDateNow}' ";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
}
|
|
|
|
|
if (isset($aFilter['topic_rating']) and is_array($aFilter['topic_rating'])) {
|
|
|
|
|
$sPublishIndex = '';
|
|
|
|
|
if (isset($aFilter['topic_rating']['publish_index']) and $aFilter['topic_rating']['publish_index'] == 1) {
|
2015-09-09 06:47:01 +03:00
|
|
|
|
$sPublishIndex = " or topic_publish_index = 1 ) and ( topic_skip_index = 0 and b.blog_skip_index = 0 ";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
}
|
|
|
|
|
if ($aFilter['topic_rating']['type'] == 'top') {
|
|
|
|
|
$sWhere .= " AND ( t.topic_rating >= " . (float)$aFilter['topic_rating']['value'] . " {$sPublishIndex} ) ";
|
|
|
|
|
} else {
|
|
|
|
|
$sWhere .= " AND ( t.topic_rating < " . (float)$aFilter['topic_rating']['value'] . " ) ";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (isset($aFilter['topic_new'])) {
|
2015-03-27 13:45:43 +02:00
|
|
|
|
$sWhere .= " AND t.topic_date_publish >= '" . $aFilter['topic_new'] . "'";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
}
|
|
|
|
|
if (isset($aFilter['user_id'])) {
|
|
|
|
|
$sWhere .= is_array($aFilter['user_id'])
|
|
|
|
|
? " AND t.user_id IN(" . implode(', ', $aFilter['user_id']) . ")"
|
|
|
|
|
: " AND t.user_id = " . (int)$aFilter['user_id'];
|
|
|
|
|
}
|
|
|
|
|
if (isset($aFilter['blog_id'])) {
|
|
|
|
|
if (!is_array($aFilter['blog_id'])) {
|
|
|
|
|
$aFilter['blog_id'] = array($aFilter['blog_id']);
|
|
|
|
|
}
|
2014-12-30 18:38:04 +02:00
|
|
|
|
$sBlogList = join("','", $aFilter['blog_id']);
|
|
|
|
|
$sWhere .= " AND ( t.blog_id IN ('{$sBlogList}') ";
|
|
|
|
|
$sWhere .= " OR t.blog_id2 IN ('{$sBlogList}') ";
|
|
|
|
|
$sWhere .= " OR t.blog_id3 IN ('{$sBlogList}') ";
|
|
|
|
|
$sWhere .= " OR t.blog_id4 IN ('{$sBlogList}') ";
|
|
|
|
|
$sWhere .= " OR t.blog_id5 IN ('{$sBlogList}') ) ";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
}
|
|
|
|
|
if (isset($aFilter['blog_type']) and is_array($aFilter['blog_type'])) {
|
|
|
|
|
$aBlogTypes = array();
|
|
|
|
|
foreach ($aFilter['blog_type'] as $sType => $aBlogId) {
|
|
|
|
|
/**
|
|
|
|
|
* Позиция вида 'type'=>array('id1', 'id2')
|
|
|
|
|
*/
|
|
|
|
|
if (!is_array($aBlogId) && is_string($sType)) {
|
|
|
|
|
$aBlogId = array($aBlogId);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* Позиция вида 'type'
|
|
|
|
|
*/
|
|
|
|
|
if (is_string($aBlogId) && is_int($sType)) {
|
|
|
|
|
$sType = $aBlogId;
|
|
|
|
|
$aBlogId = array();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$aBlogTypes[] = (count($aBlogId) == 0)
|
|
|
|
|
? "(b.blog_type='" . $sType . "')"
|
|
|
|
|
: "(b.blog_type='" . $sType . "' AND t.blog_id IN ('" . join("','", $aBlogId) . "'))";
|
|
|
|
|
}
|
|
|
|
|
$sWhere .= " AND (" . join(" OR ", (array)$aBlogTypes) . ")";
|
|
|
|
|
}
|
|
|
|
|
if (isset($aFilter['topic_type'])) {
|
|
|
|
|
if (!is_array($aFilter['topic_type'])) {
|
|
|
|
|
$aFilter['topic_type'] = array($aFilter['topic_type']);
|
|
|
|
|
}
|
|
|
|
|
$sWhere .= " AND t.topic_type IN (" . join(",",
|
|
|
|
|
array_map(array($this->oDb, 'escape'), $aFilter['topic_type'])) . ")";
|
|
|
|
|
}
|
|
|
|
|
return $sWhere;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает список тегов по первым буквам тега
|
|
|
|
|
*
|
|
|
|
|
* @param string $sTag Тэг
|
|
|
|
|
* @param int $iLimit Количество
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function GetTopicTagsByLike($sTag, $iLimit)
|
|
|
|
|
{
|
|
|
|
|
$sTag = mb_strtolower($sTag, "UTF-8");
|
|
|
|
|
$sql = "SELECT
|
2008-09-21 09:36:57 +03:00
|
|
|
|
topic_tag_text
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.topic_tag') . "
|
2008-09-21 09:36:57 +03:00
|
|
|
|
WHERE
|
2008-11-03 13:08:12 +02:00
|
|
|
|
topic_tag_text LIKE ?
|
2008-09-21 09:36:57 +03:00
|
|
|
|
GROUP BY
|
|
|
|
|
topic_tag_text
|
|
|
|
|
LIMIT 0, ?d
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aReturn = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql, $sTag . '%', $iLimit)) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aReturn[] = Engine::GetEntity('Topic_TopicTag', $aRow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aReturn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Обновляем дату прочтения топика
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTopic_EntityTopicRead $oTopicRead Объект факта чтения топика
|
|
|
|
|
* @return int
|
|
|
|
|
*/
|
|
|
|
|
public function UpdateTopicRead(ModuleTopic_EntityTopicRead $oTopicRead)
|
|
|
|
|
{
|
|
|
|
|
$sql = "UPDATE " . Config::Get('db.table.topic_read') . "
|
2008-12-28 12:51:59 +02:00
|
|
|
|
SET
|
|
|
|
|
comment_count_last = ? ,
|
2009-01-24 11:54:59 +02:00
|
|
|
|
comment_id_last = ? ,
|
2008-12-28 12:51:59 +02:00
|
|
|
|
date_read = ?
|
|
|
|
|
WHERE
|
|
|
|
|
topic_id = ?
|
|
|
|
|
AND
|
|
|
|
|
user_id = ?
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $oTopicRead->getCommentCountLast(), $oTopicRead->getCommentIdLast(),
|
|
|
|
|
$oTopicRead->getDateRead(), $oTopicRead->getTopicId(), $oTopicRead->getUserId());
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливаем дату прочтения топика
|
|
|
|
|
*
|
|
|
|
|
* @param ModuleTopic_EntityTopicRead $oTopicRead Объект факта чтения топика
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function AddTopicRead(ModuleTopic_EntityTopicRead $oTopicRead)
|
|
|
|
|
{
|
|
|
|
|
$sql = "INSERT INTO " . Config::Get('db.table.topic_read') . "
|
2008-10-30 08:12:44 +02:00
|
|
|
|
SET
|
2008-11-03 22:18:09 +02:00
|
|
|
|
comment_count_last = ? ,
|
2009-01-24 11:54:59 +02:00
|
|
|
|
comment_id_last = ? ,
|
2008-10-30 08:12:44 +02:00
|
|
|
|
date_read = ? ,
|
2008-12-28 12:51:59 +02:00
|
|
|
|
topic_id = ? ,
|
2008-09-21 09:36:57 +03:00
|
|
|
|
user_id = ?
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
return $this->oDb->query($sql, $oTopicRead->getCommentCountLast(), $oTopicRead->getCommentIdLast(),
|
|
|
|
|
$oTopicRead->getDateRead(), $oTopicRead->getTopicId(), $oTopicRead->getUserId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаляет записи о чтении записей по списку идентификаторов
|
|
|
|
|
*
|
|
|
|
|
* @param array $aTopicId Список ID топиков
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function DeleteTopicReadByArrayId($aTopicId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
|
|
|
|
DELETE FROM " . Config::Get('db.table.topic_read') . "
|
2009-10-25 22:01:05 +02:00
|
|
|
|
WHERE
|
|
|
|
|
topic_id IN(?a)
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $aTopicId);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получить список просмотром/чтения топиков по списку айдишников
|
|
|
|
|
*
|
|
|
|
|
* @param array $aArrayId Список ID топиков
|
|
|
|
|
* @param int $sUserId ID пользователя
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetTopicsReadByArray($aArrayId, $sUserId)
|
|
|
|
|
{
|
|
|
|
|
if (!is_array($aArrayId) or count($aArrayId) == 0) {
|
|
|
|
|
return array();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sql = "SELECT
|
2009-05-29 18:32:37 +03:00
|
|
|
|
t.*
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.topic_read') . " as t
|
2009-05-29 18:32:37 +03:00
|
|
|
|
WHERE
|
2010-04-04 17:58:11 +03:00
|
|
|
|
t.topic_id IN(?a)
|
2009-05-29 18:32:37 +03:00
|
|
|
|
AND
|
2010-04-04 17:58:11 +03:00
|
|
|
|
t.user_id = ?d
|
2009-05-29 18:32:37 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aReads = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql, $aArrayId, $sUserId)) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aReads[] = Engine::GetEntity('Topic_TopicRead', $aRow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aReads;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Перемещает топики в другой блог
|
|
|
|
|
*
|
|
|
|
|
* @param int $sBlogId ID старого блога
|
|
|
|
|
* @param int $sBlogIdNew ID нового блога
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function MoveTopics($sBlogId, $sBlogIdNew)
|
|
|
|
|
{
|
2015-02-01 10:50:43 +02:00
|
|
|
|
$aFields=array('blog_id','blog_id2','blog_id3','blog_id4','blog_id5');
|
|
|
|
|
foreach($aFields as $sField) {
|
|
|
|
|
$sql = "UPDATE " . Config::Get('db.table.topic') . "
|
|
|
|
|
SET
|
|
|
|
|
{$sField} = ?d
|
|
|
|
|
WHERE
|
|
|
|
|
{$sField} = ?d
|
|
|
|
|
";
|
|
|
|
|
$this->oDb->query($sql, $sBlogIdNew, $sBlogId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
2014-10-08 11:49:34 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Перемещает теги топиков в другой блог
|
|
|
|
|
*
|
|
|
|
|
* @param int $sBlogId ID старого блога
|
|
|
|
|
* @param int $sBlogIdNew ID нового блога
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function MoveTopicsTags($sBlogId, $sBlogIdNew)
|
|
|
|
|
{
|
|
|
|
|
$sql = "UPDATE " . Config::Get('db.table.topic_tag') . "
|
2010-04-17 20:55:22 +03:00
|
|
|
|
SET
|
|
|
|
|
blog_id= ?d
|
|
|
|
|
WHERE
|
|
|
|
|
blog_id = ?d
|
2012-06-25 20:53:05 +03:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $sBlogIdNew, $sBlogId);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Пересчитывает счетчик избранных топиков
|
|
|
|
|
*
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function RecalculateFavourite()
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
|
|
|
|
UPDATE " . Config::Get('db.table.topic') . " t
|
2011-10-09 20:23:38 +03:00
|
|
|
|
SET t.topic_count_favourite = (
|
|
|
|
|
SELECT count(f.user_id)
|
2014-10-08 11:49:34 +03:00
|
|
|
|
FROM " . Config::Get('db.table.favourite') . " f
|
2011-10-09 20:23:38 +03:00
|
|
|
|
WHERE
|
|
|
|
|
f.target_id = t.topic_id
|
|
|
|
|
AND
|
|
|
|
|
f.target_publish = 1
|
|
|
|
|
AND
|
|
|
|
|
f.target_type = 'topic'
|
|
|
|
|
)
|
2012-03-10 07:45:19 +02:00
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Пересчитывает счетчики голосований
|
|
|
|
|
*
|
|
|
|
|
* @return bool
|
|
|
|
|
*/
|
|
|
|
|
public function RecalculateVote()
|
|
|
|
|
{
|
|
|
|
|
$sql = "
|
|
|
|
|
UPDATE " . Config::Get('db.table.topic') . " t
|
2012-03-10 07:45:19 +02:00
|
|
|
|
SET t.topic_count_vote_up = (
|
|
|
|
|
SELECT count(*)
|
2014-10-08 11:49:34 +03:00
|
|
|
|
FROM " . Config::Get('db.table.vote') . " v
|
2012-03-10 07:45:19 +02:00
|
|
|
|
WHERE
|
|
|
|
|
v.target_id = t.topic_id
|
|
|
|
|
AND
|
|
|
|
|
v.vote_direction = 1
|
|
|
|
|
AND
|
|
|
|
|
v.target_type = 'topic'
|
|
|
|
|
), t.topic_count_vote_down = (
|
|
|
|
|
SELECT count(*)
|
2014-10-08 11:49:34 +03:00
|
|
|
|
FROM " . Config::Get('db.table.vote') . " v
|
2012-03-10 07:45:19 +02:00
|
|
|
|
WHERE
|
|
|
|
|
v.target_id = t.topic_id
|
|
|
|
|
AND
|
|
|
|
|
v.vote_direction = -1
|
|
|
|
|
AND
|
|
|
|
|
v.target_type = 'topic'
|
|
|
|
|
), t.topic_count_vote_abstain = (
|
|
|
|
|
SELECT count(*)
|
2014-10-08 11:49:34 +03:00
|
|
|
|
FROM " . Config::Get('db.table.vote') . " v
|
2012-03-10 07:45:19 +02:00
|
|
|
|
WHERE
|
|
|
|
|
v.target_id = t.topic_id
|
|
|
|
|
AND
|
|
|
|
|
v.vote_direction = 0
|
|
|
|
|
AND
|
|
|
|
|
v.target_type = 'topic'
|
|
|
|
|
)
|
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function GetTopicTypeByCode($sCode)
|
|
|
|
|
{
|
|
|
|
|
$sql = 'SELECT * FROM ' . Config::Get('db.table.topic_type') . ' WHERE code = ?';
|
|
|
|
|
if ($aRow = $this->oDb->selectRow($sql, $sCode)) {
|
|
|
|
|
return Engine::GetEntity('ModuleTopic_EntityTopicType', $aRow);
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function GetTopicTypeById($iId)
|
|
|
|
|
{
|
|
|
|
|
$sql = 'SELECT * FROM ' . Config::Get('db.table.topic_type') . ' WHERE id = ?d';
|
|
|
|
|
if ($aRow = $this->oDb->selectRow($sql, $iId)) {
|
|
|
|
|
return Engine::GetEntity('ModuleTopic_EntityTopicType', $aRow);
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function AddTopicType($oType)
|
|
|
|
|
{
|
|
|
|
|
$sql = "INSERT INTO " . Config::Get('db.table.topic_type') . "
|
2014-01-11 18:27:27 +02:00
|
|
|
|
(name,
|
|
|
|
|
name_many,
|
|
|
|
|
code,
|
|
|
|
|
allow_remove,
|
|
|
|
|
date_create,
|
|
|
|
|
state,
|
|
|
|
|
params
|
|
|
|
|
)
|
|
|
|
|
VALUES(?, ?, ?, ?d, ?, ?d, ?)
|
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($iId = $this->oDb->query($sql, $oType->getName(), $oType->getNameMany(), $oType->getCode(),
|
|
|
|
|
$oType->getAllowRemove(),
|
|
|
|
|
$oType->getDateCreate(), $oType->getState(), $oType->getParams())
|
|
|
|
|
) {
|
|
|
|
|
return $iId;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function GetTopicTypeItems($aFilter = array())
|
|
|
|
|
{
|
|
|
|
|
if (isset($aFilter['code_not']) and !is_array($aFilter['code_not'])) {
|
|
|
|
|
$aFilter['code_not'] = array($aFilter['code_not']);
|
|
|
|
|
}
|
|
|
|
|
$sql = "SELECT
|
2014-01-11 18:27:27 +02:00
|
|
|
|
*
|
|
|
|
|
FROM
|
2014-10-08 11:49:34 +03:00
|
|
|
|
" . Config::Get('db.table.topic_type') . "
|
2014-01-11 18:27:27 +02:00
|
|
|
|
WHERE
|
|
|
|
|
1 = 1
|
2014-02-06 14:52:12 +02:00
|
|
|
|
{ and `state` = ?d }
|
|
|
|
|
{ and `code` not IN (?a) }
|
2014-01-13 07:25:58 +02:00
|
|
|
|
ORDER BY sort desc
|
2014-01-11 18:27:27 +02:00
|
|
|
|
LIMIT 0, 500
|
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$aReturn = array();
|
|
|
|
|
if ($aRows = $this->oDb->select($sql,
|
|
|
|
|
isset($aFilter['state']) ? $aFilter['state'] : DBSIMPLE_SKIP,
|
|
|
|
|
(isset($aFilter['code_not']) and $aFilter['code_not']) ? $aFilter['code_not'] : DBSIMPLE_SKIP
|
|
|
|
|
)
|
|
|
|
|
) {
|
|
|
|
|
foreach ($aRows as $aRow) {
|
|
|
|
|
$aReturn[] = Engine::GetEntity('ModuleTopic_EntityTopicType', $aRow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $aReturn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function UpdateTopicType($oType)
|
|
|
|
|
{
|
|
|
|
|
$sql = "UPDATE " . Config::Get('db.table.topic_type') . "
|
2014-01-13 07:25:58 +02:00
|
|
|
|
SET
|
|
|
|
|
name= ?,
|
|
|
|
|
name_many= ?,
|
|
|
|
|
code= ?,
|
|
|
|
|
state= ?d,
|
|
|
|
|
sort= ?d,
|
|
|
|
|
params= ?
|
|
|
|
|
WHERE
|
|
|
|
|
id = ?d
|
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $oType->getName(), $oType->getNameMany(), $oType->getCode(), $oType->getState(),
|
|
|
|
|
$oType->getSort(), $oType->getParams(), $oType->getId());
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
2014-01-13 07:25:58 +02:00
|
|
|
|
|
2014-10-08 11:49:34 +03:00
|
|
|
|
public function DeleteTopicType($sTypeId)
|
|
|
|
|
{
|
|
|
|
|
$sql = "DELETE FROM " . Config::Get('db.table.topic_type') . "
|
2014-02-06 14:52:12 +02:00
|
|
|
|
WHERE
|
|
|
|
|
id = ?d
|
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
$res = $this->oDb->query($sql, $sTypeId);
|
|
|
|
|
return $this->IsSuccessful($res);
|
|
|
|
|
}
|
2014-02-06 14:52:12 +02:00
|
|
|
|
|
2014-10-08 11:49:34 +03:00
|
|
|
|
public function UpdateTopicByType($sType, $sTypeNew)
|
|
|
|
|
{
|
|
|
|
|
$sql = "UPDATE
|
|
|
|
|
" . Config::Get('db.table.topic') . "
|
2014-01-13 07:25:58 +02:00
|
|
|
|
SET topic_type = ?
|
|
|
|
|
WHERE
|
|
|
|
|
topic_type = ?
|
|
|
|
|
";
|
2014-10-08 11:49:34 +03:00
|
|
|
|
if ($this->oDb->query($sql, $sTypeNew, $sType) !== false) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2014-01-11 18:27:27 +02:00
|
|
|
|
}
|