diff --git a/com.woltlab.wcf/acpTemplateDelete.xml b/com.woltlab.wcf/acpTemplateDelete.xml index cd0a81857b0..faf5bd67a08 100644 --- a/com.woltlab.wcf/acpTemplateDelete.xml +++ b/com.woltlab.wcf/acpTemplateDelete.xml @@ -164,5 +164,8 @@ + + + diff --git a/com.woltlab.wcf/bbcode.xml b/com.woltlab.wcf/bbcode.xml index 20871e88582..3d4c6c554c9 100644 --- a/com.woltlab.wcf/bbcode.xml +++ b/com.woltlab.wcf/bbcode.xml @@ -202,6 +202,16 @@ + + wcf\system\bbcode\WoltLabSuiteMediaGalleryBBCode + 1 + + + + 1 + + + wcf\system\bbcode\WoltLabSuitePageBBCode diff --git a/com.woltlab.wcf/clipboardAction.xml b/com.woltlab.wcf/clipboardAction.xml index 21ffa86a7bf..0f600feb49a 100644 --- a/com.woltlab.wcf/clipboardAction.xml +++ b/com.woltlab.wcf/clipboardAction.xml @@ -1,35 +1,17 @@ - + wcf\system\clipboard\action\MediaClipboardAction - 1 - - menuManagerDialog-editor - wcf\system\clipboard\action\MediaClipboardAction - 2 - - wcf\acp\page\MediaListPage - menuManagerDialog-editor - menuManagerDialog-select - wcf\system\clipboard\action\MediaClipboardAction - 3 - - wcf\acp\page\MediaListPage - menuManagerDialog-editor - menuManagerDialog-select - - - wcf\system\clipboard\action\UserClipboardAction diff --git a/com.woltlab.wcf/fileDelete.xml b/com.woltlab.wcf/fileDelete.xml index be6ebaf4e9a..6f093ed6895 100644 --- a/com.woltlab.wcf/fileDelete.xml +++ b/com.woltlab.wcf/fileDelete.xml @@ -26,6 +26,17 @@ js/WoltLabSuite/Core/Acp/Ui/User/Content/Remove/Handler.js js/WoltLabSuite/Core/Ui/User/Editor.js js/WoltLabSuite/Core/Ui/User/Trophy/List.js + js/WoltLabSuite/Core/Controller/Media/List.js + js/WoltLabSuite/Core/Media/List/Upload.js + js/WoltLabSuite/Core/Media/Clipboard.js + js/WoltLabSuite/Core/Media/Editor.js + js/WoltLabSuite/Core/Media/Manager/Base.js + js/WoltLabSuite/Core/Media/Manager/Search.js + js/WoltLabSuite/Core/Media/Replace.js + js/WoltLabSuite/Core/Media/Upload.js + lib/system/clipboard/action/MediaClipboardAction.class.php + lib/system/upload/MediaReplaceUploadFileValidationStrategy.class.php + lib/system/upload/MediaUploadFileValidationStrategy.class.php lib/acp/action/UserQuickSearchAction.class.php lib/acp/form/UserSearchForm.class.php lib/data/user/UserContentAction.class.php diff --git a/com.woltlab.wcf/objectType.xml b/com.woltlab.wcf/objectType.xml index 4a1cc9cdac9..9680b6b5f35 100644 --- a/com.woltlab.wcf/objectType.xml +++ b/com.woltlab.wcf/objectType.xml @@ -1,13 +1,6 @@ - - - com.woltlab.wcf.media - com.woltlab.wcf.clipboardItem - wcf\data\media\ViewableMediaList - - com.woltlab.wcf.article.category @@ -1176,8 +1169,16 @@ com.woltlab.wcf.file wcf\system\file\processor\TrophyImageFileProcessor + + com.woltlab.wcf.media + com.woltlab.wcf.file + wcf\system\file\processor\MediaFileProcessor + + + com.woltlab.wcf.clipboardItem + com.woltlab.wcf.sitemap.object diff --git a/com.woltlab.wcf/package.xml b/com.woltlab.wcf/package.xml index 302aabd286a..98b2d4014e8 100644 --- a/com.woltlab.wcf/package.xml +++ b/com.woltlab.wcf/package.xml @@ -93,6 +93,7 @@ acp/update_com.woltlab.wcf_6.3_userOptionCategoryL10n.php acp/update_com.woltlab.wcf_6.3_captchaQuestionL10n.php acp/update_com.woltlab.wcf_6.3_userOptionConfiguration.php + acp/update_com.woltlab.wcf_6.3_mediaL10n.php acp/database/update_com.woltlab.wcf_6.3_step3.php The following step requires the new files and must run before the `cronjob` PIP, which precedes the `objectType` PIP: diff --git a/com.woltlab.wcf/templateDelete.xml b/com.woltlab.wcf/templateDelete.xml index c3cf7603878..fbdec680e8b 100644 --- a/com.woltlab.wcf/templateDelete.xml +++ b/com.woltlab.wcf/templateDelete.xml @@ -130,5 +130,10 @@ + + + + + diff --git a/com.woltlab.wcf/templates/mediaEditor.tpl b/com.woltlab.wcf/templates/mediaEditor.tpl deleted file mode 100644 index f02a576e5a9..00000000000 --- a/com.woltlab.wcf/templates/mediaEditor.tpl +++ /dev/null @@ -1,137 +0,0 @@ -
    -
  • -
- -{if $media->isImage && $media->hasThumbnail('small')} -
- {unsafe:$media->getThumbnailTag('small')} -
-{/if} - -
- {if $media->isImage} - {icon size=48 name='file-image'} - {else} - {unsafe:$media->getElementTag(48)} - {/if} - -
-
{lang}wcf.media.filename{/lang}
-
{$media->filename}
- -
{lang}wcf.media.filesize{/lang}
-
{$media->filesize|filesize}
- - {if $media->isImage} -
{lang}wcf.media.imageDimensions{/lang}
-
{lang}wcf.media.imageDimensions.value{/lang}
- {/if} - -
{lang}wcf.media.uploader{/lang}
-
{user object=$media->getUserProfile()}
- -
{lang}wcf.media.downloads{/lang}
-
{#$media->downloads}
- - {if $media->downloads} -
{lang}wcf.media.lastDownloadTime{/lang}
-
{time time=$media->lastDownloadTime}
- {/if} -
-
- -
-

{lang}wcf.global.form.data{/lang}

- - {hascontent} -
-
-
- -
-
- {/hascontent} - - {if $availableLanguages|count > 1} -
-
-
- -
-
- {include file='shared_languageChooser' label='wcf.media.languageID'} - {/if} - -
-
-
- -
-
- {if $availableLanguages|count > 1} - {include file='shared_multipleLanguageInputJavascript' elementIdentifier='title'|concat:'_':$media->mediaID forceSelection=true} - {/if} - - {if $media->isImage} -
-
-
- -
-
- {if $availableLanguages|count > 1} - {include file='shared_multipleLanguageInputJavascript' elementIdentifier='caption'|concat:'_':$media->mediaID forceSelection=true} - {/if} - -
-
-
- -
-
- -
-
-
- -
-
- {if $availableLanguages|count > 1} - {include file='shared_multipleLanguageInputJavascript' elementIdentifier='altText'|concat:'_':$media->mediaID forceSelection=true} - {/if} - {/if} - - {event name='dataFields'} -
- -{include file='shared_aclSimple'} - -
- -
diff --git a/com.woltlab.wcf/templates/mediaJavaScript.tpl b/com.woltlab.wcf/templates/mediaJavaScript.tpl deleted file mode 100644 index e30743ad84e..00000000000 --- a/com.woltlab.wcf/templates/mediaJavaScript.tpl +++ /dev/null @@ -1,28 +0,0 @@ -{if $__wcf->session->getPermission('admin.content.cms.canUseMedia')} - {jsphrase name='wcf.global.button.insert'} - {jsphrase name='wcf.media.button.replaceFile'} - {jsphrase name='wcf.media.button.select'} - {jsphrase name='wcf.media.insert'} - {jsphrase name='wcf.media.insert.imageSize'} - {jsphrase name='wcf.media.insert.imageSize.small'} - {jsphrase name='wcf.media.insert.imageSize.medium'} - {jsphrase name='wcf.media.insert.imageSize.large'} - {jsphrase name='wcf.media.insert.imageSize.original'} - {jsphrase name='wcf.media.manager'} - {jsphrase name='wcf.media.edit'} - {jsphrase name='wcf.media.button.insert'} - {jsphrase name='wcf.media.search.noResults'} - {jsphrase name='wcf.media.upload.error.differentFileExtension'} - {jsphrase name='wcf.media.upload.error.differentFileType'} - {jsphrase name='wcf.media.upload.error.noImage'} - {jsphrase name='wcf.media.upload.error.uploadFailed'} - {jsphrase name='wcf.media.upload.success'} - {jsphrase name='wcf.media.setCategory'} - - require(['Language', 'Permission'], function({ registerPhrase }, Permission) { - registerPhrase('wcf.media.delete.confirmMessage', '{jslang __encode=true __literal=true}wcf.media.delete.confirmMessage{/jslang}'); - registerPhrase('wcf.media.search.info.searchStringThreshold', '{jslang __literal=true}wcf.media.search.info.searchStringThreshold{/jslang}'); - - Permission.add('admin.content.cms.canManageMedia', {if $__wcf->session->getPermission('admin.content.cms.canManageMedia')}true{else}false{/if}); - }); -{/if} diff --git a/com.woltlab.wcf/templates/mediaListItems.tpl b/com.woltlab.wcf/templates/mediaListItems.tpl deleted file mode 100644 index d645a7dc0b5..00000000000 --- a/com.woltlab.wcf/templates/mediaListItems.tpl +++ /dev/null @@ -1,48 +0,0 @@ -{foreach from=$mediaList item=media} -
  • -
    - {unsafe:$media->getElementTag(144)} -
    - - {assign var='__mediaTitle' value=$media->filename} - {if $media->title} - {assign var='__mediaTitle' value=$media->title} - {/if} -
    -

    {$__mediaTitle}

    -
    - - -
  • -{/foreach} diff --git a/com.woltlab.wcf/templates/shared_aclSimple.tpl b/com.woltlab.wcf/templates/shared_aclSimple.tpl index 7bd1e34245f..4d00d4857bd 100644 --- a/com.woltlab.wcf/templates/shared_aclSimple.tpl +++ b/com.woltlab.wcf/templates/shared_aclSimple.tpl @@ -85,6 +85,6 @@ {jsphrase name='wcf.acl.access.granted'} {jsphrase name='wcf.acl.access.denied'} - new UiAclSimple('{$__aclSimplePrefix}', '{unsafe:$__aclInputName|encodeJS}'); + new UiAclSimple('{unsafe:$__aclSimplePrefix|encodeJS}', '{unsafe:$__aclInputName|encodeJS}'); }); diff --git a/com.woltlab.wcf/templates/shared_bbcode_wsmg.tpl b/com.woltlab.wcf/templates/shared_bbcode_wsmg.tpl new file mode 100644 index 00000000000..65aaeeaa811 --- /dev/null +++ b/com.woltlab.wcf/templates/shared_bbcode_wsmg.tpl @@ -0,0 +1,35 @@ +
    +
    + {foreach from=$mediaList item=media} +
    + {if !$removeLinks} + + {/if} + {$media->altText} + {if !$removeLinks} + + {/if} + + {if $media->caption} +
    + {if $media->captionEnableHtml} + {unsafe:$media->caption} + {else} + {$media->caption} + {/if} +
    + {/if} +
    + {/foreach} +
    + + +
    diff --git a/com.woltlab.wcf/templates/shared_mediaEditInformation.tpl b/com.woltlab.wcf/templates/shared_mediaEditInformation.tpl new file mode 100644 index 00000000000..b255247ea12 --- /dev/null +++ b/com.woltlab.wcf/templates/shared_mediaEditInformation.tpl @@ -0,0 +1,30 @@ +
    + {unsafe:$media->getElementTag(64)} + +
    +
    {lang}wcf.media.filename{/lang}
    +
    {$media->filename}
    + +
    {lang}wcf.media.filesize{/lang}
    +
    {$media->filesize|filesize}
    + + {if $media->isImage} +
    {lang}wcf.media.imageDimensions{/lang}
    +
    {lang}wcf.media.imageDimensions.value{/lang}
    + {/if} + +
    {lang}wcf.media.uploader{/lang}
    +
    {user object=$media->getUserProfile()}
    + +
    {lang}wcf.media.uploadTime{/lang}
    +
    {time time=$media->uploadTime}
    + + {if $media->downloads} +
    {lang}wcf.media.downloads{/lang}
    +
    {#$media->downloads}
    + +
    {lang}wcf.media.lastDownloadTime{/lang}
    +
    {time time=$media->lastDownloadTime}
    + {/if} +
    +
    diff --git a/com.woltlab.wcf/templates/shared_mediaJavaScript.tpl b/com.woltlab.wcf/templates/shared_mediaJavaScript.tpl new file mode 100644 index 00000000000..97c96b22cd6 --- /dev/null +++ b/com.woltlab.wcf/templates/shared_mediaJavaScript.tpl @@ -0,0 +1,19 @@ +{if $__wcf->session->getPermission('admin.content.cms.canUseMedia') || $__wcf->session->getPermission('admin.content.cms.canManageMedia')} + {jsphrase name='wcf.media.chooseFile'} + {jsphrase name='wcf.media.insert'} + {jsphrase name='wcf.media.insert.imageSize'} + {jsphrase name='wcf.media.insert.imageSize.small'} + {jsphrase name='wcf.media.insert.imageSize.medium'} + {jsphrase name='wcf.media.insert.imageSize.large'} + {jsphrase name='wcf.media.insert.imageSize.original'} + {jsphrase name='wcf.media.insert.type'} + {jsphrase name='wcf.media.insert.type.gallery'} + {jsphrase name='wcf.media.insert.type.separate'} + {jsphrase name='wcf.media.manager'} + {jsphrase name='wcf.media.manager.dropZone'} + {jsphrase name='wcf.media.manager.dropZone.select'} + {jsphrase name='wcf.media.manager.selection.none'} + {jsphrase name='wcf.media.button.select'} + + WoltLabLanguage.registerPhrase('wcf.media.manager.selection.multiple', '{jslang __literal=true}wcf.media.manager.selection.multiple{/jslang}'); +{/if} diff --git a/com.woltlab.wcf/templates/shared_mediaManager.tpl b/com.woltlab.wcf/templates/shared_mediaManager.tpl deleted file mode 100644 index af29682fe62..00000000000 --- a/com.woltlab.wcf/templates/shared_mediaManager.tpl +++ /dev/null @@ -1,48 +0,0 @@ -{hascontent} -
    - -
    -{/hascontent} - -
    - - - - -
    - -{if $__wcf->session->getPermission('admin.content.cms.canManageMedia')} -
    -{/if} - -
    - -
      - {include file='mediaListItems'} -
    -
    - -
    diff --git a/com.woltlab.wcf/templates/shared_mediaManagerListItems.tpl b/com.woltlab.wcf/templates/shared_mediaManagerListItems.tpl new file mode 100644 index 00000000000..8d88f1d831b --- /dev/null +++ b/com.woltlab.wcf/templates/shared_mediaManagerListItems.tpl @@ -0,0 +1,32 @@ +{foreach from=$view->getItems() item='media'} +
    +
    + {if $media->isImage} + {* The image is cropped to a square, the medium thumbnail stays sharp on high resolution screens. *} + {$media->getAltText()} + {else} + {icon size=48 name=$media->getIconName()} + {/if} + + + + {hascontent} +
    + {content}{unsafe:$view->renderInteractionContextMenuButton($media)}{/content} +
    + {/hascontent} +
    + +
    {$media->getTitle()}
    +
    + {if $media->getTitle() !== $media->filename}{$media->filename} · {/if}{$media->filesize|filesize} +
    +
    +{/foreach} diff --git a/com.woltlab.wcf/templates/shared_mediaSetCategoryDialog.tpl b/com.woltlab.wcf/templates/shared_mediaSetCategoryDialog.tpl deleted file mode 100644 index 0e051d4d51b..00000000000 --- a/com.woltlab.wcf/templates/shared_mediaSetCategoryDialog.tpl +++ /dev/null @@ -1,26 +0,0 @@ -
    -
    -
    -
    - -
    -
    -
    diff --git a/com.woltlab.wcf/templates/shared_simpleAclFormField.tpl b/com.woltlab.wcf/templates/shared_simpleAclFormField.tpl index 59f0cabd36c..24645187863 100644 --- a/com.woltlab.wcf/templates/shared_simpleAclFormField.tpl +++ b/com.woltlab.wcf/templates/shared_simpleAclFormField.tpl @@ -1,3 +1 @@ {include file='shared_aclSimple'} - -{include file='shared_formFieldDataHandler'} diff --git a/com.woltlab.wcf/templates/shared_singleMediaSelectionFormField.tpl b/com.woltlab.wcf/templates/shared_singleMediaSelectionFormField.tpl index f2dae45e9cf..c4c881a6d92 100644 --- a/com.woltlab.wcf/templates/shared_singleMediaSelectionFormField.tpl +++ b/com.woltlab.wcf/templates/shared_singleMediaSelectionFormField.tpl @@ -20,20 +20,19 @@ {/if}
    • - +
    getValue()} value="{$field->getValue()}"{/if}> +{include file='shared_imageViewer'}
    -

    {lang}wcf.media.media.pageTitle{/lang}{if $items} {#$items}{/if}

    +

    {lang}wcf.media.media.pageTitle{/lang}

    - +
    -{include file='shared_formError'} - -
    -
    -

    {lang}wcf.global.filter{/lang}

    - -
    - {hascontent} -
    -
    -
    - -
    -
    - {/hascontent} - -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    - - {event name='filterFields'} -
    - -
    - - {csrfToken} -
    -
    -
    - -{assign var='linkParameters' value=''} -{if $username}{capture append=linkParameters}&username={unsafe:$username|rawurlencode}{/capture}{/if} -{if $q}{capture append=linkParameters}&q={unsafe:$q|rawurlencode}{/capture}{/if} -{if $categoryID}{capture append=linkParameters}&categoryID={$categoryID}{/capture}{/if} - -{if $pages > 1} -
    - -
    -{/if} - -