mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-07-08 09:24:25 +03:00
Merge branch 'master' of git://github.com/livestreet/livestreet
This commit is contained in:
commit
17f1793ba1
|
@ -1,9 +1,12 @@
|
|||
AddDefaultCharset UTF-8
|
||||
Options -Indexes
|
||||
RewriteEngine On
|
||||
#RewriteBase /
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule ^(.*)$ ./index.php
|
||||
# Alternative rule
|
||||
#RewriteRule ^(.*)$ /index.php
|
||||
|
||||
<Files "plugins.dat">
|
||||
order allow,deny
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
|
||||
LiveStreet 1.0-dev
|
||||
LiveStreet 1.0.1
|
||||
|
||||
INSTALLATION
|
||||
1. Copy files to the engine to the desired directory site
|
||||
|
@ -24,31 +24,32 @@ INSTALLATION
|
|||
|
||||
Upgrading from 0.5.1
|
||||
0. Be sure to make backup of your site and database
|
||||
1. Update to version 1.0 can only database, so copy the new version over the old NOT to install, use a clean directory
|
||||
1. Update to version 1.0.1 can only database, so copy the new version over the old NOT to install, use a clean directory
|
||||
2. Copy files to the engine to the desired directory site
|
||||
3. Copy the file to a new directory on your config.local.php old version 0.5.1 and copy the directory /uploads/ all files
|
||||
4. Enter the address http://you_site/install/
|
||||
5. Follow the instructions of the installer. When you create the database required By clicking the "Convert base 0.5.1 in 1.0"
|
||||
5. Follow the instructions of the installer. When you create the database required By clicking the "Convert base 0.5.1 in 1.0.1"
|
||||
|
||||
Upgrading from 1.0
|
||||
0. Be sure to make backup of your site and database
|
||||
1. Delete old files (except /config/config.local.php and directory /uploads/ all files) and copy the new files to a directory site
|
||||
2.1 Enter the address http://you_site/install/ and to step in creating a database to mark checkbox "Convert 1.0 DB to 1.0.1 "
|
||||
2.2 Or execute the SQL patch /install/convert_1.0_to_1.0.1.sql in phpMyAdmin or via the console MySQL, replacing prefix tables (prefix_) in the database on your
|
||||
|
||||
|
||||
|
||||
Configuration and Tuning Engines
|
||||
Settings are in a file /config/config.php. For them to change is desirable to override these settings in the file config.local.php, this will avoid problems with future upgrades.
|
||||
Management plug-ins can be found at /admin/plugins/
|
||||
|
||||
STANDARD TEMPLATES
|
||||
Version 1.0 support only jQuery templates!
|
||||
Version 1.* support only jQuery templates!
|
||||
|
||||
OPPORTUNITIES SEARCH
|
||||
LiveStreet supports full-text search on the site using the search engine Sphinx.
|
||||
Accordingly, if you need search on the site, you must install and configure the server Sphinx, a sample configuration file (sphinx.conf) is located in the directory /install/
|
||||
|
||||
|
||||
DISABLE SPONSORED LINK
|
||||
Since LiveStreet engine is free, we insert in each release of some internal pages link to sponsor's current release.
|
||||
This helps us to get financial investments to the project and accelerate its development.
|
||||
If you are totally against sponsored links, you can remove it by removing the file /classes/hooks/HookSponsor.class.php
|
||||
We urge you not to delete link the sponsor.
|
||||
|
||||
|
||||
For all questions, please visit Eanglish community http://livestreetcms.net
|
||||
Official site of the project http://livestreetcms.com
|
||||
Russian community http://livestreet.ru
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
|
||||
|
||||
LiveStreet 1.0-dev
|
||||
LiveStreet 1.0.1
|
||||
|
||||
УСТАНОВКА
|
||||
1. Скопировать файлы движка в нужный каталог сайта
|
||||
|
@ -24,32 +24,30 @@ LiveStreet 1.0-dev
|
|||
|
||||
ОБНОВЛЕНИЕ С ВЕРСИИ 0.5.1
|
||||
0. ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ РЕЗЕРВНЫЕ КОПИИ ВАШЕГО САЙТА И БАЗЫ ДАННЫХ
|
||||
1. Обновить до версии 1.0 возможно только базу данных, поэтому копировать новую версию поверх старой НЕЛЬЗЯ, для установки используйте чистый каталог
|
||||
1. Обновить до версии 1.0.1 возможно только базу данных, поэтому копировать новую версию поверх старой НЕЛЬЗЯ, для установки используйте чистый каталог
|
||||
2. Скопировать файлы движка в новый нужный каталог сайта
|
||||
3. Скопировать в новый каталог файл config.local.php от вашей старой версии 0.5.1 и скопировать каталог /uploads/ со всеми файлами.
|
||||
4. Зайти по адресу http://ваш_сайт_на_ls/install/
|
||||
5. Следовать инструкциям установщика. При создании базы данных обязательно поставить галку "Конвертировать базу 0.5.1 в 1.0"
|
||||
5. Следовать инструкциям установщика. При создании базы данных обязательно поставить галку "Конвертировать базу 0.5.1 в 1.0.1"
|
||||
|
||||
ОБНОВЛЕНИЕ С ВЕРСИИ 1.0
|
||||
0. ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ РЕЗЕРВНЫЕ КОПИИ ВАШЕГО САЙТА И БАЗЫ ДАННЫХ
|
||||
1. Удалите старые файлы кроме /config/config.local.php и каталога /uploads/ со всеми файлами, скопируйте новые файлы движка в нужный каталог сайта
|
||||
2.1 Зайти по адресу http://ваш_сайт_на_ls/install/ и на шаге создания базы данных поставить галку "Конвертировать базу 1.0 в 1.0.1"
|
||||
2.2 Либо руками выполнить SQL патч /install/convert_1.0_to_1.0.1.sql в phpMyAdmin или через консоль MySQL, предварительно сменив префикс таблиц в БД на ваш
|
||||
|
||||
|
||||
КОНФИГУРАЦИЯ И НАСТРОЙКА ДВИЖКА
|
||||
Настройки находятся в файле /config/config.php. Для их изменения желательно переопределять эти настройки в файле config.local.php, это позволит избежать проблем при последующих обновлениях.
|
||||
Управление плагинами находится по адресу /admin/plugins/
|
||||
|
||||
СТАНДАРТНЫЕ ШАБЛОНЫ
|
||||
Версии 1.0 поддерживает только jQuery шаблоны!
|
||||
Версии 1.* поддерживает только jQuery шаблоны!
|
||||
|
||||
ВОЗМОЖНОСТИ ПОИСКА ПО САЙТУ
|
||||
LiveStreet поддерживает полнотекстовый поиск по сайту с использованием поискового движка Sphinx.
|
||||
Соответственно если нужен поиск на сайте, то необходимо установить и настроить на сервере Sphinx, пример конфигурационного файла(sphinx.conf) находится в каталоге /install/
|
||||
|
||||
|
||||
ОТКЛЮЧЕНИЕ СПОНСОРСКОЙ ССЫЛКИ
|
||||
Т.к. LiveStreet является бесплатным движком, мы в каждом релизе вставляем на некоторые внутренние страницы ссылку на спонсора текущего релиза.
|
||||
Ссылка вставляется вместо нашего копирайта на сайт livestreetcms.com
|
||||
Это помогает нам получить финансовые вливания в проект и ускорить его развитие.
|
||||
Если вы категорически против спонсорской ссылки, то можете убрать её, удалив файл /classes/hooks/HookSponsor.class.php
|
||||
Мы настоятельно просим вас не удалять ссылку спонсора.
|
||||
|
||||
|
||||
|
||||
По всем вопросам обращайтесь на сайт русского комьюнити http://livestreet.ru
|
||||
Официальный сайт проекта http://livestreetcms.com
|
|
@ -93,6 +93,10 @@ class ActionAjax extends Action {
|
|||
/**
|
||||
* Если блог существует и он не персональный
|
||||
*/
|
||||
if (!is_string(getRequest('iBlogId'))) {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
|
||||
return;
|
||||
}
|
||||
if (!($oBlog=$this->Blog_GetBlogById(getRequest('iBlogId'))) or $oBlog->getType()=='personal') {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
|
||||
return;
|
||||
|
@ -596,7 +600,7 @@ class ActionAjax extends Action {
|
|||
/**
|
||||
* Обрабатываем теги
|
||||
*/
|
||||
$aTags=explode(',',trim(getRequest('tags'),"\r\n\t\0\x0B ."));
|
||||
$aTags=explode(',',trim((string)getRequest('tags'),"\r\n\t\0\x0B ."));
|
||||
$aTagsNew=array();
|
||||
$aTagsNewLow=array();
|
||||
$aTagsReturn=array();
|
||||
|
@ -1019,7 +1023,7 @@ class ActionAjax extends Action {
|
|||
*
|
||||
*/
|
||||
protected function EventPreviewText() {
|
||||
$sText=getRequest('text',null,'post');
|
||||
$sText=(string)getRequest('text',null,'post');
|
||||
$bSave=getRequest('save',null,'post');
|
||||
/**
|
||||
* Экранировать или нет HTML теги
|
||||
|
@ -1104,7 +1108,7 @@ class ActionAjax extends Action {
|
|||
/**
|
||||
* Первые буквы тега переданы?
|
||||
*/
|
||||
if (!($sValue=getRequest('value',null,'post'))) {
|
||||
if (!($sValue=getRequest('value',null,'post')) or !is_string($sValue)) {
|
||||
return ;
|
||||
}
|
||||
$aItems=array();
|
||||
|
@ -1128,7 +1132,7 @@ class ActionAjax extends Action {
|
|||
/**
|
||||
* Первые буквы логина переданы?
|
||||
*/
|
||||
if (!($sValue=getRequest('value',null,'post'))) {
|
||||
if (!($sValue=getRequest('value',null,'post')) or !is_string($sValue)) {
|
||||
return ;
|
||||
}
|
||||
$aItems=array();
|
||||
|
|
|
@ -116,36 +116,39 @@ class ActionBlog extends Action {
|
|||
*
|
||||
*/
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEventPreg('/^good$/i','/^(page(\d+))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^good$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEvent('good',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^bad$/i','/^(page(\d+))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^new$/i','/^(page(\d+))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^discussed$/i','/^(page(\d+))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^top$/i','/^(page(\d+))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^bad$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^new$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^newall$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^discussed$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
||||
$this->AddEventPreg('/^top$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventTopics','topics'));
|
||||
|
||||
$this->AddEvent('add','EventAddBlog');
|
||||
$this->AddEvent('edit','EventEditBlog');
|
||||
$this->AddEvent('delete','EventDeleteBlog');
|
||||
$this->AddEventPreg('/^admin$/i','/^\d+$/i','/^(page(\d+))?$/i','EventAdminBlog');
|
||||
$this->AddEventPreg('/^admin$/i','/^\d+$/i','/^(page([1-9]\d{0,5}))?$/i','EventAdminBlog');
|
||||
$this->AddEvent('invite','EventInviteBlog');
|
||||
|
||||
$this->AddEvent('ajaxaddcomment','AjaxAddComment');
|
||||
$this->AddEvent('ajaxresponsecomment','AjaxResponseComment');
|
||||
$this->AddEvent('ajaxaddbloginvite', 'AjaxAddBlogInvite');
|
||||
$this->AddEvent('ajaxrebloginvite', 'AjaxReBlogInvite');
|
||||
$this->AddEvent('ajaxremovebloginvite', 'AjaxRemoveBlogInvite');
|
||||
$this->AddEvent('ajaxbloginfo', 'AjaxBlogInfo');
|
||||
$this->AddEvent('ajaxblogjoin', 'AjaxBlogJoin');
|
||||
|
||||
$this->AddEventPreg('/^(\d+)\.html$/i','/^$/i',array('EventShowTopic','topic'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(\d+)\.html$/i',array('EventShowTopic','topic'));
|
||||
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(page(\d+))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^bad$/i','/^(page(\d+))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^new$/i','/^(page(\d+))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^discussed$/i','/^(page(\d+))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^top$/i','/^(page(\d+))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^bad$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^new$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^newall$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^discussed$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^top$/i','/^(page([1-9]\d{0,5}))?$/i',array('EventShowBlog','blog'));
|
||||
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^users$/i','/^(page(\d+))?$/i','EventShowUsers');
|
||||
$this->AddEventPreg('/^[\w\-\_]+$/i','/^users$/i','/^(page([1-9]\d{0,5}))?$/i','EventShowUsers');
|
||||
}
|
||||
|
||||
|
||||
|
@ -204,7 +207,7 @@ class ActionBlog extends Action {
|
|||
$oBlog->setType(getRequest('blog_type'));
|
||||
$oBlog->setDateAdd(date("Y-m-d H:i:s"));
|
||||
$oBlog->setLimitRatingTopic(getRequest('blog_limit_rating_topic'));
|
||||
$oBlog->setUrl(getRequest('blog_url'));
|
||||
$oBlog->setUrl((string)getRequest('blog_url'));
|
||||
$oBlog->setAvatar(null);
|
||||
/**
|
||||
* Загрузка аватара, делаем ресайзы
|
||||
|
@ -312,7 +315,7 @@ class ActionBlog extends Action {
|
|||
$oBlog->setType(getRequest('blog_type'));
|
||||
$oBlog->setLimitRatingTopic(getRequest('blog_limit_rating_topic'));
|
||||
if ($this->oUserCurrent->isAdministrator()) {
|
||||
$oBlog->setUrl(getRequest('blog_url')); // разрешаем смену URL блога только админу
|
||||
$oBlog->setUrl((string)getRequest('blog_url')); // разрешаем смену URL блога только админу
|
||||
}
|
||||
/**
|
||||
* Загрузка аватара, делаем ресайзы
|
||||
|
@ -498,21 +501,23 @@ class ActionBlog extends Action {
|
|||
if (!func_check(getRequest('blog_title'),'text',2,200)) {
|
||||
$this->Message_AddError($this->Lang_Get('blog_create_title_error'),$this->Lang_Get('error'));
|
||||
$bOk=false;
|
||||
}
|
||||
/**
|
||||
* Проверяем есть ли уже блог с таким названием
|
||||
*/
|
||||
if ($oBlogExists=$this->Blog_GetBlogByTitle(getRequest('blog_title'))) {
|
||||
if (!$oBlog or $oBlog->getId()!=$oBlogExists->getId()) {
|
||||
$this->Message_AddError($this->Lang_Get('blog_create_title_error_unique'),$this->Lang_Get('error'));
|
||||
$bOk=false;
|
||||
} else {
|
||||
/**
|
||||
* Проверяем есть ли уже блог с таким названием
|
||||
*/
|
||||
if ($oBlogExists=$this->Blog_GetBlogByTitle(getRequest('blog_title'))) {
|
||||
if (!$oBlog or $oBlog->getId()!=$oBlogExists->getId()) {
|
||||
$this->Message_AddError($this->Lang_Get('blog_create_title_error_unique'),$this->Lang_Get('error'));
|
||||
$bOk=false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяем есть ли URL блога, с заменой всех пробельных символов на "_"
|
||||
*/
|
||||
if (!$oBlog or $this->oUserCurrent->isAdministrator()) {
|
||||
$blogUrl=preg_replace("/\s+/",'_',getRequest('blog_url'));
|
||||
$blogUrl=preg_replace("/\s+/",'_',(string)getRequest('blog_url'));
|
||||
$_REQUEST['blog_url']=$blogUrl;
|
||||
if (!func_check(getRequest('blog_url'),'login',2,50)) {
|
||||
$this->Message_AddError($this->Lang_Get('blog_create_url_error'),$this->Lang_Get('error'));
|
||||
|
@ -529,7 +534,7 @@ class ActionBlog extends Action {
|
|||
/**
|
||||
* Проверяем есть ли уже блог с таким URL
|
||||
*/
|
||||
if ($oBlogExists=$this->Blog_GetBlogByUrl(getRequest('blog_url'))) {
|
||||
if ($oBlogExists=$this->Blog_GetBlogByUrl((string)getRequest('blog_url'))) {
|
||||
if (!$oBlog or $oBlog->getId()!=$oBlogExists->getId()) {
|
||||
$this->Message_AddError($this->Lang_Get('blog_create_url_error_unique'),$this->Lang_Get('error'));
|
||||
$bOk=false;
|
||||
|
@ -578,7 +583,7 @@ class ActionBlog extends Action {
|
|||
/**
|
||||
* Меню
|
||||
*/
|
||||
$this->sMenuSubItemSelect=$sShowType;
|
||||
$this->sMenuSubItemSelect=$sShowType=='newall' ? 'new' : $sShowType;
|
||||
/**
|
||||
* Передан ли номер страницы
|
||||
*/
|
||||
|
@ -811,7 +816,7 @@ class ActionBlog extends Action {
|
|||
$sPeriod=getRequest('period');
|
||||
}
|
||||
$sBlogUrl=$this->sCurrentEvent;
|
||||
$sShowType=in_array($this->GetParamEventMatch(0,0),array('bad','new','discussed','top')) ? $this->GetParamEventMatch(0,0) : 'good';
|
||||
$sShowType=in_array($this->GetParamEventMatch(0,0),array('bad','new','newall','discussed','top')) ? $this->GetParamEventMatch(0,0) : 'good';
|
||||
if (!in_array($sShowType,array('discussed','top'))) {
|
||||
$sPeriod='all';
|
||||
}
|
||||
|
@ -839,7 +844,7 @@ class ActionBlog extends Action {
|
|||
/**
|
||||
* Меню
|
||||
*/
|
||||
$this->sMenuSubItemSelect=$sShowType;
|
||||
$this->sMenuSubItemSelect=$sShowType=='newall' ? 'new' : $sShowType;
|
||||
$this->sMenuSubBlogUrl=$oBlog->getUrlFull();
|
||||
/**
|
||||
* Передан ли номер страницы
|
||||
|
@ -1197,7 +1202,7 @@ class ActionBlog extends Action {
|
|||
/**
|
||||
* Проверяем существование блога
|
||||
*/
|
||||
if(!$oBlog=$this->Blog_GetBlogById($sBlogId)) {
|
||||
if(!$oBlog=$this->Blog_GetBlogById($sBlogId) or !is_string($sUsers)) {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
||||
return;
|
||||
}
|
||||
|
@ -1373,6 +1378,59 @@ class ActionBlog extends Action {
|
|||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Обработка ajax запроса на удаление вступить в закрытый блог
|
||||
*/
|
||||
protected function AjaxRemoveBlogInvite() {
|
||||
/**
|
||||
* Устанавливаем формат Ajax ответа
|
||||
*/
|
||||
$this->Viewer_SetResponseAjax('json');
|
||||
$sUserId=getRequest('idUser',null,'post');
|
||||
$sBlogId=getRequest('idBlog',null,'post');
|
||||
/**
|
||||
* Если пользователь не авторизирован, возвращаем ошибку
|
||||
*/
|
||||
if (!$this->User_IsAuthorization()) {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
|
||||
return;
|
||||
}
|
||||
$this->oUserCurrent=$this->User_GetUserCurrent();
|
||||
/**
|
||||
* Проверяем существование блога
|
||||
*/
|
||||
if(!$oBlog=$this->Blog_GetBlogById($sBlogId)) {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* Пользователь существует и активен?
|
||||
*/
|
||||
if (!$oUser=$this->User_GetUserById($sUserId) or $oUser->getActivate()!=1) {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
||||
return;
|
||||
}
|
||||
/**
|
||||
* Проверяем, имеет ли право текущий пользователь добавлять invite в blog
|
||||
*/
|
||||
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId());
|
||||
$bIsAdministratorBlog=$oBlogUser ? $oBlogUser->getIsAdministrator() : false;
|
||||
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator() and !$bIsAdministratorBlog) {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
||||
return;
|
||||
}
|
||||
|
||||
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$oUser->getId());
|
||||
if ($oBlogUser->getUserRole()==ModuleBlog::BLOG_USER_ROLE_INVITE) {
|
||||
/**
|
||||
* Удаляем связь/приглашение
|
||||
*/
|
||||
$this->Blog_DeleteRelationBlogUser($oBlogUser);
|
||||
$this->Message_AddNoticeSingle($this->Lang_Get('blog_user_invite_remove_ok',array('login'=>$oUser->getLogin())),$this->Lang_Get('attention'));
|
||||
} else {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Выполняет отправку приглашения в блог
|
||||
* (по внутренней почте и на email)
|
||||
|
@ -1430,7 +1488,7 @@ class ActionBlog extends Action {
|
|||
/**
|
||||
* Получаем код подтверждения из ревеста и дешефруем его
|
||||
*/
|
||||
$sCode=xxtea_decrypt(base64_decode(rawurldecode(getRequest('code'))), Config::Get('module.blog.encrypt'));
|
||||
$sCode=xxtea_decrypt(base64_decode(rawurldecode((string)getRequest('code'))), Config::Get('module.blog.encrypt'));
|
||||
if (!$sCode) {
|
||||
return $this->EventNotFound();
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ class ActionBlogs extends Action {
|
|||
* Регистрируем евенты
|
||||
*/
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEventPreg('/^(page(\d+))?$/i','EventShowBlogs');
|
||||
$this->AddEventPreg('/^(page([1-9]\d{0,5}))?$/i','EventShowBlogs');
|
||||
$this->AddEventPreg('/^ajax-search$/i','EventAjaxSearch');
|
||||
}
|
||||
|
||||
|
@ -87,14 +87,14 @@ class ActionBlogs extends Action {
|
|||
*/
|
||||
$sOrder='blog_rating';
|
||||
if (getRequest('order')) {
|
||||
$sOrder=getRequest('order');
|
||||
$sOrder=(string)getRequest('order');
|
||||
}
|
||||
/**
|
||||
* В каком направлении сортировать
|
||||
*/
|
||||
$sOrderWay='desc';
|
||||
if (getRequest('order_way')) {
|
||||
$sOrderWay=getRequest('order_way');
|
||||
$sOrderWay=(string)getRequest('order_way');
|
||||
}
|
||||
/**
|
||||
* Фильтр поиска блогов
|
||||
|
|
|
@ -45,7 +45,7 @@ class ActionComments extends Action {
|
|||
* Регистрация евентов
|
||||
*/
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEventPreg('/^(page(\d+))?$/i','EventComments');
|
||||
$this->AddEventPreg('/^(page([1-9]\d{0,5}))?$/i','EventComments');
|
||||
$this->AddEventPreg('/^\d+$/i','EventShowComment');
|
||||
}
|
||||
|
||||
|
|
|
@ -76,10 +76,11 @@ class ActionIndex extends Action {
|
|||
*
|
||||
*/
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEventPreg('/^(page(\d+))?$/i','EventIndex');
|
||||
$this->AddEventPreg('/^new$/i','/^(page(\d+))?$/i','EventNew');
|
||||
$this->AddEventPreg('/^discussed/i','/^(page(\d+))?$/i','EventDiscussed');
|
||||
$this->AddEventPreg('/^top/i','/^(page(\d+))?$/i','EventTop');
|
||||
$this->AddEventPreg('/^(page([1-9]\d{0,5}))?$/i','EventIndex');
|
||||
$this->AddEventPreg('/^new$/i','/^(page([1-9]\d{0,5}))?$/i','EventNew');
|
||||
$this->AddEventPreg('/^newall$/i','/^(page([1-9]\d{0,5}))?$/i','EventNewAll');
|
||||
$this->AddEventPreg('/^discussed/i','/^(page([1-9]\d{0,5}))?$/i','EventDiscussed');
|
||||
$this->AddEventPreg('/^top/i','/^(page([1-9]\d{0,5}))?$/i','EventTop');
|
||||
}
|
||||
|
||||
|
||||
|
@ -226,6 +227,42 @@ class ActionIndex extends Action {
|
|||
*/
|
||||
$this->SetTemplateAction('index');
|
||||
}
|
||||
/**
|
||||
* Вывод ВСЕХ новых топиков
|
||||
*/
|
||||
protected function EventNewAll() {
|
||||
$this->Viewer_SetHtmlRssAlternate(Router::GetPath('rss').'new/',Config::Get('view.name'));
|
||||
/**
|
||||
* Меню
|
||||
*/
|
||||
$this->sMenuSubItemSelect='new';
|
||||
/**
|
||||
* Передан ли номер страницы
|
||||
*/
|
||||
$iPage=$this->GetParamEventMatch(0,2) ? $this->GetParamEventMatch(0,2) : 1;
|
||||
/**
|
||||
* Получаем список топиков
|
||||
*/
|
||||
$aResult=$this->Topic_GetTopicsNewAll($iPage,Config::Get('module.topic.per_page'));
|
||||
$aTopics=$aResult['collection'];
|
||||
/**
|
||||
* Вызов хуков
|
||||
*/
|
||||
$this->Hook_Run('topics_list_show',array('aTopics'=>$aTopics));
|
||||
/**
|
||||
* Формируем постраничность
|
||||
*/
|
||||
$aPaging=$this->Viewer_MakePaging($aResult['count'],$iPage,Config::Get('module.topic.per_page'),Config::Get('pagination.pages.count'),Router::GetPath('index').'newall');
|
||||
/**
|
||||
* Загружаем переменные в шаблон
|
||||
*/
|
||||
$this->Viewer_Assign('aTopics',$aTopics);
|
||||
$this->Viewer_Assign('aPaging',$aPaging);
|
||||
/**
|
||||
* Устанавливаем шаблон вывода
|
||||
*/
|
||||
$this->SetTemplateAction('index');
|
||||
}
|
||||
/**
|
||||
* Вывод интересных на главную
|
||||
*
|
||||
|
|
|
@ -44,9 +44,11 @@ class ActionLogin extends Action {
|
|||
$this->AddEvent('index','EventLogin');
|
||||
$this->AddEvent('exit','EventExit');
|
||||
$this->AddEvent('reminder','EventReminder');
|
||||
$this->AddEvent('reactivation','EventReactivation');
|
||||
|
||||
$this->AddEvent('ajax-login','EventAjaxLogin');
|
||||
$this->AddEvent('ajax-reminder','EventAjaxReminder');
|
||||
$this->AddEvent('ajax-reactivation','EventAjaxReactivation');
|
||||
}
|
||||
/**
|
||||
* Ajax авторизация
|
||||
|
@ -70,7 +72,12 @@ class ActionLogin extends Action {
|
|||
/**
|
||||
* Сверяем хеши паролей и проверяем активен ли юзер
|
||||
*/
|
||||
if ($oUser->getPassword()==func_encrypt(getRequest('password')) and $oUser->getActivate()) {
|
||||
|
||||
if ($oUser->getPassword()==func_encrypt(getRequest('password'))) {
|
||||
if (!$oUser->getActivate()) {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('user_not_activated', array('reactivation_path' => Router::GetPath('login') . 'reactivation')));
|
||||
return;
|
||||
}
|
||||
$bRemember=getRequest('remember',false) ? true : false;
|
||||
/**
|
||||
* Авторизуем
|
||||
|
@ -89,6 +96,38 @@ class ActionLogin extends Action {
|
|||
}
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('user_login_bad'));
|
||||
}
|
||||
/**
|
||||
* Повторный запрос активации
|
||||
*/
|
||||
protected function EventReactivation() {
|
||||
if($this->User_GetUserCurrent()) {
|
||||
Router::Location(Config::Get('path.root.web').'/');
|
||||
}
|
||||
|
||||
$this->Viewer_AddHtmlTitle($this->Lang_Get('reactivation'));
|
||||
}
|
||||
/**
|
||||
* Ajax повторной активации
|
||||
*/
|
||||
protected function EventAjaxReactivation() {
|
||||
$this->Viewer_SetResponseAjax('json');
|
||||
|
||||
if ((func_check(getRequest('mail'), 'mail') and $oUser = $this->User_GetUserByMail(getRequest('mail')))) {
|
||||
if ($oUser->getActivate()) {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('registration_activate_error_reactivate'));
|
||||
return;
|
||||
} else {
|
||||
$oUser->setActivateKey(md5(func_generator() . time()));
|
||||
if ($this->User_Update($oUser)) {
|
||||
$this->Message_AddNotice($this->Lang_Get('reactivation_send_link'));
|
||||
$this->Notify_SendReactivationCode($oUser);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('password_reminder_bad_email'));
|
||||
}
|
||||
/**
|
||||
* Обрабатываем процесс залогинивания
|
||||
* По факту только отображение шаблона, дальше вступает в дело Ajax
|
||||
|
|
|
@ -39,9 +39,9 @@ class ActionMy extends Action {
|
|||
* Регистрируем евенты
|
||||
*/
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEventPreg('/^.+$/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^.+$/i','/^blog$/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^.+$/i','/^comment$/i','/^(page(\d+))?$/i','EventComments');
|
||||
$this->AddEventPreg('/^.+$/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^.+$/i','/^blog$/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^.+$/i','/^comment$/i','/^(page([1-9]\d{0,5}))?$/i','EventComments');
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -52,11 +52,11 @@ class ActionPeople extends Action {
|
|||
protected function RegisterEvent() {
|
||||
$this->AddEvent('online','EventOnline');
|
||||
$this->AddEvent('new','EventNew');
|
||||
$this->AddEventPreg('/^(index)?$/i','/^(page(\d+))?$/i','/^$/i','EventIndex');
|
||||
$this->AddEventPreg('/^(index)?$/i','/^(page([1-9]\d{0,5}))?$/i','/^$/i','EventIndex');
|
||||
$this->AddEventPreg('/^ajax-search$/i','EventAjaxSearch');
|
||||
|
||||
$this->AddEventPreg('/^country$/i','/^\d+$/i','/^(page(\d+))?$/i','EventCountry');
|
||||
$this->AddEventPreg('/^city$/i','/^\d+$/i','/^(page(\d+))?$/i','EventCity');
|
||||
$this->AddEventPreg('/^country$/i','/^\d+$/i','/^(page([1-9]\d{0,5}))?$/i','EventCountry');
|
||||
$this->AddEventPreg('/^city$/i','/^\d+$/i','/^(page([1-9]\d{0,5}))?$/i','EventCity');
|
||||
}
|
||||
|
||||
|
||||
|
@ -111,6 +111,7 @@ class ActionPeople extends Action {
|
|||
*
|
||||
*/
|
||||
protected function EventCountry() {
|
||||
$this->sMenuItemSelect='country';
|
||||
/**
|
||||
* Страна существует?
|
||||
*/
|
||||
|
@ -152,6 +153,7 @@ class ActionPeople extends Action {
|
|||
*
|
||||
*/
|
||||
protected function EventCity() {
|
||||
$this->sMenuItemSelect='city';
|
||||
/**
|
||||
* Город существует?
|
||||
*/
|
||||
|
@ -234,14 +236,14 @@ class ActionPeople extends Action {
|
|||
*/
|
||||
$sOrder='user_rating';
|
||||
if (getRequest('order')) {
|
||||
$sOrder=getRequest('order');
|
||||
$sOrder=(string)getRequest('order');
|
||||
}
|
||||
/**
|
||||
* В каком направлении сортировать
|
||||
*/
|
||||
$sOrderWay='desc';
|
||||
if (getRequest('order_way')) {
|
||||
$sOrderWay=getRequest('order_way');
|
||||
$sOrderWay=(string)getRequest('order_way');
|
||||
}
|
||||
$aFilter=array(
|
||||
'activate' => 1
|
||||
|
|
|
@ -53,12 +53,13 @@ class ActionPersonalBlog extends Action {
|
|||
*
|
||||
*/
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEventPreg('/^good$/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^good$/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics');
|
||||
$this->AddEvent('good','EventTopics');
|
||||
$this->AddEventPreg('/^bad$/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^new$/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^discussed/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^top/i','/^(page(\d+))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^bad$/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^new$/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^newall$/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^discussed/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics');
|
||||
$this->AddEventPreg('/^top/i','/^(page([1-9]\d{0,5}))?$/i','EventTopics');
|
||||
}
|
||||
|
||||
|
||||
|
@ -83,7 +84,7 @@ class ActionPersonalBlog extends Action {
|
|||
/**
|
||||
* Меню
|
||||
*/
|
||||
$this->sMenuSubItemSelect=$sShowType;
|
||||
$this->sMenuSubItemSelect=$sShowType=='newall' ? 'new' : $sShowType;
|
||||
/**
|
||||
* Передан ли номер страницы
|
||||
*/
|
||||
|
|
|
@ -72,18 +72,21 @@ class ActionProfile extends Action {
|
|||
$this->AddEventPreg('/^.+$/i','/^wall$/i','/^load-reply$/i','EventWallLoadReply');
|
||||
$this->AddEventPreg('/^.+$/i','/^wall$/i','/^remove$/i','EventWallRemove');
|
||||
|
||||
$this->AddEventPreg('/^.+$/i','/^favourites$/i','/^comments$/i','/^(page(\d+))?$/i','EventFavouriteComments');
|
||||
$this->AddEventPreg('/^.+$/i','/^favourites$/i','/^(page(\d+))?$/i','EventFavourite');
|
||||
$this->AddEventPreg('/^.+$/i','/^favourites$/i','/^topics/i','/^(page(\d+))?$/i','EventFavourite');
|
||||
$this->AddEventPreg('/^.+$/i','/^favourites$/i','/^topics/i','/^tag/i','/^.+/i','/^(page(\d+))?$/i','EventFavouriteTopicsTag');
|
||||
$this->AddEventPreg('/^.+$/i','/^favourites$/i','/^comments$/i','/^(page([1-9]\d{0,5}))?$/i','EventFavouriteComments');
|
||||
$this->AddEventPreg('/^.+$/i','/^favourites$/i','/^(page([1-9]\d{0,5}))?$/i','EventFavourite');
|
||||
$this->AddEventPreg('/^.+$/i','/^favourites$/i','/^topics/i','/^(page([1-9]\d{0,5}))?$/i','EventFavourite');
|
||||
$this->AddEventPreg('/^.+$/i','/^favourites$/i','/^topics/i','/^tag/i','/^.+/i','/^(page([1-9]\d{0,5}))?$/i','EventFavouriteTopicsTag');
|
||||
|
||||
$this->AddEventPreg('/^.+$/i','/^created/i','/^notes/i','/^(page(\d+))?$/i','EventCreatedNotes');
|
||||
$this->AddEventPreg('/^.+$/i','/^created/i','/^(page(\d+))?$/i','EventCreatedTopics');
|
||||
$this->AddEventPreg('/^.+$/i','/^created/i','/^topics/i','/^(page(\d+))?$/i','EventCreatedTopics');
|
||||
$this->AddEventPreg('/^.+$/i','/^created/i','/^comments$/i','/^(page(\d+))?$/i','EventCreatedComments');
|
||||
$this->AddEventPreg('/^.+$/i','/^created/i','/^notes/i','/^(page([1-9]\d{0,5}))?$/i','EventCreatedNotes');
|
||||
$this->AddEventPreg('/^.+$/i','/^created/i','/^(page([1-9]\d{0,5}))?$/i','EventCreatedTopics');
|
||||
$this->AddEventPreg('/^.+$/i','/^created/i','/^topics/i','/^(page([1-9]\d{0,5}))?$/i','EventCreatedTopics');
|
||||
$this->AddEventPreg('/^.+$/i','/^created/i','/^comments$/i','/^(page([1-9]\d{0,5}))?$/i','EventCreatedComments');
|
||||
|
||||
$this->AddEventPreg('/^.+$/i','/^friends/i','/^(page(\d+))?$/i','EventFriends');
|
||||
$this->AddEventPreg('/^.+$/i','/^friends/i','/^(page([1-9]\d{0,5}))?$/i','EventFriends');
|
||||
$this->AddEventPreg('/^.+$/i','/^stream/i','/^$/i','EventStream');
|
||||
|
||||
$this->AddEventPreg('/^changemail$/i','/^confirm-from/i','/^\w{32}$/i','EventChangemailConfirmFrom');
|
||||
$this->AddEventPreg('/^changemail$/i','/^confirm-to/i','/^\w{32}$/i','EventChangemailConfirmTo');
|
||||
}
|
||||
|
||||
/**********************************************************************************
|
||||
|
@ -610,13 +613,13 @@ class ActionProfile extends Action {
|
|||
$oNote=Engine::GetEntity('ModuleUser_EntityNote');
|
||||
$oNote->setTargetUserId(getRequest('iUserId'));
|
||||
$oNote->setUserId($this->oUserCurrent->getId());
|
||||
$oNote->setText(getRequest('text'));
|
||||
$oNote->setText((string)getRequest('text'));
|
||||
|
||||
if ($oNote->_Validate()) {
|
||||
/**
|
||||
* Экранируем текст и добавляем запись в БД
|
||||
*/
|
||||
$oNote->setText(htmlspecialchars($oNote->getText()));
|
||||
$oNote->setText(htmlspecialchars(strip_tags($oNote->getText())));
|
||||
if ($this->User_SaveNote($oNote)) {
|
||||
$this->Viewer_AssignAjax('sText',$oNote->getText());
|
||||
} else {
|
||||
|
@ -693,7 +696,7 @@ class ActionProfile extends Action {
|
|||
/**
|
||||
* Из реквеста дешефруем ID польователя
|
||||
*/
|
||||
$sUserId=xxtea_decrypt(base64_decode(rawurldecode(getRequest('code'))), Config::Get('module.talk.encrypt'));
|
||||
$sUserId=xxtea_decrypt(base64_decode(rawurldecode((string)getRequest('code'))), Config::Get('module.talk.encrypt'));
|
||||
if (!$sUserId) {
|
||||
return $this->EventNotFound();
|
||||
}
|
||||
|
@ -1197,6 +1200,59 @@ class ActionProfile extends Action {
|
|||
return;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Обработка подтверждения старого емайла при его смене
|
||||
*/
|
||||
public function EventChangemailConfirmFrom() {
|
||||
if (!($oChangemail=$this->User_GetUserChangemailByCodeFrom($this->GetParamEventMatch(1,0)))) {
|
||||
return parent::EventNotFound();
|
||||
}
|
||||
|
||||
if ($oChangemail->getConfirmFrom() or strtotime($oChangemail->getDateExpired())<time()) {
|
||||
return parent::EventNotFound();
|
||||
}
|
||||
|
||||
$oChangemail->setConfirmFrom(1);
|
||||
$this->User_UpdateUserChangemail($oChangemail);
|
||||
|
||||
/**
|
||||
* Отправляем уведомление
|
||||
*/
|
||||
$oUser=$this->User_GetUserById($oChangemail->getUserId());
|
||||
$this->Notify_Send($oChangemail->getMailTo(),
|
||||
'notify.user_changemail_to.tpl',
|
||||
$this->Lang_Get('notify_subject_user_changemail'),
|
||||
array(
|
||||
'oUser' => $oUser,
|
||||
'oChangemail' => $oChangemail,
|
||||
));
|
||||
|
||||
$this->Viewer_Assign('sText',$this->Lang_Get('settings_profile_mail_change_to_notice'));
|
||||
$this->SetTemplateAction('changemail_confirm');
|
||||
}
|
||||
/**
|
||||
* Обработка подтверждения нового емайла при смене старого
|
||||
*/
|
||||
public function EventChangemailConfirmTo() {
|
||||
if (!($oChangemail=$this->User_GetUserChangemailByCodeTo($this->GetParamEventMatch(1,0)))) {
|
||||
return parent::EventNotFound();
|
||||
}
|
||||
|
||||
if (!$oChangemail->getConfirmFrom() or $oChangemail->getConfirmTo() or strtotime($oChangemail->getDateExpired())<time()) {
|
||||
return parent::EventNotFound();
|
||||
}
|
||||
|
||||
$oChangemail->setConfirmTo(1);
|
||||
$oChangemail->setDateUsed(date("Y-m-d H:i:s"));
|
||||
$this->User_UpdateUserChangemail($oChangemail);
|
||||
|
||||
$oUser=$this->User_GetUserById($oChangemail->getUserId());
|
||||
$oUser->setMail($oChangemail->getMailTo());
|
||||
$this->User_Update($oUser);
|
||||
|
||||
$this->Viewer_Assign('sText',$this->Lang_Get('settings_profile_mail_change_ok',array('mail'=>htmlspecialchars($oChangemail->getMailTo()))));
|
||||
$this->SetTemplateAction('changemail_confirm');
|
||||
}
|
||||
/**
|
||||
* Выполняется при завершении работы экшена
|
||||
*/
|
||||
|
@ -1229,7 +1285,7 @@ class ActionProfile extends Action {
|
|||
* Заметка текущего пользователя о юзере
|
||||
*/
|
||||
if ($this->oUserCurrent) {
|
||||
$this->Viewer_Assign('oUserNote',$this->User_GetUserNote($this->oUserProfile->getId(),$this->oUserCurrent->getId()));
|
||||
$this->Viewer_Assign('oUserNote',$this->oUserProfile->getUserNote());
|
||||
}
|
||||
$this->Viewer_Assign('iCountFriendsUser',$this->User_GetCountUsersFriend($this->oUserProfile->getId()));
|
||||
|
||||
|
|
|
@ -133,13 +133,13 @@ class ActionRss extends Action {
|
|||
*/
|
||||
protected function RssComments() {
|
||||
/**
|
||||
* Вычисляем топики из закрытых блогов, чтобы исключить их из выдачи
|
||||
* Получаем закрытые блоги, чтобы исключить их из выдачи
|
||||
*/
|
||||
$aCloseTopics = $this->Topic_GetTopicsCloseByUser();
|
||||
$aCloseBlogs = $this->Blog_GetInaccessibleBlogsByUser();
|
||||
/**
|
||||
* Получаем комментарии
|
||||
*/
|
||||
$aResult=$this->Comment_GetCommentsAll('topic',1,Config::Get('module.comment.per_page')*2,$aCloseTopics);
|
||||
$aResult=$this->Comment_GetCommentsAll('topic',1,Config::Get('module.comment.per_page')*2,array(),$aCloseBlogs);
|
||||
$aComments=$aResult['collection'];
|
||||
/**
|
||||
* Формируем данные канала RSS
|
||||
|
@ -186,8 +186,8 @@ class ActionRss extends Action {
|
|||
/**
|
||||
* Получаем комментарии
|
||||
*/
|
||||
$aComments=$this->Comment_GetCommentsByTargetId($oTopic->getId(),'topic');
|
||||
$aComments=$aComments['comments'];
|
||||
$aResult=$this->Comment_GetCommentsByFilter(array('target_id'=>$oTopic->getId(),'target_type'=>'topic','delete'=>0),array('comment_id'=>'desc'),1,100);
|
||||
$aComments=$aResult['collection'];
|
||||
/**
|
||||
* Формируем данные канала RSS
|
||||
*/
|
||||
|
|
|
@ -181,7 +181,7 @@ class ActionSearch extends Action {
|
|||
/**
|
||||
* Определяем текущую страницу вывода результата
|
||||
*/
|
||||
$aReq['iPage'] = intval(preg_replace('#^page(\d+)$#', '\1', $this->getParam(0)));
|
||||
$aReq['iPage'] = intval(preg_replace('#^page([1-9]\d{0,5})$#', '\1', $this->getParam(0)));
|
||||
if(!$aReq['iPage']) { $aReq['iPage'] = 1; }
|
||||
/**
|
||||
* Передача данных в шаблонизатор
|
||||
|
|
|
@ -158,7 +158,10 @@ class ActionSettings extends Action {
|
|||
*/
|
||||
$aSize=array();
|
||||
$aSizeTmp=getRequest('size');
|
||||
if (isset($aSizeTmp['x']) and $aSizeTmp['x'] and isset($aSizeTmp['y']) and isset($aSizeTmp['x2']) and isset($aSizeTmp['y2'])) {
|
||||
if (isset($aSizeTmp['x']) and is_numeric($aSizeTmp['x'])
|
||||
and isset($aSizeTmp['y']) and is_numeric($aSizeTmp['y'])
|
||||
and isset($aSizeTmp['x2']) and is_numeric($aSizeTmp['x2'])
|
||||
and isset($aSizeTmp['y2']) and is_numeric($aSizeTmp['y2'])) {
|
||||
$aSize=array('x1'=>round($fRation*$aSizeTmp['x']),'y1'=>round($fRation*$aSizeTmp['y']),'x2'=>round($fRation*$aSizeTmp['x2']),'y2'=>round($fRation*$aSizeTmp['y2']));
|
||||
}
|
||||
/**
|
||||
|
@ -280,7 +283,10 @@ class ActionSettings extends Action {
|
|||
*/
|
||||
$aSize=array();
|
||||
$aSizeTmp=getRequest('size');
|
||||
if (isset($aSizeTmp['x']) and $aSizeTmp['x'] and isset($aSizeTmp['y']) and isset($aSizeTmp['x2']) and isset($aSizeTmp['y2'])) {
|
||||
if (isset($aSizeTmp['x']) and is_numeric($aSizeTmp['x'])
|
||||
and isset($aSizeTmp['y']) and is_numeric($aSizeTmp['y'])
|
||||
and isset($aSizeTmp['x2']) and is_numeric($aSizeTmp['x2'])
|
||||
and isset($aSizeTmp['y2']) and is_numeric($aSizeTmp['y2'])) {
|
||||
$aSize=array('x1'=>$aSizeTmp['x'],'y1'=>$aSizeTmp['y'],'x2'=>$aSizeTmp['x2'],'y2'=>$aSizeTmp['y2']);
|
||||
}
|
||||
/**
|
||||
|
@ -346,12 +352,18 @@ class ActionSettings extends Action {
|
|||
$this->sMenuSubItemSelect='tuning';
|
||||
|
||||
$this->Viewer_AddHtmlTitle($this->Lang_Get('settings_menu_tuning'));
|
||||
$aTimezoneList=array('-12','-11','-10','-9.5','-9','-8','-7','-6','-5','-4.5','-4','-3.5','-3','-2','-1','0','1','2','3','3.5','4','4.5','5','5.5','5.75','6','6.5','7','8','8.75','9','9.5','10','10.5','11','11.5','12','12.75','13','14');
|
||||
$this->Viewer_Assign('aTimezoneList',$aTimezoneList);
|
||||
/**
|
||||
* Если отправили форму с настройками - сохраняем
|
||||
*/
|
||||
if (isPost('submit_settings_tuning')) {
|
||||
$this->Security_ValidateSendForm();
|
||||
|
||||
if (in_array(getRequest('settings_general_timezone'),$aTimezoneList)) {
|
||||
$this->oUserCurrent->setSettingsTimezone(getRequest('settings_general_timezone'));
|
||||
}
|
||||
|
||||
$this->oUserCurrent->setSettingsNoticeNewTopic( getRequest('settings_notice_new_topic') ? 1 : 0 );
|
||||
$this->oUserCurrent->setSettingsNoticeNewComment( getRequest('settings_notice_new_comment') ? 1 : 0 );
|
||||
$this->oUserCurrent->setSettingsNoticeNewTalk( getRequest('settings_notice_new_talk') ? 1 : 0 );
|
||||
|
@ -368,6 +380,12 @@ class ActionSettings extends Action {
|
|||
} else {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
|
||||
}
|
||||
} else {
|
||||
if (is_null($this->oUserCurrent->getSettingsTimezone())) {
|
||||
$_REQUEST['settings_general_timezone']=(strtotime(date("Y-m-d H:i:s"))-strtotime(gmdate("Y-m-d H:i:s")))/3600 - date('I');
|
||||
} else {
|
||||
$_REQUEST['settings_general_timezone']=$this->oUserCurrent->getSettingsTimezone();
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
|
@ -447,8 +465,6 @@ class ActionSettings extends Action {
|
|||
if ($oUserMail=$this->User_GetUserByMail(getRequest('mail')) and $oUserMail->getId()!=$this->oUserCurrent->getId()) {
|
||||
$this->Message_AddError($this->Lang_Get('settings_profile_mail_error_used'),$this->Lang_Get('error'));
|
||||
$bError=true;
|
||||
} else {
|
||||
$this->oUserCurrent->setMail(getRequest('mail'));
|
||||
}
|
||||
} else {
|
||||
$this->Message_AddError($this->Lang_Get('settings_profile_mail_error'),$this->Lang_Get('error'));
|
||||
|
@ -489,6 +505,15 @@ class ActionSettings extends Action {
|
|||
if (!$bError) {
|
||||
if ($this->User_Update($this->oUserCurrent)) {
|
||||
$this->Message_AddNoticeSingle($this->Lang_Get('settings_account_submit_ok'));
|
||||
/**
|
||||
* Подтверждение смены емайла
|
||||
*/
|
||||
if (getRequest('mail') and getRequest('mail')!=$this->oUserCurrent->getMail()) {
|
||||
if ($this->User_MakeUserChangemail($this->oUserCurrent,getRequest('mail'))) {
|
||||
$this->Message_AddNotice($this->Lang_Get('settings_profile_mail_change_from_notice'));
|
||||
}
|
||||
}
|
||||
|
||||
$this->Hook_Run('settings_account_save_after', array('oUser'=>$this->oUserCurrent));
|
||||
} else {
|
||||
$this->Message_AddErrorSingle($this->Lang_Get('system_error'));
|
||||
|
@ -615,7 +640,7 @@ class ActionSettings extends Action {
|
|||
$aData = array();
|
||||
foreach ($aFields as $iId => $aField) {
|
||||
if (isset($_REQUEST['profile_user_field_'.$iId])) {
|
||||
$aData[$iId] = getRequest('profile_user_field_'.$iId);
|
||||
$aData[$iId] = (string)getRequest('profile_user_field_'.$iId);
|
||||
}
|
||||
}
|
||||
$this->User_setUserFieldsValues($this->oUserCurrent->getId(), $aData);
|
||||
|
@ -632,7 +657,7 @@ class ActionSettings extends Action {
|
|||
$aFieldsContactValue=getRequest('profile_user_field_value');
|
||||
if (is_array($aFieldsContactType)) {
|
||||
foreach($aFieldsContactType as $k=>$v) {
|
||||
if (isset($aFields[$v]) and isset($aFieldsContactValue[$k])) {
|
||||
if (isset($aFields[$v]) and isset($aFieldsContactValue[$k]) and is_string($aFieldsContactValue[$k])) {
|
||||
$this->User_setUserFieldsValues($this->oUserCurrent->getId(), array($v=>$aFieldsContactValue[$k]), Config::Get('module.user.userfield_max_identical'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -169,6 +169,7 @@ class ActionStream extends Action {
|
|||
|
||||
$oViewer=$this->Viewer_GetLocalViewer();
|
||||
$oViewer->Assign('aStreamEvents', $aEvents);
|
||||
$oViewer->Assign('sDateLast', getRequest('date_last'));
|
||||
if (count($aEvents)) {
|
||||
$oEvenLast=end($aEvents);
|
||||
$this->Viewer_AssignAjax('iStreamLastId', $oEvenLast->getId());
|
||||
|
@ -209,6 +210,7 @@ class ActionStream extends Action {
|
|||
|
||||
$oViewer=$this->Viewer_GetLocalViewer();
|
||||
$oViewer->Assign('aStreamEvents', $aEvents);
|
||||
$oViewer->Assign('sDateLast', getRequest('date_last'));
|
||||
if (count($aEvents)) {
|
||||
$oEvenLast=end($aEvents);
|
||||
$this->Viewer_AssignAjax('iStreamLastId', $oEvenLast->getId());
|
||||
|
@ -253,6 +255,7 @@ class ActionStream extends Action {
|
|||
|
||||
$oViewer=$this->Viewer_GetLocalViewer();
|
||||
$oViewer->Assign('aStreamEvents', $aEvents);
|
||||
$oViewer->Assign('sDateLast', getRequest('date_last'));
|
||||
if (count($aEvents)) {
|
||||
$oEvenLast=end($aEvents);
|
||||
$this->Viewer_AssignAjax('iStreamLastId', $oEvenLast->getId());
|
||||
|
@ -309,7 +312,7 @@ class ActionStream extends Action {
|
|||
if (!$this->oUserCurrent) {
|
||||
parent::EventNotFound();
|
||||
}
|
||||
if (!getRequest('login')) {
|
||||
if (!getRequest('login') or !is_string(getRequest('login'))) {
|
||||
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ class ActionTag extends Action {
|
|||
* Регистрация евентов
|
||||
*/
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEventPreg('/^.+$/i','/^(page(\d+))?$/i','EventTags');
|
||||
$this->AddEventPreg('/^.+$/i','/^(page([1-9]\d{0,5}))?$/i','EventTags');
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -162,7 +162,7 @@ class ActionTalk extends Action {
|
|||
/**
|
||||
* Передан ли номер страницы
|
||||
*/
|
||||
$iPage=preg_match("/^page(\d+)$/i",$this->getParam(0),$aMatch) ? $aMatch[1] : 1;
|
||||
$iPage=preg_match("/^page([1-9]\d{0,5})$/i",$this->getParam(0),$aMatch) ? $aMatch[1] : 1;
|
||||
/**
|
||||
* Получаем список писем
|
||||
*/
|
||||
|
@ -262,7 +262,7 @@ class ActionTalk extends Action {
|
|||
/**
|
||||
* Ключевые слова в теме сообщения
|
||||
*/
|
||||
if($sKeyRequest=getRequest('keyword')){
|
||||
if($sKeyRequest=getRequest('keyword') and is_string($sKeyRequest)){
|
||||
$sKeyRequest=urldecode($sKeyRequest);
|
||||
preg_match_all('~(\S+)~u',$sKeyRequest,$aWords);
|
||||
|
||||
|
@ -275,7 +275,7 @@ class ActionTalk extends Action {
|
|||
/**
|
||||
* Ключевые слова в тексте сообщения
|
||||
*/
|
||||
if($sKeyRequest=getRequest('keyword_text')){
|
||||
if($sKeyRequest=getRequest('keyword_text') and is_string($sKeyRequest)){
|
||||
$sKeyRequest=urldecode($sKeyRequest);
|
||||
preg_match_all('~(\S+)~u',$sKeyRequest,$aWords);
|
||||
|
||||
|
@ -288,7 +288,7 @@ class ActionTalk extends Action {
|
|||
/**
|
||||
* Отправитель
|
||||
*/
|
||||
if($sender=getRequest('sender')){
|
||||
if($sender=getRequest('sender') and is_string($sender)){
|
||||
$aFilter['user_login']=urldecode($sender);
|
||||
}
|
||||
/**
|
||||
|
@ -319,7 +319,7 @@ class ActionTalk extends Action {
|
|||
/**
|
||||
* Передан ли номер страницы
|
||||
*/
|
||||
$iPage=preg_match("/^page(\d+)$/i",$this->getParam(0),$aMatch) ? $aMatch[1] : 1;
|
||||
$iPage=preg_match("/^page([1-9]\d{0,5})$/i",$this->getParam(0),$aMatch) ? $aMatch[1] : 1;
|
||||
/**
|
||||
* Получаем список писем
|
||||
*/
|
||||
|
@ -478,7 +478,7 @@ class ActionTalk extends Action {
|
|||
* Проверяем адресатов
|
||||
*/
|
||||
$sUsers=getRequest('talk_users');
|
||||
$aUsers=explode(',',$sUsers);
|
||||
$aUsers=explode(',',(string)$sUsers);
|
||||
$aUsersNew=array();
|
||||
$aUserInBlacklist = $this->Talk_GetBlacklistByTargetId($this->oUserCurrent->getId());
|
||||
|
||||
|
@ -687,7 +687,10 @@ class ActionTalk extends Action {
|
|||
/**
|
||||
* Добавляем коммент
|
||||
*/
|
||||
$this->Hook_Run('talk_comment_add_before', array('oCommentNew'=>$oCommentNew,'oCommentParent'=>$oCommentParent,'oTalk'=>$oTalk));
|
||||
if ($this->Comment_AddComment($oCommentNew)) {
|
||||
$this->Hook_Run('talk_comment_add_after', array('oCommentNew'=>$oCommentNew,'oCommentParent'=>$oCommentParent,'oTalk'=>$oTalk));
|
||||
|
||||
$this->Viewer_AssignAjax('sCommentId',$oCommentNew->getId());
|
||||
$oTalk->setDateLast(date("Y-m-d H:i:s"));
|
||||
$oTalk->setUserIdLast($oCommentNew->getUserId());
|
||||
|
@ -721,7 +724,7 @@ class ActionTalk extends Action {
|
|||
* Устанавливаем формат Ajax ответа
|
||||
*/
|
||||
$this->Viewer_SetResponseAjax('json');
|
||||
$sUsers=getRequest('users',null,'post');
|
||||
$sUsers=(string)getRequest('users',null,'post');
|
||||
/**
|
||||
* Если пользователь не авторизирован, возвращаем ошибку
|
||||
*/
|
||||
|
@ -814,7 +817,7 @@ class ActionTalk extends Action {
|
|||
* Устанавливаем формат Ajax ответа
|
||||
*/
|
||||
$this->Viewer_SetResponseAjax('json');
|
||||
$idTarget=getRequest('idTarget',null,'post');
|
||||
$idTarget=(string)getRequest('idTarget',null,'post');
|
||||
/**
|
||||
* Если пользователь не авторизирован, возвращаем ошибку
|
||||
*/
|
||||
|
@ -879,8 +882,8 @@ class ActionTalk extends Action {
|
|||
* Устанавливаем формат Ajax ответа
|
||||
*/
|
||||
$this->Viewer_SetResponseAjax('json');
|
||||
$idTarget=getRequest('idTarget',null,'post');
|
||||
$idTalk=getRequest('idTalk',null,'post');
|
||||
$idTarget=(string)getRequest('idTarget',null,'post');
|
||||
$idTalk=(string)getRequest('idTalk',null,'post');
|
||||
/**
|
||||
* Если пользователь не авторизирован, возвращаем ошибку
|
||||
*/
|
||||
|
@ -957,8 +960,8 @@ class ActionTalk extends Action {
|
|||
* Устанавливаем формат Ajax ответа
|
||||
*/
|
||||
$this->Viewer_SetResponseAjax('json');
|
||||
$sUsers=getRequest('users',null,'post');
|
||||
$idTalk=getRequest('idTalk',null,'post');
|
||||
$sUsers=(string)getRequest('users',null,'post');
|
||||
$idTalk=(string)getRequest('idTalk',null,'post');
|
||||
/**
|
||||
* Если пользователь не авторизирован, возвращаем ошибку
|
||||
*/
|
||||
|
|
|
@ -74,8 +74,8 @@ class ActionTopic extends Action {
|
|||
*/
|
||||
protected function RegisterEvent() {
|
||||
$this->AddEvent('add','EventAdd');
|
||||
$this->AddEventPreg('/^published$/i','/^(page(\d+))?$/i','EventShowTopics');
|
||||
$this->AddEventPreg('/^saved$/i','/^(page(\d+))?$/i','EventShowTopics');
|
||||
$this->AddEventPreg('/^published$/i','/^(page([1-9]\d{0,5}))?$/i','EventShowTopics');
|
||||
$this->AddEventPreg('/^saved$/i','/^(page([1-9]\d{0,5}))?$/i','EventShowTopics');
|
||||
$this->AddEvent('edit','EventEdit');
|
||||
$this->AddEvent('delete','EventDelete');
|
||||
}
|
||||
|
|
|
@ -132,7 +132,7 @@ class ActionUserfeed extends Action {
|
|||
if (!getRequest('id')) {
|
||||
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
||||
}
|
||||
$sType = getRequest('type');
|
||||
$sType = (string)getRequest('type');
|
||||
$iType = null;
|
||||
/**
|
||||
* Определяем тип подписки
|
||||
|
@ -184,7 +184,7 @@ class ActionUserfeed extends Action {
|
|||
/**
|
||||
* Передан ли логин
|
||||
*/
|
||||
if (!getRequest('login')) {
|
||||
if (!getRequest('login') or !is_string(getRequest('login'))) {
|
||||
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
||||
return;
|
||||
}
|
||||
|
@ -231,7 +231,7 @@ class ActionUserfeed extends Action {
|
|||
$this->Message_AddError($this->Lang_Get('system_error'),$this->Lang_Get('error'));
|
||||
return;
|
||||
}
|
||||
$sType = getRequest('type');
|
||||
$sType = (string)getRequest('type');
|
||||
$iType = null;
|
||||
/**
|
||||
* Определяем от чего отписываемся
|
||||
|
@ -253,4 +253,22 @@ class ActionUserfeed extends Action {
|
|||
$this->Userfeed_unsubscribeUser($this->oUserCurrent->getId(), $iType, getRequest('id'));
|
||||
$this->Message_AddNotice($this->Lang_Get('userfeed_subscribes_updated'), $this->Lang_Get('attention'));
|
||||
}
|
||||
/**
|
||||
* При завершении экшена загружаем в шаблон необходимые переменные
|
||||
*
|
||||
*/
|
||||
public function EventShutdown() {
|
||||
/**
|
||||
* Подсчитываем новые топики
|
||||
*/
|
||||
$iCountTopicsCollectiveNew=$this->Topic_GetCountTopicsCollectiveNew();
|
||||
$iCountTopicsPersonalNew=$this->Topic_GetCountTopicsPersonalNew();
|
||||
$iCountTopicsNew=$iCountTopicsCollectiveNew+$iCountTopicsPersonalNew;
|
||||
/**
|
||||
* Загружаем переменные в шаблон
|
||||
*/
|
||||
$this->Viewer_Assign('iCountTopicsCollectiveNew',$iCountTopicsCollectiveNew);
|
||||
$this->Viewer_Assign('iCountTopicsPersonalNew',$iCountTopicsPersonalNew);
|
||||
$this->Viewer_Assign('iCountTopicsNew',$iCountTopicsNew);
|
||||
}
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
<?php
|
||||
/*-------------------------------------------------------
|
||||
*
|
||||
* LiveStreet Engine Social Networking
|
||||
* Copyright © 2008 Mzhelskiy Maxim
|
||||
*
|
||||
*--------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreet.ru
|
||||
* Contact e-mail: rus.engine@gmail.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Класс инициализации экшенов.
|
||||
* Он вызывается всегда перед запуском любого экшена. Может выполнять какие то инициализирующие действия, а так же может помочь при введении инвайтов,
|
||||
* т.е. перенапрявлять всех неавторизованных юзеров на страницу регистрации по приглашению
|
||||
*
|
||||
* @package actions
|
||||
* @since 1.0
|
||||
*/
|
||||
class InitAction {
|
||||
/**
|
||||
* Объект ядра
|
||||
*
|
||||
* @var Engine|null
|
||||
*/
|
||||
protected $oEngine=null;
|
||||
/**
|
||||
* Конструктор
|
||||
*
|
||||
*/
|
||||
public function __construct($oEngine) {
|
||||
$this->oEngine=$oEngine;
|
||||
}
|
||||
/**
|
||||
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
|
||||
* @see Engine::_CallModule
|
||||
*
|
||||
* @param string $sName Имя метода
|
||||
* @param array $aArgs Аргументы
|
||||
* @return mixed
|
||||
*/
|
||||
public function __call($sName,$aArgs) {
|
||||
return $this->oEngine->_CallModule($sName,$aArgs);
|
||||
}
|
||||
/**
|
||||
* Логика инициализации
|
||||
*
|
||||
*/
|
||||
public function InitAction() {
|
||||
$this->Hook_Run('init_action');
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -37,10 +37,7 @@ class HookCopyright extends Hook {
|
|||
/**
|
||||
* Выводим везде, кроме страницы списка блогов и списка всех комментов
|
||||
*/
|
||||
if (!(Router::GetAction()=='blogs' or Router::GetAction()=='comments')) {
|
||||
return '© Powered by <a href="http://livestreetcms.org">LiveStreet CMS</a>';
|
||||
}
|
||||
return '';
|
||||
return '© Powered by <a href="http://livestreetcms.org">LiveStreet CMS</a>';
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -1,46 +0,0 @@
|
|||
<?php
|
||||
/*-------------------------------------------------------
|
||||
*
|
||||
* LiveStreet Engine Social Networking
|
||||
* Copyright © 2008 Mzhelskiy Maxim
|
||||
*
|
||||
*--------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreet.ru
|
||||
* Contact e-mail: rus.engine@gmail.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Регистрация хука для вывода ссылки спонсора релиза
|
||||
*
|
||||
* @package hooks
|
||||
* @since 1.0
|
||||
*/
|
||||
class HookSponsor extends Hook {
|
||||
/**
|
||||
* Регистрируем хуки
|
||||
*/
|
||||
public function RegisterHook() {
|
||||
$this->AddHook('template_copyright','SponsorLink',__CLASS__,-100);
|
||||
}
|
||||
/**
|
||||
* Обработка хука копирайта
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function SponsorLink() {
|
||||
/**
|
||||
* Выводим на странице списка блогов и списка всех комментов
|
||||
*/
|
||||
if (Router::GetAction()=='blogs' or Router::GetAction()=='comments') {
|
||||
return 'Спонсор релиза LiveStreet - <a href="http://radiorealty.ru" target="_blank">Портал недвижимости</a>';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -367,7 +367,7 @@ class ModuleACL extends Module {
|
|||
return self::CAN_DELETE_BLOG_EMPTY_ONLY;
|
||||
}
|
||||
|
||||
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId());
|
||||
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$oUser->getId());
|
||||
if($oBlogUser and $oBlogUser->getIsAdministrator()) {
|
||||
return self::CAN_DELETE_BLOG_EMPTY_ONLY;
|
||||
}
|
||||
|
|
|
@ -237,6 +237,9 @@ class ModuleBlog extends Module {
|
|||
* @return ModuleBlog_EntityBlog|null
|
||||
*/
|
||||
public function GetBlogById($sBlogId) {
|
||||
if (!is_numeric($sBlogId)) {
|
||||
return null;
|
||||
}
|
||||
$aBlogs=$this->GetBlogsAdditionalData($sBlogId);
|
||||
if (isset($aBlogs[$sBlogId])) {
|
||||
return $aBlogs[$sBlogId];
|
||||
|
@ -613,7 +616,10 @@ class ModuleBlog extends Module {
|
|||
* @param array $aAllowData Список типов данных, которые нужно подтянуть к списку блогов
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetBlogsByFilter($aFilter,$aOrder,$iCurrPage,$iPerPage,$aAllowData=array('owner'=>array(),'relation_user')) {
|
||||
public function GetBlogsByFilter($aFilter,$aOrder,$iCurrPage,$iPerPage,$aAllowData=null) {
|
||||
if (is_null($aAllowData)) {
|
||||
$aAllowData=array('owner'=>array(),'relation_user');
|
||||
}
|
||||
$sKey="blog_filter_".serialize($aFilter).serialize($aOrder)."_{$iCurrPage}_{$iPerPage}";
|
||||
if (false === ($data = $this->Cache_Get($sKey))) {
|
||||
$data = array('collection'=>$this->oMapperBlog->GetBlogsByFilter($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
|
||||
|
@ -722,7 +728,12 @@ class ModuleBlog extends Module {
|
|||
* которые являются откытыми для данного пользователя
|
||||
*/
|
||||
$aOpenBlogs=$this->GetBlogUsersByUserId($oUser->getId(),null,true);
|
||||
$aCloseBlogs=array_diff($aCloseBlogs,$aOpenBlogs);
|
||||
/**
|
||||
* Получаем закрытые блоги, где пользователь является автором
|
||||
*/
|
||||
$aOwnerBlogs=$this->GetBlogsByFilter(array('type'=>'close','user_owner_id'=>$oUser->getId()),array(),1,100,array());
|
||||
$aOwnerBlogs=array_keys($aOwnerBlogs['collection']);
|
||||
$aCloseBlogs=array_diff($aCloseBlogs,$aOpenBlogs,$aOwnerBlogs);
|
||||
}
|
||||
/**
|
||||
* Сохраняем в кеш
|
||||
|
@ -873,6 +884,8 @@ class ModuleBlog extends Module {
|
|||
* @return bool
|
||||
*/
|
||||
public function RecalculateCountTopic() {
|
||||
//чистим зависимые кеши
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('blog_update'));
|
||||
return $this->oMapperBlog->RecalculateCountTopic();
|
||||
}
|
||||
/**
|
||||
|
@ -882,7 +895,19 @@ class ModuleBlog extends Module {
|
|||
* @return bool
|
||||
*/
|
||||
public function RecalculateCountTopicByBlogId($iBlogId) {
|
||||
//чистим зависимые кеши
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('blog_update',"blog_update_{$iBlogId}"));
|
||||
$this->Cache_Delete("blog_{$iBlogId}");
|
||||
return $this->oMapperBlog->RecalculateCountTopic($iBlogId);
|
||||
}
|
||||
/**
|
||||
* Алиас для корректной работы ORM
|
||||
*
|
||||
* @param array $aBlogId Список ID блогов
|
||||
* @return array
|
||||
*/
|
||||
public function GetBlogItemsByArrayId($aBlogId) {
|
||||
return $this->GetBlogsByArrayId($aBlogId);
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -170,7 +170,7 @@ class ModuleBlog_EntityBlog extends Entity {
|
|||
if ($sPath=$this->getAvatar()) {
|
||||
return preg_replace("#_\d{1,3}x\d{1,3}(\.\w{3,4})$#", ((($iSize==0)?"":"_{$iSize}x{$iSize}") . "\\1"),$sPath);
|
||||
} else {
|
||||
return Config::Get('path.static.skin').'/images/avatar_blog_'.$iSize.'x'.$iSize.'.jpg';
|
||||
return Config::Get('path.static.skin').'/images/avatar_blog_'.$iSize.'x'.$iSize.'.png';
|
||||
}
|
||||
}
|
||||
/**
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -15,153 +15,380 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleComment_EntityComment extends Entity
|
||||
{
|
||||
public function getId() {
|
||||
return $this->_getDataOne('comment_id');
|
||||
}
|
||||
public function getPid() {
|
||||
return $this->_getDataOne('comment_pid');
|
||||
}
|
||||
public function getLeft() {
|
||||
return $this->_getDataOne('comment_left');
|
||||
}
|
||||
public function getRight() {
|
||||
return $this->_getDataOne('comment_right');
|
||||
}
|
||||
public function getTargetId() {
|
||||
return $this->_getDataOne('target_id');
|
||||
}
|
||||
public function getTargetType() {
|
||||
return $this->_getDataOne('target_type');
|
||||
}
|
||||
public function getTargetParentId() {
|
||||
return $this->_getDataOne('target_parent_id') ? $this->_getDataOne('target_parent_id') : 0;
|
||||
}
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
public function getText() {
|
||||
return $this->_getDataOne('comment_text');
|
||||
}
|
||||
public function getDate() {
|
||||
return $this->_getDataOne('comment_date');
|
||||
}
|
||||
public function getUserIp() {
|
||||
return $this->_getDataOne('comment_user_ip');
|
||||
}
|
||||
public function getRating() {
|
||||
return number_format(round($this->_getDataOne('comment_rating'),2), 0, '.', '');
|
||||
}
|
||||
public function getCountVote() {
|
||||
return $this->_getDataOne('comment_count_vote');
|
||||
}
|
||||
public function getDelete() {
|
||||
return $this->_getDataOne('comment_delete');
|
||||
}
|
||||
public function getPublish() {
|
||||
return $this->_getDataOne('comment_publish') ? 1 : 0;
|
||||
}
|
||||
public function getTextHash() {
|
||||
return $this->_getDataOne('comment_text_hash');
|
||||
}
|
||||
|
||||
|
||||
public function getLevel() {
|
||||
return $this->_getDataOne('comment_level');
|
||||
}
|
||||
public function isBad() {
|
||||
if ($this->getRating()<=Config::Get('module.comment.bad')) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public function getUser() {
|
||||
return $this->_getDataOne('user');
|
||||
}
|
||||
public function getTarget() {
|
||||
return $this->_getDataOne('target');
|
||||
}
|
||||
public function getVote() {
|
||||
return $this->_getDataOne('vote');
|
||||
}
|
||||
public function getIsFavourite() {
|
||||
return $this->_getDataOne('comment_is_favourite');
|
||||
}
|
||||
/**
|
||||
* Объект сущности комментариев
|
||||
*
|
||||
* @package modules.comment
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleComment_EntityComment extends Entity {
|
||||
/**
|
||||
* Возвращает ID коммента
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getId() {
|
||||
return $this->_getDataOne('comment_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID родительского коммента
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getPid() {
|
||||
return $this->_getDataOne('comment_pid');
|
||||
}
|
||||
/**
|
||||
* Возвращает значение left для дерева nested set
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getLeft() {
|
||||
return $this->_getDataOne('comment_left');
|
||||
}
|
||||
/**
|
||||
* Возвращает значение right для дерева nested set
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getRight() {
|
||||
return $this->_getDataOne('comment_right');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID владельца
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTargetId() {
|
||||
return $this->_getDataOne('target_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает тип владельца
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTargetType() {
|
||||
return $this->_getDataOne('target_type');
|
||||
}
|
||||
/**
|
||||
* Возвращет ID родителя владельца
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTargetParentId() {
|
||||
return $this->_getDataOne('target_parent_id') ? $this->_getDataOne('target_parent_id') : 0;
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя, автора комментария
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает текст комментария
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getText() {
|
||||
return $this->_getDataOne('comment_text');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату комментария
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDate() {
|
||||
return $this->_getDataOne('comment_date');
|
||||
}
|
||||
/**
|
||||
* Возвращает IP пользователя
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getUserIp() {
|
||||
return $this->_getDataOne('comment_user_ip');
|
||||
}
|
||||
/**
|
||||
* Возвращает рейтинг комментария
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getRating() {
|
||||
return number_format(round($this->_getDataOne('comment_rating'),2), 0, '.', '');
|
||||
}
|
||||
/**
|
||||
* Возвращает количество проголосовавших
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountVote() {
|
||||
return $this->_getDataOne('comment_count_vote');
|
||||
}
|
||||
/**
|
||||
* Возвращает флаг удаленного комментария
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getDelete() {
|
||||
return $this->_getDataOne('comment_delete');
|
||||
}
|
||||
/**
|
||||
* Возвращает флаг опубликованного комментария
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getPublish() {
|
||||
return $this->_getDataOne('comment_publish') ? 1 : 0;
|
||||
}
|
||||
/**
|
||||
* Возвращает хеш комментария
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTextHash() {
|
||||
return $this->_getDataOne('comment_text_hash');
|
||||
}
|
||||
|
||||
public function getCountFavourite() {
|
||||
return $this->_getDataOne('comment_count_favourite');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает уровень вложенности комментария
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getLevel() {
|
||||
return $this->_getDataOne('comment_level');
|
||||
}
|
||||
/**
|
||||
* Проверяет является ли комментарий плохим
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isBad() {
|
||||
if ($this->getRating()<=Config::Get('module.comment.bad')) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Возвращает объект пользователя
|
||||
*
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function getUser() {
|
||||
return $this->_getDataOne('user');
|
||||
}
|
||||
/**
|
||||
* Возвращает объект владельца
|
||||
*
|
||||
* @return mixed|null
|
||||
*/
|
||||
public function getTarget() {
|
||||
return $this->_getDataOne('target');
|
||||
}
|
||||
/**
|
||||
* Возвращает объект голосования
|
||||
*
|
||||
* @return ModuleVote_EntityVote|null
|
||||
*/
|
||||
public function getVote() {
|
||||
return $this->_getDataOne('vote');
|
||||
}
|
||||
/**
|
||||
* Проверяет является ли комментарий избранным у текущего пользователя
|
||||
*
|
||||
* @return bool|null
|
||||
*/
|
||||
public function getIsFavourite() {
|
||||
return $this->_getDataOne('comment_is_favourite');
|
||||
}
|
||||
/**
|
||||
* Возвращает количество избранного
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountFavourite() {
|
||||
return $this->_getDataOne('comment_count_favourite');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID комментария
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setId($data) {
|
||||
$this->_aData['comment_id']=$data;
|
||||
}
|
||||
public function setPid($data) {
|
||||
$this->_aData['comment_pid']=$data;
|
||||
}
|
||||
public function setLeft($data) {
|
||||
$this->_aData['comment_left']=$data;
|
||||
}
|
||||
public function setRight($data) {
|
||||
$this->_aData['comment_right']=$data;
|
||||
}
|
||||
public function setTargetId($data) {
|
||||
$this->_aData['target_id']=$data;
|
||||
}
|
||||
public function setTargetType($data) {
|
||||
$this->_aData['target_type']=$data;
|
||||
}
|
||||
public function setTargetParentId($data) {
|
||||
$this->_aData['target_parent_id']=$data;
|
||||
}
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
public function setText($data) {
|
||||
$this->_aData['comment_text']=$data;
|
||||
}
|
||||
public function setDate($data) {
|
||||
$this->_aData['comment_date']=$data;
|
||||
}
|
||||
public function setUserIp($data) {
|
||||
$this->_aData['comment_user_ip']=$data;
|
||||
}
|
||||
public function setRating($data) {
|
||||
$this->_aData['comment_rating']=$data;
|
||||
}
|
||||
public function setCountVote($data) {
|
||||
$this->_aData['comment_count_vote']=$data;
|
||||
}
|
||||
public function setDelete($data) {
|
||||
$this->_aData['comment_delete']=$data;
|
||||
}
|
||||
public function setPublish($data) {
|
||||
$this->_aData['comment_publish']=$data;
|
||||
}
|
||||
$this->_aData['comment_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID родительского комментария
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setPid($data) {
|
||||
$this->_aData['comment_pid']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает значени left для дерева nested set
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setLeft($data) {
|
||||
$this->_aData['comment_left']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает значени right для дерева nested set
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setRight($data) {
|
||||
$this->_aData['comment_right']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID владельца
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTargetId($data) {
|
||||
$this->_aData['target_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает тип владельца
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setTargetType($data) {
|
||||
$this->_aData['target_type']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID родителя владельца
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTargetParentId($data) {
|
||||
$this->_aData['target_parent_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает текст комментария
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setText($data) {
|
||||
$this->_aData['comment_text']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату комментария
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDate($data) {
|
||||
$this->_aData['comment_date']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанвливает IP пользователя
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setUserIp($data) {
|
||||
$this->_aData['comment_user_ip']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает рейтинг комментария
|
||||
*
|
||||
* @param float $data
|
||||
*/
|
||||
public function setRating($data) {
|
||||
$this->_aData['comment_rating']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество проголосавших
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountVote($data) {
|
||||
$this->_aData['comment_count_vote']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает флаг удаленности комментария
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setDelete($data) {
|
||||
$this->_aData['comment_delete']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает флаг публикации
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setPublish($data) {
|
||||
$this->_aData['comment_publish']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает хеш комментария
|
||||
*
|
||||
* @param strign $data
|
||||
*/
|
||||
public function setTextHash($data) {
|
||||
$this->_aData['comment_text_hash']=$data;
|
||||
}
|
||||
|
||||
|
||||
public function setLevel($data) {
|
||||
$this->_aData['comment_level']=$data;
|
||||
}
|
||||
public function setUser($data) {
|
||||
$this->_aData['user']=$data;
|
||||
}
|
||||
public function setTarget($data) {
|
||||
$this->_aData['target']=$data;
|
||||
}
|
||||
public function setVote($data) {
|
||||
$this->_aData['vote']=$data;
|
||||
}
|
||||
public function setIsFavourite($data) {
|
||||
$this->_aData['comment_is_favourite']=$data;
|
||||
}
|
||||
public function setCountFavourite($data) {
|
||||
$this->_aData['comment_count_favourite']=$data;
|
||||
}
|
||||
$this->_aData['comment_text_hash']=$data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает уровень вложенности комментария
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setLevel($data) {
|
||||
$this->_aData['comment_level']=$data;
|
||||
}
|
||||
/**
|
||||
* Устаналвает объект пользователя
|
||||
*
|
||||
* @param ModuleUser_EntityUser $data
|
||||
*/
|
||||
public function setUser($data) {
|
||||
$this->_aData['user']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает объект владельца
|
||||
*
|
||||
* @param mixed $data
|
||||
*/
|
||||
public function setTarget($data) {
|
||||
$this->_aData['target']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает объект голосования
|
||||
*
|
||||
* @param ModuleVote_EntityVote $data
|
||||
*/
|
||||
public function setVote($data) {
|
||||
$this->_aData['vote']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает факт нахождения комментария в избранном у текущего пользователя
|
||||
*
|
||||
* @param bool $data
|
||||
*/
|
||||
public function setIsFavourite($data) {
|
||||
$this->_aData['comment_is_favourite']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество избранного
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountFavourite($data) {
|
||||
$this->_aData['comment_count_favourite']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,32 +15,77 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleComment_EntityCommentOnline extends Entity
|
||||
{
|
||||
public function getTargetId() {
|
||||
return $this->_getDataOne('target_id');
|
||||
}
|
||||
public function getTargetType() {
|
||||
return $this->_getDataOne('target_type');
|
||||
}
|
||||
/**
|
||||
* Объект сущности прямого эфира
|
||||
*
|
||||
* @package modules.comment
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleComment_EntityCommentOnline extends Entity {
|
||||
/**
|
||||
* Возвращает ID владельца
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTargetId() {
|
||||
return $this->_getDataOne('target_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает тип владельца
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTargetType() {
|
||||
return $this->_getDataOne('target_type');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID комментария
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCommentId() {
|
||||
return $this->_getDataOne('comment_id');
|
||||
}
|
||||
public function getTargetParentId() {
|
||||
return $this->_getDataOne('target_parent_id') ? $this->_getDataOne('target_parent_id') : 0;
|
||||
}
|
||||
|
||||
public function setTargetId($data) {
|
||||
$this->_aData['target_id']=$data;
|
||||
}
|
||||
public function setTargetType($data) {
|
||||
$this->_aData['target_type']=$data;
|
||||
}
|
||||
public function setCommentId($data) {
|
||||
$this->_aData['comment_id']=$data;
|
||||
}
|
||||
public function setTargetParentId($data) {
|
||||
$this->_aData['target_parent_id']=$data;
|
||||
}
|
||||
return $this->_getDataOne('comment_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID родителя владельца
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getTargetParentId() {
|
||||
return $this->_getDataOne('target_parent_id') ? $this->_getDataOne('target_parent_id') : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает ID владельца
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTargetId($data) {
|
||||
$this->_aData['target_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает тип владельца
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setTargetType($data) {
|
||||
$this->_aData['target_type']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID комментария
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCommentId($data) {
|
||||
$this->_aData['comment_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID родителя владельца
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTargetParentId($data) {
|
||||
$this->_aData['target_parent_id']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,10 +15,26 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleComment_MapperComment extends Mapper {
|
||||
|
||||
public function GetCommentsRatingByDate($sDate,$sTargetType,$iLimit,$aExcludeTarget=array(),$aExcludeParentTarget=array()) {
|
||||
$sql = "SELECT
|
||||
/**
|
||||
* Маппер комментариев, работа с базой данных
|
||||
*
|
||||
* @package modules.comment
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleComment_MapperComment extends Mapper {
|
||||
|
||||
/**
|
||||
* Получить комменты по рейтингу и дате
|
||||
*
|
||||
* @param string $sDate Дата за которую выводить рейтинг
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @param int $iLimit Количество элементов
|
||||
* @param array $aExcludeTarget Список ID владельцев, которые необходимо исключить из выдачи
|
||||
* @param array $aExcludeParentTarget Список ID родителей владельцев, которые необходимо исключить из выдачи
|
||||
* @return array
|
||||
*/
|
||||
public function GetCommentsRatingByDate($sDate,$sTargetType,$iLimit,$aExcludeTarget=array(),$aExcludeParentTarget=array()) {
|
||||
$sql = "SELECT
|
||||
comment_id
|
||||
FROM
|
||||
".Config::Get('db.table.comment')."
|
||||
|
@ -35,14 +51,14 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
{ AND target_id NOT IN(?a) }
|
||||
{ AND target_parent_id NOT IN (?a) }
|
||||
ORDER by comment_rating desc, comment_id desc
|
||||
LIMIT 0, ?d ";
|
||||
$aComments=array();
|
||||
LIMIT 0, ?d ";
|
||||
$aComments=array();
|
||||
if ($aRows=$this->oDb->select(
|
||||
$sql,$sTargetType, $sDate,
|
||||
(is_array($aExcludeTarget)&&count($aExcludeTarget)) ? $aExcludeTarget : DBSIMPLE_SKIP,
|
||||
(count($aExcludeParentTarget) ? $aExcludeParentTarget : DBSIMPLE_SKIP),
|
||||
$iLimit
|
||||
)
|
||||
$sql,$sTargetType, $sDate,
|
||||
(is_array($aExcludeTarget)&&count($aExcludeTarget)) ? $aExcludeTarget : DBSIMPLE_SKIP,
|
||||
(count($aExcludeParentTarget) ? $aExcludeParentTarget : DBSIMPLE_SKIP),
|
||||
$iLimit
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aRow) {
|
||||
$aComments[]=$aRow['comment_id'];
|
||||
|
@ -50,7 +66,16 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
}
|
||||
return $aComments;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает уникальный коммент, это помогает спастись от дублей комментов
|
||||
*
|
||||
* @param int $sTargetId ID владельца комментария
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $sCommentPid ID родительского комментария
|
||||
* @param string $sHash Хеш строка текста комментария
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetCommentUnique($sTargetId,$sTargetType,$sUserId,$sCommentPid,$sHash) {
|
||||
$sql = "SELECT comment_id FROM ".Config::Get('db.table.comment')."
|
||||
WHERE
|
||||
|
@ -69,7 +94,17 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить все комменты
|
||||
*
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @param array $aExcludeTarget Список ID владельцев, которые необходимо исключить из выдачи
|
||||
* @param array $aExcludeParentTarget Список ID родителей владельцев, которые необходимо исключить из выдачи, например, исключить комментарии топиков к определенным блогам(закрытым)
|
||||
* @return array
|
||||
*/
|
||||
public function GetCommentsAll($sTargetType,&$iCount,$iCurrPage,$iPerPage,$aExcludeTarget=array(),$aExcludeParentTarget=array()) {
|
||||
$sql = "SELECT
|
||||
comment_id
|
||||
|
@ -84,28 +119,32 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
{ AND target_id NOT IN(?a) }
|
||||
{ AND target_parent_id NOT IN(?a) }
|
||||
ORDER by comment_id desc
|
||||
LIMIT ?d, ?d ";
|
||||
LIMIT ?d, ?d ";
|
||||
$aComments=array();
|
||||
if ($aRows=$this->oDb->selectPage(
|
||||
$iCount,$sql,$sTargetType,
|
||||
(count($aExcludeTarget)?$aExcludeTarget:DBSIMPLE_SKIP),
|
||||
(count($aExcludeParentTarget)?$aExcludeParentTarget:DBSIMPLE_SKIP),
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)
|
||||
$iCount,$sql,$sTargetType,
|
||||
(count($aExcludeTarget)?$aExcludeTarget:DBSIMPLE_SKIP),
|
||||
(count($aExcludeParentTarget)?$aExcludeParentTarget:DBSIMPLE_SKIP),
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aRow) {
|
||||
$aComments[]=$aRow['comment_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aComments;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Список комментов по ID
|
||||
*
|
||||
* @param array $aArrayId Список ID комментариев
|
||||
* @return array
|
||||
*/
|
||||
public function GetCommentsByArrayId($aArrayId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
$sql = "SELECT
|
||||
*
|
||||
FROM
|
||||
|
@ -117,13 +156,19 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
if ($aRows=$this->oDb->select($sql,$aArrayId,$aArrayId)) {
|
||||
foreach ($aRows as $aRow) {
|
||||
$aComments[]=Engine::GetEntity('Comment',$aRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aComments;
|
||||
}
|
||||
|
||||
|
||||
public function GetCommentsOnline($sTargetType,$aExcludeTargets,$iLimit) {
|
||||
/**
|
||||
* Получить все комменты сгрупированные по типу(для вывода прямого эфира)
|
||||
*
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @param array $aExcludeTargets Список ID владельцев для исключения
|
||||
* @param int $iLimit Количество элементов
|
||||
* @return array
|
||||
*/
|
||||
public function GetCommentsOnline($sTargetType,$aExcludeTargets,$iLimit) {
|
||||
$sql = "SELECT
|
||||
comment_id
|
||||
FROM
|
||||
|
@ -132,13 +177,13 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
target_type = ?
|
||||
{ AND target_parent_id NOT IN(?a) }
|
||||
ORDER by comment_online_id desc limit 0, ?d ; ";
|
||||
|
||||
|
||||
$aComments=array();
|
||||
if ($aRows=$this->oDb->select(
|
||||
$sql,$sTargetType,
|
||||
(count($aExcludeTargets)?$aExcludeTargets:DBSIMPLE_SKIP),
|
||||
$iLimit
|
||||
)
|
||||
$sql,$sTargetType,
|
||||
(count($aExcludeTargets)?$aExcludeTargets:DBSIMPLE_SKIP),
|
||||
$iLimit
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aRow) {
|
||||
$aComments[]=$aRow['comment_id'];
|
||||
|
@ -146,8 +191,14 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
}
|
||||
return $aComments;
|
||||
}
|
||||
|
||||
public function GetCommentsByTargetId($sId,$sTargetType) {
|
||||
/**
|
||||
* Получить комменты по владельцу
|
||||
*
|
||||
* @param int $sId ID владельца коммента
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @return array
|
||||
*/
|
||||
public function GetCommentsByTargetId($sId,$sTargetType) {
|
||||
$sql = "SELECT
|
||||
comment_id,
|
||||
comment_id as ARRAY_KEY,
|
||||
|
@ -165,8 +216,14 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function GetCommentsTreeByTargetId($sId,$sTargetType) {
|
||||
/**
|
||||
* Получает комменты используя nested set
|
||||
*
|
||||
* @param int $sId ID владельца коммента
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @return array
|
||||
*/
|
||||
public function GetCommentsTreeByTargetId($sId,$sTargetType) {
|
||||
$sql = "SELECT
|
||||
comment_id
|
||||
FROM
|
||||
|
@ -185,10 +242,18 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
}
|
||||
return $aComments;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получает комменты используя nested set
|
||||
*
|
||||
* @param int $sId ID владельца коммента
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetCommentsTreePageByTargetId($sId,$sTargetType,&$iCount,$iPage,$iPerPage) {
|
||||
|
||||
|
||||
/**
|
||||
* Сначала получаем корни и определяем границы выборки веток
|
||||
*/
|
||||
|
@ -210,13 +275,13 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
$aCmt=array_pop($aRows);
|
||||
$iLeft=$aCmt['comment_left'];
|
||||
if ($aRows) {
|
||||
$aCmt=array_shift($aRows);
|
||||
$aCmt=array_shift($aRows);
|
||||
}
|
||||
$iRight=$aCmt['comment_right'];
|
||||
} else {
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Теперь получаем полный список комментов
|
||||
*/
|
||||
|
@ -240,10 +305,16 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
$aComments[]=$aRow['comment_id'];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $aComments;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает количество дочерних комментариев у корневого коммента
|
||||
*
|
||||
* @param int $sId ID владельца коммента
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountCommentsRootByTargetId($sId,$sTargetType) {
|
||||
$sql = "SELECT
|
||||
count(comment_id) as c
|
||||
|
@ -255,12 +326,19 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
target_type = ?
|
||||
AND
|
||||
comment_pid IS NULL ;";
|
||||
|
||||
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sId,$sTargetType)) {
|
||||
return $aRow['c'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает количество комментариев
|
||||
*
|
||||
* @param int $sId ID владельца коммента
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @param int $iLeft Значение left для дерева nested set
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountCommentsAfterByTargetId($sId,$sTargetType,$iLeft) {
|
||||
$sql = "SELECT
|
||||
count(comment_id) as c
|
||||
|
@ -274,12 +352,19 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
comment_pid IS NULL
|
||||
AND
|
||||
comment_left >= ?d ;";
|
||||
|
||||
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sId,$sTargetType,$iLeft)) {
|
||||
return $aRow['c'];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает корневой комментарий
|
||||
*
|
||||
* @param int $sId ID владельца коммента
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @param int $iLeft Значение left для дерева nested set
|
||||
* @return ModuleComment_EntityComment|null
|
||||
*/
|
||||
public function GetCommentRootByTargetIdAndChildren($sId,$sTargetType,$iLeft) {
|
||||
$sql = "SELECT
|
||||
*
|
||||
|
@ -296,14 +381,21 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
AND
|
||||
comment_right > ?d
|
||||
LIMIT 0,1 ;";
|
||||
|
||||
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sId,$sTargetType,$iLeft,$iLeft)) {
|
||||
return Engine::GetEntity('Comment',$aRow);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function GetCommentsNewByTargetId($sId,$sTargetType,$sIdCommentLast) {
|
||||
/**
|
||||
* Получить новые комменты для владельца
|
||||
*
|
||||
* @param int $sId ID владельца коммента
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @param int $sIdCommentLast ID последнего прочитанного комментария
|
||||
* @return array
|
||||
*/
|
||||
public function GetCommentsNewByTargetId($sId,$sTargetType,$sIdCommentLast) {
|
||||
$sql = "SELECT
|
||||
comment_id
|
||||
FROM
|
||||
|
@ -324,7 +416,18 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
}
|
||||
return $aComments;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить комменты по юзеру
|
||||
*
|
||||
* @param int $sId ID пользователя
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @param int $iCount Возращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @param array $aExcludeTarget Список ID владельцев, которые необходимо исключить из выдачи
|
||||
* @param array $aExcludeParentTarget Список ID родителей владельцев, которые необходимо исключить из выдачи
|
||||
* @return array
|
||||
*/
|
||||
public function GetCommentsByUserId($sId,$sTargetType,&$iCount,$iCurrPage,$iPerPage,$aExcludeTarget=array(),$aExcludeParentTarget=array()) {
|
||||
$sql = "SELECT
|
||||
comment_id
|
||||
|
@ -341,15 +444,15 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
{ AND target_id NOT IN (?a) }
|
||||
{ AND target_parent_id NOT IN (?a) }
|
||||
ORDER by comment_id desc
|
||||
LIMIT ?d, ?d ";
|
||||
LIMIT ?d, ?d ";
|
||||
$aComments=array();
|
||||
if ($aRows=$this->oDb->selectPage(
|
||||
$iCount,$sql,$sId,
|
||||
$sTargetType,
|
||||
(count($aExcludeTarget) ? $aExcludeTarget : DBSIMPLE_SKIP),
|
||||
(count($aExcludeParentTarget) ? $aExcludeParentTarget : DBSIMPLE_SKIP),
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)
|
||||
$iCount,$sql,$sId,
|
||||
$sTargetType,
|
||||
(count($aExcludeTarget) ? $aExcludeTarget : DBSIMPLE_SKIP),
|
||||
(count($aExcludeParentTarget) ? $aExcludeParentTarget : DBSIMPLE_SKIP),
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aRow) {
|
||||
$aComments[]=$aRow['comment_id'];
|
||||
|
@ -357,7 +460,15 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
}
|
||||
return $aComments;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает количество комментариев одного пользователя
|
||||
*
|
||||
* @param id $sId ID пользователя
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @param array $aExcludeTarget Список ID владельцев, которые необходимо исключить из выдачи
|
||||
* @param array $aExcludeParentTarget Список ID родителей владельцев, которые необходимо исключить из выдачи
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountCommentsByUserId($sId,$sTargetType,$aExcludeTarget=array(),$aExcludeParentTarget=array()) {
|
||||
$sql = "SELECT
|
||||
count(comment_id) as count
|
||||
|
@ -373,18 +484,23 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
comment_publish = 1
|
||||
{ AND target_id NOT IN (?a) }
|
||||
{ AND target_parent_id NOT IN (?a) }
|
||||
";
|
||||
";
|
||||
if ($aRow=$this->oDb->selectRow(
|
||||
$sql,$sId,$sTargetType,
|
||||
(count($aExcludeTarget) ? $aExcludeTarget : DBSIMPLE_SKIP),
|
||||
(count($aExcludeParentTarget) ? $aExcludeParentTarget : DBSIMPLE_SKIP)
|
||||
)
|
||||
$sql,$sId,$sTargetType,
|
||||
(count($aExcludeTarget) ? $aExcludeTarget : DBSIMPLE_SKIP),
|
||||
(count($aExcludeParentTarget) ? $aExcludeParentTarget : DBSIMPLE_SKIP)
|
||||
)
|
||||
) {
|
||||
return $aRow['count'];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет коммент
|
||||
*
|
||||
* @param ModuleComment_EntityComment $oComment Объект комментария
|
||||
* @return bool|int
|
||||
*/
|
||||
public function AddComment(ModuleComment_EntityComment $oComment) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.comment')."
|
||||
(comment_pid,
|
||||
|
@ -399,22 +515,27 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
comment_text_hash
|
||||
)
|
||||
VALUES(?, ?d, ?, ?d, ?d, ?, ?, ?, ?d, ?)
|
||||
";
|
||||
if ($iId=$this->oDb->query($sql,$oComment->getPid(),$oComment->getTargetId(),$oComment->getTargetType(),$oComment->getTargetParentId(),$oComment->getUserId(),$oComment->getText(),$oComment->getDate(),$oComment->getUserIp(),$oComment->getPublish(),$oComment->getTextHash()))
|
||||
";
|
||||
if ($iId=$this->oDb->query($sql,$oComment->getPid(),$oComment->getTargetId(),$oComment->getTargetType(),$oComment->getTargetParentId(),$oComment->getUserId(),$oComment->getText(),$oComment->getDate(),$oComment->getUserIp(),$oComment->getPublish(),$oComment->getTextHash()))
|
||||
{
|
||||
return $iId;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет коммент в дерево nested set
|
||||
*
|
||||
* @param ModuleComment_EntityComment $oComment Объект комментария
|
||||
* @return bool|int
|
||||
*/
|
||||
public function AddCommentTree(ModuleComment_EntityComment $oComment) {
|
||||
$this->oDb->transaction();
|
||||
|
||||
|
||||
if ($oComment->getPid() and $oCommentParent=$this->GetCommentsByArrayId(array($oComment->getPid()))) {
|
||||
$oCommentParent=$oCommentParent[0];
|
||||
$iLeft=$oCommentParent->getRight();
|
||||
$iLevel=$oCommentParent->getLevel()+1;
|
||||
|
||||
|
||||
$sql= "UPDATE ".Config::Get('db.table.comment')." SET comment_left=comment_left+2 WHERE target_id=?d and target_type=? and comment_left>? ;";
|
||||
$this->oDb->query($sql, $oComment->getTargetId(),$oComment->getTargetType(),$iLeft-1);
|
||||
$sql = "UPDATE ".Config::Get('db.table.comment')." SET comment_right=comment_right+2 WHERE target_id=?d and target_type=? and comment_right>? ;";
|
||||
|
@ -427,21 +548,27 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
}
|
||||
$iLevel=0;
|
||||
}
|
||||
|
||||
|
||||
if ($iId=$this->AddComment($oComment)) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.comment')." SET comment_left = ?d, comment_right = ?d, comment_level = ?d WHERE comment_id = ? ;";
|
||||
$this->oDb->query($sql, $iLeft,$iLeft+1,$iLevel,$iId);
|
||||
$this->oDb->commit();
|
||||
return $iId;
|
||||
}
|
||||
|
||||
|
||||
if (strtolower(Config::Get('db.tables.engine'))=='innodb') {
|
||||
$this->oDb->rollback();
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает последний комментарий
|
||||
*
|
||||
* @param int $sTargetId ID владельца коммента
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @return ModuleComment_EntityComment|null
|
||||
*/
|
||||
public function GetCommentLast($sTargetId,$sTargetType) {
|
||||
$sql = "SELECT * FROM ".Config::Get('db.table.comment')."
|
||||
WHERE
|
||||
|
@ -456,7 +583,12 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет новый коммент в прямой эфир
|
||||
*
|
||||
* @param ModuleComment_EntityCommentOnline $oCommentOnline Объект онлайн комментария
|
||||
* @return bool|int
|
||||
*/
|
||||
public function AddCommentOnline(ModuleComment_EntityCommentOnline $oCommentOnline) {
|
||||
$sql = "REPLACE INTO ".Config::Get('db.table.comment_online')."
|
||||
SET
|
||||
|
@ -464,26 +596,33 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
target_type= ? ,
|
||||
target_parent_id = ?d,
|
||||
comment_id= ?d
|
||||
";
|
||||
if ($iId=$this->oDb->query($sql,$oCommentOnline->getTargetId(),$oCommentOnline->getTargetType(),$oCommentOnline->getTargetParentId(),$oCommentOnline->getCommentId()))
|
||||
{
|
||||
";
|
||||
if ($iId=$this->oDb->query($sql,$oCommentOnline->getTargetId(),$oCommentOnline->getTargetType(),$oCommentOnline->getTargetParentId(),$oCommentOnline->getCommentId())) {
|
||||
return $iId;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет коммент из прямого эфира
|
||||
*
|
||||
* @param int $sTargetId ID владельца коммента
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteCommentOnlineByTargetId($sTargetId,$sTargetType) {
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.comment_online')." WHERE target_id = ?d and target_type = ? ";
|
||||
if ($this->oDb->query($sql,$sTargetId,$sTargetType))
|
||||
{
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.comment_online')." WHERE target_id = ?d and target_type = ? ";
|
||||
if ($this->oDb->query($sql,$sTargetId,$sTargetType)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function UpdateComment(ModuleComment_EntityComment $oComment) {
|
||||
/**
|
||||
* Обновляет коммент
|
||||
*
|
||||
* @param ModuleComment_EntityComment $oComment Объект комментария
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateComment(ModuleComment_EntityComment $oComment) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.comment')."
|
||||
SET
|
||||
comment_text= ?,
|
||||
|
@ -495,26 +634,39 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
comment_text_hash = ?
|
||||
WHERE
|
||||
comment_id = ?d
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$oComment->getText(),$oComment->getRating(),$oComment->getCountVote(),$oComment->getCountFavourite(),$oComment->getDelete(),$oComment->getPublish(),$oComment->getTextHash(),$oComment->getId())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function SetCommentsPublish($sTargetId,$sTargetType,$iPublish) {
|
||||
/**
|
||||
* Устанавливает publish у коммента
|
||||
*
|
||||
* @param int $sTargetId ID владельца коммента
|
||||
* @param string $sTargetType Тип владельца комментария
|
||||
* @param int $iPublish Статус отображать комментарии или нет
|
||||
* @return bool
|
||||
*/
|
||||
public function SetCommentsPublish($sTargetId,$sTargetType,$iPublish) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.comment')."
|
||||
SET
|
||||
comment_publish= ?
|
||||
WHERE
|
||||
target_id = ?d AND target_type = ?
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$iPublish,$sTargetId,$sTargetType)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет комментарии из базы данных
|
||||
*
|
||||
* @param array|int $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельцев
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteCommentByTargetId($aTargetId,$sTargetType) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.comment')."
|
||||
|
@ -522,13 +674,19 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
target_id IN (?a)
|
||||
AND
|
||||
target_type = ?
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$aTargetId,$sTargetType)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет коммент из прямого эфира по массиву переданных идентификаторов
|
||||
*
|
||||
* @param array|int $aCommentId
|
||||
* @param string $sTargetType Тип владельцев
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteCommentOnlineByArrayId($aCommentId,$sTargetType) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.comment_online')."
|
||||
|
@ -536,13 +694,20 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
comment_id IN (?a)
|
||||
AND
|
||||
target_type = ?
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$aCommentId,$sTargetType)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Меняем target parent по массиву идентификаторов
|
||||
*
|
||||
* @param int $sParentId Новый ID родителя владельца
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param array|int $aTargetId Список ID владельцев
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateTargetParentByTargetId($sParentId, $sTargetType, $aTargetId) {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.comment')."
|
||||
|
@ -552,13 +717,20 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
target_id IN (?a)
|
||||
AND
|
||||
target_type = ?
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sParentId,$aTargetId,$sTargetType)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Меняем target parent по массиву идентификаторов в таблице комментариев online
|
||||
*
|
||||
* @param int $sParentId Новый ID родителя владельца
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param array|int $aTargetId Список ID владельцев
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateTargetParentByTargetIdOnline($sParentId, $sTargetType, $aTargetId) {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.comment_online')."
|
||||
|
@ -568,13 +740,20 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
target_id IN (?a)
|
||||
AND
|
||||
target_type = ?
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sParentId,$aTargetId,$sTargetType)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Меняет target parent на новый
|
||||
*
|
||||
* @param int $sParentId Прежний ID родителя владельца
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sParentIdNew Новый ID родителя владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function MoveTargetParent($sParentId, $sTargetType, $sParentIdNew) {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.comment')."
|
||||
|
@ -584,13 +763,20 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
target_parent_id = ?d
|
||||
AND
|
||||
target_type = ?
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sParentIdNew,$sParentId,$sTargetType)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Меняет target parent на новый в прямом эфире
|
||||
*
|
||||
* @param int $sParentId Прежний ID родителя владельца
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sParentIdNew Новый ID родителя владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function MoveTargetParentOnline($sParentId, $sTargetType, $sParentIdNew) {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.comment_online')."
|
||||
|
@ -600,20 +786,29 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
target_parent_id = ?d
|
||||
AND
|
||||
target_type = ?
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sParentIdNew,$sParentId,$sTargetType)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public function RestoreTree($iPid,$iLft,$iLevel,$aTargetId,$sTargetType) {
|
||||
/**
|
||||
* Перестраивает дерево комментариев
|
||||
* Восстанавливает значения left, right и level
|
||||
*
|
||||
* @param int $iPid ID родителя
|
||||
* @param int $iLft Значение left для дерева nested set
|
||||
* @param int $iLevel Уровень
|
||||
* @param int $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @return int
|
||||
*/
|
||||
public function RestoreTree($iPid,$iLft,$iLevel,$aTargetId,$sTargetType) {
|
||||
$iRgt = $iLft+1;
|
||||
$iLevel++;
|
||||
$sql = "SELECT comment_id FROM ".Config::Get('db.table.comment')." WHERE target_id = ? and target_type = ? { and comment_pid = ? } { and comment_pid IS NULL and 1=?d}
|
||||
ORDER BY comment_id ASC";
|
||||
|
||||
|
||||
if ($aRows=$this->oDb->select($sql,$aTargetId,$sTargetType,!is_null($iPid) ? $iPid:DBSIMPLE_SKIP, is_null($iPid) ? 1:DBSIMPLE_SKIP)) {
|
||||
foreach ($aRows as $aRow) {
|
||||
$iRgt = $this->RestoreTree($aRow['comment_id'], $iRgt,$iLevel,$aTargetId,$sTargetType);
|
||||
|
@ -624,12 +819,16 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
$sql = "UPDATE ".Config::Get('db.table.comment')."
|
||||
SET comment_left=?d, comment_right=?d , comment_level =?d
|
||||
WHERE comment_id = ? ";
|
||||
$this->oDb->query($sql,$iLft,$iRgt,$iLevel,$iPid);
|
||||
$this->oDb->query($sql,$iLft,$iRgt,$iLevel,$iPid);
|
||||
}
|
||||
|
||||
|
||||
return $iRgt+1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список всех используемых типов владельца
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function GetCommentTypes() {
|
||||
$sql = "SELECT target_type FROM ".Config::Get('db.table.comment')."
|
||||
GROUP BY target_type ";
|
||||
|
@ -641,17 +840,28 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
}
|
||||
return $aTypes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список ID владельцев
|
||||
*
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на одну старницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetTargetIdByType($sTargetType,$iPage,$iPerPage) {
|
||||
$sql = "SELECT target_id FROM ".Config::Get('db.table.comment')."
|
||||
WHERE target_type = ? GROUP BY target_id ORDER BY target_id LIMIT ?d, ?d ";
|
||||
WHERE target_type = ? GROUP BY target_id ORDER BY target_id LIMIT ?d, ?d ";
|
||||
if ($aRows=$this->oDb->select($sql,$sTargetType,($iPage-1)*$iPerPage, $iPerPage)) {
|
||||
return $aRows;
|
||||
}
|
||||
return array();
|
||||
}
|
||||
|
||||
public function RecalculateFavourite() {
|
||||
/**
|
||||
* Пересчитывает счетчик избранных комментариев
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function RecalculateFavourite() {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.comment')." c
|
||||
SET c.comment_count_favourite = (
|
||||
|
@ -664,11 +874,74 @@ class ModuleComment_MapperComment extends Mapper {
|
|||
AND
|
||||
f.target_type = 'comment'
|
||||
)
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает список комментариев по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр выборки
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCount Возвращает общее количество элментов
|
||||
* @param int $iCurrPage Номер текущей страницы
|
||||
* @param int $iPerPage Количество элементов на одну страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetCommentsByFilter($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$aOrderAllow=array('comment_id','comment_pid','comment_rating','comment_date');
|
||||
$sOrder='';
|
||||
foreach ($aOrder as $key=>$value) {
|
||||
if (!in_array($key,$aOrderAllow)) {
|
||||
unset($aOrder[$key]);
|
||||
} elseif (in_array($value,array('asc','desc'))) {
|
||||
$sOrder.=" {$key} {$value},";
|
||||
}
|
||||
}
|
||||
$sOrder=trim($sOrder,',');
|
||||
if ($sOrder=='') {
|
||||
$sOrder=' comment_id desc ';
|
||||
}
|
||||
|
||||
if (isset($aFilter['target_type']) and !is_array($aFilter['target_type'])) {
|
||||
$aFilter['target_type']=array($aFilter['target_type']);
|
||||
}
|
||||
|
||||
$sql = "SELECT
|
||||
comment_id
|
||||
FROM
|
||||
".Config::Get('db.table.comment')."
|
||||
WHERE
|
||||
1 = 1
|
||||
{ AND comment_id = ?d }
|
||||
{ AND user_id = ?d }
|
||||
{ AND target_parent_id = ?d }
|
||||
{ AND target_id = ?d }
|
||||
{ AND target_type IN (?a) }
|
||||
{ AND comment_delete = ?d }
|
||||
{ AND comment_publish = ?d }
|
||||
ORDER by {$sOrder}
|
||||
LIMIT ?d, ?d ;
|
||||
";
|
||||
$aResult=array();
|
||||
if ($aRows=$this->oDb->selectPage($iCount,$sql,
|
||||
isset($aFilter['id']) ? $aFilter['id'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['user_id']) ? $aFilter['user_id'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['target_parent_id']) ? $aFilter['target_parent_id'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['target_id']) ? $aFilter['target_id'] : DBSIMPLE_SKIP,
|
||||
(isset($aFilter['target_type']) and count($aFilter['target_type']) ) ? $aFilter['target_type'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['delete']) ? $aFilter['delete'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['publish']) ? $aFilter['publish'] : DBSIMPLE_SKIP,
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)) {
|
||||
foreach ($aRows as $aRow) {
|
||||
$aResult[]=$aRow['comment_id'];
|
||||
}
|
||||
}
|
||||
return $aResult;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -16,47 +16,55 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* Модуль для работы с голосованиями
|
||||
* Модуль для работы с избранным
|
||||
*
|
||||
* @package modules.favourite
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleFavourite extends Module {
|
||||
protected $oMapper;
|
||||
|
||||
class ModuleFavourite extends Module {
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleFavourite_MapperFavourite
|
||||
*/
|
||||
protected $oMapper;
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
public function Init() {
|
||||
$this->oMapper=Engine::GetMapper(__CLASS__);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает информацию о том, найден ли таргет в избранном или нет
|
||||
*
|
||||
* @param string $sTargetId
|
||||
* @param string $sTargetType
|
||||
* @param string $sUserId
|
||||
* @param int $sTargetId ID владельца
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return ModuleFavourite_EntityFavourite|null
|
||||
*/
|
||||
public function GetFavourite($sTargetId,$sTargetType,$sUserId) {
|
||||
if (!is_numeric($sTargetId) or !is_string($sTargetType)) {
|
||||
return null;
|
||||
}
|
||||
$data=$this->GetFavouritesByArray($sTargetId,$sTargetType,$sUserId);
|
||||
return (isset($data[$sTargetId]))
|
||||
? $data[$sTargetId]
|
||||
: null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список избранного по списку айдишников
|
||||
*
|
||||
* @param array $aTargetId
|
||||
* @param string $sTargetType
|
||||
* @param string $sUserId
|
||||
* @param array $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouritesByArray($aTargetId,$sTargetType,$sUserId) {
|
||||
if (!$aTargetId) {
|
||||
return array();
|
||||
}
|
||||
}
|
||||
if (Config::Get('sys.cache.solid')) {
|
||||
return $this->GetFavouritesByArraySolid($aTargetId,$sTargetType,$sUserId);
|
||||
}
|
||||
|
@ -70,25 +78,25 @@ class ModuleFavourite extends Module {
|
|||
* Делаем мульти-запрос к кешу
|
||||
*/
|
||||
$aCacheKeys=func_build_cache_keys($aTargetId,"favourite_{$sTargetType}_",'_'.$sUserId);
|
||||
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
|
||||
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
|
||||
/**
|
||||
* проверяем что досталось из кеша
|
||||
*/
|
||||
foreach ($aCacheKeys as $sValue => $sKey ) {
|
||||
if (array_key_exists($sKey,$data)) {
|
||||
if (array_key_exists($sKey,$data)) {
|
||||
if ($data[$sKey]) {
|
||||
$aFavourite[$data[$sKey]->getTargetId()]=$data[$sKey];
|
||||
} else {
|
||||
$aIdNotNeedQuery[]=$sValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Смотрим чего не было в кеше и делаем запрос в БД
|
||||
*/
|
||||
$aIdNeedQuery=array_diff($aTargetId,array_keys($aFavourite));
|
||||
$aIdNeedQuery=array_diff($aIdNeedQuery,$aIdNotNeedQuery);
|
||||
*/
|
||||
$aIdNeedQuery=array_diff($aTargetId,array_keys($aFavourite));
|
||||
$aIdNeedQuery=array_diff($aIdNeedQuery,$aIdNotNeedQuery);
|
||||
$aIdNeedStore=$aIdNeedQuery;
|
||||
if ($data = $this->oMapper->GetFavouritesByArray($aIdNeedQuery,$sTargetType,$sUserId)) {
|
||||
foreach ($data as $oFavourite) {
|
||||
|
@ -105,193 +113,191 @@ class ModuleFavourite extends Module {
|
|||
*/
|
||||
foreach ($aIdNeedStore as $sId) {
|
||||
$this->Cache_Set(null, "favourite_{$sTargetType}_{$sId}_{$sUserId}", array(), 60*60*24*7);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Сортируем результат согласно входящему массиву
|
||||
*/
|
||||
$aFavourite=func_array_sort_by_keys($aFavourite,$aTargetId);
|
||||
return $aFavourite;
|
||||
return $aFavourite;
|
||||
}
|
||||
/**
|
||||
* Получить список избранного по списку айдишников, но используя единый кеш
|
||||
*
|
||||
* @param array $aTargetId
|
||||
* @param string $sTargetType
|
||||
* @param string $sUserId
|
||||
* @param array $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouritesByArraySolid($aTargetId,$sTargetType,$sUserId) {
|
||||
if (!is_array($aTargetId)) {
|
||||
$aTargetId=array($aTargetId);
|
||||
}
|
||||
$aTargetId=array_unique($aTargetId);
|
||||
$aFavourites=array();
|
||||
$s=join(',',$aTargetId);
|
||||
if (false === ($data = $this->Cache_Get("favourite_{$sTargetType}_{$sUserId}_id_{$s}"))) {
|
||||
$aTargetId=array_unique($aTargetId);
|
||||
$aFavourites=array();
|
||||
$s=join(',',$aTargetId);
|
||||
if (false === ($data = $this->Cache_Get("favourite_{$sTargetType}_{$sUserId}_id_{$s}"))) {
|
||||
$data = $this->oMapper->GetFavouritesByArray($aTargetId,$sTargetType,$sUserId);
|
||||
foreach ($data as $oFavourite) {
|
||||
$aFavourites[$oFavourite->getTargetId()]=$oFavourite;
|
||||
}
|
||||
$this->Cache_Set($aFavourites, "favourite_{$sTargetType}_{$sUserId}_id_{$s}", array("favourite_{$sTargetType}_change_user_{$sUserId}"), 60*60*24*1);
|
||||
return $aFavourites;
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает список таргеов из избранного
|
||||
* Получает список таргетов из избранного
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param string $sTargetType
|
||||
* @param int $iCount
|
||||
* @param int $iCurrPage
|
||||
* @param int $iPerPage
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @param array $aExcludeTarget Список ID владельцев для исклчения
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouritesByUserId($sUserId,$sTargetType,$iCurrPage,$iPerPage,$aExcludeTarget=array()) {
|
||||
public function GetFavouritesByUserId($sUserId,$sTargetType,$iCurrPage,$iPerPage,$aExcludeTarget=array()) {
|
||||
$s=serialize($aExcludeTarget);
|
||||
if (false === ($data = $this->Cache_Get("{$sTargetType}_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_{$s}"))) {
|
||||
if (false === ($data = $this->Cache_Get("{$sTargetType}_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_{$s}"))) {
|
||||
$data = array(
|
||||
'collection' => $this->oMapper->GetFavouritesByUserId($sUserId,$sTargetType,$iCount,$iCurrPage,$iPerPage,$aExcludeTarget),
|
||||
'count' => $iCount
|
||||
);
|
||||
$this->Cache_Set(
|
||||
$data,
|
||||
"{$sTargetType}_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_{$s}",
|
||||
$data,
|
||||
"{$sTargetType}_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_{$s}",
|
||||
array(
|
||||
"favourite_{$sTargetType}_change",
|
||||
"favourite_{$sTargetType}_change_user_{$sUserId}"
|
||||
),
|
||||
),
|
||||
60*60*24*1
|
||||
);
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
/**
|
||||
* Возвращает число таргетов определенного типа в избранном по ID пользователя
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param string $sTargetType
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param array $aExcludeTarget Список ID владельцев для исклчения
|
||||
* @return array
|
||||
*/
|
||||
public function GetCountFavouritesByUserId($sUserId,$sTargetType,$aExcludeTarget=array()) {
|
||||
$s=serialize($aExcludeTarget);
|
||||
if (false === ($data = $this->Cache_Get("{$sTargetType}_count_favourite_user_{$sUserId}_{$s}"))) {
|
||||
if (false === ($data = $this->Cache_Get("{$sTargetType}_count_favourite_user_{$sUserId}_{$s}"))) {
|
||||
$data = $this->oMapper->GetCountFavouritesByUserId($sUserId,$sTargetType,$aExcludeTarget);
|
||||
$this->Cache_Set(
|
||||
$data,
|
||||
"{$sTargetType}_count_favourite_user_{$sUserId}_{$s}",
|
||||
$data,
|
||||
"{$sTargetType}_count_favourite_user_{$sUserId}_{$s}",
|
||||
array(
|
||||
"favourite_{$sTargetType}_change",
|
||||
"favourite_{$sTargetType}_change_user_{$sUserId}"
|
||||
),
|
||||
),
|
||||
60*60*24*1
|
||||
);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает список комментариев к записям открытых блогов
|
||||
* Получает список комментариев к записям открытых блогов
|
||||
* из избранного указанного пользователя
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $iCurrPage
|
||||
* @param int $iPerPage
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouriteOpenCommentsByUserId($sUserId,$iCurrPage,$iPerPage) {
|
||||
if (false === ($data = $this->Cache_Get("comment_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open"))) {
|
||||
public function GetFavouriteOpenCommentsByUserId($sUserId,$iCurrPage,$iPerPage) {
|
||||
if (false === ($data = $this->Cache_Get("comment_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open"))) {
|
||||
$data = array(
|
||||
'collection' => $this->oMapper->GetFavouriteOpenCommentsByUserId($sUserId,$iCount,$iCurrPage,$iPerPage),
|
||||
'count' => $iCount
|
||||
);
|
||||
$this->Cache_Set(
|
||||
$data,
|
||||
"comment_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open",
|
||||
$data,
|
||||
"comment_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open",
|
||||
array(
|
||||
"favourite_comment_change",
|
||||
"favourite_comment_change_user_{$sUserId}"
|
||||
),
|
||||
60*60*24*1
|
||||
);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
/**
|
||||
* Возвращает число комментариев к открытым блогам в избранном по ID пользователя
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @return array
|
||||
*/
|
||||
public function GetCountFavouriteOpenCommentsByUserId($sUserId) {
|
||||
if (false === ($data = $this->Cache_Get("comment_count_favourite_user_{$sUserId}_open"))) {
|
||||
$data = $this->oMapper->GetCountFavouriteOpenCommentsByUserId($sUserId);
|
||||
$this->Cache_Set(
|
||||
$data,
|
||||
"comment_count_favourite_user_{$sUserId}_open",
|
||||
array(
|
||||
"favourite_comment_change",
|
||||
"favourite_comment_change_user_{$sUserId}"
|
||||
),
|
||||
),
|
||||
60*60*24*1
|
||||
);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Получает список топиков из открытых блогов
|
||||
* из избранного указанного пользователя
|
||||
* Возвращает число комментариев к открытым блогам в избранном по ID пользователя
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $iCurrPage
|
||||
* @param int $iPerPage
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouriteOpenTopicsByUserId($sUserId,$iCurrPage,$iPerPage) {
|
||||
if (false === ($data = $this->Cache_Get("topic_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open"))) {
|
||||
public function GetCountFavouriteOpenCommentsByUserId($sUserId) {
|
||||
if (false === ($data = $this->Cache_Get("comment_count_favourite_user_{$sUserId}_open"))) {
|
||||
$data = $this->oMapper->GetCountFavouriteOpenCommentsByUserId($sUserId);
|
||||
$this->Cache_Set(
|
||||
$data,
|
||||
"comment_count_favourite_user_{$sUserId}_open",
|
||||
array(
|
||||
"favourite_comment_change",
|
||||
"favourite_comment_change_user_{$sUserId}"
|
||||
),
|
||||
60*60*24*1
|
||||
);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
/**
|
||||
* Получает список топиков из открытых блогов
|
||||
* из избранного указанного пользователя
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouriteOpenTopicsByUserId($sUserId,$iCurrPage,$iPerPage) {
|
||||
if (false === ($data = $this->Cache_Get("topic_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open"))) {
|
||||
$data = array(
|
||||
'collection' => $this->oMapper->GetFavouriteOpenTopicsByUserId($sUserId,$iCount,$iCurrPage,$iPerPage),
|
||||
'count' => $iCount
|
||||
);
|
||||
$this->Cache_Set(
|
||||
$data,
|
||||
"topic_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open",
|
||||
$data,
|
||||
"topic_favourite_user_{$sUserId}_{$iCurrPage}_{$iPerPage}_open",
|
||||
array(
|
||||
"favourite_topic_change",
|
||||
"favourite_topic_change_user_{$sUserId}"
|
||||
),
|
||||
60*60*24*1
|
||||
);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
/**
|
||||
* Возвращает число топиков в открытых блогах
|
||||
* из избранного по ID пользователя
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @return array
|
||||
*/
|
||||
public function GetCountFavouriteOpenTopicsByUserId($sUserId) {
|
||||
if (false === ($data = $this->Cache_Get("topic_count_favourite_user_{$sUserId}_open"))) {
|
||||
$data = $this->oMapper->GetCountFavouriteOpenTopicsByUserId($sUserId);
|
||||
$this->Cache_Set(
|
||||
$data,
|
||||
"topic_count_favourite_user_{$sUserId}_open",
|
||||
array(
|
||||
"favourite_topic_change",
|
||||
"favourite_topic_change_user_{$sUserId}"
|
||||
),
|
||||
),
|
||||
60*60*24*1
|
||||
);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Возвращает число топиков в открытых блогах из избранного по ID пользователя
|
||||
*
|
||||
* @param string $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetCountFavouriteOpenTopicsByUserId($sUserId) {
|
||||
if (false === ($data = $this->Cache_Get("topic_count_favourite_user_{$sUserId}_open"))) {
|
||||
$data = $this->oMapper->GetCountFavouriteOpenTopicsByUserId($sUserId);
|
||||
$this->Cache_Set(
|
||||
$data,
|
||||
"topic_count_favourite_user_{$sUserId}_open",
|
||||
array(
|
||||
"favourite_topic_change",
|
||||
"favourite_topic_change_user_{$sUserId}"
|
||||
),
|
||||
60*60*24*1
|
||||
);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
/**
|
||||
* Добавляет таргет в избранное
|
||||
*
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite Объект избранного
|
||||
* @return bool
|
||||
*/
|
||||
public function AddFavourite(ModuleFavourite_EntityFavourite $oFavourite) {
|
||||
|
@ -300,15 +306,15 @@ class ModuleFavourite extends Module {
|
|||
}
|
||||
$this->SetFavouriteTags($oFavourite);
|
||||
//чистим зависимые кеши
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("favourite_{$oFavourite->getTargetType()}_change_user_{$oFavourite->getUserId()}"));
|
||||
$this->Cache_Delete("favourite_{$oFavourite->getTargetType()}_{$oFavourite->getTargetId()}_{$oFavourite->getUserId()}");
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("favourite_{$oFavourite->getTargetType()}_change_user_{$oFavourite->getUserId()}"));
|
||||
$this->Cache_Delete("favourite_{$oFavourite->getTargetType()}_{$oFavourite->getTargetId()}_{$oFavourite->getUserId()}");
|
||||
return $this->oMapper->AddFavourite($oFavourite);
|
||||
}
|
||||
/**
|
||||
* Обновляет запись об избранном
|
||||
*
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite
|
||||
* @return mixed
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite Объект избранного
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateFavourite(ModuleFavourite_EntityFavourite $oFavourite) {
|
||||
if (!$oFavourite->getTags()) {
|
||||
|
@ -322,7 +328,8 @@ class ModuleFavourite extends Module {
|
|||
/**
|
||||
* Устанавливает список тегов для избранного
|
||||
*
|
||||
* @param $oFavourite
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite Объект избранного
|
||||
* @param bool $bAddNew Добавлять новые теги или нет
|
||||
*/
|
||||
public function SetFavouriteTags($oFavourite,$bAddNew=true) {
|
||||
/**
|
||||
|
@ -358,7 +365,7 @@ class ModuleFavourite extends Module {
|
|||
/**
|
||||
* Удаляет таргет из избранного
|
||||
*
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite Объект избранного
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteFavourite(ModuleFavourite_EntityFavourite $oFavourite) {
|
||||
|
@ -371,22 +378,22 @@ class ModuleFavourite extends Module {
|
|||
/**
|
||||
* Меняет параметры публикации у таргета
|
||||
*
|
||||
* @param string $sTargetId
|
||||
* @param string $sTargetType
|
||||
* @param string $iPublish
|
||||
* @param array|int $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iPublish Флаг публикации
|
||||
* @return bool
|
||||
*/
|
||||
public function SetFavouriteTargetPublish($aTargetId,$sTargetType,$iPublish) {
|
||||
if(!is_array($aTargetId)) $aTargetId = array($aTargetId);
|
||||
|
||||
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("favourite_{$sTargetType}_change"));
|
||||
return $this->oMapper->SetFavouriteTargetPublish($aTargetId,$sTargetType,$iPublish);
|
||||
}
|
||||
/**
|
||||
* Удаляет избранное по списку идентификаторов таргетов
|
||||
*
|
||||
* @param array|int $aTargetId
|
||||
* @param string $sTargetType
|
||||
* @param array|int $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteFavouriteByTargetId($aTargetId, $sTargetType) {
|
||||
|
@ -396,14 +403,14 @@ class ModuleFavourite extends Module {
|
|||
*/
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("favourite_{$sTargetType}_change"));
|
||||
$this->DeleteTagByTarget($aTargetId,$sTargetType);
|
||||
return $this->oMapper->DeleteFavouriteByTargetId($aTargetId,$sTargetType);
|
||||
return $this->oMapper->DeleteFavouriteByTargetId($aTargetId,$sTargetType);
|
||||
}
|
||||
/**
|
||||
* Удаление тегов по таргету
|
||||
*
|
||||
* @param $aTargetId
|
||||
* @param $sTargetType
|
||||
* @return mixed
|
||||
* @param array $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTagByTarget($aTargetId,$sTargetType) {
|
||||
return $this->oMapper->DeleteTagByTarget($aTargetId,$sTargetType);
|
||||
|
@ -411,9 +418,9 @@ class ModuleFavourite extends Module {
|
|||
/**
|
||||
* Возвращает список тегов для объекта избранного
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param $iTargetId
|
||||
* @return bool | array
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iTargetId ID владельца
|
||||
* @return bool|array
|
||||
*/
|
||||
public function GetTagsTarget($sTargetType,$iTargetId) {
|
||||
$sMethod = 'GetTagsTarget'.func_camelize($sTargetType);
|
||||
|
@ -425,11 +432,11 @@ class ModuleFavourite extends Module {
|
|||
/**
|
||||
* Возвращает наиболее часто используемые теги
|
||||
*
|
||||
* @param $iUserId
|
||||
* @param $sTargetType
|
||||
* @param $bIsUser
|
||||
* @param $iLimit
|
||||
* @return mixed
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param bool $bIsUser Возвращает все теги ли только пользовательские
|
||||
* @param int $iLimit Количество элементов
|
||||
* @return array
|
||||
*/
|
||||
public function GetGroupTags($iUserId,$sTargetType,$bIsUser,$iLimit) {
|
||||
return $this->oMapper->GetGroupTags($iUserId,$sTargetType,$bIsUser,$iLimit);
|
||||
|
@ -437,10 +444,10 @@ class ModuleFavourite extends Module {
|
|||
/**
|
||||
* Возвращает список тегов по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
* @param $aOrder
|
||||
* @param $iCurrPage
|
||||
* @param $iPerPage
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetTags($aFilter,$aOrder,$iCurrPage,$iPerPage) {
|
||||
|
@ -448,9 +455,10 @@ class ModuleFavourite extends Module {
|
|||
}
|
||||
/**
|
||||
* Возвращает список тегов для топика, название метода формируется автоматически из GetTagsTarget()
|
||||
* @see GetTagsTarget
|
||||
*
|
||||
* @param $iTargetId
|
||||
* @return bool | array
|
||||
* @param int $iTargetId ID владельца
|
||||
* @return bool|array
|
||||
*/
|
||||
public function GetTagsTargetTopic($iTargetId) {
|
||||
if ($oTopic=$this->Topic_GetTopicById($iTargetId)) {
|
||||
|
|
|
@ -15,38 +15,88 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleFavourite_EntityFavourite extends Entity
|
||||
{
|
||||
public function getTargetId() {
|
||||
return $this->_getDataOne('target_id');
|
||||
}
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
public function getTargetPublish() {
|
||||
return $this->_getDataOne('target_publish');
|
||||
}
|
||||
public function getTargetType() {
|
||||
return $this->_getDataOne('target_type');
|
||||
}
|
||||
/**
|
||||
* Объект сущности избрнного
|
||||
*
|
||||
* @package modules.favourite
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleFavourite_EntityFavourite extends Entity {
|
||||
/**
|
||||
* Возвращает ID владельца
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTargetId() {
|
||||
return $this->_getDataOne('target_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает флаг публикации владельца
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTargetPublish() {
|
||||
return $this->_getDataOne('target_publish');
|
||||
}
|
||||
/**
|
||||
* Возвращает тип владельца
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTargetType() {
|
||||
return $this->_getDataOne('target_type');
|
||||
}
|
||||
/**
|
||||
* Возващает список тегов
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTagsArray() {
|
||||
if ($this->getTags()) {
|
||||
return explode(',',$this->getTags());
|
||||
}
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID владельца
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTargetId($data) {
|
||||
$this->_aData['target_id']=$data;
|
||||
}
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
public function setTargetPublish($data) {
|
||||
$this->_aData['target_publish']=$data;
|
||||
}
|
||||
public function setTargetType($data) {
|
||||
$this->_aData['target_type']=$data;
|
||||
}
|
||||
$this->_aData['target_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус публикации для владельца
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTargetPublish($data) {
|
||||
$this->_aData['target_publish']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает тип владельца
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setTargetType($data) {
|
||||
$this->_aData['target_type']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,6 +15,12 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Объект сущности тега для избранного
|
||||
*
|
||||
* @package modules.favourite
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleFavourite_EntityTag extends Entity {
|
||||
|
||||
}
|
||||
|
|
|
@ -15,15 +15,26 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleFavourite_MapperFavourite extends Mapper {
|
||||
|
||||
/**
|
||||
* Объект маппера для работы с БД
|
||||
*
|
||||
* @package modules.favourite
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleFavourite_MapperFavourite extends Mapper {
|
||||
/**
|
||||
* Добавляет таргет в избранное
|
||||
*
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite Объект избранного
|
||||
* @return bool
|
||||
*/
|
||||
public function AddFavourite(ModuleFavourite_EntityFavourite $oFavourite) {
|
||||
$sql = "
|
||||
INSERT INTO ".Config::Get('db.table.favourite')."
|
||||
( target_id, target_type, user_id, tags )
|
||||
VALUES
|
||||
(?d, ?, ?d, ?)
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query(
|
||||
$sql,
|
||||
$oFavourite->getTargetId(),
|
||||
|
@ -32,10 +43,15 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
$oFavourite->getTags()
|
||||
)===0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет запись об избранном
|
||||
*
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite Объект избранного
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateFavourite(ModuleFavourite_EntityFavourite $oFavourite) {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.favourite')."
|
||||
|
@ -52,11 +68,18 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список избранного по списку айдишников
|
||||
*
|
||||
* @param array $aArrayId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouritesByArray($aArrayId,$sTargetType,$sUserId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
}
|
||||
}
|
||||
$sql = "SELECT *
|
||||
FROM ".Config::Get('db.table.favourite')."
|
||||
WHERE
|
||||
|
@ -70,10 +93,15 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
foreach ($aRows as $aRow) {
|
||||
$aFavourites[]=Engine::GetEntity('Favourite',$aRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aFavourites;
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Удаляет таргет из избранного
|
||||
*
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite Объект избранного
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteFavourite(ModuleFavourite_EntityFavourite $oFavourite) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.favourite')."
|
||||
|
@ -83,7 +111,7 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
target_id = ?d
|
||||
AND
|
||||
target_type = ?
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query(
|
||||
$sql,
|
||||
$oFavourite->getUserId(),
|
||||
|
@ -91,10 +119,15 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
$oFavourite->getTargetType()
|
||||
)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет теги
|
||||
*
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite Объект избранного
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTags($oFavourite) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.favourite_tag')."
|
||||
|
@ -115,7 +148,12 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет тег
|
||||
*
|
||||
* @param ModuleFavourite_EntityTag $oTag Объект тега
|
||||
* @return bool
|
||||
*/
|
||||
public function AddTag($oTag) {
|
||||
$sql = "
|
||||
INSERT INTO ".Config::Get('db.table.favourite_tag')."
|
||||
|
@ -133,7 +171,14 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Меняет параметры публикации у таргета
|
||||
*
|
||||
* @param array|int $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iPublish Флаг публикации
|
||||
* @return bool
|
||||
*/
|
||||
public function SetFavouriteTargetPublish($aTargetId,$sTargetType,$iPublish) {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.favourite')."
|
||||
|
@ -143,11 +188,21 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
target_id IN(?a)
|
||||
AND
|
||||
target_type = ?
|
||||
";
|
||||
return $this->oDb->query($sql,$iPublish,$aTargetId,$sTargetType);
|
||||
}
|
||||
|
||||
public function GetFavouritesByUserId($sUserId,$sTargetType,&$iCount,$iCurrPage,$iPerPage,$aExcludeTarget=array()) {
|
||||
";
|
||||
return $this->oDb->query($sql,$iPublish,$aTargetId,$sTargetType);
|
||||
}
|
||||
/**
|
||||
* Получает список таргетов из избранного
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iCount Возвращает количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @param array $aExcludeTarget Список ID владельцев для исклчения
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouritesByUserId($sUserId,$sTargetType,&$iCount,$iCurrPage,$iPerPage,$aExcludeTarget=array()) {
|
||||
$sql = "
|
||||
SELECT target_id
|
||||
FROM ".Config::Get('db.table.favourite')."
|
||||
|
@ -160,24 +215,31 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
{ AND target_id NOT IN (?a) }
|
||||
ORDER BY target_id DESC
|
||||
LIMIT ?d, ?d ";
|
||||
|
||||
$aFavourites=array();
|
||||
|
||||
$aFavourites=array();
|
||||
if ($aRows=$this->oDb->selectPage(
|
||||
$iCount,
|
||||
$sql,
|
||||
$sUserId,
|
||||
$sTargetType,
|
||||
(count($aExcludeTarget) ? $aExcludeTarget : DBSIMPLE_SKIP),
|
||||
($iCurrPage-1)*$iPerPage,
|
||||
$iPerPage
|
||||
$iCount,
|
||||
$sql,
|
||||
$sUserId,
|
||||
$sTargetType,
|
||||
(count($aExcludeTarget) ? $aExcludeTarget : DBSIMPLE_SKIP),
|
||||
($iCurrPage-1)*$iPerPage,
|
||||
$iPerPage
|
||||
)) {
|
||||
foreach ($aRows as $aFavourite) {
|
||||
$aFavourites[]=$aFavourite['target_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aFavourites;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает число таргетов определенного типа в избранном по ID пользователя
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param array $aExcludeTarget Список ID владельцев для исклчения
|
||||
* @return array
|
||||
*/
|
||||
public function GetCountFavouritesByUserId($sUserId,$sTargetType,$aExcludeTarget) {
|
||||
$sql = "SELECT
|
||||
count(target_id) as count
|
||||
|
@ -192,16 +254,25 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
{ AND target_id NOT IN (?a) }
|
||||
;";
|
||||
return ( $aRow=$this->oDb->selectRow(
|
||||
$sql,$sUserId,
|
||||
$sTargetType,
|
||||
(count($aExcludeTarget) ? $aExcludeTarget : DBSIMPLE_SKIP)
|
||||
)
|
||||
)
|
||||
? $aRow['count']
|
||||
: false;
|
||||
}
|
||||
|
||||
public function GetFavouriteOpenCommentsByUserId($sUserId,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$sql,$sUserId,
|
||||
$sTargetType,
|
||||
(count($aExcludeTarget) ? $aExcludeTarget : DBSIMPLE_SKIP)
|
||||
)
|
||||
)
|
||||
? $aRow['count']
|
||||
: false;
|
||||
}
|
||||
/**
|
||||
* Получает список комментариев к записям открытых блогов
|
||||
* из избранного указанного пользователя
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iCount Возвращает количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouriteOpenCommentsByUserId($sUserId,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$sql = "
|
||||
SELECT f.target_id
|
||||
FROM
|
||||
|
@ -225,19 +296,24 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
b.blog_type IN ('open', 'personal')
|
||||
ORDER BY target_id DESC
|
||||
LIMIT ?d, ?d ";
|
||||
|
||||
$aFavourites=array();
|
||||
|
||||
$aFavourites=array();
|
||||
if ($aRows=$this->oDb->selectPage(
|
||||
$iCount, $sql, $sUserId,
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
$iCount, $sql, $sUserId,
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)) {
|
||||
foreach ($aRows as $aFavourite) {
|
||||
$aFavourites[]=$aFavourite['target_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aFavourites;
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Возвращает число комментариев к открытым блогам в избранном по ID пользователя
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetCountFavouriteOpenCommentsByUserId($sUserId) {
|
||||
$sql = "SELECT
|
||||
count(f.target_id) as count
|
||||
|
@ -260,13 +336,22 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
t.blog_id = b.blog_id
|
||||
AND
|
||||
b.blog_type IN ('open', 'personal')
|
||||
;";
|
||||
;";
|
||||
return ( $aRow=$this->oDb->selectRow($sql,$sUserId) )
|
||||
? $aRow['count']
|
||||
: false;
|
||||
? $aRow['count']
|
||||
: false;
|
||||
}
|
||||
|
||||
public function GetFavouriteOpenTopicsByUserId($sUserId,&$iCount,$iCurrPage,$iPerPage) {
|
||||
/**
|
||||
* Получает список топиков из открытых блогов
|
||||
* из избранного указанного пользователя
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iCount Возвращает количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouriteOpenTopicsByUserId($sUserId,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$sql = "
|
||||
SELECT f.target_id
|
||||
FROM
|
||||
|
@ -287,19 +372,24 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
b.blog_type IN ('open', 'personal')
|
||||
ORDER BY target_id DESC
|
||||
LIMIT ?d, ?d ";
|
||||
|
||||
$aFavourites=array();
|
||||
|
||||
$aFavourites=array();
|
||||
if ($aRows=$this->oDb->selectPage(
|
||||
$iCount, $sql, $sUserId,
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
$iCount, $sql, $sUserId,
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)) {
|
||||
foreach ($aRows as $aFavourite) {
|
||||
$aFavourites[]=$aFavourite['target_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aFavourites;
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Возвращает число топиков в открытых блогах из избранного по ID пользователя
|
||||
*
|
||||
* @param string $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetCountFavouriteOpenTopicsByUserId($sUserId) {
|
||||
$sql = "SELECT
|
||||
count(f.target_id) as count
|
||||
|
@ -319,25 +409,37 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
t.blog_id = b.blog_id
|
||||
AND
|
||||
b.blog_type IN ('open', 'personal')
|
||||
;";
|
||||
;";
|
||||
return ( $aRow=$this->oDb->selectRow($sql,$sUserId) )
|
||||
? $aRow['count']
|
||||
: false;
|
||||
}
|
||||
|
||||
? $aRow['count']
|
||||
: false;
|
||||
}
|
||||
/**
|
||||
* Удаляет избранное по списку идентификаторов таргетов
|
||||
*
|
||||
* @param array|int $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteFavouriteByTargetId($aTargetId,$sTargetType) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.favourite')."
|
||||
WHERE
|
||||
target_id IN(?a)
|
||||
AND
|
||||
target_type = ? ";
|
||||
target_type = ? ";
|
||||
if ($this->oDb->query($sql,$aTargetId,$sTargetType)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаление тегов по таргету
|
||||
*
|
||||
* @param array $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTagByTarget($aTargetId,$sTargetType) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.favourite_tag')."
|
||||
|
@ -351,7 +453,15 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает наиболее часто используемые теги
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param bool $bIsUser Возвращает все теги ли только пользовательские
|
||||
* @param int $iLimit Количество элементов
|
||||
* @return array
|
||||
*/
|
||||
public function GetGroupTags($iUserId,$sTargetType,$bIsUser,$iLimit) {
|
||||
$sql = "SELECT
|
||||
text,
|
||||
|
@ -382,7 +492,16 @@ class ModuleFavourite_MapperFavourite extends Mapper {
|
|||
}
|
||||
return $aReturnSort;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список тегов по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCount Возвращает количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetTags($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$aOrderAllow=array('target_id','user_id','is_user');
|
||||
$sOrder='';
|
||||
|
|
|
@ -20,10 +20,22 @@
|
|||
* Терминология:
|
||||
* объект - который привязываем к гео-объекту
|
||||
* гео-объект - географический объект(страна/регион/город)
|
||||
*
|
||||
* @package modules.geo
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleGeo extends Module {
|
||||
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleGeo_MapperGeo
|
||||
*/
|
||||
protected $oMapper;
|
||||
/**
|
||||
* Объект текущего пользователя
|
||||
*
|
||||
* @var ModuleUser_EntityUser|null
|
||||
*/
|
||||
protected $oUserCurrent;
|
||||
/**
|
||||
* Список доступных типов объектов
|
||||
|
@ -44,26 +56,28 @@ class ModuleGeo extends Module {
|
|||
'region',
|
||||
'city',
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
public function Init() {
|
||||
$this->oMapper=Engine::GetMapper(__CLASS__);
|
||||
$this->oUserCurrent=$this->User_GetUserCurrent();
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список типов объектов для облаты
|
||||
* Возвращает список типов объектов
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function GetTargetTypes() {
|
||||
return $this->aTargetTypes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет в разрешенные новый тип
|
||||
* @param unknown_type $sTargetType
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param array $aParams Параметры
|
||||
* @return bool
|
||||
*/
|
||||
public function AddTargetType($sTargetType,$aParams=array()) {
|
||||
if (!array_key_exists($sTargetType,$this->aTargetTypes)) {
|
||||
|
@ -72,32 +86,30 @@ class ModuleGeo extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет разрешен ли данный тип
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function IsAllowTargetType($sTargetType) {
|
||||
return in_array($sTargetType,array_keys($this->aTargetTypes));
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет разрешен ли данный гео-тип
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param string $sGeoType Тип владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function IsAllowGeoType($sGeoType) {
|
||||
return in_array($sGeoType,$this->aGeoTypes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверка объекта
|
||||
*
|
||||
* @param string $sTargetType
|
||||
* @param int $iTargetId
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iTargetId ID владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function CheckTarget($sTargetType,$iTargetId) {
|
||||
if (!$this->IsAllowTargetType($sTargetType)) {
|
||||
|
@ -109,11 +121,10 @@ class ModuleGeo extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверка на возможность нескольких связей
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function IsAllowTargetMulti($sTargetType) {
|
||||
|
@ -124,12 +135,11 @@ class ModuleGeo extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет связь объекта с гео-объектом в БД
|
||||
*
|
||||
* @param $oTarget
|
||||
* @return ModuleGeo_EntityTarget | bool
|
||||
* @param ModuleGeo_EntityTarget $oTarget Объект связи с владельцем
|
||||
* @return ModuleGeo_EntityTarget|bool
|
||||
*/
|
||||
public function AddTarget($oTarget) {
|
||||
if ($this->oMapper->AddTarget($oTarget)) {
|
||||
|
@ -137,13 +147,12 @@ class ModuleGeo extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Создание связи
|
||||
*
|
||||
* @param $oGeoObject
|
||||
* @param $sTargetType
|
||||
* @param $iTargetId
|
||||
* @param ModuleGeo_EntityGeo $oGeoObject
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iTargetId ID владельца
|
||||
* @return bool|ModuleGeo_EntityTarget
|
||||
*/
|
||||
public function CreateTarget($oGeoObject,$sTargetType,$iTargetId) {
|
||||
|
@ -194,25 +203,23 @@ class ModuleGeo extends Module {
|
|||
}
|
||||
return $this->AddTarget($oTarget);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список связей по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
* @param $iCurrPage
|
||||
* @param $iPerPage
|
||||
* @return array
|
||||
* @param array $aFilter Фильтр
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetTargets($aFilter,$iCurrPage,$iPerPage) {
|
||||
return array('collection'=>$this->oMapper->GetTargets($aFilter,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает первый объект связи по объекту
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param $iTargetId
|
||||
* @return null
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iTargetId ID владельца
|
||||
* @return null|ModuleGeo_EntityTarget
|
||||
*/
|
||||
public function GetTargetByTarget($sTargetType,$iTargetId) {
|
||||
$aTargets=$this->GetTargets(array('target_type'=>$sTargetType,'target_id'=>$iTargetId),1,1);
|
||||
|
@ -224,8 +231,8 @@ class ModuleGeo extends Module {
|
|||
/**
|
||||
* Возвращает список связей для списка объектов одного типа.
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param $aTargetId
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param array $aTargetId Список ID владельцев
|
||||
* @return array В качестве ключей используется ID объекта, в качестве значений массив связей этого объекта
|
||||
*/
|
||||
public function GetTargetsByTargetArray($sTargetType,$aTargetId) {
|
||||
|
@ -247,68 +254,63 @@ class ModuleGeo extends Module {
|
|||
/**
|
||||
* Удаляет связи по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
* @return mixed
|
||||
* @param array $aFilter Фильтр
|
||||
* @return bool|int
|
||||
*/
|
||||
public function DeleteTargets($aFilter) {
|
||||
return $this->oMapper->DeleteTargets($aFilter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаление всех связей объекта
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param $iTargetId
|
||||
* @return mixed
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iTargetId ID владельца
|
||||
* @return bool|int
|
||||
*/
|
||||
public function DeleteTargetsByTarget($sTargetType,$iTargetId) {
|
||||
return $this->DeleteTargets(array('target_type'=>$sTargetType,'target_id'=>$iTargetId));
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список стран по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
* @param $aOrder
|
||||
* @param $iCurrPage
|
||||
* @param $iPerPage
|
||||
* @return array
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetCountries($aFilter,$aOrder,$iCurrPage,$iPerPage) {
|
||||
return array('collection'=>$this->oMapper->GetCountries($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список регионов по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
* @param $aOrder
|
||||
* @param $iCurrPage
|
||||
* @param $iPerPage
|
||||
* @return array
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetRegions($aFilter,$aOrder,$iCurrPage,$iPerPage) {
|
||||
return array('collection'=>$this->oMapper->GetRegions($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список городов по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
* @param $aOrder
|
||||
* @param $iCurrPage
|
||||
* @param $iPerPage
|
||||
* @return array
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetCities($aFilter,$aOrder,$iCurrPage,$iPerPage) {
|
||||
return array('collection'=>$this->oMapper->GetCities($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает страну по ID
|
||||
*
|
||||
* @param $iId
|
||||
* @return ModuleGeo_EntityCountry
|
||||
* @param int $iId ID страны
|
||||
* @return ModuleGeo_EntityCountry|null
|
||||
*/
|
||||
public function GetCountryById($iId) {
|
||||
$aRes=$this->GetCountries(array('id'=>$iId),array(),1,1);
|
||||
|
@ -317,12 +319,11 @@ class ModuleGeo extends Module {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает регион по ID
|
||||
*
|
||||
* @param $iId
|
||||
* @return ModuleGeo_EntityRegion
|
||||
* @param int $iId ID региона
|
||||
* @return ModuleGeo_EntityRegion|null
|
||||
*/
|
||||
public function GetRegionById($iId) {
|
||||
$aRes=$this->GetRegions(array('id'=>$iId),array(),1,1);
|
||||
|
@ -331,12 +332,11 @@ class ModuleGeo extends Module {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает регион по ID
|
||||
*
|
||||
* @param $iId
|
||||
* @return ModuleGeo_EntityCity
|
||||
* @param int $iId ID города
|
||||
* @return ModuleGeo_EntityCity|null
|
||||
*/
|
||||
public function GetCityById($iId) {
|
||||
$aRes=$this->GetCities(array('id'=>$iId),array(),1,1);
|
||||
|
@ -345,12 +345,12 @@ class ModuleGeo extends Module {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает гео-объект
|
||||
*
|
||||
* @param $sType
|
||||
* @param $iId
|
||||
* @param string $sType Тип гео-объекта
|
||||
* @param int $iId ID гео-объекта
|
||||
* @return ModuleGeo_EntityGeo|null
|
||||
*/
|
||||
public function GetGeoObject($sType,$iId) {
|
||||
$sType=strtolower($sType);
|
||||
|
@ -371,12 +371,11 @@ class ModuleGeo extends Module {
|
|||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает первый гео-объект для объекта
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param $iTargetId
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iTargetId ID владельца
|
||||
* @return ModuleGeo_EntityCity|ModuleGeo_EntityCountry|ModuleGeo_EntityRegion|null
|
||||
*/
|
||||
public function GetGeoObjectByTarget($sTargetType,$iTargetId) {
|
||||
|
@ -387,34 +386,32 @@ class ModuleGeo extends Module {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список стран сгруппированных по количеству использований в данном типе объектов
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param $iLimit
|
||||
* @return mixed
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iLimit Количество элементов
|
||||
* @return array
|
||||
*/
|
||||
public function GetGroupCountriesByTargetType($sTargetType,$iLimit) {
|
||||
return $this->oMapper->GetGroupCountriesByTargetType($sTargetType,$iLimit);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список городов сгруппированных по количеству использований в данном типе объектов
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param $iLimit
|
||||
* @return mixed
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iLimit Количество элементов
|
||||
* @return array
|
||||
*/
|
||||
public function GetGroupCitiesByTargetType($sTargetType,$iLimit) {
|
||||
return $this->oMapper->GetGroupCitiesByTargetType($sTargetType,$iLimit);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверка объекта с типом "user"
|
||||
* Название метода формируется автоматически
|
||||
*
|
||||
* @param int $iTargetId
|
||||
* @param int $iTargetId ID пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function CheckTargetUser($iTargetId) {
|
||||
if ($oUser=$this->User_GetUserById($iTargetId)) {
|
||||
|
@ -422,6 +419,5 @@ class ModuleGeo extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
|
@ -15,7 +15,13 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Объект сущности города
|
||||
*
|
||||
* @package modules.geo
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleGeo_EntityCity extends ModuleGeo_EntityGeo {
|
||||
|
||||
|
||||
}
|
||||
?>
|
|
@ -15,7 +15,13 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Объект сущности страны
|
||||
*
|
||||
* @package modules.geo
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleGeo_EntityCountry extends ModuleGeo_EntityGeo {
|
||||
|
||||
|
||||
}
|
||||
?>
|
|
@ -15,6 +15,12 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Объект сущности гео-объекта
|
||||
*
|
||||
* @package modules.geo
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleGeo_EntityGeo extends Entity {
|
||||
|
||||
/**
|
||||
|
@ -39,7 +45,6 @@ class ModuleGeo_EntityGeo extends Entity {
|
|||
}
|
||||
return $sName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает тип гео-объекта
|
||||
*
|
||||
|
@ -55,7 +60,6 @@ class ModuleGeo_EntityGeo extends Entity {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает гео-объект страны
|
||||
*
|
||||
|
@ -74,7 +78,6 @@ class ModuleGeo_EntityGeo extends Entity {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает гео-объект региона
|
||||
*
|
||||
|
@ -93,7 +96,6 @@ class ModuleGeo_EntityGeo extends Entity {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает гео-объект города
|
||||
*
|
||||
|
@ -112,6 +114,5 @@ class ModuleGeo_EntityGeo extends Entity {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
|
@ -15,7 +15,13 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Объект сущности региона
|
||||
*
|
||||
* @package modules.geo
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleGeo_EntityRegion extends ModuleGeo_EntityGeo {
|
||||
|
||||
|
||||
}
|
||||
?>
|
|
@ -15,6 +15,12 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Объект связи гео-объекта с владельцем
|
||||
*
|
||||
* @package modules.geo
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleGeo_EntityTarget extends Entity {
|
||||
|
||||
}
|
||||
|
|
|
@ -15,16 +15,35 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Объект маппера для работы с БД
|
||||
*
|
||||
* @package modules.geo
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleGeo_MapperGeo extends Mapper {
|
||||
|
||||
/**
|
||||
* Добавляет связь объекта с гео-объектом в БД
|
||||
*
|
||||
* @param ModuleGeo_EntityTarget $oTarget Объект связи с владельцем
|
||||
* @return ModuleGeo_EntityTarget|bool
|
||||
*/
|
||||
public function AddTarget($oTarget) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.geo_target')." SET ?a ";
|
||||
if ($this->oDb->query($sql,$oTarget->_getData())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список связей по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param int $iCount Возвращает количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetTargets($aFilter,&$iCount,$iCurrPage,$iPerPage) {
|
||||
if (isset($aFilter['target_id']) and !is_array($aFilter['target_id'])) {
|
||||
$aFilter['target_id']=array($aFilter['target_id']);
|
||||
|
@ -64,7 +83,13 @@ class ModuleGeo_MapperGeo extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список стран сгруппированных по количеству использований в данном типе объектов
|
||||
*
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iLimit Количество элементов
|
||||
* @return array
|
||||
*/
|
||||
public function GetGroupCountriesByTargetType($sTargetType,$iLimit) {
|
||||
$sql = "
|
||||
SELECT
|
||||
|
@ -90,7 +115,13 @@ class ModuleGeo_MapperGeo extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список городов сгруппированных по количеству использований в данном типе объектов
|
||||
*
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $iLimit Количество элементов
|
||||
* @return array
|
||||
*/
|
||||
public function GetGroupCitiesByTargetType($sTargetType,$iLimit) {
|
||||
$sql = "
|
||||
SELECT
|
||||
|
@ -116,7 +147,12 @@ class ModuleGeo_MapperGeo extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет связи по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @return bool|int
|
||||
*/
|
||||
public function DeleteTargets($aFilter) {
|
||||
if (!$aFilter) {
|
||||
return false;
|
||||
|
@ -144,7 +180,16 @@ class ModuleGeo_MapperGeo extends Mapper {
|
|||
isset($aFilter['city_id']) ? $aFilter['city_id'] : DBSIMPLE_SKIP
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список стран по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCount Возвращает количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetCountries($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$aOrderAllow=array('id','name_ru','name_en','sort');
|
||||
$sOrder='';
|
||||
|
@ -192,7 +237,16 @@ class ModuleGeo_MapperGeo extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список стран по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCount Возвращает количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetRegions($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$aOrderAllow=array('id','name_ru','name_en','sort','country_id');
|
||||
$sOrder='';
|
||||
|
@ -244,7 +298,16 @@ class ModuleGeo_MapperGeo extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список стран по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCount Возвращает количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetCities($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$aOrderAllow=array('id','name_ru','name_en','sort','country_id','region_id');
|
||||
$sOrder='';
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
/**
|
||||
* Модуль рассылок уведомлений пользователям
|
||||
*
|
||||
* @package modules.notify
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleNotify extends Module {
|
||||
/**
|
||||
|
@ -32,598 +34,328 @@ class ModuleNotify extends Module {
|
|||
protected $oViewerLocal=null;
|
||||
/**
|
||||
* Массив заданий на удаленную публикацию
|
||||
*
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aTask=array();
|
||||
/**
|
||||
* Меппер
|
||||
* Объект маппера
|
||||
*
|
||||
* @var Mapper_Notify
|
||||
* @var ModuleNotify_MapperNotify
|
||||
*/
|
||||
protected $oMapper=null;
|
||||
|
||||
/**
|
||||
* Инициализация модуля
|
||||
* Создаём локальный экземпляр модуля Viewer
|
||||
* Момент довольно спорный, но позволяет избавить основной шаблон от мусора уведомлений
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
if (!class_exists('ModuleViewer')) {
|
||||
require_once(Config::Get('path.root.engine')."/modules/viewer/Viewer.class.php");
|
||||
}
|
||||
public function Init() {
|
||||
$this->oViewerLocal=$this->Viewer_GetLocalViewer();
|
||||
$this->oMapper=Engine::GetMapper(__CLASS__);
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет юзеру уведомление о новом комментарии в его топике
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUserTo
|
||||
* @param ModuleTopic_EntityTopic $oTopic
|
||||
* @param CommentEntity_TopicComment $oComment
|
||||
* @param ModuleUser_EntityUser $oUserComment
|
||||
* @param ModuleUser_EntityUser $oUserTo Объект пользователя кому отправляем
|
||||
* @param ModuleTopic_EntityTopic $oTopic Объект топика
|
||||
* @param ModuleComment_EntityComment $oComment Объект комментария
|
||||
* @param ModuleUser_EntityUser $oUserComment Объект пользователя, написавшего комментарий
|
||||
* @return bool
|
||||
*/
|
||||
public function SendCommentNewToAuthorTopic(ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleComment_EntityComment $oComment, ModuleUser_EntityUser $oUserComment) {
|
||||
/**
|
||||
* Проверяем можно ли юзеру рассылать уведомление
|
||||
*/
|
||||
if (!$oUserTo->getSettingsNoticeNewComment()) {
|
||||
return ;
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUserTo',$oUserTo);
|
||||
$this->oViewerLocal->Assign('oTopic',$oTopic);
|
||||
$this->oViewerLocal->Assign('oComment',$oComment);
|
||||
$this->oViewerLocal->Assign('oUserComment',$oUserComment);
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath('notify.comment_new.tpl'));
|
||||
|
||||
/**
|
||||
* Если в конфигураторе указан отложенный метод отправки,
|
||||
* то добавляем задание в массив. В противном случае,
|
||||
* сразу отсылаем на email
|
||||
*/
|
||||
if(Config::Get('module.notify.delayed')) {
|
||||
$oNotifyTask=Engine::GetEntity(
|
||||
'Notify_Task',
|
||||
array(
|
||||
'user_mail' => $oUserTo->getMail(),
|
||||
'user_login' => $oUserTo->getLogin(),
|
||||
'notify_text' => $sBody,
|
||||
'notify_subject' => $this->Lang_Get('notify_subject_comment_new'),
|
||||
'date_created' => date("Y-m-d H:i:s"),
|
||||
'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL,
|
||||
)
|
||||
);
|
||||
if(Config::Get('module.notify.insert_single')) {
|
||||
$this->aTask[] = $oNotifyTask;
|
||||
} else {
|
||||
$this->oMapper->AddTask($oNotifyTask);
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($oUserTo->getMail(),$oUserTo->getLogin());
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_comment_new'));
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
}
|
||||
$this->Send(
|
||||
$oUserTo,
|
||||
'notify.comment_new.tpl',
|
||||
$this->Lang_Get('notify_subject_comment_new'),
|
||||
array(
|
||||
'oUserTo' => $oUserTo,
|
||||
'oTopic' => $oTopic,
|
||||
'oComment' => $oComment,
|
||||
'oUserComment' => $oUserComment,
|
||||
)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет юзеру уведомление об ответе на его комментарий
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUserTo
|
||||
* @param ModuleTopic_EntityTopic $oTopic
|
||||
* @param CommentEntity_TopicComment $oComment
|
||||
* @param ModuleUser_EntityUser $oUserComment
|
||||
* @param ModuleUser_EntityUser $oUserTo Объект пользователя кому отправляем
|
||||
* @param ModuleTopic_EntityTopic $oTopic Объект топика
|
||||
* @param ModuleComment_EntityComment $oComment Объект комментария
|
||||
* @param ModuleUser_EntityUser $oUserComment Объект пользователя, написавшего комментарий
|
||||
* @return bool
|
||||
*/
|
||||
public function SendCommentReplyToAuthorParentComment(ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleComment_EntityComment $oComment, ModuleUser_EntityUser $oUserComment) {
|
||||
/**
|
||||
* Проверяем можно ли юзеру рассылать уведомление
|
||||
*/
|
||||
if (!$oUserTo->getSettingsNoticeReplyComment()) {
|
||||
return ;
|
||||
}
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUserTo',$oUserTo);
|
||||
$this->oViewerLocal->Assign('oTopic',$oTopic);
|
||||
$this->oViewerLocal->Assign('oComment',$oComment);
|
||||
$this->oViewerLocal->Assign('oUserComment',$oUserComment);
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath('notify.comment_reply.tpl'));
|
||||
/**
|
||||
* Если в конфигураторе указан отложенный метод отправки,
|
||||
* то добавляем задание в массив. В противном случае,
|
||||
* сразу отсылаем на email
|
||||
*/
|
||||
if(Config::Get('module.notify.delayed')) {
|
||||
$oNotifyTask=Engine::GetEntity(
|
||||
'Notify_Task',
|
||||
array(
|
||||
'user_mail' => $oUserTo->getMail(),
|
||||
'user_login' => $oUserTo->getLogin(),
|
||||
'notify_text' => $sBody,
|
||||
'notify_subject' => $this->Lang_Get('notify_subject_comment_reply'),
|
||||
'date_created' => date("Y-m-d H:i:s"),
|
||||
'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL,
|
||||
)
|
||||
);
|
||||
if(Config::Get('module.notify.insert_single')) {
|
||||
$this->aTask[] = $oNotifyTask;
|
||||
} else {
|
||||
$this->oMapper->AddTask($oNotifyTask);
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($oUserTo->getMail(),$oUserTo->getLogin());
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_comment_reply'));
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
return false;
|
||||
}
|
||||
$this->Send(
|
||||
$oUserTo,
|
||||
'notify.comment_reply.tpl',
|
||||
$this->Lang_Get('notify_subject_comment_reply'),
|
||||
array(
|
||||
'oUserTo' => $oUserTo,
|
||||
'oTopic' => $oTopic,
|
||||
'oComment' => $oComment,
|
||||
'oUserComment' => $oUserComment,
|
||||
)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет юзеру уведомление о новом топике в блоге, в котором он состоит
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUserTo
|
||||
* @param ModuleTopic_EntityTopic $oTopic
|
||||
* @param ModuleBlog_EntityBlog $oBlog
|
||||
* @param ModuleUser_EntityUser $oUserTopic
|
||||
* @param ModuleUser_EntityUser $oUserTo Объект пользователя кому отправляем
|
||||
* @param ModuleTopic_EntityTopic $oTopic Объект топика
|
||||
* @param ModuleBlog_EntityBlog $oBlog Объект блога
|
||||
* @param ModuleUser_EntityUser $oUserTopic Объект пользователя, написавшего топик
|
||||
* @return bool
|
||||
*/
|
||||
public function SendTopicNewToSubscribeBlog(ModuleUser_EntityUser $oUserTo, ModuleTopic_EntityTopic $oTopic, ModuleBlog_EntityBlog $oBlog, ModuleUser_EntityUser $oUserTopic) {
|
||||
/**
|
||||
* Проверяем можно ли юзеру рассылать уведомление
|
||||
*/
|
||||
if (!$oUserTo->getSettingsNoticeNewTopic()) {
|
||||
return ;
|
||||
}
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUserTo',$oUserTo);
|
||||
$this->oViewerLocal->Assign('oTopic',$oTopic);
|
||||
$this->oViewerLocal->Assign('oBlog',$oBlog);
|
||||
$this->oViewerLocal->Assign('oUserTopic',$oUserTopic);
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath('notify.topic_new.tpl'));
|
||||
/**
|
||||
* Если в конфигураторе указан отложенный метод отправки,
|
||||
* то добавляем задание в массив. В противном случае,
|
||||
* сразу отсылаем на email
|
||||
*/
|
||||
if(Config::Get('module.notify.delayed')) {
|
||||
$oNotifyTask=Engine::GetEntity(
|
||||
'Notify_Task',
|
||||
array(
|
||||
'user_mail' => $oUserTo->getMail(),
|
||||
'user_login' => $oUserTo->getLogin(),
|
||||
'notify_text' => $sBody,
|
||||
'notify_subject' => $this->Lang_Get('notify_subject_topic_new').' «'.htmlspecialchars($oBlog->getTitle()).'»',
|
||||
'date_created' => date("Y-m-d H:i:s"),
|
||||
'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL,
|
||||
)
|
||||
);
|
||||
if(Config::Get('module.notify.insert_single')) {
|
||||
$this->aTask[] = $oNotifyTask;
|
||||
} else {
|
||||
$this->oMapper->AddTask($oNotifyTask);
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($oUserTo->getMail(),$oUserTo->getLogin());
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_topic_new').' «'.htmlspecialchars($oBlog->getTitle()).'»');
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
return false;
|
||||
}
|
||||
$this->Send(
|
||||
$oUserTo,
|
||||
'notify.topic_new.tpl',
|
||||
$this->Lang_Get('notify_subject_topic_new').' «'.htmlspecialchars($oBlog->getTitle()).'»',
|
||||
array(
|
||||
'oUserTo' => $oUserTo,
|
||||
'oTopic' => $oTopic,
|
||||
'oBlog' => $oBlog,
|
||||
'oUserTopic' => $oUserTopic,
|
||||
)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* Отправляет уведомление с новым линком активации
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
*/
|
||||
public function SendReactivationCode(ModuleUser_EntityUser $oUser) {
|
||||
$this->Send(
|
||||
$oUser,
|
||||
'notify.reactivation.tpl',
|
||||
$this->Lang_Get('notify_subject_reactvation'),
|
||||
array(
|
||||
'oUser' => $oUser,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет уведомление при регистрации с активацией
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param string $sPassword
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @param string $sPassword Пароль пользователя
|
||||
*/
|
||||
public function SendRegistrationActivate(ModuleUser_EntityUser $oUser,$sPassword) {
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUser',$oUser);
|
||||
$this->oViewerLocal->Assign('sPassword',$sPassword);
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath('notify.registration_activate.tpl'));
|
||||
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($oUser->getMail(),$oUser->getLogin());
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_registration_activate'));
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
public function SendRegistrationActivate(ModuleUser_EntityUser $oUser,$sPassword) {
|
||||
$this->Send(
|
||||
$oUser,
|
||||
'notify.registration_activate.tpl',
|
||||
$this->Lang_Get('notify_subject_registration_activate'),
|
||||
array(
|
||||
'oUser' => $oUser,
|
||||
'sPassword' => $sPassword,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет уведомление о регистрации
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param string $sPassword
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @param string $sPassword Пароль пользователя
|
||||
*/
|
||||
public function SendRegistration(ModuleUser_EntityUser $oUser,$sPassword) {
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUser',$oUser);
|
||||
$this->oViewerLocal->Assign('sPassword',$sPassword);
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath('notify.registration.tpl'));
|
||||
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($oUser->getMail(),$oUser->getLogin());
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_registration'));
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
public function SendRegistration(ModuleUser_EntityUser $oUser,$sPassword) {
|
||||
$this->Send(
|
||||
$oUser,
|
||||
'notify.registration.tpl',
|
||||
$this->Lang_Get('notify_subject_registration'),
|
||||
array(
|
||||
'oUser' => $oUser,
|
||||
'sPassword' => $sPassword,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет инвайт
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUserFrom
|
||||
* @param string $sMailTo
|
||||
* @param ModuleUser_EntityInvite $oInvite
|
||||
* @param ModuleUser_EntityUser $oUserFrom Пароль пользователя, который отправляет инвайт
|
||||
* @param string $sMailTo Емайл на который отправляем инвайт
|
||||
* @param ModuleUser_EntityInvite $oInvite Объект инвайта
|
||||
*/
|
||||
public function SendInvite(ModuleUser_EntityUser $oUserFrom,$sMailTo,ModuleUser_EntityInvite $oInvite) {
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUserFrom',$oUserFrom);
|
||||
$this->oViewerLocal->Assign('sMailTo',$sMailTo);
|
||||
$this->oViewerLocal->Assign('oInvite',$oInvite);
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch('notify/'.$this->Lang_GetLang()."/notify.invite.tpl");
|
||||
/**
|
||||
* Если в конфигураторе указан отложенный метод отправки,
|
||||
* то добавляем задание в массив. В противном случае,
|
||||
* сразу отсылаем на email
|
||||
*/
|
||||
if(Config::Get('module.notify.delayed')) {
|
||||
$oNotifyTask=Engine::GetEntity(
|
||||
'Notify_Task',
|
||||
array(
|
||||
'user_mail' => $sMailTo,
|
||||
'user_login' => null,
|
||||
'notify_text' => $sBody,
|
||||
'notify_subject' => $this->Lang_Get('notify_subject_invite'),
|
||||
'date_created' => date("Y-m-d H:i:s"),
|
||||
'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL,
|
||||
)
|
||||
);
|
||||
if(Config::Get('module.notify.insert_single')) {
|
||||
$this->aTask[] = $oNotifyTask;
|
||||
} else {
|
||||
$this->oMapper->AddTask($oNotifyTask);
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($sMailTo);
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_invite'));
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
}
|
||||
public function SendInvite(ModuleUser_EntityUser $oUserFrom,$sMailTo,ModuleUser_EntityInvite $oInvite) {
|
||||
$this->Send(
|
||||
$sMailTo,
|
||||
'notify.invite.tpl',
|
||||
$this->Lang_Get('notify_subject_invite'),
|
||||
array(
|
||||
'sMailTo' => $sMailTo,
|
||||
'oUserFrom' => $oUserFrom,
|
||||
'oInvite' => $oInvite,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет уведомление при новом личном сообщении
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUserTo
|
||||
* @param ModuleUser_EntityUser $oUserFrom
|
||||
* @param ModuleTalk_EntityTalk $oTalk
|
||||
* @param ModuleUser_EntityUser $oUserTo Объект пользователя, которому отправляем сообщение
|
||||
* @param ModuleUser_EntityUser $oUserFrom Объект пользователя, который отправляет сообщение
|
||||
* @param ModuleTalk_EntityTalk $oTalk Объект сообщения
|
||||
* @return bool
|
||||
*/
|
||||
public function SendTalkNew(ModuleUser_EntityUser $oUserTo,ModuleUser_EntityUser $oUserFrom,ModuleTalk_EntityTalk $oTalk) {
|
||||
/**
|
||||
* Проверяем можно ли юзеру рассылать уведомление
|
||||
*/
|
||||
if (!$oUserTo->getSettingsNoticeNewTalk()) {
|
||||
return ;
|
||||
}
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUserTo',$oUserTo);
|
||||
$this->oViewerLocal->Assign('oUserFrom',$oUserFrom);
|
||||
$this->oViewerLocal->Assign('oTalk',$oTalk);
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath('notify.talk_new.tpl'));
|
||||
/**
|
||||
* Если в конфигураторе указан отложенный метод отправки,
|
||||
* то добавляем задание в массив. В противном случае,
|
||||
* сразу отсылаем на email
|
||||
*/
|
||||
if(Config::Get('module.notify.delayed')) {
|
||||
$oNotifyTask=Engine::GetEntity(
|
||||
'Notify_Task',
|
||||
array(
|
||||
'user_mail' => $oUserTo->getMail(),
|
||||
'user_login' => $oUserTo->getLogin(),
|
||||
'notify_text' => $sBody,
|
||||
'notify_subject' => $this->Lang_Get('notify_subject_talk_new'),
|
||||
'date_created' => date("Y-m-d H:i:s"),
|
||||
'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL,
|
||||
)
|
||||
);
|
||||
if(Config::Get('module.notify.insert_single')) {
|
||||
$this->aTask[] = $oNotifyTask;
|
||||
} else {
|
||||
$this->oMapper->AddTask($oNotifyTask);
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($oUserTo->getMail(),$oUserTo->getLogin());
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_talk_new'));
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
return false;
|
||||
}
|
||||
$this->Send(
|
||||
$oUserTo,
|
||||
'notify.talk_new.tpl',
|
||||
$this->Lang_Get('notify_subject_talk_new'),
|
||||
array(
|
||||
'oUserTo' => $oUserTo,
|
||||
'oUserFrom' => $oUserFrom,
|
||||
'oTalk' => $oTalk,
|
||||
)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет уведомление о новом сообщение в личке
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUserTo Объект пользователя, которому отправляем уведомление
|
||||
* @param ModuleUser_EntityUser $oUserFrom Объект пользователя, которыф написал комментарий
|
||||
* @param ModuleTalk_EntityTalk $oTalk Объект сообщения
|
||||
* @param ModuleComment_EntityComment $oTalkComment Объект комментария
|
||||
* @return bool
|
||||
*/
|
||||
public function SendTalkCommentNew(ModuleUser_EntityUser $oUserTo,ModuleUser_EntityUser $oUserFrom,ModuleTalk_EntityTalk $oTalk,ModuleComment_EntityComment $oTalkComment) {
|
||||
/**
|
||||
* Проверяем можно ли юзеру рассылать уведомление
|
||||
*/
|
||||
if (!$oUserTo->getSettingsNoticeNewTalk()) {
|
||||
return ;
|
||||
}
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUserTo',$oUserTo);
|
||||
$this->oViewerLocal->Assign('oUserFrom',$oUserFrom);
|
||||
$this->oViewerLocal->Assign('oTalk',$oTalk);
|
||||
$this->oViewerLocal->Assign('oTalkComment',$oTalkComment);
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath('notify.talk_comment_new.tpl'));
|
||||
/**
|
||||
* Если в конфигураторе указан отложенный метод отправки,
|
||||
* то добавляем задание в массив. В противном случае,
|
||||
* сразу отсылаем на email
|
||||
*/
|
||||
if(Config::Get('module.notify.delayed')) {
|
||||
$oNotifyTask=Engine::GetEntity(
|
||||
'Notify_Task',
|
||||
array(
|
||||
'user_mail' => $oUserTo->getMail(),
|
||||
'user_login' => $oUserTo->getLogin(),
|
||||
'notify_text' => $sBody,
|
||||
'notify_subject' => $this->Lang_Get('notify_subject_talk_comment_new'),
|
||||
'date_created' => date("Y-m-d H:i:s"),
|
||||
'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL,
|
||||
)
|
||||
);
|
||||
if(Config::Get('module.notify.insert_single')) {
|
||||
$this->aTask[] = $oNotifyTask;
|
||||
} else {
|
||||
$this->oMapper->AddTask($oNotifyTask);
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($oUserTo->getMail(),$oUserTo->getLogin());
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_talk_comment_new'));
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
return false;
|
||||
}
|
||||
$this->Send(
|
||||
$oUserTo,
|
||||
'notify.talk_comment_new.tpl',
|
||||
$this->Lang_Get('notify_subject_talk_comment_new'),
|
||||
array(
|
||||
'oUserTo' => $oUserTo,
|
||||
'oUserFrom' => $oUserFrom,
|
||||
'oTalk' => $oTalk,
|
||||
'oTalkComment' => $oTalkComment,
|
||||
)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет пользователю сообщение о добавлении его в друзья
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUserTo
|
||||
* @param ModuleUser_EntityUser $oUserFrom
|
||||
* @param ModuleUser_EntityUser $oUserTo Объект пользователя
|
||||
* @param ModuleUser_EntityUser $oUserFrom Объект пользователя, которого добавляем в друзья
|
||||
* @param string $sText Текст сообщения
|
||||
* @param string $sPath URL для подтверждения дружбы
|
||||
* @return bool
|
||||
*/
|
||||
public function SendUserFriendNew(ModuleUser_EntityUser $oUserTo,ModuleUser_EntityUser $oUserFrom, $sText,$sPath) {
|
||||
public function SendUserFriendNew(ModuleUser_EntityUser $oUserTo,ModuleUser_EntityUser $oUserFrom, $sText,$sPath) {
|
||||
/**
|
||||
* Проверяем можно ли юзеру рассылать уведомление
|
||||
*/
|
||||
if (!$oUserTo->getSettingsNoticeNewFriend()) {
|
||||
return ;
|
||||
}
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUserTo',$oUserTo);
|
||||
$this->oViewerLocal->Assign('oUserFrom',$oUserFrom);
|
||||
$this->oViewerLocal->Assign('sText',$sText);
|
||||
$this->oViewerLocal->Assign('sPath',$sPath);
|
||||
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath('notify.user_friend_new.tpl'));
|
||||
/**
|
||||
* Если в конфигураторе указан отложенный метод отправки,
|
||||
* то добавляем задание в массив. В противном случае,
|
||||
* сразу отсылаем на email
|
||||
*/
|
||||
if(Config::Get('module.notify.delayed')) {
|
||||
$oNotifyTask=Engine::GetEntity(
|
||||
'Notify_Task',
|
||||
array(
|
||||
'user_mail' => $oUserTo->getMail(),
|
||||
'user_login' => $oUserTo->getLogin(),
|
||||
'notify_text' => $sBody,
|
||||
'notify_subject' => $this->Lang_Get('notify_subject_user_friend_new'),
|
||||
'date_created' => date("Y-m-d H:i:s"),
|
||||
'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL,
|
||||
)
|
||||
);
|
||||
if(Config::Get('module.notify.insert_single')) {
|
||||
$this->aTask[] = $oNotifyTask;
|
||||
} else {
|
||||
$this->oMapper->AddTask($oNotifyTask);
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($oUserTo->getMail(),$oUserTo->getLogin());
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_user_friend_new'));
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
return false;
|
||||
}
|
||||
$this->Send(
|
||||
$oUserTo,
|
||||
'notify.user_friend_new.tpl',
|
||||
$this->Lang_Get('notify_subject_user_friend_new'),
|
||||
array(
|
||||
'oUserTo' => $oUserTo,
|
||||
'oUserFrom' => $oUserFrom,
|
||||
'sText' => $sText,
|
||||
'sPath' => $sPath,
|
||||
)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Отправляет пользователю сообщение о приглашение его в закрытый блог
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUserTo
|
||||
* @param ModuleUser_EntityUser $oUserFrom
|
||||
* @param ModuleUser_EntityUser $oUserTo Объект пользователя, который отправляет приглашение
|
||||
* @param ModuleUser_EntityUser $oUserFrom Объект пользователя, которого приглашаем
|
||||
* @param ModuleBlog_EntityBlog $oBlog Объект блога
|
||||
* @param $sPath
|
||||
*/
|
||||
public function SendBlogUserInvite(ModuleUser_EntityUser $oUserTo,ModuleUser_EntityUser $oUserFrom, ModuleBlog_EntityBlog $oBlog,$sPath) {
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUserTo',$oUserTo);
|
||||
$this->oViewerLocal->Assign('oUserFrom',$oUserFrom);
|
||||
$this->oViewerLocal->Assign('oBlog',$oBlog);
|
||||
$this->oViewerLocal->Assign('sPath',$sPath);
|
||||
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath('notify.blog_invite_new.tpl'));
|
||||
/**
|
||||
* Если в конфигураторе указан отложенный метод отправки,
|
||||
* то добавляем задание в массив. В противном случае,
|
||||
* сразу отсылаем на email
|
||||
*/
|
||||
if(Config::Get('module.notify.delayed')) {
|
||||
$oNotifyTask=Engine::GetEntity(
|
||||
'Notify_Task',
|
||||
array(
|
||||
'user_mail' => $oUserTo->getMail(),
|
||||
'user_login' => $oUserTo->getLogin(),
|
||||
'notify_text' => $sBody,
|
||||
'notify_subject' => $this->Lang_Get('notify_subject_blog_invite_new'),
|
||||
'date_created' => date("Y-m-d H:i:s"),
|
||||
'notify_task_status' => self::NOTIFY_TASK_STATUS_NULL,
|
||||
)
|
||||
);
|
||||
if(Config::Get('module.notify.insert_single')) {
|
||||
$this->aTask[] = $oNotifyTask;
|
||||
} else {
|
||||
$this->oMapper->AddTask($oNotifyTask);
|
||||
}
|
||||
} else {
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($oUserTo->getMail(),$oUserTo->getLogin());
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_blog_invite_new'));
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
}
|
||||
}
|
||||
|
||||
public function SendBlogUserInvite(ModuleUser_EntityUser $oUserTo,ModuleUser_EntityUser $oUserFrom, ModuleBlog_EntityBlog $oBlog,$sPath) {
|
||||
$this->Send(
|
||||
$oUserTo,
|
||||
'notify.blog_invite_new.tpl',
|
||||
$this->Lang_Get('notify_subject_blog_invite_new'),
|
||||
array(
|
||||
'oUserTo' => $oUserTo,
|
||||
'oUserFrom' => $oUserFrom,
|
||||
'oBlog' => $oBlog,
|
||||
'sPath' => $sPath,
|
||||
)
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Уведомление при восстановлении пароля
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param ModuleUser_EntityReminder $oReminder
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @param ModuleUser_EntityReminder $oReminder объект напоминания пароля
|
||||
*/
|
||||
public function SendReminderCode(ModuleUser_EntityUser $oUser,ModuleUser_EntityReminder $oReminder) {
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUser',$oUser);
|
||||
$this->oViewerLocal->Assign('oReminder',$oReminder);
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath('notify.reminder_code.tpl'));
|
||||
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($oUser->getMail(),$oUser->getLogin());
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_reminder_code'));
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
public function SendReminderCode(ModuleUser_EntityUser $oUser,ModuleUser_EntityReminder $oReminder) {
|
||||
$this->Send(
|
||||
$oUser,
|
||||
'notify.reminder_code.tpl',
|
||||
$this->Lang_Get('notify_subject_reminder_code'),
|
||||
array(
|
||||
'oUser' => $oUser,
|
||||
'oReminder' => $oReminder,
|
||||
)
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Уведомление с новым паролем после его восставновления
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param unknown_type $sNewPassword
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @param string $sNewPassword Новый пароль
|
||||
*/
|
||||
public function SendReminderPassword(ModuleUser_EntityUser $oUser,$sNewPassword) {
|
||||
/**
|
||||
* Передаём в шаблон переменные
|
||||
*/
|
||||
$this->oViewerLocal->Assign('oUser',$oUser);
|
||||
$this->oViewerLocal->Assign('sNewPassword',$sNewPassword);
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath('notify.reminder_password.tpl'));
|
||||
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
$this->Mail_SetAdress($oUser->getMail(),$oUser->getLogin());
|
||||
$this->Mail_SetSubject($this->Lang_Get('notify_subject_reminder_password'));
|
||||
$this->Mail_SetBody($sBody);
|
||||
$this->Mail_setHTML();
|
||||
$this->Mail_Send();
|
||||
public function SendReminderPassword(ModuleUser_EntityUser $oUser,$sNewPassword) {
|
||||
$this->Send(
|
||||
$oUser,
|
||||
'notify.reminder_password.tpl',
|
||||
$this->Lang_Get('notify_subject_reminder_password'),
|
||||
array(
|
||||
'oUser' => $oUser,
|
||||
'sNewPassword' => $sNewPassword,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Уведомление при ответе на сообщение на стене
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWallParent
|
||||
* @param ModuleWall_EntityWall $oWall
|
||||
* @param ModuleUser_EntityUser $oUserWall
|
||||
* @param ModuleWall_EntityWall $oWallParent Объект сообщения на стене, на которое отвечаем
|
||||
* @param ModuleWall_EntityWall $oWall Объект нового сообщения на стене
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
*/
|
||||
public function SendWallReply(ModuleWall_EntityWall $oWallParent, ModuleWall_EntityWall $oWall, ModuleUser_EntityUser $oUser) {
|
||||
$this->Send(
|
||||
|
@ -639,12 +371,11 @@ class ModuleNotify extends Module {
|
|||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Уведомление о новом сообщение на стене
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param ModuleWall_EntityWall $oWall Объект нового сообщения на стене
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
*/
|
||||
public function SendWallNew(ModuleWall_EntityWall $oWall, ModuleUser_EntityUser $oUser) {
|
||||
$this->Send(
|
||||
|
@ -659,17 +390,16 @@ class ModuleNotify extends Module {
|
|||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Универсальный метод отправки уведомлений на email
|
||||
*
|
||||
* @param ModuleUser_EntityUser | string $oUserTo - кому отправляем (пользователь или email)
|
||||
* @param unknown_type $sTemplate - шаблон для отправки
|
||||
* @param unknown_type $sSubject - тема письма
|
||||
* @param unknown_type $aAssign - ассоциативный массив для загрузки переменных в шаблон письма
|
||||
* @param unknown_type $sPluginName - плагин из которого происходит отправка
|
||||
* @param ModuleUser_EntityUser|string $oUserTo Кому отправляем (пользователь или email)
|
||||
* @param string $sTemplate Шаблон для отправки
|
||||
* @param string $sSubject Тема письма
|
||||
* @param array $aAssign Ассоциативный массив для загрузки переменных в шаблон письма
|
||||
* @param string|null $sPluginName Плагин из которого происходит отправка
|
||||
*/
|
||||
public function Send($oUserTo,$sTemplate,$sSubject,$aAssign=array(),$sPluginName=null) {
|
||||
public function Send($oUserTo,$sTemplate,$sSubject,$aAssign=array(),$sPluginName=null) {
|
||||
if ($oUserTo instanceof ModuleUser_EntityUser) {
|
||||
$sMail=$oUserTo->getMail();
|
||||
$sName=$oUserTo->getLogin();
|
||||
|
@ -682,19 +412,19 @@ class ModuleNotify extends Module {
|
|||
*/
|
||||
foreach ($aAssign as $k=>$v) {
|
||||
$this->oViewerLocal->Assign($k,$v);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Формируем шаблон
|
||||
*/
|
||||
$sBody=$this->oViewerLocal->Fetch($this->GetTemplatePath($sTemplate,$sPluginName));
|
||||
/**
|
||||
* Если в конфигураторе указан отложенный метод отправки,
|
||||
* Если в конфигураторе указан отложенный метод отправки,
|
||||
* то добавляем задание в массив. В противном случае,
|
||||
* сразу отсылаем на email
|
||||
*/
|
||||
if(Config::Get('module.notify.delayed')) {
|
||||
$oNotifyTask=Engine::GetEntity(
|
||||
'Notify_Task',
|
||||
'Notify_Task',
|
||||
array(
|
||||
'user_mail' => $sMail,
|
||||
'user_login' => $sName,
|
||||
|
@ -709,7 +439,7 @@ class ModuleNotify extends Module {
|
|||
} else {
|
||||
$this->oMapper->AddTask($oNotifyTask);
|
||||
}
|
||||
} else {
|
||||
} else {
|
||||
/**
|
||||
* Отправляем мыло
|
||||
*/
|
||||
|
@ -720,25 +450,21 @@ class ModuleNotify extends Module {
|
|||
$this->Mail_Send();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* При завершении работы модуля проверяем наличие
|
||||
* При завершении работы модуля проверяем наличие
|
||||
* отложенных заданий в массиве и при необходимости
|
||||
* передаем их в меппер
|
||||
*/
|
||||
*/
|
||||
public function Shutdown() {
|
||||
if(!empty($this->aTask) && Config::Get('module.notify.delayed')) {
|
||||
$this->oMapper->AddTaskArray($this->aTask);
|
||||
$this->aTask=array();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает массив заданий на публикацию из базы
|
||||
* с указанным количественным ограничением (выборка FIFO)
|
||||
* Получает массив заданий на публикацию из базы с указанным количественным ограничением (выборка FIFO)
|
||||
*
|
||||
* @param int $iLimit
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetTasksDelayed($iLimit=10) {
|
||||
|
@ -747,9 +473,9 @@ class ModuleNotify extends Module {
|
|||
: array();
|
||||
}
|
||||
/**
|
||||
* Отправляет на e-mail
|
||||
* Отправляет на e-mail
|
||||
*
|
||||
* @param ModuleNotify_EntityTask $oTask
|
||||
* @param ModuleNotify_EntityTask $oTask Объект задания на отправку
|
||||
*/
|
||||
public function SendTask($oTask) {
|
||||
$this->Mail_SetAdress($oTask->getUserMail(),$oTask->getUserLogin());
|
||||
|
@ -761,7 +487,7 @@ class ModuleNotify extends Module {
|
|||
/**
|
||||
* Удаляет отложенное Notify-задание из базы
|
||||
*
|
||||
* @param ModuleNotify_EntityTask $oTask
|
||||
* @param ModuleNotify_EntityTask $oTask Объект задания на отправку
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTask($oTask) {
|
||||
|
@ -770,26 +496,25 @@ class ModuleNotify extends Module {
|
|||
/**
|
||||
* Удаляет отложенные Notify-задания по списку идентификаторов
|
||||
*
|
||||
* @param array $aArrayId
|
||||
* @return bool
|
||||
* @param array $aArrayId Список ID заданий на отправку
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTaskByArrayId($aArrayId) {
|
||||
return $this->oMapper->DeleteTaskByArrayId($aArrayId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает путь к шаблону по переданному имени
|
||||
*
|
||||
* @param string $sName
|
||||
* @param string $sPluginName
|
||||
* @param string $sName Название шаблона
|
||||
* @param string $sPluginName Название или класс плагина
|
||||
* @return string
|
||||
*/
|
||||
public function GetTemplatePath($sName,$sPluginName=null) {
|
||||
public function GetTemplatePath($sName,$sPluginName=null) {
|
||||
if ($sPluginName) {
|
||||
$sPluginName = preg_match('/^Plugin([\w]+)(_[\w]+)?$/Ui',$sPluginName,$aMatches)
|
||||
? strtolower($aMatches[1])
|
||||
: strtolower($sPluginName);
|
||||
|
||||
? strtolower($aMatches[1])
|
||||
: strtolower($sPluginName);
|
||||
|
||||
$sLangDir=Plugin::GetTemplatePath($sPluginName).'notify/'.$this->Lang_GetLang();
|
||||
if(is_dir($sLangDir)) {
|
||||
return $sLangDir.'/'.$sName;
|
||||
|
@ -798,9 +523,9 @@ class ModuleNotify extends Module {
|
|||
} else {
|
||||
$sLangDir = 'notify/'.$this->Lang_GetLang();
|
||||
/**
|
||||
* Если директория с сообщениями на текущем языке отсутствует,
|
||||
* используем язык по умолчанию
|
||||
*/
|
||||
* Если директория с сообщениями на текущем языке отсутствует,
|
||||
* используем язык по умолчанию
|
||||
*/
|
||||
if(is_dir(rtrim(Config::Get('path.smarty.template'),'/').'/'.$sLangDir)) {
|
||||
return $sLangDir.'/'.$sName;
|
||||
}
|
||||
|
|
|
@ -15,51 +15,126 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleNotify_EntityTask extends Entity
|
||||
{
|
||||
public function getTaskId() {
|
||||
return $this->_getDataOne('notify_task_id');
|
||||
}
|
||||
public function getUserMail() {
|
||||
return $this->_getDataOne('user_mail');
|
||||
}
|
||||
public function getUserLogin() {
|
||||
return $this->_getDataOne('user_login');
|
||||
}
|
||||
public function getNotifyText() {
|
||||
return $this->_getDataOne('notify_text');
|
||||
}
|
||||
public function getDateCreated() {
|
||||
return $this->_getDataOne('date_created');
|
||||
}
|
||||
public function getTaskStatus() {
|
||||
return $this->_getDataOne('notify_task_status');
|
||||
}
|
||||
public function getNotifySubject() {
|
||||
return $this->_getDataOne('notify_subject');
|
||||
}
|
||||
|
||||
|
||||
public function setTaskId($data) {
|
||||
$this->_aData['notify_task_id']=$data;
|
||||
}
|
||||
public function setUserMail($data) {
|
||||
$this->_aData['user_mail']=$data;
|
||||
}
|
||||
public function setUserLogin($data) {
|
||||
$this->_aData['user_login']=$data;
|
||||
}
|
||||
public function setNotifyText($data) {
|
||||
$this->_aData['notify_text']=$data;
|
||||
}
|
||||
public function setDateCreated($data) {
|
||||
$this->_aData['date_created']=$data;
|
||||
}
|
||||
public function setTaskStatus($data) {
|
||||
$this->_aData['notify_task_status']=$data;
|
||||
}
|
||||
public function setNotifySubject($data) {
|
||||
$this->_aData['notify_subject']=$data;
|
||||
}
|
||||
/**
|
||||
* Объект сущности задания на отправку емайла
|
||||
*
|
||||
* @package modules.notify
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleNotify_EntityTask extends Entity {
|
||||
/**
|
||||
* Возвращает ID задания
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTaskId() {
|
||||
return $this->_getDataOne('notify_task_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает емайл
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getUserMail() {
|
||||
return $this->_getDataOne('user_mail');
|
||||
}
|
||||
/**
|
||||
* Возвращает логин пользователя
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getUserLogin() {
|
||||
return $this->_getDataOne('user_login');
|
||||
}
|
||||
/**
|
||||
* Возвращает текст сообщения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getNotifyText() {
|
||||
return $this->_getDataOne('notify_text');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату создания сообщения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateCreated() {
|
||||
return $this->_getDataOne('date_created');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус отправки
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTaskStatus() {
|
||||
return $this->_getDataOne('notify_task_status');
|
||||
}
|
||||
/**
|
||||
* Возвращает тему сообщения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getNotifySubject() {
|
||||
return $this->_getDataOne('notify_subject');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID задания
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTaskId($data) {
|
||||
$this->_aData['notify_task_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает емайл
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setUserMail($data) {
|
||||
$this->_aData['user_mail']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает логин
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setUserLogin($data) {
|
||||
$this->_aData['user_login']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает текст уведомления
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setNotifyText($data) {
|
||||
$this->_aData['notify_text']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату создания задания
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateCreated($data) {
|
||||
$this->_aData['date_created']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус задания
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTaskStatus($data) {
|
||||
$this->_aData['notify_task_status']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает тему сообщения
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setNotifySubject($data) {
|
||||
$this->_aData['notify_subject']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,8 +15,19 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleNotify_MapperNotify extends Mapper {
|
||||
|
||||
/**
|
||||
* Маппер для работы с БД
|
||||
*
|
||||
* @package modules.notify
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleNotify_MapperNotify extends Mapper {
|
||||
/**
|
||||
* Добавляет задание
|
||||
*
|
||||
* @param ModuleNotify_EntityTask $oNotifyTask Объект задания
|
||||
* @return bool
|
||||
*/
|
||||
public function AddTask(ModuleNotify_EntityTask $oNotifyTask) {
|
||||
$sql = "
|
||||
INSERT INTO ".Config::Get('db.table.notify_task')."
|
||||
|
@ -24,7 +35,7 @@ class ModuleNotify_MapperNotify extends Mapper {
|
|||
VALUES
|
||||
( ?, ?, ?, ?, ?, ?d )
|
||||
";
|
||||
|
||||
|
||||
if ($this->oDb->query(
|
||||
$sql,
|
||||
$oNotifyTask->getUserLogin(),
|
||||
|
@ -32,64 +43,84 @@ class ModuleNotify_MapperNotify extends Mapper {
|
|||
$oNotifyTask->getNotifySubject(),
|
||||
$oNotifyTask->getNotifyText(),
|
||||
$oNotifyTask->getDateCreated(),
|
||||
$oNotifyTask->getTaskStatus()
|
||||
$oNotifyTask->getTaskStatus()
|
||||
)===0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет задания списком
|
||||
*
|
||||
* @param array $aTasks Список объектов заданий
|
||||
* @return bool
|
||||
*/
|
||||
public function AddTaskArray($aTasks) {
|
||||
if(!is_array($aTasks)&&count($aTasks)==0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
$aValues=array();
|
||||
foreach ($aTasks as $oTask) {
|
||||
$aValues[]="(".implode(',',
|
||||
array(
|
||||
$this->oDb->escape($oTask->getUserLogin()),
|
||||
$this->oDb->escape($oTask->getUserMail()),
|
||||
$this->oDb->escape($oTask->getNotifySubject()),
|
||||
$this->oDb->escape($oTask->getNotifyText()),
|
||||
$this->oDb->escape($oTask->getDateCreated()),
|
||||
$this->oDb->escape($oTask->getTaskStatus())
|
||||
)
|
||||
$aValues[]="(".implode(',',
|
||||
array(
|
||||
$this->oDb->escape($oTask->getUserLogin()),
|
||||
$this->oDb->escape($oTask->getUserMail()),
|
||||
$this->oDb->escape($oTask->getNotifySubject()),
|
||||
$this->oDb->escape($oTask->getNotifyText()),
|
||||
$this->oDb->escape($oTask->getDateCreated()),
|
||||
$this->oDb->escape($oTask->getTaskStatus())
|
||||
)
|
||||
).")";
|
||||
}
|
||||
$sql = "
|
||||
INSERT INTO ".Config::Get('db.table.notify_task')."
|
||||
( user_login, user_mail, notify_subject, notify_text, date_created, notify_task_status )
|
||||
VALUES
|
||||
".implode(', ', $aValues);
|
||||
".implode(', ', $aValues);
|
||||
|
||||
return $this->oDb->query($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет задание
|
||||
*
|
||||
* @param ModuleNotify_EntityTask $oNotifyTask Объект задания
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTask(ModuleNotify_EntityTask $oNotifyTask) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.notify_task')."
|
||||
WHERE
|
||||
notify_task_id = ?d
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$oNotifyTask->getTaskId())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет отложенные Notify-задания по списку идентификаторов
|
||||
*
|
||||
* @param array $aTaskId Список ID заданий на отправку
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTaskByArrayId($aTaskId) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.notify_task')."
|
||||
WHERE
|
||||
notify_task_id IN(?a)
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$aTaskId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает массив заданий на публикацию из базы с указанным количественным ограничением (выборка FIFO)
|
||||
*
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetTasks($iLimit) {
|
||||
$sql = "SELECT *
|
||||
FROM ".Config::Get('db.table.notify_task')."
|
||||
|
@ -100,8 +131,8 @@ class ModuleNotify_MapperNotify extends Mapper {
|
|||
foreach ($aRows as $aTask) {
|
||||
$aTasks[]=Engine::GetEntity('Notify_Task',$aTask);
|
||||
}
|
||||
}
|
||||
return $aTasks;
|
||||
}
|
||||
return $aTasks;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -16,8 +16,10 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* Модуль управления рейтингами и силой
|
||||
* Модуль управления рейтингами и силой
|
||||
*
|
||||
* @package modules.rating
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleRating extends Module {
|
||||
|
||||
|
@ -25,14 +27,16 @@ class ModuleRating extends Module {
|
|||
* Инициализация модуля
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
|
||||
public function Init() {
|
||||
|
||||
}
|
||||
/**
|
||||
* Расчет рейтинга при голосовании за комментарий
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param CommentEntity_TopicComment $oComment
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует
|
||||
* @param ModuleComment_EntityComment $oComment Объект комментария
|
||||
* @param int $iValue
|
||||
* @return int
|
||||
*/
|
||||
public function VoteComment(ModuleUser_EntityUser $oUser, ModuleComment_EntityComment $oComment, $iValue) {
|
||||
/**
|
||||
|
@ -41,7 +45,7 @@ class ModuleRating extends Module {
|
|||
$oComment->setRating($oComment->getRating()+$iValue);
|
||||
/**
|
||||
* Начисляем силу автору коммента, используя логарифмическое распределение
|
||||
*/
|
||||
*/
|
||||
$skill=$oUser->getSkill();
|
||||
$iMinSize=0.004;
|
||||
$iMaxSize=0.5;
|
||||
|
@ -51,7 +55,7 @@ class ModuleRating extends Module {
|
|||
$iCountRange=$iMaxCount-$iMinCount;
|
||||
if ($iCountRange==0) {
|
||||
$iCountRange=1;
|
||||
}
|
||||
}
|
||||
if ($skill>50 and $skill<200) {
|
||||
$skill_new=$skill/70;
|
||||
} elseif ($skill>=200) {
|
||||
|
@ -73,9 +77,10 @@ class ModuleRating extends Module {
|
|||
/**
|
||||
* Расчет рейтинга и силы при гоосовании за топик
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param ModuleTopic_EntityTopic $oTopic
|
||||
* @param unknown_type $iValue
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует
|
||||
* @param ModuleTopic_EntityTopic $oTopic Объект топика
|
||||
* @param int $iValue
|
||||
* @return int
|
||||
*/
|
||||
public function VoteTopic(ModuleUser_EntityUser $oUser, ModuleTopic_EntityTopic $oTopic, $iValue) {
|
||||
$skill=$oUser->getSkill();
|
||||
|
@ -93,7 +98,7 @@ class ModuleRating extends Module {
|
|||
$oTopic->setRating($oTopic->getRating()+$iDeltaRating);
|
||||
/**
|
||||
* Начисляем силу и рейтинг автору топика, используя логарифмическое распределение
|
||||
*/
|
||||
*/
|
||||
$iMinSize=0.1;
|
||||
$iMaxSize=8;
|
||||
$iSizeRange=$iMaxSize-$iMinSize;
|
||||
|
@ -102,7 +107,7 @@ class ModuleRating extends Module {
|
|||
$iCountRange=$iMaxCount-$iMinCount;
|
||||
if ($iCountRange==0) {
|
||||
$iCountRange=1;
|
||||
}
|
||||
}
|
||||
if ($skill>50 and $skill<200) {
|
||||
$skill_new=$skill/70;
|
||||
} elseif ($skill>=200) {
|
||||
|
@ -125,15 +130,16 @@ class ModuleRating extends Module {
|
|||
/**
|
||||
* Расчет рейтинга и силы при голосовании за блог
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param ModuleBlog_EntityBlog $oBlog
|
||||
* @param unknown_type $iValue
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя, который голосует
|
||||
* @param ModuleBlog_EntityBlog $oBlog Объект блога
|
||||
* @param int $iValue
|
||||
* @return int
|
||||
*/
|
||||
public function VoteBlog(ModuleUser_EntityUser $oUser, ModuleBlog_EntityBlog $oBlog, $iValue) {
|
||||
public function VoteBlog(ModuleUser_EntityUser $oUser, ModuleBlog_EntityBlog $oBlog, $iValue) {
|
||||
/**
|
||||
* Устанавливаем рейтинг блога, используя логарифмическое распределение
|
||||
*/
|
||||
$skill=$oUser->getSkill();
|
||||
*/
|
||||
$skill=$oUser->getSkill();
|
||||
$iMinSize=1.13;
|
||||
$iMaxSize=15;
|
||||
$iSizeRange=$iMaxSize-$iMinSize;
|
||||
|
@ -142,7 +148,7 @@ class ModuleRating extends Module {
|
|||
$iCountRange=$iMaxCount-$iMinCount;
|
||||
if ($iCountRange==0) {
|
||||
$iCountRange=1;
|
||||
}
|
||||
}
|
||||
if ($skill>50 and $skill<200) {
|
||||
$skill_new=$skill/20;
|
||||
} elseif ($skill>=200) {
|
||||
|
@ -162,12 +168,13 @@ class ModuleRating extends Module {
|
|||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param ModuleUser_EntityUser $oUserTarget
|
||||
* @param unknown_type $iValue
|
||||
* @param int $iValue
|
||||
* @return float
|
||||
*/
|
||||
public function VoteUser(ModuleUser_EntityUser $oUser, ModuleUser_EntityUser $oUserTarget, $iValue) {
|
||||
public function VoteUser(ModuleUser_EntityUser $oUser, ModuleUser_EntityUser $oUserTarget, $iValue) {
|
||||
/**
|
||||
* Начисляем силу и рейтинг юзеру, используя логарифмическое распределение
|
||||
*/
|
||||
*/
|
||||
$skill=$oUser->getSkill();
|
||||
$iMinSize=0.42;
|
||||
$iMaxSize=3.2;
|
||||
|
@ -177,7 +184,7 @@ class ModuleRating extends Module {
|
|||
$iCountRange=$iMaxCount-$iMinCount;
|
||||
if ($iCountRange==0) {
|
||||
$iCountRange=1;
|
||||
}
|
||||
}
|
||||
if ($skill>50 and $skill<200) {
|
||||
$skill_new=$skill/40;
|
||||
} elseif ($skill>=200) {
|
||||
|
@ -187,14 +194,10 @@ class ModuleRating extends Module {
|
|||
}
|
||||
$iDelta=$iMinSize+(log($skill_new+1)-$iMinCount)*($iSizeRange/$iCountRange);
|
||||
/**
|
||||
* Сохраняем силу и рейтинг
|
||||
*/
|
||||
$iRatingNew=$oUserTarget->getRating()+$iValue*$iDelta;
|
||||
//$iSkillNew=$oUserTarget->getSkill()+$iValue*$iDelta/3.67;
|
||||
//$iSkillNew=($iSkillNew<0) ? 0 : $iSkillNew;
|
||||
//$oUserTarget->setSkill($iSkillNew);
|
||||
* Определяем новый рейтинг
|
||||
*/
|
||||
$iRatingNew=$oUserTarget->getRating()+$iValue*$iDelta;
|
||||
$oUserTarget->setRating($iRatingNew);
|
||||
///$this->User_Update($oUserTarget);
|
||||
return $iValue*$iDelta;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,18 +4,27 @@ require_once(Config::Get('path.root.engine').'/lib/external/Sphinx/sphinxapi.php
|
|||
/**
|
||||
* Модуль для работы с машиной полнотекстового поиска Sphinx
|
||||
*
|
||||
* @package modules.sphinx
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleSphinx extends Module {
|
||||
/**
|
||||
* Объект сфинкса
|
||||
*
|
||||
* @var SphinxClient|null
|
||||
*/
|
||||
protected $oSphinx = null;
|
||||
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
public function Init() {
|
||||
$this->InitSphinx();
|
||||
}
|
||||
|
||||
/**
|
||||
* Инициализация сфинкса
|
||||
*/
|
||||
protected function InitSphinx() {
|
||||
/**
|
||||
* Получаем объект Сфинкса(из Сфинкс АПИ)
|
||||
|
@ -27,17 +36,13 @@ class ModuleSphinx extends Module {
|
|||
*/
|
||||
$this->oSphinx->SetSortMode(SPH_SORT_EXTENDED, "@weight DESC, @id DESc");
|
||||
}
|
||||
|
||||
public function Shutdown() {
|
||||
|
||||
}
|
||||
/**
|
||||
* Возвращает число найденых элементов в зависимоти от их типа
|
||||
*
|
||||
* @param unknown_type $sTerms
|
||||
* @param unknown_type $sObjType
|
||||
* @param unknown_type $aExtraFilters
|
||||
* @return unknown
|
||||
* @param string $sTerms Поисковый запрос
|
||||
* @param string $sObjType Тип поиска
|
||||
* @param array $aExtraFilters Список фильтров
|
||||
* @return int
|
||||
*/
|
||||
public function GetNumResultsByType($sTerms, $sObjType = 'topics', $aExtraFilters){
|
||||
$aResults = $this->FindContent($sTerms, $sObjType, 1, 1, $aExtraFilters);
|
||||
|
@ -46,25 +51,25 @@ class ModuleSphinx extends Module {
|
|||
/**
|
||||
* Непосредственно сам поиск
|
||||
*
|
||||
* @param unknown_type $sTerms
|
||||
* @param unknown_type $sObjType
|
||||
* @param unknown_type $iOffset
|
||||
* @param unknown_type $iLimit
|
||||
* @param unknown_type $aExtraFilters
|
||||
* @return unknown
|
||||
* @param string $sTerms Поисковый запрос
|
||||
* @param string $sObjType Тип поиска
|
||||
* @param int $iOffset Сдвиг элементов
|
||||
* @param int $iLimit Количество элементов
|
||||
* @param array $aExtraFilters Список фильтров
|
||||
* @return array
|
||||
*/
|
||||
public function FindContent($sTerms, $sObjType, $iOffset, $iLimit, $aExtraFilters){
|
||||
/**
|
||||
* используем кеширование при поиске
|
||||
*/
|
||||
$sExtraFilters = serialize($aExtraFilters);
|
||||
$cacheKey = Config::Get('module.search.entity_prefix')."searchResult_{$sObjType}_{$sTerms}_{$iOffset}_{$iLimit}_{$sExtraFilters}";
|
||||
$cacheKey = Config::Get('module.search.entity_prefix')."searchResult_{$sObjType}_{$sTerms}_{$iOffset}_{$iLimit}_{$sExtraFilters}";
|
||||
if (false === ($data = $this->Cache_Get($cacheKey))) {
|
||||
/**
|
||||
* Параметры поиска
|
||||
*/
|
||||
$this->oSphinx->SetMatchMode(SPH_MATCH_ALL);
|
||||
$this->oSphinx->SetLimits($iOffset, $iLimit);
|
||||
$this->oSphinx->SetLimits($iOffset, $iLimit);
|
||||
/**
|
||||
* Устанавливаем атрибуты поиска
|
||||
*/
|
||||
|
@ -72,7 +77,7 @@ class ModuleSphinx extends Module {
|
|||
if(!is_null($aExtraFilters)){
|
||||
foreach($aExtraFilters AS $sAttribName => $sAttribValue){
|
||||
$this->oSphinx->SetFilter(
|
||||
$sAttribName,
|
||||
$sAttribName,
|
||||
(is_array($sAttribValue)) ? $sAttribValue : array($sAttribValue)
|
||||
);
|
||||
}
|
||||
|
@ -82,7 +87,7 @@ class ModuleSphinx extends Module {
|
|||
*/
|
||||
if(!is_array($data = $this->oSphinx->Query($sTerms, Config::Get('module.search.entity_prefix').$sObjType.'Index'))) {
|
||||
return FALSE; // Скорее всего недоступен демон searchd
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Если результатов нет, то и в кеш писать не стоит...
|
||||
* хотя тут момент спорный
|
||||
|
@ -96,7 +101,7 @@ class ModuleSphinx extends Module {
|
|||
/**
|
||||
* Получить ошибку при последнем обращении к поиску
|
||||
*
|
||||
* @return unknown
|
||||
* @return string
|
||||
*/
|
||||
public function GetLastError(){
|
||||
return $this->oSphinx->GetLastError();
|
||||
|
@ -104,18 +109,18 @@ class ModuleSphinx extends Module {
|
|||
/**
|
||||
* Получаем сниппеты(превью найденых элементов)
|
||||
*
|
||||
* @param unknown_type $sText
|
||||
* @param unknown_type $sIndex
|
||||
* @param unknown_type $sTerms
|
||||
* @param unknown_type $before_match
|
||||
* @param unknown_type $after_match
|
||||
* @return unknown
|
||||
* @param string $sText Текст
|
||||
* @param string $sIndex Название индекса
|
||||
* @param string $sTerms Поисковый запрос
|
||||
* @param string $before_match Добавляемый текст перед ключом
|
||||
* @param string $after_match Добавляемый текст после ключа
|
||||
* @return array
|
||||
*/
|
||||
public function GetSnippet($sText, $sIndex, $sTerms, $before_match, $after_match){
|
||||
$aReturn = $this->oSphinx->BuildExcerpts(array($sText), Config::Get('module.search.entity_prefix').$sIndex.'Index', $sTerms, array(
|
||||
'before_match' => $before_match,
|
||||
'after_match' => $after_match,
|
||||
)
|
||||
'before_match' => $before_match,
|
||||
'after_match' => $after_match,
|
||||
)
|
||||
);
|
||||
return $aReturn[0];
|
||||
}
|
||||
|
|
|
@ -18,11 +18,16 @@
|
|||
/**
|
||||
* Модуль потока событий на сайте
|
||||
*
|
||||
* @package modules.stream
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleStream extends Module {
|
||||
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleStream_MapperStream
|
||||
*/
|
||||
protected $oMapper = null;
|
||||
|
||||
/**
|
||||
* Список дефолтных типов событий, они добавляются каждому пользователю при регистрации
|
||||
*
|
||||
|
@ -49,24 +54,25 @@ class ModuleStream extends Module {
|
|||
'join_blog' => array('related' => 'blog','unique_user'=>true)
|
||||
);
|
||||
|
||||
/**
|
||||
* Инициализация модуля
|
||||
*/
|
||||
public function Init() {
|
||||
$this->oMapper=Engine::GetMapper(__CLASS__);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает все типы событий
|
||||
*
|
||||
* @return unknown
|
||||
* @return array
|
||||
*/
|
||||
public function getEventTypes() {
|
||||
return $this->aEventTypes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает типы событий с учетом фильтра(доступности)
|
||||
*
|
||||
* @param null $aTypes
|
||||
* @return null|unknown
|
||||
* @param array|null $aTypes Список типов
|
||||
* @return array
|
||||
*/
|
||||
public function getEventTypesFilter($aTypes=null) {
|
||||
if (is_null($aTypes)) {
|
||||
|
@ -84,9 +90,9 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Добавляет новый тип события, метод для расширения списка событий плагинами
|
||||
*
|
||||
* @param unknown_type $sName
|
||||
* @param unknown_type $aParams
|
||||
* @return unknown
|
||||
* @param string $sName Название типа
|
||||
* @param array $aParams Параметры
|
||||
* @return bool
|
||||
*/
|
||||
public function AddEventType($sName,$aParams) {
|
||||
if (!array_key_exists($sName,$this->aEventTypes)) {
|
||||
|
@ -98,16 +104,20 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Проверка допустимого типа событий
|
||||
*
|
||||
* @param string $sType
|
||||
* @param string $sType Тип
|
||||
* @return bool
|
||||
*/
|
||||
public function IsAllowEventType($sType) {
|
||||
if (!is_string($sType)) {
|
||||
return false;
|
||||
}
|
||||
return array_key_exists($sType,$this->aEventTypes);
|
||||
}
|
||||
/**
|
||||
* Добавление события в БД
|
||||
*
|
||||
* @param unknown_type $oObject
|
||||
* @return unknown
|
||||
* @param ModuleStream_EntityEvent $oObject Объект события
|
||||
* @return ModuleStream_EntityEvent|bool
|
||||
*/
|
||||
public function AddEvent($oObject) {
|
||||
if ($iId=$this->oMapper->AddEvent($oObject)) {
|
||||
|
@ -119,8 +129,8 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Обновление события
|
||||
*
|
||||
* @param unknown_type $oObject
|
||||
* @return unknown
|
||||
* @param ModuleStream_EntityEvent $oObject Объект события
|
||||
* @return int
|
||||
*/
|
||||
public function UpdateEvent($oObject) {
|
||||
return $this->oMapper->UpdateEvent($oObject);
|
||||
|
@ -128,18 +138,22 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Получает событие по типу и его ID
|
||||
*
|
||||
* @param unknown_type $sEventType
|
||||
* @param unknown_type $iTargetId
|
||||
* @return unknown
|
||||
* @param string $sEventType Тип
|
||||
* @param int $iTargetId ID владельца события
|
||||
* @param int|null $iUserId ID пользователя
|
||||
* @return ModuleStream_EntityEvent
|
||||
*/
|
||||
public function GetEventByTarget($sEventType, $iTargetId, $iUserId=null) {
|
||||
return $this->oMapper->GetEventByTarget($sEventType, $iTargetId, $iUserId);
|
||||
}
|
||||
/**
|
||||
* Запись события в ленту
|
||||
* @param type $oUser
|
||||
* @param type $iEventType
|
||||
* @param type $iTargetId
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param string $sEventType Тип события
|
||||
* @param int $iTargetId ID владельца
|
||||
* @param int $iPublish Статус
|
||||
* @return bool
|
||||
*/
|
||||
public function Write($iUserId, $sEventType, $iTargetId, $iPublish=1) {
|
||||
$iPublish=(int)$iPublish;
|
||||
|
@ -195,9 +209,9 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Чтение потока пользователя
|
||||
*
|
||||
* @param int $iCount
|
||||
* @param int $iFromId
|
||||
* @param int $iUserId
|
||||
* @param int|null $iCount Количество
|
||||
* @param int|null $iFromId ID события с которого начинать выборку
|
||||
* @param int|null $iUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function Read($iCount=null,$iFromId=null,$iUserId=null) {
|
||||
|
@ -219,12 +233,11 @@ class ModuleStream extends Module {
|
|||
|
||||
return $this->ReadEvents($aEventTypes,$aUsersList,$iCount,$iFromId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Чтение всей активности на сайте
|
||||
*
|
||||
* @param int $iCount
|
||||
* @param int $iFromId
|
||||
* @param int|null $iCount Количество
|
||||
* @param int|null $iFromId ID события с которого начинать выборку
|
||||
* @return array
|
||||
*/
|
||||
public function ReadAll($iCount=null,$iFromId=null) {
|
||||
|
@ -238,8 +251,9 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Чтение активности конкретного пользователя
|
||||
*
|
||||
* @param int $iCount
|
||||
* @param int $iUserId
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param int|null $iCount Количество
|
||||
* @param int|null $iFromId ID события с которого начинать выборку
|
||||
* @return array
|
||||
*/
|
||||
public function ReadByUserId($iUserId,$iCount=null,$iFromId=null) {
|
||||
|
@ -254,11 +268,10 @@ class ModuleStream extends Module {
|
|||
|
||||
return $this->ReadEvents($aEventTypes,$aUsersList,$iCount,$iFromId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Количество событий конкретного пользователя
|
||||
*
|
||||
* @param $iUserId
|
||||
* @param int $iUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountByUserId($iUserId) {
|
||||
|
@ -270,11 +283,10 @@ class ModuleStream extends Module {
|
|||
|
||||
return $this->oMapper->GetCount($aEventTypes, $iUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Количество событий на которые подписан пользователь
|
||||
*
|
||||
* @param $iUserId
|
||||
* @param int $iUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountByReaderId($iUserId) {
|
||||
|
@ -290,7 +302,6 @@ class ModuleStream extends Module {
|
|||
|
||||
return $this->oMapper->GetCount($aEventTypes, $aUsersList);
|
||||
}
|
||||
|
||||
/**
|
||||
* Количество событий на всем сайте
|
||||
*
|
||||
|
@ -305,15 +316,23 @@ class ModuleStream extends Module {
|
|||
|
||||
return $this->oMapper->GetCount($aEventTypes, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Количество событий для пользователя
|
||||
*
|
||||
* @param array $aEventTypes Список типов событий
|
||||
* @param array|null $aUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCount($aEventTypes, $aUserId=null) {
|
||||
return $this->oMapper->GetCount($aEventTypes, $aUserId);
|
||||
}
|
||||
/**
|
||||
* @param array $aEventTypes
|
||||
* @param array | null $aUsersList
|
||||
* @param int $iCount
|
||||
* @param int $iFromId
|
||||
* Чтение событий
|
||||
*
|
||||
* @param array $aEventTypes Список типов событий
|
||||
* @param array|null $aUsersList Список пользователей, чьи события читать
|
||||
* @param int $iCount Количество
|
||||
* @param int $iFromId ID события с которого начинать выборку
|
||||
* @return array
|
||||
*/
|
||||
public function ReadEvents($aEventTypes,$aUsersList,$iCount=null,$iFromId=null) {
|
||||
|
@ -324,7 +343,6 @@ class ModuleStream extends Module {
|
|||
|
||||
$aEventTypes=$this->getEventTypesFilter($aEventTypes);
|
||||
if (!count($aEventTypes)) return array();
|
||||
|
||||
/**
|
||||
* Получаем список событий
|
||||
*/
|
||||
|
@ -384,26 +402,29 @@ class ModuleStream extends Module {
|
|||
}
|
||||
return $aEvents;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение типов событий, на которые подписан пользователь
|
||||
* @param type $iUserId
|
||||
* @return type
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function getTypesList($iUserId) {
|
||||
return $this->oMapper->getTypesList($iUserId);
|
||||
}
|
||||
/**
|
||||
* Получение списка id пользователей, на которых подписан пользователь
|
||||
* @return type
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
protected function getUsersList($iUserId) {
|
||||
return $this->oMapper->getUserSubscribes($iUserId);
|
||||
}
|
||||
/**
|
||||
* Получение списка пользователей, на которых подписан пользователь
|
||||
* @param type $iUserId
|
||||
* @return type
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function getUserSubscribes($iUserId) {
|
||||
$aIds = $this->oMapper->getUserSubscribes($iUserId);
|
||||
|
@ -412,8 +433,8 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Проверяет подписан ли пользователь на конкретного пользователя
|
||||
*
|
||||
* @param $iUserId
|
||||
* @param $iTargetUserId
|
||||
* @param $iUserId ID пользователя
|
||||
* @param $iTargetUserId ID пользователя на которого подписан
|
||||
* @return bool
|
||||
*/
|
||||
public function IsSubscribe($iUserId,$iTargetUserId) {
|
||||
|
@ -421,9 +442,10 @@ class ModuleStream extends Module {
|
|||
}
|
||||
/**
|
||||
* Редактирование списка событий, на которые подписан юзер
|
||||
* @param int $iUserId
|
||||
* @param string $sType
|
||||
* @return type
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param string $sType Тип
|
||||
* @return bool
|
||||
*/
|
||||
public function switchUserEventType($iUserId, $sType) {
|
||||
if ($this->IsAllowEventType($sType)) {
|
||||
|
@ -434,7 +456,7 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Переключает дефолтный список типов событий у пользователя
|
||||
*
|
||||
* @param int $iUserId
|
||||
* @param int $iUserId ID пользователя
|
||||
*/
|
||||
public function switchUserEventDefaultTypes($iUserId) {
|
||||
foreach($this->aEventDefaultTypes as $sType) {
|
||||
|
@ -443,28 +465,27 @@ class ModuleStream extends Module {
|
|||
}
|
||||
/**
|
||||
* Подписать пользователя
|
||||
* @param type $iUserId Id подписываемого пользователя
|
||||
* @param type $iSubscribeType Тип подписки (см. константы класса)
|
||||
* @param type $iTargetId Id цели подписки
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param int $iTargetUserId ID пользователя на которого подписываем
|
||||
*/
|
||||
public function subscribeUser($iUserId, $iTargetUserId) {
|
||||
return $this->oMapper->subscribeUser($iUserId, $iTargetUserId);
|
||||
$this->oMapper->subscribeUser($iUserId, $iTargetUserId);
|
||||
}
|
||||
/**
|
||||
* Отписать пользователя
|
||||
* @param type $iUserId Id подписываемого пользователя
|
||||
* @param type $iSubscribeType Тип подписки (см. константы класса)
|
||||
* @param type $iTargetId Id цели подписки
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param int $iTargetUserId ID пользователя на которого подписываем
|
||||
*/
|
||||
public function unsubscribeUser($iUserId, $iTargetUserId) {
|
||||
return $this->oMapper->unsubscribeUser($iUserId, $iTargetUserId);
|
||||
$this->oMapper->unsubscribeUser($iUserId, $iTargetUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает список записей на стене
|
||||
*
|
||||
* @param unknown_type $aIds
|
||||
* @return unknown
|
||||
* @param array $aIds Список ID записей на стене
|
||||
* @return array
|
||||
*/
|
||||
protected function loadRelatedWall($aIds) {
|
||||
return $this->Wall_GetWallAdditionalData($aIds);
|
||||
|
@ -472,8 +493,8 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Получает список топиков
|
||||
*
|
||||
* @param unknown_type $aIds
|
||||
* @return unknown
|
||||
* @param array $aIds Список ID топиков
|
||||
* @return array
|
||||
*/
|
||||
protected function loadRelatedTopic($aIds) {
|
||||
return $this->Topic_GetTopicsAdditionalData($aIds);
|
||||
|
@ -481,8 +502,8 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Получает список блогов
|
||||
*
|
||||
* @param unknown_type $aIds
|
||||
* @return unknown
|
||||
* @param array $aIds Список ID блогов
|
||||
* @return array
|
||||
*/
|
||||
protected function loadRelatedBlog($aIds) {
|
||||
return $this->Blog_GetBlogsAdditionalData($aIds);
|
||||
|
@ -490,8 +511,8 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Получает список комментариев
|
||||
*
|
||||
* @param unknown_type $aIds
|
||||
* @return unknown
|
||||
* @param array $aIds Список ID комментариев
|
||||
* @return array
|
||||
*/
|
||||
protected function loadRelatedComment($aIds) {
|
||||
return $this->Comment_GetCommentsAdditionalData($aIds);
|
||||
|
@ -500,8 +521,8 @@ class ModuleStream extends Module {
|
|||
/**
|
||||
* Получает список пользователей
|
||||
*
|
||||
* @param unknown_type $aIds
|
||||
* @return unknown
|
||||
* @param array $aIds Список ID пользователей
|
||||
* @return array
|
||||
*/
|
||||
protected function loadRelatedUser($aIds) {
|
||||
return $this->User_GetUsersAdditionalData($aIds);
|
||||
|
|
|
@ -15,6 +15,13 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Объект сущности события в активности
|
||||
*
|
||||
* @package modules.stream
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleStream_EntityEvent extends Entity {
|
||||
|
||||
}
|
||||
?>
|
|
@ -15,8 +15,19 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Объект маппера для работы с БД
|
||||
*
|
||||
* @package modules.stream
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleStream_MapperStream extends Mapper {
|
||||
|
||||
/**
|
||||
* Добавление события в БД
|
||||
*
|
||||
* @param ModuleStream_EntityEvent $oObject
|
||||
* @return int|bool
|
||||
*/
|
||||
public function AddEvent($oObject) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.stream_event')." SET ?a ";
|
||||
if ($iId=$this->oDb->query($sql,$oObject->_getData())) {
|
||||
|
@ -24,7 +35,14 @@ class ModuleStream_MapperStream extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает событие по типу и его ID
|
||||
*
|
||||
* @param string $sEventType Тип
|
||||
* @param int $iTargetId ID владельца события
|
||||
* @param int|null $iUserId ID пользователя
|
||||
* @return ModuleStream_EntityEvent
|
||||
*/
|
||||
public function GetEventByTarget($sEventType, $iTargetId, $iUserId=null) {
|
||||
$sql = "SELECT * FROM
|
||||
".Config::Get('db.table.stream_event')."
|
||||
|
@ -34,24 +52,46 @@ class ModuleStream_MapperStream extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновление события
|
||||
*
|
||||
* @param ModuleStream_EntityEvent $oObject Объект события
|
||||
* @return int
|
||||
*/
|
||||
public function UpdateEvent($oObject) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.stream_event')." SET ?a WHERE id = ?d ";
|
||||
return $this->oDb->query($sql,$oObject->_getData(array('publish')),$oObject->getId());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получение типов событий, на которые подписан пользователь
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function getTypesList($iUserId) {
|
||||
$sql = 'SELECT event_type FROM ' . Config::Get('db.table.stream_user_type') . ' WHERE user_id = ?d';
|
||||
$aRet = $this->oDb->selectCol($sql, $iUserId);
|
||||
return $aRet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение списка пользователей, на которых подписан пользователь
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function getUserSubscribes($iUserId) {
|
||||
$sql = 'SELECT target_user_id FROM ' . Config::Get('db.table.stream_subscribe') . ' WHERE user_id = ?d';
|
||||
return $this->oDb->selectCol($sql, $iUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Чтение событий
|
||||
*
|
||||
* @param array $aEventTypes Список типов событий
|
||||
* @param array|null $aUsersList Список пользователей, чьи события читать
|
||||
* @param int $iCount Количество
|
||||
* @param int $iFromId ID события с которого начинать выборку
|
||||
* @return array
|
||||
*/
|
||||
public function Read($aEventTypes, $aUsersList, $iCount, $iFromId) {
|
||||
$sql = 'SELECT * FROM ' . Config::Get('db.table.stream_event'). '
|
||||
WHERE
|
||||
|
@ -70,7 +110,13 @@ class ModuleStream_MapperStream extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Количество событий для пользователя
|
||||
*
|
||||
* @param array $aEventTypes Список типов событий
|
||||
* @param array|null $aUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCount($aEventTypes, $aUserId) {
|
||||
if (!is_null($aUserId) and !is_array($aUserId)) {
|
||||
$aUserId=array($aUserId);
|
||||
|
@ -85,7 +131,13 @@ class ModuleStream_MapperStream extends Mapper {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Редактирование списка событий, на которые подписан юзер
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param string $sEventType Тип
|
||||
* @return bool
|
||||
*/
|
||||
public function switchUserEventType($iUserId, $sEventType) {
|
||||
$sql = 'SELECT * FROM ' . Config::Get('db.table.stream_user_type') . ' WHERE user_id = ?d AND event_type = ?';
|
||||
if ($this->oDb->select($sql, $iUserId, $sEventType)) {
|
||||
|
@ -95,7 +147,12 @@ class ModuleStream_MapperStream extends Mapper {
|
|||
}
|
||||
$this->oDb->query($sql, $iUserId, $sEventType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Подписать пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param int $iTargetUserId ID пользователя на которого подписываем
|
||||
*/
|
||||
public function subscribeUser($iUserId, $iTargetUserId) {
|
||||
$sql = 'SELECT * FROM ' . Config::Get('db.table.stream_subscribe') . ' WHERE
|
||||
user_id = ?d AND target_user_id = ?d';
|
||||
|
@ -105,13 +162,24 @@ class ModuleStream_MapperStream extends Mapper {
|
|||
$this->oDb->query($sql, $iUserId, $iTargetUserId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Отписать пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param int $iTargetUserId ID пользователя на которого подписываем
|
||||
*/
|
||||
public function unsubscribeUser($iUserId, $iTargetUserId) {
|
||||
$sql = 'DELETE FROM ' . Config::Get('db.table.stream_subscribe') . ' WHERE
|
||||
user_id = ?d AND target_user_id = ?d';
|
||||
$this->oDb->query($sql, $iUserId, $iTargetUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет подписан ли пользователь на конкретного пользователя
|
||||
*
|
||||
* @param $iUserId ID пользователя
|
||||
* @param $iTargetUserId ID пользователя на которого подписан
|
||||
* @return bool
|
||||
*/
|
||||
public function IsSubscribe($iUserId,$iTargetUserId) {
|
||||
$sql = 'SELECT * FROM ' . Config::Get('db.table.stream_subscribe') . ' WHERE
|
||||
user_id = ?d AND target_user_id = ?d LIMIT 0,1';
|
||||
|
@ -120,5 +188,4 @@ class ModuleStream_MapperStream extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -18,10 +18,21 @@
|
|||
/**
|
||||
* Модуль Subscribe - подписки пользователей
|
||||
*
|
||||
* @package modules.subscribe
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleSubscribe extends Module {
|
||||
|
||||
class ModuleSubscribe extends Module {
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleSubscribe_MapperSubscribe
|
||||
*/
|
||||
protected $oMapper;
|
||||
/**
|
||||
* Объект текущего пользователя
|
||||
*
|
||||
* @var ModuleUser_EntityUser|null
|
||||
*/
|
||||
protected $oUserCurrent;
|
||||
/**
|
||||
* Список доступных объектов подписок с параметрами
|
||||
|
@ -32,26 +43,29 @@ class ModuleSubscribe extends Module {
|
|||
protected $aTargetTypes=array(
|
||||
'topic_new_comment' => array(),
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
public function Init() {
|
||||
$this->oMapper=Engine::GetMapper(__CLASS__);
|
||||
$this->oUserCurrent=$this->User_GetUserCurrent();
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список типов объектов для облаты
|
||||
* Возвращает список типов объектов
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function GetTargetTypes() {
|
||||
return $this->aTargetTypes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет в разрешенные новый тип
|
||||
* @param unknown_type $sTargetType
|
||||
*
|
||||
* @param string $sTargetType Тип
|
||||
* @param array $aParams Параметры
|
||||
* @return bool
|
||||
*/
|
||||
public function AddTargetType($sTargetType,$aParams=array()) {
|
||||
if (!array_key_exists($sTargetType,$this->aTargetTypes)) {
|
||||
|
@ -60,23 +74,22 @@ class ModuleSubscribe extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет разрешен ли данный тип в подписке
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param string $sTargetType Тип
|
||||
* @return bool
|
||||
*/
|
||||
public function IsAllowTargetType($sTargetType) {
|
||||
return in_array($sTargetType,array_keys($this->aTargetTypes));
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверка объекта подписки
|
||||
*
|
||||
* @param string $sTargetType
|
||||
* @param int $iTargetId
|
||||
* @param int $iCheckType
|
||||
* @param string $sTargetType Тип
|
||||
* @param int $iTargetId ID владельца
|
||||
* @param int $iStatus Статус подписки
|
||||
* @return bool
|
||||
*/
|
||||
public function CheckTarget($sTargetType,$iTargetId,$iStatus=null) {
|
||||
$sMethod = 'CheckTarget'.func_camelize($sTargetType);
|
||||
|
@ -85,13 +98,13 @@ class ModuleSubscribe extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает URL страницы с объектом подписки
|
||||
* Актуально при переходе по ссылки с отпиской от рассылки и последующим редиректом
|
||||
*
|
||||
* @param string $sTargetType
|
||||
* @param int $iTargetId
|
||||
* @param string $sTargetType Тип
|
||||
* @param int $iTargetId ID владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function GetUrlTarget($sTargetType,$iTargetId) {
|
||||
$sMethod = 'GetUrlTarget'.func_camelize($sTargetType);
|
||||
|
@ -100,11 +113,10 @@ class ModuleSubscribe extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверка на подписку для гостей
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param string $sTargetType Тип
|
||||
* @return bool
|
||||
*/
|
||||
public function IsAllowTargetForGuest($sTargetType) {
|
||||
|
@ -115,12 +127,11 @@ class ModuleSubscribe extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет подписку в БД
|
||||
*
|
||||
* @param $oSubscribe
|
||||
* @return ModuleSubscribe_EntitySubscribe | bool
|
||||
* @param ModuleSubscribe_EntitySubscribe $oSubscribe Объект подписки
|
||||
* @return ModuleSubscribe_EntitySubscribe|bool
|
||||
*/
|
||||
public function AddSubscribe($oSubscribe) {
|
||||
if ($sId=$this->oMapper->AddSubscribe($oSubscribe)) {
|
||||
|
@ -129,16 +140,18 @@ class ModuleSubscribe extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Создает подписку, если уже есть, то возвращает существующую
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param $sTargetId
|
||||
* @param $sMail
|
||||
* @return ModuleSubscribe_EntitySubscribe
|
||||
* @param string $sTargetType Тип
|
||||
* @param string $sTargetId ID владельца
|
||||
* @param string $sMail Емайл
|
||||
* @return ModuleSubscribe_EntitySubscribe|bool
|
||||
*/
|
||||
public function AddSubscribeSimple($sTargetType,$sTargetId,$sMail) {
|
||||
if (!$sMail) {
|
||||
return false;
|
||||
}
|
||||
if (!($oSubscribe=$this->Subscribe_GetSubscribeByTargetAndMail($sTargetType,$sTargetId,$sMail))) {
|
||||
$oSubscribe=Engine::GetEntity('Subscribe');
|
||||
$oSubscribe->setTargetType($sTargetType);
|
||||
|
@ -152,31 +165,34 @@ class ModuleSubscribe extends Module {
|
|||
}
|
||||
return $oSubscribe;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновление подписки
|
||||
*
|
||||
* @param ModuleSubscribe_EntitySubscribe $oSubscribe Объект подписки
|
||||
* @return int
|
||||
*/
|
||||
public function UpdateSubscribe($oSubscribe) {
|
||||
return $this->oMapper->UpdateSubscribe($oSubscribe);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список подписок по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
* @param $aOrder
|
||||
* @param $iCurrPage
|
||||
* @param $iPerPage
|
||||
* @return array
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetSubscribes($aFilter,$aOrder,$iCurrPage,$iPerPage) {
|
||||
return array('collection'=>$this->oMapper->GetSubscribes($aFilter,$aOrder,$iCount,$iCurrPage,$iPerPage),'count'=>$iCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает подписку по объекту подписки и емайлу
|
||||
*
|
||||
* @param $sTargetType
|
||||
* @param $iTargetId
|
||||
* @param $sMail
|
||||
* @return ModuleSubscribe_EntitySubscribe
|
||||
* @param string $sTargetType Тип
|
||||
* @param int $iTargetId ID владельца
|
||||
* @param string $sMail Емайл
|
||||
* @return ModuleSubscribe_EntitySubscribe|null
|
||||
*/
|
||||
public function GetSubscribeByTargetAndMail($sTargetType,$iTargetId,$sMail) {
|
||||
$aRes=$this->GetSubscribes(array('target_type'=>$sTargetType,'target_id'=>$iTargetId,'mail'=>$sMail),array(),1,1);
|
||||
|
@ -185,12 +201,11 @@ class ModuleSubscribe extends Module {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает подписку по ключу
|
||||
*
|
||||
* @param $sKey
|
||||
* @return ModuleSubscribe_EntitySubscribe
|
||||
* @param string $sKey Ключ
|
||||
* @return ModuleSubscribe_EntitySubscribe|null
|
||||
*/
|
||||
public function GetSubscribeByKey($sKey) {
|
||||
$aRes=$this->GetSubscribes(array('key'=>$sKey),array(),1,1);
|
||||
|
@ -199,17 +214,16 @@ class ModuleSubscribe extends Module {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Производит отправку писем по подписчикам подписки
|
||||
*
|
||||
* @param $sTargetType Тип объекта подписки
|
||||
* @param $iTargetId ID объекта подписки
|
||||
* @param $sTemplate Имя шаблона письма, например, notify.mail.tpl
|
||||
* @param $sTitle Заголовок письма
|
||||
* @param int $sTargetType Тип объекта подписки
|
||||
* @param int $iTargetId ID объекта подписки
|
||||
* @param string $sTemplate Имя шаблона письма, например, notify.mail.tpl
|
||||
* @param string $sTitle Заголовок письма
|
||||
* @param array $aParams Параметра для передачи в шаблон письма
|
||||
* @param array $aExcludeMail Список емайлов на которые НЕ нужно отправлять
|
||||
* @param string $sPluginName Название или класс плагина для корректной отправки
|
||||
*/
|
||||
public function Send($sTargetType,$iTargetId,$sTemplate,$sTitle,$aParams=array(),$aExcludeMail=array(),$sPluginName=null) {
|
||||
$iPage=1;
|
||||
|
@ -229,14 +243,13 @@ class ModuleSubscribe extends Module {
|
|||
$aSubscribes=$this->Subscribe_GetSubscribes(array('target_type'=>$sTargetType,'target_id'=>$iTargetId,'status'=>1),array(),$iPage,20);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Проверка объекта подписки с типом "topic_new_comment"
|
||||
* Название метода формируется автоматически
|
||||
*
|
||||
* @param int $iTargetId
|
||||
* @param int $iStatus
|
||||
* @param int $iTargetId ID владельца
|
||||
* @param int $iStatus Статус
|
||||
* @return bool
|
||||
*/
|
||||
public function CheckTargetTopicNewComment($iTargetId,$iStatus) {
|
||||
if ($oTopic=$this->Topic_GetTopicById($iTargetId)) {
|
||||
|
@ -253,13 +266,12 @@ class ModuleSubscribe extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает URL на страницы объекта подписки с типом "topic_new_comment"
|
||||
* Название метода формируется автоматически
|
||||
*
|
||||
* @param $iTargetId
|
||||
* @return bool
|
||||
* @param int $iTargetId ID топика
|
||||
* @return string|bool
|
||||
*/
|
||||
public function GetUrlTargetTopicNewComment($iTargetId) {
|
||||
if ($oTopic=$this->Topic_GetTopicById($iTargetId) and $oTopic->getPublish()) {
|
||||
|
|
|
@ -15,7 +15,13 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleSubscribe_EntitySubscribe extends Entity {
|
||||
|
||||
/**
|
||||
* Объект сущности подписки
|
||||
*
|
||||
* @package modules.subscribe
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleSubscribe_EntitySubscribe extends Entity {
|
||||
|
||||
}
|
||||
?>
|
|
@ -15,17 +15,33 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleSubscribe_MapperSubscribe extends Mapper {
|
||||
|
||||
/**
|
||||
* Объект маппера для работы с БД
|
||||
*
|
||||
* @package modules.subscribe
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleSubscribe_MapperSubscribe extends Mapper {
|
||||
/**
|
||||
* Добавляет подписку в БД
|
||||
*
|
||||
* @param ModuleSubscribe_EntitySubscribe $oSubscribe Объект подписки
|
||||
* @return int|bool
|
||||
*/
|
||||
public function AddSubscribe($oSubscribe) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.subscribe')." SET ?a ";
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.subscribe')." SET ?a ";
|
||||
if ($iId=$this->oDb->query($sql,$oSubscribe->_getData())) {
|
||||
return $iId;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получение подписки по типы и емайлу
|
||||
*
|
||||
* @param string $sType Тип
|
||||
* @param string $sMail Емайл
|
||||
* @return ModuleSubscribe_EntitySubscribe|null
|
||||
*/
|
||||
public function GetSubscribeByTypeAndMail($sType,$sMail) {
|
||||
$sql = "SELECT * FROM ".Config::Get('db.table.subscribe')." WHERE target_type = ? and mail = ?";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sType,$sMail)) {
|
||||
|
@ -33,21 +49,33 @@ class ModuleSubscribe_MapperSubscribe extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Обновление подписки
|
||||
*
|
||||
* @param ModuleSubscribe_EntitySubscribe $oSubscribe Объект подписки
|
||||
* @return int
|
||||
*/
|
||||
public function UpdateSubscribe($oSubscribe) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.subscribe')."
|
||||
SET
|
||||
status = ?,
|
||||
date_remove = ?
|
||||
WHERE id = ?d
|
||||
";
|
||||
";
|
||||
return $this->oDb->query($sql,$oSubscribe->getStatus(),
|
||||
$oSubscribe->getDateRemove(),
|
||||
$oSubscribe->getId());
|
||||
$oSubscribe->getDateRemove(),
|
||||
$oSubscribe->getId());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает список подписок по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetSubscribes($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$aOrderAllow=array('id','date_add','status');
|
||||
$sOrder='';
|
||||
|
|
|
@ -18,16 +18,35 @@
|
|||
/**
|
||||
* Модуль разговоров(почта)
|
||||
*
|
||||
* @package modules.talk
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleTalk extends Module {
|
||||
/**
|
||||
* Статус TalkUser в базе данных
|
||||
* Пользователь активен в разговоре
|
||||
*/
|
||||
const TALK_USER_ACTIVE = 1;
|
||||
/**
|
||||
* Пользователь удалил разговор
|
||||
*/
|
||||
const TALK_USER_DELETE_BY_SELF = 2;
|
||||
/**
|
||||
* Пользователя удалил из разговора автор письма
|
||||
*/
|
||||
const TALK_USER_DELETE_BY_AUTHOR = 4;
|
||||
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleTalk_MapperTalk
|
||||
*/
|
||||
protected $oMapper;
|
||||
/**
|
||||
* Объект текущего пользователя
|
||||
*
|
||||
* @var ModuleUser_EntityUser|null
|
||||
*/
|
||||
protected $oUserCurrent=null;
|
||||
|
||||
/**
|
||||
|
@ -41,11 +60,13 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Формирует и отправляет личное сообщение
|
||||
*
|
||||
* @param string $sTitle
|
||||
* @param string $sText
|
||||
* @param int | ModuleUser_EntityUser $oUserFrom
|
||||
* @param array | int | ModuleUser_EntityUser $aUserTo
|
||||
* @param bool $bSendNotify
|
||||
* @param string $sTitle Заголовок сообщения
|
||||
* @param string $sText Текст сообщения
|
||||
* @param int|ModuleUser_EntityUser $oUserFrom Пользователь от которого отправляем
|
||||
* @param array|int|ModuleUser_EntityUser $aUserTo Пользователь которому отправляем
|
||||
* @param bool $bSendNotify Отправлять или нет уведомление на емайл
|
||||
* @param bool $bUseBlacklist Исклюать или нет пользователей из блэклиста
|
||||
* @return ModuleTalk_EntityTalk|bool
|
||||
*/
|
||||
public function SendTalk($sTitle,$sText,$oUserFrom,$aUserTo,$bSendNotify=true,$bUseBlacklist=true) {
|
||||
$iUserIdFrom=$oUserFrom instanceof ModuleUser_EntityUser ? $oUserFrom->getId() : (int)$oUserFrom;
|
||||
|
@ -101,8 +122,8 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Добавляет новую тему разговора
|
||||
*
|
||||
* @param ModuleTopic_EntityTopic $oTalk
|
||||
* @return unknown
|
||||
* @param ModuleTalk_EntityTalk $oTalk Объект сообщения
|
||||
* @return ModuleTalk_EntityTalk|bool
|
||||
*/
|
||||
public function AddTalk(ModuleTalk_EntityTalk $oTalk) {
|
||||
if ($sId=$this->oMapper->AddTalk($oTalk)) {
|
||||
|
@ -116,17 +137,19 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Обновление разговора
|
||||
*
|
||||
* @param ModuleTalk_EntityTalk $oTalk
|
||||
* @param ModuleTalk_EntityTalk $oTalk Объект сообщения
|
||||
* @return int
|
||||
*/
|
||||
public function UpdateTalk(ModuleTalk_EntityTalk $oTalk) {
|
||||
$this->Cache_Delete("talk_{$oTalk->getId()}");
|
||||
return $this->oMapper->UpdateTalk($oTalk);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получает дополнительные данные(объекты) для разговоров по их ID
|
||||
*
|
||||
* @param array $aTalkId Список ID сообщений
|
||||
* @param array|null $aAllowData Список дополнительных типов подгружаемых в объект
|
||||
* @return array
|
||||
*/
|
||||
public function GetTalksAdditionalData($aTalkId,$aAllowData=null) {
|
||||
if (is_null($aAllowData)) {
|
||||
|
@ -205,7 +228,8 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Получить список разговоров по списку айдишников
|
||||
*
|
||||
* @param unknown_type $aTalkId
|
||||
* @param array $aTalkId Список ID сообщений
|
||||
* @return array
|
||||
*/
|
||||
public function GetTalksByArrayId($aTalkId) {
|
||||
if (Config::Get('sys.cache.solid')) {
|
||||
|
@ -263,6 +287,12 @@ class ModuleTalk extends Module {
|
|||
$aTalks=func_array_sort_by_keys($aTalks,$aTalkId);
|
||||
return $aTalks;
|
||||
}
|
||||
/**
|
||||
* Получить список разговоров по списку айдишников, используя общий кеш
|
||||
*
|
||||
* @param array $aTalkId Список ID сообщений
|
||||
* @return array
|
||||
*/
|
||||
public function GetTalksByArrayIdSolid($aTalkId) {
|
||||
if (!is_array($aTalkId)) {
|
||||
$aTalkId=array($aTalkId);
|
||||
|
@ -283,7 +313,9 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Получить список отношений разговор-юзер по списку айдишников
|
||||
*
|
||||
* @param unknown_type $aTalkId
|
||||
* @param array $aTalkId Список ID сообщений
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetTalkUsersByArray($aTalkId,$sUserId) {
|
||||
if (!is_array($aTalkId)) {
|
||||
|
@ -341,10 +373,13 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Получает тему разговора по айдишнику
|
||||
*
|
||||
* @param unknown_type $sId
|
||||
* @return unknown
|
||||
* @param int $sId ID сообщения
|
||||
* @return ModuleTalk_EntityTalk|null
|
||||
*/
|
||||
public function GetTalkById($sId) {
|
||||
if (!is_numeric($sId)) {
|
||||
return null;
|
||||
}
|
||||
$aTalks=$this->GetTalksAdditionalData($sId);
|
||||
if (isset($aTalks[$sId])) {
|
||||
$aResult=$this->GetTalkUsersByTalkId($sId);
|
||||
|
@ -359,8 +394,8 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Добавляет юзера к разговору(теме)
|
||||
*
|
||||
* @param ModuleTalk_EntityTalkUser $oTalkUser
|
||||
* @return unknown
|
||||
* @param ModuleTalk_EntityTalkUser $oTalkUser Объект связи пользователя и сообщения(разговора)
|
||||
* @return bool
|
||||
*/
|
||||
public function AddTalkUser(ModuleTalk_EntityTalkUser $oTalkUser) {
|
||||
$this->Cache_Delete("talk_{$oTalkUser->getTalkId()}");
|
||||
|
@ -375,8 +410,8 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Помечает разговоры как прочитанные
|
||||
*
|
||||
* @param $aTalkId
|
||||
* @param $iUserId
|
||||
* @param array $aTalkId Список ID сообщений
|
||||
* @param int $iUserId ID пользователя
|
||||
*/
|
||||
public function MarkReadTalkUserByArray($aTalkId,$iUserId) {
|
||||
if(!is_array($aTalkId)){
|
||||
|
@ -398,10 +433,12 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Удаляет юзера из разговора
|
||||
*
|
||||
* @param ModuleTalk_EntityTalkUser $oTalkUser
|
||||
* @return unknown
|
||||
* @param array $aTalkId Список ID сообщений
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iActive Статус связи
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTalkUserByArray($aTalkId,$sUserId,$iAcitve=self::TALK_USER_DELETE_BY_SELF) {
|
||||
public function DeleteTalkUserByArray($aTalkId,$sUserId,$iActive=self::TALK_USER_DELETE_BY_SELF) {
|
||||
if(!is_array($aTalkId)){
|
||||
$aTalkId=array($aTalkId);
|
||||
}
|
||||
|
@ -412,7 +449,7 @@ class ModuleTalk extends Module {
|
|||
array(
|
||||
'target_id' => $sTalkId,
|
||||
'target_type' => 'talk',
|
||||
'user_id' => $this->oUserCurrent->getId()
|
||||
'user_id' => $sUserId
|
||||
)
|
||||
)
|
||||
);
|
||||
|
@ -425,7 +462,7 @@ class ModuleTalk extends Module {
|
|||
);
|
||||
}
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("update_talk_user"));
|
||||
$ret = $this->oMapper->DeleteTalkUserByArray($aTalkId,$sUserId,$iAcitve);
|
||||
$ret = $this->oMapper->DeleteTalkUserByArray($aTalkId,$sUserId,$iActive);
|
||||
|
||||
// Удаляем пустые беседы, если в них нет пользователей
|
||||
foreach ($aTalkId as $sTalkId) {
|
||||
|
@ -438,9 +475,9 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Есть ли юзер в этом разговоре
|
||||
*
|
||||
* @param unknown_type $sTalkId
|
||||
* @param unknown_type $sUserId
|
||||
* @return unknown
|
||||
* @param int $sTalkId ID разговора
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return ModuleTalk_EntityTalkUser|null
|
||||
*/
|
||||
public function GetTalkUser($sTalkId,$sUserId) {
|
||||
$aTalkUser=$this->GetTalkUsersByArray($sTalkId,$sUserId);
|
||||
|
@ -452,10 +489,10 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Получить все темы разговора где есть юзер
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $iPage
|
||||
* @param int $iPerPage
|
||||
* @return array
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetTalksByUserId($sUserId,$iPage,$iPerPage) {
|
||||
$data=array(
|
||||
|
@ -463,7 +500,6 @@ class ModuleTalk extends Module {
|
|||
'count'=>$iCount
|
||||
);
|
||||
$aTalks=$this->GetTalksAdditionalData($data['collection']);
|
||||
|
||||
/**
|
||||
* Добавляем данные об участниках разговора
|
||||
*/
|
||||
|
@ -477,14 +513,13 @@ class ModuleTalk extends Module {
|
|||
$data['collection']=$aTalks;
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить все темы разговора по фильтру
|
||||
*
|
||||
* @param array $aFilter
|
||||
* @param int $iPage
|
||||
* @param int $iPerPage
|
||||
* @return array
|
||||
* @param array $aFilter Фильтр
|
||||
* @param int $iPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetTalksByFilter($aFilter,$iPage,$iPerPage) {
|
||||
$data=array(
|
||||
|
@ -506,12 +541,11 @@ class ModuleTalk extends Module {
|
|||
$data['collection']=$aTalks;
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет связку разговор-юзер
|
||||
*
|
||||
* @param ModuleTalk_EntityTalkUser $oTalkUser
|
||||
* @return unknown
|
||||
* @param ModuleTalk_EntityTalkUser $oTalkUser Объект связи пользователя с разговором
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateTalkUser(ModuleTalk_EntityTalkUser $oTalkUser) {
|
||||
//чистим зависимые кеши
|
||||
|
@ -519,12 +553,11 @@ class ModuleTalk extends Module {
|
|||
$this->Cache_Delete("talk_user_{$oTalkUser->getTalkId()}_{$oTalkUser->getUserId()}");
|
||||
return $this->oMapper->UpdateTalkUser($oTalkUser);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает число новых тем и комментов где есть юзер
|
||||
*
|
||||
* @param unknown_type $sUserId
|
||||
* @return unknown
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountTalkNew($sUserId) {
|
||||
if (false === ($data = $this->Cache_Get("talk_count_all_new_user_{$sUserId}"))) {
|
||||
|
@ -533,13 +566,11 @@ class ModuleTalk extends Module {
|
|||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получает список юзеров в теме разговора
|
||||
*
|
||||
* @param string $sTalkId
|
||||
* @param array $aActive
|
||||
* @param int $sTalkId ID разговора
|
||||
* @param array $aActive Список статусов
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersTalk($sTalkId,$aActive=array()) {
|
||||
|
@ -548,11 +579,10 @@ class ModuleTalk extends Module {
|
|||
$data=$this->oMapper->GetUsersTalk($sTalkId,$aActive);
|
||||
return $this->User_GetUsersAdditionalData($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает массив пользователей, участвующих в разговоре
|
||||
*
|
||||
* @param string $sTalkId
|
||||
* @param int $sTalkId ID разговора
|
||||
* @return array
|
||||
*/
|
||||
public function GetTalkUsersByTalkId($sTalkId) {
|
||||
|
@ -578,59 +608,55 @@ class ModuleTalk extends Module {
|
|||
}
|
||||
return $aTalkUsers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Увеличивает число новых комментов у юзеров
|
||||
*
|
||||
* @param unknown_type $sTalkId
|
||||
* @param unknown_type $aExcludeId
|
||||
* @return unknown
|
||||
* @param int $sTalkId ID разговора
|
||||
* @param array $aExcludeId Список ID пользователей для исключения
|
||||
* @return int
|
||||
*/
|
||||
public function increaseCountCommentNew($sTalkId,$aExcludeId=null) {
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("update_talk_user_{$sTalkId}"));
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("update_talk_user"));
|
||||
return $this->oMapper->increaseCountCommentNew($sTalkId,$aExcludeId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает привязку письма к ибранному(добавлено ли письмо в избранное у юзера)
|
||||
*
|
||||
* @param string $sTalkId
|
||||
* @param string $sUserId
|
||||
* @param int $sTalkId ID разговора
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return ModuleFavourite_EntityFavourite|null
|
||||
*/
|
||||
public function GetFavouriteTalk($sTalkId,$sUserId) {
|
||||
return $this->Favourite_GetFavourite($sTalkId,'talk',$sUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список избранного по списку айдишников
|
||||
*
|
||||
* @param array $aTalkId
|
||||
* @param array $aTalkId Список ID разговоров
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouriteTalkByArray($aTalkId,$sUserId) {
|
||||
return $this->Favourite_GetFavouritesByArray($aTalkId,'talk',$sUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список избранного по списку айдишников, но используя единый кеш
|
||||
*
|
||||
* @param array $aTalkId
|
||||
* @param int $sUserId
|
||||
* @param array $aTalkId Список ID разговоров
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetFavouriteTalksByArraySolid($aTalkId,$sUserId) {
|
||||
return $this->Favourite_GetFavouritesByArraySolid($aTalkId,'talk',$sUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает список писем из избранного пользователя
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $iCount
|
||||
* @param int $iCurrPage
|
||||
* @param int $iPerPage
|
||||
* @return array
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iCurrPage Номер текущей страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetTalksFavouriteByUserId($sUserId,$iCurrPage,$iPerPage) {
|
||||
// Получаем список идентификаторов избранных комментов
|
||||
|
@ -655,7 +681,7 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Возвращает число писем в избранном
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountTalksFavouriteByUserId($sUserId) {
|
||||
|
@ -664,7 +690,7 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Добавляет письмо в избранное
|
||||
*
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite Объект избранного
|
||||
* @return bool
|
||||
*/
|
||||
public function AddFavouriteTalk(ModuleFavourite_EntityFavourite $oFavourite) {
|
||||
|
@ -675,7 +701,7 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Удаляет письмо из избранного
|
||||
*
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite
|
||||
* @param ModuleFavourite_EntityFavourite $oFavourite Объект избранного
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteFavouriteTalk(ModuleFavourite_EntityFavourite $oFavourite) {
|
||||
|
@ -686,29 +712,27 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Получает информацию о пользователях, занесенных в блеклист
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetBlacklistByUserId($sUserId) {
|
||||
$data=$this->oMapper->GetBlacklistByUserId($sUserId);
|
||||
return $this->User_GetUsersAdditionalData($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает пользователей, у которых данный занесен в Blacklist
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetBlacklistByTargetId($sUserId) {
|
||||
return $this->oMapper->GetBlacklistByTargetId($sUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавление пользователя в блеклист по переданному идентификатору
|
||||
*
|
||||
* @param string $sTargetId
|
||||
* @param string $sUserId
|
||||
* @param int $sTargetId ID пользователя, которого добавляем в блэклист
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function AddUserToBlacklist($sTargetId, $sUserId) {
|
||||
|
@ -717,8 +741,8 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Добавление пользователя в блеклист по списку идентификаторов
|
||||
*
|
||||
* @param array $aTargetId
|
||||
* @param string $sUserId
|
||||
* @param array $aTargetId Список ID пользователей, которых добавляем в блэклист
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function AddUserArrayToBlacklist($aTargetId, $sUserId) {
|
||||
|
@ -730,21 +754,20 @@ class ModuleTalk extends Module {
|
|||
/**
|
||||
* Удаляем пользователя из блеклиста
|
||||
*
|
||||
* @param string $sTargetId
|
||||
* @param string $sUserId
|
||||
* @param int $sTargetId ID пользователя, которого удаляем из блэклиста
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteUserFromBlacklist($sTargetId, $sUserId) {
|
||||
return $this->oMapper->DeleteUserFromBlacklist($sTargetId, $sUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список последних инбоксов пользователя,
|
||||
* отправленных не более чем $iTimeLimit секунд назад
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $iTimeLimit
|
||||
* @param int $iCountLimit
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iTimeLimit Количество секунд
|
||||
* @param int $iCountLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetLastTalksByUserId($sUserId,$iTimeLimit,$iCountLimit=1) {
|
||||
|
@ -756,11 +779,10 @@ class ModuleTalk extends Module {
|
|||
|
||||
return $aTalks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаление письма из БД
|
||||
*
|
||||
* @param unknown_type $iTalkId
|
||||
* @param int $iTalkId ID разговора
|
||||
*/
|
||||
public function DeleteTalk($iTalkId) {
|
||||
$this->oMapper->deleteTalk($iTalkId);
|
||||
|
|
|
@ -15,40 +15,95 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleTalk_EntityTalk extends Entity
|
||||
{
|
||||
public function getId() {
|
||||
return $this->_getDataOne('talk_id');
|
||||
}
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
public function getTitle() {
|
||||
return $this->_getDataOne('talk_title');
|
||||
}
|
||||
public function getText() {
|
||||
return $this->_getDataOne('talk_text');
|
||||
}
|
||||
public function getDate() {
|
||||
return $this->_getDataOne('talk_date');
|
||||
}
|
||||
public function getDateLast() {
|
||||
return $this->_getDataOne('talk_date_last');
|
||||
}
|
||||
/**
|
||||
* Объект сущности сообщения
|
||||
*
|
||||
* @package modules.talk
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleTalk_EntityTalk extends Entity {
|
||||
/**
|
||||
* Возвращает ID сообщения
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getId() {
|
||||
return $this->_getDataOne('talk_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
/**
|
||||
* Вовзращает заголовок сообщения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTitle() {
|
||||
return $this->_getDataOne('talk_title');
|
||||
}
|
||||
/**
|
||||
* Возвращает текст сообщения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getText() {
|
||||
return $this->_getDataOne('talk_text');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату сообщения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDate() {
|
||||
return $this->_getDataOne('talk_date');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату последнего сообщения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateLast() {
|
||||
return $this->_getDataOne('talk_date_last');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID последнего пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserIdLast() {
|
||||
return $this->_getDataOne('talk_user_id_last');
|
||||
}
|
||||
public function getUserIp() {
|
||||
return $this->_getDataOne('talk_user_ip');
|
||||
}
|
||||
/**
|
||||
* Вовзращает IP пользователя
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getUserIp() {
|
||||
return $this->_getDataOne('talk_user_ip');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID последнего комментария
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCommentIdLast() {
|
||||
return $this->_getDataOne('talk_comment_id_last');
|
||||
}
|
||||
public function getCountComment() {
|
||||
return $this->_getDataOne('talk_count_comment');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает количество комментариев
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountComment() {
|
||||
return $this->_getDataOne('talk_count_comment');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает последний текст(коммент) из письма, если комментов нет, то текст исходного сообщения
|
||||
*
|
||||
|
@ -60,80 +115,168 @@ class ModuleTalk_EntityTalk extends Entity
|
|||
}
|
||||
return $this->getText();
|
||||
}
|
||||
public function getUsers() {
|
||||
return $this->_getDataOne('users');
|
||||
}
|
||||
public function getUser() {
|
||||
return $this->_getDataOne('user');
|
||||
}
|
||||
public function getTalkUser() {
|
||||
return $this->_getDataOne('talk_user');
|
||||
}
|
||||
/**
|
||||
* Возращает true, если разговор занесен в избранное
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getIsFavourite() {
|
||||
return $this->_getDataOne('talk_is_favourite');
|
||||
}
|
||||
/**
|
||||
* Получает пользователей разговора
|
||||
* Возвращает список пользователей
|
||||
*
|
||||
* @return array|null
|
||||
*/
|
||||
public function getUsers() {
|
||||
return $this->_getDataOne('users');
|
||||
}
|
||||
/**
|
||||
* Возвращает объект пользователя
|
||||
*
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function getUser() {
|
||||
return $this->_getDataOne('user');
|
||||
}
|
||||
/**
|
||||
* Возвращает объект связи пользователя с сообщением
|
||||
*
|
||||
* @return ModuleTalk_EntityTalkUser|null
|
||||
*/
|
||||
public function getTalkUser() {
|
||||
return $this->_getDataOne('talk_user');
|
||||
}
|
||||
/**
|
||||
* Возращает true, если разговор занесен в избранное
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getIsFavourite() {
|
||||
return $this->_getDataOne('talk_is_favourite');
|
||||
}
|
||||
/**
|
||||
* Возращает пользователей разговора
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTalkUsers() {
|
||||
return $this->_getDataOne('talk_users');
|
||||
}
|
||||
|
||||
|
||||
public function getTalkUsers() {
|
||||
return $this->_getDataOne('talk_users');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID сообщения
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setId($data) {
|
||||
$this->_aData['talk_id']=$data;
|
||||
}
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
public function setTitle($data) {
|
||||
$this->_aData['talk_title']=$data;
|
||||
}
|
||||
public function setText($data) {
|
||||
$this->_aData['talk_text']=$data;
|
||||
}
|
||||
public function setDate($data) {
|
||||
$this->_aData['talk_date']=$data;
|
||||
}
|
||||
public function setDateLast($data) {
|
||||
$this->_aData['talk_date_last']=$data;
|
||||
}
|
||||
$this->_aData['talk_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает заголовок сообщения
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setTitle($data) {
|
||||
$this->_aData['talk_title']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает текст сообщения
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setText($data) {
|
||||
$this->_aData['talk_text']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату разговора
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDate($data) {
|
||||
$this->_aData['talk_date']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату последнего сообщения в разговоре
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateLast($data) {
|
||||
$this->_aData['talk_date_last']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID последнего пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserIdLast($data) {
|
||||
$this->_aData['talk_user_id_last']=$data;
|
||||
}
|
||||
public function setUserIp($data) {
|
||||
$this->_aData['talk_user_ip']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает IP пользователя
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setUserIp($data) {
|
||||
$this->_aData['talk_user_ip']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID последнего комментария
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setCommentIdLast($data) {
|
||||
$this->_aData['talk_comment_id_last']=$data;
|
||||
}
|
||||
public function setCountComment($data) {
|
||||
$this->_aData['talk_count_comment']=$data;
|
||||
}
|
||||
|
||||
|
||||
public function setUsers($data) {
|
||||
$this->_aData['users']=$data;
|
||||
}
|
||||
public function setUser($data) {
|
||||
$this->_aData['user']=$data;
|
||||
}
|
||||
public function setTalkUser($data) {
|
||||
$this->_aData['talk_user']=$data;
|
||||
}
|
||||
|
||||
public function setIsFavourite($data) {
|
||||
$this->_aData['talk_is_favourite']=$data;
|
||||
}
|
||||
public function setTalkUsers($data) {
|
||||
$this->_aData['talk_users']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество комментариев
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountComment($data) {
|
||||
$this->_aData['talk_count_comment']=$data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает список пользователей
|
||||
*
|
||||
* @param array $data
|
||||
*/
|
||||
public function setUsers($data) {
|
||||
$this->_aData['users']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает объект пользователя
|
||||
*
|
||||
* @param ModuleUser_EntityUser $data
|
||||
*/
|
||||
public function setUser($data) {
|
||||
$this->_aData['user']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает объект связи
|
||||
*
|
||||
* @param ModuleTalk_EntityTalkUser $data
|
||||
*/
|
||||
public function setTalkUser($data) {
|
||||
$this->_aData['talk_user']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает факт налиция разговора в избранном текущего пользователя
|
||||
*
|
||||
* @param bool $data
|
||||
*/
|
||||
public function setIsFavourite($data) {
|
||||
$this->_aData['talk_is_favourite']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает список связей
|
||||
*
|
||||
* @param array $data
|
||||
*/
|
||||
public function setTalkUsers($data) {
|
||||
$this->_aData['talk_users']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,63 +15,127 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleTalk_EntityTalkUser extends Entity
|
||||
{
|
||||
public function getTalkId() {
|
||||
return $this->_getDataOne('talk_id');
|
||||
}
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
public function getDateLast() {
|
||||
return $this->_getDataOne('date_last');
|
||||
}
|
||||
public function getCommentIdLast() {
|
||||
return $this->_getDataOne('comment_id_last');
|
||||
}
|
||||
public function getCommentCountNew() {
|
||||
return $this->_getDataOne('comment_count_new');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает статус активности пользователя
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getUserActive(){
|
||||
/**
|
||||
* Объект связи пользователя с разовором
|
||||
*
|
||||
* @package modules.talk
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleTalk_EntityTalkUser extends Entity {
|
||||
/**
|
||||
* Возвращает ID разговора
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTalkId() {
|
||||
return $this->_getDataOne('talk_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату последнего сообщения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateLast() {
|
||||
return $this->_getDataOne('date_last');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID последнего комментария
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCommentIdLast() {
|
||||
return $this->_getDataOne('comment_id_last');
|
||||
}
|
||||
/**
|
||||
* Возвращает количество новых сообщений
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCommentCountNew() {
|
||||
return $this->_getDataOne('comment_count_new');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает статус активности пользователя
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getUserActive(){
|
||||
return $this->_getDataOne('talk_user_active') ? $this->_getDataOne('talk_user_active') : ModuleTalk::TALK_USER_ACTIVE;
|
||||
}
|
||||
/**
|
||||
* Возвращает соответствующий пользователю объект UserEntity
|
||||
*
|
||||
* @return UserEntity | null
|
||||
*/
|
||||
public function getUser() {
|
||||
return $this->_getDataOne('user');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
/**
|
||||
* Возвращает соответствующий пользователю объект
|
||||
*
|
||||
* @return ModuleUser_EntityUser | null
|
||||
*/
|
||||
public function getUser() {
|
||||
return $this->_getDataOne('user');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID разговора
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTalkId($data) {
|
||||
$this->_aData['talk_id']=$data;
|
||||
}
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
public function setDateLast($data) {
|
||||
$this->_aData['date_last']=$data;
|
||||
}
|
||||
public function setCommentIdLast($data) {
|
||||
$this->_aData['comment_id_last']=$data;
|
||||
}
|
||||
public function setCommentCountNew($data) {
|
||||
$this->_aData['comment_count_new']=$data;
|
||||
}
|
||||
|
||||
public function setUserActive($data) {
|
||||
$this->_aData['talk_user_active']=$data;
|
||||
}
|
||||
public function setUser($data) {
|
||||
$this->_aData['user']=$data;
|
||||
}
|
||||
$this->_aData['talk_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает последнюю дату
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateLast($data) {
|
||||
$this->_aData['date_last']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID последнее комментария
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCommentIdLast($data) {
|
||||
$this->_aData['comment_id_last']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество новых комментариев
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCommentCountNew($data) {
|
||||
$this->_aData['comment_count_new']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус связи
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserActive($data) {
|
||||
$this->_aData['talk_user_active']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает объект пользователя
|
||||
*
|
||||
* @param ModuleUser_EntityUser $data
|
||||
*/
|
||||
public function setUser($data) {
|
||||
$this->_aData['user']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,7 +15,19 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleTalk_MapperTalk extends Mapper {
|
||||
/**
|
||||
* Объект маппера для работы с БД
|
||||
*
|
||||
* @package modules.talk
|
||||
* @since 1.0
|
||||
*/
|
||||
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')."
|
||||
(user_id,
|
||||
|
@ -27,14 +39,18 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
talk_user_ip
|
||||
)
|
||||
VALUES(?d, ?, ?, ?, ?, ?, ?)
|
||||
";
|
||||
";
|
||||
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';
|
||||
|
@ -43,7 +59,12 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
$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
|
||||
talk_date_last = ? ,
|
||||
|
@ -52,15 +73,20 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
talk_count_comment = ?
|
||||
WHERE
|
||||
talk_id = ?d
|
||||
";
|
||||
";
|
||||
return $this->oDb->query($sql,$oTalk->getDateLast(),$oTalk->getUserIdLast(),$oTalk->getCommentIdLast(),$oTalk->getCountComment(),$oTalk->getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список разговоров по списку айдишников
|
||||
*
|
||||
* @param array $aArrayId Список ID сообщений
|
||||
* @return array
|
||||
*/
|
||||
public function GetTalksByArrayId($aArrayId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
$sql = "SELECT
|
||||
t.*
|
||||
FROM
|
||||
|
@ -73,15 +99,21 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
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
|
||||
t.*
|
||||
FROM
|
||||
|
@ -99,8 +131,13 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
}
|
||||
return $aTalkUsers;
|
||||
}
|
||||
|
||||
public function GetTalkById($sId) {
|
||||
/**
|
||||
* Получает тему разговора по айдишнику
|
||||
*
|
||||
* @param int $sId ID сообщения
|
||||
* @return ModuleTalk_EntityTalk|null
|
||||
*/
|
||||
public function GetTalkById($sId) {
|
||||
|
||||
$sql = "SELECT
|
||||
t.*,
|
||||
|
@ -113,14 +150,18 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
AND
|
||||
t.user_id=u.user_id
|
||||
";
|
||||
|
||||
|
||||
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')."
|
||||
(talk_id,
|
||||
|
@ -131,20 +172,25 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
VALUES(?d, ?d, ?, ?d)
|
||||
ON DUPLICATE KEY
|
||||
UPDATE talk_user_active = ?d
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,
|
||||
$oTalkUser->getTalkId(),
|
||||
$oTalkUser->getUserId(),
|
||||
$oTalkUser->getDateLast(),
|
||||
$oTalkUser->getUserActive(),
|
||||
$oTalkUser->getUserActive()
|
||||
$oTalkUser->getTalkId(),
|
||||
$oTalkUser->getUserId(),
|
||||
$oTalkUser->getDateLast(),
|
||||
$oTalkUser->getUserActive(),
|
||||
$oTalkUser->getUserActive()
|
||||
)===0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function UpdateTalkUser(ModuleTalk_EntityTalkUser $oTalkUser) {
|
||||
/**
|
||||
* Обновляет связку разговор-юзер
|
||||
*
|
||||
* @param ModuleTalk_EntityTalkUser $oTalkUser Объект связи пользователя с разговором
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateTalkUser(ModuleTalk_EntityTalkUser $oTalkUser) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.talk_user')."
|
||||
SET
|
||||
date_last = ?,
|
||||
|
@ -155,8 +201,8 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
talk_id = ?d
|
||||
AND
|
||||
user_id = ?d
|
||||
";
|
||||
|
||||
";
|
||||
|
||||
if (
|
||||
$this->oDb->query(
|
||||
$sql,
|
||||
|
@ -169,15 +215,21 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Удаляет юзера из разговора
|
||||
*
|
||||
* @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')."
|
||||
SET
|
||||
|
@ -186,16 +238,19 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
talk_id IN (?a)
|
||||
AND
|
||||
user_id = ?d
|
||||
";
|
||||
if ($this->oDb->query($sql,$iActive,$aTalkId,$sUserId))
|
||||
";
|
||||
if ($this->oDb->query($sql,$iActive,$aTalkId,$sUserId))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает количество новых комментариев
|
||||
*
|
||||
* @param $sUserId
|
||||
* @return bool
|
||||
*/
|
||||
public function GetCountCommentNew($sUserId) {
|
||||
$sql = "
|
||||
SELECT
|
||||
|
@ -212,7 +267,12 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает число новых тем и комментов где есть юзер
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountTalkNew($sUserId) {
|
||||
$sql = "
|
||||
SELECT
|
||||
|
@ -231,8 +291,16 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function GetTalksByUserId($sUserId,&$iCount,$iCurrPage,$iPerPage) {
|
||||
/**
|
||||
* Получить все темы разговора где есть юзер
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetTalksByUserId($sUserId,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$sql = "SELECT
|
||||
tu.talk_id
|
||||
FROM
|
||||
|
@ -247,7 +315,7 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
ORDER BY t.talk_date_last desc, t.talk_date desc
|
||||
LIMIT ?d, ?d
|
||||
";
|
||||
|
||||
|
||||
$aTalks=array();
|
||||
if ($aRows=$this->oDb->selectPage($iCount,$sql,$sUserId,ModuleTalk::TALK_USER_ACTIVE,($iCurrPage-1)*$iPerPage, $iPerPage)) {
|
||||
foreach ($aRows as $aRow) {
|
||||
|
@ -255,9 +323,14 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
}
|
||||
}
|
||||
return $aTalks;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
/**
|
||||
* Получает список юзеров в теме разговора
|
||||
*
|
||||
* @param int $sTalkId ID разговора
|
||||
* @param array $aUserActive Список статусов
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersTalk($sTalkId,$aUserActive=array()) {
|
||||
$sql = "
|
||||
SELECT
|
||||
|
@ -267,9 +340,9 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
WHERE
|
||||
talk_id = ?
|
||||
{ AND talk_user_active IN(?a) }
|
||||
";
|
||||
";
|
||||
$aReturn=array();
|
||||
if ($aRows=$this->oDb->select($sql,$sTalkId,
|
||||
if ($aRows=$this->oDb->select($sql,$sTalkId,
|
||||
(count($aUserActive) ? $aUserActive : DBSIMPLE_SKIP )
|
||||
)) {
|
||||
foreach ($aRows as $aRow) {
|
||||
|
@ -279,25 +352,30 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
|
||||
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')."
|
||||
SET comment_count_new=comment_count_new+1
|
||||
WHERE
|
||||
talk_id = ?
|
||||
{ AND user_id NOT IN (?a) }";
|
||||
{ AND user_id NOT IN (?a) }";
|
||||
return $this->oDb->select($sql,$sTalkId,!is_null($aExcludeId) ? $aExcludeId : DBSIMPLE_SKIP);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает массив участников разговора
|
||||
* Возвращает массив пользователей, участвующих в разговоре
|
||||
*
|
||||
* @param string $sTalkId
|
||||
* @param int $sTalkId ID разговора
|
||||
* @return array
|
||||
*/
|
||||
public function GetTalkUsers($sTalkId) {
|
||||
|
@ -309,7 +387,7 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
WHERE
|
||||
talk_id = ?
|
||||
|
||||
";
|
||||
";
|
||||
$aReturn=array();
|
||||
if ($aRows=$this->oDb->select($sql,$sTalkId)) {
|
||||
foreach ($aRows as $aRow) {
|
||||
|
@ -317,16 +395,16 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
}
|
||||
}
|
||||
|
||||
return $aReturn;
|
||||
return $aReturn;
|
||||
}
|
||||
/**
|
||||
* Возвращает список идентификаторов писем, удовлетворяющих условию фильтра
|
||||
* Получить все темы разговора по фильтру
|
||||
*
|
||||
* @param array $aFilter
|
||||
* @param int $iCount
|
||||
* @param int $iCurrPage
|
||||
* @param int $iPerPage
|
||||
* @return array
|
||||
* @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'])) {
|
||||
|
@ -354,7 +432,7 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
ORDER BY t.talk_date_last desc, t.talk_date desc
|
||||
LIMIT ?d, ?d
|
||||
";
|
||||
|
||||
|
||||
$aTalks=array();
|
||||
if (
|
||||
$aRows=$this->oDb->selectPage(
|
||||
|
@ -380,57 +458,53 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
}
|
||||
return $aTalks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает идентификаторы пользователей, добавленых в блеклист
|
||||
* Получает информацию о пользователях, занесенных в блеклист
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetBlacklistByUserId($sUserId) {
|
||||
public function GetBlacklistByUserId($sUserId) {
|
||||
$sql = "SELECT
|
||||
tb.user_target_id
|
||||
FROM
|
||||
".Config::Get('db.table.talk_blacklist')." as tb
|
||||
WHERE
|
||||
tb.user_id = ?d";
|
||||
tb.user_id = ?d";
|
||||
$aTargetId=array();
|
||||
if ($aRows=$this->oDb->select($sql,$sUserId)) {
|
||||
foreach ($aRows as $aRow) {
|
||||
$aTargetId[]=$aRow['user_target_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aTargetId;
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Получает идентификаторы пользователей, у которых текущей
|
||||
* занесен в блеклист
|
||||
* Возвращает пользователей, у которых данный занесен в Blacklist
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetBlacklistByTargetId($sUserId) {
|
||||
public function GetBlacklistByTargetId($sUserId) {
|
||||
$sql = "SELECT
|
||||
tb.user_id
|
||||
FROM
|
||||
".Config::Get('db.table.talk_blacklist')." as tb
|
||||
WHERE
|
||||
tb.user_target_id = ?d";
|
||||
tb.user_target_id = ?d";
|
||||
$aUserId=array();
|
||||
if ($aRows=$this->oDb->select($sql,$sUserId)) {
|
||||
foreach ($aRows as $aRow) {
|
||||
$aUserId[]=$aRow['user_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aUserId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавление пользователя в блеклист
|
||||
* Добавление пользователя в блеклист по переданному идентификатору
|
||||
*
|
||||
* @param string $sTargetId
|
||||
* @param string $sUserId
|
||||
* @param int $sTargetId ID пользователя, которого добавляем в блэклист
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function AddUserToBlacklist($sTargetId, $sUserId) {
|
||||
|
@ -439,53 +513,51 @@ class ModuleTalk_MapperTalk extends Mapper {
|
|||
( user_id, user_target_id )
|
||||
VALUES
|
||||
(?d, ?d)
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sUserId,$sTargetId)===0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаление пользователя из блеклиста
|
||||
* Удаляем пользователя из блеклиста
|
||||
*
|
||||
* @param string $sTargetId
|
||||
* @param stringe $sUserId
|
||||
* @param int $sTargetId ID пользователя, которого удаляем из блэклиста
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteUserFromBlacklist($sTargetId, $sUserId) {
|
||||
public function DeleteUserFromBlacklist($sTargetId, $sUserId) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.talk_blacklist')."
|
||||
WHERE
|
||||
user_id = ?d
|
||||
AND
|
||||
user_target_id = ?d
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sUserId,$sTargetId)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавление пользователей в блеклист по массиву переданных идентификаторов
|
||||
* Добавление пользователя в блеклист по списку идентификаторов
|
||||
*
|
||||
* @param array $aTargetId
|
||||
* @param string $sUserId
|
||||
* @param array $aTargetId Список ID пользователей, которых добавляем в блэклист
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function AddUserArrayToBlacklist($aTargetId, $sUserId) {
|
||||
public function AddUserArrayToBlacklist($aTargetId, $sUserId) {
|
||||
$sql = "
|
||||
INSERT INTO ".Config::Get('db.table.talk_blacklist')."
|
||||
( user_id, user_target_id )
|
||||
VALUES
|
||||
(?d, ?d)
|
||||
";
|
||||
$bOk=true;
|
||||
";
|
||||
$bOk=true;
|
||||
foreach ($aTargetId as $sTarget) {
|
||||
$bOk = $bOk && $this->oDb->query($sql, $sUserId, $sTarget);
|
||||
}
|
||||
return $bOk;
|
||||
}
|
||||
return $bOk;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -18,21 +18,26 @@
|
|||
/**
|
||||
* Модуль Tools - различные вспомогательные методы
|
||||
*
|
||||
* @package modules.tools
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleTools extends Module {
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Строит логарифмическое облако - расчитывает значение size в зависимости от count
|
||||
* У объектов в коллекции обязательно должны быть методы getCount() и setSize()
|
||||
*
|
||||
* @param array $aCollection
|
||||
* @param aray $aCollection Список тегов
|
||||
* @param int $iMinSize Минимальный размер
|
||||
* @param int $iMaxSize Максимальный размер
|
||||
* @return array
|
||||
*/
|
||||
public function MakeCloud($aCollection,$iMinSize=1,$iMaxSize=10) {
|
||||
if (count($aCollection)) {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -15,7 +15,19 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Объект сущности топика
|
||||
*
|
||||
* @package modules.topic
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleTopic_EntityTopic extends Entity {
|
||||
/**
|
||||
* Массив объектов(не всегда) для дополнительных типов топиков(линки, опросы, подкасты и т.п.)
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aExtra=null;
|
||||
|
||||
/**
|
||||
* Определяем правила валидации
|
||||
|
@ -33,20 +45,12 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
$this->aValidateRules[]=array('topic_type','topic_type','on'=>array('topic','link','question','photoset'));
|
||||
$this->aValidateRules[]=array('link_url','url','allowEmpty'=>false,'label'=>$this->Lang_Get('topic_link_create_url'),'on'=>array('link'));
|
||||
}
|
||||
|
||||
/**
|
||||
* массив объектов(не всегда) для дополнительных типов топиков(линки, опросы, подкасты и т.п.)
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aExtra=null;
|
||||
|
||||
/**
|
||||
* Проверка типа топика
|
||||
*
|
||||
* @param $sValue
|
||||
* @param $aParams
|
||||
* @return bool | string
|
||||
* @param string $sValue Проверяемое значение
|
||||
* @param array $aParams Параметры
|
||||
* @return bool|string
|
||||
*/
|
||||
public function ValidateTopicType($sValue,$aParams) {
|
||||
if ($this->Topic_IsAllowTopicType($sValue)) {
|
||||
|
@ -57,9 +61,9 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
/**
|
||||
* Проверка топика на уникальность
|
||||
*
|
||||
* @param $sValue
|
||||
* @param $aParams
|
||||
* @return bool | string
|
||||
* @param string $sValue Проверяемое значение
|
||||
* @param array $aParams Параметры
|
||||
* @return bool|string
|
||||
*/
|
||||
public function ValidateTopicUnique($sValue,$aParams) {
|
||||
$this->setTextHash(md5($this->getType().$sValue.$this->getTitle()));
|
||||
|
@ -74,9 +78,9 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
/**
|
||||
* Валидация ID блога
|
||||
*
|
||||
* @param $sValue
|
||||
* @param $aParams
|
||||
* @return bool | string
|
||||
* @param string $sValue Проверяемое значение
|
||||
* @param array $aParams Параметры
|
||||
* @return bool|string
|
||||
*/
|
||||
public function ValidateBlogId($sValue,$aParams) {
|
||||
if ($sValue==0) {
|
||||
|
@ -88,109 +92,266 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
return $this->Lang_Get('topic_create_blog_error_unknown');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает ID топика
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getId() {
|
||||
return $this->_getDataOne('topic_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID блога
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getBlogId() {
|
||||
return $this->_getDataOne('blog_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает тип топика
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getType() {
|
||||
return $this->_getDataOne('topic_type');
|
||||
}
|
||||
/**
|
||||
* Возвращает заголовок топика
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTitle() {
|
||||
return $this->_getDataOne('topic_title');
|
||||
}
|
||||
/**
|
||||
* Возвращает текст топика
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getText() {
|
||||
return $this->_getDataOne('topic_text');
|
||||
}
|
||||
/**
|
||||
* Возвращает короткий текст топика (до ката)
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTextShort() {
|
||||
return $this->_getDataOne('topic_text_short');
|
||||
}
|
||||
/**
|
||||
* Возвращает исходный текст топика, без примененя парсера тегов
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTextSource() {
|
||||
return $this->_getDataOne('topic_text_source');
|
||||
}
|
||||
/**
|
||||
* Возвращает сериализованные строку дополнительный данных топика
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getExtra() {
|
||||
return $this->_getDataOne('topic_extra') ? $this->_getDataOne('topic_extra') : serialize('');
|
||||
}
|
||||
/**
|
||||
* Возвращает строку со списком тегов через запятую
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTags() {
|
||||
return $this->_getDataOne('topic_tags');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату создания топика
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateAdd() {
|
||||
return $this->_getDataOne('topic_date_add');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату редактирования топика
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateEdit() {
|
||||
return $this->_getDataOne('topic_date_edit');
|
||||
}
|
||||
/**
|
||||
* Возвращает IP пользователя
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getUserIp() {
|
||||
return $this->_getDataOne('topic_user_ip');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус опубликованности топика
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getPublish() {
|
||||
return $this->_getDataOne('topic_publish');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус опубликованности черновика
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getPublishDraft() {
|
||||
return $this->_getDataOne('topic_publish_draft');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус публикации топика на главной странице
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getPublishIndex() {
|
||||
return $this->_getDataOne('topic_publish_index');
|
||||
}
|
||||
/**
|
||||
* Возвращает рейтинг топика
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getRating() {
|
||||
return number_format(round($this->_getDataOne('topic_rating'),2), 0, '.', '');
|
||||
}
|
||||
/**
|
||||
* Возвращает число проголосовавших за топик
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountVote() {
|
||||
return $this->_getDataOne('topic_count_vote');
|
||||
}
|
||||
/**
|
||||
* Возвращает число проголосовавших за топик положительно
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountVoteUp() {
|
||||
return $this->_getDataOne('topic_count_vote_up');
|
||||
}
|
||||
/**
|
||||
* Возвращает число проголосовавших за топик отрицательно
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountVoteDown() {
|
||||
return $this->_getDataOne('topic_count_vote_down');
|
||||
}
|
||||
/**
|
||||
* Возвращает число воздержавшихся при голосовании за топик
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountVoteAbstain() {
|
||||
return $this->_getDataOne('topic_count_vote_abstain');
|
||||
}
|
||||
/**
|
||||
* Возвращает число прочтений топика
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountRead() {
|
||||
return $this->_getDataOne('topic_count_read');
|
||||
}
|
||||
/**
|
||||
* Возвращает количество комментариев к топику
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountComment() {
|
||||
return $this->_getDataOne('topic_count_comment');
|
||||
}
|
||||
/**
|
||||
* Возвращает текст ката
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getCutText() {
|
||||
return $this->_getDataOne('topic_cut_text');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус запрета комментировать топик
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getForbidComment() {
|
||||
return $this->_getDataOne('topic_forbid_comment');
|
||||
}
|
||||
/**
|
||||
* Возвращает хеш топика для проверки топика на уникальность
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTextHash() {
|
||||
return $this->_getDataOne('topic_text_hash');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает массив тегов
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTagsArray() {
|
||||
if ($this->getTags()) {
|
||||
return explode(',',$this->getTags());
|
||||
}
|
||||
return array();
|
||||
}
|
||||
/**
|
||||
* Возвращает количество новых комментариев в топике для текущего пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountCommentNew() {
|
||||
return $this->_getDataOne('count_comment_new');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату прочтения топика для текущего пользователя
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateRead() {
|
||||
return $this->_getDataOne('date_read');
|
||||
}
|
||||
/**
|
||||
* Возвращает объект пользователя, автора топик
|
||||
*
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function getUser() {
|
||||
if (!$this->_getDataOne('user')) {
|
||||
$this->_aData['user']=$this->User_GetUserById($this->getUserId());
|
||||
}
|
||||
return $this->_getDataOne('user');
|
||||
}
|
||||
/**
|
||||
* Возвращает объект блого, в котором находится топик
|
||||
*
|
||||
* @return ModuleBlog_EntityBlog|null
|
||||
*/
|
||||
public function getBlog() {
|
||||
return $this->_getDataOne('blog');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает полный URL до топика
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUrl() {
|
||||
if ($this->getBlog()->getType()=='personal') {
|
||||
return Router::GetPath('blog').$this->getId().'.html';
|
||||
|
@ -198,21 +359,46 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
return Router::GetPath('blog').$this->getBlog()->getUrl().'/'.$this->getId().'.html';
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Возвращает объект голосования за топик текущим пользователем
|
||||
*
|
||||
* @return ModuleVote_EntityVote|null
|
||||
*/
|
||||
public function getVote() {
|
||||
return $this->_getDataOne('vote');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус голосовал ли пользователь в топике-опросе
|
||||
*
|
||||
* @return bool|null
|
||||
*/
|
||||
public function getUserQuestionIsVote() {
|
||||
return $this->_getDataOne('user_question_is_vote');
|
||||
}
|
||||
/**
|
||||
* Проверяет находится ли данный топик в избранном у текущего пользователя
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getIsFavourite() {
|
||||
if ($this->getFavourite()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Возвращает количество добавивших топик в избранное
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountFavourite() {
|
||||
return $this->_getDataOne('topic_count_favourite');
|
||||
}
|
||||
/**
|
||||
* Возвращает объект подписки на новые комментарии к топику
|
||||
*
|
||||
* @return ModuleSubscribe_EntitySubscribe|null
|
||||
*/
|
||||
public function getSubscribeNewComment() {
|
||||
if (!($oUserCurrent=$this->User_GetUserCurrent())) {
|
||||
return null;
|
||||
|
@ -225,18 +411,31 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
***************************************************************************************************************************************************
|
||||
*/
|
||||
|
||||
/**
|
||||
* Извлекает сериализованные данные топика
|
||||
*/
|
||||
protected function extractExtra() {
|
||||
if (is_null($this->aExtra)) {
|
||||
$this->aExtra=@unserialize($this->getExtra());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает значение нужного параметра
|
||||
*
|
||||
* @param string $sName Название параметра/данных
|
||||
* @param mixed $data Данные
|
||||
*/
|
||||
protected function setExtraValue($sName,$data) {
|
||||
$this->extractExtra();
|
||||
$this->aExtra[$sName]=$data;
|
||||
$this->setExtra($this->aExtra);
|
||||
}
|
||||
|
||||
/**
|
||||
* Извлекает значение параметра
|
||||
*
|
||||
* @param string $sName Название параметра
|
||||
* @return null|mixed
|
||||
*/
|
||||
protected function getExtraValue($sName) {
|
||||
$this->extractExtra();
|
||||
if (isset($this->aExtra[$sName])) {
|
||||
|
@ -245,7 +444,12 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
return null;
|
||||
}
|
||||
|
||||
// методы для топика-ссылки
|
||||
/**
|
||||
* Возвращает URL для топика-ссылки
|
||||
*
|
||||
* @param bool $bShort Укарачивать урл или нет
|
||||
* @return null|string
|
||||
*/
|
||||
public function getLinkUrl($bShort=false) {
|
||||
if ($this->getType()!='link') {
|
||||
return null;
|
||||
|
@ -271,25 +475,45 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Устанавливает URL для топика-ссылки
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setLinkUrl($data) {
|
||||
if ($this->getType()!='link') {
|
||||
return;
|
||||
}
|
||||
$this->setExtraValue('url',$data);
|
||||
}
|
||||
/**
|
||||
* Возвращает количество переходов по ссылке в топике-ссылке
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getLinkCountJump() {
|
||||
if ($this->getType()!='link') {
|
||||
return null;
|
||||
}
|
||||
return (int)$this->getExtraValue('count_jump');
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество переходов по ссылке в топике-ссылке
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setLinkCountJump($data) {
|
||||
if ($this->getType()!='link') {
|
||||
return;
|
||||
}
|
||||
$this->setExtraValue('count_jump',$data);
|
||||
}
|
||||
//методы для топика-вопроса
|
||||
|
||||
/**
|
||||
* Добавляет вариант ответа в топик-опрос
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function addQuestionAnswer($data) {
|
||||
if ($this->getType()!='question') {
|
||||
return;
|
||||
|
@ -298,12 +522,21 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
$this->aExtra['answers'][]=array('text'=>$data,'count'=>0);
|
||||
$this->setExtra($this->aExtra);
|
||||
}
|
||||
/**
|
||||
* Очищает варианты ответа в топике-опрос
|
||||
*/
|
||||
public function clearQuestionAnswer() {
|
||||
if ($this->getType()!='question') {
|
||||
return;
|
||||
}
|
||||
$this->setExtraValue('answers',array());
|
||||
}
|
||||
/**
|
||||
* Возвращает варианты ответа в топике-опрос
|
||||
*
|
||||
* @param bool $bSortVote
|
||||
* @return array|null
|
||||
*/
|
||||
public function getQuestionAnswers($bSortVote=false) {
|
||||
if ($this->getType()!='question') {
|
||||
return null;
|
||||
|
@ -318,6 +551,11 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
}
|
||||
return array();
|
||||
}
|
||||
/**
|
||||
* Увеличивает количество ответов на данный вариант в топике-опросе
|
||||
*
|
||||
* @param int $sIdAnswer ID варианта ответа
|
||||
*/
|
||||
public function increaseQuestionAnswerVote($sIdAnswer) {
|
||||
if ($aAnswers=$this->getQuestionAnswers()) {
|
||||
if (isset($aAnswers[$sIdAnswer])) {
|
||||
|
@ -327,6 +565,11 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Возвращает максимально количество ответов на вариант в топике-опросе
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getQuestionAnswerMax() {
|
||||
$aAnswers=$this->getQuestionAnswers();
|
||||
$iMax=0;
|
||||
|
@ -337,6 +580,12 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
}
|
||||
return $iMax;
|
||||
}
|
||||
/**
|
||||
* Возвращает в процентах количество проголосовавших за конкретный вариант
|
||||
*
|
||||
* @param int $sIdAnswer ID варианта
|
||||
* @return int|string
|
||||
*/
|
||||
public function getQuestionAnswerPercent($sIdAnswer) {
|
||||
if ($aAnswers=$this->getQuestionAnswers()) {
|
||||
if (isset($aAnswers[$sIdAnswer])) {
|
||||
|
@ -349,26 +598,45 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Возвращает общее число принявших участие в опросе в топике-опросе
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getQuestionCountVote() {
|
||||
if ($this->getType()!='question') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (int)$this->getExtraValue('count_vote');
|
||||
}
|
||||
/**
|
||||
* Устанавливает общее число принявших участие в опросе в топике-опросе
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setQuestionCountVote($data) {
|
||||
if ($this->getType()!='question') {
|
||||
return;
|
||||
}
|
||||
$this->setExtraValue('count_vote',$data);
|
||||
}
|
||||
/**
|
||||
* Возвращает число воздержавшихся от участия в опросе в топике-опросе
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getQuestionCountVoteAbstain() {
|
||||
if ($this->getType()!='question') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (int)$this->getExtraValue('count_vote_abstain');
|
||||
}
|
||||
/**
|
||||
* Устанавливает число воздержавшихся от участия в опросе в топике-опросе
|
||||
*
|
||||
* @param int $data
|
||||
* @return mixed
|
||||
*/
|
||||
public function setQuestionCountVoteAbstain($data) {
|
||||
if ($this->getType()!='question') {
|
||||
return;
|
||||
|
@ -376,123 +644,313 @@ class ModuleTopic_EntityTopic extends Entity {
|
|||
$this->setExtraValue('count_vote_abstain',$data);
|
||||
}
|
||||
|
||||
// Методы для фото-топика
|
||||
|
||||
/**
|
||||
* Возвращает фотографии из топика-фотосета
|
||||
*
|
||||
* @param int|null $iFromId ID с которого начинать выборку
|
||||
* @param int|null $iCount Количество
|
||||
* @return array
|
||||
*/
|
||||
public function getPhotosetPhotos($iFromId = null, $iCount = null) {
|
||||
return $this->Topic_getPhotosByTopicId($this->getId(), $iFromId, $iCount);
|
||||
}
|
||||
/**
|
||||
* Возвращает количество фотографий в топике-фотосете
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getPhotosetCount() {
|
||||
return $this->getExtraValue('count_photo');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID главной фото в топике-фотосете
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getPhotosetMainPhotoId() {
|
||||
return $this->getExtraValue('main_photo_id');
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID главной фото в топике-фотосете
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setPhotosetMainPhotoId($data) {
|
||||
$this->setExtraValue('main_photo_id',$data);
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество фотографий в топике-фотосете
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setPhotosetCount($data) {
|
||||
$this->setExtraValue('count_photo',$data);
|
||||
}
|
||||
|
||||
|
||||
//*************************************************************************************************************************************************
|
||||
|
||||
/**
|
||||
* Устанваливает ID топика
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setId($data) {
|
||||
$this->_aData['topic_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID блога
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setBlogId($data) {
|
||||
$this->_aData['blog_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает тип топика
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setType($data) {
|
||||
$this->_aData['topic_type']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает заголовок топика
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setTitle($data) {
|
||||
$this->_aData['topic_title']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает текст топика
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setText($data) {
|
||||
$this->_aData['topic_text']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает сериализованную строчку дополнительных данных
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setExtra($data) {
|
||||
$this->_aData['topic_extra']=serialize($data);
|
||||
}
|
||||
/**
|
||||
* Устанавливает короткий текст топика до ката
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setTextShort($data) {
|
||||
$this->_aData['topic_text_short']=$data;
|
||||
}
|
||||
/**
|
||||
* Устаналивает исходный текст топика
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setTextSource($data) {
|
||||
$this->_aData['topic_text_source']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает список тегов в виде строки
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setTags($data) {
|
||||
$this->_aData['topic_tags']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату создания топика
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateAdd($data) {
|
||||
$this->_aData['topic_date_add']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату редактирования топика
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateEdit($data) {
|
||||
$this->_aData['topic_date_edit']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает IP пользователя
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setUserIp($data) {
|
||||
$this->_aData['topic_user_ip']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает флаг публикации топика
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setPublish($data) {
|
||||
$this->_aData['topic_publish']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает флаг публикации черновика
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setPublishDraft($data) {
|
||||
$this->_aData['topic_publish_draft']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает флаг публикации на главной странице
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setPublishIndex($data) {
|
||||
$this->_aData['topic_publish_index']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает рейтинг топика
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setRating($data) {
|
||||
$this->_aData['topic_rating']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество проголосовавших
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountVote($data) {
|
||||
$this->_aData['topic_count_vote']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество проголосовавших в плюс
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountVoteUp($data) {
|
||||
$this->_aData['topic_count_vote_up']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество проголосовавших в минус
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountVoteDown($data) {
|
||||
$this->_aData['topic_count_vote_down']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает число воздержавшихся
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountVoteAbstain($data) {
|
||||
$this->_aData['topic_count_vote_abstain']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает число прочтения топика
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountRead($data) {
|
||||
$this->_aData['topic_count_read']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество комментариев
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountComment($data) {
|
||||
$this->_aData['topic_count_comment']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает текст ката
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setCutText($data) {
|
||||
$this->_aData['topic_cut_text']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает флаг запрета коментирования топика
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setForbidComment($data) {
|
||||
$this->_aData['topic_forbid_comment']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает хеш топика
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setTextHash($data) {
|
||||
$this->_aData['topic_text_hash']=$data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает объект пользователя
|
||||
*
|
||||
* @param ModuleUser_EntityUser $data
|
||||
*/
|
||||
public function setUser($data) {
|
||||
$this->_aData['user']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает объект блога
|
||||
*
|
||||
* @param ModuleBlog_EntityBlog $data
|
||||
*/
|
||||
public function setBlog($data) {
|
||||
$this->_aData['blog']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает факт голосования пользователя в топике-опросе
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserQuestionIsVote($data) {
|
||||
$this->_aData['user_question_is_vote']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает объект голосования за топик
|
||||
*
|
||||
* @param ModuleVote_EntityVote $data
|
||||
*/
|
||||
public function setVote($data) {
|
||||
$this->_aData['vote']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество новых комментариев
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountCommentNew($data) {
|
||||
$this->_aData['count_comment_new']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату прочтения топика текущим пользователем
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateRead($data) {
|
||||
$this->_aData['date_read']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество пользователей, добавивших топик в избранное
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountFavourite($data) {
|
||||
$this->_aData['topic_count_favourite']=$data;
|
||||
}
|
||||
|
|
|
@ -1,31 +1,74 @@
|
|||
<?php
|
||||
/*-------------------------------------------------------
|
||||
*
|
||||
* LiveStreet Engine Social Networking
|
||||
* Copyright © 2008 Mzhelskiy Maxim
|
||||
*
|
||||
*--------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreet.ru
|
||||
* Contact e-mail: rus.engine@gmail.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleTopic_EntityTopicPhoto extends Entity
|
||||
{
|
||||
public function getId()
|
||||
{
|
||||
/**
|
||||
* Объект сущности фото в топике-фотосете
|
||||
*
|
||||
* @package modules.topic
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleTopic_EntityTopicPhoto extends Entity {
|
||||
/**
|
||||
* Возвращает ID фото
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getId() {
|
||||
return $this->_getDataOne('id');
|
||||
}
|
||||
public function getTopicId()
|
||||
{
|
||||
/**
|
||||
* Возвращает ID топика
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTopicId() {
|
||||
return $this->_getDataOne('topic_id');
|
||||
}
|
||||
public function getTargetTmp()
|
||||
{
|
||||
/**
|
||||
* Возвращает ключ временного владельца
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTargetTmp() {
|
||||
return $this->_getDataOne('target_tmp');
|
||||
}
|
||||
public function getDescription()
|
||||
{
|
||||
/**
|
||||
* Возвращает описание фото
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDescription() {
|
||||
return $this->_getDataOne('description');
|
||||
}
|
||||
|
||||
public function getPath()
|
||||
{
|
||||
/**
|
||||
* Вовзращает полный веб путь до фото
|
||||
*
|
||||
* @return mixed|null
|
||||
*/
|
||||
public function getPath() {
|
||||
return $this->_getDataOne('path');
|
||||
}
|
||||
|
||||
public function getWebPath($sWidth = null)
|
||||
{
|
||||
/**
|
||||
* Возвращает полный веб путь до фото определенного размера
|
||||
*
|
||||
* @param string|null $sWidth Размер фото, например, '100' или '150crop'
|
||||
* @return null|string
|
||||
*/
|
||||
public function getWebPath($sWidth = null) {
|
||||
if ($this->getPath()) {
|
||||
if ($sWidth) {
|
||||
$aPathInfo=pathinfo($this->getPath());
|
||||
|
@ -38,17 +81,28 @@ class ModuleTopic_EntityTopicPhoto extends Entity
|
|||
}
|
||||
}
|
||||
|
||||
public function setTopicId($iTopicId)
|
||||
{
|
||||
/**
|
||||
* Устанавливает ID топика
|
||||
*
|
||||
* @param int $iTopicId
|
||||
*/
|
||||
public function setTopicId($iTopicId) {
|
||||
$this->_aData['topic_id'] = $iTopicId;
|
||||
}
|
||||
public function setTargetTmp($sTargetTmp)
|
||||
{
|
||||
/**
|
||||
* Устанавливает ключ временного владельца
|
||||
*
|
||||
* @param string $sTargetTmp
|
||||
*/
|
||||
public function setTargetTmp($sTargetTmp) {
|
||||
$this->_aData['target_tmp'] = $sTargetTmp;
|
||||
}
|
||||
public function setDescription($sDescription)
|
||||
{
|
||||
/**
|
||||
* Устанавливает описание фото
|
||||
*
|
||||
* @param string $sDescription
|
||||
*/
|
||||
public function setDescription($sDescription) {
|
||||
$this->_aData['description'] = $sDescription;
|
||||
}
|
||||
|
||||
}
|
|
@ -15,27 +15,61 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleTopic_EntityTopicQuestionVote extends Entity
|
||||
{
|
||||
public function getTopicId() {
|
||||
return $this->_getDataOne('topic_id');
|
||||
}
|
||||
public function getVoterId() {
|
||||
return $this->_getDataOne('user_voter_id');
|
||||
}
|
||||
/**
|
||||
* Объект сущности голосования в топике-опросе
|
||||
*
|
||||
* @package modules.topic
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleTopic_EntityTopicQuestionVote extends Entity {
|
||||
/**
|
||||
* Возвращает ID топика
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTopicId() {
|
||||
return $this->_getDataOne('topic_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID проголосовавшего пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getVoterId() {
|
||||
return $this->_getDataOne('user_voter_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает номер варианта
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getAnswer() {
|
||||
return $this->_getDataOne('answer');
|
||||
}
|
||||
|
||||
|
||||
return $this->_getDataOne('answer');
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает ID топика
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTopicId($data) {
|
||||
$this->_aData['topic_id']=$data;
|
||||
}
|
||||
public function setVoterId($data) {
|
||||
$this->_aData['user_voter_id']=$data;
|
||||
}
|
||||
public function setAnswer($data) {
|
||||
$this->_aData['answer']=$data;
|
||||
}
|
||||
$this->_aData['topic_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID проголосовавшего пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setVoterId($data) {
|
||||
$this->_aData['user_voter_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает номер варианта
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setAnswer($data) {
|
||||
$this->_aData['answer']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,40 +15,94 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleTopic_EntityTopicRead extends Entity
|
||||
{
|
||||
public function getTopicId() {
|
||||
return $this->_getDataOne('topic_id');
|
||||
}
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
public function getDateRead() {
|
||||
return $this->_getDataOne('date_read');
|
||||
}
|
||||
public function getCommentCountLast() {
|
||||
return $this->_getDataOne('comment_count_last');
|
||||
}
|
||||
public function getCommentIdLast() {
|
||||
return $this->_getDataOne('comment_id_last');
|
||||
}
|
||||
/**
|
||||
* Объект сущности факта прочтения топика
|
||||
*
|
||||
* @package modules.topic
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleTopic_EntityTopicRead extends Entity {
|
||||
/**
|
||||
* Возвращает ID топика
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTopicId() {
|
||||
return $this->_getDataOne('topic_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату прочтения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateRead() {
|
||||
return $this->_getDataOne('date_read');
|
||||
}
|
||||
/**
|
||||
* Возвращает число комментариев в последнем прочтении топика
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCommentCountLast() {
|
||||
return $this->_getDataOne('comment_count_last');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID последнего комментария
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCommentIdLast() {
|
||||
return $this->_getDataOne('comment_id_last');
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID топика
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTopicId($data) {
|
||||
$this->_aData['topic_id']=$data;
|
||||
}
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
public function setDateRead($data) {
|
||||
$this->_aData['date_read']=$data;
|
||||
}
|
||||
public function setCommentCountLast($data) {
|
||||
$this->_aData['comment_count_last']=$data;
|
||||
}
|
||||
public function setCommentIdLast($data) {
|
||||
$this->_aData['comment_id_last']=$data;
|
||||
}
|
||||
$this->_aData['topic_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату прочтения
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateRead($data) {
|
||||
$this->_aData['date_read']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает число комментариев в последнем прочтении топика
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCommentCountLast($data) {
|
||||
$this->_aData['comment_count_last']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID последнего комментария
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCommentIdLast($data) {
|
||||
$this->_aData['comment_id_last']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,51 +15,119 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleTopic_EntityTopicTag extends Entity
|
||||
{
|
||||
public function getId() {
|
||||
return $this->_getDataOne('topic_tag_id');
|
||||
}
|
||||
public function getTopicId() {
|
||||
return $this->_getDataOne('topic_id');
|
||||
}
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
public function getBlogId() {
|
||||
return $this->_getDataOne('blog_id');
|
||||
}
|
||||
public function getText() {
|
||||
return $this->_getDataOne('topic_tag_text');
|
||||
}
|
||||
|
||||
public function getCount() {
|
||||
return $this->_getDataOne('count');
|
||||
}
|
||||
public function getSize() {
|
||||
return $this->_getDataOne('size');
|
||||
}
|
||||
/**
|
||||
* Объект сущности тега топика
|
||||
*
|
||||
* @package modules.topic
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleTopic_EntityTopicTag extends Entity {
|
||||
/**
|
||||
* Возвращает ID тега
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getId() {
|
||||
return $this->_getDataOne('topic_tag_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID топика
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTopicId() {
|
||||
return $this->_getDataOne('topic_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID блога
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getBlogId() {
|
||||
return $this->_getDataOne('blog_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает текст тега
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getText() {
|
||||
return $this->_getDataOne('topic_tag_text');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает количество тегов
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCount() {
|
||||
return $this->_getDataOne('count');
|
||||
}
|
||||
/**
|
||||
* Возвращает просчитанный размер тега для облака тегов
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getSize() {
|
||||
return $this->_getDataOne('size');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID тега
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setId($data) {
|
||||
$this->_aData['topic_tag_id']=$data;
|
||||
}
|
||||
public function setTopicId($data) {
|
||||
$this->_aData['topic_id']=$data;
|
||||
}
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
public function setBlogId($data) {
|
||||
$this->_aData['blog_id']=$data;
|
||||
}
|
||||
public function setText($data) {
|
||||
$this->_aData['topic_tag_text']=$data;
|
||||
}
|
||||
|
||||
$this->_aData['topic_tag_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID топика
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTopicId($data) {
|
||||
$this->_aData['topic_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID блога
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setBlogId($data) {
|
||||
$this->_aData['blog_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает текст тега
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setText($data) {
|
||||
$this->_aData['topic_tag_text']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает просчитанный размер тега для облака тегов
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setSize($data) {
|
||||
$this->_aData['size']=$data;
|
||||
}
|
||||
$this->_aData['size']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,8 +15,19 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleTopic_MapperTopic extends Mapper {
|
||||
|
||||
/**
|
||||
* Объект маппера для работы с БД
|
||||
*
|
||||
* @package modules.topic
|
||||
* @since 1.0
|
||||
*/
|
||||
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')."
|
||||
(blog_id,
|
||||
|
@ -34,17 +45,22 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
topic_text_hash
|
||||
)
|
||||
VALUES(?d, ?d, ?, ?, ?, ?, ?, ?d, ?d, ?d, ?, ?, ?)
|
||||
";
|
||||
";
|
||||
if ($iId=$this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getUserId(),$oTopic->getType(),$oTopic->getTitle(),
|
||||
$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash()))
|
||||
$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash()))
|
||||
{
|
||||
$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')."
|
||||
(topic_id,
|
||||
|
@ -54,15 +70,20 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
topic_extra
|
||||
)
|
||||
VALUES(?d, ?, ?, ?, ? )
|
||||
";
|
||||
";
|
||||
if ($iId=$this->oDb->query($sql,$oTopic->getId(),$oTopic->getText(),
|
||||
$oTopic->getTextShort(),$oTopic->getTextSource(),$oTopic->getExtra()))
|
||||
$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')."
|
||||
(topic_id,
|
||||
|
@ -71,45 +92,66 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
topic_tag_text
|
||||
)
|
||||
VALUES(?d, ?d, ?d, ?)
|
||||
";
|
||||
if ($iId=$this->oDb->query($sql,$oTopicTag->getTopicId(),$oTopicTag->getUserId(),$oTopicTag->getBlogId(),$oTopicTag->getText()))
|
||||
";
|
||||
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 ";
|
||||
if ($this->oDb->query($sql,$iTopicId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет теги у топика
|
||||
*
|
||||
* @param int $sTopicId ID топика
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTopicTagsByTopicId($sTopicId) {
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.topic_tag')."
|
||||
WHERE
|
||||
topic_id = ?d
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sTopicId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет топик.
|
||||
* Если тип таблиц в БД InnoDB, то удалятся всё связи по топику(комменты,голосования,избранное)
|
||||
*
|
||||
* @param int $sTopicId Объект топика или ID
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteTopic($sTopicId) {
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.topic')."
|
||||
WHERE
|
||||
topic_id = ?d
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sTopicId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получает топик по уникальному хешу(текст топика)
|
||||
*
|
||||
* @param int $sUserId
|
||||
* @param string $sHash
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetTopicUnique($sUserId,$sHash) {
|
||||
$sql = "SELECT topic_id FROM ".Config::Get('db.table.topic')."
|
||||
WHERE
|
||||
|
@ -123,12 +165,17 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список топиков по списку айдишников
|
||||
*
|
||||
* @param array $aArrayId Список ID топиков
|
||||
* @return array
|
||||
*/
|
||||
public function GetTopicsByArrayId($aArrayId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
$sql = "SELECT
|
||||
t.*,
|
||||
tc.*
|
||||
|
@ -143,21 +190,28 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
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'])) {
|
||||
$aFilter['order'] = 't.topic_date_add desc';
|
||||
}
|
||||
if (!is_array($aFilter['order'])) {
|
||||
$aFilter['order'] = array($aFilter['order']);
|
||||
}
|
||||
|
||||
|
||||
$sql = "SELECT
|
||||
t.topic_id
|
||||
FROM
|
||||
|
@ -169,19 +223,24 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
AND
|
||||
t.blog_id=b.blog_id
|
||||
ORDER BY ".
|
||||
implode(', ', $aFilter['order'])
|
||||
."
|
||||
LIMIT ?d, ?d";
|
||||
implode(', ', $aFilter['order'])
|
||||
."
|
||||
LIMIT ?d, ?d";
|
||||
$aTopics=array();
|
||||
if ($aRows=$this->oDb->selectPage($iCount,$sql,($iCurrPage-1)*$iPerPage, $iPerPage)) {
|
||||
if ($aRows=$this->oDb->selectPage($iCount,$sql,($iCurrPage-1)*$iPerPage, $iPerPage)) {
|
||||
foreach ($aRows as $aTopic) {
|
||||
$aTopics[]=$aTopic['topic_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aTopics;
|
||||
}
|
||||
|
||||
public function GetCountTopics($aFilter) {
|
||||
/**
|
||||
* Количество топиков по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountTopics($aFilter) {
|
||||
$sWhere=$this->buildFilter($aFilter);
|
||||
$sql = "SELECT
|
||||
count(t.topic_id) as count
|
||||
|
@ -194,23 +253,28 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
".$sWhere."
|
||||
|
||||
AND
|
||||
t.blog_id=b.blog_id;";
|
||||
t.blog_id=b.blog_id;";
|
||||
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
|
||||
t.topic_id
|
||||
FROM
|
||||
|
@ -221,18 +285,27 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
".$sWhere."
|
||||
AND
|
||||
t.blog_id=b.blog_id
|
||||
ORDER by ".implode(', ', $aFilter['order'])." ";
|
||||
ORDER by ".implode(', ', $aFilter['order'])." ";
|
||||
$aTopics=array();
|
||||
if ($aRows=$this->oDb->select($sql)) {
|
||||
if ($aRows=$this->oDb->select($sql)) {
|
||||
foreach ($aRows as $aTopic) {
|
||||
$aTopics[]=$aTopic['topic_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $aTopics;
|
||||
return $aTopics;
|
||||
}
|
||||
|
||||
public function GetTopicsByTag($sTag,$aExcludeBlog,&$iCount,$iCurrPage,$iPerPage) {
|
||||
/**
|
||||
* Получает список топиков по тегу
|
||||
*
|
||||
* @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 = "
|
||||
SELECT
|
||||
topic_id
|
||||
|
@ -243,13 +316,13 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
{ AND blog_id NOT IN (?a) }
|
||||
ORDER BY topic_id DESC
|
||||
LIMIT ?d, ?d ";
|
||||
|
||||
|
||||
$aTopics=array();
|
||||
if ($aRows=$this->oDb->selectPage(
|
||||
$iCount,$sql,$sTag,
|
||||
(is_array($aExcludeBlog)&&count($aExcludeBlog)) ? $aExcludeBlog : DBSIMPLE_SKIP,
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)
|
||||
$iCount,$sql,$sTag,
|
||||
(is_array($aExcludeBlog)&&count($aExcludeBlog)) ? $aExcludeBlog : DBSIMPLE_SKIP,
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aTopic) {
|
||||
$aTopics[]=$aTopic['topic_id'];
|
||||
|
@ -257,8 +330,14 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
}
|
||||
return $aTopics;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получает топики по рейтингу и дате
|
||||
*
|
||||
* @param string $sDate Дата
|
||||
* @param int $iLimit Количество
|
||||
* @param array $aExcludeBlog Список ID блогов для исключения
|
||||
* @return array
|
||||
*/
|
||||
public function GetTopicsRatingByDate($sDate,$iLimit,$aExcludeBlog=array()) {
|
||||
$sql = "SELECT
|
||||
t.topic_id
|
||||
|
@ -272,13 +351,13 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
t.topic_rating >= 0
|
||||
{ AND t.blog_id NOT IN(?a) }
|
||||
ORDER by t.topic_rating desc, t.topic_id desc
|
||||
LIMIT 0, ?d ";
|
||||
LIMIT 0, ?d ";
|
||||
$aTopics=array();
|
||||
if ($aRows=$this->oDb->select(
|
||||
$sql,$sDate,
|
||||
(is_array($aExcludeBlog)&&count($aExcludeBlog)) ? $aExcludeBlog : DBSIMPLE_SKIP,
|
||||
$iLimit
|
||||
)
|
||||
$sql,$sDate,
|
||||
(is_array($aExcludeBlog)&&count($aExcludeBlog)) ? $aExcludeBlog : DBSIMPLE_SKIP,
|
||||
$iLimit
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aTopic) {
|
||||
$aTopics[]=$aTopic['topic_id'];
|
||||
|
@ -286,7 +365,13 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
}
|
||||
return $aTopics;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает список тегов топиков
|
||||
*
|
||||
* @param int $iLimit Количество
|
||||
* @param array $aExcludeTopic Список ID топиков для исключения
|
||||
* @return array
|
||||
*/
|
||||
public function GetTopicTags($iLimit,$aExcludeTopic=array()) {
|
||||
$sql = "SELECT
|
||||
tt.topic_tag_text,
|
||||
|
@ -301,26 +386,32 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
ORDER BY
|
||||
count desc
|
||||
LIMIT 0, ?d
|
||||
";
|
||||
";
|
||||
$aReturn=array();
|
||||
$aReturnSort=array();
|
||||
if ($aRows=$this->oDb->select(
|
||||
$sql,
|
||||
(is_array($aExcludeTopic)&&count($aExcludeTopic)) ? $aExcludeTopic : DBSIMPLE_SKIP,
|
||||
$iLimit
|
||||
)
|
||||
$sql,
|
||||
(is_array($aExcludeTopic)&&count($aExcludeTopic)) ? $aExcludeTopic : DBSIMPLE_SKIP,
|
||||
$iLimit
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aRow) {
|
||||
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);
|
||||
$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 = "
|
||||
SELECT
|
||||
|
@ -341,36 +432,45 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
ORDER BY
|
||||
count desc
|
||||
LIMIT 0, ?d
|
||||
";
|
||||
";
|
||||
$aReturn=array();
|
||||
$aReturnSort=array();
|
||||
if ($aRows=$this->oDb->select($sql,is_null($iUserId) ? DBSIMPLE_SKIP : $iUserId,$iLimit)) {
|
||||
foreach ($aRows as $aRow) {
|
||||
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);
|
||||
$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')."
|
||||
SET
|
||||
topic_count_comment=topic_count_comment+1
|
||||
WHERE
|
||||
topic_id = ?
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sTopicId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function UpdateTopic(ModuleTopic_EntityTopic $oTopic) {
|
||||
/**
|
||||
* Обновляет топик
|
||||
*
|
||||
* @param ModuleTopic_EntityTopic $oTopic Объект топика
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateTopic(ModuleTopic_EntityTopic $oTopic) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.topic')."
|
||||
SET
|
||||
blog_id= ?d,
|
||||
|
@ -395,15 +495,20 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
topic_text_hash = ?
|
||||
WHERE
|
||||
topic_id = ?d
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getTitle(),$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getDateEdit(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getRating(),$oTopic->getCountVote(),$oTopic->getCountVoteUp(),$oTopic->getCountVoteDown(),$oTopic->getCountVoteAbstain(),$oTopic->getCountRead(),$oTopic->getCountComment(),$oTopic->getCountFavourite(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash(),$oTopic->getId())) {
|
||||
$this->UpdateTopicContent($oTopic);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function UpdateTopicContent(ModuleTopic_EntityTopic $oTopic) {
|
||||
/**
|
||||
* Обновляет контент топика
|
||||
*
|
||||
* @param ModuleTopic_EntityTopic $oTopic Объект топика
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateTopicContent(ModuleTopic_EntityTopic $oTopic) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.topic_content')."
|
||||
SET
|
||||
topic_text= ?,
|
||||
|
@ -412,13 +517,18 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
topic_extra= ?
|
||||
WHERE
|
||||
topic_id = ?d
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$oTopic->getText(),$oTopic->getTextShort(),$oTopic->getTextSource(),$oTopic->getExtra(),$oTopic->getId())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Строит строку условий для SQL запроса топиков
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @return string
|
||||
*/
|
||||
protected function buildFilter($aFilter) {
|
||||
$sWhere='';
|
||||
if (isset($aFilter['topic_date_more'])) {
|
||||
|
@ -426,7 +536,7 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
}
|
||||
if (isset($aFilter['topic_publish'])) {
|
||||
$sWhere.=" AND t.topic_publish = ".(int)$aFilter['topic_publish'];
|
||||
}
|
||||
}
|
||||
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) {
|
||||
|
@ -436,7 +546,7 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
$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'])) {
|
||||
$sWhere.=" AND t.topic_date_add >= '".$aFilter['topic_new']."'";
|
||||
|
@ -468,8 +578,8 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
$sType=$aBlogId;
|
||||
$aBlogId=array();
|
||||
}
|
||||
|
||||
$aBlogTypes[] = (count($aBlogId)==0)
|
||||
|
||||
$aBlogTypes[] = (count($aBlogId)==0)
|
||||
? "(b.blog_type='".$sType."')"
|
||||
: "(b.blog_type='".$sType."' AND t.blog_id IN ('".join("','",$aBlogId)."'))";
|
||||
}
|
||||
|
@ -483,9 +593,15 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
}
|
||||
return $sWhere;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает список тегов по первым буквам тега
|
||||
*
|
||||
* @param string $sTag Тэг
|
||||
* @param int $iLimit Количество
|
||||
* @return bool
|
||||
*/
|
||||
public function GetTopicTagsByLike($sTag,$iLimit) {
|
||||
$sTag=mb_strtolower($sTag,"UTF-8");
|
||||
$sTag=mb_strtolower($sTag,"UTF-8");
|
||||
$sql = "SELECT
|
||||
topic_tag_text
|
||||
FROM
|
||||
|
@ -495,7 +611,7 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
GROUP BY
|
||||
topic_tag_text
|
||||
LIMIT 0, ?d
|
||||
";
|
||||
";
|
||||
$aReturn=array();
|
||||
if ($aRows=$this->oDb->select($sql,$sTag.'%',$iLimit)) {
|
||||
foreach ($aRows as $aRow) {
|
||||
|
@ -504,8 +620,13 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
public function UpdateTopicRead(ModuleTopic_EntityTopicRead $oTopicRead) {
|
||||
/**
|
||||
* Обновляем дату прочтения топика
|
||||
*
|
||||
* @param ModuleTopic_EntityTopicRead $oTopicRead Объект факта чтения топика
|
||||
* @return int
|
||||
*/
|
||||
public function UpdateTopicRead(ModuleTopic_EntityTopicRead $oTopicRead) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.topic_read')."
|
||||
SET
|
||||
comment_count_last = ? ,
|
||||
|
@ -515,11 +636,16 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
topic_id = ?
|
||||
AND
|
||||
user_id = ?
|
||||
";
|
||||
";
|
||||
return $this->oDb->query($sql,$oTopicRead->getCommentCountLast(),$oTopicRead->getCommentIdLast(),$oTopicRead->getDateRead(),$oTopicRead->getTopicId(),$oTopicRead->getUserId());
|
||||
}
|
||||
|
||||
public function AddTopicRead(ModuleTopic_EntityTopicRead $oTopicRead) {
|
||||
}
|
||||
/**
|
||||
* Устанавливаем дату прочтения топика
|
||||
*
|
||||
* @param ModuleTopic_EntityTopicRead $oTopicRead Объект факта чтения топика
|
||||
* @return bool
|
||||
*/
|
||||
public function AddTopicRead(ModuleTopic_EntityTopicRead $oTopicRead) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.topic_read')."
|
||||
SET
|
||||
comment_count_last = ? ,
|
||||
|
@ -527,32 +653,38 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
date_read = ? ,
|
||||
topic_id = ? ,
|
||||
user_id = ?
|
||||
";
|
||||
";
|
||||
return $this->oDb->query($sql,$oTopicRead->getCommentCountLast(),$oTopicRead->getCommentIdLast(),$oTopicRead->getDateRead(),$oTopicRead->getTopicId(),$oTopicRead->getUserId());
|
||||
}
|
||||
/**
|
||||
* Удаляет записи о чтении записей по списку идентификаторов
|
||||
*
|
||||
* @param array $aTopicId
|
||||
* @param array $aTopicId Список ID топиков
|
||||
* @return bool
|
||||
*/
|
||||
*/
|
||||
public function DeleteTopicReadByArrayId($aTopicId) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.topic_read')."
|
||||
WHERE
|
||||
topic_id IN(?a)
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$aTopicId)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список просмотром/чтения топиков по списку айдишников
|
||||
*
|
||||
* @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
|
||||
t.*
|
||||
FROM
|
||||
|
@ -567,10 +699,15 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
foreach ($aRows as $aRow) {
|
||||
$aReads[]=Engine::GetEntity('Topic_TopicRead',$aRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aReads;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет факт голосования за топик-вопрос
|
||||
*
|
||||
* @param ModuleTopic_EntityTopicQuestionVote $oTopicQuestionVote Объект голосования в топике-опросе
|
||||
* @return bool
|
||||
*/
|
||||
public function AddTopicQuestionVote(ModuleTopic_EntityTopicQuestionVote $oTopicQuestionVote) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.topic_question_vote')."
|
||||
(topic_id,
|
||||
|
@ -578,20 +715,25 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
answer
|
||||
)
|
||||
VALUES(?d, ?d, ?f)
|
||||
";
|
||||
if ($this->oDb->query($sql,$oTopicQuestionVote->getTopicId(),$oTopicQuestionVote->getVoterId(),$oTopicQuestionVote->getAnswer())===0)
|
||||
";
|
||||
if ($this->oDb->query($sql,$oTopicQuestionVote->getTopicId(),$oTopicQuestionVote->getVoterId(),$oTopicQuestionVote->getAnswer())===0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получить список голосований в топике-опросе по списку айдишников
|
||||
*
|
||||
* @param array $aArrayId Список ID топиков
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetTopicsQuestionVoteByArray($aArrayId,$sUserId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
$sql = "SELECT
|
||||
v.*
|
||||
FROM
|
||||
|
@ -606,57 +748,54 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
foreach ($aRows as $aRow) {
|
||||
$aVotes[]=Engine::GetEntity('Topic_TopicQuestionVote',$aRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aVotes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Перемещает топики в другой блог
|
||||
*
|
||||
* @param array $aTopics
|
||||
* @param string $sBlogId
|
||||
* @param array $aTopics Список ID топиков
|
||||
* @param int $sBlogId ID блога
|
||||
* @return bool
|
||||
*/
|
||||
*/
|
||||
public function MoveTopicsByArrayId($aTopics,$sBlogId) {
|
||||
if(!is_array($aTopics)) $aTopics = array($aTopics);
|
||||
|
||||
|
||||
$sql = "UPDATE ".Config::Get('db.table.topic')."
|
||||
SET
|
||||
blog_id= ?d
|
||||
WHERE
|
||||
topic_id IN(?a)
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sBlogId,$aTopics)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Перемещает топики в другой блог
|
||||
*
|
||||
* @param string $sBlogId
|
||||
* @param string $sBlogIdNew
|
||||
* @param int $sBlogId ID старого блога
|
||||
* @param int $sBlogIdNew ID нового блога
|
||||
* @return bool
|
||||
*/
|
||||
*/
|
||||
public function MoveTopics($sBlogId,$sBlogIdNew) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.topic')."
|
||||
SET
|
||||
blog_id= ?d
|
||||
WHERE
|
||||
blog_id = ?d
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sBlogIdNew,$sBlogId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Перемещает теги топиков в другой блог
|
||||
*
|
||||
* @param string $sBlogId
|
||||
* @param string $sBlogIdNew
|
||||
* @param int $sBlogId ID старого блога
|
||||
* @param int $sBlogIdNew ID нового блога
|
||||
* @return bool
|
||||
*/
|
||||
public function MoveTopicsTags($sBlogId,$sBlogIdNew) {
|
||||
|
@ -665,42 +804,38 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
blog_id= ?d
|
||||
WHERE
|
||||
blog_id = ?d
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sBlogIdNew,$sBlogId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Перемещает теги топиков в другой блог
|
||||
*
|
||||
* @param array $aTopics
|
||||
* @param string $sBlogId
|
||||
* @param array $aTopics Список ID топиков
|
||||
* @param int $sBlogId ID блога
|
||||
* @return bool
|
||||
*/
|
||||
public function MoveTopicsTagsByArrayId($aTopics,$sBlogId) {
|
||||
if(!is_array($aTopics)) $aTopics = array($aTopics);
|
||||
|
||||
|
||||
$sql = "UPDATE ".Config::Get('db.table.topic_tag')."
|
||||
SET
|
||||
blog_id= ?d
|
||||
WHERE
|
||||
topic_id IN(?a)
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$sBlogId,$aTopics)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает список фоток из фото-сета по списку id фоток
|
||||
* Возвращает список фотографий к топику-фотосет по списку id фоток
|
||||
*
|
||||
* @param unknown_type $aArrayId
|
||||
* @return unknown
|
||||
* @param array $aPhotoId Список ID фото
|
||||
* @return array
|
||||
*/
|
||||
public function GetTopicPhotosByArrayId($aArrayId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
|
@ -722,16 +857,15 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public function getPhotosByTopicId($iTopicId, $iFromId, $iCount)
|
||||
{
|
||||
/**
|
||||
* Получить список изображений из фотосета по id топика
|
||||
*
|
||||
* @param int $iTopicId ID топика
|
||||
* @param int|null $iFromId ID с которого начинать выборку
|
||||
* @param int|null $iCount Количество
|
||||
* @return array
|
||||
*/
|
||||
public function getPhotosByTopicId($iTopicId, $iFromId, $iCount) {
|
||||
$sql = 'SELECT * FROM ' . Config::Get('db.table.topic_photo') . ' WHERE topic_id = ?d {AND id > ?d LIMIT 0, ?d}';
|
||||
$aPhotos = $this->oDb->select($sql, $iTopicId, ($iFromId !== null) ? $iFromId : DBSIMPLE_SKIP, $iCount);
|
||||
$aReturn = array();
|
||||
|
@ -742,9 +876,13 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
public function getPhotosByTargetTmp($sTargetTmp)
|
||||
{
|
||||
/**
|
||||
* Получить список изображений из фотосета по временному коду
|
||||
*
|
||||
* @param string $sTargetTmp Временный ключ
|
||||
* @return array
|
||||
*/
|
||||
public function getPhotosByTargetTmp($sTargetTmp) {
|
||||
$sql = 'SELECT * FROM ' . Config::Get('db.table.topic_photo') . ' WHERE target_tmp = ?';
|
||||
$aPhotos = $this->oDb->select($sql, $sTargetTmp);
|
||||
$aReturn = array();
|
||||
|
@ -755,9 +893,13 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
public function getTopicPhotoById($iPhotoId)
|
||||
{
|
||||
/**
|
||||
* Получить изображение из фотосета по его id
|
||||
*
|
||||
* @param int $iPhotoId ID фото
|
||||
* @return ModuleTopic_EntityTopicPhoto|null
|
||||
*/
|
||||
public function getTopicPhotoById($iPhotoId) {
|
||||
$sql = 'SELECT * FROM ' . Config::Get('db.table.topic_photo') . ' WHERE id = ?d';
|
||||
$aPhoto = $this->oDb->selectRow($sql, $iPhotoId);
|
||||
if ($aPhoto) {
|
||||
|
@ -766,23 +908,35 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public function getCountPhotosByTopicId($iTopicId)
|
||||
{
|
||||
/**
|
||||
* Получить число изображений из фотосета по id топика
|
||||
*
|
||||
* @param int $iTopicId ID топика
|
||||
* @return int
|
||||
*/
|
||||
public function getCountPhotosByTopicId($iTopicId) {
|
||||
$sql = 'SELECT count(id) FROM ' . Config::Get('db.table.topic_photo') . ' WHERE topic_id = ?d';
|
||||
$aPhotosCount = $this->oDb->selectCol($sql, $iTopicId);
|
||||
return $aPhotosCount[0];
|
||||
}
|
||||
|
||||
public function getCountPhotosByTargetTmp($sTargetTmp)
|
||||
{
|
||||
/**
|
||||
* Получить число изображений из фотосета по id топика
|
||||
*
|
||||
* @param string $sTargetTmp Временный ключ
|
||||
* @return int
|
||||
*/
|
||||
public function getCountPhotosByTargetTmp($sTargetTmp) {
|
||||
$sql = 'SELECT count(id) FROM ' . Config::Get('db.table.topic_photo') . ' WHERE target_tmp = ?';
|
||||
$aPhotosCount = $this->oDb->selectCol($sql, $sTargetTmp);
|
||||
return $aPhotosCount[0];
|
||||
}
|
||||
|
||||
public function addTopicPhoto($oPhoto)
|
||||
{
|
||||
/**
|
||||
* Добавить к топику изображение
|
||||
*
|
||||
* @param ModuleTopic_EntityTopicPhoto $oPhoto Объект фото к топику-фотосету
|
||||
* @return bool
|
||||
*/
|
||||
public function addTopicPhoto($oPhoto) {
|
||||
if (!$oPhoto->getTopicId() && !$oPhoto->getTargetTmp()) return false;
|
||||
$sTargetType = ($oPhoto->getTopicId()) ? 'topic_id' : 'target_tmp';
|
||||
$iTargetId = ($sTargetType == 'topic_id') ? $oPhoto->getTopicId() : $oPhoto->getTargetTmp();
|
||||
|
@ -790,9 +944,12 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
path = ?, description = ?, ?# = ?';
|
||||
return $this->oDb->query($sql, $oPhoto->getPath(), $oPhoto->getDescription(), $sTargetType, $iTargetId);
|
||||
}
|
||||
|
||||
public function updateTopicPhoto($oPhoto)
|
||||
{
|
||||
/**
|
||||
* Обновить данные по изображению
|
||||
*
|
||||
* @param ModuleTopic_EntityTopicPhoto $oPhoto Объект фото
|
||||
*/
|
||||
public function updateTopicPhoto($oPhoto) {
|
||||
if (!$oPhoto->getTopicId() && !$oPhoto->getTargetTmp()) return false;
|
||||
if ($oPhoto->getTopicId()) {
|
||||
$oPhoto->setTargetTmp = null;
|
||||
|
@ -801,14 +958,21 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
path = ?, description = ?, topic_id = ?d, target_tmp=? WHERE id = ?d';
|
||||
$this->oDb->query($sql, $oPhoto->getPath(), $oPhoto->getDescription(), $oPhoto->getTopicId(), $oPhoto->getTargetTmp(), $oPhoto->getId());
|
||||
}
|
||||
|
||||
public function deleteTopicPhoto($iPhotoId)
|
||||
{
|
||||
/**
|
||||
* Удалить изображение
|
||||
*
|
||||
* @param int $iPhotoId ID фото
|
||||
*/
|
||||
public function deleteTopicPhoto($iPhotoId) {
|
||||
$sql = 'DELETE FROM '. Config::Get('db.table.topic_photo') . ' WHERE
|
||||
id= ?d';
|
||||
$this->oDb->query($sql, $iPhotoId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Пересчитывает счетчик избранных топиков
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function RecalculateFavourite() {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.topic')." t
|
||||
|
@ -828,7 +992,11 @@ class ModuleTopic_MapperTopic extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Пересчитывает счетчики голосований
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function RecalculateVote() {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.topic')." t
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
/**
|
||||
* Модуль для работы с пользователями
|
||||
*
|
||||
* @package modules.user
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUser extends Module {
|
||||
/**
|
||||
|
@ -28,11 +30,24 @@ class ModuleUser extends Module {
|
|||
const USER_FRIEND_DELETE = 4;
|
||||
const USER_FRIEND_REJECT = 8;
|
||||
const USER_FRIEND_NULL = 16;
|
||||
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleUser_MapperUser
|
||||
*/
|
||||
protected $oMapper;
|
||||
/**
|
||||
* Объект текущего пользователя
|
||||
*
|
||||
* @var ModuleUser_EntityUser|null
|
||||
*/
|
||||
protected $oUserCurrent=null;
|
||||
/**
|
||||
* Объект сессии текущего пользователя
|
||||
*
|
||||
* @var ModuleUser_EntitySession|null
|
||||
*/
|
||||
protected $oSession=null;
|
||||
|
||||
/**
|
||||
* Список типов пользовательских полей
|
||||
*
|
||||
|
@ -65,8 +80,6 @@ class ModuleUser extends Module {
|
|||
* В куках стоит время на сколько запоминать юзера
|
||||
*/
|
||||
$this->AutoLogin();
|
||||
|
||||
$this->oMapper->SetUserCurrent($this->oUserCurrent);
|
||||
/**
|
||||
* Обновляем сессию
|
||||
*/
|
||||
|
@ -74,17 +87,19 @@ class ModuleUser extends Module {
|
|||
$this->UpdateSession();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список типов полей
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function GetUserFieldTypes() {
|
||||
return $this->aUserFieldTypes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет новый тип с пользовательские поля
|
||||
* @param string $sType
|
||||
*
|
||||
* @param string $sType Тип
|
||||
* @return bool
|
||||
*/
|
||||
public function AddUserFieldTypes($sType) {
|
||||
if (!in_array($sType,$this->aUserFieldTypes)) {
|
||||
|
@ -96,10 +111,13 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получает дополнительные данные(объекты) для юзеров по их ID
|
||||
*
|
||||
* @param array $aUserId Список ID пользователей
|
||||
* @param array|null $aAllowData Список типод дополнительных данных для подгрузки у пользователей
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersAdditionalData($aUserId,$aAllowData=null) {
|
||||
if (is_null($aAllowData)) {
|
||||
$aAllowData=array('vote','session','friend','geo_target');
|
||||
$aAllowData=array('vote','session','friend','geo_target','note');
|
||||
}
|
||||
func_array_simpleflip($aAllowData);
|
||||
if (!is_array($aUserId)) {
|
||||
|
@ -116,6 +134,7 @@ class ModuleUser extends Module {
|
|||
$aFriends=array();
|
||||
$aVote=array();
|
||||
$aGeoTargets=array();
|
||||
$aNotes=array();
|
||||
if (isset($aAllowData['session'])) {
|
||||
$aSessions=$this->GetSessionsByArrayId($aUserId);
|
||||
}
|
||||
|
@ -129,6 +148,9 @@ class ModuleUser extends Module {
|
|||
if (isset($aAllowData['geo_target'])) {
|
||||
$aGeoTargets=$this->Geo_GetTargetsByTargetArray('user',$aUserId);
|
||||
}
|
||||
if (isset($aAllowData['note']) and $this->oUserCurrent) {
|
||||
$aNotes=$this->GetUserNotesByArray($aUserId,$this->oUserCurrent->getId());
|
||||
}
|
||||
/**
|
||||
* Добавляем данные к результату
|
||||
*/
|
||||
|
@ -155,6 +177,13 @@ class ModuleUser extends Module {
|
|||
} else {
|
||||
$oUser->setGeoTarget(null);
|
||||
}
|
||||
if (isset($aAllowData['note'])) {
|
||||
if (isset($aNotes[$oUser->getId()])) {
|
||||
$oUser->setUserNote($aNotes[$oUser->getId()]);
|
||||
} else {
|
||||
$oUser->setUserNote(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $aUsers;
|
||||
|
@ -162,7 +191,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Список юзеров по ID
|
||||
*
|
||||
* @param array $aUserId
|
||||
* @param array $aUserId Список ID пользователей
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByArrayId($aUserId) {
|
||||
if (!$aUserId) {
|
||||
|
@ -223,17 +253,21 @@ class ModuleUser extends Module {
|
|||
$aUsers=func_array_sort_by_keys($aUsers,$aUserId);
|
||||
return $aUsers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Алиас для корректной работы ORM
|
||||
*
|
||||
* @param unknown_type $aUserId
|
||||
* @return unknown
|
||||
* @param array $aUserId Список ID пользователей
|
||||
* @return array
|
||||
*/
|
||||
public function GetUserItemsByArrayId($aUserId) {
|
||||
return $this->GetUsersByArrayId($aUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение пользователей по списку ID используя общий кеш
|
||||
*
|
||||
* @param array $aUserId Список ID пользователей
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByArrayIdSolid($aUserId) {
|
||||
if (!is_array($aUserId)) {
|
||||
$aUserId=array($aUserId);
|
||||
|
@ -254,7 +288,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Список сессий юзеров по ID
|
||||
*
|
||||
* @param array $aUserId
|
||||
* @param array $aUserId Список ID пользователей
|
||||
* @return array
|
||||
*/
|
||||
public function GetSessionsByArrayId($aUserId) {
|
||||
if (!$aUserId) {
|
||||
|
@ -318,8 +353,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получить список сессий по списку айдишников, но используя единый кеш
|
||||
*
|
||||
* @param unknown_type $aUserId
|
||||
* @return unknown
|
||||
* @param array $aUserId Список ID пользователей
|
||||
* @return array
|
||||
*/
|
||||
public function GetSessionsByArrayIdSolid($aUserId) {
|
||||
if (!is_array($aUserId)) {
|
||||
|
@ -341,8 +376,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получает сессию юзера
|
||||
*
|
||||
* @param unknown_type $sUserId
|
||||
* @return unknown
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return ModuleUser_EntitySession|null
|
||||
*/
|
||||
public function GetSessionByUserId($sUserId) {
|
||||
$aSessions=$this->GetSessionsByArrayId($sUserId);
|
||||
|
@ -365,8 +400,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Добавляет юзера
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @return unknown
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @return ModuleUser_EntityUser|bool
|
||||
*/
|
||||
public function Add(ModuleUser_EntityUser $oUser) {
|
||||
if ($sId=$this->oMapper->Add($oUser)) {
|
||||
|
@ -384,8 +419,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получить юзера по ключу активации
|
||||
*
|
||||
* @param unknown_type $sKey
|
||||
* @return unknown
|
||||
* @param string $sKey Ключ активации
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function GetUserByActivateKey($sKey) {
|
||||
$id=$this->oMapper->GetUserByActivateKey($sKey);
|
||||
|
@ -394,8 +429,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получить юзера по ключу сессии
|
||||
*
|
||||
* @param unknown_type $sKey
|
||||
* @return unknown
|
||||
* @param string $sKey Сессионный ключ
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function GetUserBySessionKey($sKey) {
|
||||
$id=$this->oMapper->GetUserBySessionKey($sKey);
|
||||
|
@ -404,8 +439,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получить юзера по мылу
|
||||
*
|
||||
* @param unknown_type $sMail
|
||||
* @return unknown
|
||||
* @param string $sMail Емайл
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function GetUserByMail($sMail) {
|
||||
$id=$this->oMapper->GetUserByMail($sMail);
|
||||
|
@ -414,8 +449,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получить юзера по логину
|
||||
*
|
||||
* @param unknown_type $sLogin
|
||||
* @return unknown
|
||||
* @param string $sLogin Логин пользователя
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function GetUserByLogin($sLogin) {
|
||||
$s=strtolower($sLogin);
|
||||
|
@ -429,10 +464,13 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получить юзера по айдишнику
|
||||
*
|
||||
* @param unknown_type $sId
|
||||
* @return unknown
|
||||
* @param int $sId ID пользователя
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function GetUserById($sId) {
|
||||
if (!is_numeric($sId)) {
|
||||
return null;
|
||||
}
|
||||
$aUsers=$this->GetUsersAdditionalData($sId);
|
||||
if (isset($aUsers[$sId])) {
|
||||
return $aUsers[$sId];
|
||||
|
@ -442,8 +480,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Обновляет юзера
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @return unknown
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function Update(ModuleUser_EntityUser $oUser) {
|
||||
//чистим зависимые кеши
|
||||
|
@ -454,8 +492,10 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Авторизовывает юзера
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @return unknown
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @param bool $bRemember Запоминать пользователя или нет
|
||||
* @param string $sKey Ключ авторизации для куков
|
||||
* @return bool
|
||||
*/
|
||||
public function Authorization(ModuleUser_EntityUser $oUser,$bRemember=true,$sKey=null) {
|
||||
if (!$oUser->getId() or !$oUser->getActivate()) {
|
||||
|
@ -484,6 +524,7 @@ class ModuleUser extends Module {
|
|||
if ($bRemember) {
|
||||
setcookie('key',$sKey,time()+Config::Get('sys.cookie.time'),Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* Автоматическое заллогинивание по ключу из куков
|
||||
|
@ -493,7 +534,7 @@ class ModuleUser extends Module {
|
|||
if ($this->oUserCurrent) {
|
||||
return;
|
||||
}
|
||||
if (isset($_COOKIE['key']) and $sKey=$_COOKIE['key']) {
|
||||
if (isset($_COOKIE['key']) and is_string($_COOKIE['key']) and $sKey=$_COOKIE['key']) {
|
||||
if ($oUser=$this->GetUserBySessionKey($sKey)) {
|
||||
$this->Authorization($oUser);
|
||||
} else {
|
||||
|
@ -504,7 +545,7 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Авторизован ли юзер
|
||||
*
|
||||
* @return unknown
|
||||
* @return bool
|
||||
*/
|
||||
public function IsAuthorization() {
|
||||
if ($this->oUserCurrent) {
|
||||
|
@ -516,7 +557,7 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получить текущего юзера
|
||||
*
|
||||
* @return unknown
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function GetUserCurrent() {
|
||||
return $this->oUserCurrent;
|
||||
|
@ -559,7 +600,13 @@ class ModuleUser extends Module {
|
|||
}
|
||||
$this->Cache_Set($data, "user_session_{$this->oSession->getUserId()}", array(), 60*60*24*4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Создание пользовательской сессии
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @param string $sKey Сессионный ключ
|
||||
* @return bool
|
||||
*/
|
||||
protected function CreateSession(ModuleUser_EntityUser $oUser,$sKey) {
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('user_session_update'));
|
||||
$this->Cache_Delete("user_session_{$oUser->getId()}");
|
||||
|
@ -579,8 +626,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получить список юзеров по дате последнего визита
|
||||
*
|
||||
* @param unknown_type $iLimit
|
||||
* @return unknown
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByDateLast($iLimit=20) {
|
||||
if ($this->IsAuthorization()) {
|
||||
|
@ -595,11 +642,11 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Возвращает список пользователей по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
* @param $aOrder
|
||||
* @param $iCurrPage
|
||||
* @param $iPerPage
|
||||
* @param array $aAllowData
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элментов на страницу
|
||||
* @param array $aAllowData Список типо данных для подгрузки к пользователям
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetUsersByFilter($aFilter,$aOrder,$iCurrPage,$iPerPage,$aAllowData=null) {
|
||||
|
@ -614,8 +661,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получить список юзеров по дате регистрации
|
||||
*
|
||||
* @param unknown_type $iLimit
|
||||
* @return unknown
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByDateRegister($iLimit=20) {
|
||||
$aResult=$this->GetUsersByFilter(array('activate'=>1),array('id'=>'desc'),1,$iLimit);
|
||||
|
@ -624,7 +671,7 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получить статистику по юзерам
|
||||
*
|
||||
* @return unknown
|
||||
* @return array
|
||||
*/
|
||||
public function GetStatUsers() {
|
||||
if (false === ($aStat = $this->Cache_Get("user_stats"))) {
|
||||
|
@ -642,11 +689,11 @@ class ModuleUser extends Module {
|
|||
return $aStat;
|
||||
}
|
||||
/**
|
||||
* Получить список логинов по первым буквам
|
||||
* Получить список юзеров по первым буквам логина
|
||||
*
|
||||
* @param unknown_type $sUserLogin
|
||||
* @param unknown_type $iLimit
|
||||
* @return unknown
|
||||
* @param string $sUserLogin Логин
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByLoginLike($sUserLogin,$iLimit) {
|
||||
if (false === ($data = $this->Cache_Get("user_like_{$sUserLogin}_{$iLimit}"))) {
|
||||
|
@ -656,13 +703,11 @@ class ModuleUser extends Module {
|
|||
$data=$this->GetUsersAdditionalData($data);
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Получить список отношений друзей
|
||||
*
|
||||
* @param array $aUserId
|
||||
* @param array $aUserId Список ID пользователей проверяемых на дружбу
|
||||
* @param int $sUserId ID пользователя у которого проверяем друзей
|
||||
* @return array
|
||||
*/
|
||||
public function GetFriendsByArray($aUserId,$sUserId) {
|
||||
|
@ -730,10 +775,10 @@ class ModuleUser extends Module {
|
|||
return $aFriends;
|
||||
}
|
||||
/**
|
||||
* Получить список отношений с френдами по списку айдишников, но используя единый кеш
|
||||
* Получить список отношений друзей используя единый кеш
|
||||
*
|
||||
* @param array $aUserId
|
||||
* @param string $sUserId
|
||||
* @param array $aUserId Список ID пользователей проверяемых на дружбу
|
||||
* @param int $sUserId ID пользователя у которого проверяем друзей
|
||||
* @return array
|
||||
*/
|
||||
public function GetFriendsByArraySolid($aUserId,$sUserId) {
|
||||
|
@ -757,9 +802,9 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получаем привязку друга к юзеру(есть ли у юзера данный друг)
|
||||
*
|
||||
* @param string $sFriendId
|
||||
* @param string $sUserId
|
||||
* @return ModuleUser_EntityFriend
|
||||
* @param int $sFriendId ID пользователя друга
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return ModuleUser_EntityFriend|null
|
||||
*/
|
||||
public function GetFriend($sFriendId,$sUserId) {
|
||||
$data=$this->GetFriendsByArray($sFriendId,$sUserId);
|
||||
|
@ -771,7 +816,7 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Добавляет друга
|
||||
*
|
||||
* @param ModuleUser_EntityFriend $oFriend
|
||||
* @param ModuleUser_EntityFriend $oFriend Объект дружбы(связи пользователей)
|
||||
* @return bool
|
||||
*/
|
||||
public function AddFriend(ModuleUser_EntityFriend $oFriend) {
|
||||
|
@ -785,7 +830,7 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Удаляет друга
|
||||
*
|
||||
* @param ModuleUser_EntityFriend $oFriend
|
||||
* @param ModuleUser_EntityFriend $oFriend Объект дружбы(связи пользователей)
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteFriend(ModuleUser_EntityFriend $oFriend) {
|
||||
|
@ -801,7 +846,7 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Удаляет информацию о дружбе из базы данных
|
||||
*
|
||||
* @param ModuleUser_EntityFriend $oFriend
|
||||
* @param ModuleUser_EntityFriend $oFriend Объект дружбы(связи пользователей)
|
||||
* @return bool
|
||||
*/
|
||||
public function EraseFriend(ModuleUser_EntityFriend $oFriend) {
|
||||
|
@ -811,11 +856,10 @@ class ModuleUser extends Module {
|
|||
$this->Cache_Delete("user_friend_{$oFriend->getUserTo()}_{$oFriend->getUserFrom()}");
|
||||
return $this->oMapper->EraseFriend($oFriend);
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет информацию о друге
|
||||
*
|
||||
* @param ModuleUser_EntityFriend $oFriend
|
||||
* @param ModuleUser_EntityFriend $oFriend Объект дружбы(связи пользователей)
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateFriend(ModuleUser_EntityFriend $oFriend) {
|
||||
|
@ -825,13 +869,12 @@ class ModuleUser extends Module {
|
|||
$this->Cache_Delete("user_friend_{$oFriend->getUserTo()}_{$oFriend->getUserFrom()}");
|
||||
return $this->oMapper->UpdateFriend($oFriend);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает список друзей
|
||||
*
|
||||
* @param int $sUserId
|
||||
* @param int $iPage
|
||||
* @param int $iPerPage
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersFriend($sUserId,$iPage=1,$iPerPage=10) {
|
||||
|
@ -843,12 +886,11 @@ class ModuleUser extends Module {
|
|||
$data['collection']=$this->GetUsersAdditionalData($data['collection']);
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает количество друзей
|
||||
*
|
||||
* @param int $sUserId
|
||||
* @return array
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountUsersFriend($sUserId) {
|
||||
$sKey="count_user_friend_{$sUserId}";
|
||||
|
@ -858,13 +900,12 @@ class ModuleUser extends Module {
|
|||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает инвайт по его коду
|
||||
*
|
||||
* @param string $sCode
|
||||
* @param int $iUsed
|
||||
* @return string
|
||||
* @param string $sCode Код инвайта
|
||||
* @param int $iUsed Флаг испольщования инвайта
|
||||
* @return ModuleUser_EntityInvite|null
|
||||
*/
|
||||
public function GetInviteByCode($sCode,$iUsed=0) {
|
||||
return $this->oMapper->GetInviteByCode($sCode,$iUsed);
|
||||
|
@ -872,8 +913,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Добавляет новый инвайт
|
||||
*
|
||||
* @param ModuleUser_EntityInvite $oInvite
|
||||
* @return unknown
|
||||
* @param ModuleUser_EntityInvite $oInvite Объект инвайта
|
||||
* @return ModuleUser_EntityInvite|bool
|
||||
*/
|
||||
public function AddInvite(ModuleUser_EntityInvite $oInvite) {
|
||||
if ($sId=$this->oMapper->AddInvite($oInvite)) {
|
||||
|
@ -885,8 +926,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Обновляет инвайт
|
||||
*
|
||||
* @param ModuleUser_EntityInvite $oInvite
|
||||
* @return unknown
|
||||
* @param ModuleUser_EntityInvite $oInvite бъект инвайта
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateInvite(ModuleUser_EntityInvite $oInvite) {
|
||||
//чистим зависимые кеши
|
||||
|
@ -896,8 +937,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Генерирует новый инвайт
|
||||
*
|
||||
* @param unknown_type $oUser
|
||||
* @return unknown
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @return ModuleUser_EntityInvite|bool
|
||||
*/
|
||||
public function GenerateInvite($oUser) {
|
||||
$oInvite=Engine::GetEntity('User_Invite');
|
||||
|
@ -909,9 +950,9 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получает число использованых приглашений юзером за определенную дату
|
||||
*
|
||||
* @param unknown_type $sUserIdFrom
|
||||
* @param unknown_type $sDate
|
||||
* @return unknown
|
||||
* @param int $sUserIdFrom ID пользователя
|
||||
* @param string $sDate Дата
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountInviteUsedByDate($sUserIdFrom,$sDate) {
|
||||
return $this->oMapper->GetCountInviteUsedByDate($sUserIdFrom,$sDate);
|
||||
|
@ -919,8 +960,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получает полное число использованных приглашений юзера
|
||||
*
|
||||
* @param unknown_type $sUserIdFrom
|
||||
* @return unknown
|
||||
* @param int $sUserIdFrom ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountInviteUsed($sUserIdFrom) {
|
||||
return $this->oMapper->GetCountInviteUsed($sUserIdFrom);
|
||||
|
@ -928,8 +969,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получаем число доступных приглашений для юзера
|
||||
*
|
||||
* @param unknown_type $oUserFrom
|
||||
* @return unknown
|
||||
* @param ModuleUser_EntityUser $oUserFrom Объект пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountInviteAvailable(ModuleUser_EntityUser $oUserFrom) {
|
||||
$sDay=7;
|
||||
|
@ -943,8 +984,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получает список приглашенных юзеров
|
||||
*
|
||||
* @param unknown_type $sUserId
|
||||
* @return unknown
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersInvite($sUserId) {
|
||||
if (false === ($data = $this->Cache_Get("users_invite_{$sUserId}"))) {
|
||||
|
@ -957,8 +998,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получает юзера который пригласил
|
||||
*
|
||||
* @param unknown_type $sUserIdTo
|
||||
* @return unknown
|
||||
* @param int $sUserIdTo ID пользователя
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function GetUserInviteFrom($sUserIdTo) {
|
||||
if (false === ($id = $this->Cache_Get("user_invite_from_{$sUserIdTo}"))) {
|
||||
|
@ -970,8 +1011,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Добавляем воспоминание(восстановление) пароля
|
||||
*
|
||||
* @param unknown_type $oReminder
|
||||
* @return unknown
|
||||
* @param ModuleUser_EntityReminder $oReminder Объект восстановления пароля
|
||||
* @return bool
|
||||
*/
|
||||
public function AddReminder(ModuleUser_EntityReminder $oReminder) {
|
||||
return $this->oMapper->AddReminder($oReminder);
|
||||
|
@ -979,8 +1020,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Сохраняем воспомнинание(восстановление) пароля
|
||||
*
|
||||
* @param unknown_type $oReminder
|
||||
* @return unknown
|
||||
* @param ModuleUser_EntityReminder $oReminder Объект восстановления пароля
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateReminder(ModuleUser_EntityReminder $oReminder) {
|
||||
return $this->oMapper->UpdateReminder($oReminder);
|
||||
|
@ -988,21 +1029,19 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Получаем запись восстановления пароля по коду
|
||||
*
|
||||
* @param unknown_type $sCode
|
||||
* @return unknown
|
||||
* @param string $sCode Код восстановления пароля
|
||||
* @return ModuleUser_EntityReminder|null
|
||||
*/
|
||||
public function GetReminderByCode($sCode) {
|
||||
return $this->oMapper->GetReminderByCode($sCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload user avatar on server
|
||||
* Make resized images
|
||||
* Загрузка аватара пользователя
|
||||
*
|
||||
* @param string $sFileTmp
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param string $sFileTmp Серверный путь до временного аватара
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @param array $aSize Размер области из которой нужно вырезать картинку - array('x1'=>0,'y1'=>0,'x2'=>100,'y2'=>100)
|
||||
* @return (string|bool)
|
||||
* @return string|bool
|
||||
*/
|
||||
public function UploadAvatar($sFileTmp,$oUser,$aSize=array()) {
|
||||
if (!file_exists($sFileTmp)) {
|
||||
|
@ -1096,9 +1135,9 @@ class ModuleUser extends Module {
|
|||
return false;
|
||||
}
|
||||
/**
|
||||
* Delete avatar from server
|
||||
* Удаляет аватар пользователя
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
*/
|
||||
public function DeleteAvatar($oUser) {
|
||||
/**
|
||||
|
@ -1111,14 +1150,13 @@ class ModuleUser extends Module {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload user foto
|
||||
* загрузка фотографии пользователя
|
||||
*
|
||||
* @param string $sFileTmp
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
* @param string $sFileTmp Серверный путь до временной фотографии
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @param array $aSize Размер области из которой нужно вырезать картинку - array('x1'=>0,'y1'=>0,'x2'=>100,'y2'=>100)
|
||||
* @return string
|
||||
* @return string|bool
|
||||
*/
|
||||
public function UploadFoto($sFileTmp,$oUser,$aSize=array()) {
|
||||
if (!file_exists($sFileTmp)) {
|
||||
|
@ -1193,7 +1231,7 @@ class ModuleUser extends Module {
|
|||
return false;
|
||||
}
|
||||
/**
|
||||
* Delete user foto from server
|
||||
* Удаляет фото пользователя
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser
|
||||
*/
|
||||
|
@ -1203,7 +1241,8 @@ class ModuleUser extends Module {
|
|||
/**
|
||||
* Проверяет логин на корректность
|
||||
*
|
||||
* @param unknown_type $sLogin
|
||||
* @param string $sLogin Логин пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function CheckLogin($sLogin) {
|
||||
if (preg_match("/^[\da-z\_\-]{".Config::Get('module.user.login.min_size').','.Config::Get('module.user.login.max_size')."}$/i",$sLogin)){
|
||||
|
@ -1211,106 +1250,110 @@ class ModuleUser extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить дополниетльные поля профиля пользователя
|
||||
* @param array $aType Типы полей, null - все типы
|
||||
* @return type
|
||||
* Получить дополнительные поля профиля пользователя
|
||||
*
|
||||
* @param array|null $aType Типы полей, null - все типы
|
||||
* @return array
|
||||
*/
|
||||
public function getUserFields($aType=null) {
|
||||
return $this->oMapper->getUserFields($aType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить значения дополнительных полей профиля пользователя
|
||||
* @param int $iUserId
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param bool $bOnlyNoEmpty Загружать только непустые поля
|
||||
* @param array $aType Типы полей, null - все типы
|
||||
* @return type
|
||||
* @return array
|
||||
*/
|
||||
public function getUserFieldsValues($iUserId, $bOnlyNoEmpty = true, $aType=array('')) {
|
||||
return $this->oMapper->getUserFieldsValues($iUserId, $bOnlyNoEmpty, $aType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить по имени поля его значение дял определённого пользователя
|
||||
* @param type $iUserId
|
||||
* @param type $bOnlyNoEmpty Загружать только непустые поля
|
||||
* @return type
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param string $sName Имя поля
|
||||
* @return string
|
||||
*/
|
||||
public function getUserFieldValueByName($iUserId, $sName) {
|
||||
return $this->oMapper->getUserFieldValueByName($iUserId, $sName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Установить значения дополнительных полей профиля пользователя
|
||||
* @param type $iUserId
|
||||
* @param type $aFields Ассоциативный массив полей id => value
|
||||
* @return type
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param array $aFields Ассоциативный массив полей id => value
|
||||
* @param int $iCountMax Максимальное количество одинаковых полей
|
||||
* @return bool
|
||||
*/
|
||||
public function setUserFieldsValues($iUserId, $aFields, $iCountMax=1) {
|
||||
return $this->oMapper->setUserFieldsValues($iUserId, $aFields, $iCountMax);
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавить поле
|
||||
* @param type $sName
|
||||
* @return type
|
||||
*
|
||||
* @param ModuleUser_EntityField $oField Объект пользовательского поля
|
||||
* @return bool
|
||||
*/
|
||||
public function addUserField($oField) {
|
||||
return $this->oMapper->addUserField($oField);
|
||||
}
|
||||
|
||||
/**
|
||||
* Изменить поле
|
||||
* @param type $sName
|
||||
* @return type
|
||||
*
|
||||
* @param ModuleUser_EntityField $oField Объект пользовательского поля
|
||||
* @return bool
|
||||
*/
|
||||
public function updateUserField($oField) {
|
||||
return $this->oMapper->updateUserField($oField);
|
||||
}
|
||||
|
||||
/**
|
||||
* Удалить поле
|
||||
* @param type $iId
|
||||
* @return type
|
||||
*
|
||||
* @param int $iId ID пользовательского поля
|
||||
* @return bool
|
||||
*/
|
||||
public function deleteUserField($iId) {
|
||||
return $this->oMapper->deleteUserField($iId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет существует ли поле с таким именем
|
||||
*
|
||||
* @param unknown_type $sName
|
||||
* @param unknown_type $iId
|
||||
* @return unknown
|
||||
* @param string $sName Имя поля
|
||||
* @param int|null $iId ID поля
|
||||
* @return bool
|
||||
*/
|
||||
public function userFieldExistsByName($sName, $iId = null) {
|
||||
return $this->oMapper->userFieldExistsByName($sName, $iId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет существует ли поле с таким ID
|
||||
*
|
||||
* @param unknown_type $iId
|
||||
* @return unknown
|
||||
* @param int $iId ID поля
|
||||
* @return bool
|
||||
*/
|
||||
public function userFieldExistsById($iId) {
|
||||
return $this->oMapper->userFieldExistsById($iId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет у пользователя значения полей
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param array|null $aType Список типов для удаления
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteUserFieldValues($iUserId,$aType=null) {
|
||||
return $this->oMapper->DeleteUserFieldValues($iUserId,$aType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список заметок пользователя
|
||||
*
|
||||
* @param $iUserId
|
||||
* @param $iCurrPage
|
||||
* @param $iPerPage
|
||||
* @return array
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetUserNotesByUserId($iUserId,$iCurrPage,$iPerPage) {
|
||||
$aResult=$this->oMapper->GetUserNotesByUserId($iUserId,$iCount,$iCurrPage,$iPerPage);
|
||||
|
@ -1331,52 +1374,78 @@ class ModuleUser extends Module {
|
|||
}
|
||||
return array('collection'=>$aResult,'count'=>$iCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает количество заметок у пользователя
|
||||
*
|
||||
* @param $iUserId
|
||||
* @return mixed
|
||||
* @param int $iUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountUserNotesByUserId($iUserId) {
|
||||
return $this->oMapper->GetCountUserNotesByUserId($iUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращет заметку по автору и пользователю
|
||||
*
|
||||
* @param $iTargetUserId
|
||||
* @param $iUserId
|
||||
* @param int $iTargetUserId ID пользователя о ком заметка
|
||||
* @param int $iUserId ID пользователя автора заметки
|
||||
* @return ModuleUser_EntityNote
|
||||
*/
|
||||
public function GetUserNote($iTargetUserId,$iUserId) {
|
||||
return $this->oMapper->GetUserNote($iTargetUserId,$iUserId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Врзвращает заметку по ID
|
||||
* Возвращает заметку по ID
|
||||
*
|
||||
* @param $iId
|
||||
* @param int $iId ID заметки
|
||||
* @return ModuleUser_EntityNote
|
||||
*/
|
||||
public function GetUserNoteById($iId) {
|
||||
return $this->oMapper->GetUserNoteById($iId);
|
||||
}
|
||||
/**
|
||||
* Возвращает список заметок пользователя по ID целевых юзеров
|
||||
*
|
||||
* @param array $aUserId Список ID целевых пользователей
|
||||
* @param int $sUserId ID пользователя, кто оставлял заметки
|
||||
* @return array
|
||||
*/
|
||||
public function GetUserNotesByArray($aUserId,$sUserId) {
|
||||
if (!$aUserId) {
|
||||
return array();
|
||||
}
|
||||
if (!is_array($aUserId)) {
|
||||
$aUserId=array($aUserId);
|
||||
}
|
||||
$aUserId=array_unique($aUserId);
|
||||
$aNotes=array();
|
||||
$s=join(',',$aUserId);
|
||||
if (false === ($data = $this->Cache_Get("user_notes_{$sUserId}_id_{$s}"))) {
|
||||
$data = $this->oMapper->GetUserNotesByArrayUserId($aUserId,$sUserId);
|
||||
foreach ($data as $oNote) {
|
||||
$aNotes[$oNote->getTargetUserId()]=$oNote;
|
||||
}
|
||||
|
||||
$this->Cache_Set($aNotes, "user_notes_{$sUserId}_id_{$s}", array("user_note_change_by_user_{$sUserId}"), 60*60*24*1);
|
||||
return $aNotes;
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
/**
|
||||
* Удаляет заметку по ID
|
||||
*
|
||||
* @param $iId
|
||||
* @param int $iId ID заметки
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteUserNoteById($iId) {
|
||||
if ($oNote=$this->GetUserNoteById($iId)) {
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("user_note_change_by_user_{$oNote->getUserId()}"));
|
||||
}
|
||||
return $this->oMapper->DeleteUserNoteById($iId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Сохраняет заметку в БД, если ее нет то создает новую
|
||||
*
|
||||
* @param $oNote
|
||||
* @param ModuleUser_EntityNote $oNote Объект заметки
|
||||
* @return bool|ModuleUser_EntityNote
|
||||
*/
|
||||
public function SaveNote($oNote) {
|
||||
|
@ -1384,6 +1453,7 @@ class ModuleUser extends Module {
|
|||
$oNote->setDateAdd(date("Y-m-d H:i:s"));
|
||||
}
|
||||
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("user_note_change_by_user_{$oNote->getUserId()}"));
|
||||
if ($oNoteOld=$this->GetUserNote($oNote->getTargetUserId(),$oNote->getUserId()) ) {
|
||||
$oNoteOld->setText($oNote->getText());
|
||||
$this->oMapper->UpdateUserNote($oNoteOld);
|
||||
|
@ -1396,11 +1466,10 @@ class ModuleUser extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список префиксов логинов пользователей (для алфавитного указателя)
|
||||
*
|
||||
* @param int $iPrefixLength
|
||||
* @param int $iPrefixLength Длина префикса
|
||||
* @return array
|
||||
*/
|
||||
public function GetGroupPrefixUser($iPrefixLength=1) {
|
||||
|
@ -1410,5 +1479,74 @@ class ModuleUser extends Module {
|
|||
}
|
||||
return $data;
|
||||
}
|
||||
/**
|
||||
* Добавляет запись о смене емайла
|
||||
*
|
||||
* @param ModuleUser_EntityChangemail $oChangemail Объект смены емайла
|
||||
* @return bool|ModuleUser_EntityChangemail
|
||||
*/
|
||||
public function AddUserChangemail($oChangemail) {
|
||||
if ($sId=$this->oMapper->AddUserChangemail($oChangemail)) {
|
||||
$oChangemail->setId($sId);
|
||||
return $oChangemail;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Обновляет запись о смене емайла
|
||||
*
|
||||
* @param ModuleUser_EntityChangemail $oChangemail Объект смены емайла
|
||||
* @return int
|
||||
*/
|
||||
public function UpdateUserChangemail($oChangemail) {
|
||||
return $this->oMapper->UpdateUserChangemail($oChangemail);
|
||||
}
|
||||
/**
|
||||
* Возвращает объект смены емайла по коду подтверждения
|
||||
*
|
||||
* @param string $sCode Код подтверждения
|
||||
* @return ModuleUser_EntityChangemail|null
|
||||
*/
|
||||
public function GetUserChangemailByCodeFrom($sCode) {
|
||||
return $this->oMapper->GetUserChangemailByCodeFrom($sCode);
|
||||
}
|
||||
/**
|
||||
* Возвращает объект смены емайла по коду подтверждения
|
||||
*
|
||||
* @param string $sCode Код подтверждения
|
||||
* @return ModuleUser_EntityChangemail|null
|
||||
*/
|
||||
public function GetUserChangemailByCodeTo($sCode) {
|
||||
return $this->oMapper->GetUserChangemailByCodeTo($sCode);
|
||||
}
|
||||
/**
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @param string $sMailNew Новый емайл
|
||||
* @return bool|ModuleUser_EntityChangemail
|
||||
*/
|
||||
public function MakeUserChangemail($oUser,$sMailNew) {
|
||||
$oChangemail=Engine::GetEntity('ModuleUser_EntityChangemail');
|
||||
$oChangemail->setUserId($oUser->getId());
|
||||
$oChangemail->setDateAdd(date("Y-m-d H:i:s"));
|
||||
$oChangemail->setDateExpired(date("Y-m-d H:i:s",time()+3*24*60*60)); // 3 дня для смены емайла
|
||||
$oChangemail->setMailFrom($oUser->getMail());
|
||||
$oChangemail->setMailTo($sMailNew);
|
||||
$oChangemail->setCodeFrom(func_generator(32));
|
||||
$oChangemail->setCodeTo(func_generator(32));
|
||||
if ($this->AddUserChangemail($oChangemail)) {
|
||||
/**
|
||||
* Отправляем уведомление
|
||||
*/
|
||||
$this->Notify_Send($oUser,
|
||||
'notify.user_changemail_from.tpl',
|
||||
$this->Lang_Get('notify_subject_user_changemail'),
|
||||
array(
|
||||
'oUser' => $oUser,
|
||||
'oChangemail' => $oChangemail,
|
||||
));
|
||||
return $oChangemail;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
?>
|
27
classes/modules/user/entity/Changemail.entity.class.php
Normal file
27
classes/modules/user/entity/Changemail.entity.class.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
/*-------------------------------------------------------
|
||||
*
|
||||
* LiveStreet Engine Social Networking
|
||||
* Copyright © 2008 Mzhelskiy Maxim
|
||||
*
|
||||
*--------------------------------------------------------
|
||||
*
|
||||
* Official site: www.livestreet.ru
|
||||
* Contact e-mail: rus.engine@gmail.com
|
||||
*
|
||||
* GNU General Public License, version 2:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Сущность смены емайла пользователем
|
||||
*
|
||||
* @package modules.user
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUser_EntityChangemail extends Entity {
|
||||
|
||||
}
|
||||
?>
|
|
@ -15,22 +15,60 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Сущность пользовательского поля у пользователя
|
||||
*
|
||||
* @package modules.user
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUser_EntityField extends Entity {
|
||||
/**
|
||||
* Возвращает ID поля
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getId() {
|
||||
return $this->_getDataOne('id');
|
||||
}
|
||||
/**
|
||||
* Возвращает имя поля(уникальное)
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getName(){
|
||||
return $this->_getDataOne('name');
|
||||
}
|
||||
/**
|
||||
* Возвращает тип поля
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getType(){
|
||||
return $this->_getDataOne('type');
|
||||
}
|
||||
/**
|
||||
* Возвращает заголовок/описание поля
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTitle(){
|
||||
return $this->_getDataOne('title');
|
||||
}
|
||||
/**
|
||||
* Возвращает паттерн подстановки поля
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getPattern(){
|
||||
return $this->_getDataOne('pattern');
|
||||
}
|
||||
/**
|
||||
* Возвращает значение поля у пользователя
|
||||
*
|
||||
* @param bool $bEscapeValue Экранировать значение
|
||||
* @param bool $bTransformed Применять паттерн или нет
|
||||
* @return string
|
||||
*/
|
||||
public function getValue($bEscapeValue = false, $bTransformed = false){
|
||||
if (!isset($this->_aData['value']) || !$this->_aData['value']) return '';
|
||||
if ($bEscapeValue) $this->_aData['value'] = htmlspecialchars($this->_aData['value']);
|
||||
|
@ -52,22 +90,51 @@ class ModuleUser_EntityField extends Entity {
|
|||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID поля
|
||||
*
|
||||
* @param int $iId
|
||||
*/
|
||||
public function setId($iId) {
|
||||
$this->_aData['id']=$iId;
|
||||
}
|
||||
/**
|
||||
* Устанавливает имя поля(уникальное)
|
||||
*
|
||||
* @param string $sName
|
||||
*/
|
||||
public function setName($sName) {
|
||||
$this->_aData['name']=$sName;
|
||||
}
|
||||
/**
|
||||
* Устанавливает тип поля
|
||||
*
|
||||
* @param string $sName
|
||||
*/
|
||||
public function setType($sName) {
|
||||
$this->_aData['type']=$sName;
|
||||
}
|
||||
/**
|
||||
* Устанавливает заголовок/описание поля
|
||||
*
|
||||
* @param string $sTitle
|
||||
*/
|
||||
public function setTitle($sTitle) {
|
||||
$this->_aData['title']=$sTitle;
|
||||
}
|
||||
/**
|
||||
* Устанавливает паттерн подстановки поля
|
||||
*
|
||||
* @param string $sPattern
|
||||
*/
|
||||
public function setPattern($sPattern) {
|
||||
$this->_aData['pattern']=$sPattern;
|
||||
}
|
||||
/**
|
||||
* Устанавливает значение поля у пользователя
|
||||
*
|
||||
* @param string $sValue
|
||||
*/
|
||||
public function setValue($sValue) {
|
||||
$this->_aData['value']=$sValue;
|
||||
}
|
||||
|
|
|
@ -15,87 +15,154 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleUser_EntityFriend extends Entity
|
||||
{
|
||||
/**
|
||||
* При переданном параметре $sUserId возвращает тот идентификатор,
|
||||
* который не равен переданному
|
||||
*
|
||||
* @param ( string|null )
|
||||
* @return string
|
||||
*/
|
||||
public function getFriendId($sUserId=null) {
|
||||
if(!$sUserId) {
|
||||
$sUserId=$this->getUserId();
|
||||
}
|
||||
if($this->_getDataOne('user_from')==$sUserId) {
|
||||
return $this->_aData['user_to'];
|
||||
}
|
||||
if($this->_getDataOne('user_to')==$sUserId) {
|
||||
return $this->_aData['user_from'];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Получает идентификатор пользователя,
|
||||
* относительно которого был сделан запрос
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getUserId() {
|
||||
/**
|
||||
* Сущность дружбу - связи пользователей друг с другом
|
||||
*
|
||||
* @package modules.user
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUser_EntityFriend extends Entity {
|
||||
/**
|
||||
* При переданном параметре $sUserId возвращает тот идентификатор,
|
||||
* который не равен переданному
|
||||
*
|
||||
* @param string|null $sUserId ID пользователя
|
||||
* @return string
|
||||
*/
|
||||
public function getFriendId($sUserId=null) {
|
||||
if(!$sUserId) {
|
||||
$sUserId=$this->getUserId();
|
||||
}
|
||||
if($this->_getDataOne('user_from')==$sUserId) {
|
||||
return $this->_aData['user_to'];
|
||||
}
|
||||
if($this->_getDataOne('user_to')==$sUserId) {
|
||||
return $this->_aData['user_from'];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Получает идентификатор пользователя,
|
||||
* относительно которого был сделан запрос
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user');
|
||||
}
|
||||
|
||||
public function getUserFrom() {
|
||||
return $this->_getDataOne('user_from');
|
||||
}
|
||||
public function getUserTo() {
|
||||
return $this->_getDataOne('user_to');
|
||||
}
|
||||
public function getStatusFrom() {
|
||||
return $this->_getDataOne('status_from');
|
||||
}
|
||||
public function getStatusTo() {
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя, который приглашает в друзья
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserFrom() {
|
||||
return $this->_getDataOne('user_from');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя, которого пришлашаем в друзья
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserTo() {
|
||||
return $this->_getDataOne('user_to');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус заявки на добавления в друзья у отправителя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getStatusFrom() {
|
||||
return $this->_getDataOne('status_from');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус заявки на добавления в друзья у получателя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getStatusTo() {
|
||||
return $this->_getDataOne('status_to') ? $this->_getDataOne('status_to') : ModuleUser::USER_FRIEND_NULL;
|
||||
}
|
||||
public function getFriendStatus() {
|
||||
return $this->getStatusFrom()+$this->getStatusTo();
|
||||
}
|
||||
public function getStatusByUserId($sUserId) {
|
||||
if($sUserId==$this->getUserFrom()) {
|
||||
return $this->getStatusFrom();
|
||||
}
|
||||
if($sUserId==$this->getUserTo()) {
|
||||
return $this->getStatusTo();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function setUserFrom($data) {
|
||||
$this->_aData['user_from']=$data;
|
||||
}
|
||||
public function setUserTo($data) {
|
||||
$this->_aData['user_to']=$data;
|
||||
}
|
||||
public function setStatusFrom($data) {
|
||||
$this->_aData['status_from']=$data;
|
||||
}
|
||||
public function setStatusTo($data) {
|
||||
$this->_aData['status_to']=$data;
|
||||
}
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user']=$data;
|
||||
}
|
||||
public function setStatusByUserId($data,$sUserId) {
|
||||
if($sUserId==$this->getUserFrom()) {
|
||||
$this->setStatusFrom($data);
|
||||
return true;
|
||||
}
|
||||
if($sUserId==$this->getUserTo()) {
|
||||
$this->setStatusTo($data);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Возвращает статус дружбы
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getFriendStatus() {
|
||||
return $this->getStatusFrom()+$this->getStatusTo();
|
||||
}
|
||||
/**
|
||||
* Возвращает статус дружбы для конкретного пользователя
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return bool|int
|
||||
*/
|
||||
public function getStatusByUserId($sUserId) {
|
||||
if($sUserId==$this->getUserFrom()) {
|
||||
return $this->getStatusFrom();
|
||||
}
|
||||
if($sUserId==$this->getUserTo()) {
|
||||
return $this->getStatusTo();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает ID пользователя, который приглашает в друзья
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserFrom($data) {
|
||||
$this->_aData['user_from']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя, которого пришлашаем в друзья
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserTo($data) {
|
||||
$this->_aData['user_to']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус заявки на добавления в друзья у отправителя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setStatusFrom($data) {
|
||||
$this->_aData['status_from']=$data;
|
||||
}
|
||||
/**
|
||||
* Возвращает статус заявки на добавления в друзья у получателя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setStatusTo($data) {
|
||||
$this->_aData['status_to']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user']=$data;
|
||||
}
|
||||
/**
|
||||
* Возвращает статус дружбы для конкретного пользователя
|
||||
*
|
||||
* @param int $data Статус
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function setStatusByUserId($data,$sUserId) {
|
||||
if($sUserId==$this->getUserFrom()) {
|
||||
$this->setStatusFrom($data);
|
||||
return true;
|
||||
}
|
||||
if($sUserId==$this->getUserTo()) {
|
||||
$this->setStatusTo($data);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,53 +15,126 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleUser_EntityInvite extends Entity
|
||||
{
|
||||
public function getId() {
|
||||
return $this->_getDataOne('invite_id');
|
||||
}
|
||||
public function getCode() {
|
||||
return $this->_getDataOne('invite_code');
|
||||
}
|
||||
public function getUserFromId() {
|
||||
return $this->_getDataOne('user_from_id');
|
||||
}
|
||||
public function getUserToId() {
|
||||
return $this->_getDataOne('user_to_id');
|
||||
}
|
||||
public function getDateAdd() {
|
||||
return $this->_getDataOne('invite_date_add');
|
||||
}
|
||||
public function getDateUsed() {
|
||||
return $this->_getDataOne('invite_date_used');
|
||||
}
|
||||
public function getUsed() {
|
||||
return $this->_getDataOne('invite_used');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Сущность инвайта(приглашения)
|
||||
*
|
||||
* @package modules.user
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUser_EntityInvite extends Entity {
|
||||
/**
|
||||
* Возвращает ID инвайта
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getId() {
|
||||
return $this->_getDataOne('invite_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает код инвайта
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getCode() {
|
||||
return $this->_getDataOne('invite_code');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя, который отправляет инвайт
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserFromId() {
|
||||
return $this->_getDataOne('user_from_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя, которому отправляем инвайт
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserToId() {
|
||||
return $this->_getDataOne('user_to_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату выдачи инвайта
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateAdd() {
|
||||
return $this->_getDataOne('invite_date_add');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату использования инвайта
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateUsed() {
|
||||
return $this->_getDataOne('invite_date_used');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус использованости инвайта
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUsed() {
|
||||
return $this->_getDataOne('invite_used');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID инвайта
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setId($data) {
|
||||
$this->_aData['invite_id']=$data;
|
||||
}
|
||||
public function setCode($data) {
|
||||
$this->_aData['invite_code']=$data;
|
||||
}
|
||||
public function setUserFromId($data) {
|
||||
$this->_aData['user_from_id']=$data;
|
||||
}
|
||||
public function setUserToId($data) {
|
||||
$this->_aData['user_to_id']=$data;
|
||||
}
|
||||
public function setDateAdd($data) {
|
||||
$this->_aData['invite_date_add']=$data;
|
||||
}
|
||||
public function setDateUsed($data) {
|
||||
$this->_aData['invite_date_used']=$data;
|
||||
}
|
||||
public function setUsed($data) {
|
||||
$this->_aData['invite_used']=$data;
|
||||
}
|
||||
|
||||
$this->_aData['invite_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает код инвайта
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setCode($data) {
|
||||
$this->_aData['invite_code']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя, который отправляет инвайт
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserFromId($data) {
|
||||
$this->_aData['user_from_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя, которому отправляем инвайт
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserToId($data) {
|
||||
$this->_aData['user_to_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату выдачи инвайта
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateAdd($data) {
|
||||
$this->_aData['invite_date_add']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату использования инвайта
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateUsed($data) {
|
||||
$this->_aData['invite_date_used']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус использованости инвайта
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUsed($data) {
|
||||
$this->_aData['invite_used']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,25 +15,34 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Сущность заметки о пользователе
|
||||
*
|
||||
* @package modules.user
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUser_EntityNote extends Entity {
|
||||
|
||||
/**
|
||||
* Определяем правила валидации
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aValidateRules=array(
|
||||
array('target_user_id','target'),
|
||||
);
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*/
|
||||
public function Init() {
|
||||
parent::Init();
|
||||
$this->aValidateRules[]=array('text','string','max'=>Config::Get('module.user.usernote_text_max'),'min'=>1,'allowEmpty'=>false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Валидация пользователя
|
||||
*
|
||||
* @param $sValue
|
||||
* @param $aParams
|
||||
* @param string $sValue Значение
|
||||
* @param array $aParams Параметры
|
||||
* @return bool
|
||||
*/
|
||||
public function ValidateTarget($sValue,$aParams) {
|
||||
|
|
|
@ -15,45 +15,109 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleUser_EntityReminder extends Entity
|
||||
{
|
||||
public function getCode() {
|
||||
return $this->_getDataOne('reminder_code');
|
||||
}
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
public function getDateAdd() {
|
||||
return $this->_getDataOne('reminder_date_add');
|
||||
}
|
||||
public function getDateUsed() {
|
||||
return $this->_getDataOne('reminder_date_used');
|
||||
}
|
||||
public function getDateExpire() {
|
||||
return $this->_getDataOne('reminder_date_expire');
|
||||
}
|
||||
public function getIsUsed() {
|
||||
return $this->_getDataOne('reminde_is_used');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Сущность восстановления пароля
|
||||
*
|
||||
* @package modules.user
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUser_EntityReminder extends Entity {
|
||||
/**
|
||||
* Возвращает код восстановления
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getCode() {
|
||||
return $this->_getDataOne('reminder_code');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату создания
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateAdd() {
|
||||
return $this->_getDataOne('reminder_date_add');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату использования
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateUsed() {
|
||||
return $this->_getDataOne('reminder_date_used');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату завершения срока действия кода
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateExpire() {
|
||||
return $this->_getDataOne('reminder_date_expire');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус использованости кода
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getIsUsed() {
|
||||
return $this->_getDataOne('reminde_is_used');
|
||||
}
|
||||
|
||||
/**
|
||||
* Устанавливает код восстановления
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setCode($data) {
|
||||
$this->_aData['reminder_code']=$data;
|
||||
}
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
public function setDateAdd($data) {
|
||||
$this->_aData['reminder_date_add']=$data;
|
||||
}
|
||||
public function setDateUsed($data) {
|
||||
$this->_aData['reminder_date_used']=$data;
|
||||
}
|
||||
public function setDateExpire($data) {
|
||||
$this->_aData['reminder_date_expire']=$data;
|
||||
}
|
||||
public function setIsUsed($data) {
|
||||
$this->_aData['reminde_is_used']=$data;
|
||||
}
|
||||
$this->_aData['reminder_code']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату создания
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateAdd($data) {
|
||||
$this->_aData['reminder_date_add']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату использования
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateUsed($data) {
|
||||
$this->_aData['reminder_date_used']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату завершения срока действия кода
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateExpire($data) {
|
||||
$this->_aData['reminder_date_expire']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус использованости кода
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setIsUsed($data) {
|
||||
$this->_aData['reminde_is_used']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,45 +15,110 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleUser_EntitySession extends Entity
|
||||
{
|
||||
public function getKey() {
|
||||
return $this->_getDataOne('session_key');
|
||||
}
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
public function getIpCreate() {
|
||||
return $this->_getDataOne('session_ip_create');
|
||||
}
|
||||
public function getIpLast() {
|
||||
return $this->_getDataOne('session_ip_last');
|
||||
}
|
||||
public function getDateCreate() {
|
||||
return $this->_getDataOne('session_date_create');
|
||||
}
|
||||
public function getDateLast() {
|
||||
return $this->_getDataOne('session_date_last');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Сущность сессии
|
||||
*
|
||||
* @package modules.user
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUser_EntitySession extends Entity {
|
||||
/**
|
||||
* Возвращает ключ сессии
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getKey() {
|
||||
return $this->_getDataOne('session_key');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getUserId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает IP создания сессии
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getIpCreate() {
|
||||
return $this->_getDataOne('session_ip_create');
|
||||
}
|
||||
/**
|
||||
* Возвращает последний IP сессии
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getIpLast() {
|
||||
return $this->_getDataOne('session_ip_last');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату создания сессии
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateCreate() {
|
||||
return $this->_getDataOne('session_date_create');
|
||||
}
|
||||
/**
|
||||
* Возвращает последную дату сессии
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateLast() {
|
||||
return $this->_getDataOne('session_date_last');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ключ сессии
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setKey($data) {
|
||||
$this->_aData['session_key']=$data;
|
||||
}
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
public function setIpCreate($data) {
|
||||
$this->_aData['session_ip_create']=$data;
|
||||
}
|
||||
public function setIpLast($data) {
|
||||
$this->_aData['session_ip_last']=$data;
|
||||
}
|
||||
public function setDateCreate($data) {
|
||||
$this->_aData['session_date_create']=$data;
|
||||
}
|
||||
public function setDateLast($data) {
|
||||
$this->_aData['session_date_last']=$data;
|
||||
}
|
||||
$this->_aData['session_key']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает IP создания сессии
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setIpCreate($data) {
|
||||
$this->_aData['session_ip_create']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает последний IP сессии
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setIpLast($data) {
|
||||
$this->_aData['session_ip_last']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату создания сессии
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateCreate($data) {
|
||||
$this->_aData['session_date_create']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает последную дату сессии
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateLast($data) {
|
||||
$this->_aData['session_date_last']=$data;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,10 +15,17 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Сущность пользователя
|
||||
*
|
||||
* @package modules.user
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUser_EntityUser extends Entity {
|
||||
|
||||
/**
|
||||
* Определяем правила валидации
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aValidateRules=array(
|
||||
array('login','login','on'=>array('registration','')), // '' - означает дефолтный сценарий
|
||||
|
@ -33,8 +40,8 @@ class ModuleUser_EntityUser extends Entity {
|
|||
/**
|
||||
* Валидация пользователя
|
||||
*
|
||||
* @param $sValue
|
||||
* @param $aParams
|
||||
* @param string $sValue Валидируемое значение
|
||||
* @param array $aParams Параметры
|
||||
* @return bool
|
||||
*/
|
||||
public function ValidateLogin($sValue,$aParams) {
|
||||
|
@ -46,8 +53,8 @@ class ModuleUser_EntityUser extends Entity {
|
|||
/**
|
||||
* Проверка логина на существование
|
||||
*
|
||||
* @param $sValue
|
||||
* @param $aParams
|
||||
* @param string $sValue Валидируемое значение
|
||||
* @param array $aParams Параметры
|
||||
* @return bool
|
||||
*/
|
||||
public function ValidateLoginExists($sValue,$aParams) {
|
||||
|
@ -59,8 +66,8 @@ class ModuleUser_EntityUser extends Entity {
|
|||
/**
|
||||
* Проверка емайла на существование
|
||||
*
|
||||
* @param $sValue
|
||||
* @param $aParams
|
||||
* @param string $sValue Валидируемое значение
|
||||
* @param array $aParams Параметры
|
||||
* @return bool
|
||||
*/
|
||||
public function ValidateMailExists($sValue,$aParams) {
|
||||
|
@ -70,106 +77,265 @@ class ModuleUser_EntityUser extends Entity {
|
|||
return $this->Lang_Get('registration_mail_error_used');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает ID пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getId() {
|
||||
return $this->_getDataOne('user_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает логин
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getLogin() {
|
||||
return $this->_getDataOne('user_login');
|
||||
}
|
||||
/**
|
||||
* Возвращает пароль (ввиде хеша)
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getPassword() {
|
||||
return $this->_getDataOne('user_password');
|
||||
}
|
||||
/**
|
||||
* Возвращает емайл
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getMail() {
|
||||
return $this->_getDataOne('user_mail');
|
||||
}
|
||||
/**
|
||||
* Возвращает силу
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSkill() {
|
||||
return number_format(round($this->_getDataOne('user_skill'),2), 2, '.', '');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату регистрации
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateRegister() {
|
||||
return $this->_getDataOne('user_date_register');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату активации
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDateActivate() {
|
||||
return $this->_getDataOne('user_date_activate');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату последнего комментирования
|
||||
*
|
||||
* @return mixed|null
|
||||
*/
|
||||
public function getDateCommentLast() {
|
||||
return $this->_getDataOne('user_date_comment_last');
|
||||
}
|
||||
/**
|
||||
* Возвращает IP регистрации
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getIpRegister() {
|
||||
return $this->_getDataOne('user_ip_register');
|
||||
}
|
||||
/**
|
||||
* Возвращает рейтинг
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getRating() {
|
||||
return number_format(round($this->_getDataOne('user_rating'),2), 2, '.', '');
|
||||
}
|
||||
/**
|
||||
* Вовзращает количество проголосовавших
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCountVote() {
|
||||
return $this->_getDataOne('user_count_vote');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус активированности
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getActivate() {
|
||||
return $this->_getDataOne('user_activate');
|
||||
}
|
||||
/**
|
||||
* Возвращает ключ активации
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getActivateKey() {
|
||||
return $this->_getDataOne('user_activate_key');
|
||||
}
|
||||
/**
|
||||
* Возвращает имя
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProfileName() {
|
||||
return $this->_getDataOne('user_profile_name');
|
||||
}
|
||||
/**
|
||||
* Возвращает пол
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProfileSex() {
|
||||
return $this->_getDataOne('user_profile_sex');
|
||||
}
|
||||
/**
|
||||
* Возвращает название страны
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProfileCountry() {
|
||||
return $this->_getDataOne('user_profile_country');
|
||||
}
|
||||
/**
|
||||
* Возвращает название региона
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProfileRegion() {
|
||||
return $this->_getDataOne('user_profile_region');
|
||||
}
|
||||
/**
|
||||
* Возвращает название города
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProfileCity() {
|
||||
return $this->_getDataOne('user_profile_city');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату рождения
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProfileBirthday() {
|
||||
return $this->_getDataOne('user_profile_birthday');
|
||||
}
|
||||
/**
|
||||
* Возвращает информацию о себе
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProfileAbout() {
|
||||
return $this->_getDataOne('user_profile_about');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату редактирования профиля
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProfileDate() {
|
||||
return $this->_getDataOne('user_profile_date');
|
||||
}
|
||||
/**
|
||||
* Возвращает полный веб путь до аватра
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProfileAvatar() {
|
||||
return $this->_getDataOne('user_profile_avatar');
|
||||
}
|
||||
/**
|
||||
* Возвращает расширение автара
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProfileAvatarType() {
|
||||
return ($sPath=$this->getProfileAvatarPath()) ? pathinfo($sPath,PATHINFO_EXTENSION) : null;
|
||||
}
|
||||
/**
|
||||
* Возвращает полный веб путь до фото
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getProfileFoto() {
|
||||
return $this->_getDataOne('user_profile_foto');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус уведомления о новых топиках
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getSettingsNoticeNewTopic() {
|
||||
return $this->_getDataOne('user_settings_notice_new_topic');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус уведомления о новых комментариях
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getSettingsNoticeNewComment() {
|
||||
return $this->_getDataOne('user_settings_notice_new_comment');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус уведомления о новых письмах
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getSettingsNoticeNewTalk() {
|
||||
return $this->_getDataOne('user_settings_notice_new_talk');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус уведомления о новых ответах в комментариях
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getSettingsNoticeReplyComment() {
|
||||
return $this->_getDataOne('user_settings_notice_reply_comment');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус уведомления о новых друзьях
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getSettingsNoticeNewFriend() {
|
||||
return $this->_getDataOne('user_settings_notice_new_friend');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает значения пользовательских полей
|
||||
*
|
||||
* @param bool $bOnlyNoEmpty Возвращать или нет только не пустые
|
||||
* @param string $sType Тип полей
|
||||
* @return array
|
||||
*/
|
||||
public function getUserFieldValues($bOnlyNoEmpty = true, $sType='') {
|
||||
return $this->User_getUserFieldsValues($this->getId(), $bOnlyNoEmpty,$sType);
|
||||
}
|
||||
/**
|
||||
* Возвращает объект сессии
|
||||
*
|
||||
* @return ModuleUser_EntitySession|null
|
||||
*/
|
||||
public function getSession() {
|
||||
if (!$this->_getDataOne('session')) {
|
||||
$this->_aData['session']=$this->User_GetSessionByUserId($this->getId());
|
||||
}
|
||||
return $this->_getDataOne('session');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус онлайн пользователь или нет
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isOnline() {
|
||||
if ($oSession=$this->getSession()) {
|
||||
if (time()-strtotime($oSession->getDateLast())<60*10) { // 10 минут
|
||||
|
@ -178,38 +344,74 @@ class ModuleUser_EntityUser extends Entity {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Возвращает полный веб путь до аватара нужного размера
|
||||
*
|
||||
* @param int $iSize Размер
|
||||
* @return string
|
||||
*/
|
||||
public function getProfileAvatarPath($iSize=100) {
|
||||
if ($sPath=$this->getProfileAvatar()) {
|
||||
return str_replace('_100x100',(($iSize==0)?"":"_{$iSize}x{$iSize}"),$sPath."?".date('His',strtotime($this->getProfileDate())));
|
||||
} else {
|
||||
return Config::Get('path.static.skin').'/images/avatar_'.$iSize.'x'.$iSize.'.jpg';
|
||||
return Config::Get('path.static.skin').'/images/avatar_'.($this->getProfileSex()=='woman' ? 'female' : 'male').'_'.$iSize.'x'.$iSize.'.png';
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Возвращает полный веб путь до фото
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getProfileFotoPath() {
|
||||
if ($this->getProfileFoto()) {
|
||||
return $this->getProfileFoto();
|
||||
}
|
||||
return $this->getProfileFotoDefault();
|
||||
}
|
||||
/**
|
||||
* Возвращает дефолтную фото
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getProfileFotoDefault() {
|
||||
return Config::Get('path.static.skin').'/images/user_foto_250.png';
|
||||
return Config::Get('path.static.skin').'/images/user_photo_'.($this->getProfileSex()=='woman' ? 'female' : 'male').'.png';
|
||||
}
|
||||
/**
|
||||
* Возвращает объект голосования за пользователя текущего пользователя
|
||||
*
|
||||
* @return ModuleVote_EntityVote|null
|
||||
*/
|
||||
public function getVote() {
|
||||
return $this->_getDataOne('vote');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус дружбы
|
||||
*
|
||||
* @return bool|null
|
||||
*/
|
||||
public function getUserIsFriend() {
|
||||
return $this->_getDataOne('user_is_friend');
|
||||
}
|
||||
/**
|
||||
* Возвращает статус администратора сайта
|
||||
*
|
||||
* @return bool|null
|
||||
*/
|
||||
public function isAdministrator() {
|
||||
return $this->_getDataOne('user_is_administrator');
|
||||
}
|
||||
/**
|
||||
* Возвращает веб путь до профиля пользователя
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUserWebPath() {
|
||||
return Router::GetPath('profile').$this->getLogin().'/';
|
||||
}
|
||||
/**
|
||||
* Возвращает статус дружбы с текущим пользователем
|
||||
* Возвращает объект дружбы с текущим пользователем
|
||||
*
|
||||
* @return int
|
||||
* @return ModuleUser_EntityFriend|null
|
||||
*/
|
||||
public function getUserFriend() {
|
||||
return $this->_getDataOne('user_friend');
|
||||
|
@ -224,99 +426,266 @@ class ModuleUser_EntityUser extends Entity {
|
|||
return $this->Stream_IsSubscribe($oUserCurrent->getId(),$this->getId());
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Возвращает объект заметки о подльзователе, которую оставил текущий пользователй
|
||||
*
|
||||
* @return ModuleUser_EntityNote|null
|
||||
*/
|
||||
public function getUserNote() {
|
||||
$oUserCurrent=$this->User_GetUserCurrent();
|
||||
if ($this->_getDataOne('user_note')===null and $oUserCurrent) {
|
||||
$this->_aData['user_note']=$this->User_GetUserNote($this->getId(),$oUserCurrent->getId());
|
||||
}
|
||||
return $this->_getDataOne('user_note');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setId($data) {
|
||||
$this->_aData['user_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает логин
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setLogin($data) {
|
||||
$this->_aData['user_login']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает пароль (ввиде хеша)
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setPassword($data) {
|
||||
$this->_aData['user_password']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает емайл
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setMail($data) {
|
||||
$this->_aData['user_mail']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает силу
|
||||
*
|
||||
* @param float $data
|
||||
*/
|
||||
public function setSkill($data) {
|
||||
$this->_aData['user_skill']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату регистрации
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateRegister($data) {
|
||||
$this->_aData['user_date_register']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату активации
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateActivate($data) {
|
||||
$this->_aData['user_date_activate']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату последнего комментирования
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDateCommentLast($data) {
|
||||
$this->_aData['user_date_comment_last']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает IP регистрации
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setIpRegister($data) {
|
||||
$this->_aData['user_ip_register']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает рейтинг
|
||||
*
|
||||
* @param float $data
|
||||
*/
|
||||
public function setRating($data) {
|
||||
$this->_aData['user_rating']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает количество проголосовавших
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setCountVote($data) {
|
||||
$this->_aData['user_count_vote']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус активированности
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setActivate($data) {
|
||||
$this->_aData['user_activate']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ключ активации
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setActivateKey($data) {
|
||||
$this->_aData['user_activate_key']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает имя
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setProfileName($data) {
|
||||
$this->_aData['user_profile_name']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает пол
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setProfileSex($data) {
|
||||
$this->_aData['user_profile_sex']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает название страны
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setProfileCountry($data) {
|
||||
$this->_aData['user_profile_country']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает название региона
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setProfileRegion($data) {
|
||||
$this->_aData['user_profile_region']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает название города
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setProfileCity($data) {
|
||||
$this->_aData['user_profile_city']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату рождения
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setProfileBirthday($data) {
|
||||
$this->_aData['user_profile_birthday']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает информацию о себе
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setProfileAbout($data) {
|
||||
$this->_aData['user_profile_about']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату редактирования профиля
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setProfileDate($data) {
|
||||
$this->_aData['user_profile_date']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает полный веб путь до аватра
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setProfileAvatar($data) {
|
||||
$this->_aData['user_profile_avatar']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает полный веб путь до фото
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setProfileFoto($data) {
|
||||
$this->_aData['user_profile_foto']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус уведомления о новых топиках
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setSettingsNoticeNewTopic($data) {
|
||||
$this->_aData['user_settings_notice_new_topic']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус уведомления о новых комментариях
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setSettingsNoticeNewComment($data) {
|
||||
$this->_aData['user_settings_notice_new_comment']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус уведомления о новых письмах
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setSettingsNoticeNewTalk($data) {
|
||||
$this->_aData['user_settings_notice_new_talk']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус уведомления о новых ответах в комментариях
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setSettingsNoticeReplyComment($data) {
|
||||
$this->_aData['user_settings_notice_reply_comment']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус уведомления о новых друзьях
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setSettingsNoticeNewFriend($data) {
|
||||
$this->_aData['user_settings_notice_new_friend']=$data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает объект сессии
|
||||
*
|
||||
* @param ModuleUser_EntitySession $data
|
||||
*/
|
||||
public function setSession($data) {
|
||||
$this->_aData['session']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает статус дружбы
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setUserIsFriend($data) {
|
||||
$this->_aData['user_is_friend']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает объект голосования за пользователя текущего пользователя
|
||||
*
|
||||
* @param ModuleVote_EntityVote $data
|
||||
*/
|
||||
public function setVote($data) {
|
||||
$this->_aData['vote']=$data;
|
||||
}
|
||||
|
|
|
@ -15,13 +15,19 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Маппер для работы с БД
|
||||
*
|
||||
* @package modules.user
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUser_MapperUser extends Mapper {
|
||||
protected $oUserCurrent=null;
|
||||
|
||||
public function SetUserCurrent($oUserCurrent) {
|
||||
$this->oUserCurrent=$oUserCurrent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет юзера
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @return int|bool
|
||||
*/
|
||||
public function Add(ModuleUser_EntityUser $oUser) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.user')."
|
||||
(user_login,
|
||||
|
@ -39,7 +45,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет юзера
|
||||
*
|
||||
* @param ModuleUser_EntityUser $oUser Объект пользователя
|
||||
* @return bool
|
||||
*/
|
||||
public function Update(ModuleUser_EntityUser $oUser) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.user')."
|
||||
SET
|
||||
|
@ -51,6 +62,7 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
user_rating = ? ,
|
||||
user_count_vote = ? ,
|
||||
user_activate = ? ,
|
||||
user_activate_key = ? ,
|
||||
user_profile_name = ? ,
|
||||
user_profile_sex = ? ,
|
||||
user_profile_country = ? ,
|
||||
|
@ -65,39 +77,46 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
user_settings_notice_new_comment = ? ,
|
||||
user_settings_notice_new_talk = ? ,
|
||||
user_settings_notice_reply_comment = ? ,
|
||||
user_settings_notice_new_friend = ?
|
||||
user_settings_notice_new_friend = ? ,
|
||||
user_settings_timezone = ?
|
||||
WHERE user_id = ?
|
||||
";
|
||||
if ($this->oDb->query($sql,$oUser->getPassword(),
|
||||
$oUser->getMail(),
|
||||
$oUser->getSkill(),
|
||||
$oUser->getDateActivate(),
|
||||
$oUser->getDateCommentLast(),
|
||||
$oUser->getRating(),
|
||||
$oUser->getCountVote(),
|
||||
$oUser->getActivate(),
|
||||
$oUser->getProfileName(),
|
||||
$oUser->getProfileSex(),
|
||||
$oUser->getProfileCountry(),
|
||||
$oUser->getProfileRegion(),
|
||||
$oUser->getProfileCity(),
|
||||
$oUser->getProfileBirthday(),
|
||||
$oUser->getProfileAbout(),
|
||||
$oUser->getProfileDate(),
|
||||
$oUser->getProfileAvatar(),
|
||||
$oUser->getProfileFoto(),
|
||||
$oUser->getSettingsNoticeNewTopic(),
|
||||
$oUser->getSettingsNoticeNewComment(),
|
||||
$oUser->getSettingsNoticeNewTalk(),
|
||||
$oUser->getSettingsNoticeReplyComment(),
|
||||
$oUser->getSettingsNoticeNewFriend(),
|
||||
$oUser->getId())) {
|
||||
$oUser->getMail(),
|
||||
$oUser->getSkill(),
|
||||
$oUser->getDateActivate(),
|
||||
$oUser->getDateCommentLast(),
|
||||
$oUser->getRating(),
|
||||
$oUser->getCountVote(),
|
||||
$oUser->getActivate(),
|
||||
$oUser->getActivateKey(),
|
||||
$oUser->getProfileName(),
|
||||
$oUser->getProfileSex(),
|
||||
$oUser->getProfileCountry(),
|
||||
$oUser->getProfileRegion(),
|
||||
$oUser->getProfileCity(),
|
||||
$oUser->getProfileBirthday(),
|
||||
$oUser->getProfileAbout(),
|
||||
$oUser->getProfileDate(),
|
||||
$oUser->getProfileAvatar(),
|
||||
$oUser->getProfileFoto(),
|
||||
$oUser->getSettingsNoticeNewTopic(),
|
||||
$oUser->getSettingsNoticeNewComment(),
|
||||
$oUser->getSettingsNoticeNewTalk(),
|
||||
$oUser->getSettingsNoticeReplyComment(),
|
||||
$oUser->getSettingsNoticeNewFriend(),
|
||||
$oUser->getSettingsTimezone(),
|
||||
$oUser->getId())) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получить юзера по ключу сессии
|
||||
*
|
||||
* @param string $sKey Сессионный ключ
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetUserBySessionKey($sKey) {
|
||||
$sql = "SELECT
|
||||
s.user_id
|
||||
|
@ -111,7 +130,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Создание пользовательской сессии
|
||||
*
|
||||
* @param ModuleUser_EntitySession $oSession
|
||||
* @return bool
|
||||
*/
|
||||
public function CreateSession(ModuleUser_EntitySession $oSession) {
|
||||
$sql = "REPLACE INTO ".Config::Get('db.table.session')."
|
||||
SET
|
||||
|
@ -124,7 +148,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
";
|
||||
return $this->oDb->query($sql,$oSession->getKey(), $oSession->getUserId(), $oSession->getIpCreate(), $oSession->getIpLast(), $oSession->getDateCreate(), $oSession->getDateLast());
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновление данных сессии
|
||||
*
|
||||
* @param ModuleUser_EntitySession $oSession
|
||||
* @return int|bool
|
||||
*/
|
||||
public function UpdateSession(ModuleUser_EntitySession $oSession) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.session')."
|
||||
SET
|
||||
|
@ -134,7 +163,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
";
|
||||
return $this->oDb->query($sql,$oSession->getIpLast(), $oSession->getDateLast(), $oSession->getUserId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Список сессий юзеров по ID
|
||||
*
|
||||
* @param array $aArrayId Список ID пользователей
|
||||
* @return array
|
||||
*/
|
||||
public function GetSessionsByArrayId($aArrayId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
|
@ -154,7 +188,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aRes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Список юзеров по ID
|
||||
*
|
||||
* @param array $aArrayId Список ID пользователей
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByArrayId($aArrayId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
|
@ -177,7 +216,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aUsers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить юзера по ключу активации
|
||||
*
|
||||
* @param string $sKey Ключ активации
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetUserByActivateKey($sKey) {
|
||||
$sql = "SELECT
|
||||
u.user_id
|
||||
|
@ -189,8 +233,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получить юзера по мылу
|
||||
*
|
||||
* @param string $sMail Емайл
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetUserByMail($sMail) {
|
||||
$sql = "SELECT
|
||||
u.user_id
|
||||
|
@ -202,7 +250,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить юзера по логину
|
||||
*
|
||||
* @param string $sLogin Логин пользователя
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetUserByLogin($sLogin) {
|
||||
$sql = "SELECT
|
||||
u.user_id
|
||||
|
@ -215,8 +268,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получить список юзеров по дате последнего визита
|
||||
*
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByDateLast($iLimit) {
|
||||
$sql = "SELECT
|
||||
user_id
|
||||
|
@ -234,7 +291,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список юзеров по дате регистрации
|
||||
*
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByDateRegister($iLimit) {
|
||||
$sql = "SELECT
|
||||
user_id
|
||||
|
@ -254,28 +316,44 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает количество пользователй
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountUsers() {
|
||||
$sql = "SELECT count(*) as count FROM ".Config::Get('db.table.user')." WHERE user_activate = 1";
|
||||
$result=$this->oDb->selectRow($sql);
|
||||
return $result['count'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает количество активных пользователей
|
||||
*
|
||||
* @param string $sDateActive Дата
|
||||
* @return mixed
|
||||
*/
|
||||
public function GetCountUsersActive($sDateActive) {
|
||||
$sql = "SELECT count(*) as count FROM ".Config::Get('db.table.session')." WHERE session_date_last >= ? ";
|
||||
$result=$this->oDb->selectRow($sql,$sDateActive);
|
||||
return $result['count'];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает количество пользователей в разрезе полов
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function GetCountUsersSex() {
|
||||
$sql = "SELECT user_profile_sex AS ARRAY_KEY, count(*) as count FROM ".Config::Get('db.table.user')." WHERE user_activate = 1 GROUP BY user_profile_sex ";
|
||||
$result=$this->oDb->select($sql);
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получить список юзеров по первым буквам логина
|
||||
*
|
||||
* @param string $sUserLogin Логин
|
||||
* @param int $iLimit Количество
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByLoginLike($sUserLogin,$iLimit) {
|
||||
$sql = "SELECT
|
||||
user_id
|
||||
|
@ -295,11 +373,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Добавляет друга
|
||||
*
|
||||
* @param ModuleUser_EntityFriend $oFriend Объект дружбы(связи пользователей)
|
||||
* @return bool
|
||||
*/
|
||||
public function AddFriend(ModuleUser_EntityFriend $oFriend) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.friend')."
|
||||
(user_from,
|
||||
|
@ -322,7 +401,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет информацию о дружбе из базы данных
|
||||
*
|
||||
* @param ModuleUser_EntityFriend $oFriend Объект дружбы(связи пользователей)
|
||||
* @return bool
|
||||
*/
|
||||
public function EraseFriend(ModuleUser_EntityFriend $oFriend) {
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.friend')."
|
||||
WHERE
|
||||
|
@ -336,7 +420,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет информацию о друге
|
||||
*
|
||||
* @param ModuleUser_EntityFriend $oFriend Объект дружбы(связи пользователей)
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateFriend(ModuleUser_EntityFriend $oFriend) {
|
||||
$sql = "
|
||||
UPDATE ".Config::Get('db.table.friend')."
|
||||
|
@ -361,13 +450,11 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить отношей дружбы по массиву идентификаторов
|
||||
* Получить список отношений друзей
|
||||
*
|
||||
* @param array $aArrayId
|
||||
* @param string $sUserId
|
||||
* @param int $iStatus
|
||||
* @param array $aArrayId Список ID пользователей проверяемых на дружбу
|
||||
* @param int $sUserId ID пользователя у которого проверяем друзей
|
||||
* @return array
|
||||
*/
|
||||
public function GetFriendsByArrayId($aArrayId,$sUserId) {
|
||||
|
@ -398,12 +485,13 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aRes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список друзей указанного пользователя
|
||||
* Получает список друзей
|
||||
*
|
||||
* @param string $sUserId
|
||||
* @param int $iStatus
|
||||
* @param int $sUserId ID пользователя
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersFriend($sUserId,&$iCount,$iCurrPage,$iPerPage) {
|
||||
|
@ -424,26 +512,31 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
LIMIT ?d, ?d ;";
|
||||
$aUsers=array();
|
||||
if ($aRows=$this->oDb->selectPage(
|
||||
$iCount,
|
||||
$sql,
|
||||
$sUserId,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_ACCEPT+ModuleUser::USER_FRIEND_OFFER,
|
||||
ModuleUser::USER_FRIEND_ACCEPT,
|
||||
ModuleUser::USER_FRIEND_ACCEPT,
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)
|
||||
$iCount,
|
||||
$sql,
|
||||
$sUserId,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_ACCEPT+ModuleUser::USER_FRIEND_OFFER,
|
||||
ModuleUser::USER_FRIEND_ACCEPT,
|
||||
ModuleUser::USER_FRIEND_ACCEPT,
|
||||
($iCurrPage-1)*$iPerPage, $iPerPage
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aUser) {
|
||||
$aUsers[]=($aUser['user_from']==$sUserId)
|
||||
? $aUser['user_to']
|
||||
: $aUser['user_from'];
|
||||
? $aUser['user_to']
|
||||
: $aUser['user_from'];
|
||||
}
|
||||
}
|
||||
rsort($aUsers,SORT_NUMERIC);
|
||||
return array_unique($aUsers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает количество друзей
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountUsersFriend($sUserId) {
|
||||
$sql = "SELECT
|
||||
count(*) as c
|
||||
|
@ -471,7 +564,6 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список заявок на добавление в друзья от указанного пользователя
|
||||
*
|
||||
|
@ -493,11 +585,11 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
;";
|
||||
$aUsers=array();
|
||||
if ($aRows=$this->oDb->select(
|
||||
$sql,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_OFFER,
|
||||
$iStatus
|
||||
)
|
||||
$sql,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_OFFER,
|
||||
$iStatus
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aUser) {
|
||||
$aUsers[]=$aUser['user_to'];
|
||||
|
@ -505,7 +597,6 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aUsers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список заявок на добавление в друзья от указанного пользователя
|
||||
*
|
||||
|
@ -527,11 +618,11 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
;";
|
||||
$aUsers=array();
|
||||
if ($aRows=$this->oDb->select(
|
||||
$sql,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_OFFER,
|
||||
$iStatus
|
||||
)
|
||||
$sql,
|
||||
$sUserId,
|
||||
ModuleUser::USER_FRIEND_OFFER,
|
||||
$iStatus
|
||||
)
|
||||
) {
|
||||
foreach ($aRows as $aUser) {
|
||||
$aUsers[]=$aUser['user_from'];
|
||||
|
@ -539,12 +630,13 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aUsers;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Получает инвайт по его коду
|
||||
*
|
||||
* @param string $sCode Код инвайта
|
||||
* @param int $iUsed Флаг испольщования инвайта
|
||||
* @return ModuleUser_EntityInvite|null
|
||||
*/
|
||||
public function GetInviteByCode($sCode,$iUsed=0) {
|
||||
$sql = "SELECT * FROM ".Config::Get('db.table.invite')." WHERE invite_code = ? and invite_used = ?d ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sCode,$iUsed)) {
|
||||
|
@ -552,7 +644,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет новый инвайт
|
||||
*
|
||||
* @param ModuleUser_EntityInvite $oInvite Объект инвайта
|
||||
* @return int|bool
|
||||
*/
|
||||
public function AddInvite(ModuleUser_EntityInvite $oInvite) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.invite')."
|
||||
(invite_code,
|
||||
|
@ -566,7 +663,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет инвайт
|
||||
*
|
||||
* @param ModuleUser_EntityInvite $oInvite бъект инвайта
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateInvite(ModuleUser_EntityInvite $oInvite) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.invite')."
|
||||
SET
|
||||
|
@ -580,7 +682,13 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает число использованых приглашений юзером за определенную дату
|
||||
*
|
||||
* @param int $sUserIdFrom ID пользователя
|
||||
* @param string $sDate Дата
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountInviteUsedByDate($sUserIdFrom,$sDate) {
|
||||
$sql = "SELECT count(invite_id) as count FROM ".Config::Get('db.table.invite')." WHERE user_from_id = ?d and invite_date_add >= ? ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sUserIdFrom,$sDate)) {
|
||||
|
@ -588,7 +696,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает полное число использованных приглашений юзера
|
||||
*
|
||||
* @param int $sUserIdFrom ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountInviteUsed($sUserIdFrom) {
|
||||
$sql = "SELECT count(invite_id) as count FROM ".Config::Get('db.table.invite')." WHERE user_from_id = ?d";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sUserIdFrom)) {
|
||||
|
@ -596,7 +709,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает список приглашенных юзеров
|
||||
*
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersInvite($sUserId) {
|
||||
$sql = "SELECT
|
||||
i.user_to_id
|
||||
|
@ -612,7 +730,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aUsers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает юзера который пригласил
|
||||
*
|
||||
* @param int $sUserIdTo ID пользователя
|
||||
* @return int|null
|
||||
*/
|
||||
public function GetUserInviteFrom($sUserIdTo) {
|
||||
$sql = "SELECT
|
||||
i.user_from_id
|
||||
|
@ -627,7 +750,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляем воспоминание(восстановление) пароля
|
||||
*
|
||||
* @param ModuleUser_EntityReminder $oReminder Объект восстановления пароля
|
||||
* @return bool
|
||||
*/
|
||||
public function AddReminder(ModuleUser_EntityReminder $oReminder) {
|
||||
$sql = "REPLACE ".Config::Get('db.table.reminder')."
|
||||
SET
|
||||
|
@ -640,11 +768,21 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
";
|
||||
return $this->oDb->query($sql,$oReminder->getCode(),$oReminder->getUserId(),$oReminder->getDateAdd(),$oReminder->getDateUsed(),$oReminder->getDateExpire(),$oReminder->getIsUsed());
|
||||
}
|
||||
|
||||
/**
|
||||
* Сохраняем воспомнинание(восстановление) пароля
|
||||
*
|
||||
* @param ModuleUser_EntityReminder $oReminder Объект восстановления пароля
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateReminder(ModuleUser_EntityReminder $oReminder) {
|
||||
return $this->AddReminder($oReminder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получаем запись восстановления пароля по коду
|
||||
*
|
||||
* @param string $sCode Код восстановления пароля
|
||||
* @return ModuleUser_EntityReminder|null
|
||||
*/
|
||||
public function GetReminderByCode($sCode) {
|
||||
$sql = "SELECT
|
||||
*
|
||||
|
@ -657,7 +795,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить дополнительные поля профиля пользователя
|
||||
*
|
||||
* @param array|null $aType Типы полей, null - все типы
|
||||
* @return array
|
||||
*/
|
||||
public function getUserFields($aType) {
|
||||
if (!is_null($aType) and !is_array($aType)) {
|
||||
$aType=array($aType);
|
||||
|
@ -673,16 +816,29 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить по имени поля его значение дял определённого пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param string $sName Имя поля
|
||||
* @return string
|
||||
*/
|
||||
public function getUserFieldValueByName($iUserId, $sName) {
|
||||
$sql = 'SELECT value FROM '.Config::Get('db.table.user_field_value').' WHERE
|
||||
user_id = ?d
|
||||
AND
|
||||
user_id = ?d
|
||||
AND
|
||||
field_id = (SELECT id FROM '.Config::Get('db.table.user_field').' WHERE name =?)';
|
||||
$ret = $this->oDb->selectCol($sql, $iUserId, $sName);
|
||||
return $ret[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить значения дополнительных полей профиля пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param bool $bOnlyNoEmpty Загружать только непустые поля
|
||||
* @param array $aType Типы полей, null - все типы
|
||||
* @return array
|
||||
*/
|
||||
public function getUserFieldsValues($iUserId, $bOnlyNoEmpty, $aType) {
|
||||
if (!is_null($aType) and !is_array($aType)) {
|
||||
$aType=array($aType);
|
||||
|
@ -710,7 +866,14 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Установить значения дополнительных полей профиля пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param array $aFields Ассоциативный массив полей id => value
|
||||
* @param int $iCountMax Максимальное количество одинаковых полей
|
||||
* @return bool
|
||||
*/
|
||||
public function setUserFieldsValues($iUserId, $aFields, $iCountMax) {
|
||||
if (!count($aFields)) return;
|
||||
foreach ($aFields as $iId =>$sValue) {
|
||||
|
@ -727,38 +890,72 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
$this->oDb->query($sql, $sValue, $iUserId, $iId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавить поле
|
||||
*
|
||||
* @param ModuleUser_EntityField $oField Объект пользовательского поля
|
||||
* @return bool
|
||||
*/
|
||||
public function addUserField($oField) {
|
||||
$sql = 'INSERT INTO '.Config::Get('db.table.user_field').' SET
|
||||
name = ?, title = ?, pattern = ?, type = ?';
|
||||
return $this->oDb->query($sql, $oField->getName(), $oField->getTitle(), $oField->getPattern(), $oField->getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Удалить поле
|
||||
*
|
||||
* @param int $iId ID пользовательского поля
|
||||
* @return bool
|
||||
*/
|
||||
public function deleteUserField($iId) {
|
||||
$sql = 'DELETE FROM '.Config::Get('db.table.user_field_value').' WHERE field_id = ?d';
|
||||
$this->oDb->query($sql, $iId);
|
||||
$sql = 'DELETE FROM '.Config::Get('db.table.user_field').' WHERE
|
||||
id = ?d';
|
||||
$this->oDb->query($sql, $iId);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Изменить поле
|
||||
*
|
||||
* @param ModuleUser_EntityField $oField Объект пользовательского поля
|
||||
* @return bool
|
||||
*/
|
||||
public function updateUserField($oField) {
|
||||
$sql = 'UPDATE '.Config::Get('db.table.user_field').' SET
|
||||
name = ?, title = ?, pattern = ?, type = ?
|
||||
WHERE id = ?d';
|
||||
$this->oDb->query($sql, $oField->getName(), $oField->getTitle(), $oField->getPattern(), $oField->getType(), $oField->getId());
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет существует ли поле с таким именем
|
||||
*
|
||||
* @param string $sName Имя поля
|
||||
* @param int|null $iId ID поля
|
||||
* @return bool
|
||||
*/
|
||||
public function userFieldExistsByName($sName, $iId) {
|
||||
$sql = 'SELECT id FROM '.Config::Get('db.table.user_field').' WHERE name = ? {AND id != ?d}';
|
||||
return $this->oDb->select($sql, $sName, $iId ? $iId : DBSIMPLE_SKIP);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет существует ли поле с таким ID
|
||||
*
|
||||
* @param int $iId ID поля
|
||||
* @return bool
|
||||
*/
|
||||
public function userFieldExistsById($iId) {
|
||||
$sql = 'SELECT id FROM '.Config::Get('db.table.user_field').' WHERE id = ?d';
|
||||
return $this->oDb->select($sql, $iId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет у пользователя значения полей
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param array|null $aType Список типов для удаления
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteUserFieldValues($iUserId,$aType) {
|
||||
if (!is_null($aType) and !is_array($aType)) {
|
||||
$aType=array($aType);
|
||||
|
@ -769,8 +966,15 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
)';
|
||||
return $this->oDb->query($sql,$iUserId,(is_null($aType) or !count($aType)) ? DBSIMPLE_SKIP : $aType);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает список заметок пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetUserNotesByUserId($iUserId,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$sql = "
|
||||
SELECT *
|
||||
|
@ -788,7 +992,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает количество заметок у пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountUserNotesByUserId($iUserId) {
|
||||
$sql = "
|
||||
SELECT count(*) as c
|
||||
|
@ -802,7 +1011,13 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращет заметку по автору и пользователю
|
||||
*
|
||||
* @param int $iTargetUserId ID пользователя о ком заметка
|
||||
* @param int $iUserId ID пользователя автора заметки
|
||||
* @return ModuleUser_EntityNote|null
|
||||
*/
|
||||
public function GetUserNote($iTargetUserId,$iUserId) {
|
||||
$sql = "SELECT * FROM ".Config::Get('db.table.user_note')." WHERE target_user_id = ?d and user_id = ?d ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$iTargetUserId,$iUserId)) {
|
||||
|
@ -810,7 +1025,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает заметку по ID
|
||||
*
|
||||
* @param int $iId ID заметки
|
||||
* @return ModuleUser_EntityNote|null
|
||||
*/
|
||||
public function GetUserNoteById($iId) {
|
||||
$sql = "SELECT * FROM ".Config::Get('db.table.user_note')." WHERE id = ?d ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$iId)) {
|
||||
|
@ -818,12 +1038,49 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Возвращает список заметок пользователя по ID целевых юзеров
|
||||
*
|
||||
* @param array $aArrayId Список ID целевых пользователей
|
||||
* @param int $sUserId ID пользователя, кто оставлял заметки
|
||||
* @return array
|
||||
*/
|
||||
public function GetUserNotesByArrayUserId($aArrayId,$sUserId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$sql = "SELECT
|
||||
*
|
||||
FROM
|
||||
".Config::Get('db.table.user_note')."
|
||||
WHERE target_user_id IN (?a) and user_id = ?d
|
||||
";
|
||||
$aRows=$this->oDb->select($sql,$aArrayId,$sUserId);
|
||||
$aRes=array();
|
||||
if ($aRows) {
|
||||
foreach ($aRows as $aRow) {
|
||||
$aRes[]=Engine::GetEntity('ModuleUser_EntityNote',$aRow);
|
||||
}
|
||||
}
|
||||
return $aRes;
|
||||
}
|
||||
/**
|
||||
* Удаляет заметку по ID
|
||||
*
|
||||
* @param int $iId ID заметки
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteUserNoteById($iId) {
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.user_note')." WHERE id = ?d ";
|
||||
return $this->oDb->query($sql,$iId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет заметку
|
||||
*
|
||||
* @param ModuleUser_EntityNote $oNote Объект заметки
|
||||
* @return int|null
|
||||
*/
|
||||
public function AddUserNote($oNote) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.user_note')." SET ?a ";
|
||||
if ($iId=$this->oDb->query($sql,$oNote->_getData())) {
|
||||
|
@ -831,8 +1088,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Обновляет заметку
|
||||
*
|
||||
* @param ModuleUser_EntityNote $oNote Объект заметки
|
||||
* @return int
|
||||
*/
|
||||
public function UpdateUserNote($oNote) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.user_note')."
|
||||
SET
|
||||
|
@ -842,7 +1103,71 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
return $this->oDb->query($sql,$oNote->getText(),
|
||||
$oNote->getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет запись о смене емайла
|
||||
*
|
||||
* @param ModuleUser_EntityChangemail $oChangemail Объект смены емайла
|
||||
* @return int|null
|
||||
*/
|
||||
public function AddUserChangemail($oChangemail) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.user_changemail')." SET ?a ";
|
||||
if ($iId=$this->oDb->query($sql,$oChangemail->_getData())) {
|
||||
return $iId;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Обновляет запись о смене емайла
|
||||
*
|
||||
* @param ModuleUser_EntityChangemail $oChangemail Объект смены емайла
|
||||
* @return int
|
||||
*/
|
||||
public function UpdateUserChangemail($oChangemail) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.user_changemail')."
|
||||
SET
|
||||
date_used = ?,
|
||||
confirm_from = ?d,
|
||||
confirm_to = ?d
|
||||
WHERE id = ?d
|
||||
";
|
||||
return $this->oDb->query($sql,$oChangemail->getDateUsed(),$oChangemail->getConfirmFrom(),$oChangemail->getConfirmTo(),$oChangemail->getId());
|
||||
}
|
||||
/**
|
||||
* Возвращает объект смены емайла по коду подтверждения
|
||||
*
|
||||
* @param string $sCode Код подтверждения
|
||||
* @return ModuleUser_EntityChangemail|null
|
||||
*/
|
||||
public function GetUserChangemailByCodeFrom($sCode) {
|
||||
$sql = "SELECT * FROM ".Config::Get('db.table.user_changemail')." WHERE code_from = ? ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sCode)) {
|
||||
return Engine::GetEntity('ModuleUser_EntityChangemail',$aRow);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Возвращает объект смены емайла по коду подтверждения
|
||||
*
|
||||
* @param string $sCode Код подтверждения
|
||||
* @return ModuleUser_EntityChangemail|null
|
||||
*/
|
||||
public function GetUserChangemailByCodeTo($sCode) {
|
||||
$sql = "SELECT * FROM ".Config::Get('db.table.user_changemail')." WHERE code_to = ? ";
|
||||
if ($aRow=$this->oDb->selectRow($sql,$sCode)) {
|
||||
return Engine::GetEntity('ModuleUser_EntityChangemail',$aRow);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* Возвращает список пользователей по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элментов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetUsersByFilter($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$aOrderAllow=array('user_id','user_login','user_date_register','user_rating','user_skill','user_profile_name');
|
||||
$sOrder='';
|
||||
|
@ -895,8 +1220,12 @@ class ModuleUser_MapperUser extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает список префиксов логинов пользователей (для алфавитного указателя)
|
||||
*
|
||||
* @param int $iPrefixLength Длина префикса
|
||||
* @return array
|
||||
*/
|
||||
public function GetGroupPrefixUser($iPrefixLength=1) {
|
||||
$sql = "
|
||||
SELECT SUBSTRING(`user_login` FROM 1 FOR ?d ) as prefix
|
||||
|
|
|
@ -16,59 +16,75 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* Модуль пользовательских лент контента
|
||||
* Модуль пользовательских лент контента (топиков)
|
||||
*
|
||||
* @package modules.userfeed
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUserfeed extends Module
|
||||
{
|
||||
const SUBSCRIBE_TYPE_BLOG = 1; // Подписки на топики по блогу
|
||||
const SUBSCRIBE_TYPE_USER = 2;// Подписки на топики по юзеру
|
||||
|
||||
class ModuleUserfeed extends Module {
|
||||
/**
|
||||
* Подписки на топики по блогу
|
||||
*/
|
||||
const SUBSCRIBE_TYPE_BLOG = 1;
|
||||
/**
|
||||
* Подписки на топики по юзеру
|
||||
*/
|
||||
const SUBSCRIBE_TYPE_USER = 2;
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleUserfeed_MapperUserfeed|null
|
||||
*/
|
||||
protected $oMapper = null;
|
||||
|
||||
/**
|
||||
* Инициализация модуля
|
||||
*/
|
||||
public function Init() {
|
||||
$this->oMapper=Engine::GetMapper(__CLASS__);
|
||||
}
|
||||
|
||||
/**
|
||||
* Подписать пользователя
|
||||
* @param type $iUserId Id подписываемого пользователя
|
||||
* @param type $iSubscribeType Тип подписки (см. константы класса)
|
||||
* @param type $iTargetId Id цели подписки
|
||||
*/
|
||||
* Подписать пользователя
|
||||
*
|
||||
* @param int $iUserId ID подписываемого пользователя
|
||||
* @param int $iSubscribeType Тип подписки (см. константы класса)
|
||||
* @param int $iTargetId ID цели подписки
|
||||
* @return bool
|
||||
*/
|
||||
public function subscribeUser($iUserId, $iSubscribeType, $iTargetId) {
|
||||
return $this->oMapper->subscribeUser($iUserId, $iSubscribeType, $iTargetId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Отписать пользователя
|
||||
* @param type $iUserId Id подписываемого пользователя
|
||||
* @param type $iSubscribeType Тип подписки (см. константы класса)
|
||||
* @param type $iTargetId Id цели подписки
|
||||
*/
|
||||
* Отписать пользователя
|
||||
*
|
||||
* @param int $iUserId ID подписываемого пользователя
|
||||
* @param int $iSubscribeType Тип подписки (см. константы класса)
|
||||
* @param int $iTargetId ID цели подписки
|
||||
* @return bool
|
||||
*/
|
||||
public function unsubscribeUser($iUserId, $iSubscribeType, $iTargetId) {
|
||||
return $this->oMapper->unsubscribeUser($iUserId, $iSubscribeType, $iTargetId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить ленту топиков по подписке
|
||||
* @param type $iUserId Id пользователя, для которого получаем ленту
|
||||
* @param type $iCount Число получаемых записей (если null, из конфига)
|
||||
* @param type $iFromId Получить записи, начиная с указанной
|
||||
* @return type
|
||||
*/
|
||||
* Получить ленту топиков по подписке
|
||||
*
|
||||
* @param int $iUserId ID пользователя, для которого получаем ленту
|
||||
* @param int $iCount Число получаемых записей (если null, из конфига)
|
||||
* @param int $iFromId Получить записи, начиная с указанной
|
||||
* @return array
|
||||
*/
|
||||
public function read($iUserId, $iCount = null, $iFromId = null) {
|
||||
if (!$iCount) $iCount = Config::Get('module.userfeed.count_default');
|
||||
$aUserSubscribes = $this->oMapper->getUserSubscribes($iUserId);
|
||||
$aTopicsIds = $this->oMapper->readFeed($aUserSubscribes, $iCount, $iFromId);
|
||||
return $this->Topic_getTopicsAdditionalData($aTopicsIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список подписок пользователя
|
||||
* @param type $iUserId Id пользователя, для которого загружаются подписки
|
||||
* @return type
|
||||
*/
|
||||
* Получить список подписок пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя, для которого загружаются подписки
|
||||
* @return array
|
||||
*/
|
||||
public function getUserSubscribes($iUserId) {
|
||||
$aUserSubscribes = $this->oMapper->getUserSubscribes($iUserId);
|
||||
$aResult = array('blogs' => array(), 'users' => array());
|
||||
|
|
|
@ -15,47 +15,78 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleUserfeed_MapperUserfeed extends Mapper
|
||||
{
|
||||
public function subscribeUser($iUserId, $iSubscribeType, $iTargetId)
|
||||
{
|
||||
$sql = 'SELECT * FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE
|
||||
/**
|
||||
* Маппер для работы с БД
|
||||
*
|
||||
* @package modules.userfeed
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleUserfeed_MapperUserfeed extends Mapper {
|
||||
/**
|
||||
* Подписать пользователя
|
||||
*
|
||||
* @param int $iUserId ID подписываемого пользователя
|
||||
* @param int $iSubscribeType Тип подписки (см. константы класса)
|
||||
* @param int $iTargetId ID цели подписки
|
||||
* @return bool
|
||||
*/
|
||||
public function subscribeUser($iUserId, $iSubscribeType, $iTargetId) {
|
||||
$sql = 'SELECT * FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE
|
||||
user_id = ?d AND subscribe_type = ?d AND target_id = ?d';
|
||||
if (!$this->oDb->select($sql, $iUserId, $iSubscribeType, $iTargetId)) {
|
||||
$sql = 'INSERT INTO ' . Config::Get('db.table.userfeed_subscribe') . ' SET
|
||||
if (!$this->oDb->select($sql, $iUserId, $iSubscribeType, $iTargetId)) {
|
||||
$sql = 'INSERT INTO ' . Config::Get('db.table.userfeed_subscribe') . ' SET
|
||||
user_id = ?d, subscribe_type = ?d, target_id = ?d';
|
||||
$this->oDb->query($sql, $iUserId, $iSubscribeType, $iTargetId);
|
||||
}
|
||||
}
|
||||
|
||||
public function unsubscribeUser($iUserId, $iSubscribeType, $iTargetId)
|
||||
{
|
||||
$sql = 'DELETE FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE
|
||||
$this->oDb->query($sql, $iUserId, $iSubscribeType, $iTargetId);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Отписать пользователя
|
||||
*
|
||||
* @param int $iUserId ID подписываемого пользователя
|
||||
* @param int $iSubscribeType Тип подписки (см. константы класса)
|
||||
* @param int $iTargetId ID цели подписки
|
||||
* @return bool
|
||||
*/
|
||||
public function unsubscribeUser($iUserId, $iSubscribeType, $iTargetId) {
|
||||
$sql = 'DELETE FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE
|
||||
user_id = ?d AND subscribe_type = ?d AND target_id = ?d';
|
||||
$this->oDb->query($sql, $iUserId, $iSubscribeType, $iTargetId);
|
||||
}
|
||||
$this->oDb->query($sql, $iUserId, $iSubscribeType, $iTargetId);
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* Получить список подписок пользователя
|
||||
*
|
||||
* @param int $iUserId ID пользователя, для которого загружаются подписки
|
||||
* @return array
|
||||
*/
|
||||
public function getUserSubscribes($iUserId) {
|
||||
$sql = 'SELECT subscribe_type, target_id FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE user_id = ?d';
|
||||
$aSubscribes = $this->oDb->select($sql, $iUserId);
|
||||
$aResult = array('blogs' => array(), 'users' => array());
|
||||
|
||||
|
||||
public function getUserSubscribes($iUserId)
|
||||
{
|
||||
$sql = 'SELECT subscribe_type, target_id FROM ' . Config::Get('db.table.userfeed_subscribe') . ' WHERE user_id = ?d';
|
||||
$aSubscribes = $this->oDb->select($sql, $iUserId);
|
||||
$aResult = array('blogs' => array(), 'users' => array());
|
||||
if (!count($aSubscribes)) return $aResult;
|
||||
|
||||
if (!count($aSubscribes)) return $aResult;
|
||||
|
||||
foreach ($aSubscribes as $aSubscribe) {
|
||||
if($aSubscribe['subscribe_type'] == ModuleUserfeed::SUBSCRIBE_TYPE_BLOG) {
|
||||
$aResult['blogs'][] = $aSubscribe['target_id'];
|
||||
} elseif ($aSubscribe['subscribe_type'] == ModuleUserfeed::SUBSCRIBE_TYPE_USER) {
|
||||
$aResult['users'][] = $aSubscribe['target_id'];
|
||||
}
|
||||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
public function readFeed($aUserSubscribes, $iCount, $iFromId) {
|
||||
$sql = "
|
||||
foreach ($aSubscribes as $aSubscribe) {
|
||||
if($aSubscribe['subscribe_type'] == ModuleUserfeed::SUBSCRIBE_TYPE_BLOG) {
|
||||
$aResult['blogs'][] = $aSubscribe['target_id'];
|
||||
} elseif ($aSubscribe['subscribe_type'] == ModuleUserfeed::SUBSCRIBE_TYPE_USER) {
|
||||
$aResult['users'][] = $aSubscribe['target_id'];
|
||||
}
|
||||
}
|
||||
return $aResult;
|
||||
}
|
||||
/**
|
||||
* Получить ленту топиков по подписке
|
||||
*
|
||||
* @param array $aUserSubscribes Список подписок пользователя
|
||||
* @param int $iCount Число получаемых записей (если null, из конфига)
|
||||
* @param int $iFromId Получить записи, начиная с указанной
|
||||
* @return array
|
||||
*/
|
||||
public function readFeed($aUserSubscribes, $iCount, $iFromId) {
|
||||
$sql = "
|
||||
SELECT
|
||||
t.topic_id
|
||||
FROM
|
||||
|
@ -70,12 +101,12 @@ class ModuleUserfeed_MapperUserfeed extends Mapper
|
|||
ORDER BY t.topic_id DESC
|
||||
{ LIMIT 0, ?d }";
|
||||
|
||||
$aTopics=$aTopics=$this->oDb->selectCol($sql,
|
||||
$iFromId ? $iFromId : DBSIMPLE_SKIP,
|
||||
count($aUserSubscribes['blogs']) ? $aUserSubscribes['blogs'] : DBSIMPLE_SKIP,
|
||||
count($aUserSubscribes['users']) ? $aUserSubscribes['users'] : DBSIMPLE_SKIP,
|
||||
$iCount ? $iCount : DBSIMPLE_SKIP
|
||||
);
|
||||
return $aTopics;
|
||||
}
|
||||
$aTopics=$aTopics=$this->oDb->selectCol($sql,
|
||||
$iFromId ? $iFromId : DBSIMPLE_SKIP,
|
||||
count($aUserSubscribes['blogs']) ? $aUserSubscribes['blogs'] : DBSIMPLE_SKIP,
|
||||
count($aUserSubscribes['users']) ? $aUserSubscribes['users'] : DBSIMPLE_SKIP,
|
||||
$iCount ? $iCount : DBSIMPLE_SKIP
|
||||
);
|
||||
return $aTopics;
|
||||
}
|
||||
}
|
|
@ -18,23 +18,29 @@
|
|||
/**
|
||||
* Модуль для работы с голосованиями
|
||||
*
|
||||
* @package modules.vote
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleVote extends Module {
|
||||
protected $oMapper;
|
||||
|
||||
class ModuleVote extends Module {
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleVote_MapperVote
|
||||
*/
|
||||
protected $oMapper;
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
public function Init() {
|
||||
$this->oMapper=Engine::GetMapper(__CLASS__);
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавляет голосование
|
||||
*
|
||||
* @param ModuleVote_EntityVote $oVote
|
||||
* @return unknown
|
||||
* @param ModuleVote_EntityVote $oVote Объект голосования
|
||||
* @return bool
|
||||
*/
|
||||
public function AddVote(ModuleVote_EntityVote $oVote) {
|
||||
if (!$oVote->getIp()) {
|
||||
|
@ -47,14 +53,13 @@ class ModuleVote extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получает голосование
|
||||
*
|
||||
* @param unknown_type $sTargetId
|
||||
* @param unknown_type $sTargetType
|
||||
* @param unknown_type $sUserId
|
||||
* @return unknown
|
||||
* @param int $sTargetId ID владельца
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return ModuleVote_EntityVote|null
|
||||
*/
|
||||
public function GetVote($sTargetId,$sTargetType,$sUserId) {
|
||||
$data=$this->GetVoteByArray($sTargetId,$sTargetType,$sUserId);
|
||||
|
@ -63,12 +68,13 @@ class ModuleVote extends Module {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить список голосований по списку айдишников
|
||||
*
|
||||
* @param unknown_type $sTargetId
|
||||
* @param unknown_type $sTargetType
|
||||
* @param array $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetVoteByArray($aTargetId,$sTargetType,$sUserId) {
|
||||
if (!$aTargetId) {
|
||||
|
@ -87,25 +93,25 @@ class ModuleVote extends Module {
|
|||
* Делаем мульти-запрос к кешу
|
||||
*/
|
||||
$aCacheKeys=func_build_cache_keys($aTargetId,"vote_{$sTargetType}_",'_'.$sUserId);
|
||||
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
|
||||
if (false !== ($data = $this->Cache_Get($aCacheKeys))) {
|
||||
/**
|
||||
* проверяем что досталось из кеша
|
||||
*/
|
||||
foreach ($aCacheKeys as $sValue => $sKey ) {
|
||||
if (array_key_exists($sKey,$data)) {
|
||||
if (array_key_exists($sKey,$data)) {
|
||||
if ($data[$sKey]) {
|
||||
$aVote[$data[$sKey]->getTargetId()]=$data[$sKey];
|
||||
} else {
|
||||
$aIdNotNeedQuery[]=$sValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Смотрим каких топиков не было в кеше и делаем запрос в БД
|
||||
*/
|
||||
$aIdNeedQuery=array_diff($aTargetId,array_keys($aVote));
|
||||
$aIdNeedQuery=array_diff($aIdNeedQuery,$aIdNotNeedQuery);
|
||||
*/
|
||||
$aIdNeedQuery=array_diff($aTargetId,array_keys($aVote));
|
||||
$aIdNeedQuery=array_diff($aIdNeedQuery,$aIdNotNeedQuery);
|
||||
$aIdNeedStore=$aIdNeedQuery;
|
||||
if ($data = $this->oMapper->GetVoteByArray($aIdNeedQuery,$sTargetType,$sUserId)) {
|
||||
foreach ($data as $oVote) {
|
||||
|
@ -122,59 +128,57 @@ class ModuleVote extends Module {
|
|||
*/
|
||||
foreach ($aIdNeedStore as $sId) {
|
||||
$this->Cache_Set(null, "vote_{$sTargetType}_{$sId}_{$sUserId}", array(), 60*60*24*7);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Сортируем результат согласно входящему массиву
|
||||
*/
|
||||
$aVote=func_array_sort_by_keys($aVote,$aTargetId);
|
||||
return $aVote;
|
||||
return $aVote;
|
||||
}
|
||||
/**
|
||||
* Получить список голосований по списку айдишников, но используя единый кеш
|
||||
*
|
||||
* @param unknown_type $aTargetId
|
||||
* @param unknown_type $sTargetType
|
||||
* @param unknown_type $sUserId
|
||||
* @return unknown
|
||||
* @param array $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetVoteByArraySolid($aTargetId,$sTargetType,$sUserId) {
|
||||
if (!is_array($aTargetId)) {
|
||||
$aTargetId=array($aTargetId);
|
||||
}
|
||||
$aTargetId=array_unique($aTargetId);
|
||||
$aVote=array();
|
||||
$aTargetId=array_unique($aTargetId);
|
||||
$aVote=array();
|
||||
$s=join(',',$aTargetId);
|
||||
if (false === ($data = $this->Cache_Get("vote_{$sTargetType}_{$sUserId}_id_{$s}"))) {
|
||||
if (false === ($data = $this->Cache_Get("vote_{$sTargetType}_{$sUserId}_id_{$s}"))) {
|
||||
$data = $this->oMapper->GetVoteByArray($aTargetId,$sTargetType,$sUserId);
|
||||
foreach ($data as $oVote) {
|
||||
$aVote[$oVote->getTargetId()]=$oVote;
|
||||
}
|
||||
$this->Cache_Set(
|
||||
$aVote, "vote_{$sTargetType}_{$sUserId}_id_{$s}",
|
||||
array("vote_update_{$sTargetType}_{$sUserId}","vote_update_{$sTargetType}"),
|
||||
$aVote, "vote_{$sTargetType}_{$sUserId}_id_{$s}",
|
||||
array("vote_update_{$sTargetType}_{$sUserId}","vote_update_{$sTargetType}"),
|
||||
60*60*24*1
|
||||
);
|
||||
return $aVote;
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет голосование из базы по списку идентификаторов таргета
|
||||
*
|
||||
* @param array|int $aTargetId
|
||||
* @param string $sTargetType
|
||||
* @param array|int $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteVoteByTarget($aTargetId, $sTargetType) {
|
||||
if (!is_array($aTargetId)) $aTargetId=array($aTargetId);
|
||||
$aTargetId=array_unique($aTargetId);
|
||||
|
||||
/**
|
||||
* Чистим зависимые кеши
|
||||
*/
|
||||
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("vote_update_{$sTargetType}"));
|
||||
return $this->oMapper->DeleteVoteByTarget($aTargetId,$sTargetType);
|
||||
return $this->oMapper->DeleteVoteByTarget($aTargetId,$sTargetType);
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -15,50 +15,124 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleVote_EntityVote extends Entity
|
||||
{
|
||||
public function getTargetId() {
|
||||
return $this->_getDataOne('target_id');
|
||||
}
|
||||
public function getTargetType() {
|
||||
return $this->_getDataOne('target_type');
|
||||
}
|
||||
public function getVoterId() {
|
||||
return $this->_getDataOne('user_voter_id');
|
||||
}
|
||||
public function getDirection() {
|
||||
return $this->_getDataOne('vote_direction');
|
||||
}
|
||||
public function getValue() {
|
||||
return $this->_getDataOne('vote_value');
|
||||
}
|
||||
public function getDate() {
|
||||
/**
|
||||
* Сущность голосования
|
||||
*
|
||||
* @package modules.vote
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleVote_EntityVote extends Entity {
|
||||
/**
|
||||
* Возвращает ID владельца
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getTargetId() {
|
||||
return $this->_getDataOne('target_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает тип владельца
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTargetType() {
|
||||
return $this->_getDataOne('target_type');
|
||||
}
|
||||
/**
|
||||
* Возвращает ID проголосовавшего пользователя
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getVoterId() {
|
||||
return $this->_getDataOne('user_voter_id');
|
||||
}
|
||||
/**
|
||||
* Возвращает направление голоса: 0, 1, -1
|
||||
*
|
||||
* @return int|null
|
||||
*/
|
||||
public function getDirection() {
|
||||
return $this->_getDataOne('vote_direction');
|
||||
}
|
||||
/**
|
||||
* Возвращает значение при голосовании
|
||||
*
|
||||
* @return float|null
|
||||
*/
|
||||
public function getValue() {
|
||||
return $this->_getDataOne('vote_value');
|
||||
}
|
||||
/**
|
||||
* Возвращает дату голосования
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDate() {
|
||||
return $this->_getDataOne('vote_date');
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Возвращает IP голосовавшего
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getIp() {
|
||||
return $this->_getDataOne('vote_ip');
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливает ID владельца
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setTargetId($data) {
|
||||
$this->_aData['target_id']=$data;
|
||||
}
|
||||
public function setTargetType($data) {
|
||||
$this->_aData['target_type']=$data;
|
||||
}
|
||||
public function setVoterId($data) {
|
||||
$this->_aData['user_voter_id']=$data;
|
||||
}
|
||||
public function setDirection($data) {
|
||||
$this->_aData['vote_direction']=$data;
|
||||
}
|
||||
public function setValue($data) {
|
||||
$this->_aData['vote_value']=$data;
|
||||
}
|
||||
public function setDate($data) {
|
||||
$this->_aData['vote_date']=$data;
|
||||
}
|
||||
$this->_aData['target_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает тип владельца
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setTargetType($data) {
|
||||
$this->_aData['target_type']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает ID проголосовавшего пользователя
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setVoterId($data) {
|
||||
$this->_aData['user_voter_id']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает направление голоса: 0, 1, -1
|
||||
*
|
||||
* @param int $data
|
||||
*/
|
||||
public function setDirection($data) {
|
||||
$this->_aData['vote_direction']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает значение при голосовании
|
||||
*
|
||||
* @param float $data
|
||||
*/
|
||||
public function setValue($data) {
|
||||
$this->_aData['vote_value']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает дату голосования
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setDate($data) {
|
||||
$this->_aData['vote_date']=$data;
|
||||
}
|
||||
/**
|
||||
* Устанавливает IP голосовавшего
|
||||
*
|
||||
* @param string $data
|
||||
*/
|
||||
public function setIp($data) {
|
||||
$this->_aData['vote_ip']=$data;
|
||||
}
|
||||
|
|
|
@ -15,9 +15,19 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
class ModuleVote_MapperVote extends Mapper {
|
||||
|
||||
|
||||
/**
|
||||
* Маппер для работы с БД
|
||||
*
|
||||
* @package modules.vote
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleVote_MapperVote extends Mapper {
|
||||
/**
|
||||
* Добавляет голосование
|
||||
*
|
||||
* @param ModuleVote_EntityVote $oVote Объект голосования
|
||||
* @return bool
|
||||
*/
|
||||
public function AddVote(ModuleVote_EntityVote $oVote) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.vote')."
|
||||
(target_id,
|
||||
|
@ -29,19 +39,25 @@ class ModuleVote_MapperVote extends Mapper {
|
|||
vote_ip
|
||||
)
|
||||
VALUES(?d, ?, ?d, ?d, ?f, ?, ?)
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$oVote->getTargetId(),$oVote->getTargetType(),$oVote->getVoterId(),$oVote->getDirection(),$oVote->getValue(),$oVote->getDate(),$oVote->getIp())===0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получить список голосований по списку айдишников
|
||||
*
|
||||
* @param array $aArrayId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @param int $sUserId ID пользователя
|
||||
* @return array
|
||||
*/
|
||||
public function GetVoteByArray($aArrayId,$sTargetType,$sUserId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
}
|
||||
}
|
||||
$sql = "SELECT
|
||||
*
|
||||
FROM
|
||||
|
@ -57,10 +73,16 @@ class ModuleVote_MapperVote extends Mapper {
|
|||
foreach ($aRows as $aRow) {
|
||||
$aVotes[]=Engine::GetEntity('Vote',$aRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aVotes;
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Удаляет голосование из базы по списку идентификаторов таргета
|
||||
*
|
||||
* @param array|int $aTargetId Список ID владельцев
|
||||
* @param string $sTargetType Тип владельца
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteVoteByTarget($aTargetId,$sTargetType) {
|
||||
$sql = "
|
||||
DELETE FROM ".Config::Get('db.table.vote')."
|
||||
|
@ -68,7 +90,7 @@ class ModuleVote_MapperVote extends Mapper {
|
|||
target_id IN(?a)
|
||||
AND
|
||||
target_type = ?
|
||||
";
|
||||
";
|
||||
if ($this->oDb->query($sql,$aTargetId,$sTargetType)) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -18,28 +18,36 @@
|
|||
/**
|
||||
* Модуль Wall - записи на стене профиля пользователя
|
||||
*
|
||||
* @package modules.wall
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleWall extends Module {
|
||||
|
||||
/**
|
||||
* Объект маппера
|
||||
*
|
||||
* @var ModuleWall_MapperWall
|
||||
*/
|
||||
protected $oMapper;
|
||||
/**
|
||||
* Объект текущего пользователя
|
||||
*
|
||||
* @var ModuleUser_EntityUser|null
|
||||
*/
|
||||
protected $oUserCurrent;
|
||||
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
*/
|
||||
public function Init() {
|
||||
public function Init() {
|
||||
$this->oMapper=Engine::GetMapper(__CLASS__);
|
||||
$this->oUserCurrent=$this->User_GetUserCurrent();
|
||||
}
|
||||
|
||||
/**
|
||||
* Добавление записи на стену
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall
|
||||
*
|
||||
* @return bool | ModuleWall_EntityWall
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
* @return bool|ModuleWall_EntityWall
|
||||
*/
|
||||
public function AddWall($oWall) {
|
||||
if (!$oWall->getDateAdd()) {
|
||||
|
@ -60,27 +68,23 @@ class ModuleWall extends Module {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновление записи
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateWall($oWall) {
|
||||
return $this->oMapper->UpdateWall($oWall);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение списка записей по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
* @param $aOrder
|
||||
* @param int $iCurrPage
|
||||
* @param int $iPerPage
|
||||
* @param array $aAllowData
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @param array $aAllowData Список типов дополнительных данных для подгрузки в сообщения стены
|
||||
* @return array('collection'=>array,'count'=>int)
|
||||
*/
|
||||
public function GetWall($aFilter,$aOrder,$iCurrPage=1,$iPerPage=10,$aAllowData=null) {
|
||||
|
@ -94,19 +98,16 @@ class ModuleWall extends Module {
|
|||
/**
|
||||
* Возвращает число сообщений на стене по фильтру
|
||||
*
|
||||
* @param $aFilter
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountWall($aFilter) {
|
||||
return $this->oMapper->GetCountWall($aFilter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение записей по ID, без дополнительных данных
|
||||
*
|
||||
* @param array $aWallId
|
||||
*
|
||||
* @param array $aWallId Список ID сообщений
|
||||
* @return array
|
||||
*/
|
||||
public function GetWallsByArrayId($aWallId) {
|
||||
|
@ -121,13 +122,11 @@ class ModuleWall extends Module {
|
|||
}
|
||||
return $aWalls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение записей по ID с дополнительные связаными данными
|
||||
*
|
||||
* @param $aWallId
|
||||
* @param array $aAllowData
|
||||
*
|
||||
* @param array $aWallId Список ID сообщений
|
||||
* @param array $aAllowData Список типов дополнительных данных для подгрузки в сообщения стены
|
||||
* @return array
|
||||
*/
|
||||
public function GetWallAdditionalData($aWallId,$aAllowData=null) {
|
||||
|
@ -197,27 +196,26 @@ class ModuleWall extends Module {
|
|||
}
|
||||
return $aWalls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение записи по ID
|
||||
*
|
||||
* @param int $iId
|
||||
*
|
||||
* @param int $iId ID сообщения/записи
|
||||
* @return ModuleWall_EntityWall
|
||||
*/
|
||||
public function GetWallById($iId) {
|
||||
if (!is_numeric($iId)) {
|
||||
return null;
|
||||
}
|
||||
$aResult=$this->GetWallAdditionalData($iId);
|
||||
if (isset($aResult[$iId])) {
|
||||
return $aResult[$iId];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет родительские данные у записи - количество ответов и ID последних ответов
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
* @param null|int $iLimit
|
||||
*/
|
||||
public function UpdatePidWall($oWall,$iLimit=null) {
|
||||
|
@ -237,11 +235,10 @@ class ModuleWall extends Module {
|
|||
}
|
||||
$this->UpdateWall($oWall);
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаление сообщения
|
||||
*
|
||||
* @param $oWall
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
*/
|
||||
public function DeleteWall($oWall) {
|
||||
$this->oMapper->DeleteWallsByPid($oWall->getId());
|
||||
|
@ -250,6 +247,5 @@ class ModuleWall extends Module {
|
|||
$this->UpdatePidWall($oWallParent);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
|
@ -15,16 +15,26 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Сущность записи на стене
|
||||
*
|
||||
* @package modules.wall
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleWall_EntityWall extends Entity {
|
||||
|
||||
/**
|
||||
* Определяем правила валидации
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $aValidateRules=array(
|
||||
array('pid','pid','on'=>array('','add')),
|
||||
array('user_id','time_limit','on'=>array('add')),
|
||||
);
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*/
|
||||
public function Init() {
|
||||
parent::Init();
|
||||
$this->aValidateRules[]=array('text','string','max'=>Config::Get('module.wall.text_max'),'min'=>Config::Get('module.wall.text_min'),'allowEmpty'=>false,'on'=>array('','add'));
|
||||
|
@ -32,10 +42,9 @@ class ModuleWall_EntityWall extends Entity {
|
|||
/**
|
||||
* Проверка на ограничение по времени
|
||||
*
|
||||
* @param $sValue
|
||||
* @param $aParams
|
||||
*
|
||||
* @return bool
|
||||
* @param string $sValue Проверяемое значение
|
||||
* @param array $aParams Параметры
|
||||
* @return bool|string
|
||||
*/
|
||||
public function ValidateTimeLimit($sValue,$aParams) {
|
||||
if ($oUser=$this->User_GetUserById($this->getUserId())) {
|
||||
|
@ -48,10 +57,9 @@ class ModuleWall_EntityWall extends Entity {
|
|||
/**
|
||||
* Валидация родительского сообщения
|
||||
*
|
||||
* @param $sValue
|
||||
* @param $aParams
|
||||
*
|
||||
* @return bool
|
||||
* @param string $sValue Проверяемое значение
|
||||
* @param array $aParams Параметры
|
||||
* @return bool|string
|
||||
*/
|
||||
public function ValidatePid($sValue,$aParams) {
|
||||
if (!$sValue) {
|
||||
|
@ -67,11 +75,10 @@ class ModuleWall_EntityWall extends Entity {
|
|||
}
|
||||
return $this->Lang_Get('wall_add_pid_error');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает родительскую запись
|
||||
*
|
||||
* @return ModuleWall_EntityWall
|
||||
* @return ModuleWall_EntityWall|null
|
||||
*/
|
||||
public function GetPidWall() {
|
||||
if ($this->getPid()) {
|
||||
|
@ -79,7 +86,6 @@ class ModuleWall_EntityWall extends Entity {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверка на возможность удаления сообщения
|
||||
*
|
||||
|
@ -93,11 +99,10 @@ class ModuleWall_EntityWall extends Entity {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает пользователя, которому принадлежит стена
|
||||
*
|
||||
* @return mixed
|
||||
* @return ModuleUser_EntityUser|null
|
||||
*/
|
||||
public function getWallUser() {
|
||||
if (!$this->_getDataOne('wall_user')) {
|
||||
|
@ -105,7 +110,6 @@ class ModuleWall_EntityWall extends Entity {
|
|||
}
|
||||
return $this->_getDataOne('wall_user');
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает URL стены
|
||||
*
|
||||
|
|
|
@ -15,39 +15,71 @@
|
|||
---------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Маппер для работы с БД
|
||||
*
|
||||
* @package modules.wall
|
||||
* @since 1.0
|
||||
*/
|
||||
class ModuleWall_MapperWall extends Mapper {
|
||||
|
||||
/**
|
||||
* Добавление записи на стену
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
* @return bool|int
|
||||
*/
|
||||
public function AddWall($oWall) {
|
||||
$sql = "INSERT INTO ".Config::Get('db.table.wall')." SET ?a ";
|
||||
if ($iId=$this->oDb->query($sql,$oWall->_getData())) {
|
||||
return $iId;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Обновление записи
|
||||
*
|
||||
* @param ModuleWall_EntityWall $oWall Объект записи на стене
|
||||
* @return bool
|
||||
*/
|
||||
public function UpdateWall($oWall) {
|
||||
$sql = "UPDATE ".Config::Get('db.table.wall')."
|
||||
SET
|
||||
count_reply = ?d,
|
||||
last_reply = ?
|
||||
WHERE id = ?d
|
||||
";
|
||||
";
|
||||
return $this->oDb->query($sql,$oWall->getCountReply(),
|
||||
$oWall->getLastReply(),
|
||||
$oWall->getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаление записи
|
||||
*
|
||||
* @param int $iId ID записи
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteWallById($iId) {
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.wall')." WHERE id = ?d ";
|
||||
return $this->oDb->query($sql,$iId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $iPid ID родительской записи
|
||||
* @return bool
|
||||
*/
|
||||
public function DeleteWallsByPid($iPid) {
|
||||
$sql = "DELETE FROM ".Config::Get('db.table.wall')." WHERE pid = ?d ";
|
||||
return $this->oDb->query($sql,$iPid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение списка записей по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @param array $aOrder Сортировка
|
||||
* @param int $iCount Возвращает общее количество элементов
|
||||
* @param int $iCurrPage Номер страницы
|
||||
* @param int $iPerPage Количество элементов на страницу
|
||||
* @return array
|
||||
*/
|
||||
public function GetWall($aFilter,$aOrder,&$iCount,$iCurrPage,$iPerPage) {
|
||||
$aOrderAllow=array('id','date_add');
|
||||
$sOrder='';
|
||||
|
@ -99,8 +131,12 @@ class ModuleWall_MapperWall extends Mapper {
|
|||
}
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращает число сообщений на стене по фильтру
|
||||
*
|
||||
* @param array $aFilter Фильтр
|
||||
* @return int
|
||||
*/
|
||||
public function GetCountWall($aFilter) {
|
||||
$sql = "SELECT
|
||||
count(*) as c
|
||||
|
@ -117,19 +153,24 @@ class ModuleWall_MapperWall extends Mapper {
|
|||
{ AND id > ?d };
|
||||
";
|
||||
if ($aRow=$this->oDb->selectRow($sql,
|
||||
(isset($aFilter['pid']) and !is_null($aFilter['pid'])) ? $aFilter['pid'] : DBSIMPLE_SKIP,
|
||||
(array_key_exists('pid',$aFilter) and is_null($aFilter['pid'])) ? 1 : DBSIMPLE_SKIP,
|
||||
isset($aFilter['wall_user_id']) ? $aFilter['wall_user_id'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['ip']) ? $aFilter['ip'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id']) ? $aFilter['id'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id_less']) ? $aFilter['id_less'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id_more']) ? $aFilter['id_more'] : DBSIMPLE_SKIP
|
||||
(isset($aFilter['pid']) and !is_null($aFilter['pid'])) ? $aFilter['pid'] : DBSIMPLE_SKIP,
|
||||
(array_key_exists('pid',$aFilter) and is_null($aFilter['pid'])) ? 1 : DBSIMPLE_SKIP,
|
||||
isset($aFilter['wall_user_id']) ? $aFilter['wall_user_id'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['ip']) ? $aFilter['ip'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id']) ? $aFilter['id'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id_less']) ? $aFilter['id_less'] : DBSIMPLE_SKIP,
|
||||
isset($aFilter['id_more']) ? $aFilter['id_more'] : DBSIMPLE_SKIP
|
||||
)) {
|
||||
return $aRow['c'];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получение записей по ID, без дополнительных данных
|
||||
*
|
||||
* @param array $aArrayId Список ID сообщений
|
||||
* @return array
|
||||
*/
|
||||
public function GetWallsByArrayId($aArrayId) {
|
||||
if (!is_array($aArrayId) or count($aArrayId)==0) {
|
||||
return array();
|
||||
|
|
|
@ -18,10 +18,10 @@
|
|||
/**
|
||||
* Настройки HTML вида
|
||||
*/
|
||||
$config['view']['skin'] = 'developer'; // шаблон(скин)
|
||||
$config['view']['name'] = 'LiveStreet'; // название сайта
|
||||
$config['view']['description'] = 'LiveStreet - официальный сайт бесплатного движка социальной сети'; // seo description
|
||||
$config['view']['keywords'] = 'движок, livestreet, блоги, социальная сеть, бесплатный, php'; // seo keywords
|
||||
$config['view']['skin'] = 'synio'; // шаблон(скин)
|
||||
$config['view']['name'] = 'Your Site'; // название сайта
|
||||
$config['view']['description'] = 'Description your site'; // seo description
|
||||
$config['view']['keywords'] = 'site, google, internet'; // seo keywords
|
||||
$config['view']['tinymce'] = false; // использовать или нет визуальный редактор TinyMCE
|
||||
$config['view']['noindex'] = true; // "прятать" или нет ссылки от поисковиков, оборачивая их в тег <noindex> и добавляя rel="nofollow"
|
||||
$config['view']['img_resize_width'] = 570; // до какого размера в пикселях ужимать картинку по щирине при загрузки её в топики и комменты
|
||||
|
@ -39,6 +39,7 @@ $config['seo']['description_words_count'] = 20; // количес
|
|||
* Настройка основных блоков
|
||||
*/
|
||||
$config['block']['stream']['row'] = 20; // сколько записей выводить в блоке "Прямой эфир"
|
||||
$config['block']['stream']['show_tip'] = true; // выводить или нет всплывающие сообщения в блоке "Прямой эфир"
|
||||
$config['block']['blogs']['row'] = 10; // сколько записей выводить в блоке "Блоги"
|
||||
$config['block']['tags']['tags_count'] = 70; // сколько тегов выводить в блоке "теги"
|
||||
$config['block']['tags']['personal_tags_count'] = 70; // сколько тегов пользователя выводить в блоке "теги"
|
||||
|
@ -100,7 +101,7 @@ $config['sys']['session']['path'] = '___sys.cookie.path___'; // путь с
|
|||
*/
|
||||
$config['sys']['mail']['type'] = 'mail'; // Какой тип отправки использовать
|
||||
$config['sys']['mail']['from_email'] = 'admin@admin.adm'; // Мыло с которого отправляются все уведомления
|
||||
$config['sys']['mail']['from_name'] = 'Почтовик LiveStreet'; // Имя с которого отправляются все уведомления
|
||||
$config['sys']['mail']['from_name'] = 'Почтовик Your Site'; // Имя с которого отправляются все уведомления
|
||||
$config['sys']['mail']['charset'] = 'UTF-8'; // Какую кодировку использовать в письмах
|
||||
$config['sys']['mail']['smtp']['host'] = 'localhost'; // Настройки SMTP - хост
|
||||
$config['sys']['mail']['smtp']['port'] = 25; // Настройки SMTP - порт
|
||||
|
@ -355,6 +356,7 @@ $config['db']['table']['geo_country'] = '___db.table.prefix___geo_countr
|
|||
$config['db']['table']['geo_region'] = '___db.table.prefix___geo_region';
|
||||
$config['db']['table']['geo_city'] = '___db.table.prefix___geo_city';
|
||||
$config['db']['table']['geo_target'] = '___db.table.prefix___geo_target';
|
||||
$config['db']['table']['user_changemail'] = '___db.table.prefix___user_changemail';
|
||||
|
||||
$config['db']['tables']['engine'] = 'InnoDB'; // InnoDB или MyISAM
|
||||
/**
|
||||
|
@ -473,20 +475,6 @@ $config['block']['rule_blog_info'] = array(
|
|||
);
|
||||
|
||||
|
||||
/**
|
||||
* Настройки вывода js и css файлов
|
||||
*/
|
||||
$config['head']['rules']['page'] =array(
|
||||
'path'=>$config['path']['root']['web'].'/page/',
|
||||
'js' => array(
|
||||
'exclude' => array(
|
||||
"___path.static.skin___/js/vote.js",
|
||||
"___path.static.skin___/js/favourites.js",
|
||||
"___path.static.skin___/js/questions.js",
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
$config['head']['default']['js'] = array(
|
||||
"___path.root.engine_lib___/external/html5shiv.js" => array('browser'=>'lt IE 9'),
|
||||
"___path.root.engine_lib___/external/jquery/jquery.js",
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
/**
|
||||
* Основные константы
|
||||
*/
|
||||
define('LS_VERSION','1.0-dev');
|
||||
define('LS_VERSION','1.0.1');
|
||||
|
||||
/**
|
||||
* Operations with Config object
|
||||
|
@ -68,7 +68,7 @@ if ($hDirInclude = opendir($sDirInclude)) {
|
|||
$sFileIncludePathFull=$sDirInclude.$sFileInclude;
|
||||
if ($sFileInclude !='.' and $sFileInclude !='..' and is_file($sFileIncludePathFull)) {
|
||||
$aPathInfo=pathinfo($sFileIncludePathFull);
|
||||
if (strtolower($aPathInfo['extension'])=='php') {
|
||||
if (isset($aPathInfo['extension']) and strtolower($aPathInfo['extension'])=='php') {
|
||||
require_once($sDirInclude.$sFileInclude);
|
||||
}
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ if ($hDirInclude = opendir($sDirInclude)) {
|
|||
$sFileIncludePathFull=$sDirInclude.$sFileInclude;
|
||||
if ($sFileInclude !='.' and $sFileInclude !='..' and is_file($sFileIncludePathFull)) {
|
||||
$aPathInfo=pathinfo($sFileIncludePathFull);
|
||||
if (strtolower($aPathInfo['extension'])=='php') {
|
||||
if (isset($aPathInfo['extension']) and strtolower($aPathInfo['extension'])=='php') {
|
||||
require_once($sDirInclude.$sFileInclude);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
set_include_path(get_include_path().PATH_SEPARATOR.dirname(__FILE__));
|
||||
require_once(Config::Get('path.root.engine').'/lib/internal/ProfilerSimple/Profiler.class.php');
|
||||
|
||||
require_once("Object.class.php");
|
||||
require_once("LsObject.class.php");
|
||||
require_once("Plugin.class.php");
|
||||
require_once("Block.class.php");
|
||||
require_once("Hook.class.php");
|
||||
|
@ -612,6 +612,25 @@ class Engine extends LsObject {
|
|||
return array($oModule,$sModuleName,$sMethod);
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает объект модуля
|
||||
*
|
||||
* @param string $sName Имя модуля
|
||||
*/
|
||||
public function GetModuleObject($sName) {
|
||||
if(self::GetPluginPrefix($sName)){
|
||||
if(substr_count($sName,'_')<2) {
|
||||
$sName.='_x';
|
||||
}
|
||||
} else {
|
||||
if(substr_count($sName,'_')<1) {
|
||||
$sName.='_x';
|
||||
}
|
||||
}
|
||||
$aCallArray=$this->GetModule($sName);
|
||||
return $aCallArray[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает статистику выполнения
|
||||
*
|
||||
|
|
|
@ -258,6 +258,19 @@ abstract class Plugin extends LsObject {
|
|||
|
||||
return Config::Get('path.root.server').'/plugins/'.$sName.'/';
|
||||
}
|
||||
/**
|
||||
* Возвращает полный web-адрес до плагина
|
||||
*
|
||||
* @param string $sName
|
||||
* @return string
|
||||
*/
|
||||
static public function GetWebPath($sName) {
|
||||
$sName = preg_match('/^Plugin([\w]+)(_[\w]+)?$/Ui',$sName,$aMatches)
|
||||
? strtolower($aMatches[1])
|
||||
: strtolower($sName);
|
||||
|
||||
return Config::Get('path.root.web').'/plugins/'.$sName.'/';
|
||||
}
|
||||
/**
|
||||
* Возвращает правильный серверный путь к директории шаблонов с учетом текущего шаблона
|
||||
* Если пользователь использует шаблон которого нет в плагине, то возвращает путь до шабона плагина 'default'
|
||||
|
|
|
@ -234,11 +234,9 @@ class Router extends LsObject {
|
|||
public function ExecAction() {
|
||||
$this->DefineActionClass();
|
||||
/**
|
||||
* Сначала запускаем инициализирующий экшен
|
||||
* Сначала запускаем инициализирующий евент
|
||||
*/
|
||||
require_once(Config::Get('path.root.server').'/classes/actions/Init.class.php');
|
||||
$oActionInit=new InitAction($this->oEngine);
|
||||
$oActionInit->InitAction();
|
||||
$this->Hook_Run('init_action');
|
||||
|
||||
$sActionClass=$this->DefineActionClass();
|
||||
/**
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Перейдите в данную папку с помощью консольной команды cd livestreet/engile/console/ и вызовите php ls.
|
||||
Перейдите в данную папку с помощью консольной команды cd livestreet/engine/console/ и вызовите php ls.
|
||||
Вы получите краткую справку и существующих командах, например:
|
||||
php ls plugin new test
|
||||
Так мы создадим новый плагин с именем Test
|
||||
|
|
|
@ -441,4 +441,20 @@ function func_list_plugins($bAll = false){
|
|||
return $aPlugin;
|
||||
}
|
||||
|
||||
function func_convert_entity_to_array(Entity $oEntity, $aMethods = null, $sPrefix = '') {
|
||||
if(!is_array($aMethods)) {
|
||||
$aMethods=get_class_methods($oEntity);
|
||||
}
|
||||
$aEntity=array();
|
||||
foreach($aMethods as $sMethod) {
|
||||
if(!preg_match('#^get([a-z][a-z\d]*)$#i', $sMethod, $aMatch)) {
|
||||
continue;
|
||||
}
|
||||
$sProp=strtolower(preg_replace('#([a-z])([A-Z])#', '$1_$2', $aMatch[1]));
|
||||
$mValue=call_user_func(array($oEntity,$sMethod));
|
||||
$aEntity[$sPrefix.$sProp]=$mValue;
|
||||
}
|
||||
return $aEntity;
|
||||
}
|
||||
|
||||
?>
|
478
engine/lib/external/CSSTidy-1.3/css_optimiser.php
vendored
478
engine/lib/external/CSSTidy-1.3/css_optimiser.php
vendored
|
@ -1,478 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* CSSTidy - CSS Optimiser Interface
|
||||
* This file produces an XHTML interface for optimising CSS code
|
||||
*
|
||||
* Copyright 2005, 2006, 2007 Florian Schmitz
|
||||
*
|
||||
* This file is part of CSSTidy.
|
||||
*
|
||||
* CSSTidy is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* CSSTidy is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License
|
||||
* @package csstidy
|
||||
* @author Florian Schmitz (floele at gmail dot com) 2005-2007
|
||||
* @author Brett Zamir (brettz9 at yahoo dot com) 2007
|
||||
*/
|
||||
|
||||
require('class.csstidy.php');
|
||||
require('lang.inc.php');
|
||||
|
||||
|
||||
if (get_magic_quotes_gpc()) {
|
||||
if (isset($_REQUEST['css_text'])) {
|
||||
$_REQUEST['css_text'] = stripslashes($_REQUEST['css_text']);
|
||||
}
|
||||
if (isset($_REQUEST['custom'])) {
|
||||
$_REQUEST['custom'] = stripslashes($_REQUEST['custom']);
|
||||
}
|
||||
if (isset($_COOKIE['custom_template'])) {
|
||||
$_COOKIE['custom_template'] = stripslashes($_COOKIE['custom_template']);
|
||||
}
|
||||
}
|
||||
|
||||
function rmdirr($dirname,$oc=0)
|
||||
{
|
||||
// Sanity check
|
||||
if (!file_exists($dirname)) {
|
||||
return false;
|
||||
}
|
||||
// Simple delete for a file
|
||||
if (is_file($dirname) && (time()-fileatime($dirname))>3600) {
|
||||
return unlink($dirname);
|
||||
}
|
||||
// Loop through the folder
|
||||
if(is_dir($dirname))
|
||||
{
|
||||
$dir = dir($dirname);
|
||||
while (false !== $entry = $dir->read()) {
|
||||
// Skip pointers
|
||||
if ($entry === '.' || $entry === '..') {
|
||||
continue;
|
||||
}
|
||||
// Recurse
|
||||
rmdirr($dirname.'/'.$entry,$oc);
|
||||
}
|
||||
$dir->close();
|
||||
}
|
||||
// Clean up
|
||||
if ($oc==1)
|
||||
{
|
||||
return rmdir($dirname);
|
||||
}
|
||||
}
|
||||
|
||||
function options($options, $selected = null, $labelIsValue = false)
|
||||
{
|
||||
$html = '';
|
||||
|
||||
settype($selected, 'array');
|
||||
settype($options, 'array');
|
||||
|
||||
foreach ($options as $value=>$label)
|
||||
{
|
||||
if (is_array($label)) {
|
||||
$value = $label[0];
|
||||
$label = $label[1];
|
||||
}
|
||||
$label = htmlspecialchars($label, ENT_QUOTES, 'utf-8');
|
||||
$value = $labelIsValue ? $label
|
||||
: htmlspecialchars($value, ENT_QUOTES, 'utf-8');
|
||||
|
||||
$html .= '<option value="'.$value.'"';
|
||||
if (in_array($value, $selected)) {
|
||||
$html .= ' selected="selected"';
|
||||
}
|
||||
$html .= '>'.$label.'</option>';
|
||||
}
|
||||
if (!$html) {
|
||||
$html .= '<option value="0">---</option>';
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
$css = new csstidy();
|
||||
$is_custom = isset($_REQUEST['custom']) && !empty($_REQUEST['custom']) && isset($_REQUEST['template']) && ($_REQUEST['template'] === '4');
|
||||
if($is_custom)
|
||||
{
|
||||
setcookie ('custom_template', $_REQUEST['custom'], time()+360000);
|
||||
}
|
||||
|
||||
rmdirr('temp');
|
||||
|
||||
if(isset($_REQUEST['case_properties'])) $css->set_cfg('case_properties',$_REQUEST['case_properties']);
|
||||
if(isset($_REQUEST['lowercase'])) $css->set_cfg('lowercase_s',true);
|
||||
if(!isset($_REQUEST['compress_c']) && isset($_REQUEST['post'])) $css->set_cfg('compress_colors',false);
|
||||
if(!isset($_REQUEST['compress_fw']) && isset($_REQUEST['post'])) $css->set_cfg('compress_font-weight',false);
|
||||
if(isset($_REQUEST['merge_selectors'])) $css->set_cfg('merge_selectors', $_REQUEST['merge_selectors']);
|
||||
if(isset($_REQUEST['optimise_shorthands'])) $css->set_cfg('optimise_shorthands',$_REQUEST['optimise_shorthands']);
|
||||
if(!isset($_REQUEST['rbs']) && isset($_REQUEST['post'])) $css->set_cfg('remove_bslash',false);
|
||||
if(isset($_REQUEST['preserve_css'])) $css->set_cfg('preserve_css',true);
|
||||
if(isset($_REQUEST['sort_sel'])) $css->set_cfg('sort_selectors',true);
|
||||
if(isset($_REQUEST['sort_de'])) $css->set_cfg('sort_properties',true);
|
||||
if(isset($_REQUEST['remove_last_sem'])) $css->set_cfg('remove_last_;',true);
|
||||
if(isset($_REQUEST['discard'])) $css->set_cfg('discard_invalid_properties',true);
|
||||
if(isset($_REQUEST['css_level'])) $css->set_cfg('css_level',$_REQUEST['css_level']);
|
||||
if(isset($_REQUEST['timestamp'])) $css->set_cfg('timestamp',true);
|
||||
|
||||
|
||||
// This by itself is enough since our scripts don't use DOM to create elements (in which case the namespace aware ones
|
||||
// should be used when serving as application/xhtml+xml but not when served as text/html ;
|
||||
// also, case will be different when retrieving element names, as HTML DOM returns in upper case,
|
||||
// genuine XHTML DOM (when XHTML served as such) as lower
|
||||
if (stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml')) {
|
||||
$http_accept = 'application/xhtml+xml';
|
||||
}
|
||||
elseif (stristr($_SERVER['HTTP_ACCEPT'], 'application/xml')) {
|
||||
$http_accept = 'application/xml';
|
||||
}
|
||||
elseif (stristr($_SERVER['HTTP_ACCEPT'], 'text/xml')) {
|
||||
$http_accept = 'text/xml';
|
||||
}
|
||||
elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'Opera ') || stristr($_SERVER['HTTP_USER_AGENT'], 'Opera/')) {
|
||||
preg_match('@Opera/(\d)@', $_SERVER['HTTP_USER_AGENT'], $matches);
|
||||
if (isset($matches[1]) && $matches[1] >= 7) {
|
||||
$http_accept = 'application/xhtml+xml';
|
||||
}
|
||||
else {
|
||||
$http_accept = 'text/html';
|
||||
}
|
||||
}
|
||||
else {
|
||||
$http_accept = 'text/html';
|
||||
}
|
||||
|
||||
header('Content-Type: '.$http_accept.'; charset=utf-8');
|
||||
|
||||
if ($http_accept === 'text/html') {
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<?php
|
||||
}
|
||||
else {
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $l; ?>">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
|
||||
<title>
|
||||
<?php echo $lang[$l][0]; echo $css->version; ?>)
|
||||
</title>
|
||||
<link rel="stylesheet" href="cssparse.css" type="text/css" />
|
||||
<script type="text/javascript"><!--/*--><![CDATA[/*><!--*/
|
||||
function enable_disable_preserve()
|
||||
{
|
||||
var inputs = new Array('sort_sel', 'sort_de', 'optimise_shorthands', 'merge_selectors', 'none');
|
||||
var inputs_v = new Array( true, true, true, true, false);
|
||||
for(var i = 0; i < inputs.length; i++)
|
||||
{
|
||||
if(document.getElementById('preserve_css').checked) {
|
||||
document.getElementById(inputs[i]).disabled = inputs_v[i];
|
||||
} else {
|
||||
document.getElementById(inputs[i]).disabled = !inputs_v[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
function ClipBoard()
|
||||
{
|
||||
if (window.clipboardData) { // Feature testing
|
||||
window.clipboardData.setData('Text',document.getElementById("copytext").innerText);
|
||||
}
|
||||
else if (navigator.userAgent.indexOf('Gecko') != -1
|
||||
&& navigator.userAgent.indexOf('Apple') == -1
|
||||
) {
|
||||
try {
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
|
||||
const gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].
|
||||
getService(Components.interfaces.nsIClipboardHelper);
|
||||
gClipboardHelper.copyString(document.getElementById("copytext").innerHTML);
|
||||
}
|
||||
catch (e) {
|
||||
alert(e+"\n\n"+"<?php echo $lang[$l][66] ?>");
|
||||
}
|
||||
}
|
||||
else {
|
||||
alert("<?php echo $lang[$l][60]; ?>");
|
||||
}
|
||||
}
|
||||
/*]]>*/-->
|
||||
</script>
|
||||
</head>
|
||||
<body onload="enable_disable_preserve()">
|
||||
<div><h1 style="display:inline">
|
||||
<?php echo $lang[$l][1]; ?>
|
||||
</h1>
|
||||
<?php echo $lang[$l][2]; ?> <a
|
||||
href="http://csstidy.sourceforge.net/">csstidy</a> <?php echo $css->version; ?>)
|
||||
</div><p>
|
||||
<?php echo $lang[$l][39]; ?>: <a hreflang="en" href="?lang=en">English</a> <a hreflang="de" href="?lang=de">Deutsch</a> <a hreflang="fr" href="?lang=fr">French</a> <a hreflang="zh" href="?lang=zh">Chinese</a></p>
|
||||
<p><?php echo $lang[$l][4]; ?>
|
||||
<?php echo $lang[$l][6]; ?>
|
||||
</p>
|
||||
|
||||
<form method="post" action="">
|
||||
<div>
|
||||
<fieldset id="field_input">
|
||||
<legend><?php echo $lang[$l][8]; ?></legend> <label for="css_text"
|
||||
class="block"><?php echo $lang[$l][9]; ?></label><textarea id="css_text" name="css_text" rows="20" cols="35"><?php if(isset($_REQUEST['css_text'])) echo htmlspecialchars($_REQUEST['css_text'], ENT_QUOTES, "utf-8"); ?></textarea>
|
||||
<label for="url"><?php echo $lang[$l][10]; ?></label> <input type="text"
|
||||
name="url" id="url" <?php if(isset($_REQUEST['url']) &&
|
||||
!empty($_REQUEST['url'])) echo 'value="',htmlspecialchars($_REQUEST['url'], ENT_QUOTES, 'utf-8'),'"'; ?>
|
||||
size="35" /><br />
|
||||
<input type="submit" value="<?php echo $lang[$l][35]; ?>" id="submit" />
|
||||
</fieldset>
|
||||
<div id="rightcol">
|
||||
<fieldset id="code_layout">
|
||||
<legend><?php echo $lang[$l][11]; ?></legend> <label for="template"
|
||||
class="block"><?php echo $lang[$l][12]; ?></label> <select
|
||||
id="template" name="template" style="margin-bottom:1em;">
|
||||
<?php
|
||||
$num = (isset($_REQUEST['template'])) ? intval($_REQUEST['template']) : 1;
|
||||
echo options(array(3 => $lang[$l][13], 2 => $lang[$l][14], 1 => $lang[$l][15], 0 => $lang[$l][16], 4 => $lang[$l][17]), $num);
|
||||
?>
|
||||
</select><br />
|
||||
<label for="custom" class="block">
|
||||
<?php echo $lang[$l][18]; ?> </label> <textarea id="custom"
|
||||
name="custom" cols="33" rows="4"><?php
|
||||
if($is_custom) echo
|
||||
htmlspecialchars($_REQUEST['custom'], ENT_QUOTES, 'utf-8');
|
||||
elseif(isset($_COOKIE['custom_template']) &&
|
||||
!empty($_COOKIE['custom_template'])) echo
|
||||
htmlspecialchars($_COOKIE['custom_template'], ENT_QUOTES, 'utf-8');
|
||||
?></textarea>
|
||||
</fieldset>
|
||||
<fieldset id="options">
|
||||
<legend><?php echo $lang[$l][19]; ?></legend>
|
||||
|
||||
<input onchange="enable_disable_preserve()" type="checkbox" name="preserve_css" id="preserve_css"
|
||||
<?php if($css->get_cfg('preserve_css')) echo 'checked="checked"'; ?> />
|
||||
<label for="preserve_css" title="<?php echo $lang[$l][52]; ?>" class="help"><?php echo $lang[$l][51]; ?></label><br />
|
||||
|
||||
|
||||
<input type="checkbox" name="sort_sel" id="sort_sel"
|
||||
<?php if($css->get_cfg('sort_selectors')) echo 'checked="checked"'; ?> />
|
||||
<label for="sort_sel" title="<?php echo $lang[$l][41]; ?>" class="help"><?php echo $lang[$l][20]; ?></label><br />
|
||||
|
||||
|
||||
<input type="checkbox" name="sort_de" id="sort_de"
|
||||
<?php if($css->get_cfg('sort_properties')) echo 'checked="checked"'; ?> />
|
||||
<label for="sort_de"><?php echo $lang[$l][21]; ?></label><br />
|
||||
|
||||
|
||||
<label for="merge_selectors"><?php echo $lang[$l][22]; ?></label>
|
||||
<select style="width:15em;" name="merge_selectors" id="merge_selectors">
|
||||
<?php echo options(array('0' => $lang[$l][47], '1' => $lang[$l][48], '2' => $lang[$l][49]), $css->get_cfg('merge_selectors')); ?>
|
||||
</select><br />
|
||||
|
||||
<label for="optimise_shorthands"><?php echo $lang[$l][23]; ?></label>
|
||||
<select name="optimise_shorthands" id="optimise_shorthands">
|
||||
<?php echo options(array($lang[$l][54], $lang[$l][55], $lang[$l][56]), $css->get_cfg('optimise_shorthands')); ?>
|
||||
</select><br />
|
||||
|
||||
|
||||
<input type="checkbox" name="compress_c" id="compress_c"
|
||||
<?php if($css->get_cfg('compress_colors')) echo 'checked="checked"';?> />
|
||||
<label for="compress_c"><?php echo $lang[$l][24]; ?></label><br />
|
||||
|
||||
|
||||
<input type="checkbox" name="compress_fw" id="compress_fw"
|
||||
<?php if($css->get_cfg('compress_font-weight')) echo 'checked="checked"';?> />
|
||||
<label for="compress_fw"><?php echo $lang[$l][45]; ?></label><br />
|
||||
|
||||
|
||||
<input type="checkbox" name="lowercase" id="lowercase" value="lowercase"
|
||||
<?php if($css->get_cfg('lowercase_s')) echo 'checked="checked"'; ?> />
|
||||
<label title="<?php echo $lang[$l][30]; ?>" class="help" for="lowercase"><?php echo $lang[$l][25]; ?></label><br />
|
||||
|
||||
|
||||
<?php echo $lang[$l][26]; ?><br />
|
||||
<input type="radio" name="case_properties" id="none" value="0"
|
||||
<?php if($css->get_cfg('case_properties') === 0) echo 'checked="checked"'; ?> />
|
||||
<label for="none"><?php echo $lang[$l][53]; ?></label>
|
||||
<input type="radio" name="case_properties" id="lower_yes" value="1"
|
||||
<?php if($css->get_cfg('case_properties') === 1) echo 'checked="checked"'; ?> />
|
||||
<label for="lower_yes"><?php echo $lang[$l][27]; ?></label>
|
||||
<input type="radio" name="case_properties" id="upper_yes" value="2"
|
||||
<?php if($css->get_cfg('case_properties') === 2) echo 'checked="checked"'; ?> />
|
||||
<label for="upper_yes"><?php echo $lang[$l][29]; ?></label><br />
|
||||
|
||||
<input type="checkbox" name="rbs" id="rbs"
|
||||
<?php if($css->get_cfg('remove_bslash')) echo 'checked="checked"'; ?> />
|
||||
<label for="rbs"><?php echo $lang[$l][31]; ?></label><br />
|
||||
|
||||
|
||||
<input type="checkbox" id="remove_last_sem" name="remove_last_sem"
|
||||
<?php if($css->get_cfg('remove_last_;')) echo 'checked="checked"'; ?> />
|
||||
<label for="remove_last_sem"><?php echo $lang[$l][42]; ?></label><br />
|
||||
|
||||
|
||||
<input type="checkbox" id="discard" name="discard"
|
||||
<?php if($css->get_cfg('discard_invalid_properties')) echo 'checked="checked"'; ?> />
|
||||
<label for="discard"><?php echo $lang[$l][43]; ?></label>
|
||||
<select name="css_level"><?php echo options(array('CSS2.1','CSS2.0','CSS1.0'),$css->get_cfg('css_level'), true); ?></select><br />
|
||||
|
||||
|
||||
<input type="checkbox" id="timestamp" name="timestamp"
|
||||
<?php if($css->get_cfg('timestamp')) echo 'checked="checked"'; ?> />
|
||||
<label for="timestamp"><?php echo $lang[$l][57]; ?></label><br />
|
||||
|
||||
<input type="checkbox" id="whole_file" name="whole_file"
|
||||
<?php if(isset($_REQUEST['whole_file'])) echo 'checked="checked"'; ?> />
|
||||
<label for="whole_file"><?php echo $lang[$l][63]; ?></label><br />
|
||||
|
||||
|
||||
<input type="checkbox" name="file_output" id="file_output" value="file_output"
|
||||
<?php if(isset($_REQUEST['file_output'])) echo 'checked="checked"'; ?> />
|
||||
<label class="help" title="<?php echo $lang[$l][34]; ?>" for="file_output">
|
||||
<strong><?php echo $lang[$l][33]; ?></strong>
|
||||
</label><br />
|
||||
|
||||
</fieldset>
|
||||
<input type="hidden" name="post" />
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<?php
|
||||
|
||||
$file_ok = false;
|
||||
$result = false;
|
||||
|
||||
$url = (isset($_REQUEST['url']) && !empty($_REQUEST['url'])) ? $_REQUEST['url'] : false;
|
||||
|
||||
if(isset($_REQUEST['template']))
|
||||
{
|
||||
switch($_REQUEST['template'])
|
||||
{
|
||||
case 4:
|
||||
if($is_custom)
|
||||
{
|
||||
$css->load_template($_REQUEST['custom'],false);
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
$css->load_template('highest_compression');
|
||||
break;
|
||||
|
||||
case 2:
|
||||
$css->load_template('high_compression');
|
||||
break;
|
||||
|
||||
case 0:
|
||||
$css->load_template('low_compression');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if($url)
|
||||
{
|
||||
if(substr($_REQUEST['url'],0,7) !== 'http://')
|
||||
{
|
||||
$_REQUEST['url'] = 'http://'.$_REQUEST['url'];
|
||||
}
|
||||
$result = $css->parse_from_url($_REQUEST['url'],0);
|
||||
}
|
||||
elseif(isset($_REQUEST['css_text']) && strlen($_REQUEST['css_text'])>5)
|
||||
{
|
||||
$result = $css->parse($_REQUEST['css_text']);
|
||||
}
|
||||
|
||||
if($result)
|
||||
{
|
||||
$ratio = $css->print->get_ratio();
|
||||
$diff = $css->print->get_diff();
|
||||
if(isset($_REQUEST['file_output']))
|
||||
{
|
||||
$filename = md5(mt_rand().time().mt_rand());
|
||||
if (!is_dir('temp')) {
|
||||
$madedir = mkdir('temp');
|
||||
if (!$madedir) {
|
||||
print 'Could not make directory "temp" in '.dirname(__FILE__);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
$handle = fopen('temp/'.$filename.'.css','w');
|
||||
if($handle) {
|
||||
if(fwrite($handle,$css->print->plain()))
|
||||
{
|
||||
$file_ok = true;
|
||||
}
|
||||
}
|
||||
fclose($handle);
|
||||
}
|
||||
if($ratio>0) $ratio = '<span style="color:green;">'.$ratio.'%</span>
|
||||
('.$diff.' Bytes)'; else $ratio = '<span
|
||||
style="color:red;">'.$ratio.'%</span> ('.$diff.' Bytes)';
|
||||
if(count($css->log) > 0): ?>
|
||||
<fieldset id="messages"><legend>Messages</legend>
|
||||
<div><dl><?php
|
||||
foreach($css->log as $line => $array)
|
||||
{
|
||||
echo '<dt>',$line,'</dt>';
|
||||
$array_size = count($array);
|
||||
for($i = 0; $i < $array_size; ++$i)
|
||||
{
|
||||
echo '<dd class="',$array[$i]['t'],'">',$array[$i]['m'],'</dd>';
|
||||
}
|
||||
}
|
||||
?></dl></div>
|
||||
</fieldset>
|
||||
<?php endif;
|
||||
echo '<fieldset><legend>',$lang[$l][37],': ',$css->print->size('input'),'KB, ',$lang[$l][38],':',$css->print->size('output'),'KB, ',$lang[$l][36],': ',$ratio;
|
||||
if($file_ok)
|
||||
{
|
||||
echo ' - <a href="temp/',$filename,'.css">Download</a>';
|
||||
}
|
||||
echo ' - <a href="javascript:ClipBoard()">',$lang[$l][58],'</a>';
|
||||
echo '</legend>';
|
||||
echo '<code id="copytext">';
|
||||
echo $css->print->formatted();
|
||||
echo '</code></fieldset><div><br /></div>';
|
||||
|
||||
echo '<fieldset class="code_output"><legend>',$lang[$l][64],'</legend>';
|
||||
echo '<textarea rows="10" cols="80">';
|
||||
|
||||
if(isset($_REQUEST['whole_file'])) {
|
||||
echo htmlspecialchars($css->print->formatted_page('xhtml1.1', false, '', 'en'), ENT_QUOTES, 'utf-8');
|
||||
}
|
||||
else {
|
||||
echo htmlspecialchars('<code id="copytext">', ENT_QUOTES, 'utf-8'),"\n";
|
||||
echo htmlspecialchars($css->print->formatted()."\n".'</code>', ENT_QUOTES, 'utf-8');
|
||||
}
|
||||
echo '</textarea></fieldset>';
|
||||
echo '<fieldset class="code_output"><legend>',$lang[$l][65],'</legend>';
|
||||
echo '<textarea rows="10" cols="30">';
|
||||
|
||||
echo file_get_contents('cssparsed.css');
|
||||
echo '</textarea>';
|
||||
|
||||
echo '</fieldset><p><a href="javascript:scrollTo(0,0)">↑ ',$lang[$l][59],'</a></p>';
|
||||
|
||||
}
|
||||
elseif(isset($_REQUEST['css_text']) || isset($_REQUEST['url'])) {
|
||||
echo '<p class="important">',$lang[$l][28],'</p>';
|
||||
}
|
||||
?>
|
||||
<p style="text-align:center;font-size:.8em;clear:both;">
|
||||
<?php echo $lang[$l][61] ?> <a
|
||||
href="http://csstidy.sourceforge.net/contact.php"><?php echo $lang[$l][62] ?></a>.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
|
@ -23,7 +23,7 @@
|
|||
this.$elm = $(elm);
|
||||
this.opts = $.extend({}, $.fn.poshytip.defaults, options);
|
||||
this.$tip = $(['<div class="infobox ',this.opts.className,'">',
|
||||
'<div class="tip-inner tip-bg-image"></div>',
|
||||
'<div class="tip-inner tip-bg-image word-wrap"></div>',
|
||||
'<div class="tip-arrow tip-arrow-top tip-arrow-right tip-arrow-bottom tip-arrow-left"></div>',
|
||||
'</div>'].join('')).appendTo(document.body);
|
||||
this.$arrow = this.$tip.find('div.tip-arrow');
|
||||
|
|
19
engine/lib/external/kcaptcha/form_example.php
vendored
19
engine/lib/external/kcaptcha/form_example.php
vendored
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
session_start();
|
||||
?>
|
||||
<form action="" method="post">
|
||||
<p>Enter text shown below:</p>
|
||||
<p><img src="./?<?php echo session_name()?>=<?php echo session_id()?>"></p>
|
||||
<p><input type="text" name="keystring"></p>
|
||||
<p><input type="submit" value="Check"></p>
|
||||
</form>
|
||||
<?php
|
||||
if(count($_POST)>0){
|
||||
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
|
||||
echo "Correct";
|
||||
}else{
|
||||
echo "Wrong";
|
||||
}
|
||||
}
|
||||
unset($_SESSION['captcha_keystring']);
|
||||
?>
|
2
engine/lib/external/kcaptcha/index.php
vendored
2
engine/lib/external/kcaptcha/index.php
vendored
|
@ -33,7 +33,7 @@ if(isset($_REQUEST[session_name()])){
|
|||
}
|
||||
|
||||
foreach ($_REQUEST as $key => $value) {
|
||||
if (preg_match("/^[\w\d]{5,40}$/",$value)) {
|
||||
if (preg_match("/^[\w\d]{5,40}$/",(string)$value)) {
|
||||
session_name($key);
|
||||
session_start();
|
||||
break;
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
<body style="margin: 10px;">
|
||||
<div style="width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;">
|
||||
<div align="center"><img src="images/phpmailer.gif" style="height: 90px; width: 340px"></div><br>
|
||||
<br>
|
||||
This is a test of PHPMailer.<br>
|
||||
<br>
|
||||
This particular example uses <strong>HTML</strong>, with a <div> tag and inline<br>
|
||||
styles.<br>
|
||||
<br>
|
||||
Also note the use of the PHPMailer logo above with no specific code to handle
|
||||
including it.<br />
|
||||
Included are two attachments:<br />
|
||||
phpmailer.gif is an attachment and used inline as a graphic (above)<br />
|
||||
phpmailer_mini.gif is an attachment<br />
|
||||
<br />
|
||||
PHPMailer:<br />
|
||||
Author: Andy Prevost (codeworxtech@users.sourceforge.net)<br />
|
||||
Author: Marcus Bointon (coolbru@users.sourceforge.net)<br />
|
||||
</div>
|
||||
</body>
|
Binary file not shown.
Before Width: | Height: | Size: 4.6 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1 KiB |
|
@ -1,49 +0,0 @@
|
|||
This release of PHPMailer (v5.0.0) sets a new milestone in the development
|
||||
cycle of PHPMailer. First, class.phpmailer.php has a small footprint (65.7 Kb),
|
||||
while class.smtp.php is even smaller than before (at only 25.0 Kb).<br />
|
||||
<br />
|
||||
We have maintained all functionality and added Exception handling unique to
|
||||
PHP 5/6.<br />
|
||||
<br />
|
||||
There is only one function that has been removed: that is getFile(). The reason
|
||||
for this is that getFile() became a wrapper for the PHP function 'file_get_contents()'
|
||||
and nothing more. Rather than burden the class with a function already available
|
||||
in PHP, we decided to remove it.<br />
|
||||
<br />
|
||||
Our new Exception handling provides your own scripts far more power than ever.<br />
|
||||
<br />
|
||||
We have also enhanced the "packaging" of PHPMailer with an entirely new set of
|
||||
examples. Included are both basic and advanced examples showing how you can take
|
||||
advantage of PHP Exception handling to improve your own scripts.<br />
|
||||
<br />
|
||||
A few things to note about PHPMailer:
|
||||
<ul>
|
||||
<li>the use of $mail->AltBody is completely optional. If not used, PHPMailer
|
||||
will use the HTML text with htmlentities().<br />
|
||||
We also highly recommend using HTML2Text authored by Jon Abernathy. The class description
|
||||
and download can be viewed at: http://www.chuggnutt.com/html2text.php.
|
||||
</li>
|
||||
<li>there is no specific code to define image or attachment types ... that is handled
|
||||
automatically by PHPMailer when it parses the images</li>
|
||||
</ul>
|
||||
A note to users that want to use SMTP with PHPMailer. The most common problems are:
|
||||
<ul>
|
||||
<li>wrong port ... most ISP (Internet Service Providers) will not allow relaying through
|
||||
their servers. If that's the case with your ISP, try using port 26.
|
||||
</li>
|
||||
<li>wrong authentication information (username and/or password) ... don't forget that
|
||||
many servers require the account name to be in the format of the full email address.
|
||||
</li>
|
||||
<li>... if these tips do not get your SMTP settings working, we have a debug mode
|
||||
for helping you determine the problem. Insert this after $mail->IsSMTP();<br />
|
||||
$mail->SMTPDebug = 2; // enables SMTP debug information (for testing)<br />
|
||||
note that a setting of 2 will display all errors and messages generated by the SMTP
|
||||
server<br />
|
||||
</li>
|
||||
</ul>
|
||||
Our examples all use an HTML file in the /examples folder. To see what the email SHOULD
|
||||
look like in your HTML compatible email viewer: <a href="contents.html">click here</a><br>
|
||||
<br />
|
||||
From the PHPMailer team:<br />
|
||||
Author: Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net (and Project Administrator)<br />
|
||||
Author: Marcus Bointon (coolbru) coolbru@users.sourceforge.net<br />
|
|
@ -1,58 +0,0 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>PHPMailer - MySQL Database - SMTP basic test with authentication</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<?php
|
||||
|
||||
//error_reporting(E_ALL);
|
||||
error_reporting(E_STRICT);
|
||||
|
||||
date_default_timezone_set('America/Toronto');
|
||||
|
||||
require_once('../class.phpmailer.php');
|
||||
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
|
||||
|
||||
$mail = new PHPMailer();
|
||||
|
||||
$body = file_get_contents('contents.html');
|
||||
$body = eregi_replace("[\]",'',$body);
|
||||
|
||||
$mail->IsSMTP(); // telling the class to use SMTP
|
||||
$mail->Host = "smtp1.site.com;smtp2.site.com";
|
||||
$mail->SMTPAuth = true; // enable SMTP authentication
|
||||
$mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent
|
||||
$mail->Host = "mail.yourdomain.com"; // sets the SMTP server
|
||||
$mail->Port = 26; // set the SMTP port for the GMAIL server
|
||||
$mail->Username = "yourname@yourdomain"; // SMTP account username
|
||||
$mail->Password = "yourpassword"; // SMTP account password
|
||||
$mail->SetFrom('list@mydomain.com', 'List manager');
|
||||
$mail->AddReplyTo('list@mydomain.com', 'List manager');
|
||||
|
||||
$mail->Subject = "PHPMailer Test Subject via smtp, basic with authentication";
|
||||
|
||||
@MYSQL_CONNECT("localhost","root","password");
|
||||
@mysql_select_db("my_company");
|
||||
$query = "SELECT full_name, email, photo FROM employee WHERE id=$id";
|
||||
$result = @MYSQL_QUERY($query);
|
||||
|
||||
while ($row = mysql_fetch_array ($result)) {
|
||||
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
|
||||
$mail->MsgHTML($body);
|
||||
$mail->AddAddress($row["email"], $row["full_name"]);
|
||||
$mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");
|
||||
|
||||
if(!$mail->Send()) {
|
||||
echo "Mailer Error (" . str_replace("@", "@", $row["email"]) . ') ' . $mail->ErrorInfo . '<br />';
|
||||
} else {
|
||||
echo "Message sent to :" . $row["full_name"] . ' (' . str_replace("@", "@", $row["email"]) . ')<br />';
|
||||
}
|
||||
// Clear all addresses and attachments for next loop
|
||||
$mail->ClearAddresses();
|
||||
$mail->ClearAttachments();
|
||||
}
|
||||
?>
|
||||
|
||||
</body>
|
||||
</html>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue