Skip to content

Commit d6c1022

Browse files
authored
Merge pull request #214 from WoltLab/6.2-refactor-templates
Refactor templates
2 parents 51c6b74 + 6e84df8 commit d6c1022

11 files changed

+63
-52
lines changed

files/lib/data/conversation/ConversationAction.class.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ public function create()
144144
);
145145
}
146146

147-
return $conversation;
147+
// Reload the object so that `firstMessageID` is set.
148+
return new Conversation($conversation->conversationID);
148149
}
149150

150151
/**

templates/__userInformationStartConversation.tpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{if MODULE_CONVERSATION && $__wcf->user->userID && $__wcf->session->getPermission('user.conversation.canUseConversation') && $__wcf->session->getPermission('user.conversation.canStartConversation') && $user->userID != $__wcf->user->userID}
22
<li>
3-
<a class="jsTooltip" href="{link controller='ConversationAdd'}userID={@$user->userID}{/link}" title="{lang}wcf.conversation.button.add{/lang}">
3+
<a class="jsTooltip" href="{link controller='ConversationAdd' userID=$user->userID}{/link}" title="{lang}wcf.conversation.button.add{/lang}">
44
{icon name='comments' type='solid'}
55
<span class="invisible">{lang}wcf.conversation.button.add{/lang}</span>
66
</a>

templates/__userPanelConversationDropdown.tpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
{/if}
1717
</a>
1818
{if !OFFLINE || $__wcf->session->getPermission('admin.general.canViewPageDuringOfflineMode')}
19-
<script data-relocate="true" src="{$__wcf->getPath()}js/WCF.Conversation{if !ENABLE_DEBUG_MODE}.min{/if}.js?v={@LAST_UPDATE_TIME}"></script>
19+
<script data-relocate="true" src="{$__wcf->getPath()}js/WCF.Conversation{if !ENABLE_DEBUG_MODE}.min{/if}.js?v={LAST_UPDATE_TIME}"></script>
2020
<script data-relocate="true">
2121
require(["WoltLabSuite/Core/Conversation/Ui/User/Menu/Data/Conversation"], ({ setup }) => {
2222
setup({

templates/conversationAdd.tpl

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
{elseif $errorType == 'censoredWordsFound'}
1818
{lang}wcf.message.error.censoredWordsFound{/lang}
1919
{else}
20-
{lang}wcf.conversation.subject.error.{@$errorType}{/lang}
20+
{lang}wcf.conversation.subject.error.{$errorType}{/lang}
2121
{/if}
2222
</small>
2323
{/if}
@@ -40,10 +40,10 @@
4040
{lang}wcf.global.form.error.empty{/lang}
4141
{elseif $errorType|is_array}
4242
{foreach from=$errorType item='errorData'}
43-
{lang}wcf.conversation.participants.error.{@$errorData.type}{/lang}
43+
{lang}wcf.conversation.participants.error.{$errorData.type}{/lang}
4444
{/foreach}
4545
{else}
46-
{lang}wcf.conversation.participants.error.{@$errorType}{/lang}
46+
{lang}wcf.conversation.participants.error.{$errorType}{/lang}
4747
{/if}
4848
</small>
4949
{/if}
@@ -62,10 +62,10 @@
6262
{lang}wcf.global.form.error.empty{/lang}
6363
{elseif $errorType|is_array}
6464
{foreach from=$errorType item='errorData'}
65-
{lang}wcf.conversation.participants.error.{@$errorData.type}{/lang}
65+
{lang}wcf.conversation.participants.error.{$errorData.type}{/lang}
6666
{/foreach}
6767
{else}
68-
{lang}wcf.conversation.participants.error.{@$errorType}{/lang}
68+
{lang}wcf.conversation.participants.error.{$errorType}{/lang}
6969
{/if}
7070
</small>
7171
{/if}
@@ -108,7 +108,7 @@
108108
{elseif $errorType == 'disallowedBBCodes'}
109109
{lang}wcf.message.error.disallowedBBCodes{/lang}
110110
{else}
111-
{lang}wcf.conversation.message.error.{@$errorType}{/lang}
111+
{lang}wcf.conversation.message.error.{$errorType}{/lang}
112112
{/if}
113113
</small>
114114
{/if}
@@ -133,29 +133,29 @@
133133
<script data-relocate="true">
134134
require(['WoltLabSuite/Core/Ui/ItemList/User'], function(UiItemListUser) {
135135
UiItemListUser.init('participants', {
136-
maxItems: {@$__wcf->getSession()->getPermission('user.conversation.maxParticipants')},
136+
maxItems: {$__wcf->getSession()->getPermission('user.conversation.maxParticipants')},
137137
includeUserGroups: {if $__wcf->getSession()->getPermission('user.conversation.canAddGroupParticipants')}true{else}false{/if},
138-
restrictUserGroupIDs: [-1, {implode from=$allowedUserGroupIDs item=allowedUserGroupID}{@$allowedUserGroupID}{/implode}],
138+
restrictUserGroupIDs: [-1, {implode from=$allowedUserGroupIDs item=allowedUserGroupID}{$allowedUserGroupID}{/implode}],
139139
csvPerType: true,
140140
callbackSetupValues: function() {
141141
return [
142142
{implode from=$participantsData item=participant}
143-
{ objectId: {@$participant['objectId']}, value: '{@$participant['value']|encodeJS}', type: '{@$participant['type']}' }
143+
{ objectId: {$participant['objectId']}, value: '{unsafe:$participant['value']|encodeJS}', type: '{unsafe:$participant['type']|encodeJS}' }
144144
{/implode}
145145
];
146146
}
147147
});
148148
149149
{if $__wcf->session->getPermission('user.conversation.canAddInvisibleParticipants')}
150150
UiItemListUser.init('invisibleParticipants', {
151-
maxItems: {@$__wcf->getSession()->getPermission('user.conversation.maxParticipants')},
151+
maxItems: {$__wcf->getSession()->getPermission('user.conversation.maxParticipants')},
152152
includeUserGroups: {if $__wcf->getSession()->getPermission('user.conversation.canAddGroupParticipants')}true{else}false{/if},
153-
restrictUserGroupIDs: [-1, {implode from=$allowedUserGroupIDs item=allowedUserGroupID}{@$allowedUserGroupID}{/implode}],
153+
restrictUserGroupIDs: [-1, {implode from=$allowedUserGroupIDs item=allowedUserGroupID}{$allowedUserGroupID}{/implode}],
154154
csvPerType: true,
155155
callbackSetupValues: function() {
156156
return [
157157
{implode from=$invisibleParticipantsData item=participant}
158-
{ objectId: {@$participant['objectId']}, value: '{@$participant['value']|encodeJS}', type: '{@$participant['type']}' }
158+
{ objectId: {$participant['objectId']}, value: '{unsafe:$participant['value']|encodeJS}', type: '{unsafe:$participant['type']|encodeJS}' }
159159
{/implode}
160160
];
161161
}

templates/conversationList.tpl

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
{/capture}
2828

2929
{capture assign='headContent'}
30-
<link rel="alternate" type="application/rss+xml" title="{lang}wcf.global.button.rss{/lang}" href="{link controller='ConversationRssFeed'}at={@$__wcf->getUser()->userID}-{@$__wcf->getUser()->accessToken}{/link}">
30+
<link rel="alternate" type="application/rss+xml" title="{lang}wcf.global.button.rss{/lang}" href="{link controller='ConversationRssFeed'}at={$__wcf->getUser()->userID}-{$__wcf->getUser()->accessToken}{/link}">
3131
{/capture}
3232

3333
{capture assign='sidebarRight'}
@@ -58,7 +58,7 @@
5858
<h2 class="boxTitle">{lang}wcf.conversation.filter.participants{/lang}</h2>
5959

6060
<div class="boxContent">
61-
<form action="{link controller='ConversationList'}{if $filter}filter={@$filter}&{/if}sortField={$sortField}&sortOrder={$sortOrder}&pageNo={@$pageNo}{/link}" method="post">
61+
<form action="{link controller='ConversationList' sortField=$sortField sortOrder=$sortOrder pageNo=$pageNo}{if $filter}filter={$filter}{/if}{/link}" method="post">
6262
<dl>
6363
<dt></dt>
6464
<dd><label><textarea id="participants" name="participants" class="long">{implode from=$participants item=participant glue=','}{$participant}{/implode}</textarea></label></dd>
@@ -92,12 +92,12 @@
9292
<div class="dropdownMenu">
9393
<ul class="scrollableDropdownMenu">
9494
{foreach from=$labelList item=label}
95-
<li><a href="{link controller='ConversationList'}{if $filter}filter={@$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{$participant|rawurlencode}{/implode}&{/if}sortField={$sortField}&sortOrder={$sortOrder}&pageNo={@$pageNo}&labelID={@$label->labelID}{/link}"><span class="badge label{if $label->cssClassName} {@$label->cssClassName}{/if}" data-css-class-name="{if $label->cssClassName}{@$label->cssClassName}{/if}" data-label-id="{$label->labelID}">{$label->label}</span></a></li>
95+
<li><a href="{link controller='ConversationList' sortField=$sortField sortOrder=$sortOrder pageNo=$pageNo labelID=$label->labelID}{if $filter}filter={$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{unsafe:$participant|rawurlencode}{/implode}{/if}{/link}"><span class="badge label{if $label->cssClassName} {$label->cssClassName}{/if}" data-css-class-name="{if $label->cssClassName}{$label->cssClassName}{/if}" data-label-id="{$label->labelID}">{$label->label}</span></a></li>
9696
{/foreach}
9797
</ul>
9898
<ul>
9999
<li class="dropdownDivider"{if !$labelList|count} style="display: none;"{/if}></li>
100-
<li><a href="{link controller='ConversationList'}{if $filter}filter={@$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{$participant|rawurlencode}{/implode}&{/if}sortField={$sortField}&sortOrder={$sortOrder}&pageNo={@$pageNo}{/link}"><span class="badge label">{lang}wcf.conversation.label.disableFilter{/lang}</span></a></li>
100+
<li><a href="{link controller='ConversationList' sortField=$sortField sortOrder=$sortOrder pageNo=$pageNo}{if $filter}filter={$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{unsafe:$participant|rawurlencode}{/implode}{/if}{/link}"><span class="badge label">{lang}wcf.conversation.label.disableFilter{/lang}</span></a></li>
101101
</ul>
102102
</div>
103103
</div>
@@ -130,12 +130,18 @@
130130
{event name='boxes'}
131131
{/capture}
132132

133+
{assign var='linkParameters' value=''}
134+
{if $participants}{capture append='linkParameters'}&participants={implode from=$participants item=participant}{unsafe:$participant|rawurlencode}{/implode}{/capture}{/if}
135+
{if $labelID}{capture append='linkParameters'}&labelID={$labelID}{/capture}{/if}
136+
133137
{capture assign='contentInteractionPagination'}
134-
{assign var='participantsParameter' value=''}
135-
{if $participants}{capture assign='participantsParameter'}&participants={implode from=$participants item=participant}{$participant|rawurlencode}{/implode}{/capture}{/if}
136-
{assign var='labelIDParameter' value=''}
137-
{if $labelID}{assign var='labelIDParameter' value="&labelID=$labelID"}{/if}
138-
{pages print=true assign=pagesLinks controller='ConversationList' link="filter=$filter$participantsParameter&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder$labelIDParameter"}
138+
{if $pages > 1}
139+
<woltlab-core-pagination
140+
page="{$pageNo}"
141+
count="{$pages}"
142+
url="{link controller='ConversationList' filter=$filter sortField=$sortField sortOrder=$sortOrder}{unsafe:$linkParameters}{/link}"
143+
></woltlab-core-pagination>
144+
{/if}
139145
{/capture}
140146

141147
{capture assign='contentInteractionButtons'}
@@ -146,7 +152,7 @@
146152
{/capture}
147153

148154
{capture assign='contentInteractionDropdownItems'}
149-
<li><a rel="alternate" href="{link controller='ConversationRssFeed'}at={@$__wcf->getUser()->userID}-{@$__wcf->getUser()->accessToken}{/link}">{lang}wcf.global.button.rss{/lang}</a></li>
155+
<li><a rel="alternate" href="{link controller='ConversationRssFeed'}at={$__wcf->getUser()->userID}-{$__wcf->getUser()->accessToken}{/link}">{lang}wcf.global.button.rss{/lang}</a></li>
150156
{/capture}
151157

152158
{include file='header'}
@@ -163,7 +169,7 @@
163169
<li class="columnSort">
164170
<ul class="inlineList">
165171
<li>
166-
<a rel="nofollow" href="{link controller='ConversationList'}{if $filter}filter={@$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{$participant|rawurlencode}{/implode}&{/if}pageNo={@$pageNo}&sortField={$sortField}&sortOrder={if $sortOrder == 'ASC'}DESC{else}ASC{/if}{if $labelID}&labelID={@$labelID}{/if}{/link}">
172+
<a rel="nofollow" href="{link controller='ConversationList' pageNo=$pageNo sortField=$sortField}{if $filter}filter={$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{unsafe:$participant|rawurlencode}{/implode}&{/if}sortOrder={if $sortOrder == 'ASC'}DESC{else}ASC{/if}{if $labelID}&labelID={$labelID}{/if}{/link}">
167173
{if $sortOrder === 'ASC'}
168174
<span class="jsTooltip" title="{lang}wcf.global.sorting{/lang} ({lang}wcf.global.sortOrder.ascending{/lang})">
169175
{icon name='arrow-down-wide-short'}
@@ -181,7 +187,7 @@
181187

182188
<ul class="dropdownMenu">
183189
{foreach from=$validSortFields item=_sortField}
184-
<li{if $_sortField === $sortField} class="active"{/if}><a rel="nofollow" href="{link controller='ConversationList'}{if $filter}filter={@$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{$participant|rawurlencode}{/implode}&{/if}pageNo={@$pageNo}&sortField={$_sortField}&sortOrder={if $sortField === $_sortField}{if $sortOrder === 'DESC'}ASC{else}DESC{/if}{else}{$sortOrder}{/if}{if $labelID}&labelID={@$labelID}{/if}{/link}">{if $_sortField == 'subject'}{lang}wcf.global.subject{/lang}{else}{lang}wcf.conversation.{$_sortField}{/lang}{/if}</a></li>
190+
<li{if $_sortField === $sortField} class="active"{/if}><a rel="nofollow" href="{link controller='ConversationList' pageNo=$pageNo sortField=$_sortField}{if $filter}filter={$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{unsafe:$participant|rawurlencode}{/implode}&{/if}sortOrder={if $sortField === $_sortField}{if $sortOrder === 'DESC'}ASC{else}DESC{/if}{else}{$sortOrder}{/if}{if $labelID}&labelID={$labelID}{/if}{/link}">{if $_sortField == 'subject'}{lang}wcf.global.subject{/lang}{else}{lang}wcf.conversation.{$_sortField}{/lang}{/if}</a></li>
185191
{/foreach}
186192
</ul>
187193
</div>
@@ -200,11 +206,11 @@
200206
<li class="columnIcon columnAvatar">
201207
{if $conversation->getUserProfile()->getAvatar()}
202208
<div>
203-
<p{if $conversation->isNew()} title="{lang}wcf.conversation.markAsRead.doubleClick{/lang}"{/if}>{@$conversation->getUserProfile()->getAvatar()->getImageTag(48)}</p>
209+
<p{if $conversation->isNew()} title="{lang}wcf.conversation.markAsRead.doubleClick{/lang}"{/if}>{unsafe:$conversation->getUserProfile()->getAvatar()->getImageTag(48)}</p>
204210

205211
{if $conversation->ownPosts && $conversation->userID != $__wcf->user->userID}
206212
{if $__wcf->getUserProfileHandler()->getAvatar()}
207-
<small class="myAvatar jsTooltip" title="{lang}wcf.conversation.ownPosts{/lang}">{@$__wcf->getUserProfileHandler()->getAvatar()->getImageTag(24)}</small>
213+
<small class="myAvatar jsTooltip" title="{lang}wcf.conversation.ownPosts{/lang}">{unsafe:$__wcf->getUserProfileHandler()->getAvatar()->getImageTag(24)}</small>
208214
{/if}
209215
{/if}
210216
</div>
@@ -215,7 +221,7 @@
215221
<ul class="labelList">
216222
{content}
217223
{foreach from=$conversation->getAssignedLabels() item=label}
218-
<li><a href="{link controller='ConversationList'}{if $filter}filter={@$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{$participant|rawurlencode}{/implode}&{/if}sortField={$sortField}&sortOrder={$sortOrder}&pageNo={@$pageNo}&labelID={@$label->labelID}{/link}" class="badge label{if $label->cssClassName} {@$label->cssClassName}{/if}">{$label->label}</a></li>
224+
<li><a href="{link controller='ConversationList' sortField=$sortField sortOrder=$sortOrder pageNo=$pageNo labelID=$label->labelID}{if $filter}filter={$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{$participant|rawurlencode}{/implode}{/if}{/link}" class="badge label{if $label->cssClassName} {$label->cssClassName}{/if}">{$label->label}</a></li>
219225
{/foreach}
220226
{/content}
221227
</ul>
@@ -224,7 +230,7 @@
224230
<h3>
225231
<a href="{if $conversation->isNew()}{link controller='Conversation' object=$conversation}action=firstNew{/link}{else}{$conversation->getLink()}{/if}" class="conversationLink messageGroupLink" data-object-id="{$conversation->conversationID}">{$conversation->subject}</a>
226232
{if $conversation->replies}
227-
<span class="badge messageGroupCounterMobile">{@$conversation->replies|shortUnit}</span>
233+
<span class="badge messageGroupCounterMobile">{$conversation->replies|shortUnit}</span>
228234
{/if}
229235
</h3>
230236

@@ -272,26 +278,26 @@
272278
<li class="columnStats">
273279
<dl class="plain statsDataList">
274280
<dt>{lang}wcf.conversation.replies{/lang}</dt>
275-
<dd>{@$conversation->replies|shortUnit}</dd>
281+
<dd>{$conversation->replies|shortUnit}</dd>
276282
</dl>
277283
<dl class="plain statsDataList">
278284
<dt>{lang}wcf.conversation.participants{/lang}</dt>
279-
<dd>{@$conversation->participants|shortUnit}</dd>
285+
<dd>{$conversation->participants|shortUnit}</dd>
280286
</dl>
281287

282288
<div class="messageGroupListStatsSimple">
283289
{if $conversation->replies}
284290
<span aria-label="{lang}wcf.conversation.replies{/lang}">
285291
{icon name='comment'}
286292
</span>
287-
{@$conversation->replies|shortUnit}
293+
{$conversation->replies|shortUnit}
288294
{/if}
289295
</div>
290296
</li>
291297
<li class="columnLastPost">
292298
{if $conversation->replies != 0 && $conversation->lastPostTime}
293299
<div class="box32">
294-
<a href="{link controller='Conversation' object=$conversation}action=lastPost{/link}" class="jsTooltip" title="{lang}wcf.conversation.gotoLastPost{/lang}">{@$conversation->getLastPosterProfile()->getAvatar()->getImageTag(32)}</a>
300+
<a href="{link controller='Conversation' object=$conversation action='lastPost'}{/link}" class="jsTooltip" title="{lang}wcf.conversation.gotoLastPost{/lang}">{unsafe:$conversation->getLastPosterProfile()->getAvatar()->getImageTag(32)}</a>
295301

296302
<div>
297303
<p>
@@ -312,11 +318,15 @@
312318
{/if}
313319

314320
<footer class="contentFooter">
315-
{hascontent}
321+
{if $pages > 1}
316322
<div class="paginationBottom">
317-
{content}{@$pagesLinks}{/content}
323+
<woltlab-core-pagination
324+
page="{$pageNo}"
325+
count="{$pages}"
326+
url="{link controller='ConversationList' filter=$filter sortField=$sortField sortOrder=$sortOrder}{unsafe:$linkParameters}{/link}"
327+
></woltlab-core-pagination>
318328
</div>
319-
{/hascontent}
329+
{/if}
320330

321331
{hascontent}
322332
<nav class="contentFooterNavigation">
@@ -337,7 +347,7 @@
337347
{/hascontent}
338348
</footer>
339349

340-
<script data-relocate="true" src="{$__wcf->getPath()}js/WCF.Conversation{if !ENABLE_DEBUG_MODE}.min{/if}.js?v={@LAST_UPDATE_TIME}"></script>
350+
<script data-relocate="true" src="{$__wcf->getPath()}js/WCF.Conversation{if !ENABLE_DEBUG_MODE}.min{/if}.js?v={LAST_UPDATE_TIME}"></script>
341351
<script data-relocate="true">
342352
require([
343353
'WoltLabSuite/Core/Language',
@@ -373,13 +383,13 @@
373383
hasMarkedItems: {if $hasMarkedItems}true{else}false{/if},
374384
});
375385
376-
const availableLabels = [{implode from=$labelList item=label}{ cssClassName: '{if $label->cssClassName}{unsafe:$label->cssClassName|encodeJS}{/if}', labelID: {@$label->labelID}, label: '{$label->label|encodeJS}', url: '{link controller='ConversationList' encode=false}labelID={$label->labelID}{if $filter}&filter={@$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{$participant|rawurlencode}{/implode}&{/if}sortField={$sortField}&sortOrder={$sortOrder}&pageNo={@$pageNo}{/link}' }{/implode} ];
386+
const availableLabels = [{implode from=$labelList item=label}{ cssClassName: '{if $label->cssClassName}{unsafe:$label->cssClassName|encodeJS}{/if}', labelID: {$label->labelID}, label: '{$label->label|encodeJS}', url: '{link controller='ConversationList' encode=false sortField=$sortField sortOrder=$sortOrder pageNo=$pageNo}labelID={$label->labelID}{if $filter}&filter={$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{unsafe:$participant|rawurlencode}{/implode}{/if}{/link}' }{/implode} ];
377387
var $editorHandler = new WCF.Conversation.EditorHandler(availableLabels);
378388
var $inlineEditor = new WCF.Conversation.InlineEditor('.conversation');
379389
$inlineEditor.setEditorHandler($editorHandler, 'list');
380390
381391
ConversationClipboard.setup($editorHandler);
382-
new LabelManager('{link controller='ConversationLabelForm'}{/link}', '{link controller='ConversationList' encode=false}{if $filter}filter={@$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{$participant|rawurlencode}{/implode}&{/if}sortField={$sortField}&sortOrder={$sortOrder}&pageNo={@$pageNo}{/link}');
392+
new LabelManager('{link controller='ConversationLabelForm'}{/link}', '{link controller='ConversationList' encode=false sortField=$sortField sortOrder=$sortOrder pageNo=$pageNo}{if $filter}filter={$filter}&{/if}{if !$participants|empty}participants={implode from=$participants item=participant}{unsafe:$participant|rawurlencode}{/implode}{/if}{/link}');
383393
384394
// mobile safari hover workaround
385395
if ($(window).width() <= 800) {

0 commit comments

Comments
 (0)