1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-01 05:55:02 +03:00
ifhub.club/application/classes/modules/blog/mapper/Blog.mapper.class.php

641 lines
20 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/*
* 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>
*
*/
/**
* Маппер для работы с БД по части блогов
*
* @package application.modules.blog
* @since 1.0
*/
class ModuleBlog_MapperBlog extends Mapper
{
/**
* Добавляет блог в БД
*
* @param ModuleBlog_EntityBlog $oBlog Объект блога
* @return int|bool
*/
public function AddBlog(ModuleBlog_EntityBlog $oBlog)
{
$sql = "INSERT INTO " . Config::Get('db.table.blog') . "
(user_owner_id,
blog_title,
blog_description,
blog_type,
blog_date_add,
blog_limit_rating_topic,
blog_url,
blog_skip_index,
blog_avatar
)
VALUES(?d, ?, ?, ?, ?, ?, ?, ?, ?)
";
if ($iId = $this->oDb->query($sql, $oBlog->getOwnerId(), $oBlog->getTitle(), $oBlog->getDescription(),
$oBlog->getType(), $oBlog->getDateAdd(), $oBlog->getLimitRatingTopic(), $oBlog->getUrl(),
$oBlog->getSkipIndex(), $oBlog->getAvatar())
) {
return $iId;
}
return false;
}
/**
* Обновляет блог в БД
*
* @param ModuleBlog_EntityBlog $oBlog Объект блога
* @return bool
*/
public function UpdateBlog(ModuleBlog_EntityBlog $oBlog)
{
$sql = "UPDATE " . Config::Get('db.table.blog') . "
SET
blog_title= ?,
blog_description= ?,
blog_type= ?,
blog_date_edit= ?,
blog_count_vote = ?d,
blog_count_user= ?d,
blog_count_topic= ?d,
blog_limit_rating_topic= ?f ,
blog_url= ?,
blog_skip_index= ?d,
blog_avatar= ?
WHERE
blog_id = ?d
";
$res = $this->oDb->query($sql, $oBlog->getTitle(), $oBlog->getDescription(), $oBlog->getType(),
$oBlog->getDateEdit(), $oBlog->getCountVote(), $oBlog->getCountUser(),
$oBlog->getCountTopic(), $oBlog->getLimitRatingTopic(), $oBlog->getUrl(), $oBlog->getSkipIndex(), $oBlog->getAvatar(),
$oBlog->getId());
return $this->IsSuccessful($res);
}
/**
* Получает список блогов по ID
*
* @param array $aArrayId Список ID блогов
* @param array|null $aOrder Сортировка блогов
* @return array
*/
public function GetBlogsByArrayId($aArrayId, $aOrder = null)
{
if (!is_array($aArrayId) or count($aArrayId) == 0) {
return array();
}
if (!is_array($aOrder)) {
$aOrder = array($aOrder);
}
$sOrder = '';
foreach ($aOrder as $key => $value) {
$value = (string)$value;
if (!in_array($key,
array('blog_id', 'blog_title', 'blog_type', 'blog_count_user', 'blog_date_add'))
) {
unset($aOrder[$key]);
} elseif (in_array($value, array('asc', 'desc'))) {
$sOrder .= " {$key} {$value},";
}
}
$sOrder = trim($sOrder, ',');
$sql = "SELECT
*
FROM
" . Config::Get('db.table.blog') . "
WHERE
blog_id IN(?a)
ORDER BY
{ FIELD(blog_id,?a) } ";
if ($sOrder != '') {
$sql .= $sOrder;
}
$aBlogs = array();
if ($aRows = $this->oDb->select($sql, $aArrayId, $sOrder == '' ? $aArrayId : DBSIMPLE_SKIP)) {
foreach ($aRows as $aBlog) {
$aBlogs[] = Engine::GetEntity('Blog', $aBlog);
}
}
return $aBlogs;
}
/**
* Добавляет связь пользователя с блогом в БД
*
* @param ModuleBlog_EntityBlogUser $oBlogUser Объект отношения пользователя с блогом
* @return bool
*/
public function AddRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser)
{
$sql = "INSERT INTO " . Config::Get('db.table.blog_user') . "
(blog_id,
user_id,
user_role
)
VALUES(?d, ?d, ?d)
";
if ($this->oDb->query($sql, $oBlogUser->getBlogId(), $oBlogUser->getUserId(), $oBlogUser->getUserRole()) === 0
) {
return true;
}
return false;
}
/**
* Удаляет отношение пользователя с блогом
*
* @param ModuleBlog_EntityBlogUser $oBlogUser Объект отношения пользователя с блогом
* @return bool
*/
public function DeleteRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser)
{
$sql = "DELETE FROM " . Config::Get('db.table.blog_user') . "
WHERE
blog_id = ?d
AND
user_id = ?d
";
$res = $this->oDb->query($sql, $oBlogUser->getBlogId(), $oBlogUser->getUserId());
return $this->IsSuccessful($res);
}
/**
* Обновляет отношение пользователя с блогом
*
* @param ModuleBlog_EntityBlogUser $oBlogUser Объект отношения пользователя с блогом
* @return bool
*/
public function UpdateRelationBlogUser(ModuleBlog_EntityBlogUser $oBlogUser)
{
$sql = "UPDATE " . Config::Get('db.table.blog_user') . "
SET
user_role = ?d
WHERE
blog_id = ?d
AND
user_id = ?d
";
$res = $this->oDb->query($sql, $oBlogUser->getUserRole(), $oBlogUser->getBlogId(), $oBlogUser->getUserId());
return $this->IsSuccessful($res);
}
/**
* Получает список отношений пользователей с блогами
*
* @param array $aFilter Фильтр поиска отношений
* @param int $iCount Возвращает общее количество элементов
* @param int $iCurrPage Номер текущейс страницы
* @param int $iPerPage Количество элементов на одну страницу
* @return array
*/
public function GetBlogUsers($aFilter, &$iCount = null, $iCurrPage = null, $iPerPage = null)
{
if (isset($aFilter['blog_id']) and !is_array($aFilter['blog_id'])) {
$aFilter['blog_id']=array($aFilter['blog_id']);
}
if (isset($aFilter['user_role']) and !is_array($aFilter['user_role'])) {
$aFilter['user_role']=array($aFilter['user_role']);
}
if (is_null($iCurrPage)) {
$iCurrPage=1;
}
if (is_null($iPerPage)) {
$iPerPage=1000;
}
$sql = "SELECT
bu.*
FROM
" . Config::Get('db.table.blog_user') . " as bu
WHERE
1=1
{ AND bu.blog_id IN (?a) }
{ AND bu.user_id = ?d }
{ AND bu.user_role IN (?a) }
{ AND bu.user_role > ?d }
LIMIT ?d, ?d
";
$aResult = array();
if ($aRows = $this->oDb->selectPage($iCount, $sql,
(isset($aFilter['blog_id']) and count($aFilter['blog_id'])) ? $aFilter['blog_id'] : DBSIMPLE_SKIP,
isset($aFilter['user_id']) ? $aFilter['user_id'] : DBSIMPLE_SKIP,
(isset($aFilter['user_role']) and count($aFilter['user_role'])) ? $aFilter['user_role'] : DBSIMPLE_SKIP,
!isset($aFilter['user_role']) ? ModuleBlog::BLOG_USER_ROLE_GUEST : DBSIMPLE_SKIP,
($iCurrPage - 1) * $iPerPage, $iPerPage
)
) {
foreach ($aRows as $aRow) {
$aResult[] = Engine::GetEntity('Blog_BlogUser', $aRow);
}
}
return $aResult;
}
/**
* Получает список отношений пользователя к блогам
*
* @param array $aArrayId Список ID блогов
* @param int $sUserId ID блогов
* @return array
*/
public function GetBlogUsersByArrayBlog($aArrayId, $sUserId)
{
if (!is_array($aArrayId) or count($aArrayId) == 0) {
return array();
}
$sql = "SELECT
bu.*
FROM
" . Config::Get('db.table.blog_user') . " as bu
WHERE
bu.blog_id IN(?a)
AND
bu.user_id = ?d ";
$aBlogUsers = array();
if ($aRows = $this->oDb->select($sql, $aArrayId, $sUserId)) {
foreach ($aRows as $aUser) {
$aBlogUsers[] = Engine::GetEntity('Blog_BlogUser', $aUser);
}
}
return $aBlogUsers;
}
/**
* Получает ID персонального блога пользователя
*
* @param int $sUserId ID пользователя
* @return int|null
*/
public function GetPersonalBlogByUserId($sUserId)
{
$sql = "SELECT blog_id FROM " . Config::Get('db.table.blog') . " WHERE user_owner_id = ?d and blog_type='personal'";
if ($aRow = $this->oDb->selectRow($sql, $sUserId)) {
return $aRow['blog_id'];
}
return null;
}
/**
* Получает блог по названию
*
* @param string $sTitle Нащвание блога
* @return ModuleBlog_EntityBlog|null
*/
public function GetBlogByTitle($sTitle)
{
$sql = "SELECT blog_id FROM " . Config::Get('db.table.blog') . " WHERE blog_title = ? ";
if ($aRow = $this->oDb->selectRow($sql, $sTitle)) {
return $aRow['blog_id'];
}
return null;
}
/**
* Получает блог по URL
*
* @param string $sUrl URL блога
* @return ModuleBlog_EntityBlog|null
*/
public function GetBlogByUrl($sUrl)
{
$sql = "SELECT
b.blog_id
FROM
" . Config::Get('db.table.blog') . " as b
WHERE
b.blog_url = ?
";
if ($aRow = $this->oDb->selectRow($sql, $sUrl)) {
return $aRow['blog_id'];
}
return null;
}
/**
* Получить список блогов по хозяину
*
* @param int $sUserId ID пользователя
* @return array
*/
public function GetBlogsByOwnerId($sUserId)
{
$sql = "SELECT
b.blog_id
FROM
" . Config::Get('db.table.blog') . " as b
WHERE
b.user_owner_id = ?
AND
b.blog_type<>'personal'
";
$aBlogs = array();
if ($aRows = $this->oDb->select($sql, $sUserId)) {
foreach ($aRows as $aBlog) {
$aBlogs[] = $aBlog['blog_id'];
}
}
return $aBlogs;
}
/**
* Возвращает список всех не персональных блогов
*
* @return array
*/
public function GetBlogs()
{
$sql = "SELECT
b.blog_id
FROM
" . Config::Get('db.table.blog') . " as b
WHERE
b.blog_type<>'personal'
";
$aBlogs = array();
if ($aRows = $this->oDb->select($sql)) {
foreach ($aRows as $aBlog) {
$aBlogs[] = $aBlog['blog_id'];
}
}
return $aBlogs;
}
/**
* Возвращает список не персональных блогов с сортировкой по рейтингу
*
* @param int $iCount Возвращает общее количество элементов
* @param int $iCurrPage Номер текущей страницы
* @param int $iPerPage Количество элементов на одну страницу
* @return array
*/
public function GetBlogsRating(&$iCount, $iCurrPage, $iPerPage)
{
$sql = "SELECT
b.blog_id
FROM
" . Config::Get('db.table.blog') . " as b
WHERE
b.blog_type<>'personal'
ORDER by b.blog_count_user desc
LIMIT ?d, ?d ";
$aReturn = array();
if ($aRows = $this->oDb->selectPage($iCount, $sql, ($iCurrPage - 1) * $iPerPage, $iPerPage)) {
foreach ($aRows as $aRow) {
$aReturn[] = $aRow['blog_id'];
}
}
return $aReturn;
}
/**
* Получает список блогов в которых состоит пользователь
*
* @param int $sUserId ID пользователя
* @param int $iLimit Ограничение на выборку элементов
* @return array
*/
public function GetBlogsRatingJoin($sUserId, $iLimit)
{
$sql = "SELECT
b.*
FROM
" . Config::Get('db.table.blog_user') . " as bu,
" . Config::Get('db.table.blog') . " as b
WHERE
bu.user_id = ?d
AND
bu.blog_id = b.blog_id
AND
b.blog_type<>'personal'
ORDER by b.blog_count_user desc
LIMIT 0, ?d
;
";
$aReturn = array();
if ($aRows = $this->oDb->select($sql, $sUserId, $iLimit)) {
foreach ($aRows as $aRow) {
$aReturn[] = Engine::GetEntity('Blog', $aRow);
}
}
return $aReturn;
}
/**
* Получает список блогов, которые создал пользователь
*
* @param int $sUserId ID пользователя
* @param int $iLimit Ограничение на выборку элементов
* @return array
*/
public function GetBlogsRatingSelf($sUserId, $iLimit)
{
$sql = "SELECT
b.*
FROM
" . Config::Get('db.table.blog') . " as b
WHERE
b.user_owner_id = ?d
AND
b.blog_type<>'personal'
ORDER by b.blog_count_user desc
LIMIT 0, ?d
;";
$aReturn = array();
if ($aRows = $this->oDb->select($sql, $sUserId, $iLimit)) {
foreach ($aRows as $aRow) {
$aReturn[] = Engine::GetEntity('Blog', $aRow);
}
}
return $aReturn;
}
/**
* Возвращает полный список закрытых блогов
*
* @return array
*/
public function GetCloseBlogs()
{
$sql = "SELECT b.blog_id
FROM " . Config::Get('db.table.blog') . " as b
WHERE b.blog_type='close'
;";
$aReturn = array();
if ($aRows = $this->oDb->select($sql)) {
foreach ($aRows as $aRow) {
$aReturn[] = $aRow['blog_id'];
}
}
return $aReturn;
}
/**
* Удаление блога из базы данных
*
* @param int $iBlogId ID блога
* @return bool
*/
public function DeleteBlog($iBlogId)
{
$sql = "
DELETE FROM " . Config::Get('db.table.blog') . "
WHERE blog_id = ?d
";
$res = $this->oDb->query($sql, $iBlogId);
return $this->IsSuccessful($res);
}
/**
* Удалить пользователей блога по идентификатору блога
*
* @param int $iBlogId ID блога
* @return bool
*/
public function DeleteBlogUsersByBlogId($iBlogId)
{
$sql = "
DELETE FROM " . Config::Get('db.table.blog_user') . "
WHERE blog_id = ?d
";
$res = $this->oDb->query($sql, $iBlogId);
return $this->IsSuccessful($res);
}
/**
* Пересчитывает число топиков в блогах
*
* @param int|null $iBlogId ID блога
* @return bool
*/
public function RecalculateCountTopic($iBlogId = null)
{
$sql = "
UPDATE " . Config::Get('db.table.blog') . " b
SET b.blog_count_topic = (
SELECT count(*)
FROM " . Config::Get('db.table.topic') . " t
WHERE
(
t.blog_id = b.blog_id OR
t.blog_id2 = b.blog_id OR
t.blog_id3 = b.blog_id OR
t.blog_id4 = b.blog_id OR
t.blog_id5 = b.blog_id
)
AND
t.topic_publish = 1
)
WHERE 1=1
{ and b.blog_id = ?d }
";
$res = $this->oDb->query($sql, is_null($iBlogId) ? DBSIMPLE_SKIP : $iBlogId);
return $this->IsSuccessful($res);
}
/**
* Получает список блогов по фильтру
*
* @param array $aFilter Фильтр выборки
* @param array $aOrder Сортировка
* @param int $iCount Возвращает общее количество элментов
* @param int $iCurrPage Номер текущей страницы
* @param int $iPerPage Количество элементов на одну страницу
* @return array
*/
public function GetBlogsByFilter($aFilter, $aOrder, &$iCount, $iCurrPage, $iPerPage)
{
$aOrderAllow = array('blog_id', 'blog_title', 'blog_count_user', 'blog_count_topic');
$sOrder = '';
foreach ($aOrder as $key => $value) {
if (!in_array($key, $aOrderAllow)) {
unset($aOrder[$key]);
} elseif (in_array($value, array('asc', 'desc'))) {
$sOrder .= " b.{$key} {$value},";
}
}
$sOrder = trim($sOrder, ',');
if ($sOrder == '') {
$sOrder = ' b.blog_id desc ';
}
if (isset($aFilter['exclude_type']) and !is_array($aFilter['exclude_type'])) {
$aFilter['exclude_type'] = array($aFilter['exclude_type']);
}
if (isset($aFilter['type']) and !is_array($aFilter['type'])) {
$aFilter['type'] = array($aFilter['type']);
}
if (isset($aFilter['id']) and !is_array($aFilter['id'])) {
$aFilter['id'] = array($aFilter['id']);
}
$iUserCurrentId=0;
if (isset($aFilter['roles_user_id'])) {
$iUserCurrentId=$aFilter['roles_user_id'];
} elseif ($oUserCurrent=$this->User_GetUserCurrent()) {
$iUserCurrentId=$oUserCurrent->getId();
}
$sql = "SELECT
b.blog_id
FROM
" . Config::Get('db.table.blog') . " as b
{
JOIN " . Config::Get('db.table.blog_user') . " as bu
ON ( bu.blog_id = b.blog_id and bu.user_id = '{$iUserCurrentId}'
and bu.user_role in (?a)
)
}
WHERE
1 = 1
{ AND b.blog_id IN (?a) }
{ AND b.user_owner_id = ?d }
{ AND b.blog_type IN (?a) }
{ AND b.blog_type not IN (?a) }
{ AND b.blog_url = ? }
{ AND b.blog_title LIKE ? }
ORDER by {$sOrder}
LIMIT ?d, ?d ;
";
$aResult = array();
if ($aRows = $this->oDb->selectPage($iCount, $sql,
(isset($aFilter['roles']) and count($aFilter['roles'])) ? $aFilter['roles'] : DBSIMPLE_SKIP,
(isset($aFilter['id']) and count($aFilter['id'])) ? $aFilter['id'] : DBSIMPLE_SKIP,
isset($aFilter['user_owner_id']) ? $aFilter['user_owner_id'] : DBSIMPLE_SKIP,
(isset($aFilter['type']) and count($aFilter['type'])) ? $aFilter['type'] : DBSIMPLE_SKIP,
(isset($aFilter['exclude_type']) and count($aFilter['exclude_type'])) ? $aFilter['exclude_type'] : DBSIMPLE_SKIP,
isset($aFilter['url']) ? $aFilter['url'] : DBSIMPLE_SKIP,
isset($aFilter['title']) ? $aFilter['title'] : DBSIMPLE_SKIP,
($iCurrPage - 1) * $iPerPage, $iPerPage
)
) {
foreach ($aRows as $aRow) {
$aResult[] = $aRow['blog_id'];
}
}
return $aResult;
}
}