Merge branch '5.2' into 5.3
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / acp / templates / boxAdd.tpl
1 {include file='header' pageTitle='wcf.acp.box.'|concat:$action}
2
3 <script data-relocate="true">
4 {if $__wcf->session->getPermission('admin.content.cms.canUseMedia')}{include file='mediaJavaScript'}{/if}
5
6 {if $boxType == 'system'}
7 require(['WoltLabSuite/Core/Acp/Ui/Box/Controller/Handler'], function(AcpUiBoxControllerHandler) {
8 AcpUiBoxControllerHandler.init({if $boxController}{@$boxController->objectTypeID}{/if});
9 });
10 {/if}
11
12 require(['Dictionary', 'Language', 'WoltLabSuite/Core/Acp/Ui/Box/Handler'], function(Dictionary, Language, AcpUiBoxHandler) {
13 Language.addObject({
14 'wcf.page.pageObjectID': '{jslang}wcf.page.pageObjectID{/jslang}',
15 {foreach from=$pageNodeList item=pageNode}
16 {capture assign='pageObjectIDLanguageItem'}{lang __optional=true}wcf.page.pageObjectID.{@$pageNode->identifier}{/lang}{/capture}
17 {if $pageObjectIDLanguageItem}
18 'wcf.page.pageObjectID.{@$pageNode->identifier}': '{@$pageObjectIDLanguageItem|encodeJS}',
19 {/if}
20 {capture assign='pageObjectIDLanguageItem'}{lang __optional=true}wcf.page.pageObjectID.search.{@$pageNode->identifier}{/lang}{/capture}
21 {if $pageObjectIDLanguageItem}
22 'wcf.page.pageObjectID.search.{@$pageNode->identifier}': '{@$pageObjectIDLanguageItem|encodeJS}',
23 {/if}
24 {/foreach}
25 'wcf.page.pageObjectID.search.noResults': '{jslang}wcf.page.pageObjectID.search.noResults{/jslang}',
26 'wcf.page.pageObjectID.search.results': '{jslang}wcf.page.pageObjectID.search.results{/jslang}',
27 'wcf.page.pageObjectID.search.terms': '{jslang}wcf.page.pageObjectID.search.terms{/jslang}'
28 });
29
30 var handlers = new Dictionary();
31 {foreach from=$pageHandlers key=handlerPageID item=requireObjectID}
32 handlers.set({@$handlerPageID}, {if $requireObjectID}true{else}false{/if});
33 {/foreach}
34
35 AcpUiBoxHandler.init(handlers, '{$boxType}');
36 });
37
38 {if $__wcf->session->getPermission('admin.content.cms.canUseMedia')}
39 require(['WoltLabSuite/Core/Media/Manager/Select'], function(MediaManagerSelect) {
40 new MediaManagerSelect({
41 dialogTitle: '{jslang}wcf.media.chooseImage{/jslang}',
42 imagesOnly: 1
43 });
44 });
45 {/if}
46
47 {if $action === 'edit'}
48 require(['Language', 'WoltLabSuite/Core/Acp/Ui/Box/Copy'], function (Language, AcpUiBoxCopy) {
49 Language.addObject({
50 'wcf.acp.box.copy': '{jslang}wcf.acp.box.copy{/jslang}'
51 });
52
53 AcpUiBoxCopy.init();
54 });
55 {/if}
56 </script>
57
58 {if $action === 'edit'}
59 <div id="acpBoxCopyDialog" style="display: none">
60 <div>
61 {lang}wcf.acp.box.copy.description{/lang}
62 </div>
63
64 <div class="formSubmit">
65 <a href="{link controller='BoxAdd' presetBoxID=$box->boxID}{/link}" class="button buttonPrimary">{lang}wcf.global.button.submit{/lang}</a>
66 </div>
67 </div>
68 {/if}
69
70 <header class="contentHeader">
71 <div class="contentHeaderTitle">
72 <h1 class="contentTitle">{if $action == 'add'}{lang}wcf.acp.box.add{/lang}{else}{lang}wcf.acp.box.edit{/lang}{/if}</h1>
73 </div>
74
75 <nav class="contentHeaderNavigation">
76 <ul>
77 {if $action === 'edit'}
78 <li><a href="#" class="button jsButtonCopyBox"><span class="icon icon16 fa-copy"></span> {lang}wcf.acp.box.button.copyBox{/lang}</a></li>
79 {/if}
80 <li><a href="{link controller='BoxList'}{/link}" class="button"><span class="icon icon16 fa-list"></span> <span>{lang}wcf.acp.menu.link.cms.box.list{/lang}</span></a></li>
81
82 {event name='contentHeaderNavigation'}
83 </ul>
84 </nav>
85 </header>
86
87 {include file='formNotice'}
88
89 {if $action == 'edit' && !$lastVersion|empty}
90 <p class="info">{lang}wcf.acp.box.lastVersion{/lang}</p>
91 {/if}
92
93 <form id="formContainer" method="post" action="{if $action == 'add'}{link controller='BoxAdd'}{/link}{else}{link controller='BoxEdit' id=$boxID}{/link}{/if}">
94 <div class="section tabMenuContainer" data-active="{$activeTabMenuItem}" data-store="activeTabMenuItem" id="pageTabMenuContainer">
95 <nav class="tabMenu">
96 <ul>
97 <li><a href="{@$__wcf->getAnchor('general')}">{lang}wcf.global.form.data{/lang}</a></li>
98 <li><a href="{@$__wcf->getAnchor('contents')}">{lang}wcf.acp.box.contents{/lang}</a></li>
99 <li><a href="{@$__wcf->getAnchor('pages')}">{lang}wcf.acp.page.list{/lang}</a></li>
100 <li><a href="{@$__wcf->getAnchor('acl')}">{lang}wcf.acl.access{/lang}</a></li>
101
102 {event name='tabMenuTabs'}
103 </ul>
104 </nav>
105
106 <div id="general" class="tabMenuContent">
107 <div class="section">
108 <dl{if $errorField == 'name'} class="formError"{/if}>
109 <dt><label for="name">{lang}wcf.global.name{/lang}</label></dt>
110 <dd>
111 <input type="text" id="name" name="name" value="{$name}" autofocus class="long" maxlength="255">
112 {if $errorField == 'name'}
113 <small class="innerError">
114 {if $errorType == 'empty'}
115 {lang}wcf.global.form.error.empty{/lang}
116 {else}
117 {lang}wcf.acp.box.name.error.{@$errorType}{/lang}
118 {/if}
119 </small>
120 {/if}
121 </dd>
122 </dl>
123
124 {if $boxType == 'system'}
125 <dl id="boxControllerContainer"{if $errorField == 'boxControllerID'} class="formError"{/if}{if !$boxController} style="display: none;"{/if}>
126 <dt><label for="boxControllerID">{lang}wcf.acp.box.boxController{/lang}</label></dt>
127 <dd>
128 <select name="boxControllerID" id="boxControllerID">
129 {foreach from=$availableBoxControllers item=availableBoxController}
130 <option value="{@$availableBoxController->objectTypeID}"{if $boxController && $availableBoxController->objectTypeID == $boxController->objectTypeID} selected{/if} data-supported-positions='[{implode from=$availableBoxPositions[$availableBoxController->objectTypeID] item=$__position}"{$__position}"{/implode}]'>{lang}wcf.acp.box.boxController.{@$availableBoxController->objectType}{/lang}</option>
131 {/foreach}
132 </select>
133
134 {if $errorField == 'boxType'}
135 <small class="innerError">
136 {if $errorType == 'empty'}
137 {lang}wcf.global.form.error.empty{/lang}
138 {else}
139 {lang}wcf.acp.box.boxController.error.{@$errorType}{/lang}
140 {/if}
141 </small>
142 {/if}
143 </dd>
144 </dl>
145 {/if}
146
147 <dl{if $errorField == 'position'} class="formError"{/if}>
148 <dt><label for="position">{lang}wcf.acp.box.position{/lang}</label></dt>
149 <dd>
150 <select name="position" id="position">
151 {foreach from=$availablePositions item=availablePosition}
152 <option value="{@$availablePosition}"{if $availablePosition == $position} selected{/if}>{lang}wcf.acp.box.position.{@$availablePosition}{/lang}</option>
153 {/foreach}
154 </select>
155
156 {if $errorField == 'position'}
157 <small class="innerError">
158 {if $errorType == 'empty'}
159 {lang}wcf.global.form.error.empty{/lang}
160 {else}
161 {lang}wcf.acp.box.position.error.{@$errorType}{/lang}
162 {/if}
163 </small>
164 {/if}
165 </dd>
166 </dl>
167
168 <dl>
169 <dt><label for="showOrder">{lang}wcf.global.showOrder{/lang}</label></dt>
170 <dd>
171 <input type="number" id="showOrder" name="showOrder" value="{@$showOrder}" class="tiny" min="0">
172 </dd>
173 </dl>
174
175 <dl{if $errorField == 'cssClassName'} class="formError"{/if}>
176 <dt><label for="cssClassName">{lang}wcf.acp.box.cssClassName{/lang}</label></dt>
177 <dd>
178 <input type="text" id="cssClassName" name="cssClassName" value="{$cssClassName}" class="long" maxlength="255">
179 {if $errorField == 'cssClassName'}
180 <small class="innerError">
181 {if $errorType == 'empty'}
182 {lang}wcf.global.form.error.empty{/lang}
183 {else}
184 {lang}wcf.acp.box.cssClassName.error.{@$errorType}{/lang}
185 {/if}
186 </small>
187 {/if}
188 </dd>
189 </dl>
190
191 <dl>
192 <dt></dt>
193 <dd>
194 <label><input type="checkbox" id="showHeader" name="showHeader" value="1"{if $showHeader} checked{/if}> {lang}wcf.acp.box.showHeader{/lang}</label>
195 </dd>
196 </dl>
197
198 <dl>
199 <dt></dt>
200 <dd>
201 <label><input type="checkbox" id="isDisabled" name="isDisabled" value="1"{if $isDisabled} checked{/if}> {lang}wcf.acp.box.isDisabled{/lang}</label>
202 </dd>
203 </dl>
204
205 {event name='dataFields'}
206 </div>
207
208 {if $boxType === 'system'}
209 <input type="hidden" name="linkType" value="none">
210 {else}
211 <section class="section">
212 <h2 class="sectionTitle">{lang}wcf.acp.box.link{/lang}</h2>
213
214 <dl>
215 <dt></dt>
216 <dd class="floated">
217 <label><input type="radio" name="linkType" value="none"{if $linkType == 'none'} checked{/if}> {lang}wcf.acp.box.linkType.none{/lang}</label>
218 <label><input type="radio" name="linkType" value="internal"{if $linkType == 'internal'} checked{/if}> {lang}wcf.acp.box.linkType.internal{/lang}</label>
219 <label><input type="radio" name="linkType" value="external"{if $linkType == 'external'} checked{/if}> {lang}wcf.acp.box.linkType.external{/lang}</label>
220 </dd>
221 </dl>
222
223 <dl id="linkPageIDContainer"{if $errorField == 'linkPageID'} class="formError"{/if}{if $linkType != 'internal'} style="display: none;"{/if}>
224 <dt><label for="linkPageID">{lang}wcf.acp.page.page{/lang}</label></dt>
225 <dd>
226 <select name="linkPageID" id="linkPageID">
227 <option value="0">{lang}wcf.global.noSelection{/lang}</option>
228
229 {foreach from=$pageNodeList item=pageNode}
230 <option value="{@$pageNode->pageID}"{if $pageNode->pageID == $linkPageID} selected{/if} data-identifier="{@$pageNode->identifier}">{if $pageNode->getDepth() > 1}{@"&nbsp;&nbsp;&nbsp;&nbsp;"|str_repeat:($pageNode->getDepth() - 1)}{/if}{$pageNode->name}</option>
231 {/foreach}
232 </select>
233 {if $errorField == 'linkPageID'}
234 <small class="innerError">
235 {if $errorType == 'empty'}
236 {lang}wcf.global.form.error.empty{/lang}
237 {else}
238 {lang}wcf.acp.box.linkPageID.error.{@$errorType}{/lang}
239 {/if}
240 </small>
241 {/if}
242 </dd>
243 </dl>
244
245 <dl id="linkPageObjectIDContainer"{if $errorField == 'linkPageObjectID'} class="formError"{/if}{if !$linkPageID || !$pageHandler[$linkPageID]|isset} style="display: none;"{/if}>
246 <dt><label for="linkPageObjectID">{lang}wcf.page.pageObjectID{/lang}</label></dt>
247 <dd>
248 <div class="inputAddon">
249 <input type="text" id="linkPageObjectID" name="linkPageObjectID" value="{$linkPageObjectID}" class="short">
250 <a href="#" id="searchLinkPageObjectID" class="inputSuffix button jsTooltip" title="{lang}wcf.page.pageObjectID.search{/lang}"><span class="icon icon16 fa-search"></span></a>
251 </div>
252 {if $errorField == 'linkPageObjectID'}
253 <small class="innerError">
254 {if $errorType == 'empty'}
255 {lang}wcf.global.form.error.empty{/lang}
256 {else}
257 {lang}wcf.acp.box.linkPageObjectID.error.{@$errorType}{/lang}
258 {/if}
259 </small>
260 {/if}
261 </dd>
262 </dl>
263
264 <dl id="externalURLContainer"{if $errorField == 'externalURL'} class="formError"{/if}{if $linkType != 'external'} style="display: none;"{/if}>
265 <dt><label for="externalURL">{lang}wcf.acp.box.link.externalURL{/lang}</label></dt>
266 <dd>
267 <input type="text" name="externalURL" id="externalURL" value="{$externalURL}" class="long" maxlength="255" placeholder="http://">
268 {if $errorField == 'externalURL'}
269 <small class="innerError">
270 {if $errorType == 'empty'}
271 {lang}wcf.global.form.error.empty{/lang}
272 {else}
273 {lang}wcf.acp.box.link.externalURL.error.{$errorType}{/lang}
274 {/if}
275 </small>
276 {/if}
277 </dd>
278 </dl>
279
280 {event name='linkFields'}
281 </section>
282 {/if}
283
284 <div id="boxConditions">
285 {if $boxController && $boxController->getProcessor()|is_subclass_of:'wcf\system\box\IConditionBoxController'}
286 {@$boxController->getProcessor()->getConditionsTemplate()}
287 {/if}
288 </div>
289 </div>
290
291 <div id="contents" class="tabMenuContent">
292 {if !$isMultilingual && $boxType != 'system'}
293 <div class="section">
294 {if $__wcf->session->getPermission('admin.content.cms.canUseMedia')}
295 <dl{if $errorField == 'image'} class="formError"{/if}>
296 <dt><label for="image">{lang}wcf.acp.box.image{/lang}</label></dt>
297 <dd>
298 <div id="imageDisplay" class="selectedImagePreview">
299 {if $images[0]|isset && $images[0]->hasThumbnail('small')}
300 {@$images[0]->getThumbnailTag('small')}
301 {/if}
302 </div>
303 <p class="button jsMediaSelectButton" data-store="imageID0" data-display="imageDisplay">{lang}wcf.media.chooseImage{/lang}</p>
304 <input type="hidden" name="imageID[0]" id="imageID0"{if $imageID[0]|isset} value="{@$imageID[0]}"{/if}>
305 {if $errorField == 'image'}
306 <small class="innerError">{lang}wcf.acp.box.image.error.{@$errorType}{/lang}</small>
307 {/if}
308 </dd>
309 </dl>
310 {elseif $action == 'edit' && $images[0]|isset && $images[0]->hasThumbnail('small')}
311 <dl>
312 <dt>{lang}wcf.acp.box.image{/lang}</dt>
313 <dd>
314 <div id="imageDisplay">{@$images[0]->getThumbnailTag('small')}</div>
315 </dd>
316 </dl>
317 {/if}
318
319 <dl{if $errorField == 'title'} class="formError"{/if}>
320 <dt><label for="title0">{lang}wcf.global.title{/lang}</label></dt>
321 <dd>
322 <input type="text" id="title0" name="title[0]" value="{if !$title[0]|empty}{$title[0]}{/if}" class="long" maxlength="255">
323 {if $errorField == 'title'}
324 <small class="innerError">
325 {if $errorType == 'empty'}
326 {lang}wcf.global.form.error.empty{/lang}
327 {else}
328 {lang}wcf.acp.box.title.error.{@$errorType}{/lang}
329 {/if}
330 </small>
331 {/if}
332 </dd>
333 </dl>
334
335 <dl{if $errorField == 'content'} class="formError"{/if}>
336 <dt><label for="content0">{lang}wcf.acp.box.content{/lang}</label></dt>
337 <dd>
338 {include file='__boxAddContent' languageID=0}
339
340 {if $errorField == 'content'}
341 <small class="innerError">
342 {if $errorType == 'empty'}
343 {lang}wcf.global.form.error.empty{/lang}
344 {else}
345 {lang}wcf.acp.box.content.error.{@$errorType}{/lang}
346 {/if}
347 </small>
348 {/if}
349 </dd>
350 </dl>
351 </div>
352
353 {if $boxType == 'text'}
354 {include file='messageFormTabs' wysiwygContainerID='content0'}
355 {/if}
356 {else}
357 <div class="tabMenuContainer">
358 <nav class="menu">
359 <ul>
360 {foreach from=$availableLanguages item=availableLanguage}
361 {assign var='containerID' value='language'|concat:$availableLanguage->languageID}
362 <li><a href="{@$__wcf->getAnchor($containerID)}">{$availableLanguage->languageName}</a></li>
363 {/foreach}
364 </ul>
365 </nav>
366
367 {foreach from=$availableLanguages item=availableLanguage}
368 <div id="language{@$availableLanguage->languageID}" class="tabMenuContent">
369 <div class="section">
370 {if $boxType != 'system'}
371 {if $__wcf->session->getPermission('admin.content.cms.canUseMedia')}
372 <dl{if $errorField == 'image'|concat:$availableLanguage->languageID} class="formError"{/if}>
373 <dt><label for="image{@$availableLanguage->languageID}">{lang}wcf.acp.box.image{/lang}</label></dt>
374 <dd>
375 <div id="imageDisplay{@$availableLanguage->languageID}" class="selectedImagePreview">
376 {if $images[$availableLanguage->languageID]|isset && $images[$availableLanguage->languageID]->hasThumbnail('small')}
377 {@$images[$availableLanguage->languageID]->getThumbnailTag('small')}
378 {/if}
379 </div>
380 <p class="button jsMediaSelectButton" data-store="imageID{@$availableLanguage->languageID}" data-display="imageDisplay{@$availableLanguage->languageID}">{lang}wcf.media.chooseImage{/lang}</p>
381 <input type="hidden" name="imageID[{@$availableLanguage->languageID}]" id="imageID{@$availableLanguage->languageID}"{if $imageID[$availableLanguage->languageID]|isset} value="{@$imageID[$availableLanguage->languageID]}"{/if}>
382 {if $errorField == 'image'|concat:$availableLanguage->languageID}
383 <small class="innerError">{lang}wcf.acp.box.image.error.{@$errorType}{/lang}</small>
384 {/if}
385 </dd>
386 </dl>
387 {elseif $action == 'edit' && $images[$availableLanguage->languageID]|isset && $images[$availableLanguage->languageID]->hasThumbnail('small')}
388 <dl>
389 <dt>{lang}wcf.acp.box.image{/lang}</dt>
390 <dd>
391 <div id="imageDisplay">{@$images[$availableLanguage->languageID]->getThumbnailTag('small')}</div>
392 </dd>
393 </dl>
394 {/if}
395 {/if}
396
397 <dl{if $errorField == 'title'|concat:$availableLanguage->languageID} class="formError"{/if}>
398 <dt><label for="title{@$availableLanguage->languageID}">{lang}wcf.global.title{/lang}</label></dt>
399 <dd>
400 <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">
401 {if $errorField == 'title'|concat:$availableLanguage->languageID}
402 <small class="innerError">
403 {if $errorType == 'empty'}
404 {lang}wcf.global.form.error.empty{/lang}
405 {else}
406 {lang}wcf.acp.box.title.error.{@$errorType}{/lang}
407 {/if}
408 </small>
409 {/if}
410 </dd>
411 </dl>
412
413 {if $boxType != 'system'}
414 <dl{if $errorField == 'content'|concat:$availableLanguage->languageID} class="formError"{/if}>
415 <dt><label for="content{@$availableLanguage->languageID}">{lang}wcf.acp.box.content{/lang}</label></dt>
416 <dd>
417 {include file='__boxAddContent' languageID=$availableLanguage->languageID}
418
419 {if $errorField == 'content'|concat:$availableLanguage->languageID}
420 <small class="innerError">
421 {if $errorType == 'empty'}
422 {lang}wcf.global.form.error.empty{/lang}
423 {else}
424 {lang}wcf.acp.box.content.error.{@$errorType}{/lang}
425 {/if}
426 </small>
427 {/if}
428 </dd>
429 </dl>
430
431 {if $boxType == 'text'}
432 {include file='messageFormTabs' wysiwygContainerID='content'|concat:$availableLanguage->languageID}
433 {/if}
434 {/if}
435 </div>
436 </div>
437 {/foreach}
438 </div>
439 {/if}
440 </div>
441
442 <div id="pages" class="tabMenuContent">
443 <div class="section">
444 <dl>
445 <dt></dt>
446 <dd>
447 <label><input type="checkbox" id="visibleEverywhere" name="visibleEverywhere" value="1"{if $visibleEverywhere} checked{/if}> {lang}wcf.acp.box.visibleEverywhere{/lang}</label>
448 <script data-relocate="true">
449 require([], function() {
450 // visibility toggle
451 var visibilityExceptionHidden = elById('visibilityExceptionHidden');
452 var visibilityExceptionVisible = elById('visibilityExceptionVisible');
453
454 elById('visibleEverywhere').addEventListener('change', function() {
455 window[this.checked ? 'elShow' : 'elHide'](visibilityExceptionHidden);
456 window[this.checked ? 'elHide' : 'elShow'](visibilityExceptionVisible);
457 });
458 });
459 </script>
460 </dd>
461 </dl>
462
463 <dl>
464 <dt>
465 <span id="visibilityExceptionVisible"{if $visibleEverywhere} style="display: none"{/if}>{lang}wcf.acp.box.visibilityException.visible{/lang}</span>
466 <span id="visibilityExceptionHidden"{if !$visibleEverywhere} style="display: none"{/if}>{lang}wcf.acp.box.visibilityException.hidden{/lang}</span>
467 </dt>
468 <dd>
469 {include file='scrollablePageCheckboxList' pageCheckboxListContainerID='boxVisibilitySettings' pageCheckboxID='pageIDs'}
470 </dd>
471 </dl>
472 </div>
473 </div>
474
475 <div id="acl" class="tabMenuContent">
476 {include file='aclSimple'}
477 </div>
478
479 {event name='tabMenuContents'}
480 </div>
481
482 <div class="formSubmit">
483 <input type="submit" value="{lang}wcf.global.button.submit{/lang}" accesskey="s">
484 <input type="hidden" name="isMultilingual" value="{@$isMultilingual}">
485 <input type="hidden" name="boxType" value="{$boxType}">
486 {@SECURITY_TOKEN_INPUT_TAG}
487 </div>
488 </form>
489
490 {include file='footer'}