Commit | Line | Data |
---|---|---|
a5a4f02d MW |
1 | {include file='header' pageTitle='wcf.acp.article.'|concat:$action} |
2 | ||
5ae90fa9 MW |
3 | {if $__wcf->session->getPermission('admin.content.article.canManageArticle')} |
4 | <script data-relocate="true"> | |
5 | $(function() { | |
6 | $('input[type="radio"][name="publicationStatus"]').change(function(event) { | |
7 | var $selected = $('input[type="radio"][name="publicationStatus"]:checked'); | |
8 | if ($selected.length > 0) { | |
9 | if ($selected.val() == 2) { | |
10 | $('#publicationDateDl').show(); | |
11 | } | |
12 | else { | |
13 | $('#publicationDateDl').hide(); | |
14 | } | |
a5a4f02d | 15 | } |
5ae90fa9 MW |
16 | }).trigger('change'); |
17 | }); | |
18 | </script> | |
19 | {/if} | |
a5a4f02d MW |
20 | |
21 | <script data-relocate="true"> | |
402a1169 | 22 | require(['Language', 'WoltLabSuite/Core/Ui/User/Search/Input', 'WoltLabSuite/Core/Acp/Ui/Article/InlineEditor'], function(Language, UiUserSearchInput, AcpUiArticleInlineEditor) { |
1ef73f36 | 23 | Language.addObject({ |
70ecac8c AE |
24 | 'wcf.acp.article.i18n.source': '{lang}wcf.acp.article.i18n.source{/lang}', |
25 | 'wcf.acp.article.i18n.toI18n.confirmMessage': '{lang}wcf.acp.article.i18n.toI18n.confirmMessage{/lang}', | |
26 | 'wcf.acp.article.i18n.fromI18n.confirmMessage': '{lang}wcf.acp.article.i18n.fromI18n.confirmMessage{/lang}', | |
402a1169 | 27 | 'wcf.message.status.deleted': '{lang}wcf.message.status.deleted{/lang}', |
1ef73f36 AE |
28 | 'wcf.page.search': '{lang}wcf.page.search{/lang}', |
29 | 'wcf.page.search.error.tooShort': '{lang}wcf.page.search.error.tooShort{/lang}', | |
30 | 'wcf.page.search.error.noResults': '{lang}wcf.page.search.error.noResults{/lang}', | |
31 | 'wcf.page.search.name': '{lang}wcf.page.search.name{/lang}', | |
32 | 'wcf.page.search.results': '{lang}wcf.page.search.results{/lang}' | |
33 | }); | |
34 | ||
a5a4f02d | 35 | new UiUserSearchInput(elBySel('input[name="username"]')); |
70ecac8c AE |
36 | {if $action == 'edit'} |
37 | new AcpUiArticleInlineEditor({@$article->articleID}, { | |
38 | i18n: { | |
39 | defaultLanguageId: {@$defaultLanguageID}, | |
40 | isI18n: {if $article->isMultilingual}true{else}false{/if}, | |
41 | languages: { {implode from=$languages item=language glue=', '}{@$language->languageID}: '{$language|encodeJS}'{/implode} } | |
42 | } | |
43 | }); | |
44 | {/if} | |
a5a4f02d MW |
45 | }); |
46 | </script> | |
47 | ||
48 | {if $__wcf->session->getPermission('admin.content.cms.canUseMedia')} | |
49 | <script data-relocate="true"> | |
50 | {include file='mediaJavaScript'} | |
51 | ||
58d7e8f8 | 52 | require(['WoltLabSuite/Core/Media/Manager/Select'], function(MediaManagerSelect) { |
a5a4f02d | 53 | new MediaManagerSelect({ |
a9566c33 | 54 | dialogTitle: '{lang}wcf.media.chooseImage{/lang}', |
dac0007f | 55 | imagesOnly: 1 |
a5a4f02d MW |
56 | }); |
57 | }); | |
58 | </script> | |
59 | {/if} | |
60 | ||
61 | <header class="contentHeader"> | |
62 | <div class="contentHeaderTitle"> | |
63 | <h1 class="contentTitle">{if $action == 'add'}{lang}wcf.acp.article.add{/lang}{else}{lang}wcf.acp.article.edit{/lang}{/if}</h1> | |
64 | </div> | |
65 | ||
66 | <nav class="contentHeaderNavigation"> | |
67 | <ul> | |
68 | {if $action == 'edit'} | |
402a1169 AE |
69 | {if $article->canDelete()} |
70 | <li><a href="#" class="button jsButtonRestore" data-confirm-message-html="{lang __encode=true isArticleEdit=true}wcf.acp.article.restore.confirmMessage{/lang}"{if !$article->isDeleted} style="display: none"{/if}><span class="icon icon16 fa-refresh"></span> <span>{lang}wcf.global.button.restore{/lang}</span></a></li> | |
71 | <li><a href="#" class="button jsButtonDelete" data-confirm-message-html="{lang __encode=true isArticleEdit=true}wcf.acp.article.delete.confirmMessage{/lang}"{if !$article->isDeleted} style="display: none"{/if}><span class="icon icon16 fa-times"></span> <span>{lang}wcf.global.button.delete{/lang}</span></a></li> | |
72 | <li><a href="#" class="button jsButtonTrash" data-confirm-message-html="{lang __encode=true isArticleEdit=true}wcf.acp.article.trash.confirmMessage{/lang}"{if $article->isDeleted} style="display: none"{/if}><span class="icon icon16 fa-times"></span> <span>{lang}wcf.global.button.trash{/lang}</span></a></li> | |
73 | {/if} | |
70ecac8c AE |
74 | {if $languages|count > 1 || $article->isMultilingual} |
75 | <li><a href="#" class="button jsButtonToggleI18n"><span class="icon icon16 fa-flag"></span> <span>{lang}wcf.acp.article.button.toggleI18n{/lang}</span></a></li> | |
76 | {/if} | |
a5a4f02d MW |
77 | <li><a href="{$article->getLink()}" class="button"><span class="icon icon16 fa-search"></span> <span>{lang}wcf.acp.article.button.viewArticle{/lang}</span></a></li> |
78 | {/if} | |
79 | <li><a href="{link controller='ArticleList'}{/link}" class="button"><span class="icon icon16 fa-list"></span> <span>{lang}wcf.acp.menu.link.article.list{/lang}</span></a></li> | |
80 | ||
81 | {event name='contentHeaderNavigation'} | |
82 | </ul> | |
83 | </nav> | |
84 | </header> | |
85 | ||
86 | {include file='formError'} | |
87 | ||
88 | {if $success|isset} | |
89 | <p class="success">{lang}wcf.global.success.{$action}{/lang}</p> | |
90 | {/if} | |
91 | ||
ef195f0e AE |
92 | {if $action == 'edit'} |
93 | <p class="info jsArticleNoticeTrash"{if !$article->isDeleted} style="display: none;"{/if}>{lang}wcf.acp.article.trash.notice{/lang}</p> | |
94 | ||
95 | {if $lastVersion}<p class="info">{lang}wcf.acp.article.lastVersion{/lang}</p>{/if} | |
96 | {/if} | |
402a1169 | 97 | |
1177a643 | 98 | <form class="articleAddForm" method="post" action="{if $action == 'add'}{link controller='ArticleAdd'}{/link}{else}{link controller='ArticleEdit' id=$articleID}{/link}{/if}"> |
a5a4f02d MW |
99 | <div class="section"> |
100 | <dl{if $errorField == 'categoryID'} class="formError"{/if}> | |
101 | <dt><label for="categoryID">{lang}wcf.acp.article.category{/lang}</label></dt> | |
102 | <dd> | |
103 | <select name="categoryID" id="categoryID"> | |
104 | <option value="0">{lang}wcf.global.noSelection{/lang}</option> | |
105 | ||
106 | {foreach from=$categoryNodeList item=category} | |
6f2bc235 | 107 | <option value="{@$category->categoryID}"{if $category->categoryID == $categoryID} selected{/if}>{if $category->getDepth() > 1}{@" "|str_repeat:($category->getDepth() - 1)}{/if}{$category->getTitle()}</option> |
a5a4f02d MW |
108 | {/foreach} |
109 | </select> | |
110 | {if $errorField == 'categoryID'} | |
111 | <small class="innerError"> | |
112 | {if $errorType == 'empty'} | |
113 | {lang}wcf.global.form.error.empty{/lang} | |
114 | {else} | |
115 | {lang}wcf.acp.article.category.error.{@$errorType}{/lang} | |
116 | {/if} | |
117 | </small> | |
118 | {/if} | |
119 | </dd> | |
120 | </dl> | |
121 | ||
b20c6ed6 MW |
122 | {event name='categoryFields'} |
123 | ||
1177a643 MW |
124 | {if $labelGroups|count} |
125 | {foreach from=$labelGroups item=labelGroup} | |
126 | {if $labelGroup|count} | |
127 | <dl{if $errorField == 'label' && $errorType[$labelGroup->groupID]|isset} class="formError"{/if}> | |
128 | <dt><label>{$labelGroup->getTitle()}</label></dt> | |
129 | <dd> | |
130 | <ul class="labelList jsOnly" data-object-id="{@$labelGroup->groupID}"> | |
131 | <li class="dropdown labelChooser" id="labelGroup{@$labelGroup->groupID}" data-group-id="{@$labelGroup->groupID}" data-force-selection="{if $labelGroup->forceSelection}true{else}false{/if}"> | |
132 | <div class="dropdownToggle" data-toggle="labelGroup{@$labelGroup->groupID}"><span class="badge label">{lang}wcf.label.none{/lang}</span></div> | |
133 | <div class="dropdownMenu"> | |
134 | <ul class="scrollableDropdownMenu"> | |
135 | {foreach from=$labelGroup item=label} | |
136 | <li data-label-id="{@$label->labelID}"><span><span class="badge label{if $label->getClassNames()} {@$label->getClassNames()}{/if}">{lang}{$label->label}{/lang}</span></span></li> | |
137 | {/foreach} | |
138 | </ul> | |
139 | </div> | |
140 | </li> | |
141 | </ul> | |
142 | <noscript> | |
143 | <select name="labelIDs[{@$labelGroup->groupID}]"> | |
144 | {foreach from=$labelGroup item=label} | |
145 | <option value="{@$label->labelID}">{lang}{$label->label}{/lang}</option> | |
146 | {/foreach} | |
147 | </select> | |
148 | </noscript> | |
149 | {if $errorField == 'label' && $errorType[$labelGroup->groupID]|isset} | |
150 | <small class="innerError"> | |
151 | {if $errorType[$labelGroup->groupID] == 'missing'} | |
152 | {lang}wcf.label.error.missing{/lang} | |
153 | {else} | |
154 | {lang}wcf.label.error.invalid{/lang} | |
155 | {/if} | |
156 | </small> | |
157 | {/if} | |
158 | </dd> | |
159 | </dl> | |
160 | {/if} | |
161 | {/foreach} | |
162 | {/if} | |
163 | ||
a5a4f02d MW |
164 | <dl{if $errorField == 'username'} class="formError"{/if}> |
165 | <dt><label for="username">{lang}wcf.acp.article.author{/lang}</label></dt> | |
166 | <dd> | |
04ef1206 | 167 | <input type="text" id="username" name="username" value="{$username}" class="medium" maxlength="255"> |
a5a4f02d MW |
168 | {if $errorField == 'username'} |
169 | <small class="innerError"> | |
170 | {if $errorType == 'empty'} | |
171 | {lang}wcf.global.form.error.empty{/lang} | |
172 | {else} | |
173 | {lang}wcf.user.username.error.{@$errorType}{/lang} | |
174 | {/if} | |
175 | </small> | |
176 | {/if} | |
177 | </dd> | |
178 | </dl> | |
179 | ||
180 | <dl{if $errorField == 'time'} class="formError"{/if}> | |
dca8d159 | 181 | <dt><label for="time">{lang}wcf.global.date{/lang}</label></dt> |
a5a4f02d | 182 | <dd> |
e5f9b56c | 183 | <input type="datetime" id="time" name="time" value="{$time}" class="medium"> |
a5a4f02d MW |
184 | {if $errorField == 'time'} |
185 | <small class="innerError"> | |
186 | {if $errorType == 'empty'} | |
187 | {lang}wcf.global.form.error.empty{/lang} | |
188 | {else} | |
189 | {lang}wcf.acp.article.time.error.{@$errorType}{/lang} | |
190 | {/if} | |
191 | </small> | |
192 | {/if} | |
193 | </dd> | |
194 | </dl> | |
195 | ||
5ae90fa9 MW |
196 | {if $__wcf->session->getPermission('admin.content.article.canManageArticle')} |
197 | <dl> | |
198 | <dt><label for="categoryID">{lang}wcf.acp.article.publicationStatus{/lang}</label></dt> | |
199 | <dd class="floated"> | |
200 | <label><input type="radio" name="publicationStatus" value="0"{if $publicationStatus == 0} checked{/if}> {lang}wcf.acp.article.publicationStatus.unpublished{/lang}</label> | |
201 | <label><input type="radio" name="publicationStatus" value="1"{if $publicationStatus == 1} checked{/if}> {lang}wcf.acp.article.publicationStatus.published{/lang}</label> | |
202 | <label><input type="radio" name="publicationStatus" value="2"{if $publicationStatus == 2} checked{/if}> {lang}wcf.acp.article.publicationStatus.delayed{/lang}</label> | |
203 | </dd> | |
204 | </dl> | |
205 | ||
206 | <dl id="publicationDateDl"{if $errorField == 'publicationDate'} class="formError"{/if}{if $publicationStatus != 2} style="display: none"{/if}> | |
207 | <dt><label for="publicationDate">{lang}wcf.acp.article.publicationDate{/lang}</label></dt> | |
208 | <dd> | |
209 | <input type="datetime" id="publicationDate" name="publicationDate" value="{$publicationDate}" class="medium"> | |
210 | {if $errorField == 'publicationDate'} | |
211 | <small class="innerError"> | |
212 | {if $errorType == 'empty'} | |
213 | {lang}wcf.global.form.error.empty{/lang} | |
214 | {else} | |
215 | {lang}wcf.acp.article.publicationDate.error.{@$errorType}{/lang} | |
216 | {/if} | |
217 | </small> | |
218 | {/if} | |
219 | </dd> | |
220 | </dl> | |
221 | {/if} | |
a5a4f02d MW |
222 | |
223 | <dl> | |
224 | <dt></dt> | |
225 | <dd> | |
6f2bc235 | 226 | <label><input name="enableComments" type="checkbox" value="1"{if $enableComments} checked{/if}> {lang}wcf.acp.article.enableComments{/lang}</label> |
a5a4f02d MW |
227 | </dd> |
228 | </dl> | |
229 | </div> | |
230 | ||
231 | {if !$isMultilingual} | |
232 | <div class="section"> | |
233 | {if $__wcf->session->getPermission('admin.content.cms.canUseMedia')} | |
234 | <dl{if $errorField == 'image'} class="formError"{/if}> | |
235 | <dt><label for="image">{lang}wcf.acp.article.image{/lang}</label></dt> | |
236 | <dd> | |
695c56e6 | 237 | <div id="imageDisplay" class="selectedImagePreview"> |
f4d9e975 | 238 | {if $images[0]|isset && $images[0]->hasThumbnail('small')} |
a5a4f02d MW |
239 | {@$images[0]->getThumbnailTag('small')} |
240 | {/if} | |
241 | </div> | |
a9566c33 | 242 | <p class="button jsMediaSelectButton" data-store="imageID0" data-display="imageDisplay">{lang}wcf.media.chooseImage{/lang}</p> |
e5f9b56c | 243 | <input type="hidden" name="imageID[0]" id="imageID0"{if $imageID[0]|isset} value="{@$imageID[0]}"{/if}> |
a5a4f02d MW |
244 | {if $errorField == 'image'} |
245 | <small class="innerError">{lang}wcf.acp.article.image.error.{@$errorType}{/lang}</small> | |
246 | {/if} | |
247 | </dd> | |
248 | </dl> | |
f4d9e975 | 249 | {elseif $action == 'edit' && $images[0]|isset && $images[0]->hasThumbnail('small')} |
a5a4f02d MW |
250 | <dl> |
251 | <dt>{lang}wcf.acp.article.image{/lang}</dt> | |
252 | <dd> | |
253 | <div id="imageDisplay">{@$images[0]->getThumbnailTag('small')}</div> | |
254 | </dd> | |
255 | </dl> | |
256 | {/if} | |
257 | ||
79305986 MW |
258 | {if $__wcf->session->getPermission('admin.content.cms.canUseMedia')} |
259 | <dl{if $errorField == 'teaserImage'} class="formError"{/if}> | |
260 | <dt><label for="teaserImage">{lang}wcf.acp.article.teaserImage{/lang}</label></dt> | |
261 | <dd> | |
262 | <div id="teaserImageDisplay" class="selectedImagePreview"> | |
263 | {if $teaserImages[0]|isset && $teaserImages[0]->hasThumbnail('small')} | |
264 | {@$teaserImages[0]->getThumbnailTag('small')} | |
265 | {/if} | |
266 | </div> | |
267 | <p class="button jsMediaSelectButton" data-store="teaserImageID0" data-display="teaserImageDisplay">{lang}wcf.media.chooseImage{/lang}</p> | |
268 | <input type="hidden" name="teaserImageID[0]" id="teaserImageID0"{if $teaserImageID[0]|isset} value="{@$teaserImageID[0]}"{/if}> | |
269 | {if $errorField == 'teaserImage'} | |
270 | <small class="innerError">{lang}wcf.acp.article.image.error.{@$errorType}{/lang}</small> | |
271 | {/if} | |
272 | </dd> | |
273 | </dl> | |
274 | {elseif $action == 'edit' && $teaserImages[0]|isset && $teaserImages[0]->hasThumbnail('small')} | |
275 | <dl> | |
276 | <dt>{lang}wcf.acp.article.teaserImage{/lang}</dt> | |
277 | <dd> | |
278 | <div id="teaserImageDisplay">{@$teaserImages[0]->getThumbnailTag('small')}</div> | |
279 | </dd> | |
280 | </dl> | |
281 | {/if} | |
282 | ||
a5a4f02d | 283 | <dl{if $errorField == 'title'} class="formError"{/if}> |
dca8d159 | 284 | <dt><label for="title0">{lang}wcf.global.title{/lang}</label></dt> |
a5a4f02d | 285 | <dd> |
04ef1206 | 286 | <input type="text" id="title0" name="title[0]" value="{if !$title[0]|empty}{$title[0]}{/if}" class="long" maxlength="255"> |
a5a4f02d MW |
287 | {if $errorField == 'title'} |
288 | <small class="innerError"> | |
289 | {if $errorType == 'empty'} | |
290 | {lang}wcf.global.form.error.empty{/lang} | |
291 | {else} | |
292 | {lang}wcf.acp.article.title.error.{@$errorType}{/lang} | |
293 | {/if} | |
294 | </small> | |
295 | {/if} | |
296 | </dd> | |
297 | </dl> | |
298 | ||
299 | {if MODULE_TAGGING} | |
300 | <dl class="jsOnly"> | |
301 | <dt><label for="tagSearchInput">{lang}wcf.tagging.tags{/lang}</label></dt> | |
302 | <dd> | |
e5f9b56c | 303 | <input id="tagSearchInput" type="text" value="" class="long"> |
a5a4f02d MW |
304 | <small>{lang}wcf.tagging.tags.description{/lang}</small> |
305 | </dd> | |
306 | </dl> | |
307 | ||
308 | <script data-relocate="true"> | |
58d7e8f8 | 309 | require(['WoltLabSuite/Core/Ui/ItemList'], function(UiItemList) { |
a5a4f02d MW |
310 | UiItemList.init( |
311 | 'tagSearchInput', | |
8e870ecd | 312 | [{if !$tags[0]|empty}{implode from=$tags[0] item=tag}'{@$tag|encodeJS}'{/implode}{/if}], |
a5a4f02d MW |
313 | { |
314 | ajax: { | |
315 | className: 'wcf\\data\\tag\\TagAction' | |
316 | }, | |
317 | maxLength: {@TAGGING_MAX_TAG_LENGTH}, | |
318 | submitFieldName: 'tags[0][]' | |
319 | } | |
320 | ); | |
321 | }); | |
322 | </script> | |
323 | {/if} | |
324 | ||
b20c6ed6 MW |
325 | {event name='informationFields'} |
326 | ||
a5a4f02d MW |
327 | <dl{if $errorField == 'teaser'} class="formError"{/if}> |
328 | <dt><label for="teaser0">{lang}wcf.acp.article.teaser{/lang}</label></dt> | |
329 | <dd> | |
330 | <textarea name="teaser[0]" id="teaser0" rows="5">{if !$teaser[0]|empty}{$teaser[0]}{/if}</textarea> | |
331 | {if $errorField == 'teaser'} | |
332 | <small class="innerError"> | |
333 | {if $errorType == 'empty'} | |
334 | {lang}wcf.global.form.error.empty{/lang} | |
335 | {else} | |
336 | {lang}wcf.acp.article.teaser.error.{@$errorType}{/lang} | |
337 | {/if} | |
338 | </small> | |
339 | {/if} | |
340 | </dd> | |
341 | </dl> | |
342 | ||
343 | <dl{if $errorField == 'content'} class="formError"{/if}> | |
344 | <dt><label for="content0">{lang}wcf.acp.article.content{/lang}</label></dt> | |
345 | <dd> | |
21b3c837 | 346 | <textarea name="content[0]" id="content0" class="wysiwygTextarea" data-autosave="com.woltlab.wcf.article{$action|ucfirst}-{if $action == 'edit'}{@$articleID}{else}0{/if}-0">{if !$content[0]|empty}{$content[0]}{/if}</textarea> |
1ef73f36 AE |
347 | |
348 | {capture append='__redactorJavaScript'}, '{@$__wcf->getPath()}js/3rdParty/redactor2/plugins/WoltLabPage.js?v={@LAST_UPDATE_TIME}'{/capture} | |
349 | {capture append='__redactorConfig'} | |
350 | buttonOptions.woltlabPage = { icon: 'fa-file-text-o', title: '{lang}wcf.editor.button.page{/lang}' }; | |
351 | ||
352 | buttons.push('woltlabPage'); | |
353 | ||
354 | config.plugins.push('WoltLabPage'); | |
355 | {/capture} | |
356 | ||
a5a4f02d | 357 | {include file='wysiwyg' wysiwygSelector='content0'} |
1ef73f36 | 358 | |
a5a4f02d MW |
359 | {if $errorField == 'content'} |
360 | <small class="innerError"> | |
361 | {if $errorType == 'empty'} | |
362 | {lang}wcf.global.form.error.empty{/lang} | |
363 | {else} | |
364 | {lang}wcf.acp.article.content.error.{@$errorType}{/lang} | |
365 | {/if} | |
366 | </small> | |
367 | {/if} | |
368 | </dd> | |
369 | </dl> | |
b20c6ed6 MW |
370 | |
371 | {event name='messageFields'} | |
a5a4f02d MW |
372 | </div> |
373 | {else} | |
374 | <div class="section tabMenuContainer"> | |
375 | <nav class="tabMenu"> | |
376 | <ul> | |
377 | {foreach from=$availableLanguages item=availableLanguage} | |
378 | {assign var='containerID' value='language'|concat:$availableLanguage->languageID} | |
379 | <li><a href="{@$__wcf->getAnchor($containerID)}">{$availableLanguage->languageName}</a></li> | |
380 | {/foreach} | |
381 | </ul> | |
382 | </nav> | |
383 | ||
384 | {foreach from=$availableLanguages item=availableLanguage} | |
385 | <div id="language{@$availableLanguage->languageID}" class="tabMenuContent"> | |
386 | <div class="section"> | |
387 | {if $__wcf->session->getPermission('admin.content.cms.canUseMedia')} | |
388 | <dl{if $errorField == 'image'|concat:$availableLanguage->languageID} class="formError"{/if}> | |
389 | <dt><label for="image{@$availableLanguage->languageID}">{lang}wcf.acp.article.image{/lang}</label></dt> | |
390 | <dd> | |
391 | <div id="imageDisplay{@$availableLanguage->languageID}"> | |
f4d9e975 | 392 | {if $images[$availableLanguage->languageID]|isset && $images[$availableLanguage->languageID]->hasThumbnail('small')} |
a5a4f02d MW |
393 | {@$images[$availableLanguage->languageID]->getThumbnailTag('small')} |
394 | {/if} | |
395 | </div> | |
a9566c33 | 396 | <p class="button jsMediaSelectButton" data-store="imageID{@$availableLanguage->languageID}" data-display="imageDisplay{@$availableLanguage->languageID}">{lang}wcf.media.chooseImage{/lang}</p> |
e5f9b56c | 397 | <input type="hidden" name="imageID[{@$availableLanguage->languageID}]" id="imageID{@$availableLanguage->languageID}"{if $imageID[$availableLanguage->languageID]|isset} value="{@$imageID[$availableLanguage->languageID]}"{/if}> |
a5a4f02d MW |
398 | {if $errorField == 'image'|concat:$availableLanguage->languageID} |
399 | <small class="innerError">{lang}wcf.acp.article.image.error.{@$errorType}{/lang}</small> | |
400 | {/if} | |
401 | </dd> | |
402 | </dl> | |
f4d9e975 | 403 | {elseif $action == 'edit' && $images[$availableLanguage->languageID]|isset && $images[$availableLanguage->languageID]->hasThumbnail('small')} |
a5a4f02d MW |
404 | <dl> |
405 | <dt>{lang}wcf.acp.article.image{/lang}</dt> | |
406 | <dd> | |
407 | <div id="imageDisplay">{@$images[$availableLanguage->languageID]->getThumbnailTag('small')}</div> | |
408 | </dd> | |
409 | </dl> | |
410 | {/if} | |
411 | ||
79305986 MW |
412 | {if $__wcf->session->getPermission('admin.content.cms.canUseMedia')} |
413 | <dl{if $errorField == 'image'|concat:$availableLanguage->languageID} class="formError"{/if}> | |
414 | <dt><label for="teaserImage{@$availableLanguage->languageID}">{lang}wcf.acp.article.teaserImage{/lang}</label></dt> | |
415 | <dd> | |
416 | <div id="teaserImageDisplay{@$availableLanguage->languageID}"> | |
417 | {if $teaserImages[$availableLanguage->languageID]|isset && $teaserImages[$availableLanguage->languageID]->hasThumbnail('small')} | |
418 | {@$teaserImages[$availableLanguage->languageID]->getThumbnailTag('small')} | |
419 | {/if} | |
420 | </div> | |
421 | <p class="button jsMediaSelectButton" data-store="teaserImageID{@$availableLanguage->languageID}" data-display="teaserImageDisplay{@$availableLanguage->languageID}">{lang}wcf.media.chooseImage{/lang}</p> | |
422 | <input type="hidden" name="teaserImageID[{@$availableLanguage->languageID}]" id="teaserImageID{@$availableLanguage->languageID}"{if $teaserImageID[$availableLanguage->languageID]|isset} value="{@$teaserImageID[$availableLanguage->languageID]}"{/if}> | |
423 | {if $errorField == 'teaserImage'|concat:$availableLanguage->languageID} | |
424 | <small class="innerError">{lang}wcf.acp.article.image.error.{@$errorType}{/lang}</small> | |
425 | {/if} | |
426 | </dd> | |
427 | </dl> | |
428 | {elseif $action == 'edit' && $teaserImages[$availableLanguage->languageID]|isset && $teaserImages[$availableLanguage->languageID]->hasThumbnail('small')} | |
429 | <dl> | |
430 | <dt>{lang}wcf.acp.article.teaserImage{/lang}</dt> | |
431 | <dd> | |
432 | <div id="imageDisplay">{@$teaserImages[$availableLanguage->languageID]->getThumbnailTag('small')}</div> | |
433 | </dd> | |
434 | </dl> | |
435 | {/if} | |
436 | ||
a5a4f02d | 437 | <dl{if $errorField == 'title'|concat:$availableLanguage->languageID} class="formError"{/if}> |
dca8d159 | 438 | <dt><label for="title{@$availableLanguage->languageID}">{lang}wcf.global.title{/lang}</label></dt> |
a5a4f02d | 439 | <dd> |
04ef1206 | 440 | <input type="text" id="title{@$availableLanguage->languageID}" name="title[{@$availableLanguage->languageID}]" value="{if !$title[$availableLanguage->languageID]|empty}{$title[$availableLanguage->languageID]}{/if}" class="long" maxlength="255"> |
a5a4f02d MW |
441 | {if $errorField == 'title'|concat:$availableLanguage->languageID} |
442 | <small class="innerError"> | |
443 | {if $errorType == 'empty'} | |
444 | {lang}wcf.global.form.error.empty{/lang} | |
445 | {else} | |
446 | {lang}wcf.acp.article.title.error.{@$errorType}{/lang} | |
447 | {/if} | |
448 | </small> | |
449 | {/if} | |
450 | </dd> | |
451 | </dl> | |
452 | ||
453 | {if MODULE_TAGGING} | |
454 | <dl class="jsOnly"> | |
455 | <dt><label for="tagSearchInput{@$availableLanguage->languageID}">{lang}wcf.tagging.tags{/lang}</label></dt> | |
456 | <dd> | |
e5f9b56c | 457 | <input id="tagSearchInput{@$availableLanguage->languageID}" type="text" value="" class="long"> |
a5a4f02d MW |
458 | <small>{lang}wcf.tagging.tags.description{/lang}</small> |
459 | </dd> | |
460 | </dl> | |
461 | ||
462 | <script data-relocate="true"> | |
58d7e8f8 | 463 | require(['WoltLabSuite/Core/Ui/ItemList'], function(UiItemList) { |
a5a4f02d MW |
464 | UiItemList.init( |
465 | 'tagSearchInput{@$availableLanguage->languageID}', | |
8e870ecd | 466 | [{if !$tags[$availableLanguage->languageID]|empty}{implode from=$tags[$availableLanguage->languageID] item=tag}'{@$tag|encodeJS}'{/implode}{/if}], |
a5a4f02d MW |
467 | { |
468 | ajax: { | |
469 | className: 'wcf\\data\\tag\\TagAction' | |
470 | }, | |
471 | maxLength: {@TAGGING_MAX_TAG_LENGTH}, | |
472 | submitFieldName: 'tags[{@$availableLanguage->languageID}][]' | |
473 | } | |
474 | ); | |
475 | }); | |
476 | </script> | |
477 | {/if} | |
478 | ||
b20c6ed6 MW |
479 | {event name='informationFieldsMultilingual'} |
480 | ||
a5a4f02d MW |
481 | <dl{if $errorField == 'teaser'|concat:$availableLanguage->languageID} class="formError"{/if}> |
482 | <dt><label for="teaser{@$availableLanguage->languageID}">{lang}wcf.acp.article.teaser{/lang}</label></dt> | |
483 | <dd> | |
484 | <textarea name="teaser[{@$availableLanguage->languageID}]" id="teaser{@$availableLanguage->languageID}" rows="5">{if !$teaser[$availableLanguage->languageID]|empty}{$teaser[$availableLanguage->languageID]}{/if}</textarea> | |
485 | {if $errorField == 'teaser'|concat:$availableLanguage->languageID} | |
486 | <small class="innerError"> | |
487 | {if $errorType == 'empty'} | |
488 | {lang}wcf.global.form.error.empty{/lang} | |
489 | {else} | |
490 | {lang}wcf.acp.article.teaser.error.{@$errorType}{/lang} | |
491 | {/if} | |
492 | </small> | |
493 | {/if} | |
494 | </dd> | |
495 | </dl> | |
496 | ||
497 | <dl{if $errorField == 'content'|concat:$availableLanguage->languageID} class="formError"{/if}> | |
498 | <dt><label for="content{@$availableLanguage->languageID}">{lang}wcf.acp.article.content{/lang}</label></dt> | |
499 | <dd> | |
21b3c837 | 500 | <textarea name="content[{@$availableLanguage->languageID}]" id="content{@$availableLanguage->languageID}" class="wysiwygTextarea" data-autosave="com.woltlab.wcf.article{$action|ucfirst}-{if $action == 'edit'}{@$articleID}{else}0{/if}-{@$availableLanguage->languageID}">{if !$content[$availableLanguage->languageID]|empty}{$content[$availableLanguage->languageID]}{/if}</textarea> |
1ef73f36 AE |
501 | |
502 | {capture append='__redactorJavaScript'}, '{@$__wcf->getPath()}js/3rdParty/redactor2/plugins/WoltLabPage.js?v={@LAST_UPDATE_TIME}'{/capture} | |
503 | {capture append='__redactorConfig'} | |
504 | buttonOptions.woltlabPage = { icon: 'fa-file-text-o', title: '{lang}wcf.editor.button.page{/lang}' }; | |
505 | ||
506 | buttons.push('woltlabPage'); | |
507 | ||
508 | config.plugins.push('WoltLabPage'); | |
509 | {/capture} | |
510 | ||
a5a4f02d | 511 | {include file='wysiwyg' wysiwygSelector='content'|concat:$availableLanguage->languageID} |
1ef73f36 | 512 | |
a5a4f02d MW |
513 | {if $errorField == 'content'|concat:$availableLanguage->languageID} |
514 | <small class="innerError"> | |
515 | {if $errorType == 'empty'} | |
516 | {lang}wcf.global.form.error.empty{/lang} | |
517 | {else} | |
518 | {lang}wcf.acp.article.content.error.{@$errorType}{/lang} | |
519 | {/if} | |
520 | </small> | |
521 | {/if} | |
522 | </dd> | |
523 | </dl> | |
b20c6ed6 MW |
524 | |
525 | {event name='messageFieldsMultilingual'} | |
a5a4f02d MW |
526 | </div> |
527 | </div> | |
528 | {/foreach} | |
529 | </div> | |
530 | {/if} | |
531 | ||
b20c6ed6 MW |
532 | {event name='sections'} |
533 | ||
a5a4f02d MW |
534 | <div class="formSubmit"> |
535 | <input type="submit" value="{lang}wcf.global.button.submit{/lang}" accesskey="s"> | |
536 | <input type="hidden" name="isMultilingual" value="{@$isMultilingual}"> | |
90a219d3 | 537 | <input type="hidden" name="timeNowReference" value="{@TIME_NOW}"> |
a5a4f02d MW |
538 | {@SECURITY_TOKEN_INPUT_TAG} |
539 | </div> | |
540 | </form> | |
541 | ||
1177a643 MW |
542 | {js application='wcf' file='WCF.Label' bundle='WCF.Combined'} |
543 | <script data-relocate="true"> | |
544 | $(function() { | |
545 | WCF.Language.addObject({ | |
546 | 'wcf.label.none': '{lang}wcf.label.none{/lang}', | |
547 | }); | |
548 | ||
549 | {if !$labelGroups|empty} | |
550 | new WCF.Label.ArticleLabelChooser({ {implode from=$labelGroupsToCategories key=__labelCategoryID item=labelGroupIDs}{@$__labelCategoryID}: [ {implode from=$labelGroupIDs item=labelGroupID}{@$labelGroupID}{/implode} ] {/implode} }, { {implode from=$labelIDs key=groupID item=labelID}{@$groupID}: {@$labelID}{/implode} }, '.articleAddForm'); | |
551 | {/if} | |
552 | }); | |
553 | </script> | |
554 | ||
a5a4f02d | 555 | {include file='footer'} |