From 44ecdde10d347dc0e77576b35dc3d066dfc0fce6 Mon Sep 17 00:00:00 2001
From: Arthur Schiwon <blizzz@owncloud.com>
Date: Wed, 2 Sep 2015 13:06:00 +0200
Subject: [PATCH] sharee list view: better handle collections

---
 core/js/sharedialogshareelistview.js | 41 ++++++++++++++++++++++++----
 core/js/shareitemmodel.js            |  4 +--
 2 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js
index 8179926ad51..8e08e2b4f76 100644
--- a/core/js/sharedialogshareelistview.js
+++ b/core/js/sharedialogshareelistview.js
@@ -78,6 +78,9 @@
 		/** @type {boolean} **/
 		showLink: true,
 
+		/** @type {object} **/
+		_collections: {},
+
 		initialize: function(options) {
 			if(!_.isUndefined(options.configModel)) {
 				this.configModel = options.configModel;
@@ -91,6 +94,23 @@
 			});
 		},
 
+		processCollectionShare: function(shareIndex) {
+			var type = this.model.getCollectionType(shareIndex);
+			var id = this.model.getCollectionPath(shareIndex);
+			if(type !== 'file' && type !== 'folder') {
+				id = this.model.getCollectionSource(shareIndex);
+			}
+			var displayName = this.model.getShareWithDisplayName(shareIndex);
+			if(!_.isUndefined(this._collections[id])) {
+				this._collections[id].text = this._collections[id].text + ", " + displayName;
+			} else {
+				this._collections[id] = {};
+				this._collections[id].text = t('core', 'Shared in {item} with {user}', {'item': id, user: displayName});
+				this._collections[id].id = id;
+				this._collections[id].isCollection = true;
+			}
+		},
+
 		getCollectionObject: function(shareIndex) {
 			var type = this.model.getCollectionType(shareIndex);
 			var id = this.model.getCollectionPath(shareIndex);
@@ -119,7 +139,6 @@
 				shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'remote') + ')';
 			}
 
-
 			return {
 				hasSharePermission: this.model.hasSharePermission(shareIndex),
 				hasEditPermission: this.model.hasEditPermission(shareIndex),
@@ -160,21 +179,34 @@
 				deletePermission: OC.PERMISSION_DELETE
 			};
 
+			this._collections = {};
+
 			// TODO: sharess must have following attributes
 			// isRemoteShare
-			// isMailSent
 
 			if(!this.model.hasShares()) {
 				return [];
 			}
 
+			var shares = this.model.get('shares');
 			var list = [];
-			for(var index in this.model.get('shares')) {
+			for(var index = 0; index < shares.length; index++) {
+
+				// #### FIXME: LEGACY ####
+				// this does not belong to a view
+				var shareType = this.model.getShareType(index);
+				if (!OC.Share.currentShares[shareType]) {
+					OC.Share.currentShares[shareType] = [];
+				}
+				OC.Share.currentShares[shareType].push(this.model.getShareWith(index));
+				// #### /FIXME: LEGACY ####
+
 				if(this.model.isCollection(index)) {
-					list.unshift(this.getCollectionObject(index));
+					this.processCollectionShare(index);
 				} else {
 					list.push(_.extend(this.getShareeObject(index), universal))
 				}
+				list = _.union(_.values(this._collections), list);
 			}
 
 			return list;
@@ -182,7 +214,6 @@
 
 		render: function() {
 			var shareeListTemplate = this.template();
-			var list = this.getShareeList();
 			this.$el.html(shareeListTemplate({
 				sharees: this.getShareeList()
 			}));
diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js
index b5370faca0a..d4fbc3543a7 100644
--- a/core/js/shareitemmodel.js
+++ b/core/js/shareitemmodel.js
@@ -357,8 +357,6 @@
 				return {};
 			}
 
-			console.log(data.shares);
-
 			var permissions = this.get('possiblePermissions');
 			if(!_.isUndefined(data.reshare) && !_.isUndefined(data.reshare.permissions)) {
 				permissions = permissions & data.reshare.permissions;
@@ -376,7 +374,7 @@
 
 			return {
 				reshare: data.reshare,
-				shares: $.map(data.shares, function(value) { return [value]; }),
+				shares: _.toArray(data.shares),
 				permissions: permissions,
 				allowPublicUploadStatus: allowPublicUploadStatus
 			};
-- 
GitLab