1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-26 03:30:48 +03:00

Компонент talk

This commit is contained in:
Denis Shakhov 2014-07-22 23:16:27 +07:00
parent e3f7be3b72
commit 976898fba4
22 changed files with 268 additions and 217 deletions

View file

@ -58,7 +58,7 @@ class ActionTalk extends Action {
*/
$this->oUserCurrent=$this->User_GetUserCurrent();
$this->SetDefaultEvent('inbox');
$this->Viewer_AddHtmlTitle($this->Lang_Get('talk_menu_inbox'));
$this->Viewer_AddHtmlTitle($this->Lang_Get('talk.nav.inbox'));
/**
* Загружаем в шаблон JS текстовки
@ -75,10 +75,11 @@ class ActionTalk extends Action {
$this->AddEvent('add','EventAdd');
$this->AddEvent('read','EventRead');
$this->AddEvent('delete','EventDelete');
$this->AddEvent('ajaxaddcomment','AjaxAddComment');
$this->AddEvent('ajaxresponsecomment','AjaxResponseComment');
$this->AddEvent('favourites','EventFavourites');
$this->AddEvent('blacklist','EventBlacklist');
$this->AddEvent('ajaxaddcomment','AjaxAddComment');
$this->AddEvent('ajaxresponsecomment','AjaxResponseComment');
$this->AddEvent('ajaxaddtoblacklist', 'AjaxAddToBlacklist');
$this->AddEvent('ajaxdeletefromblacklist', 'AjaxDeleteFromBlacklist');
$this->AddEvent('ajaxdeletetalkuser', 'AjaxDeleteTalkUser');
@ -191,8 +192,8 @@ class ActionTalk extends Action {
if(getRequest('submit_talk_filter')) {
$this->Message_AddNotice(
($aResult['count'])
? $this->Lang_Get('talk_filter_result_count',array('count'=>$aResult['count']))
: $this->Lang_Get('talk_filter_result_empty')
? $this->Lang_Get('talk.search.notices.result_count',array('count'=>$aResult['count']))
: $this->Lang_Get('talk.search.notices.result_empty')
);
}
/**
@ -223,15 +224,15 @@ class ActionTalk extends Action {
$aFilter['date_min']="{$y}-{$m}-{$d}";
} else {
$this->Message_AddError(
$this->Lang_Get('talk_filter_error_date_format'),
$this->Lang_Get('talk_filter_error')
$this->Lang_Get('talk.search.notices.error_date_format'),
$this->Lang_Get('talk.search.notices.error')
);
unset($_REQUEST['start']);
}
} else {
$this->Message_AddError(
$this->Lang_Get('talk_filter_error_date_format'),
$this->Lang_Get('talk_filter_error')
$this->Lang_Get('talk.search.notices.error_date_format'),
$this->Lang_Get('talk.search.notices.error')
);
unset($_REQUEST['start']);
}
@ -246,15 +247,15 @@ class ActionTalk extends Action {
$aFilter['date_max']="{$y}-{$m}-{$d} 23:59:59";
} else {
$this->Message_AddError(
$this->Lang_Get('talk_filter_error_date_format'),
$this->Lang_Get('talk_filter_error')
$this->Lang_Get('talk.search.notices.error_date_format'),
$this->Lang_Get('talk.search.notices.error')
);
unset($_REQUEST['end']);
}
} else {
$this->Message_AddError(
$this->Lang_Get('talk_filter_error_date_format'),
$this->Lang_Get('talk_filter_error')
$this->Lang_Get('talk.search.notices.error_date_format'),
$this->Lang_Get('talk.search.notices.error')
);
unset($_REQUEST['end']);
}
@ -346,14 +347,14 @@ class ActionTalk extends Action {
*/
$this->Viewer_Assign('aPaging',$aPaging);
$this->Viewer_Assign('aTalks',$aTalks);
$this->Viewer_AddHtmlTitle($this->Lang_Get('talk_favourite_inbox'));
$this->Viewer_AddHtmlTitle($this->Lang_Get('talk.nav.favourites'));
}
/**
* Страница создания письма
*/
protected function EventAdd() {
$this->sMenuSubItemSelect='add';
$this->Viewer_AddHtmlTitle($this->Lang_Get('talk_menu_inbox_create'));
$this->Viewer_AddHtmlTitle($this->Lang_Get('talk.nav.add'));
/**
* Получаем список друзей
*/
@ -377,7 +378,7 @@ class ActionTalk extends Action {
* Проверяем разрешено ли отправлять инбокс по времени
*/
if (!$this->ACL_CanSendTalkTime($this->oUserCurrent)) {
$this->Message_AddErrorSingle($this->Lang_Get('talk_time_limit'),$this->Lang_Get('error'));
$this->Message_AddErrorSingle($this->Lang_Get('talk.notices.time_limit'),$this->Lang_Get('error'));
return false;
}
/**
@ -470,14 +471,14 @@ class ActionTalk extends Action {
* Проверяем есть ли заголовок
*/
if (!func_check(getRequestStr('talk_title'),'text',2,200)) {
$this->Message_AddError($this->Lang_Get('talk_create_title_error'),$this->Lang_Get('error'));
$this->Message_AddError($this->Lang_Get('talk.add.notices.title_error'),$this->Lang_Get('error'));
$bOk=false;
}
/**
* Проверяем есть ли содержание топика
*/
if (!func_check(getRequestStr('talk_text'),'text',2,3000)) {
$this->Message_AddError($this->Lang_Get('talk_create_text_error'),$this->Lang_Get('error'));
$this->Message_AddError($this->Lang_Get('talk.add.notices.text_error'),$this->Lang_Get('error'));
$bOk=false;
}
/**
@ -503,7 +504,7 @@ class ActionTalk extends Action {
str_replace(
'login',
$oUser->getLogin(),
$this->Lang_Get('messages.blacklist.alerts.blocked',array('login'=>htmlspecialchars($oUser->getLogin())))
$this->Lang_Get('talk.blacklist.notices.blocked',array('login'=>htmlspecialchars($oUser->getLogin())))
),
$this->Lang_Get('error')
);
@ -511,18 +512,18 @@ class ActionTalk extends Action {
continue;
}
} else {
$this->Message_AddError($this->Lang_Get('talk_create_users_error_not_found').' «'.htmlspecialchars($sUser).'»',$this->Lang_Get('error'));
$this->Message_AddError($this->Lang_Get('talk.add.notices.users_error_not_found').' «'.htmlspecialchars($sUser).'»',$this->Lang_Get('error'));
$bOk=false;
}
$aUsersNew[]=$sUser;
}
if (!count($aUsersNew)) {
$this->Message_AddError($this->Lang_Get('talk_create_users_error'),$this->Lang_Get('error'));
$this->Message_AddError($this->Lang_Get('talk.add.notices.users_error'),$this->Lang_Get('error'));
$_REQUEST['talk_users']='';
$bOk=false;
} else {
if (count($aUsersNew)>Config::Get('module.talk.max_users') and !$this->oUserCurrent->isAdministrator()) {
$this->Message_AddError($this->Lang_Get('talk_create_users_error_many'),$this->Lang_Get('error'));
$this->Message_AddError($this->Lang_Get('talk.add.notices.users_error_many'),$this->Lang_Get('error'));
$bOk=false;
}
$_REQUEST['talk_users']=join(',',$aUsersNew);
@ -625,7 +626,7 @@ class ActionTalk extends Action {
* Проверяем разрешено ли отправлять инбокс по времени
*/
if (!$this->ACL_CanPostTalkCommentTime($this->oUserCurrent)) {
$this->Message_AddErrorSingle($this->Lang_Get('talk_time_limit'),$this->Lang_Get('error'));
$this->Message_AddErrorSingle($this->Lang_Get('talk.add.notices.time_limit'),$this->Lang_Get('error'));
return false;
}
/**
@ -633,7 +634,7 @@ class ActionTalk extends Action {
*/
$sText=getRequestStr('comment_text');
if (!func_check($sText,'text',2,3000)) {
$this->Message_AddErrorSingle($this->Lang_Get('talk_comment_add_text_error'),$this->Lang_Get('error'));
$this->Message_AddErrorSingle($this->Lang_Get('talk.message.notices.error_text'),$this->Lang_Get('error'));
return;
}
/**
@ -859,7 +860,7 @@ class ActionTalk extends Action {
if (!isset($aBlacklist[$oUserTarget->getId()])) {
$this->Message_AddErrorSingle(
$this->Lang_Get(
'talk_blacklist_user_not_found',
'talk.blacklist.notices.user_not_found',
array('login'=>$oUserTarget->getLogin())
),
$this->Lang_Get('error')
@ -917,7 +918,7 @@ class ActionTalk extends Action {
if((!$oTalk=$this->Talk_GetTalkById($iTalkId))
|| ( ($oTalk->getUserId()!=$this->oUserCurrent->getId()) && !$this->oUserCurrent->isAdministrator() ) ) {
$this->Message_AddErrorSingle(
$this->Lang_Get('talk_not_found'),
$this->Lang_Get('talk.notices.not_found'),
$this->Lang_Get('error')
);
return;
@ -933,7 +934,7 @@ class ActionTalk extends Action {
|| $aTalkUsers[$iUserId]->getUserActive()==ModuleTalk::TALK_USER_DELETE_BY_SELF) {
$this->Message_AddErrorSingle(
$this->Lang_Get(
'talk_speaker_user_not_found',
'talk.users.notices.user_not_found',
array('login'=>$oUserTarget->getLogin())
),
$this->Lang_Get('error')
@ -987,7 +988,7 @@ class ActionTalk extends Action {
if((!$oTalk=$this->Talk_GetTalkById($idTalk))
|| ( ($oTalk->getUserId()!=$this->oUserCurrent->getId()) && !$this->oUserCurrent->isAdministrator() ) ) {
$this->Message_AddErrorSingle(
$this->Lang_Get('talk_not_found'),
$this->Lang_Get('talk.notices.not_found'),
$this->Lang_Get('error')
);
return;
@ -1004,7 +1005,7 @@ class ActionTalk extends Action {
* Ограничения на максимальное число участников разговора
*/
if (count($aTalkUsers)>=Config::Get('module.talk.max_users') and !$this->oUserCurrent->isAdministrator()) {
$this->Message_AddError($this->Lang_Get('talk_create_users_error_many'),$this->Lang_Get('error'));
$this->Message_AddError($this->Lang_Get('talk.add.notices.users_error_many'),$this->Lang_Get('error'));
return;
}
/**
@ -1090,7 +1091,7 @@ class ActionTalk extends Action {
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$this->Lang_Get('error'),
'sMsg'=>$this->Lang_Get('talk_speaker_delete_by_self',array('login'=>htmlspecialchars($sUser)))
'sMsg'=>$this->Lang_Get('talk.users.notices.deleted',array('login'=>htmlspecialchars($sUser)))
);
break;
@ -1141,7 +1142,7 @@ class ActionTalk extends Action {
$aResult[]=array(
'bStateError'=>true,
'sMsgTitle'=>$this->Lang_Get('error'),
'sMsg'=>$this->Lang_Get('messages.blacklist.alerts.blocked',array('login'=>htmlspecialchars($sUser)))
'sMsg'=>$this->Lang_Get('talk.blacklist.notices.blocked',array('login'=>htmlspecialchars($sUser)))
);
}
} else {

View file

@ -24,11 +24,13 @@ return array(
'common' => array(
'add' => 'Добавить',
'remove' => 'Удалить',
'remove_confirm' => 'Действительно удалить?',
'edit' => 'Редактировать',
'save' => 'Сохранить',
'create' => 'Создать',
'cancel' => 'Отменить',
'empty' => 'Тут ничего нет',
'send' => 'Отправить',
'form_reset' => 'Очистить форму',
'preview_text' => 'Предпросмотр',
'times_declension' => 'раз;раза;раз',
@ -380,7 +382,61 @@ return array(
/**
* Личные сообщения
*/
'messages' => array(
'talk' => array(
'title' => 'Сообщения',
// Меню
'nav' => array(
'inbox' => 'Сообщения',
'new' => 'Только новые',
'add' => 'Новое письмо',
'favourites' => 'Избранное',
'blacklist' => 'Блокировать'
),
// Форма добавления
'add' => array(
'title' => 'Новое письмо',
// Поля
'fields' => array(
'users' => array(
'label' => 'Кому'
),
'title' => array(
'label' => 'Заголовок',
),
'text' => array(
'label' => 'Сообщение',
),
),
// Сообщения
'notices' => array(
'users_error' => 'Необходимо указать, кому вы хотите отправить сообщение',
'users_error_not_found' => 'У нас нет пользователя с логином', // TODO: Move to common
'users_error_many' => 'Слишком много адресатов',
'title_error' => 'Заголовок сообщения должен быть от 2 до 200 символов',
'text_error' => 'Текст сообщения должен быть от 2 до 3000 символов',
)
),
// Сообщение
'message' => array(
// Сообщения
'notices' => array(
'error_text' => 'Текст сообщения должен быть от 2 до 3000 символов',
)
),
// Экшнбар
'actionbar' => array(
'read' => 'Прочитанные',
'unread' => 'Не прочитанные',
'mark_as_read' => 'Отметить как прочитанное',
),
// Форма поиска
'search' => array(
@ -412,36 +468,51 @@ return array(
'favourite' => array(
'label' => 'Искать только в избранном'
),
),
// Сообщения
'notices' => array(
'error' => 'При поиске произошла ошибка',
'error_date_format' => 'Указан неверный формат даты',
'result_count' => 'Найдено писем: %%count%%',
'result_empty' => 'По вашим критериям писем не найдено'
)
),
// Черный список
'blacklist' => array(
// Поля
'fields' => array(
'talk_blacklist_add' => array(
'label' => 'Список пользователей',
'note' => 'Введите один или несколько логинов'
),
),
'title' => 'Черный список',
'note' => 'Добавьте пользователей от которых вы не хотите получать сообщения',
// Сообщения
'alerts' => array(
'blocked' => 'Пользователь <b>%%login%%</b> не принимает от вас писем'
'notices' => array(
'blocked' => 'Пользователь <b>%%login%%</b> не принимает от вас писем',
'user_not_found' => 'Пользователя <b>%%login%%</b> нет в вашем black list`е',
),
),
// Всплывающие сообщения
'notices' => array(
// Список участников разговора
'users' => array(
'title' => 'Участники разговора',
'user_not_found' => 'Пользователь не участвует в разговоре',
// Сообщения
'notices' => array(
'user_not_found' => 'Пользователь <b>%%login%%</b> не участвует в разговоре',
'deleted' => 'Участник <b>%%login%%</b> удалил этот разговор',
)
),
// Сообщения
'alerts' => array(
'empty' => 'Нет писем'
'notices' => array(
'time_limit' => 'Вам нельзя отправлять сообщения слишком часто',
'empty' => 'Нет писем',
'deleted' => 'Отправитель удалил сообщение',
'not_found' => 'Разговор не найден'
),
),
/**
* Опросы
*/
@ -1021,58 +1092,6 @@ return array(
// TODO: Удалить, используется в ActionSubscribe
'registration_mail_error' => 'Неверный формат e-mail',
/**
* Почта
*/
'talk_filter_error' => 'Ошибка фильтрации',
'talk_filter_error_date_format' => 'Указан неверный формат даты',
'talk_filter_result_count' => 'Найдено писем: %%count%%',
'talk_filter_result_empty' => 'По вашим критериям писем не найдено',
'talk_user_in_blacklist' => 'Пользователь <b>%%login%%</b> не принимает от вас писем',
'talk_blacklist_user_not_found' => 'Пользователя <b>%%login%%</b> нет в вашем black list`е',
'talk_favourite_inbox' => 'Избранные письма',
'talk_menu_inbox' => 'Сообщения',
'talk_menu_inbox_new' => 'Только новые',
'talk_menu_inbox_list' => 'Переписка',
'talk_menu_inbox_create' => 'Новое письмо',
'talk_menu_inbox_favourites' => 'Избранное',
'talk_menu_inbox_blacklist' => 'Блокировать',
'talk_inbox' => 'Почтовый ящик',
'talk_inbox_target' => 'Адресаты',
'talk_inbox_title' => 'Тема',
'talk_inbox_date' => 'Дата',
'talk_inbox_make_read' => 'Отметить как прочитанное',
'talk_inbox_delete' => 'Удалить выделенное',
'talk_inbox_delete_confirm' => 'Действительно удалить переписку?',
'talk_comments' => 'Переписка',
'talk_comment_add_text_error' => 'Текст комментария должен быть от 2 до 3000 символов',
'talk_create' => 'Новое письмо',
'talk_create_users' => 'Кому',
'talk_create_users_error' => 'Необходимо указать, кому вы хотите отправить сообщение',
'talk_create_users_error_not_found' => 'У нас нет пользователя с логином',
'talk_create_users_error_many' => 'Слишком много адресатов',
'talk_create_title' => 'Заголовок',
'talk_create_title_error' => 'Заголовок сообщения должен быть от 2 до 200 символов',
'talk_create_text' => 'Сообщение',
'talk_create_text_error' => 'Текст сообщения должен быть от 2 до 3000 символов',
'talk_create_submit' => 'Отправить',
'talk_time_limit' => 'Вам нельзя отправлять инбоксы слишком часто',
'talk_speaker_title' => 'Участники разговора',
'talk_speaker_user_not_found' => 'Пользователь <b>%%login%%</b> не участвует в разговоре',
'talk_speaker_not_found' => 'Пользователь не участвует в разговоре',
'talk_speaker_delete_by_self' => 'Участник <b>%%login%%</b> удалил этот разговор',
'talk_not_found' => 'Разговор не найден',
'talk_deleted' => 'Отправитель удалил сообщение',
/**
* Блоги
*/

View file

@ -5,45 +5,5 @@
{extends 'layouts/layout.user.messages.tpl'}
{block 'layout_content'}
{hook run='talk_add_begin'}
<form action="" method="POST" enctype="multipart/form-data" class="js-form-validate">
{hook run='form_add_talk_begin'}
{include 'components/field/field.hidden.security_key.tpl'}
{* Получатели *}
{include 'components/field/field.text.tpl'
sName = 'talk_users'
aRules = [ 'required' => true, 'rangetags' => '[1,99]' ]
sLabel = $aLang.talk_create_users
sInputClasses = 'autocomplete-users-sep js-input-talk-users'
sNote = "<a href=\"#\" class=\"link-dotted\" data-type=\"modal-toggle\" data-modal-url=\"{router page='ajax/modal-friend-list'}\" data-param-selectable=\"true\" data-param-target=\".js-input-talk-users\">Выбрать из списка друзей</a>"}
{* Заголовок *}
{include 'components/field/field.text.tpl'
sName = 'talk_title'
aRules = [ 'required' => true, 'rangelength' => '[2,200]' ]
sLabel = $aLang.talk_create_title}
{* Текст сообщения *}
{include 'components/editor/editor.tpl'
sSet = 'light'
sMediaTargetType = 'talk'
sName = 'talk_text'
aRules = [ 'required' => true, 'rangelength' => '[2,3000]' ]
sLabel = $aLang.topic_create_text
sInputClasses = 'js-editor'}
{* Preview *}
<div class="text mb-20" id="text_preview" style="display: none;"></div>
{hook run='form_add_talk_end'}
{* Кнопки *}
{include 'components/button/button.tpl' sName='submit_talk_add' sMods='primary' sText=$aLang.talk_create_submit}
{include 'components/button/button.tpl' sName='submit_preview' sType='button' sText=$aLang.common.preview_text sAttributes='onclick="jQuery(\'#text_preview\').show(); ls.utils.textPreview($(\'#talk_text\'), $(\'#text_preview\'), false); return false;"'}
</form>
{hook run='talk_add_end'}
{include 'components/talk/add.tpl'}
{/block}

View file

@ -5,5 +5,5 @@
{extends 'layouts/layout.user.messages.tpl'}
{block 'layout_content'}
{include 'components/user_list_add/user_list_add.tpl' sUserListAddClasses='js-user-list-add-blacklist' iUserListId=$oUserCurrent->getId() aUserList=$aUsersBlacklist}
{include 'components/talk/blacklist.tpl' users=$aUsersBlacklist}
{/block}

View file

@ -5,6 +5,5 @@
{extends 'layouts/layout.user.messages.tpl'}
{block 'layout_content'}
{include './talk-list.tpl'}
{include 'components/pagination/pagination.tpl' aPaging=$aPaging}
{include 'components/talk/talk-list.tpl'}
{/block}

View file

@ -9,7 +9,6 @@
{/block}
{block 'layout_content'}
{include './talk-search-form.tpl'}
{include './talk-list.tpl' bMessageListCheckboxes=true}
{include 'components/pagination/pagination.tpl' aPaging=$aPaging}
{include 'components/talk/talk-search-form.tpl'}
{include 'components/talk/talk-list.tpl' bMessageListCheckboxes=true}
{/block}

View file

@ -1,24 +0,0 @@
{**
* Первое сообщение в диалоге
*}
{extends 'components/article/article.tpl'}
{block 'entry_options'}
{$oEntry = $oTalk}
{$sEntryType = 'talk'}
{/block}
{block 'entry' append}
{* Участники личного сообщения *}
{if $oTalk->getUserId() == $oUserCurrent->getId() or $oUserCurrent->isAdministrator()}
{include 'components/user_list_add/user_list_add.tpl'
sUserListAddClasses = "message-users js-message-users"
sUserListAddAttributes = "data-param-i-target-id=\"{$oTalk->getId()}\""
aUserList = $oTalk->getTalkUsers()
sUserListTitle = $aLang.talk_speaker_title
aUserListSmallExcludeRemove = [ $oUserCurrent->getId() ]
sUserItemInactiveTitle = $aLang.talk_speaker_not_found
sUserListSmallItemPath = 'components/user_list_small/user_list_small_item.message.tpl'}
{/if}
{/block}

View file

@ -5,17 +5,5 @@
{extends 'layouts/layout.user.messages.tpl'}
{block 'layout_content'}
{* Первое сообщение *}
{include './talk-message-root.tpl'}
{* Вывод комментариев к сообщению *}
{include 'components/comment/comments.tpl'
sClasses = 'js-comments-talk'
iTargetId = $oTalk->getId()
sTargetType = 'talk'
aComments = $aComments
iCountComment = $oTalk->getCountComment()
sDateReadLast = $oTalk->getTalkUser()->getDateLast()
sNoticeCommentAdd = $aLang.topic_comment_add
bShowFavourite = false}
{include 'components/talk/talk.tpl' talk=$oTalk comments=$aComments}
{/block}

View file

@ -0,0 +1,45 @@
{**
* Форма создания личного сообщения
*}
{hook run='talk_add_begin'}
<form action="" method="POST" enctype="multipart/form-data" class="js-form-validate">
{hook run='form_add_talk_begin'}
{include 'components/field/field.hidden.security_key.tpl'}
{* Получатели *}
{include 'components/field/field.text.tpl'
sName = 'talk_users'
aRules = [ 'required' => true, 'rangetags' => '[1,99]' ]
sLabel = $aLang.talk.add.fields.users.label
sInputClasses = 'autocomplete-users-sep js-input-talk-users'
sNote = "<a href=\"#\" class=\"link-dotted\" data-type=\"modal-toggle\" data-modal-url=\"{router page='ajax/modal-friend-list'}\" data-param-selectable=\"true\" data-param-target=\".js-input-talk-users\">Выбрать из списка друзей</a>"}
{* Заголовок *}
{include 'components/field/field.text.tpl'
sName = 'talk_title'
aRules = [ 'required' => true, 'rangelength' => '[2,200]' ]
sLabel = $aLang.talk.add.fields.title.label}
{* Текст сообщения *}
{include 'components/editor/editor.tpl'
sSet = 'light'
sMediaTargetType = 'talk'
sName = 'talk_text'
aRules = [ 'required' => true, 'rangelength' => '[2,3000]' ]
sLabel = $aLang.talk.add.fields.text.label
sInputClasses = 'js-editor'}
{* Preview *}
<div class="text mb-20" id="text_preview" style="display: none;"></div>
{hook run='form_add_talk_end'}
{* Кнопки *}
{include 'components/button/button.tpl' sName='submit_talk_add' sMods='primary' sText=$aLang.common.send}
{include 'components/button/button.tpl' sName='submit_preview' sType='button' sText=$aLang.common.preview_text sAttributes='onclick="jQuery(\'#text_preview\').show(); ls.utils.textPreview($(\'#talk_text\'), $(\'#text_preview\'), false); return false;"'}
</form>
{hook run='talk_add_end'}

View file

@ -0,0 +1,12 @@
{**
* Черный список
*
* @param array $users
*}
{include 'components/user_list_add/user_list_add.tpl'
sUserListTitle = $aLang.talk.blacklist.title
sUserListNote = $aLang.talk.blacklist.note
sUserListAddClasses = 'js-user-list-add-blacklist'
iUserListId = $oUserCurrent->getId()
aUserList = $smarty.local.users}

View file

@ -10,13 +10,13 @@
{* Экшнбар *}
{include 'components/actionbar/actionbar.item.select.tpl' sItemSelector='.js-message-list-item' assign=sMessagesSelect aItems=[
[ 'text' => 'Прочитанные', 'filter' => ":not('.message-unread')" ],
[ 'text' => 'Не прочитанные', 'filter' => ".message-unread" ]
[ 'text' => $aLang.talk.actionbar.read, 'filter' => ":not('.message-unread')" ],
[ 'text' => $aLang.talk.actionbar.unread, 'filter' => ".message-unread" ]
]}
{include 'components/actionbar/actionbar.tpl' aItems=[
[ 'html' => $sMessagesSelect ],
[ 'icon' => 'icon-ok', 'classes' => 'js-talk-form-action', 'attributes' => 'data-action="mark_as_read"', 'text' => $aLang.talk_inbox_make_read ],
[ 'icon' => 'icon-ok', 'classes' => 'js-talk-form-action', 'attributes' => 'data-action="mark_as_read"', 'text' => $aLang.talk.actionbar.mark_as_read ],
[ 'icon' => 'icon-remove', 'classes' => 'js-talk-form-action', 'attributes' => 'data-action="remove"', 'text' => $aLang.common.remove ]
]}
@ -109,5 +109,7 @@
</table>
</form>
{else}
{include 'components/alert/alert.tpl' mAlerts=$aLang.messages.alerts.empty sMods='empty'}
{/if}
{include 'components/alert/alert.tpl' mAlerts=$aLang.talk.alerts.empty sMods='empty'}
{/if}
{include 'components/pagination/pagination.tpl' aPaging=$aPaging}

View file

@ -0,0 +1,5 @@
{**
* Первое сообщение в диалоге
*}
{extends 'components/article/article.tpl'}

View file

@ -4,48 +4,48 @@
<div class="accordion">
<h3 class="accordion-header" onclick="jQuery('#block_talk_search_content').toggle(); return false;">
<span class="link-dotted">{$aLang.messages.search.title}</span>
<span class="link-dotted">{$aLang.talk.search.title}</span>
</h3>
<form action="{router page='talk'}" method="GET" name="talk_filter_form" id="block_talk_search_content" class="accordion-content" {if $_aRequest.submit_talk_filter}style="display:block;"{/if}>
{* Отправитель *}
{include 'components/field/field.text.tpl'
sName = 'sender'
sLabel = $aLang.messages.search.fields.sender.label
sNote = $aLang.messages.search.fields.sender.note
sLabel = $aLang.talk.search.fields.sender.label
sNote = $aLang.talk.search.fields.sender.note
sInputClasses = 'width-full autocomplete-users'}
{* Получатель *}
{include 'components/field/field.text.tpl'
sName = 'receiver'
sLabel = $aLang.messages.search.fields.receiver.label
sNote = $aLang.messages.search.fields.receiver.note
sLabel = $aLang.talk.search.fields.receiver.label
sNote = $aLang.talk.search.fields.receiver.note
sInputClasses = 'width-full autocomplete-users'}
{* Искать в заголовке *}
{include 'components/field/field.text.tpl'
sName = 'keyword'
sLabel = $aLang.messages.search.fields.keyword.label}
sLabel = $aLang.talk.search.fields.keyword.label}
{* Искать в тексте *}
{include 'components/field/field.text.tpl'
sName = 'keyword_text'
sLabel = $aLang.messages.search.fields.keyword_text.label}
sLabel = $aLang.talk.search.fields.keyword_text.label}
{* Ограничения по дате *}
{include 'components/field/field.text.tpl'
sName = 'start'
sPlaceholder = $aLang.messages.search.fields.start.placeholder
sLabel = $aLang.messages.search.fields.start.label
sPlaceholder = $aLang.talk.search.fields.start.placeholder
sLabel = $aLang.talk.search.fields.start.label
sInputClasses = 'width-200 js-date-picker'}
{include 'components/field/field.text.tpl'
sName = 'end'
sPlaceholder = $aLang.messages.search.fields.end.placeholder
sPlaceholder = $aLang.talk.search.fields.end.placeholder
sInputClasses = 'width-200 js-date-picker'}
{* Искать только в избранном *}
{include 'components/field/field.checkbox.tpl' sName='favourite' sLabel=$aLang.messages.search.fields.favourite.label}
{include 'components/field/field.checkbox.tpl' sName='favourite' sLabel=$aLang.talk.search.fields.favourite.label}
{* Кнопки *}
{include 'components/button/button.tpl'

View file

@ -14,6 +14,9 @@
{/block}
{block 'components/user_list_small/user_list_small_item_actions'}
<li class="icon-minus js-message-users-user-inactivate" title="{$aLang.common.remove}" data-user-id="{$iUserId}"></li>
<li class="icon-plus js-message-users-user-activate" title="{$aLang.common.add}" data-user-id="{$iUserId}" data-user-login="{$oUser->getLogin()}"></li>
{* TODO: Add local var allowManage *}
{if $allowManage|default:true}
<li class="icon-minus js-message-users-user-inactivate" title="{$aLang.common.remove}" data-user-id="{$iUserId}"></li>
<li class="icon-plus js-message-users-user-activate" title="{$aLang.common.add}" data-user-id="{$iUserId}" data-user-login="{$oUser->getLogin()}"></li>
{/if}
{/block}

View file

@ -0,0 +1,13 @@
{**
* Участники личного сообщения
*}
{include 'components/user_list_add/user_list_add.tpl'
sUserListAddClasses = "message-users js-message-users"
sUserListAddAttributes = "data-param-i-target-id=\"{$oTalk->getId()}\""
aUserList = $oTalk->getTalkUsers()
allowManage = $oTalk->getUserId() == $oUserCurrent->getId() || $oUserCurrent->isAdministrator()
sUserListTitle = $aLang.talk.users.title
aUserListSmallExcludeRemove = [ $oUserCurrent->getId() ]
sUserItemInactiveTitle = $aLang.talk.users.user_not_found
sUserListSmallItemPath = 'components/talk/talk-users-item.tpl'}

View file

@ -0,0 +1,27 @@
{**
* Диалог
*
* @param object $talk
* @param array $comments
*}
{$talk = $smarty.local.talk}
{* Первое сообщение *}
{include './talk-message-root.tpl' oEntry=$talk sEntryType='talk'}
{* Участники личного сообщения *}
{include './talk-users.tpl'}
{* Вывод комментариев к сообщению *}
{include 'components/comment/comments.tpl'
sClasses = 'js-comments-talk'
iTargetId = $talk->getId()
sTargetType = 'talk'
aComments = $smarty.local.comments
iCountComment = $talk->getCountComment()
sDateReadLast = $talk->getTalkUser()->getDateLast()
bForbidAdd = $bNoComments
sNoticeCommentAdd = $aLang.topic_comment_add
sNoticeNotAllow = $aLang.talk.notices.deleted
bShowFavourite = false}

View file

@ -18,17 +18,19 @@
{/if}
{* Форма добавления *}
<form class="{$_sComponentName}-form js-{$_sComponentName}-form">
{$sClass = "js-$_sComponentName-form-users-"|cat:rand(0, 9999)}
{if $smarty.local.allowManage|default:true}
<form class="{$_sComponentName}-form js-{$_sComponentName}-form">
{$sClass = "js-$_sComponentName-form-users-"|cat:rand(0, 9999)}
{include 'components/field/field.text.tpl'
sName = 'add'
sInputClasses = "autocomplete-users-sep {$sClass}"
sLabel = $aLang.user_list_add.form.fields.add.label
sNote = "<a href=\"#\" class=\"link-dotted\" data-type=\"modal-toggle\" data-modal-url=\"{router page='ajax/modal-friend-list'}\" data-param-selectable=\"true\" data-param-target=\".{$sClass}\">Выбрать из списка друзей</a>"}
{include 'components/field/field.text.tpl'
sName = 'add'
sInputClasses = "autocomplete-users-sep {$sClass}"
sLabel = $aLang.user_list_add.form.fields.add.label
sNote = "<a href=\"#\" class=\"link-dotted\" data-type=\"modal-toggle\" data-modal-url=\"{router page='ajax/modal-friend-list'}\" data-param-selectable=\"true\" data-param-target=\".{$sClass}\">Выбрать из списка друзей</a>"}
{include 'components/button/button.tpl' sText=$aLang.common.add sMods='primary' sClasses='js-{$_sComponentName}-form-submit'}
</form>
{include 'components/button/button.tpl' sText=$aLang.common.add sMods='primary' sClasses='js-{$_sComponentName}-form-submit'}
</form>
{/if}
{* Список пользователей *}
{* TODO: Изменить порядок вывода - сначало новые *}

View file

@ -9,7 +9,7 @@
'user_url' => $oUserFrom->getUserWebPath(),
'user_name' => $oUserFrom->getDisplayName(),
'talk_name' => $oTalk->getTitle()|escape,
'talk_url' => "{router page='talk'}read/{$oTalk->getId()}/#comment{$oTalkComment->getId()}",
'talk_url' => "{router page='talk'}read/{$oTalk->getId()}/",
'talk_text' => "{if Config::Get('sys.mail.include_talk')}{lang name='emails.common.comment_text'}:<br><em>{$oTalk->getText()}</em>{/if}"
]}
{/block}

View file

@ -9,5 +9,5 @@
{/block}
{block 'layout_user_page_title'}
{$aLang.talk_menu_inbox}
{$aLang.talk.title}
{/block}

View file

@ -7,9 +7,9 @@
sActiveItem = $sMenuSubItemSelect
sMods = 'pills'
aItems = [
[ 'name' => 'inbox', 'url' => "{router page='talk'}", 'text' => $aLang.talk_menu_inbox ],
[ 'name' => 'new', 'url' => "{router page='talk'}inbox/new/", 'text' => $aLang.talk_menu_inbox_new, 'count' => $iUserCurrentCountTalkNew, 'is_enabled' => $iUserCurrentCountTalkNew ],
[ 'name' => 'add', 'url' => "{router page='talk'}add/", 'text' => $aLang.talk_menu_inbox_create ],
[ 'name' => 'favourites', 'url' => "{router page='talk'}favourites/", 'text' => $aLang.talk_menu_inbox_favourites, 'count' => $iCountTalkFavourite ],
[ 'name' => 'blacklist', 'url' => "{router page='talk'}blacklist/", 'text' => $aLang.talk_menu_inbox_blacklist ]
[ 'name' => 'inbox', 'url' => "{router page='talk'}", 'text' => $aLang.talk.nav.inbox ],
[ 'name' => 'new', 'url' => "{router page='talk'}inbox/new/", 'text' => $aLang.talk.nav.new, 'count' => $iUserCurrentCountTalkNew, 'is_enabled' => $iUserCurrentCountTalkNew ],
[ 'name' => 'add', 'url' => "{router page='talk'}add/", 'text' => $aLang.talk.nav.add ],
[ 'name' => 'favourites', 'url' => "{router page='talk'}favourites/", 'text' => $aLang.talk.nav.favourites, 'count' => $iCountTalkFavourite ],
[ 'name' => 'blacklist', 'url' => "{router page='talk'}blacklist/", 'text' => $aLang.talk.nav.blacklist ]
]}

View file

@ -10,6 +10,6 @@
[ 'name' => 'favourites', 'text' => $aLang.user_menu_profile_favourites, 'url' => "{$oUserProfile->getUserWebPath()}favourites/topics/", 'count' => $iCountFavourite ],
[ 'name' => 'friends', 'text' => $aLang.user_menu_profile_friends, 'url' => "{$oUserProfile->getUserWebPath()}friends/", 'count' => $iCountFriendsUser ],
[ 'name' => 'stream', 'text' => $aLang.user_menu_profile_stream, 'url' => "{$oUserProfile->getUserWebPath()}stream/" ],
[ 'name' => 'talk', 'text' => $aLang.talk_menu_inbox, 'url' => "{router page='talk'}", 'count' => $iUserCurrentCountTalkNew, 'is_enabled' => $oUserCurrent and $oUserCurrent->getId() == $oUserProfile->getId() ],
[ 'name' => 'talk', 'text' => $aLang.talk.title, 'url' => "{router page='talk'}", 'count' => $iUserCurrentCountTalkNew, 'is_enabled' => $oUserCurrent and $oUserCurrent->getId() == $oUserProfile->getId() ],
[ 'name' => 'settings', 'text' => $aLang.settings_menu, 'url' => "{router page='settings'}", 'is_enabled' => $oUserCurrent and $oUserCurrent->getId() == $oUserProfile->getId() ]
]}

View file

@ -11,7 +11,7 @@
[ 'name' => 'favourites', 'text' => $aLang.user_menu_profile_favourites, 'url' => "{$oUserCurrent->getUserWebPath()}favourites/topics/", 'count' => $iCountFavourite ],
[ 'name' => 'friends', 'text' => $aLang.user_menu_profile_friends, 'url' => "{$oUserCurrent->getUserWebPath()}friends/", 'count' => $iCountFriendsUser ],
[ 'name' => 'stream', 'text' => $aLang.user_menu_profile_stream, 'url' => "{$oUserCurrent->getUserWebPath()}stream/" ],
[ 'name' => 'talk', 'text' => $aLang.talk_menu_inbox, 'url' => "{router page='talk'}", 'count' => $iUserCurrentCountTalkNew, 'is_enabled' => $oUserCurrent && $oUserCurrent->getId() == $oUserCurrent->getId() ],
[ 'name' => 'talk', 'text' => $aLang.talk.title, 'url' => "{router page='talk'}", 'count' => $iUserCurrentCountTalkNew, 'is_enabled' => $oUserCurrent && $oUserCurrent->getId() == $oUserCurrent->getId() ],
[ 'name' => 'settings', 'text' => $aLang.settings_menu, 'url' => "{router page='settings'}", 'is_enabled' => $oUserCurrent && $oUserCurrent->getId() == $oUserCurrent->getId() ],
[ 'name' => 'admin', 'text' => $aLang.admin_title, 'url' => "{router page='admin'}", 'is_enabled' => $oUserCurrent && $oUserCurrent->isAdministrator() ]
]