summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMichael Gapczynski <mtgap@owncloud.com>2012-09-09 11:50:12 -0400
committerMichael Gapczynski <mtgap@owncloud.com>2012-09-09 11:50:12 -0400
commit13d513c17c264a3bbb1b2c874bb742afbce76e10 (patch)
treef23ec9510bc0edaf16d9c58f9de0fbb253a1a4ad /lib
parent3e7951e1e6d8928e1c2e47d25489635d337cac04 (diff)
downloadnextcloud-server-13d513c17c264a3bbb1b2c874bb742afbce76e10.tar.gz
nextcloud-server-13d513c17c264a3bbb1b2c874bb742afbce76e10.zip
Fix shared collection item searching
Diffstat (limited to 'lib')
-rw-r--r--lib/public/share.php67
1 files changed, 38 insertions, 29 deletions
diff --git a/lib/public/share.php b/lib/public/share.php
index 5ed04c3e160..3e42e91d045 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -629,7 +629,6 @@ class Share {
}
$root = strlen($root);
$query = \OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*share` '.$where, $queryLimit);
-
$result = $query->execute($queryArgs);
$items = array();
$targets = array();
@@ -692,37 +691,47 @@ class Share {
// Check if this is a collection of the requested item type
if ($includeCollections && in_array($row['item_type'], $collectionTypes)) {
if (($collectionBackend = self::getBackend($row['item_type'])) && $collectionBackend instanceof Share_Backend_Collection) {
- $row['collection'] = array('item_type' => $itemType, $column => $row[$column]);
- // Fetch all of the children sources
- $children = $collectionBackend->getChildren($row[$column]);
- foreach ($children as $child) {
- $childItem = $row;
- if ($row['item_type'] != 'file' && $row['item_type'] != 'folder') {
- $childItem['item_source'] = $child['source'];
- $childItem['item_target'] = $child['target'];
- }
- if ($backend instanceof Share_Backend_File_Dependent) {
- if ($row['item_type'] == 'file' || $row['item_type'] == 'folder') {
- $childItem['file_source'] = $child['source'];
- } else {
- $childItem['file_source'] = \OC_FileCache::getId($child['file_path']);
+ // Collections can be inside collections, check if the item is a collection
+ if (isset($item) && $row['item_type'] == $itemType && $row[$column] == $item) {
+ $collectionItems[] = $row;
+ } else {
+ $row['collection'] = array('item_type' => $row['item_type'], $column => $row[$column]);
+ // Fetch all of the children sources
+ $children = $collectionBackend->getChildren($row[$column]);
+ foreach ($children as $child) {
+ $childItem = $row;
+ $childItem['item_type'] = $itemType;
+ if ($row['item_type'] != 'file' && $row['item_type'] != 'folder') {
+ $childItem['item_source'] = $child['source'];
+ $childItem['item_target'] = $child['target'];
}
- $childItem['file_target'] = \OC_Filesystem::normalizePath($child['file_path']);
- }
- if (isset($item)) {
- if ($childItem[$column] == $item) {
- // Return only the item instead of a 2-dimensional array
- if ($limit == 1 && $format == self::FORMAT_NONE) {
- return $childItem;
+ if ($backend instanceof Share_Backend_File_Dependent) {
+ if ($row['item_type'] == 'file' || $row['item_type'] == 'folder') {
+ $childItem['file_source'] = $child['source'];
} else {
- // Unset the items array and break out of both loops
- $items = array();
- $items[] = $childItem;
- break 2;
+ $childItem['file_source'] = \OC_FileCache::getId($child['file_path']);
}
+ $childItem['file_target'] = \OC_Filesystem::normalizePath($child['file_path']);
+ }
+ if (isset($item)) {
+ if ($childItem[$column] == $item) {
+ // Return only the item instead of a 2-dimensional array
+ if ($limit == 1) {
+ if ($format == self::FORMAT_NONE) {
+ return $childItem;
+ } else {
+ // Unset the items array and break out of both loops
+ $items = array();
+ $items[] = $childItem;
+ break 2;
+ }
+ } else {
+ $collectionItems[] = $childItem;
+ }
+ }
+ } else {
+ $collectionItems[] = $childItem;
}
- } else {
- $collectionItems[] = $childItem;
}
}
}
@@ -1182,4 +1191,4 @@ interface Share_Backend_Collection extends Share_Backend {
*/
public function getChildren($itemSource);
-}
+} \ No newline at end of file