From 13d513c17c264a3bbb1b2c874bb742afbce76e10 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Sun, 9 Sep 2012 11:50:12 -0400 Subject: [PATCH] Fix shared collection item searching --- core/ajax/share.php | 2 +- lib/public/share.php | 67 +++++++++++++++++++++++++------------------- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/core/ajax/share.php b/core/ajax/share.php index 3ace97d4d02..5b6763c08e7 100644 --- a/core/ajax/share.php +++ b/core/ajax/share.php @@ -72,7 +72,7 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo $reshare = false; } if ($_GET['checkShares'] == 'true') { - $shares = OCP\Share::getItemShared($_GET['itemType'], $_GET['itemSource']); + $shares = OCP\Share::getItemShared($_GET['itemType'], $_GET['itemSource'], OCP\Share::FORMAT_NONE, null, true); } else { $shares = false; } 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 -- 2.39.5