diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css index 4c5f847f9f..1bb8310654 100644 --- a/apps/files_sharing/css/public.css +++ b/apps/files_sharing/css/public.css @@ -168,6 +168,10 @@ thead { margin: 0 auto; } +#emptycontent.has-disclaimer { + margin-top: 10vh; +} + #public-upload #emptycontent h2 { margin: 10px 0 5px 0; } @@ -222,3 +226,9 @@ thead { padding-left: 18px; margin-right: 7px; } + +.disclaimer { + margin: -20px auto 30px; + max-width: 400px; + text-align: left; +} diff --git a/apps/files_sharing/lib/Controllers/ShareController.php b/apps/files_sharing/lib/Controllers/ShareController.php index cd0d40048c..5ccaab746f 100644 --- a/apps/files_sharing/lib/Controllers/ShareController.php +++ b/apps/files_sharing/lib/Controllers/ShareController.php @@ -357,6 +357,7 @@ class ShareController extends Controller { $shareTmpl['previewEnabled'] = $this->config->getSystemValue('enable_previews', true); $shareTmpl['previewMaxX'] = $this->config->getSystemValue('preview_max_x', 1024); $shareTmpl['previewMaxY'] = $this->config->getSystemValue('preview_max_y', 1024); + $shareTmpl['disclaimer'] = $this->config->getAppValue('core', 'shareapi_public_link_disclaimertext', null); // Load files we need \OCP\Util::addScript('files', 'file-upload'); diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php index 1b282f04a7..bdedb04d24 100644 --- a/apps/files_sharing/templates/public.php +++ b/apps/files_sharing/templates/public.php @@ -104,10 +104,13 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
+ + + t('Select or drop files')) ?> diff --git a/apps/files_sharing/tests/Controllers/ShareControllerTest.php b/apps/files_sharing/tests/Controllers/ShareControllerTest.php index 34ed08629a..1b9fd401f7 100644 --- a/apps/files_sharing/tests/Controllers/ShareControllerTest.php +++ b/apps/files_sharing/tests/Controllers/ShareControllerTest.php @@ -357,6 +357,11 @@ class ShareControllerTest extends \Test\TestCase { ->method('getShareByToken') ->with('token') ->willReturn($share); + $this->config + ->expects($this->once()) + ->method('getAppValue') + ->with('core', 'shareapi_public_link_disclaimertext', null) + ->willReturn('My disclaimer text'); $this->userManager->method('get')->with('ownerUID')->willReturn($owner); @@ -385,7 +390,8 @@ class ShareControllerTest extends \Test\TestCase { 'previewMaxX' => 1024, 'previewMaxY' => 1024, 'hideFileList' => false, - 'shareOwner' => 'ownerDisplay' + 'shareOwner' => 'ownerDisplay', + 'disclaimer' => 'My disclaimer text', ); $csp = new \OCP\AppFramework\Http\ContentSecurityPolicy(); diff --git a/lib/private/Settings/Admin/Sharing.php b/lib/private/Settings/Admin/Sharing.php index 8d3ddc9b3b..5982104460 100644 --- a/lib/private/Settings/Admin/Sharing.php +++ b/lib/private/Settings/Admin/Sharing.php @@ -65,6 +65,7 @@ class Sharing implements ISettings { 'shareEnforceExpireDate' => $this->config->getAppValue('core', 'shareapi_enforce_expire_date', 'no'), 'shareExcludeGroups' => $this->config->getAppValue('core', 'shareapi_exclude_groups', 'no') === 'yes' ? true : false, 'shareExcludedGroupsList' => $excludeGroupsList, + 'publicShareDisclaimerText' => $this->config->getAppValue('core', 'shareapi_public_link_disclaimertext', null), ]; return new TemplateResponse('settings', 'admin/sharing', $parameters, ''); diff --git a/settings/css/settings.css b/settings/css/settings.css index 6ed707f7c4..d66b0f82b5 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -499,6 +499,14 @@ table.grid td.date{ display: inline-block; } +#publicShareDisclaimerText { + width: calc(100% - 23px); /* 20 px left margin, 3 px right margin */ + max-width: 600px; + height: 150px; + margin-left: 20px; + box-sizing: border-box; +} + /* correctly display help icons next to headings */ .icon-info { padding: 11px 20px; diff --git a/settings/js/admin.js b/settings/js/admin.js index fb59b3ba02..a2a1cef531 100644 --- a/settings/js/admin.js +++ b/settings/js/admin.js @@ -90,7 +90,7 @@ $(document).ready(function(){ } }); - $('#shareAPI input:not(#excludedGroups)').change(function() { + $('#shareAPI input:not(.noJSAutoUpdate)').change(function() { var value = $(this).val(); if ($(this).attr('type') === 'checkbox') { if (this.checked) { @@ -106,6 +106,45 @@ $(document).ready(function(){ $("#setDefaultExpireDate").toggleClass('hidden', !this.checked); }); + $('#publicShareDisclaimer').change(function() { + $("#publicShareDisclaimerText").toggleClass('hidden', !this.checked); + if(!this.checked) { + savePublicShareDisclaimerText(''); + } + }); + + var savePublicShareDisclaimerText = _.debounce(function(value) { + var data = { + app:'core', + key:'shareapi_public_link_disclaimertext' + }; + if (_.isString(value) && value !== '') { + data['action'] = 'setValue'; + data['value'] = value; + } else { + data['action'] = 'deleteKey'; + $('#publicShareDisclaimerText').val(''); + } + + OC.msg.startSaving('#publicShareDisclaimerStatus'); + $.post( + OC.AppConfig.url, + data, + function(result){ + if(result.status === 'success'){ + OC.msg.finishedSuccess('#publicShareDisclaimerStatus', t('core', 'Saved')) + } else { + OC.msg.finishedError('#publicShareDisclaimerStatus', t('core', 'Not saved')) + } + }, + 'json' + ); + }, 500); + + $('#publicShareDisclaimerText').on('change, keyup', function() { + savePublicShareDisclaimerText(this.value); + }); + $('#allowLinks').change(function() { $("#publicLinkSettings").toggleClass('hidden', !this.checked); $('#setDefaultExpireDate').toggleClass('hidden', !(this.checked && $('#shareapiDefaultExpireDate')[0].checked)); diff --git a/settings/templates/admin/sharing.php b/settings/templates/admin/sharing.php index b8f8e92024..802bcad319 100644 --- a/settings/templates/admin/sharing.php +++ b/settings/templates/admin/sharing.php @@ -95,7 +95,7 @@
-
+
t('These groups will still be able to receive shares, but not to initiate them.')); ?>
+ />
+
+
+
+
+