]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix #2080 and fix #2141
authorMichael Gapczynski <mtgap@owncloud.com>
Fri, 8 Mar 2013 03:30:12 +0000 (22:30 -0500)
committerMichael Gapczynski <mtgap@owncloud.com>
Fri, 8 Mar 2013 03:30:12 +0000 (22:30 -0500)
core/js/share.js
lib/public/share.php

index 34f24da4df746eeb788a104936888776210a2c96..0b6afda59c4ca51e4d1a91449f4b226b3b39f9d8 100644 (file)
@@ -10,8 +10,9 @@ OC.Share={
                // Load all share icons
                $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getItemsSharedStatuses', itemType: itemType }, function(result) {
                        if (result && result.status === 'success') {
-                               $.each(result.data, function(item, hasLink) {
-                                       OC.Share.statuses[item] = hasLink;
+                               $.each(result.data, function(item, data) {
+                                       OC.Share.statuses[item] = data;
+                                       var hasLink = data['link'];
                                        // Links override shared in terms of icon display
                                        if (hasLink) {
                                                var image = OC.imagePath('core', 'actions/public');
@@ -21,30 +22,33 @@ OC.Share={
                                        if (itemType != 'file' && itemType != 'folder') {
                                                $('a.share[data-item="'+item+'"]').css('background', 'url('+image+') no-repeat center');
                                        } else {
-                                               var file = $('tr').filterAttr('data-file', OC.basename(item));
+                                               var file = $('tr').filterAttr('data-id', item);
                                                if (file.length > 0) {
                                                        var action = $(file).find('.fileactions .action').filterAttr('data-action', 'Share');
                                                        var img = action.find('img').attr('src', image);
                                                        action.addClass('permanent');
                                                        action.html(' '+t('core', 'Shared')).prepend(img);
-                                               }
-                                               var dir = $('#dir').val();
-                                               if (dir.length > 1) {
-                                                       var last = '';
-                                                       var path = dir;
-                                                       // Search for possible parent folders that are shared
-                                                       while (path != last) {
-                                                               if (path == item) {
-                                                                       var action = $('.fileactions .action').filterAttr('data-action', 'Share');
-                                                                       var img = action.find('img');
-                                                                       if (img.attr('src') != OC.imagePath('core', 'actions/public')) {
-                                                                               img.attr('src', image);
-                                                                               action.addClass('permanent');
-                                                                               action.html(' '+t('core', 'Shared')).prepend(img);
+                                               } else {
+                                                       var dir = $('#dir').val();
+                                                       if (dir.length > 1) {
+                                                               var last = '';
+                                                               var path = dir;
+                                                               // Search for possible parent folders that are shared
+                                                               while (path != last) {
+                                                                       if (path == data['path']) {
+                                                                               var actions = $('.fileactions .action').filterAttr('data-action', 'Share');
+                                                                               $.each(actions, function(index, action) {
+                                                                                       var img = $(action).find('img');
+                                                                                       if (img.attr('src') != OC.imagePath('core', 'actions/public')) {
+                                                                                               img.attr('src', image);
+                                                                                               $(action).addClass('permanent');
+                                                                                               $(action).html(' '+t('core', 'Shared')).prepend(img);
+                                                                                       }
+                                                                               });
                                                                        }
+                                                                       last = path;
+                                                                       path = OC.Share.dirname(path);
                                                                }
-                                                               last = path;
-                                                               path = OC.Share.dirname(path);
                                                        }
                                                }
                                        }
@@ -53,15 +57,6 @@ OC.Share={
                });
        },
        updateIcon:function(itemType, itemSource) {
-               if (itemType == 'file' || itemType == 'folder') {
-                       var file = $('tr').filterAttr('data-id', String(itemSource));
-                       var filename = file.data('file');
-                       if ($('#dir').val() == '/') {
-                               itemSource = $('#dir').val() + filename;
-                       } else {
-                               itemSource = $('#dir').val() + '/' + filename;
-                       }
-               }
                var shares = false;
                var link = false;
                var image = OC.imagePath('core', 'actions/share');
@@ -83,18 +78,21 @@ OC.Share={
                if (itemType != 'file' && itemType != 'folder') {
                        $('a.share[data-item="'+itemSource+'"]').css('background', 'url('+image+') no-repeat center');
                } else {
-                       var action = $(file).find('.fileactions .action').filterAttr('data-action', 'Share');
-                       var img = action.find('img').attr('src', image);
-                       if (shares) {
-                               action.addClass('permanent');
-                               action.html(' '+t('core', 'Shared')).prepend(img);
-                       } else {
-                               action.removeClass('permanent');
-                               action.html(' '+t('core', 'Share')).prepend(img);
+                       var file = $('tr').filterAttr('data-id', String(itemSource));
+                       if (file.length > 0) {
+                               var action = $(file).find('.fileactions .action').filterAttr('data-action', 'Share');
+                               var img = action.find('img').attr('src', image);
+                               if (shares) {
+                                       action.addClass('permanent');
+                                       action.html(' '+t('core', 'Shared')).prepend(img);
+                               } else {
+                                       action.removeClass('permanent');
+                                       action.html(' '+t('core', 'Share')).prepend(img);
+                               }
                        }
                }
                if (shares) {
-                       OC.Share.statuses[itemSource] = link;
+                       OC.Share.statuses[itemSource]['link'] = link;
                } else {
                        delete OC.Share.statuses[itemSource];
                }
@@ -102,21 +100,7 @@ OC.Share={
        loadItem:function(itemType, itemSource) {
                var data = '';
                var checkReshare = true;
-               // Switch file sources to path to check if status is set
-               if (itemType == 'file' || itemType == 'folder') {
-                       var filename = $('tr').filterAttr('data-id', String(itemSource)).data('file');
-                       if ($('#dir').val() == '/') {
-                               var item = $('#dir').val() + filename;
-                       } else {
-                               var item = $('#dir').val() + '/' + filename;
-                       }
-                       if (item.substring(0, 8) != '/Shared/') {
-                               checkReshare = false;
-                       }
-               } else {
-                       var item = itemSource;
-               }
-               if (typeof OC.Share.statuses[item] === 'undefined') {
+               if (typeof OC.Share.statuses[itemSource] === 'undefined') {
                        // NOTE: Check does not always work and misses some shares, fix later
                        checkShares = true;
                } else {
index 59f41a9bfd6f59a0dbfacd9444b263a42c7d9ad0..d1ae0312bf68239e5bac49083be8c99587ab7f7c 100644 (file)
@@ -759,7 +759,7 @@ class Share {
                if ($format == self::FORMAT_STATUSES) {
                        if ($itemType == 'file' || $itemType == 'folder') {
                                $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`,'
-                                       .' `share_type`, `file_source`, `path`, `expiration`';
+                                       .' `share_type`, `file_source`, `path`, `expiration`, `storage`';
                        } else {
                                $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `expiration`';
                        }
@@ -768,7 +768,7 @@ class Share {
                                if ($itemType == 'file' || $itemType == 'folder') {
                                        $select = '`*PREFIX*share`.`id`, `item_type`, `*PREFIX*share`.`parent`,'
                                                .' `share_type`, `share_with`, `file_source`, `path`, `permissions`, `stime`,'
-                                               .' `expiration`, `token`';
+                                               .' `expiration`, `token`, `storage`';
                                } else {
                                        $select = '`id`, `item_type`, `item_source`, `parent`, `share_type`, `share_with`, `permissions`,'
                                                .' `stime`, `file_source`, `expiration`, `token`';
@@ -804,6 +804,7 @@ class Share {
                $items = array();
                $targets = array();
                $switchedItems = array();
+               $mounts = array();
                while ($row = $result->fetchRow()) {
                        // Filter out duplicate group shares for users with unique targets
                        if ($row['share_type'] == self::$shareTypeGroupUserUnique && isset($items[$row['parent']])) {
@@ -848,8 +849,13 @@ class Share {
                                if (isset($row['parent'])) {
                                        $row['path'] = '/Shared/'.basename($row['path']);
                                } else {
-                                       // Strip 'files' from path
-                                       $row['path'] = substr($row['path'], 5);
+                                       if (!isset($mounts[$row['storage']])) {
+                                               $mounts[$row['storage']] = \OC\Files\Mount::findByNumericId($row['storage']);
+                                       }
+                                       if ($mounts[$row['storage']]) {
+                                               $path = $mounts[$row['storage']]->getMountPoint().$row['path'];
+                                               $row['path'] = substr($path, $root);
+                                       }
                                }
                        }
                        if (isset($row['expiration'])) {
@@ -957,15 +963,14 @@ class Share {
                                return $items;
                        } else if ($format == self::FORMAT_STATUSES) {
                                $statuses = array();
-                               // Switch column to path for files and folders, used for determining statuses inside of folders
-                               if ($itemType == 'file' || $itemType == 'folder') {
-                                       $column = 'path';
-                               }
                                foreach ($items as $item) {
                                        if ($item['share_type'] == self::SHARE_TYPE_LINK) {
-                                               $statuses[$item[$column]] = true;
+                                               $statuses[$item[$column]]['link'] = true;
                                        } else if (!isset($statuses[$item[$column]])) {
-                                               $statuses[$item[$column]] = false;
+                                               $statuses[$item[$column]]['link'] = false;
+                                       }
+                                       if ($itemType == 'file' || $itemType == 'folder') {
+                                               $statuses[$item[$column]]['path'] = $item['path'];
                                        }
                                }
                                return $statuses;