add hide file list option
This commit is contained in:
parent
fc3ad7d5f7
commit
bb54ab0db8
|
@ -238,6 +238,11 @@ OCA.Sharing.PublicApp = {
|
|||
$(this).select();
|
||||
});
|
||||
|
||||
$(document).on('click', '.content-wrapper-upload', function (e) {
|
||||
//e.preventDefault();
|
||||
$('#file_upload_start').focus().trigger('click');
|
||||
});
|
||||
|
||||
$('.save-form').submit(function (event) {
|
||||
event.preventDefault();
|
||||
|
||||
|
@ -302,7 +307,7 @@ OCA.Sharing.PublicApp = {
|
|||
$('#save-button-confirm')
|
||||
.removeClass("icon-loading-small")
|
||||
.addClass("icon-confirm");
|
||||
|
||||
|
||||
}
|
||||
else {
|
||||
$('#save-button-confirm')
|
||||
|
@ -314,7 +319,7 @@ OCA.Sharing.PublicApp = {
|
|||
|
||||
toggleLoading();
|
||||
var location = window.location.protocol + '//' + window.location.host + OC.webroot;
|
||||
|
||||
|
||||
if(remote.substr(-1) !== '/') {
|
||||
remote += '/'
|
||||
};
|
||||
|
|
|
@ -602,6 +602,7 @@ class Share20OCS {
|
|||
|
||||
if ($newPermissions !== null &&
|
||||
$newPermissions !== \OCP\Constants::PERMISSION_READ &&
|
||||
$newPermissions !== (\OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE) &&
|
||||
$newPermissions !== (\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE)) {
|
||||
$share->getNode()->unlock(ILockingProvider::LOCK_SHARED);
|
||||
return new \OC_OCS_Result(null, 400, $this->l->t('Can\'t change permissions for public share links'));
|
||||
|
|
|
@ -49,7 +49,6 @@ use OCP\ILogger;
|
|||
use OCP\IUserManager;
|
||||
use OCP\ISession;
|
||||
use OCP\IPreview;
|
||||
use OCA\Files_Sharing\Helper;
|
||||
use OCP\Util;
|
||||
use OCA\Files_Sharing\Activity;
|
||||
use \OCP\Files\NotFoundException;
|
||||
|
@ -314,6 +313,7 @@ class ShareController extends Controller {
|
|||
$shareTmpl['fileSize'] = \OCP\Util::humanFileSize($share->getNode()->getSize());
|
||||
|
||||
// Show file list
|
||||
$hideFileList = false;
|
||||
if ($share->getNode() instanceof \OCP\Files\Folder) {
|
||||
$shareTmpl['dir'] = $rootFolder->getRelativePath($path->getPath());
|
||||
|
||||
|
@ -329,12 +329,14 @@ class ShareController extends Controller {
|
|||
|
||||
$uploadLimit = Util::uploadLimit();
|
||||
$maxUploadFilesize = min($freeSpace, $uploadLimit);
|
||||
$hideFileList = $share->getPermissions() & \OCP\Constants::PERMISSION_READ ? false : true;
|
||||
|
||||
$folder = new Template('files', 'list', '');
|
||||
$folder->assign('dir', $rootFolder->getRelativePath($path->getPath()));
|
||||
$folder->assign('dirToken', $token);
|
||||
$folder->assign('permissions', \OCP\Constants::PERMISSION_READ);
|
||||
$folder->assign('isPublic', true);
|
||||
$folder->assign('hideFileList', $hideFileList);
|
||||
$folder->assign('publicUploadEnabled', 'no');
|
||||
$folder->assign('uploadMaxFilesize', $maxUploadFilesize);
|
||||
$folder->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
|
||||
|
@ -345,6 +347,8 @@ class ShareController extends Controller {
|
|||
$shareTmpl['folder'] = $folder->fetchPage();
|
||||
}
|
||||
|
||||
$shareTmpl['hideFileList'] = $hideFileList;
|
||||
$shareTmpl['shareOwner'] = $this->userManager->get($share->getShareOwner())->getDisplayName();
|
||||
$shareTmpl['downloadURL'] = $this->urlGenerator->linkToRouteAbsolute('files_sharing.sharecontroller.downloadShare', array('token' => $token));
|
||||
$shareTmpl['maxSizeAnimateGif'] = $this->config->getSystemValue('max_filesize_animated_gifs_public_sharing', 10);
|
||||
$shareTmpl['previewEnabled'] = $this->config->getSystemValue('enable_previews', true);
|
||||
|
|
|
@ -66,26 +66,28 @@ OCP\Util::addscript('files', 'keyboardshortcuts');
|
|||
<div class="header-right">
|
||||
<span id="details">
|
||||
<?php
|
||||
if ($_['server2serversharing']) {
|
||||
?>
|
||||
<span id="save" data-protected="<?php p($_['protected']) ?>"
|
||||
data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>">
|
||||
<button id="save-button"><?php p($l->t('Add to your ownCloud')) ?></button>
|
||||
<form class="save-form hidden" action="#">
|
||||
<input type="text" id="remote_address" placeholder="example.com/owncloud"/>
|
||||
<button id="save-button-confirm" class="icon-confirm svg" disabled></button>
|
||||
</form>
|
||||
</span>
|
||||
if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) {
|
||||
if ($_['server2serversharing']) {
|
||||
?>
|
||||
<span id="save" data-protected="<?php p($_['protected']) ?>"
|
||||
data-owner-display-name="<?php p($_['displayName']) ?>" data-owner="<?php p($_['owner']) ?>" data-name="<?php p($_['filename']) ?>">
|
||||
<button id="save-button"><?php p($l->t('Add to your ownCloud')) ?></button>
|
||||
<form class="save-form hidden" action="#">
|
||||
<input type="text" id="remote_address" placeholder="example.com/owncloud"/>
|
||||
<button id="save-button-confirm" class="icon-confirm svg" disabled></button>
|
||||
</form>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<a href="<?php p($_['downloadURL']); ?>" id="download" class="button">
|
||||
<img class="svg" alt="" src="<?php print_unescaped(image_path("core", "actions/download.svg")); ?>"/>
|
||||
<span id="download-text"><?php p($l->t('Download'))?></span>
|
||||
</a>
|
||||
<?php } ?>
|
||||
<a href="<?php p($_['downloadURL']); ?>" id="download" class="button">
|
||||
<img class="svg" alt="" src="<?php print_unescaped(image_path("core", "actions/download.svg")); ?>"/>
|
||||
<span id="download-text"><?php p($l->t('Download'))?></span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div></header>
|
||||
<div id="content-wrapper">
|
||||
<div id="content">
|
||||
</div></header>
|
||||
<div id="content-wrapper" <?php if(isset($_['hideFileList']) && $_['hideFileList'] === true){ print_unescaped(" class=\"content-wrapper-upload\"");} ?>>
|
||||
<?php if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === false)) { ?>
|
||||
<div id="preview">
|
||||
<?php if (isset($_['folder'])): ?>
|
||||
<?php print_unescaped($_['folder']); ?>
|
||||
|
@ -112,7 +114,21 @@ OCP\Util::addscript('files', 'keyboardshortcuts');
|
|||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php } else { ?>
|
||||
<div id="emptycontent" class="">
|
||||
<div class="icon-upload"></div>
|
||||
<h2>Upload files to <?php print_unescaped($_['shareOwner']); ?></h2>
|
||||
<a href="#" class="inlineblock button">Select</a>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php if (!isset($_['hideFileList']) || (isset($_['hideFileList']) && $_['hideFileList'] === true)): ?>
|
||||
<input type="hidden" name="dir" id="dir" value="" />
|
||||
<div class="hiddenuploadfield">
|
||||
<input type="file" id="file_upload_start" class="hiddenuploadfield" name="files[]"
|
||||
data-url="<?php print_unescaped(OCP\Util::linkTo('files', 'ajax/upload.php')); ?>" />
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<footer>
|
||||
<p class="info">
|
||||
<?php print_unescaped($theme->getLongFooter()); ?>
|
||||
|
|
|
@ -372,6 +372,8 @@ class ShareControllerTest extends \Test\TestCase {
|
|||
'previewEnabled' => true,
|
||||
'previewMaxX' => 1024,
|
||||
'previewMaxY' => 1024,
|
||||
'hideFileList' => false,
|
||||
'shareOwner' => 'ownerDisplay'
|
||||
);
|
||||
|
||||
$csp = new \OCP\AppFramework\Http\ContentSecurityPolicy();
|
||||
|
|
|
@ -30,7 +30,14 @@
|
|||
' <input type="checkbox" value="1" name="allowPublicUpload" id="sharingDialogAllowPublicUpload-{{cid}}" class="checkbox publicUploadCheckbox" {{{publicUploadChecked}}} />' +
|
||||
'<label for="sharingDialogAllowPublicUpload-{{cid}}">{{publicUploadLabel}}</label>' +
|
||||
'</div>' +
|
||||
' {{/if}}' +
|
||||
'{{#if hideFileList}}' +
|
||||
'<div id="hideFileListWrapper">' +
|
||||
' <span class="icon-loading-small hidden"></span>' +
|
||||
' <input type="checkbox" value="1" name="hideFileList" id="sharingDialogHideFileList-{{cid}}" class="checkbox hideFileListCheckbox" {{{hideFileListChecked}}} />' +
|
||||
'<label for="sharingDialogHideFileList-{{cid}}">{{hideFileListLabel}}</label>' +
|
||||
'</div>' +
|
||||
'{{/if}}' +
|
||||
' {{/if}}' +
|
||||
' {{#if showPasswordCheckBox}}' +
|
||||
'<input type="checkbox" name="showPassword" id="showPassword-{{cid}}" class="checkbox showPasswordCheckbox" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" />' +
|
||||
'<label for="showPassword-{{cid}}">{{enablePasswordLabel}}</label>' +
|
||||
|
@ -74,7 +81,8 @@
|
|||
'keyup input.linkPassText': 'onPasswordKeyUp',
|
||||
'click .linkCheckbox': 'onLinkCheckBoxChange',
|
||||
'click .linkText': 'onLinkTextClick',
|
||||
'change .publicUploadCheckbox': 'onAllowPublicUploadChange',
|
||||
'change .publicUploadCheckbox': 'onAllowPublicUploadChange',
|
||||
'change .hideFileListCheckbox': 'onHideFileListChange',
|
||||
'click .showPasswordCheckbox': 'onShowPasswordClick'
|
||||
},
|
||||
|
||||
|
@ -93,6 +101,10 @@
|
|||
view.render();
|
||||
});
|
||||
|
||||
this.model.on('change:hideFileListStatus', function() {
|
||||
view.render();
|
||||
});
|
||||
|
||||
this.model.on('change:linkShare', function() {
|
||||
view.render();
|
||||
});
|
||||
|
@ -110,6 +122,7 @@
|
|||
'onPasswordKeyUp',
|
||||
'onLinkTextClick',
|
||||
'onShowPasswordClick',
|
||||
'onHideFileListChange',
|
||||
'onAllowPublicUploadChange'
|
||||
);
|
||||
},
|
||||
|
@ -208,7 +221,21 @@
|
|||
this.model.saveLinkShare({
|
||||
permissions: permissions
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
onHideFileListChange: function () {
|
||||
var $checkbox = this.$('.hideFileListCheckbox');
|
||||
$checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock');
|
||||
|
||||
var permissions = OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE | OC.PERMISSION_READ;
|
||||
if ($checkbox.is(':checked')) {
|
||||
permissions = OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE;
|
||||
}
|
||||
|
||||
this.model.saveLinkShare({
|
||||
permissions: permissions
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var linkShareTemplate = this.template();
|
||||
|
@ -237,6 +264,13 @@
|
|||
publicUploadChecked = 'checked="checked"';
|
||||
}
|
||||
|
||||
var hideFileList = publicUploadChecked;
|
||||
|
||||
var hideFileListChecked = '';
|
||||
if(this.model.isHideFileListSet()) {
|
||||
hideFileListChecked = 'checked="checked"';
|
||||
}
|
||||
|
||||
var isLinkShare = this.model.get('linkShare').isLinkShare;
|
||||
var isPasswordSet = !!this.model.get('linkShare').password;
|
||||
var showPasswordCheckBox = isLinkShare
|
||||
|
@ -246,6 +280,7 @@
|
|||
this.$el.html(linkShareTemplate({
|
||||
cid: this.cid,
|
||||
shareAllowed: true,
|
||||
hideFileList: hideFileList,
|
||||
isLinkShare: isLinkShare,
|
||||
shareLinkURL: this.model.get('linkShare').link,
|
||||
linkShareLabel: t('core', 'Share link'),
|
||||
|
@ -257,7 +292,9 @@
|
|||
showPasswordCheckBox: showPasswordCheckBox,
|
||||
publicUpload: publicUpload && isLinkShare,
|
||||
publicUploadChecked: publicUploadChecked,
|
||||
publicUploadLabel: t('core', 'Allow editing'),
|
||||
hideFileListChecked: hideFileListChecked,
|
||||
publicUploadLabel: t('core', 'Allow editing'),
|
||||
hideFileListLabel: t('core', 'Hide file listing'),
|
||||
mailPublicNotificationEnabled: isLinkShare && this.configModel.isMailPublicNotificationEnabled(),
|
||||
mailPrivatePlaceholder: t('core', 'Email link to person'),
|
||||
mailButtonText: t('core', 'Send')
|
||||
|
|
|
@ -272,6 +272,13 @@
|
|||
return this.get('allowPublicUploadStatus');
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
isHideFileListSet: function() {
|
||||
return this.get('hideFileListStatus');
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
|
@ -685,6 +692,16 @@
|
|||
});
|
||||
}
|
||||
|
||||
var hideFileListStatus = false;
|
||||
if(!_.isUndefined(data.shares)) {
|
||||
$.each(data.shares, function (key, value) {
|
||||
if (value.share_type === OC.Share.SHARE_TYPE_LINK) {
|
||||
hideFileListStatus = (value.permissions & OC.PERMISSION_READ) ? false : true;
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** @type {OC.Share.Types.ShareInfo[]} **/
|
||||
var shares = _.map(data.shares, function(share) {
|
||||
// properly parse some values because sometimes the server
|
||||
|
@ -757,7 +774,8 @@
|
|||
shares: shares,
|
||||
linkShare: linkShare,
|
||||
permissions: permissions,
|
||||
allowPublicUploadStatus: allowPublicUploadStatus
|
||||
allowPublicUploadStatus: allowPublicUploadStatus,
|
||||
hideFileListStatus: hideFileListStatus
|
||||
};
|
||||
},
|
||||
|
||||
|
|
|
@ -239,8 +239,11 @@ class Manager implements IManager {
|
|||
throw new GenericShareException($message_t, $message_t, 404);
|
||||
}
|
||||
|
||||
|
||||
// Check that read permissions are always set
|
||||
if (($share->getPermissions() & \OCP\Constants::PERMISSION_READ) === 0) {
|
||||
// Link shares are allowed to have no read permissions to allow upload to hidden folders
|
||||
if ($share->getShareType() !== \OCP\Share::SHARE_TYPE_LINK &&
|
||||
($share->getPermissions() & \OCP\Constants::PERMISSION_READ) === 0) {
|
||||
throw new \InvalidArgumentException('Shares need at least read permissions');
|
||||
}
|
||||
|
||||
|
|
|
@ -670,7 +670,6 @@ class ManagerTest extends \Test\TestCase {
|
|||
|
||||
$data[] = [$this->createShare(null, \OCP\Share::SHARE_TYPE_USER, $allPermssions, $user2, $user0, $user0, 30, null, null), 'Shares need at least read permissions', true];
|
||||
$data[] = [$this->createShare(null, \OCP\Share::SHARE_TYPE_GROUP, $allPermssions, $group0, $user0, $user0, 2, null, null), 'Shares need at least read permissions', true];
|
||||
$data[] = [$this->createShare(null, \OCP\Share::SHARE_TYPE_LINK, $allPermssions, null, $user0, $user0, 16, null, null), 'Shares need at least read permissions', true];
|
||||
|
||||
$data[] = [$this->createShare(null, \OCP\Share::SHARE_TYPE_USER, $allPermssions, $user2, $user0, $user0, 31, null, null), null, false];
|
||||
$data[] = [$this->createShare(null, \OCP\Share::SHARE_TYPE_GROUP, $allPermssions, $group0, $user0, $user0, 3, null, null), null, false];
|
||||
|
|
Loading…
Reference in New Issue