Initial commit - developer skin

This commit is contained in:
Alexander Yakovlev 2017-01-08 18:05:51 +07:00
commit 59e2bf1df6
112 changed files with 2405 additions and 0 deletions

View File

@ -0,0 +1,21 @@
{**
* Админка
*
* @param boolean $availableAdminPlugin
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{lang 'admin.title'}
{/block}
{block 'layout_content'}
{component 'nav'
name = 'admin'
mods = 'stacked pills'
items = [
[ 'name' => 'user', 'url' => "{router page='admin/plugins'}?plugin=admin&action=activate&security_ls_key={$LIVESTREET_SECURITY_KEY}", 'text' => {lang 'admin.install_plugin_admin'}, is_enabled => $availableAdminPlugin ],
[ 'name' => 'plugins', 'url' => "{router page='admin'}plugins/", 'text' => {lang 'admin.items.plugins'} ]
]}
{/block}

View File

@ -0,0 +1,15 @@
{**
* Плагины
*
* @param array $plugins Список плагинов
*}
{extends 'layouts/layout.admin.tpl'}
{block 'layout_admin_page_title'}
{lang 'admin.items.plugins'}
{/block}
{block 'layout_content'}
{component 'admin' template='plugins' plugins=$plugins}
{/block}

View File

@ -0,0 +1,13 @@
{**
* Уведомление об успешной регистрации
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{$aLang.auth.registration.notices.success_activate}
{/block}
{block 'layout_content'}
<a href="{router page='/'}">{$aLang.common.site_go_main}</a>
{/block}

View File

@ -0,0 +1,15 @@
{**
* Просьба перейти по ссылке отправленной на емэйл для активации аккаунта
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{$aLang.auth.registration.confirm.title}
{/block}
{block 'layout_content'}
{$aLang.auth.registration.confirm.text}<br /><br />
<a href="{router page='/'}">{$aLang.common.site_go_main}</a>
{/block}

View File

@ -0,0 +1,13 @@
{**
* Регистрация через инвайт
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{$aLang.auth.invite.title}
{/block}
{block 'layout_content'}
{component 'auth' template='invite'}
{/block}

View File

@ -0,0 +1,13 @@
{**
* Страница входа
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{$aLang.auth.login.title}
{/block}
{block 'layout_content'}
{component 'auth' template='login' showExtra=true}
{/block}

View File

@ -0,0 +1,13 @@
{**
* Форма запроса повторной активации аккаунта
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{$aLang.auth.reactivation.title}
{/block}
{block 'layout_content'}
{component 'auth' template='reactivation'}
{/block}

View File

@ -0,0 +1,13 @@
{**
* Регистрация
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{$aLang.auth.registration.title}
{/block}
{block 'layout_content'}
{component 'auth' template='registration'}
{/block}

View File

@ -0,0 +1,13 @@
{**
* Форма восстановления пароля
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{$aLang.auth.reset.title}
{/block}
{block 'layout_content'}
{component 'auth' template='reset'}
{/block}

View File

@ -0,0 +1,14 @@
{**
* Восстановление пароля.
* Пароль отправлен на емэйл пользователя.
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{$aLang.auth.reset.title}
{/block}
{block 'layout_content'}
{$aLang.auth.reset.notices.success_send_password}
{/block}

View File

@ -0,0 +1,28 @@
{**
* Создание блога
*
* @param array $blogCategories Список категорий блогов
* @param object $blogEdit Блог, передается в случае если блог редактируется
*
* TODO: Вынести 'rangelength' в конфиг
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{if $sEvent == 'edit'}
{$sNav = 'blog.edit'}
{/if}
{/block}
{block 'layout_page_title'}
{if $sEvent == 'add'}
{$aLang.blog.add.title}
{else}
{$aLang.blog.admin.title}: <a href="{$blogEdit->getUrlFull()}">{$blogEdit->getTitle()|escape}</a>
{/if}
{/block}
{block 'layout_content'}
{component 'blog' template='add' blog=$blogEdit}
{/block}

View File

@ -0,0 +1,21 @@
{**
* Управление пользователями блога
*
* @param object $blogEdit Блог
* @param array $blogUsers Список пользователей блога
* @param array $blogUsersInvited Список приглашенных пользователей, передается в случае если блог закрытый
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{$sNav = 'blog.edit'}
{/block}
{block 'layout_page_title'}
{$aLang.blog.admin.title}: <a href="{$blogEdit->getUrlFull()}">{$blogEdit->getTitle()|escape}</a>
{/block}
{block 'layout_content'}
{component 'blog' template='admin' users=$blogUsers pagination=$paging}
{/block}

View File

@ -0,0 +1,40 @@
{**
* Блог
*
* @param object $blog Блог
* @param boolean $isPrivateBlog Закрытый блог или нет
* @param array $topics Список топиков
* @param array $paging Пагинация
* @param string $periodSelectCurrent
* @param string $periodSelectRoot
* @param array $blogUsers Читатели блога
* @param array $blogModerators Модераторы блога
* @param array $blogAdministrators Администраторы блога
* @param integer $countBlogUsers Кол-во читателей
* @param integer $countBlogModerators Кол-во модераторов
* @param integer $countBlogAdministrators Кол-во администраторов
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{$sNav = 'topics.sub'}
{/block}
{block 'layout_content_header'}
{component 'blog' blog=$blog blogs=$blogs}
{$smarty.block.parent}
{* Сообщение для забаненного пользователя *}
{if $blogUserCurrent and $blogUserCurrent->getIsBanned()}
{component 'alert' text=$aLang.blog.alerts.banned mods='error'}
{/if}
{* Список топиков *}
{if $isPrivateBlog}
{component 'alert' text=$aLang.blog.alerts.private mods='error'}
{else}
{component 'topic' template='list' topics=$topics paging=$paging}
{/if}
{/block}

View File

@ -0,0 +1,18 @@
{**
* Список топиков
*
* @param array $topics
* @param array $paging
* @param string $periodSelectCurrent
* @param string $periodSelectRoot
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{$sNav = 'topics'}
{/block}
{block 'layout_content'}
{component 'topic' template='list' topics=$topics paging=$paging}
{/block}

View File

@ -0,0 +1,42 @@
{**
* Топик
*
* @param object $topic
* @param array $comments
* @param integer $lastCommentId
* @param array $pagingComments
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_content'}
{* Топик *}
{component 'topic' template='topic-type' topic=$topic}
{* Комментарии *}
{component 'comment' template='comments'
comments = $comments
count = $topic->getCountComment()
classes = 'js-topic-comments'
attributes = [ 'id' => 'comments' ]
targetId = $topic->getId()
targetType = 'topic'
authorId = $topic->getUserId()
authorText = $aLang.topic.author
dateReadLast = $topic->getDateRead()
forbidAdd = $topic->getForbidComment()
forbidText = $aLang.topic.comments.notices.not_allowed
useSubscribe = true
isSubscribed = $topic->getSubscribeNewComment() && $topic->getSubscribeNewComment()->getStatus()
lastCommentId = $lastCommentId
pagination = [
total => +$pagingComments.iCountPage,
current => +$pagingComments.iCurrentPage,
url => "{$pagingComments.sGetParams}{($pagingComments.sGetParams) ? '&' : '?'}cmtpage=__page__"
]
commentParams = [
useVote => true,
useEdit => true,
useFavourite => true
]}
{/block}

View File

@ -0,0 +1,19 @@
{**
* Список пользователей которые подключены к блогу
*
* @param object $blog
* @param array $blogUsers
* @param integer $countBlogUsers
* @param array $paging
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{$aLang.blog.users.readers_all} ({$countBlogUsers}):
<a href="{$blog->getUrlFull()}">{$blog->getTitle()|escape}</a>
{/block}
{block 'layout_content'}
{component 'user' template='list' users=$blogUsers pagination=$paging}
{/block}

View File

@ -0,0 +1,38 @@
{**
* Список блогов
*
* @param array $blogs
* @param integer $searchCount
* @param array $paging
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{$sMenuHeadItemSelect = 'blogs'}
{/block}
{block 'layout_page_title'}
{$aLang.blog.blogs}
{/block}
{block 'layout_content'}
{component 'blog' template='search-form'}
{* Сортировка *}
{component 'sort' template='ajax'
classes = 'js-search-sort js-search-sort-menu'
text = $aLang.blog.sort.by_users
items = [
[ name => 'blog_count_user', text => $aLang.blog.sort.by_users ],
[ name => 'blog_count_topic', text => $aLang.blog.sort.by_topics ],
[ name => 'blog_title', text => $aLang.sort.by_title ]
]}
{* Список блогов *}
<div class="js-search-ajax-blog">
<h3 class="h3 js-blog-list-search-title" style="display: none"></h3>
{component 'blog' template='list' blogs=$blogs useMore=true}
</div>
{/block}

View File

@ -0,0 +1,28 @@
{**
* Создание/редактирование топика
*
* @parama object $topicEdit
* @parama string $topicType
* @parama array $blogsAllow
* @parama integer $blogId
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{if $sEvent == 'add'}
{$sNav = 'create'}
{/if}
{/block}
{block 'layout_page_title'}
{if $sEvent == 'add'}
{$aLang.topic.add.title.add}
{else}
{$aLang.topic.add.title.edit}
{/if}
{/block}
{block 'layout_content'}
{component 'topic' template='add-type' topic=$topicEdit type=$topicType blogs=$blogsAllow blogId=$blogId skipBlogs=$skipBlogs}
{/block}

View File

@ -0,0 +1,20 @@
{**
* Черновики
*
* @parama array $topics
* @parama array $paging
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{$sNav = 'create'}
{/block}
{block 'layout_page_title'}
{$aLang.topic.add.title.add}
{/block}
{block 'layout_content'}
{component 'topic' template='list' topics=$topics paging=$paging}
{/block}

View File

@ -0,0 +1,23 @@
{**
* Страница вывода ошибок
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{$layoutShowSystemMessages = false}
{/block}
{block 'layout_page_title'}
{if $aMsgError[0].title}
{$aLang.common.error.error}: <span>{$aMsgError[0].title}</span>
{/if}
{/block}
{block 'layout_content'}
<p>{$aMsgError[0].msg}</p>
<p>
<a href="javascript:history.go(-1);">{$aLang.common.site_history_back}</a>,
<a href="{router page='/'}">{$aLang.common.site_go_main}</a>
</p>
{/block}

View File

@ -0,0 +1,16 @@
{**
* Главная
*
* @parama array $topics
* @parama array $paging
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{$sNav = 'topics'}
{/block}
{block 'layout_content'}
{component 'topic' template='list' topics=$topics paging=$paging}
{/block}

View File

@ -0,0 +1,36 @@
{**
* Список всех пользователей
*
* @param array $users
* @param integer $searchCount
* @param array $countriesUsed
* @param array $paging
* @param array $usersStat
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{$aLang.user.users}
{/block}
{block 'layout_content'}
{component 'user' template='search-form'}
{* Сортировка *}
{component 'sort' template='ajax'
classes = 'js-search-sort js-search-sort-menu'
text = $aLang.sort.by_rating
items = [
[ name => 'user_rating', text => $aLang.sort.by_rating, order => 'asc' ],
[ name => 'user_login', text => $aLang.sort.by_login ],
[ name => 'user_date_register', text => $aLang.sort.by_date_registration ]
]}
{* Список пользователей *}
<div class="js-search-ajax-users">
<h3 class="h3 js-user-list-search-title" style="display: none"></h3>
{component 'user' template='list' users=$users useMore=true}
</div>
{/block}

View File

@ -0,0 +1,20 @@
{**
* Активность пользователя
*
* @param array $activityEvents
* @param integer $activityEventsAllCount
*}
{extends 'layouts/layout.user.tpl'}
{block 'layout_user_page_title'}
{lang name='activity.title'}
{/block}
{block 'layout_content' append}
{component 'activity'
events = $activityEvents
count = $activityEventsAllCount
targetId = $oUserProfile->getId()
classes = 'js-activity--user'}
{/block}

View File

@ -0,0 +1,17 @@
{**
* Список комментариев созданных пользователем
*
* @param array $comments
* @param array $paging
*}
{extends 'layouts/layout.user.tpl'}
{block 'layout_user_page_title'}
{lang name='user.publications.title'}
{/block}
{block 'layout_content' append}
{include 'navs/nav.user.created.tpl'}
{component 'comment' template='list' comments=$comments paging=$paging classes='js-topic-comments-list'}
{/block}

View File

@ -0,0 +1,17 @@
{**
* Список заметок созданных пользователем
*
* @param array $notesUsers
* @param array $paging
*}
{extends 'layouts/layout.user.tpl'}
{block 'layout_user_page_title'}
{lang 'user.publications.title'}
{/block}
{block 'layout_content' append}
{include 'navs/nav.user.created.tpl'}
{component 'user' template='list' users=$notesUsers pagination=$paging}
{/block}

View File

@ -0,0 +1,17 @@
{**
* Список топиков созданных пользователем
*
* @param array $topics
* @param array $paging
*}
{extends 'layouts/layout.user.tpl'}
{block 'layout_user_page_title'}
{lang name='user.publications.title'}
{/block}
{block 'layout_content' append}
{include 'navs/nav.user.created.tpl'}
{component 'topic' template='list' topics=$topics paging=$paging}
{/block}

View File

@ -0,0 +1,17 @@
{**
* Избранные комментарии пользователя
*
* @param array $comments
* @param array $paging
*}
{extends 'layouts/layout.user.tpl'}
{block 'layout_user_page_title'}
{lang name='user.favourites.title'}
{/block}
{block 'layout_content' append}
{include 'navs/nav.user.favourite.tpl'}
{component 'comment' template='list' comments=$comments paging=$paging classes='js-topic-comments-list'}
{/block}

View File

@ -0,0 +1,27 @@
{**
* Избранные топики пользователя
*
* @param array $topics
* @param array $paging
* @param array $activeFavouriteTag
*}
{extends 'layouts/layout.user.tpl'}
{block 'layout_user_page_title'}
{lang name='user.favourites.title'}
{/block}
{block 'layout_content' append}
{include 'navs/nav.user.favourite.tpl'}
{* Блок с тегами избранного *}
{if $oUserCurrent && $oUserCurrent->getId() == $oUserProfile->getId()}
{insert name='block' block='tagsPersonalTopic' params=[
'user' => $oUserProfile,
'activeTag' => $activeFavouriteTag
]}
{/if}
{component 'topic' template='list' topics=$topics paging=$paging}
{/block}

View File

@ -0,0 +1,16 @@
{**
* Список друзей
*
* @param array $friends
* @param array $paging
*}
{extends 'layouts/layout.user.tpl'}
{block 'layout_user_page_title'}
{lang name='user.friends.title'}
{/block}
{block 'layout_content' append}
{component 'user' template='list' users=$friends pagination=$paging}
{/block}

View File

@ -0,0 +1,25 @@
{**
* Профиль пользователя с информацией о нем
*
* @param array usersInvited
* @param object invitedByUser
* @param array blogsJoined
* @param array blogsModerate
* @param array blogsAdminister
* @param array blogsCreated
* @param array usersFriend
*}
{extends 'layouts/layout.user.tpl'}
{block 'layout_content' append}
{component 'user' template='info'
user = $oUserProfile
friends = $userFriends
usersInvited = $usersInvited
invitedByUser = $invitedByUser
blogsJoined = $blogsJoined
blogsAdminister = $blogsAdminister
blogsModerate = $blogsModerate
blogsCreated = $blogsCreated}
{/block}

View File

@ -0,0 +1,16 @@
{**
* Стена
*}
{extends 'layouts/layout.user.tpl'}
{block 'layout_user_page_title'}
{lang name='wall.title'}
{/block}
{block 'layout_content' append}
{insert name='block' block='wall' params=[
'classes' => 'js-wall-default',
'user_id' => $oUserProfile->getId()
]}
{/block}

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>{$aChannel.title}</title>
<link>{$aChannel.link}</link>
<atom:link href="{$PATH_WEB_CURRENT}/" rel="self" type="application/rss+xml" />
<description><![CDATA[{$aChannel.description}]]></description>
<language>{$aChannel.language}</language>
<managingEditor>{$aChannel.managingEditor} ({Router::GetPath('/')})</managingEditor>
<webMaster>{$aChannel.managingEditor} ({Router::GetPath('/')})</webMaster>
<copyright>{Router::GetPath('/')}</copyright>
<generator>{$aChannel.generator}</generator>
{foreach $aItems as $item}
<item>
<title>{$item.title|escape:'html'}</title>
<guid isPermaLink="true">{$item.guid}</guid>
<link>{$item.link}</link>
<dc:creator>{$item.author}</dc:creator>
<description><![CDATA[{$item.description}]]></description>
<pubDate>{date_format date=$item.pubDate format="r"}</pubDate>
<category>{$item.category|replace:',':'</category>
<category>'}</category>
</item>
{/foreach}
</channel>
</rss>

View File

@ -0,0 +1,32 @@
{**
* Страница с формой поиска
*
* @param array resultItems
* @param array paging
* @param array searchType
* @param array query
* @param array typeCounts
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{$aLang.search.search}
{/block}
{block 'layout_content'}
{component 'search' template='main' searchType=$searchType}
{include 'navs/nav.search.tpl'}
{if $resultItems}
{if $searchType == 'topics'}
{component 'topic' template='list' topics=$resultItems paging=$paging}
{elseif $searchType == 'comments'}
{component 'comment' template='list' comments=$resultItems paging=$paging}
{else}
{hook run='search_result' type=$searchType}
{/if}
{elseif $_aRequest.q}
{component 'blankslate' text=$aLang.search.alerts.empty}
{/if}
{/block}

View File

@ -0,0 +1,18 @@
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>{Config::Get('view.name')}</ShortName>
<Description>{$sHtmlTitle}</Description>
<Contact>{Config::Get('sys.mail.from_email')}</Contact>
<Url type="text/html" template="{router page='search/topics'}?q={literal}{searchTerms}{/literal}" />
<LongName>{$sHtmlDescription}</LongName>
<Image height="64" width="64" type="image/png">{Config::Get('path.skin.assets.web')}/images/favicons/opensearch.png</Image>
<Image height="16" width="16" type="image/vnd.microsoft.icon">{Config::Get('path.skin.assets.web')}/images/favicons/favicon.ico</Image>
<Developer>{Config::Get('view.name')} ({Router::GetPath('/')})</Developer>
<Attribution>
© «{Config::Get('view.name')}»
</Attribution>
<SyndicationRight>open</SyndicationRight>
<AdultContent>false</AdultContent>
<Language>ru-ru</Language>
<OutputEncoding>UTF-8</OutputEncoding>
<InputEncoding>UTF-8</InputEncoding>
</OpenSearchDescription>

View File

@ -0,0 +1,14 @@
{**
* Уведомления о смене емэйла
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{$layoutShowSystemMessages = false}
{$layoutShowSidebar = false}
{/block}
{block 'layout_content'}
{$sText}
{/block}

View File

@ -0,0 +1,9 @@
{**
* Настройки аккаунта (емэйл, пароль)
*}
{extends 'layouts/layout.user.settings.tpl'}
{block 'layout_content' append}
{component 'user' template='settings/account' user=$oUserCurrent}
{/block}

View File

@ -0,0 +1,9 @@
{**
* Управление инвайтами
*}
{extends 'layouts/layout.user.settings.tpl'}
{block 'layout_content' append}
{component 'user' template='settings/invite' user=$oUserCurrent}
{/block}

View File

@ -0,0 +1,9 @@
{**
* Основные настройки профиля
*}
{extends 'layouts/layout.user.settings.tpl'}
{block 'layout_content' append}
{component 'user' template='settings/profile' user=$oUserCurrent}
{/block}

View File

@ -0,0 +1,9 @@
{**
* Настройка уведомлений
*}
{extends 'layouts/layout.user.settings.tpl'}
{block 'layout_content' append}
{component 'user' template='settings/tuning' user=$oUserCurrent}
{/block}

View File

@ -0,0 +1,20 @@
{**
* Вся активность
*
* @param array $activityEvents
* @param integer $activityEventsAllCount
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{$sNav = 'activity'}
{/block}
{block 'layout_page_title'}
{$aLang.activity.title}
{/block}
{block 'layout_content'}
{component 'activity' events=$activityEvents count=$activityEventsAllCount classes='js-activity--all'}
{/block}

View File

@ -0,0 +1,20 @@
{**
* Настраиваемая, персональная страница активности
*
* @param array $activityEvents
* @param integer $activityEventsAllCount
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{$sNav = 'activity'}
{/block}
{block 'layout_page_title'}
{$aLang.activity.title}
{/block}
{block 'layout_content'}
{component 'activity' events=$activityEvents count=$activityEventsAllCount classes='js-activity--personal'}
{/block}

View File

@ -0,0 +1,18 @@
{**
* Поиск по тегам
*
* @param array $topics
* @param array $paging
* @param string $tag
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_page_title'}
{lang 'tags.search.title'}
{/block}
{block 'layout_content'}
{component 'tags' template='search-form'}
{component 'topic' template='list' topics=$topics paging=$paging}
{/block}

View File

@ -0,0 +1,9 @@
{**
* Создание личного сообщения
*}
{extends 'layouts/layout.user.messages.tpl'}
{block 'layout_content'}
{component 'talk' template='add'}
{/block}

View File

@ -0,0 +1,11 @@
{**
* Черный список
*
* @param array $talkBlacklistUsers
*}
{extends 'layouts/layout.user.messages.tpl'}
{block 'layout_content'}
{component 'talk' template='blacklist' users=$talkBlacklistUsers}
{/block}

View File

@ -0,0 +1,12 @@
{**
* Список избранных сообщений
*
* @param array $talks
* @param array $paging
*}
{extends 'layouts/layout.user.messages.tpl'}
{block 'layout_content'}
{component 'talk' template='list.tpl' talks=$talks paging=$paging}
{/block}

View File

@ -0,0 +1,13 @@
{**
* Список сообщений
*
* @param array $talks
* @param array $paging
*}
{extends 'layouts/layout.user.messages.tpl'}
{block 'layout_content'}
{component 'talk' template='search-form'}
{component 'talk' template='list' talks=$talks paging=$paging selectable=true}
{/block}

View File

@ -0,0 +1,17 @@
{**
* Диалог
*
* @param object $talk
* @param array $comments
* @param integer $lastCommentId
*}
{extends 'layouts/layout.user.messages.tpl'}
{block 'layout_content'}
{component 'talk'
talk = $talk
comments = $comments
lastCommentId = $lastCommentId
activeParticipantsCount = $activeParticipantsCount}
{/block}

View File

@ -0,0 +1,16 @@
{**
* Лента пользователя
*
* @param array $topics
* @param array $paging
*}
{extends 'layouts/layout.base.tpl'}
{block 'layout_options' append}
{$sNav = 'topics'}
{/block}
{block 'layout_content'}
{component 'topic' template='list' topics=$topics paging=$paging}
{/block}

77
assets/css/layout.css Normal file
View File

@ -0,0 +1,77 @@
/**
* Сетка
*
* @license GNU General Public License, version 2
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
* @author Denis Shakhov <denis.shakhov@gmail.com>
*/
/**
* Сетка
*/
.layout-container {
margin: 0 auto;
padding: 0 50px;
}
.layout-content {
background: #fff;
padding: 40px !important;
}
.layout-nav .ls-nav.ls-nav--main {
margin: 0 auto;
}
.layout-footer {
padding: 20px 0 50px;
color: #777;
position: relative;
}
.layout-container.layout-no-sidebar .layout-content {
width: 100%;
margin-right: 0;
}
.layout-sidebar {
padding-left: 10px !important;
}
.layout-sidebar .ls-block {
margin-bottom: 10px;
}
/* Responsive */
@media (max-width: 999px) {
.layout-content { width: 100% !important; margin-bottom: 30px; padding: 15px !important; }
.layout-sidebar { width: 100% !important; margin-bottom: 30px; padding: 0; }
.ls-toolbar {
display: none;
}
}
@media (max-width: 480px) {
.layout-container {
padding: 0;
}
}
/**
* Главное меню
*/
.layout-nav {
padding: 0 50px;
margin-bottom: 10px;
background: #222;
}
@media (max-width: 480px) {
.layout-nav {
padding: 0;
margin-bottom: 0;
}
}
/**
* Шапка сайта
*/
.ls-jumbotron {
background-image: url(../images/header.jpg);
}

37
assets/css/print.css Normal file
View File

@ -0,0 +1,37 @@
/**
* Стили для печати
*
* @license GNU General Public License, version 2
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
* @author Denis Shakhov <denis.shakhov@gmail.com>
*/
@media print {
@page { margin: 0.5cm; }
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; }
body, .text { font-size: 14pt; }
a, a:visited { text-decoration: underline; }
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
thead { display: table-header-group; }
tr, img { page-break-inside: avoid; }
img { max-width: 100% !important; }
h1 { font-size: 30pt !important; }
h4 { font-size: 26pt !important; }
h5 { font-size: 23pt !important; }
h6 { font-size: 20pt !important; }
p, h3, h4, h5 { orphans: 3; widows: 3; }
h3, h4, h5 { page-break-after: avoid; }
#header, #userbar, #nav, #sidebar, #footer, #comments, .toolbar, .nav-filter-wrapper,
.topic-footer, .stat-performance, .actions, .reply-header { display: none !important; }
#wrapper { -webkit-box-shadow: none; box-shadow: none; border: 0; padding: 0; }
#content { width: 100%; margin: 0; }
.topic { margin-bottom: 100px; }
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
assets/images/header.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

642
assets/js/init.js Normal file
View File

@ -0,0 +1,642 @@
/**
* Инициализации модулей
*
* @license GNU General Public License, version 2
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
* @author Denis Shakhov <denis.shakhov@gmail.com>
*/
jQuery(document).ready(function($){
// Хук начала инициализации javascript-составляющих шаблона
ls.hook.run('ls_template_init_start',[],window);
$('html').removeClass('no-js');
/**
* Иниц-ия модулей ядра
*/
ls.init({
production: false
});
ls.dev.init();
/**
* IE
*/
if ( $( 'html' ).hasClass( 'oldie' ) ) {
// Эмуляция placeholder'ов в IE
$( 'input[type=text], textarea' ).placeholder();
}
/**
* Form validate
* Валидатор нужно иниц-ть до иниц-ии аякс форм, чтобы избежать валидации аякс-полей после сабмита формы
*/
$('.js-form-validate').parsley();
/**
* Подтверждение удаления
*/
$('.js-confirm-remove-default').livequery(function () {
$(this).lsConfirm({
message: ls.lang.get('common.remove_confirm')
});
});
/**
* Notification
*/
ls.notification.init();
/**
* Actionbar
*/
$('.js-user-list-modal-actionbar').livequery(function () {
$( this ).lsActionbarItemSelect({
selectors: {
target_item: '.js-user-list-select .js-user-list-small-item'
}
});
});
/**
* Modals
*/
$('.js-modal-default').lsModal();
$('.js-modal-toggle-default').lsModalToggle();
/**
* Details
*/
$('.js-details-default').lsDetails();
/**
* Dropdowns
*/
$('.js-dropdown-default').livequery(function () {
$(this).lsDropdown();
});
/**
* Fields
*/
$('.js-field-geo-default').lsFieldGeo({
urls: {
regions: aRouter.ajax + 'geo/get/regions/',
cities: aRouter.ajax + 'geo/get/cities/'
}
});
$('.js-field-date-default').livequery(function () {
$(this).lsFieldDate({
language: LANGUAGE
});
});
$('.js-field-time-default').livequery(function () {
$(this).lsFieldTime();
});
$('[data-type=captcha]').livequery(function () {
$(this).lsCaptcha();
});
$('[data-type=recaptcha]').livequery(function () {
$(this).lsReCaptcha({
key: ls.registry.get('recaptcha.site_key')
});
});
/**
* Alerts
*/
$('.js-alert').lsAlert();
/**
* Tooltips
*/
$('.js-tooltip').lsTooltip();
$('.js-popover-default').lsTooltip({
useAttrTitle: false,
trigger: 'click',
classes: 'tooltip-light'
});
if (ls.registry.get('block_stream_show_tip')) {
$('.js-title-comment, .js-title-topic').livequery(function () {
$(this).lsTooltip({
position: {
my: "right center",
at: "left left"
},
show: {
delay: 1500
}
});
});
}
/**
* Autocomplete
*/
$( '.autocomplete-tags' ).lsAutocomplete({
multiple: false,
urls: {
load: aRouter.ajax + 'autocompleter/tag/'
}
});
$( '.autocomplete-tags-sep' ).lsAutocomplete({
multiple: true,
urls: {
load: aRouter.ajax + 'autocompleter/tag/'
}
});
$( '.autocomplete-users' ).lsAutocomplete({
multiple: false,
urls: {
load: aRouter.ajax + 'autocompleter/user/'
}
});
$( '.autocomplete-users-sep' ).lsAutocomplete({
multiple: true,
urls: {
load: aRouter.ajax + 'autocompleter/user/'
}
});
$('.autocomplete-property-tags').each(function(k,v){
$(v).lsAutocomplete({
multiple: false,
urls: {
load: aRouter.ajax + 'property/tags/autocompleter/'
},
params: {
property_id: $(v).data('propertyId')
}
});
});
$('.autocomplete-property-tags-sep').each(function(k,v){
$(v).lsAutocomplete({
multiple: true,
urls: {
load: aRouter.ajax + 'property/tags/autocompleter/'
},
params: {
property_id: $(v).data('propertyId')
}
});
});
/**
* Code highlight
*/
$( 'pre code' ).lsHighlighter();
/**
* Blocks
*/
$( '.js-block-default' ).lsBlock();
/**
* Активность
*/
$('.js-activity--all').lsActivity({ urls: { more: aRouter.stream + 'get_more_all' } });
$('.js-activity--user').lsActivity({ urls: { more: aRouter.stream + 'get_more_user' } });
$('.js-activity--personal').lsActivity({
urls: {
more: aRouter.stream + 'get_more_personal'
},
create: function() {
// Настройки активности
$('.js-activity-settings').lsActivitySettings({
urls: {
toggle_type: aRouter.stream + 'switchEventType'
}
});
// Добавление пользователей в персональную активность
$('.js-activity-users').lsUserListAdd({
urls: {
add: aRouter.stream + 'ajaxadduser',
remove: aRouter.stream + 'ajaxremoveuser',
list: aRouter.ajax + 'modal-friend-list'
}
});
}
});
/**
* Лента
*/
// Блоги
$('.js-feed-blogs').lsFeedBlogs({
urls: {
subscribe: aRouter.feed + 'subscribe',
unsubscribe: aRouter.feed + 'unsubscribe'
}
});
// Добавление пользователей в свою ленту
$('.js-feed-users').lsUserListAdd({
urls: {
add: aRouter.feed + 'ajaxadduser',
remove: aRouter.feed + 'unsubscribe',
list: aRouter.ajax + 'modal-friend-list'
}
});
/**
* Auth
*/
ls.auth.init();
// Поиск
$( '.js-search-ajax-users' ).lsSearchAjax({
urls: {
search: aRouter.people + 'ajax-search/'
},
i18n: {
title: ls.lang.get( 'user.search.result_title' )
},
selectors: {
list: '.js-more-users-container',
more: '.js-more-search',
title: '@.js-user-list-search-title'
},
filters : [
{
type: 'text',
name: 'sText',
selector: '.js-search-text-main'
},
{
type: 'radio',
name: 'sex',
selector: '.js-search-ajax-user-sex'
},
{
type: 'checkbox',
name: 'is_online',
selector: '.js-search-ajax-user-online'
},
{
type: 'sort',
name: 'sort_by',
selector: '.js-search-sort-menu li'
},
{
type: 'select',
name: 'country',
selector: '.js-field-geo-country'
},
{
type: 'select',
name: 'region',
selector: '.js-field-geo-region'
},
{
type: 'select',
name: 'city',
selector: '.js-field-geo-city'
}
],
afterupdate: function ( event, data ) {
data.context.getElement( 'more' ).lsMore( 'option', 'params.next_page', 2 );
}
});
// Добавление пользователя в свою активность
$('.js-user-follow').lsUserFollow({
urls: {
follow: aRouter['stream'] + 'ajaxadduser/',
unfollow: aRouter['stream'] + 'ajaxremoveuser/'
}
});
// Добавление пользователя в друзья
$('.js-user-friend').lsUserFriend({
urls: {
add: aRouter.profile + 'ajaxfriendadd/',
remove: aRouter.profile + 'ajaxfrienddelete/',
accept: aRouter.profile + 'ajaxfriendaccept/',
modal: aRouter.profile + 'ajax-modal-add-friend'
}
});
// Жалоба
$('.js-user-report').lsReport({
urls: {
modal: aRouter.profile + 'ajax-modal-complaint',
add: aRouter.profile + 'ajax-complaint-add'
}
});
// Управление кастомными полями
$( '.js-user-fields' ).lsUserFields();
// Фото пользователя
$( '.js-user-photo' ).lsPhoto({
urls: {
upload: aRouter.settings + 'ajax-upload-photo',
remove: aRouter.settings + 'ajax-remove-photo',
crop_photo: aRouter.settings + 'ajax-modal-crop-photo',
crop_avatar: aRouter.settings + 'ajax-modal-crop-avatar',
save_photo: aRouter.settings + 'ajax-crop-photo',
save_avatar: aRouter.settings + 'ajax-change-avatar',
cancel_photo: aRouter.settings + 'ajax-crop-cancel-photo'
},
changeavatar: function ( event, _this, avatars ) {
$( '.js-user-profile-avatar, .js-wall-entry[data-user-id=' + _this.option( 'params.user_id' ) + '] .comment-avatar img' ).attr( 'src', avatars[ '64crop' ] + '?' + Math.random() );
$( '.nav-item--userbar-username img' ).attr( 'src', avatars[ '24crop' ] + '?' + Math.random() );
}
});
/**
* Talk
*/
$('.js-talk-list').lsTalkList();
// Выбор получателей в форме добавления
$('.js-talk-add-user-choose').lsUserFieldChoose({
urls: {
modal: aRouter.ajax + 'modal-friend-list'
}
});
// Форма поиска
$('.js-talk-search-form').lsDetails();
// Добавление диалога в избранное
$('.js-favourite-talk').lsFavourite({
urls: {
toggle: aRouter['ajax'] + 'favourite/talk/'
}
});
// Добавление в избранное на странице диалога
$('.js-talk-message-root-favourite').on('click', function (event) {
if (event.target == event.currentTarget) {
$(this).find('.js-favourite-talk').lsFavourite('toggle');
}
});
// Комментарии
$('.js-comments-talk').lsComments({
urls: {
add: aRouter['talk'] + 'ajaxaddcomment/',
load: aRouter['talk'] + 'ajaxresponsecomment/'
}
});
// Управление участниками личного сообщения
$('.js-message-users').lsTalkUsers();
// Черный список
$('.js-user-list-add-blacklist').lsUserListAdd({
urls: {
add: aRouter['talk'] + 'ajaxaddtoblacklist/',
remove: aRouter['talk'] + 'ajaxdeletefromblacklist/',
list: aRouter.ajax + 'modal-friend-list'
}
});
/**
* Poll
*/
$('.js-poll').lsPoll();
$('.js-poll-manage').lsPollManage({
max: ls.registry.get('poll_max_answers')
});
/**
* User Note
*/
$('.js-user-note').livequery(function () {
$(this).lsNote({
urls: {
save: aRouter['profile'] + 'ajax-note-save/',
remove: aRouter['profile'] + 'ajax-note-remove/'
}
});
});
/**
* Editor
*/
$( '.js-editor-default' ).lsEditor();
/**
* Blog
*/
// Форма добавления блога
$('.js-blog-add').lsBlogAdd();
// Приглашение пользователей в блог
$('.js-user-list-add-blog-invite').lsBlogInvites();
// Вступить/покинуть блог (список блогов)
$( '.js-blog-join' ).livequery(function() {
$( this ).lsBlogJoin({
urls: {
toggle: aRouter.blog + 'ajaxblogjoin'
},
classes: {
loading: ls.options.classes.states.loading
}
});
});
// Вступить/покинуть блог (страница блога)
$( '.js-blog-profile-join' ).lsBlogJoin({
urls: {
toggle: aRouter.blog + 'ajaxblogjoin'
},
selectors: {
text: 'a'
},
classes: {
active: 'active'
}
});
// Поиск
$( '.js-search-ajax-blog' ).lsSearchAjax({
urls: {
search: aRouter.blogs + 'ajax-search/'
},
i18n: {
title: ls.lang.get( 'blog.search.result_title' )
},
selectors: {
list: '.js-more-blogs-container',
more: '.js-more-search',
title: '@.js-blog-list-search-title'
},
filters : [
{
type: 'text',
name: 'sText',
selector: '.js-search-text-main'
},
{
type: 'radio',
name: 'type',
selector: '.js-search-ajax-blog-type'
},
{
type: 'radio',
name: 'relation',
selector: '.js-search-ajax-blog-relation'
},
{
type: 'list',
name: 'category',
selector: '#js-search-ajax-blog-category li'
},
{
type: 'sort',
name: 'sort_by',
selector: '.js-search-sort-menu li'
}
],
afterupdate: function ( event, data ) {
data.context.getElement( 'more' ).lsMore( 'option', 'params.next_page', 2 );
}
});
// Аватар блога
$( '.js-blog-avatar' ).lsPhoto({
urls: {
upload: aRouter.blog + 'ajax/upload-avatar',
remove: aRouter.blog + 'ajax/remove-avatar',
crop_photo: aRouter.blog + 'ajax/modal-crop-avatar',
save_photo: aRouter.blog + 'ajax/crop-avatar',
cancel_photo: aRouter.blog + 'ajax/crop-cancel-avatar'
},
use_avatar: false,
crop_photo: {
minSize: [ 100, 100 ],
usePreview: true
}
});
/**
* Topic
*/
$( '.js-topic' ).lsTopic();
// Форма добавления
$( '#topic-add-form' ).lsTopicAdd({
max_blog_count: ls.registry.get('topic_max_blog_count')
});
// Пагинация
$('.js-pagination-topics').lsPagination({
hash: {
next: 'goTopic=first',
prev: 'goTopic=last'
}
});
// Комментарии
$('.js-topic-comments, .js-topic-comments-list').lsComments({
urls: {
add: aRouter['blog'] + 'ajaxaddcomment/',
load: aRouter['blog'] + 'ajaxresponsecomment/'
},
show_form: ls.registry.get('comment_show_form')
});
// Кнопка обновления комментариев
// TODO: Fix init
$('.js-comments-toolbar').lsCommentsToolbar({
comments: $('.js-topic-comments, .js-comments-talk')
});
/**
* Теги
*/
// Облако тегов избранного
$('.js-tags-favourite-cloud').lsDetails();
// Поиск по тегам
$('.js-tag-search-form').submit(function() {
var val = $(this).find('.js-tag-search').val();
if ( val ) {
window.location = aRouter['tag'] + encodeURIComponent( val ) + '/';
}
return false;
});
/**
* Стена
*/
$('.js-wall-default').lsWall({
urls: {
add: aRouter.ajax + 'wall/add/',
remove: aRouter.ajax + 'wall/remove/',
load: aRouter.ajax + 'wall/load/',
load_comments: aRouter.ajax + 'wall/load-comments/'
}
});
/**
* Лайтбокс
*/
$('a.js-lbx').lsLightbox({ width:"100%", height:"100%" });
/**
* Toolbar
*/
$('.js-toolbar-default').lsToolbar({
target: '.layout-wrapper',
offsetX: 10
});
$('.js-toolbar-scrollup').lsToolbarScrollUp();
$('.js-toolbar-topics').lsToolbarTopics();
/**
* Fotorama
*/
$( '.fotorama' ).livequery(function() {
$( this ).lsSlider();
});
// Хук конца инициализации javascript-составляющих шаблона
ls.hook.run('ls_template_init_end',[],window);
});

0
components/.gitkeep Normal file
View File

View File

@ -0,0 +1,15 @@
{**
* Приглашение в закрытый блог
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.blog_invite_new.text' params=[
'user_url' => $oUserFrom->getUserWebPath(),
'user_name' => $oUserFrom->getDisplayName(),
'blog_url' => $oBlog->getUrlFull(),
'blog_name' => $oBlog->getTitle()|escape,
'invite_url' => $sPath
]}
{/block}

View File

@ -0,0 +1,16 @@
{**
* Оповещение о новом комментарии в топике
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.comment_new.text' params=[
'user_url' => $oUserComment->getUserWebPath(),
'user_name' => $oUserComment->getDisplayName(),
'topic_name' => $oTopic->getTitle()|escape,
'comment_url' => "{if Config::Get('module.comment.nested_per_page')}{router page='comments'}{else}{$oTopic->getUrl()}#comment{/if}{$oComment->getId()}",
'comment_text' => "{if Config::Get('sys.mail.include_comment')}{lang name='emails.common.comment_text'}:<br><em>{$oComment->getText()}</em>{/if}",
'unsubscribe' => "{if $sSubscribeKey}<br><br>{lang name='emails.comment_new.unsubscribe' unsubscribe_url="{router page='subscribe'}unsubscribe/{$sSubscribeKey}/"}{/if}"
]}
{/block}

View File

@ -0,0 +1,16 @@
{**
* Оповещение об ответе на комментарий
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.comment_reply.text' params=[
'user_url' => $oUserComment->getUserWebPath(),
'user_name' => $oUserComment->getDisplayName(),
'topic_name' => $oTopic->getTitle()|escape,
'comment_url' => "{if Config::Get('module.comment.nested_per_page')}{router page='comments'}{else}{$oTopic->getUrl()}#comment{/if}{$oComment->getId()}",
'comment_text' => "{if Config::Get('sys.mail.include_comment')}{lang name='emails.common.comment_text'}:<br><em>{$oComment->getText()}</em>{/if}"
]}
{/block}

17
emails/email.invite.tpl Normal file
View File

@ -0,0 +1,17 @@
{**
* Приглашение на сайт
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.invite.text' params=[
'user_url' => $oUserFrom->getUserWebPath(),
'user_name' => $oUserFrom->getDisplayName(),
'website_url' => Router::GetPath('/'),
'website_name' => Config::Get('view.name'),
'invite_code' => $sRefCode,
'ref_link' => $sRefLink,
'login_url' => {router page='auth/login'}
]}
{/block}

View File

@ -0,0 +1,13 @@
{**
* Повторная активация
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.reactivation.text' params=[
'website_url' => Router::GetPath('/'),
'website_name' => Config::Get('view.name'),
'activation_url' => "{router page='auth'}activate/{$oUser->getActivateKey()}/"
]}
{/block}

View File

@ -0,0 +1,14 @@
{**
* Регистрация
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.registration.text' params=[
'website_url' => Router::GetPath('/'),
'website_name' => Config::Get('view.name'),
'user_name' => $oUser->getLogin(),
'user_password' => $sPassword
]}
{/block}

View File

@ -0,0 +1,15 @@
{**
* Подтверждение регистрации
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.registration_activate.text' params=[
'website_url' => Router::GetPath('/'),
'website_name' => Config::Get('view.name'),
'user_name' => $oUser->getLogin(),
'user_password' => $sPassword,
'activation_url' => "{router page='auth'}activate/{$oUser->getActivateKey()}/"
]}
{/block}

View File

@ -0,0 +1,13 @@
{**
* Смена пароля
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.reminder_code.text' params=[
'website_url' => Router::GetPath('/'),
'website_name' => Config::Get('view.name'),
'recover_url' => "{router page='auth'}password-reset/{$oReminder->getCode()}/"
]}
{/block}

View File

@ -0,0 +1,11 @@
{**
* Новый пароль
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.reminder_password.text' params=[
'password' => $sNewPassword
]}
{/block}

View File

@ -0,0 +1,15 @@
{**
* Оповещение о новом сообщении в диалоге
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.talk_comment_new.text' params=[
'user_url' => $oUserFrom->getUserWebPath(),
'user_name' => $oUserFrom->getDisplayName(),
'talk_name' => $oTalk->getTitle()|escape,
'message_url' => "{router page='talk'}read/{$oTalk->getId()}/#comment{$oTalkComment->getId()}",
'message_text' => "{if Config::Get('sys.mail.include_comment')}{lang name='emails.common.comment_text'}:<br><em>{$oTalkComment->getText()}</em>{/if}"
]}
{/block}

15
emails/email.talk_new.tpl Normal file
View File

@ -0,0 +1,15 @@
{**
* Оповещение о новом сообщении
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.talk_new.text' params=[
'user_url' => $oUserFrom->getUserWebPath(),
'user_name' => $oUserFrom->getDisplayName(),
'talk_name' => $oTalk->getTitle()|escape,
'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

@ -0,0 +1,15 @@
{**
* Оповещение о новом топике
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.topic_new.text' params=[
'user_url' => $oUserTopic->getUserWebPath(),
'user_name' => $oUserTopic->getDisplayName(),
'blog_name' => $oBlog->getTitle()|escape,
'topic_url' => $oTopic->getUrl(),
'topic_name' => $oTopic->getTitle()|escape
]}
{/block}

View File

@ -0,0 +1,15 @@
{**
* Смена почты
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.user_changemail.text' params=[
'user_url' => $oUser->getUserWebPath(),
'user_name' => $oUser->getDisplayName(),
'mail_old' => $oChangemail->getMailFrom(),
'mail_new' => $oChangemail->getMailTo(),
'change_url' => "{router page='profile'}changemail/confirm-from/{$oChangemail->getCodeFrom()}/"
]}
{/block}

View File

@ -0,0 +1,15 @@
{**
* Смена почты
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.user_changemail.text' params=[
'user_url' => $oUser->getUserWebPath(),
'user_name' => $oUser->getDisplayName(),
'mail_old' => $oChangemail->getMailFrom(),
'mail_new' => $oChangemail->getMailTo(),
'change_url' => "{router page='profile'}changemail/confirm-to/{$oChangemail->getCodeTo()}/"
]}
{/block}

View File

@ -0,0 +1,16 @@
{**
* Жалоба
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.user_complaint.text' params=[
'user_url' => $oUserFrom->getUserWebPath(),
'user_name' => $oUserFrom->getDisplayName(),
'user_target_url' => $oUserTarget->getUserWebPath(),
'user_target_name' => $oUserTarget->getDisplayName(),
'complaint_title' => $oComplaint->getTypeTitle(),
'complaint_text' => "{if $oComplaint->getText()}{lang name='emails.user_changemail.more'}:<br>{$oComplaint->getText()}{/if}"
]}
{/block}

View File

@ -0,0 +1,14 @@
{**
* Заявка в друзья
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.user_friend_new.text' params=[
'user_url' => $oUserFrom->getUserWebPath(),
'user_name' => $oUserFrom->getDisplayName(),
'text' => $sText,
'url' => $sPath
]}
{/block}

14
emails/email.wall.new.tpl Normal file
View File

@ -0,0 +1,14 @@
{**
* Новое сообщение на стене
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.wall_new.text' params=[
'user_url' => $oUser->getUserWebPath(),
'user_name' => $oUser->getDisplayName(),
'wall_url' => "{$oUserWall->getUserWebPath()}wall/",
'message_text' => $oWall->getText()
]}
{/block}

View File

@ -0,0 +1,15 @@
{**
* Ответ на сообщение на стене
*}
{extends 'Component@email.email'}
{block 'content'}
{lang name='emails.wall_reply.text' params=[
'user_url' => $oUser->getUserWebPath(),
'user_name' => $oUser->getDisplayName(),
'wall_url' => "{$oUserWall->getUserWebPath()}wall/",
'message_parent_text' => $oWallParent->getText(),
'message_text' => $oWall->getText()
]}
{/block}

11
layouts/layout.admin.tpl Normal file
View File

@ -0,0 +1,11 @@
{**
* Базовый шаблон админки
*}
{extends './layout.base.tpl'}
{block 'layout_page_title'}
<a href="{router page='admin'}">{lang 'admin.title'}</a>
<span>&raquo;</span>
{block 'layout_admin_page_title'}{/block}
{/block}

181
layouts/layout.base.tpl Normal file
View File

@ -0,0 +1,181 @@
{**
* Основной лэйаут
*
* @param boolean $layoutShowSidebar Показывать сайдбар или нет, сайдбар не будет выводится если он не содержит блоков
* @param string $layoutNavContent Название навигации
* @param string $layoutNavContentPath Кастомный путь до навигации контента
* @param string $layoutShowSystemMessages Показывать системные уведомления или нет
*}
{extends 'Component@layout.layout'}
{block 'layout_options' append}
{$layoutShowSidebar = $layoutShowSidebar|default:true}
{$layoutShowSystemMessages = $layoutShowSystemMessages|default:true}
{/block}
{block 'layout_head_styles' append}
<link href='//fonts.googleapis.com/css?family=Open+Sans:300,400,700&amp;subset=latin,cyrillic' rel='stylesheet' type='text/css'>
{/block}
{block 'layout_head' append}
{* Получаем блоки для вывода в сайдбаре *}
{if $layoutShowSidebar}
{show_blocks group='right' assign=layoutSidebarBlocks}
{$layoutSidebarBlocks = trim( $layoutSidebarBlocks )}
{$layoutShowSidebar = !!$layoutSidebarBlocks}
{/if}
<script>
ls.lang.load({json var = $aLangJs});
ls.registry.set({json var = $aVarsJs});
</script>
{**
* Тип сетки сайта
*}
{if {Config::Get('view.grid.type')} == 'fluid'}
<style>
.layout-userbar,
.layout-nav .ls-nav--main,
.layout-header .ls-jumbotron-inner,
.layout-container {
min-width: {Config::Get('view.grid.fluid_min_width')};
max-width: {Config::Get('view.grid.fluid_max_width')};
}
</style>
{else}
<style>
.layout-userbar,
.layout-nav .ls-nav--main,
.layout-header .ls-jumbotron-inner,
.layout-container { width: {Config::Get('view.grid.fixed_width')}; }
</style>
{/if}
{/block}
{block 'layout_body'}
{**
* Юзербар
*}
{component 'userbar'}
{**
* Шапка
*}
{if Config::Get( 'view.layout_show_banner' )}
{component 'jumbotron'
title = Config::Get('view.name')
subtitle = Config::Get('view.description')
titleUrl = {router page='/'}
classes = 'layout-header'}
{/if}
{**
* Основная навигация
*}
<nav class="ls-grid-row layout-nav">
{include 'navs/nav.main.tpl'}
</nav>
{**
* Основной контэйнер
*}
<div id="container" class="ls-grid-row layout-container {hook run='container_class'} {if $layoutShowSidebar}layout-has-sidebar{else}layout-no-sidebar{/if}">
{* Вспомогательный контейнер-обертка *}
<div class="ls-grid-row layout-wrapper" class="{hook run='wrapper_class'}">
{**
* Контент
*}
<div class="ls-grid-col ls-grid-col-8 layout-content"
role="main"
{if $sMenuItemSelect == 'profile'}itemscope itemtype="http://data-vocabulary.org/Person"{/if}>
{hook run='content_begin'}
{* Основной заголовок страницы *}
{block 'layout_page_title' hide}
<h2 class="page-header">
{$smarty.block.child}
</h2>
{/block}
{block 'layout_content_header'}
{* Навигация *}
{if $sNav}
{if in_array($sNav, $aMenuContainers)}
{$_navContent = $aMenuFetch.$sNav}
{else}
{include "{$sNavPath}navs/nav.$sNav.tpl" assign=_navContent}
{/if}
{* Проверяем наличие вывода на случай если меню с одним пунктом автоматом скрывается *}
{if $_navContent|strip:''}
<div class="ls-nav-group">
{$_navContent}
</div>
{/if}
{/if}
{* Системные сообщения *}
{if $layoutShowSystemMessages}
{if $aMsgError}
{component 'alert' text=$aMsgError mods='error' close=true}
{/if}
{if $aMsgNotice}
{component 'alert' text=$aMsgNotice close=true}
{/if}
{/if}
{/block}
{block 'layout_content'}{/block}
{hook run='content_end'}
</div>
{**
* Сайдбар
* Показываем сайдбар
*}
{if $layoutShowSidebar}
<aside class="ls-grid-col ls-grid-col-4 layout-sidebar" role="complementary">
{$layoutSidebarBlocks}
</aside>
{/if}
</div> {* /wrapper *}
{* Подвал *}
<footer class="ls-grid-row layout-footer">
{block 'layout_footer'}
{hook run='footer_begin'}
{hook run='copyright'}
{hook run='footer_end'}
{/block}
</footer>
</div> {* /container *}
{* Подключение модальных окон *}
{if $oUserCurrent}
{component 'tags-personal' template='modal'}
{else}
{component 'auth' template='modal'}
{/if}
{**
* Тулбар
* Добавление кнопок в тулбар
*}
{add_block group='toolbar' name='component@admin.toolbar.admin' priority=100}
{add_block group='toolbar' name='component@toolbar-scrollup.toolbar.scrollup' priority=-100}
{* Подключение тулбара *}
{component 'toolbar' classes='js-toolbar-default' items={show_blocks group='toolbar'}}
{/block}

View File

@ -0,0 +1,13 @@
{**
* Базовый шаблон личных сообщений
*}
{extends './layout.user.tpl'}
{block 'layout_options' append}
{$sNav = 'messages'}
{/block}
{block 'layout_user_page_title'}
{$aLang.talk.title}
{/block}

View File

@ -0,0 +1,13 @@
{**
* Базовый шаблон настроек пользователя
*}
{extends './layout.user.tpl'}
{block 'layout_options' append}
{$sNav = 'settings'}
{/block}
{block 'layout_user_page_title'}
{$aLang.user.settings.title}
{/block}

13
layouts/layout.user.tpl Normal file
View File

@ -0,0 +1,13 @@
{**
* Базовый шаблон профиля пользователя
*}
{extends './layout.base.tpl'}
{block 'layout_content_header' prepend}
{component 'user' template='header' user=$oUserProfile}
<h3 class="profile-page-header">
{block 'layout_user_page_title'}{/block}
</h3>
{/block}

12
navs/nav.activity.tpl Normal file
View File

@ -0,0 +1,12 @@
{**
* Навигация на странице активности
*}
{component 'nav'
name = 'activity'
activeItem = $sMenuItemSelect
mods = 'pills'
items = [
[ 'name' => 'user', 'url' => "{router page='stream'}personal/", 'text' => $aLang.activity.nav.personal, 'is_enabled' => !! $oUserCurrent ],
[ 'name' => 'all', 'url' => "{router page='stream'}all/", 'text' => $aLang.activity.nav.all ]
]}

12
navs/nav.blog.edit.tpl Normal file
View File

@ -0,0 +1,12 @@
{**
* Навгиация редактирования блога
*}
{component 'nav'
name = 'blog_edit'
activeItem = $sMenuItemSelect
mods = 'pills'
items = [
[ 'name' => 'profile', 'url' => "{router page='blog'}edit/{$blogEdit->getId()}/", 'text' => $aLang.blog.admin.nav.profile ],
[ 'name' => 'admin', 'url' => "{router page='blog'}admin/{$blogEdit->getId()}/", 'text' => $aLang.blog.admin.nav.users ]
]}

26
navs/nav.create.tpl Normal file
View File

@ -0,0 +1,26 @@
{**
* Навгиация создания топика
*}
{$items = []}
{* Формируем список пунктов *}
{$topicTypes = $LS->Topic_GetTopicTypes()}
{foreach $topicTypes as $type}
{$items[] = [ 'name' => $type->getCode(), 'url' => $type->getUrlForAdd(), 'text' => $type->getName() ]}
{/foreach}
{* Пункт "Черновики" *}
{$items[] = [
'name' => 'drafts',
'url' => "{router page='content'}drafts/",
'text' => $aLang.topic.drafts,
'count' => $iUserCurrentCountTopicDraft
]}
{component 'nav'
name = 'create'
activeItem = $sMenuSubItemSelect
mods = 'pills'
items = $items}

6
navs/nav.main.tpl Normal file
View File

@ -0,0 +1,6 @@
{component 'nav' name='main' activeItem=$sMenuHeadItemSelect mods='main' items=[
[ 'text' => $aLang.topic.topics, 'url' => {router page='/'}, 'name' => 'blog' ],
[ 'text' => $aLang.blog.blogs, 'url' => {router page='blogs'}, 'name' => 'blogs' ],
[ 'text' => $aLang.user.users, 'url' => {router page='people'}, 'name' => 'people' ],
[ 'text' => $aLang.activity.title, 'url' => {router page='stream'}, 'name' => 'stream' ]
]}

15
navs/nav.messages.tpl Normal file
View File

@ -0,0 +1,15 @@
{**
* Навигация на странице личных сообщений
*}
{component 'nav'
name = 'talk'
activeItem = $sMenuSubItemSelect
mods = 'pills'
items = [
[ '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 ]
]}

12
navs/nav.search.tpl Normal file
View File

@ -0,0 +1,12 @@
{**
* Навигация по результатам поиска
*}
{component 'nav'
name = 'search'
activeItem = $searchType
mods = 'pills'
items = [
[ 'name' => 'topics', 'url' => "{router page='search/topics'}?q={$_aRequest.q}", 'text' => $aLang.search.result.topics, 'count' => $typeCounts.topics ],
[ 'name' => 'comments', 'url' => "{router page='search/comments'}?q={$_aRequest.q}", 'text' => $aLang.search.result.comments, 'count' => $typeCounts.comments ]
]}

14
navs/nav.settings.tpl Normal file
View File

@ -0,0 +1,14 @@
{**
* Навигация на странице настроек
*}
{component 'nav'
name = 'settings'
activeItem = $sMenuSubItemSelect
mods = 'pills'
items = [
[ 'url' => "{router page='settings'}profile/", 'text' => {lang name='user.settings.nav.profile'}, 'name' => 'profile' ],
[ 'url' => "{router page='settings'}account/", 'text' => {lang name='user.settings.nav.account'}, 'name' => 'account' ],
[ 'url' => "{router page='settings'}tuning/", 'text' => {lang name='user.settings.nav.tuning'}, 'name' => 'tuning' ],
[ 'url' => "{router page='settings'}invite/", 'text' => {lang name='user.settings.nav.invites'}, 'name' => 'invite' ]
]}

Some files were not shown because too many files have changed in this diff Show More