1 {include file='header' pageTitle='wcf.acp.box.'|concat:$action}
3 <script data-relocate="true">
4 {if $__wcf->session->getPermission('admin.content.cms.canUseMedia')}{include file='mediaJavaScript'}{/if}
6 {if $boxType == 'system'}
7 require(['WoltLabSuite/Core/Acp/Ui/Box/Controller/Handler'], function(AcpUiBoxControllerHandler) {
8 AcpUiBoxControllerHandler.init({if $boxController}{@$boxController->objectTypeID}{/if});
12 require(['Dictionary', 'Language', 'WoltLabSuite/Core/Acp/Ui/Box/Handler'], function(Dictionary, Language, AcpUiBoxHandler) {
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}',
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}',
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}'
30 var handlers = new Dictionary();
31 {foreach from=$pageHandlers key=handlerPageID item=requireObjectID}
32 handlers.set({@$handlerPageID}, {if $requireObjectID}true{else}false{/if});
35 AcpUiBoxHandler.init(handlers, '{$boxType}');
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}',
47 {if $action === 'edit'}
48 require(['Language', 'WoltLabSuite/Core/Acp/Ui/Box/Copy'], function (Language, AcpUiBoxCopy) {
50 'wcf.acp.box.copy': '{jslang}wcf.acp.box.copy{/jslang}'
58 {if $action === 'edit'}
59 <div id="acpBoxCopyDialog" style="display: none">
61 {lang}wcf.acp.box.copy.description{/lang}
64 <div class="formSubmit">
65 <a href="{link controller='BoxAdd' presetBoxID=$box->boxID}{/link}" class="button buttonPrimary">{lang}wcf.global.button.submit{/lang}</a>
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>
75 <nav class="contentHeaderNavigation">
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>
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>
82 {event name='contentHeaderNavigation'}
87 {include file='formNotice'}
89 {if $action == 'edit' && !$lastVersion|empty}
90 <p class="info">{lang}wcf.acp.box.lastVersion{/lang}</p>
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">
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>
102 {event name='tabMenuTabs'}
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>
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}
117 {lang}wcf.acp.box.name.error.{@$errorType}{/lang}
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>
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>
134 {if $errorField == 'boxType'}
135 <small class="innerError">
136 {if $errorType == 'empty'}
137 {lang}wcf.global.form.error.empty{/lang}
139 {lang}wcf.acp.box.boxController.error.{@$errorType}{/lang}
147 <dl{if $errorField == 'position'} class="formError"{/if}>
148 <dt><label for="position">{lang}wcf.acp.box.position{/lang}</label></dt>
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>
156 {if $errorField == 'position'}
157 <small class="innerError">
158 {if $errorType == 'empty'}
159 {lang}wcf.global.form.error.empty{/lang}
161 {lang}wcf.acp.box.position.error.{@$errorType}{/lang}
169 <dt><label for="showOrder">{lang}wcf.global.showOrder{/lang}</label></dt>
171 <input type="number" id="showOrder" name="showOrder" value="{@$showOrder}" class="tiny" min="0">
175 <dl{if $errorField == 'cssClassName'} class="formError"{/if}>
176 <dt><label for="cssClassName">{lang}wcf.acp.box.cssClassName{/lang}</label></dt>
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}
184 {lang}wcf.acp.box.cssClassName.error.{@$errorType}{/lang}
194 <label><input type="checkbox" id="showHeader" name="showHeader" value="1"{if $showHeader} checked{/if}> {lang}wcf.acp.box.showHeader{/lang}</label>
201 <label><input type="checkbox" id="isDisabled" name="isDisabled" value="1"{if $isDisabled} checked{/if}> {lang}wcf.acp.box.isDisabled{/lang}</label>
205 {event name='dataFields'}
208 {if $boxType === 'system'}
209 <input type="hidden" name="linkType" value="none">
211 <section class="section">
212 <h2 class="sectionTitle">{lang}wcf.acp.box.link{/lang}</h2>
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>
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>
226 <select name="linkPageID" id="linkPageID">
227 <option value="0">{lang}wcf.global.noSelection{/lang}</option>
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}{@" "|str_repeat:($pageNode->getDepth() - 1)}{/if}{$pageNode->name}</option>
233 {if $errorField == 'linkPageID'}
234 <small class="innerError">
235 {if $errorType == 'empty'}
236 {lang}wcf.global.form.error.empty{/lang}
238 {lang}wcf.acp.box.linkPageID.error.{@$errorType}{/lang}
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>
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>
252 {if $errorField == 'linkPageObjectID'}
253 <small class="innerError">
254 {if $errorType == 'empty'}
255 {lang}wcf.global.form.error.empty{/lang}
257 {lang}wcf.acp.box.linkPageObjectID.error.{@$errorType}{/lang}
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>
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}
273 {lang}wcf.acp.box.link.externalURL.error.{$errorType}{/lang}
280 {event name='linkFields'}
284 <div id="boxConditions">
285 {if $boxController && $boxController->getProcessor()|is_subclass_of:'wcf\system\box\IConditionBoxController'}
286 {@$boxController->getProcessor()->getConditionsTemplate()}
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>
298 <div id="imageDisplay" class="selectedImagePreview">
299 {if $images[0]|isset && $images[0]->hasThumbnail('small')}
300 {@$images[0]->getThumbnailTag('small')}
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>
310 {elseif $action == 'edit' && $images[0]|isset && $images[0]->hasThumbnail('small')}
312 <dt>{lang}wcf.acp.box.image{/lang}</dt>
314 <div id="imageDisplay">{@$images[0]->getThumbnailTag('small')}</div>
319 <dl{if $errorField == 'title'} class="formError"{/if}>
320 <dt><label for="title0">{lang}wcf.global.title{/lang}</label></dt>
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}
328 {lang}wcf.acp.box.title.error.{@$errorType}{/lang}
335 <dl{if $errorField == 'content'} class="formError"{/if}>
336 <dt><label for="content0">{lang}wcf.acp.box.content{/lang}</label></dt>
338 {include file='__boxAddContent' languageID=0}
340 {if $errorField == 'content'}
341 <small class="innerError">
342 {if $errorType == 'empty'}
343 {lang}wcf.global.form.error.empty{/lang}
345 {lang}wcf.acp.box.content.error.{@$errorType}{/lang}
353 {if $boxType == 'text'}
354 {include file='messageFormTabs' wysiwygContainerID='content0'}
357 <div class="tabMenuContainer">
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>
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>
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')}
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>
387 {elseif $action == 'edit' && $images[$availableLanguage->languageID]|isset && $images[$availableLanguage->languageID]->hasThumbnail('small')}
389 <dt>{lang}wcf.acp.box.image{/lang}</dt>
391 <div id="imageDisplay">{@$images[$availableLanguage->languageID]->getThumbnailTag('small')}</div>
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>
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}
406 {lang}wcf.acp.box.title.error.{@$errorType}{/lang}
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>
417 {include file='__boxAddContent' languageID=$availableLanguage->languageID}
419 {if $errorField == 'content'|concat:$availableLanguage->languageID}
420 <small class="innerError">
421 {if $errorType == 'empty'}
422 {lang}wcf.global.form.error.empty{/lang}
424 {lang}wcf.acp.box.content.error.{@$errorType}{/lang}
431 {if $boxType == 'text'}
432 {include file='messageFormTabs' wysiwygContainerID='content'|concat:$availableLanguage->languageID}
442 <div id="pages" class="tabMenuContent">
443 <div class="section">
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() {
451 var visibilityExceptionHidden = elById('visibilityExceptionHidden');
452 var visibilityExceptionVisible = elById('visibilityExceptionVisible');
454 elById('visibleEverywhere').addEventListener('change', function() {
455 window[this.checked ? 'elShow' : 'elHide'](visibilityExceptionHidden);
456 window[this.checked ? 'elHide' : 'elShow'](visibilityExceptionVisible);
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>
469 {include file='scrollablePageCheckboxList' pageCheckboxListContainerID='boxVisibilitySettings' pageCheckboxID='pageIDs'}
475 <div id="acl" class="tabMenuContent">
476 {include file='aclSimple'}
479 {event name='tabMenuContents'}
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}
490 {include file='footer'}