]> source.dussan.org Git - nextcloud-server.git/commitdiff
Adding a optional disclaimer to the anonymous upload page
authorMorris Jobke <hey@morrisjobke.de>
Thu, 8 Sep 2016 07:13:59 +0000 (09:13 +0200)
committerMorris Jobke <hey@morrisjobke.de>
Thu, 8 Sep 2016 16:44:27 +0000 (18:44 +0200)
apps/files_sharing/css/public.css
apps/files_sharing/lib/Controllers/ShareController.php
apps/files_sharing/templates/public.php
lib/private/Settings/Admin/Sharing.php
settings/css/settings.css
settings/js/admin.js
settings/templates/admin/sharing.php
tests/lib/Settings/Admin/SharingTest.php

index 4c5f847f9ffd3952c70e7815b92c1036ba18bb9d..3e3d13cebf0ea8a1eaddf6284a3caa0ab27a8196 100644 (file)
@@ -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,10 @@ thead {
        padding-left: 18px;
        margin-right: 7px;
 }
+
+
+.disclaimer {
+       margin: -20px auto 30px;
+       max-width: 400px;
+       text-align: left;
+}
\ No newline at end of file
index cd0d40048cf1f7132ca9d88e46c1ba9519c088db..5ccaab746fce99ce6bdd5ff378adf5c3b5c840d3 100644 (file)
@@ -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');
index 1b282f04a7a68018a604c7be3f0db579ffd205a6..bdedb04d2442d09343fe5320899b1882cf5bfe29 100644 (file)
@@ -104,10 +104,13 @@ $maxUploadFilesize = min($upload_max_filesize, $post_max_size);
                <?php } else { ?>
                <input type="hidden" id="upload-only-interface" value="1"/>
                        <div id="public-upload">
-                               <div id="emptycontent" class="">
+                               <div id="emptycontent" class="<?php if (!empty($_['disclaimer'])) { ?>has-disclaimer<?php } ?>">
                                        <div id="displayavatar"><div class="avatardiv"></div></div>
                                        <h2><?php p($l->t('Upload files to %s', [$_['shareOwner']])) ?></h2>
                                        <p><span class="icon-folder"></span> <?php p($_['filename']) ?></p>
+                                       <?php if (!empty($_['disclaimer'])) { ?>
+                                       <p class="disclaimer"><?php p($_['disclaimer']); ?></p>
+                                       <?php } ?>
                                        <input type="file" name="files[]" class="hidden" multiple>
 
                                        <a href="#" class="button icon-upload"><?php p($l->t('Select or drop files')) ?></a>
index 8d3ddc9b3b55a5ad1a0da21966f9cc84aba23097..59821044605c06855c2b43f15e100e396f2b5d60 100644 (file)
@@ -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, '');
index 6ed707f7c451d6f75024835bf75c266e8eecccbe..d66b0f82b557dce01bb5bb1e08294b981e074227 100644 (file)
@@ -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;
index fb59b3ba02636d98c8ef63760348bd53b67a9707..a2a1cef531c0dbcf26a2cd82bb016987e15e10d1 100644 (file)
@@ -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));
index b8f8e920246276a46d0cab71deb8a23078ea311b..1c47d74770fb82e02652ec34af9a3a15a64cc175 100644 (file)
@@ -95,7 +95,7 @@
                <label for="shareapiExcludeGroups"><?php p($l->t('Exclude groups from sharing'));?></label><br/>
        </p>
        <p id="selectExcludedGroups" class="indent <?php if (!$_['shareExcludeGroups'] || $_['shareAPIEnabled'] === 'no') p('hidden'); ?>">
-               <input name="shareapi_exclude_groups_list" type="hidden" id="excludedGroups" value="<?php p($_['shareExcludedGroupsList']) ?>" style="width: 400px"/>
+               <input name="shareapi_exclude_groups_list" type="hidden" id="excludedGroups" value="<?php p($_['shareExcludedGroupsList']) ?>" style="width: 400px" class="noJSAutoUpdate"/>
                <br />
                <em><?php p($l->t('These groups will still be able to receive shares, but not to initiate them.')); ?></em>
        </p>
                        <?php if ($_['allowShareDialogUserEnumeration'] === 'yes') print_unescaped('checked="checked"'); ?> />
                <label for="shareapi_allow_share_dialog_user_enumeration"><?php p($l->t('Allow username autocompletion in share dialog. If this is disabled the full username needs to be entered.'));?></label><br />
        </p>
+       <p>
+               <input type="checkbox" id="publicShareDisclaimer" class="checkbox noJSAutoUpdate"
+                       <?php if ($_['publicShareDisclaimerText'] !== null) print_unescaped('checked="checked"'); ?> />
+               <label for="publicShareDisclaimer"><?php p($l->t('Show disclaimer text on the public link upload page. (Only shown when the file list is hidden.)'));?></label>
+               <span id="publicShareDisclaimerStatus" class="msg" style="display:none"></span>
+               <br/>
+               <textarea placeholder="This text will be shown on the public link upload page when the file list is hidden." id="publicShareDisclaimerText" <?php if ($_['publicShareDisclaimerText'] === null) { print_unescaped('class="hidden"'); } ?>><?php p($_['publicShareDisclaimerText']) ?></textarea>
+       </p>
 </div>
index 38ab7614d1cc5131fc5cf194ff9fe02c4d994dcc..86bbdcbbfb033c6981fa1c41fa887b7a42956d5b 100644 (file)
@@ -109,6 +109,11 @@ class SharingTest extends TestCase {
                        ->method('getAppValue')
                        ->with('core', 'shareapi_exclude_groups', 'no')
                        ->willReturn('no');
+               $this->config
+                       ->expects($this->at(13))
+                       ->method('getAppValue')
+                       ->with('core', 'shareapi_public_link_disclaimertext', null)
+                       ->willReturn('Lorem ipsum');
 
                $expected = new TemplateResponse(
                        'settings',
@@ -129,6 +134,7 @@ class SharingTest extends TestCase {
                                'shareEnforceExpireDate'          => 'no',
                                'shareExcludeGroups'              => false,
                                'shareExcludedGroupsList'         => '',
+                               'publicShareDisclaimer'           => 'Lorem ipsum',
                        ],
                        ''
                );
@@ -202,6 +208,11 @@ class SharingTest extends TestCase {
                        ->method('getAppValue')
                        ->with('core', 'shareapi_exclude_groups', 'no')
                        ->willReturn('yes');
+               $this->config
+                       ->expects($this->at(13))
+                       ->method('getAppValue')
+                       ->with('core', 'shareapi_public_link_disclaimertext', null)
+                       ->willReturn('Lorem ipsum');
 
                $expected = new TemplateResponse(
                        'settings',
@@ -222,6 +233,7 @@ class SharingTest extends TestCase {
                                'shareEnforceExpireDate'          => 'no',
                                'shareExcludeGroups'              => true,
                                'shareExcludedGroupsList'         => 'NoSharers|OtherNoSharers',
+                               'publicShareDisclaimer'           => 'Lorem ipsum',
                        ],
                        ''
                );