summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2014-05-15 19:51:15 +0200
committerVincent Petry <pvince81@owncloud.com>2014-05-30 10:06:29 +0200
commit9baf47c2b457e497914e6ecfe96efb7d92530079 (patch)
tree0d4f4cbe40beb32ffb9cf565eec92ded6a08d115 /apps
parent6ebc43650554f41eee2ae715b99a178b9c75c532 (diff)
downloadnextcloud-server-9baf47c2b457e497914e6ecfe96efb7d92530079.tar.gz
nextcloud-server-9baf47c2b457e497914e6ecfe96efb7d92530079.zip
Group shares by type
Diffstat (limited to 'apps')
-rw-r--r--apps/files_sharing/js/sharedfilelist.js151
-rw-r--r--apps/files_sharing/templates/list.php3
2 files changed, 75 insertions, 79 deletions
diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js
index 7db4f629501..b2a05f585bb 100644
--- a/apps/files_sharing/js/sharedfilelist.js
+++ b/apps/files_sharing/js/sharedfilelist.js
@@ -21,13 +21,6 @@
FileList.prototype = _.extend({}, OCA.Files.FileList.prototype, {
appName: 'Shares',
- SHARE_TYPE_TEXT: [
- t('files_sharing', 'User'),
- t('files_sharing', 'Group'),
- t('files_sharing', 'Unknown'),
- t('files_sharing', 'Public')
- ],
-
/**
* Whether the list shows the files shared with the user (true) or
* the files that the user shared with others (false).
@@ -45,30 +38,13 @@
}
},
- /**
- * Compare two shares
- * @param share1 first share
- * @param share2 second share
- * @return 1 if share2 should come before share1, -1
- * if share1 should come before share2, 0 if they
- * are identical.
- */
- _shareCompare: function(share1, share2) {
- var result = OCA.Files.FileList.Comparators.name(share1, share2);
- if (result === 0) {
- return share2.shareType - share1.shareType;
- }
- return result;
- },
-
_createRow: function(fileData) {
// TODO: hook earlier and render the whole row here
var $tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments);
$tr.find('.filesize').remove();
- var $sharedWith = $('<td class="sharedWith"></td>').text(fileData.shareWithDisplayName);
- var $shareType = $('<td class="shareType"></td>').text(this.SHARE_TYPE_TEXT[fileData.shareType] ||
- t('files_sharing', 'Unkown'));
- $tr.find('td.date').before($sharedWith).before($shareType);
+ var $sharedWith = $('<td class="sharedWith"></td>')
+ .text(fileData.shareColumnInfo);
+ $tr.find('td.date').before($sharedWith);
$tr.find('td.filename input:checkbox').remove();
$tr.attr('data-path', fileData.path);
return $tr;
@@ -125,22 +101,6 @@
}
},
- render: function() {
- // FIXME
- /*
- var $el = $('<thead><tr>' +
- '<th>' + t('files', 'Name') + '</th>' +
- '<th>' + t('files', 'Shared with') + '</th>' +
- '<th>' + t('files', 'Type') + '</th>' +
- '<th>' + t('files', 'Shared since') + '</th>' +
- '</tr></thead>' +
- '<tbody class="fileList"></tbody>' +
- '<tfoot></tfoot>');
- this.$el.empty().append($el);
- this.$fileList = this.$el.find('tbody');
- */
- },
-
/**
* Converts the OCS API share response data to a file info
* list
@@ -150,39 +110,78 @@
_makeFilesFromShares: function(data) {
var self = this;
// OCS API uses non-camelcased names
- /* jshint camelcase: false */
- var files = _.map(data, function(share) {
- var file = {
- id: share.id,
- mtime: share.stime * 1000,
- permissions: share.permissions
- };
- if (share.item_type === 'folder') {
- file.type = 'dir';
- }
- else {
- file.type = 'file';
- // force preview retrieval as we don't have mime types,
- // the preview endpoint will fall back to the mime type
- // icon if no preview exists
- file.isPreviewAvailable = true;
- file.icon = true;
- }
- file.shareType = share.share_type;
- file.shareWith = share.share_with;
- if (self._sharedWithUser) {
- file.shareWithDisplayName = share.displayname_owner;
- file.name = OC.basename(share.file_target);
- file.path = OC.dirname(share.file_target);
- }
- else {
- file.shareWithDisplayName = share.share_with_displayname;
- file.name = OC.basename(share.path);
- file.path = OC.dirname(share.path);
- }
- return file;
- });
- return files.sort(this._shareCompare);
+ var files = _.chain(data)
+ // cOnvert share data to file data
+ .map(function(share) {
+ /* jshint camelcase: false */
+ var file = {
+ id: share.file_source,
+ mtime: share.stime * 1000,
+ permissions: share.permissions
+ };
+ if (share.item_type === 'folder') {
+ file.type = 'dir';
+ }
+ else {
+ file.type = 'file';
+ // force preview retrieval as we don't have mime types,
+ // the preview endpoint will fall back to the mime type
+ // icon if no preview exists
+ file.isPreviewAvailable = true;
+ file.icon = true;
+ }
+ file.share = {
+ id: share.id,
+ type: share.share_type,
+ target: share.share_with
+ };
+ if (self._sharedWithUser) {
+ file.share.ownerDisplayName = share.displayname_owner;
+ file.name = OC.basename(share.file_target);
+ file.path = OC.dirname(share.file_target);
+ }
+ else {
+ file.share.targetDisplayName = share.share_with_displayname;
+ file.name = OC.basename(share.path);
+ file.path = OC.dirname(share.path);
+ }
+ return file;
+ })
+ // Group all files and have a "shares" array with
+ // the share info for each file.
+ //
+ // This uses a hash memo to cumulate share information
+ // inside the same file object (by file id).
+ .reduce(function(memo, file) {
+ var data = memo[file.id];
+ if (!data) {
+ data = memo[file.id] = file;
+ data.shares = [file.share];
+ }
+ else {
+ data.shares.push(file.share);
+ }
+ // format the share column info output string
+ if (!data.shareColumnInfo) {
+ data.shareColumnInfo = '';
+ }
+ else {
+ data.shareColumnInfo += ', ';
+ }
+ // TODO. more accurate detection of name based on type
+ // TODO: maybe better formatting, like "link + 3 users" when more than 1 user
+ data.shareColumnInfo += (file.share.ownerDisplayName || file.share.targetDisplayName || 'link');
+ delete file.share;
+ return memo;
+ }, {})
+ // Retrieve only the values of the returned hash
+ .values()
+ // Sort by expected sort comparator
+ .sortBy(this._sortComparator)
+ // Finish the chain by getting the result
+ .value();
+
+ return files;
}
});
diff --git a/apps/files_sharing/templates/list.php b/apps/files_sharing/templates/list.php
index 276dc9da775..acc9ffbb2c4 100644
--- a/apps/files_sharing/templates/list.php
+++ b/apps/files_sharing/templates/list.php
@@ -28,9 +28,6 @@
<th id="headerSharedWith" class="hidden column-mtime">
<a id="sharedwith" class="columntitle" data-sort="shareWith"><span><?php p($l->t( 'Shared with' )); ?></span><span class="sort-indicator"></span></a>
</th>
- <th id="headerSharedWith" class="hidden column-mtime">
- <a id="shareType" class="columntitle" data-sort="shareType"><span><?php p($l->t( 'Type' )); ?></span><span class="sort-indicator"></span></a>
- </th>
<th id="headerDate" class="hidden column-mtime">
<a id="modified" class="columntitle" data-sort="mtime"><span><?php p($l->t( 'Shared since' )); ?></span><span class="sort-indicator"></span></a>
</th>