1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-01 05:55:02 +03:00

Доработка личных сообщений

This commit is contained in:
Denis Shakhov 2014-02-06 16:44:27 +07:00
parent c6cf1ab756
commit e906daa3c9
10 changed files with 310 additions and 403 deletions

View file

@ -29,8 +29,11 @@ return array(
'create' => 'Создать',
'cancel' => 'Отменить',
'empty' => 'Тут ничего нет',
'form_reset' => 'Очистить форму',
'error' => array(
'save' => 'Ошибка сохранения',
'add' => 'Произошла ошибка при добавлении',
'remove' => 'Произошла ошибка при удалении',
'system' => array(
'code' => array(
'404' => 'К сожалению, такой страницы не существует. Вероятно, она была удалена с сервера, либо ее здесь никогда не было.',
@ -41,6 +44,8 @@ return array(
),
'success' => array(
'save' => 'Успешно сохранено',
'add' => 'Успешно добавлено',
'remove' => 'Успешно удалено',
)
),
@ -63,12 +68,15 @@ return array(
* Избранное
*/
'favourite' => array(
'add' => 'Добавить в избранное',
'favourite' => 'Избранное',
'add' => 'Добавить в избранное',
'remove' => 'Удалить из избранного',
// Всплывающие сообщения
'notices' => array(
'add_success' => 'Добавлено в избранное',
'remove_success' => 'Удалено из избранного'
),
),
@ -157,13 +165,15 @@ return array(
*/
'invite' => array(
'invite_users' => 'Пригласить пользователей',
'users_title' => 'Список приглашенных',
'repeat' => 'Повторить',
'empty' => 'Нет приглашенных пользователей',
// Форма добавления
'form' => array(
'users_label' => 'Список пользователей',
// Поля
'fields' => array(
'add' => array(
'label' => 'Список пользователей',
'note' => 'Введите один или несколько логинов'
),
),
// Письмо с приглашением
@ -342,7 +352,128 @@ return array(
'by_users' => 'по кол-ву читателей',
),
),
/**
* Личные сообщения
*/
'messages' => array(
// Форма поиска
'search' => array(
'title' => 'Поиск по сообщениям',
// Поля
'fields' => array(
'sender' => array(
'label' => 'Отправитель',
'note' => 'Укажите логин отправителя'
),
'keyword' => array(
'label' => 'Искать в заголовке',
),
'keyword_text' => array(
'label' => 'Искать в тексте',
),
'start' => array(
'label' => 'Ограничения по дате',
'placeholder' => 'С числа'
),
'end' => array(
'placeholder' => 'По число'
),
'favourite' => array(
'label' => 'Искать только в избранном'
),
)
),
// Черный список
'blacklist' => array(
// Поля
'fields' => array(
'talk_blacklist_add' => array(
'label' => 'Список пользователей',
'note' => 'Введите один или несколько логинов'
),
),
// Сообщения
'alerts' => array(
'blocked' => 'Пользователь <b>%%login%%</b> не принимает от вас писем'
),
),
// Всплывающие сообщения
'notices' => array(
),
// Сообщения
'alerts' => array(
'empty' => 'Нет писем'
),
),
/**
* Почта
*/
'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_already_have' => 'Пользователь <b>%%login%%</b> есть в вашем black list`е',
'talk_blacklist_user_not_found' => 'Пользователя <b>%%login%%</b> нет в вашем black list`е',
'talk_blacklist_add_self' => 'Нельзя добавлять в 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_edit' => 'Редактировать список',
'talk_speaker_add_label' => 'Добавить пользователя',
'talk_speaker_delete_ok' => 'Участник <b>%%login%%</b> успешно удален',
'talk_speaker_user_not_found' => 'Пользователь <b>%%login%%</b> не участвует в разговоре',
'talk_speaker_user_already_exist' => ' <b>%%login%%</b> уже участник разговора',
'talk_speaker_not_found' => 'Пользователь не участвует в разговоре',
'talk_speaker_add_ok' => 'Участник <b>%%login%%</b> успешно добавлен',
'talk_speaker_delete_by_self' => 'Участник <b>%%login%%</b> удалил этот разговор',
'talk_speaker_add_self' => 'Нельзя добавлять в участники себя',
'talk_not_found' => 'Разговор не найден',
'talk_deleted' => 'Отправитель удалил сообщение',
/**
* Блоги
*/
@ -937,84 +1068,6 @@ return array(
'block_blog_navigator_button' => 'Смотреть',
'site_history_back' => 'Вернуться назад',
'site_go_main' => 'перейти на главную',
/**
* Почта
*/
'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_empty' => 'Тут ничего нет',
'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_favourite_inbox' => 'Избранные письма',
'talk_favourite_add' => 'Добавить в избранное',
'talk_favourite_add_ok' => 'Письмо добавлено в избранное',
'talk_favourite_add_no' => 'Этого письма нет в вашем избранном',
'talk_favourite_add_already' => 'Это письмо уже есть в вашем избранном',
'talk_favourite_del' => 'Удалить из избранного',
'talk_favourite_del_ok' => 'Письмо удалено из избранного',
'talk_favourite_empty' => 'Нет писем в избранном',
'talk_filter_title' => 'Поиск сообщений',
'talk_filter_erase' => 'Сбросить фильтр',
'talk_filter_erase_form' => 'Очистить форму',
'talk_filter_label_sender' => 'Отправитель',
'talk_filter_label_keyword' => 'Искать в заголовке',
'talk_filter_label_keyword_text' => 'Искать в тексте',
'talk_filter_label_favourite' => 'Искать только в избранном',
'talk_filter_label_date' => 'Ограничения по дате',
'talk_filter_notice_sender' => 'Укажите логин отправителя',
'talk_filter_notice_keyword' => 'Введите одно или несколько слов',
'talk_filter_notice_date' => 'Дата вводится в формате 25.12.2008',
'talk_filter_submit' => 'Отфильтровать',
'talk_filter_submit_clear' => 'Очистить',
'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_title' => 'Не принимать писем от:',
'talk_blacklist_empty' => 'Принимать от всех',
'talk_balcklist_add_label' => 'Добавить пользователей',
'talk_balcklist_add_notice' => 'Введите один или несколько логинов',
'talk_balcklist_add_submit' => 'Не принимать',
'talk_blacklist_add_ok' => 'Пользователь <b>%%login%%</b> успешно добавлен',
'talk_blacklist_user_already_have' => 'Пользователь <b>%%login%%</b> есть в вашем black list`е',
'talk_blacklist_delete_ok' => 'Пользователь <b>%%login%%</b> успешно удален',
'talk_blacklist_user_not_found' => 'Пользователя <b>%%login%%</b> нет в вашем black list`е',
'talk_blacklist_add_self' => 'Нельзя добавлять в black list себя',
'talk_speaker_title' => 'Участники разговора',
'talk_speaker_edit' => 'Редактировать список',
'talk_speaker_add_label' => 'Добавить пользователя',
'talk_speaker_delete_ok' => 'Участник <b>%%login%%</b> успешно удален',
'talk_speaker_user_not_found' => 'Пользователь <b>%%login%%</b> не участвует в разговоре',
'talk_speaker_user_already_exist' => ' <b>%%login%%</b> уже участник разговора',
'talk_speaker_not_found' => 'Пользователь не участвует в разговоре',
'talk_speaker_add_ok' => 'Участник <b>%%login%%</b> успешно добавлен',
'talk_speaker_delete_by_self' => 'Участник <b>%%login%%</b> удалил этот разговор',
'talk_speaker_add_self' => 'Нельзя добавлять в участники себя',
'talk_not_found' => 'Разговор не найден',
'talk_deleted' => 'Отправитель удалил сообщение',
/**
* Userfeed
*/

View file

@ -2,60 +2,34 @@
* Создание личного сообщения
*}
{extends file='layouts/layout.user.messages.tpl'}
{extends 'layouts/layout.user.messages.tpl'}
{block name='layout_content'}
{**
* Выбор адресата среди друзей на странице создания личного сообщения
*}
<div class="accordion">
<h3 class="accordion-header" onclick="jQuery('#block_talk_friends_content').toggle(); return false;"><span class="link-dotted">{$aLang.block_friends}</span></h3>
<div class="accordion-content" id="block_talk_friends_content">
{if $aUsersFriend}
<ul class="list" id="friends">
{foreach $aUsersFriend as $oFriend}
<li>
<input id="talk_friend_{$oFriend->getId()}" type="checkbox" name="friend[{$oFriend->getId()}]" class="input-checkbox" />
<label for="talk_friend_{$oFriend->getId()}" id="talk_friend_{$oFriend->getId()}_label">{$oFriend->getDisplayName()}</label>
</li>
{/foreach}
</ul>
<footer>
<a href="#" id="friend_check_all">{$aLang.block_friends_check}</a> |
<a href="#" id="friend_uncheck_all">{$aLang.block_friends_uncheck}</a>
</footer>
{else}
{include file='alert.tpl' mAlerts=$aLang.block_friends_empty sAlertStyle='empty'}
{/if}
</div>
</div>
{block 'layout_content'}
{include 'forms/editor.init.tpl' sEditorType='comment'}
{hook run='talk_add_begin'}
{include file='forms/editor.init.tpl' sEditorType='comment'}
<form action="" method="POST" enctype="multipart/form-data" class="js-form-validate">
{hook run='form_add_talk_begin'}
{include file='forms/fields/form.field.hidden.security_key.tpl'}
{include 'forms/fields/form.field.hidden.security_key.tpl'}
{* Получатели *}
{include file='forms/fields/form.field.text.tpl'
{include 'forms/fields/form.field.text.tpl'
sFieldName = 'talk_users'
sFieldRules = 'required="true" rangetags="[1,99]"'
sFieldLabel = $aLang.talk_create_users
sFieldClasses = 'width-full autocomplete-users-sep'}
sFieldClasses = 'width-full autocomplete-users-sep'
sFieldNote = "<a href=\"#\" class=\"link-dotted\" data-type=\"modal-toggle\" data-modal-url=\"{router page='ajax/modal-friend-list'}\" data-param-selectable=\"true\">Выбрать из списка друзей</a>"}
{* Заголовок *}
{include file='forms/fields/form.field.text.tpl'
{include 'forms/fields/form.field.text.tpl'
sFieldName = 'talk_title'
sFieldRules = 'required="true" rangelength="[2,200]"'
sFieldLabel = $aLang.talk_create_title}
{* Текст сообщения *}
{include file='forms/fields/form.field.textarea.tpl'
{include 'forms/fields/form.field.textarea.tpl'
sFieldName = 'talk_text'
sFieldRules = 'required="true" rangelength="[2,3000]"'
sFieldLabel = $aLang.topic_create_text
@ -67,9 +41,8 @@
{hook run='form_add_talk_end'}
{* Кнопки *}
{* TODO: js *}
{include file='forms/fields/form.field.button.tpl' sFieldName='submit_talk_add' sFieldStyle='primary' sFieldText=$aLang.talk_create_submit}
{include file='forms/fields/form.field.button.tpl' sFieldName='submit_preview' sFieldType='button' sFieldText=$aLang.topic_create_submit_save sFieldAttributes='onclick="jQuery(\'#text_preview\').show(); ls.tools.textPreview(\'talk_text\',false); return false;"'}
{include 'forms/fields/form.field.button.tpl' sFieldName='submit_talk_add' sFieldStyle='primary' sFieldText=$aLang.talk_create_submit}
{include 'forms/fields/form.field.button.tpl' sFieldName='submit_preview' sFieldType='button' sFieldText=$aLang.topic_create_submit_save sFieldAttributes='onclick="jQuery(\'#text_preview\').show(); ls.tools.textPreview(\'talk_text\',false); return false;"'}
</form>
{hook run='talk_add_end'}

View file

@ -2,21 +2,8 @@
* Черный список
*}
{extends file='layouts/layout.user.messages.tpl'}
{extends 'layouts/layout.user.messages.tpl'}
{block name='layout_content'}
<form onsubmit="return ls.talk.addToBlackList();">
<p><label for="talk_blacklist_add">{$aLang.talk_balcklist_add_label}:</label>
<input type="text" id="talk_blacklist_add" name="add" class="input-text width-full autocomplete-users-sep" /></p>
</form>
<div id="black_list_block">
{if $aUsersBlacklist}
<ul class="list" id="black_list">
{foreach $aUsersBlacklist as $oUser}
<li id="blacklist_item_{$oUser->getId()}_area"><a href="{$oUser->getUserWebPath()}" class="user">{$oUser->getDisplayName()}</a> - <a href="#" id="blacklist_item_{$oUser->getId()}" class="delete">{$aLang.blog_delete}</a></li>
{/foreach}
</ul>
{/if}
</div>
{block 'layout_content'}
{include 'user_list_add.tpl' sUserListType='blacklist' iUserListId=$oUserCurrent->getId() aUserList=$aUsersBlacklist}
{/block}

View file

@ -5,11 +5,6 @@
{extends file='layouts/layout.user.messages.tpl'}
{block name='layout_content'}
{if $aTalks}
{include file='actions/ActionTalk/message_list.tpl'}
{else}
{include file='alert.tpl' mAlerts=$aLang.talk_favourite_empty sAlertStyle='empty'}
{/if}
{include file='actions/ActionTalk/message_list.tpl'}
{include file='pagination.tpl' aPaging=$aPaging}
{/block}

View file

@ -10,83 +10,9 @@
{block name='layout_content'}
{if $aTalks}
{**
* Поиск по личным сообщениям
*}
<div class="accordion">
<h3 class="accordion-header" onclick="jQuery('#block_talk_search_content').toggle(); return false;"><span class="link-dotted">{$aLang.talk_filter_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 file='forms/fields/form.field.text.tpl'
sFieldName = 'sender'
sFieldClasses = 'width-full autocomplete-users-sep'
sFieldLabel = $aLang.talk_filter_label_sender
sFieldNote = $aLang.talk_filter_notice_sender}
{* Искать в заголовке *}
{include file='forms/fields/form.field.text.tpl'
sFieldName = 'keyword'
sFieldLabel = $aLang.talk_filter_label_keyword
sFieldNote = $aLang.talk_filter_notice_keyword}
{* Искать в тексте *}
{include file='forms/fields/form.field.text.tpl'
sFieldName = 'keyword_text'
sFieldLabel = $aLang.talk_filter_label_keyword_text
sFieldNote = $aLang.talk_filter_notice_keyword}
{* Ограничения по дате *}
{* TODO: i18n *}
{include file='forms/fields/form.field.text.tpl'
sFieldName = 'start'
sFieldClasses = 'width-200 date-picker'
sFieldPlaceholder = 'From'
sFieldLabel = $aLang.talk_filter_label_date}
{include file='forms/fields/form.field.text.tpl'
sFieldName = 'end'
sFieldPlaceholder = 'To'
sFieldClasses = 'width-200 date-picker'}
{* Искать только в избранном *}
{include file='forms/fields/form.field.checkbox.tpl'
sFieldName = 'favourite'
sFieldLabel = $aLang.talk_filter_label_favourite}
{* Кнопки *}
{include file='forms/fields/form.field.button.tpl'
sFieldName = 'submit_talk_filter'
sFieldStyle = 'primary'
sFieldText = $aLang.talk_filter_submit}
{include file='forms/fields/form.field.button.tpl' sFieldType='reset' sFieldText=$aLang.talk_filter_submit_clear}
</form>
</div>
{**
* Список сообщений
*}
<form action="{router page='talk'}" method="post" id="form_talks_list">
<input type="hidden" name="security_ls_key" value="{$LIVESTREET_SECURITY_KEY}" />
<input type="hidden" name="submit_talk_read" id="form_talks_list_submit_read" value="" />
<input type="hidden" name="submit_talk_del" id="form_talks_list_submit_del" value="" />
<button type="submit" onclick="ls.talk.makeReadTalks()" class="button">{$aLang.talk_inbox_make_read}</button>
<button type="submit" onclick="if (confirm('{$aLang.talk_inbox_delete_confirm}')){ ls.talk.removeTalks() };" class="button">{$aLang.talk_inbox_delete}</button>
<br /><br />
{include file='actions/ActionTalk/message_list.tpl' bMessageListCheckboxes=true}
</form>
{else}
{include file='alert.tpl' mAlerts=$aLang.talk_inbox_empty sAlertStyle='empty'}
{include 'actions/ActionTalk/search.tpl'}
{/if}
{include file='actions/ActionTalk/message_list.tpl' bMessageListCheckboxes=true}
{include file='pagination.tpl' aPaging=$aPaging}
{/block}

View file

@ -5,111 +5,20 @@
{extends file='layouts/layout.user.messages.tpl'}
{block name='layout_content'}
{$oUser = $oTalk->getUser()}
<article class="topic topic-type-talk">
<header class="topic-header">
<h1 class="topic-title">{$oTalk->getTitle()|escape:'html'}</h1>
<div class="topic-info">
<a href="{$oUser->getUserWebPath()}"><img src="{$oUser->getProfileAvatarPath(48)}" width="32px" alt="avatar" class="avatar" /></a>
<p class="author-wrapper"><a href="{$oUser->getUserWebPath()}" class="author">{$oUser->getDisplayName()}</a>
<time datetime="{date_format date=$oTalk->getDate() format='c'}" pubdate>
{date_format date=$oTalk->getDate() format="j F Y, H:i"}
</time>
</p>
<p>
{$aLang.talk_speaker_title}:
{foreach $oTalk->getTalkUsers() as $oTalkUser}
{$oUserRecipient = $oTalkUser->getUser()}
{if $oUser->getId() != $oUserRecipient->getId()}
<a class="user {if $oTalkUser->getUserActive() != $TALK_USER_ACTIVE}inactive{/if}"
href="{$oUserRecipient->getUserWebPath()}"
{if $oTalkUser->getUserActive() != $TALK_USER_ACTIVE}title="{$aLang.talk_speaker_not_found}"{/if}>{$oUserRecipient->getDisplayName()}</a>{if ! $oTalkUser@last}, {/if}
{/if}
{/foreach}
{if $oTalk->getUserId()==$oUserCurrent->getId() or $oUserCurrent->isAdministrator()}
&nbsp;&nbsp;&nbsp;<a href="#" class="link-dotted" onclick="jQuery('#talk_recipients').toggle(); return false;">{$aLang.talk_speaker_edit}</a>
{/if}
</p>
</div>
</header>
{**
* Участники личного сообщения
*}
{if $oTalk->getUserId()==$oUserCurrent->getId() or $oUserCurrent->isAdministrator()}
<div class="talk-recipients" id="talk_recipients">
<h3>{$aLang.talk_speaker_title}</h3>
<form onsubmit="return ls.talk.addToTalk({$oTalk->getId()});">
<p><label for="talk_speaker_add">{$aLang.talk_speaker_add_label}:</label>
<input type="text" id="talk_speaker_add" name="add" class="input-text width-300 autocomplete-users-sep" /></p>
<input type="hidden" id="talk_id" value="{$oTalk->getId()}" />
</form>
<div id="speaker_list_block">
{if $oTalk->getTalkUsers()}
<ul class="list" id="speaker_list">
{foreach $oTalk->getTalkUsers() as $oTalkUser}
{if $oTalkUser->getUserId()!=$oUserCurrent->getId()}
{$oUser = $oTalkUser->getUser()}
{if $oTalkUser->getUserActive()!=$TALK_USER_DELETE_BY_AUTHOR}
<li id="speaker_item_{$oTalkUser->getUserId()}_area">
<a class="user {if $oTalkUser->getUserActive()!=$TALK_USER_ACTIVE}inactive{/if}" href="{$oUser->getUserWebPath()}">{$oUser->getDisplayName()}</a>
{if $oTalkUser->getUserActive()==$TALK_USER_ACTIVE}- <a href="#" id="speaker_item_{$oTalkUser->getUserId()}" class="delete">{$aLang.blog_delete}</a>{/if}
</li>
{/if}
{/if}
{/foreach}
</ul>
{/if}
</div>
</div>
{/if}
<div class="topic-content text">
{$oTalk->getText()}
</div>
<footer class="topic-footer">
<ul class="topic-info">
{* Избранное *}
<li class="topic-info-item topic-info-item-favourite">
{include 'favourite.tpl'
sFavouriteType = 'talk'
oFavouriteObject = $oTalk}
</li>
<li class="delete">
<a href="{router page='talk'}delete/{$oTalk->getId()}/?security_ls_key={$LIVESTREET_SECURITY_KEY}" onclick="return confirm('{$aLang.talk_inbox_delete_confirm}');" class="delete">{$aLang.delete}</a>
</li>
{hook run='talk_read_info_item' talk=$oTalk}
</ul>
</footer>
</article>
{* Сообщение *}
{include 'actions/ActionTalk/message_entry.tpl'}
{* Вывод комментариев к сообщению *}
{$oTalkUser = $oTalk->getTalkUser()}
{if ! $bNoComments}
{include
file='comments/comment_tree.tpl'
iTargetId=$oTalk->getId()
sTargetType='talk'
iCountComment=$oTalk->getCountComment()
sDateReadLast=$oTalkUser->getDateLast()
sNoticeCommentAdd=$aLang.topic_comment_add
bNoCommentFavourites=true}
{include 'comments/comment_tree.tpl'
iTargetId = $oTalk->getId()
sTargetType = 'talk'
iCountComment = $oTalk->getCountComment()
sDateReadLast = $oTalkUser->getDateLast()
sNoticeCommentAdd = $aLang.topic_comment_add
bNoCommentFavourites = true}
{else}
{include file='alert.tpl' mAlerts=$aLang.talk_deleted sAlertStyle='empty'}
{/if}

View file

@ -0,0 +1,19 @@
{extends 'entry.base.tpl'}
{block 'entry_options'}
{$oEntry = $oTalk}
{$sEntryType = 'talk'}
{/block}
{block 'entry' append}
{* Участники личного сообщения *}
{if $oTalk->getUserId() == $oUserCurrent->getId() or $oUserCurrent->isAdministrator()}
{include 'user_list_add.tpl'
sUserListType = 'message'
iUserListId = $oTalk->getId()
aUserList = $oTalk->getTalkUsers()
sUserListTitle = $aLang.talk_speaker_title
aUserListSmallExcludeRemove = [ $oUserCurrent->getId() ]
sUserItemInactiveTitle = $aLang.talk_speaker_not_found}
{/if}
{/block}

View file

@ -2,74 +2,83 @@
* Список сообщений
*}
<table class="table table-talk">
<thead>
<tr>
{if $bMessageListCheckboxes}
<th class="cell-checkbox"><input type="checkbox" name="" class="input-checkbox" onclick="ls.tools.checkAll('form_talks_checkbox', this, true);"></th>
{/if}
<th class="cell-favourite"></th>
<th class="cell-recipients">{$aLang.talk_inbox_target}</th>
<th class="cell-title">{$aLang.talk_inbox_title}</th>
<th class="cell-date ta-r">{$aLang.talk_inbox_date}</th>
</tr>
</thead>
<tbody>
{foreach $aTalks as $oTalk}
{$oTalkUserAuthor = $oTalk->getTalkUser()}
{if $aTalks}
{* Экшнбар *}
{include 'actionbar.tpl' aActionbarItems=[
[ 'icon' => 'icon-ok', 'classes' => 'js-temp', 'text' => $aLang.talk_inbox_make_read ],
[ 'icon' => 'icon-remove', 'classes' => 'js-temp', 'text' => $aLang.talk_inbox_delete ]
]}
{* Список сообщений *}
<table class="table table-talk">
<thead>
<tr>
{if $bMessageListCheckboxes}
<td class="cell-checkbox"><input type="checkbox" name="talk_select[{$oTalk->getId()}]" class="form_talks_checkbox input-checkbox" /></td>
<th class="cell-checkbox"><input type="checkbox" name="" class="input-checkbox" onclick="ls.tools.checkAll('form_talks_checkbox', this, true);"></th>
{/if}
<td class="cell-favourite">
{include 'favourite.tpl'
sFavouriteType = 'talk'
oFavouriteObject = $oTalk}
</td>
<td>
{strip}
{$aTalkUserOther = []}
{foreach $oTalk->getTalkUsers() as $oTalkUser}
{if $oTalkUser->getUserId() != $oUserCurrent->getId()}
{$aTalkUserOther[] = $oTalkUser}
{/if}
{/foreach}
{foreach $aTalkUserOther as $oTalkUser}
{$oUser = $oTalkUser->getUser()}
{if ! $oTalkUser@first}, {/if}<a href="{$oUser->getUserWebPath()}" class="user {if $oTalkUser->getUserActive()!=$TALK_USER_ACTIVE}inactive{/if}" {if $oTalkUser->getUserActive()!=$TALK_USER_ACTIVE}title="{$aLang.talk_speaker_not_found}"{/if}>{$oUser->getDisplayName()}</a>
{/foreach}
{/strip}
</td>
<td>
<h2>
<a href="{router page='talk'}read/{$oTalk->getId()}/">
{if $oTalkUserAuthor->getCommentCountNew() or ! $oTalkUserAuthor->getDateLast()}
<strong>{$oTalk->getTitle()|escape:'html'}</strong>
{else}
{$oTalk->getTitle()|escape:'html'}
{/if}
</a>
{if $oTalk->getCountComment()}
({$oTalk->getCountComment()}{if $oTalkUserAuthor->getCommentCountNew()} +{$oTalkUserAuthor->getCommentCountNew()}{/if})
{/if}
{if $oUserCurrent->getId()==$oTalk->getUserIdLast()}
&rarr;
{else}
&larr;
{/if}
</h2>
{$oTalk->getText()|strip_tags|truncate:120:"..."|escape}
</td>
<td class="cell-date ta-r">{date_format date=$oTalk->getDate() format="j F Y, H:i"}</td>
<th class="cell-favourite"></th>
<th class="cell-recipients">{$aLang.talk_inbox_target}</th>
<th class="cell-title">{$aLang.talk_inbox_title}</th>
<th class="cell-date ta-r">{$aLang.talk_inbox_date}</th>
</tr>
{/foreach}
</tbody>
</table>
</thead>
<tbody>
{foreach $aTalks as $oTalk}
{$oTalkUserAuthor = $oTalk->getTalkUser()}
<tr>
{if $bMessageListCheckboxes}
<td class="cell-checkbox"><input type="checkbox" name="talk_select[{$oTalk->getId()}]" class="form_talks_checkbox input-checkbox" /></td>
{/if}
<td class="cell-favourite">
{include 'favourite.tpl' sFavouriteType='talk' oFavouriteObject=$oTalk}
</td>
<td>
{strip}
{$aTalkUserOther = []}
{foreach $oTalk->getTalkUsers() as $oTalkUser}
{if $oTalkUser->getUserId() != $oUserCurrent->getId()}
{$aTalkUserOther[] = $oTalkUser}
{/if}
{/foreach}
{foreach $aTalkUserOther as $oTalkUser}
{$oUser = $oTalkUser->getUser()}
{if ! $oTalkUser@first}, {/if}<a href="{$oUser->getUserWebPath()}" class="user {if $oTalkUser->getUserActive()!=$TALK_USER_ACTIVE}inactive{/if}" {if $oTalkUser->getUserActive()!=$TALK_USER_ACTIVE}title="{$aLang.talk_speaker_not_found}"{/if}>{$oUser->getDisplayName()}</a>
{/foreach}
{/strip}
</td>
<td>
<h2>
<a href="{router page='talk'}read/{$oTalk->getId()}/">
{if $oTalkUserAuthor->getCommentCountNew() or ! $oTalkUserAuthor->getDateLast()}
<strong>{$oTalk->getTitle()|escape:'html'}</strong>
{else}
{$oTalk->getTitle()|escape:'html'}
{/if}
</a>
{if $oTalk->getCountComment()}
({$oTalk->getCountComment()}{if $oTalkUserAuthor->getCommentCountNew()} +{$oTalkUserAuthor->getCommentCountNew()}{/if})
{/if}
{if $oUserCurrent->getId()==$oTalk->getUserIdLast()}
&rarr;
{else}
&larr;
{/if}
</h2>
{$oTalk->getText()|strip_tags|truncate:120:"..."|escape}
</td>
<td class="cell-date ta-r">{date_format date=$oTalk->getDate() format="j F Y, H:i"}</td>
</tr>
{/foreach}
</tbody>
</table>
{else}
{include file='alert.tpl' mAlerts=$aLang.messages.alerts.empty sAlertStyle='empty'}
{/if}

View file

@ -0,0 +1,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></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 file='forms/fields/form.field.text.tpl'
sFieldName = 'sender'
sFieldLabel = $aLang.messages.search.fields.sender.label
sFieldNote = $aLang.messages.search.fields.sender.note
sFieldClasses = 'width-full autocomplete-users-sep'}
{* Искать в заголовке *}
{include file='forms/fields/form.field.text.tpl'
sFieldName = 'keyword'
sFieldLabel = $aLang.messages.search.fields.keyword.label}
{* Искать в тексте *}
{include file='forms/fields/form.field.text.tpl'
sFieldName = 'keyword_text'
sFieldLabel = $aLang.messages.search.fields.keyword_text.label}
{* Ограничения по дате *}
{include file='forms/fields/form.field.text.tpl'
sFieldName = 'start'
sFieldPlaceholder = $aLang.messages.search.fields.start.placeholder
sFieldLabel = $aLang.messages.search.fields.start.label
sFieldClasses = 'width-200 date-picker'}
{include file='forms/fields/form.field.text.tpl'
sFieldName = 'end'
sFieldPlaceholder = $aLang.messages.search.fields.end.placeholder
sFieldClasses = 'width-200 date-picker'}
{* Искать только в избранном *}
{include file='forms/fields/form.field.checkbox.tpl' sFieldName='favourite' sFieldLabel=$aLang.messages.search.fields.favourite.label}
{* Кнопки *}
{include file='forms/fields/form.field.button.tpl'
sFieldName = 'submit_talk_filter'
sFieldStyle = 'primary'
sFieldText = $aLang.search.find}
{include file='forms/fields/form.field.button.tpl' sFieldType='reset' sFieldText=$aLang.common.form_reset}
</form>
</div>

View file

@ -9,18 +9,6 @@
* @author Denis Shakhov <denis.shakhov@gmail.com>
*/
.topic-type-talk .topic-header { background: #f7f7f7; padding: 10px 15px 15px; border-top: 1px solid #dfdfdf; border-bottom: 1px solid #eee; }
.topic-type-talk .topic-header .topic-title { margin-bottom: 13px; font-size: 20px; }
.topic-type-talk { background: #fafafa; padding: 20px; margin-bottom: 0; }
.topic-type-talk .topic-header .topic-info { margin-bottom: 0; position: relative; min-height: 30px; padding-left: 40px; line-height: 14px; }
.topic-type-talk .topic-header .topic-info .avatar { position: absolute; top: 0; left: 0; }
.topic-type-talk .topic-header .topic-info .author-wrapper { margin-bottom: 4px; position: relative; top: -2px; }
.topic-type-talk .topic-header .topic-info .author-wrapper .author { font-weight: bold; margin-right: 15px; }
.topic-type-talk .topic-header .topic-info .recipient { margin-right: 10px; }
.topic-type-talk .topic-content { font-size: 13px; padding: 15px; background: #fafafa; margin-bottom: 1px; border-top: 1px solid #fff; }
.topic-type-talk .topic-footer .topic-info { border-radius: 0; background: #fafafa; }
.topic-type-talk .talk-recipients { padding: 15px; background: #fafafa; display: none; border-top: 1px solid #fff; border-bottom: 1px solid #eee; }
.topic-type-talk .talk-recipients h3 { font-size: 16px; font-weight: bold; margin-bottom: 10px; }
.message-user-list { background: #fafafa; padding: 20px; border-top: 1px solid #eee; }