2015-03-30 18:21:06 +03:00
|
|
|
<?php
|
|
|
|
/**
|
2016-01-12 17:02:16 +03:00
|
|
|
* @copyright Copyright (c) 2016, ownCloud, Inc.
|
2016-07-21 17:49:16 +03:00
|
|
|
*
|
|
|
|
* @author Joas Schilling <coding@schilljs.com>
|
|
|
|
*
|
2015-03-30 18:21:06 +03:00
|
|
|
* @license AGPL-3.0
|
|
|
|
*
|
|
|
|
* This code is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License, version 3,
|
|
|
|
* as published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public License, version 3,
|
2019-12-03 21:57:53 +03:00
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
2015-03-30 18:21:06 +03:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2016-10-21 13:46:04 +03:00
|
|
|
namespace OCA\Files\Activity;
|
2015-03-30 18:21:06 +03:00
|
|
|
|
|
|
|
use OCP\Files\Folder;
|
|
|
|
use OCP\ITagManager;
|
|
|
|
|
2016-10-21 13:46:04 +03:00
|
|
|
class Helper {
|
2015-03-30 18:21:06 +03:00
|
|
|
/** If a user has a lot of favorites the query might get too slow and long */
|
|
|
|
const FAVORITE_LIMIT = 50;
|
|
|
|
|
2016-10-21 13:46:04 +03:00
|
|
|
/** @var ITagManager */
|
2015-03-30 18:21:06 +03:00
|
|
|
protected $tagManager;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param ITagManager $tagManager
|
|
|
|
*/
|
|
|
|
public function __construct(ITagManager $tagManager) {
|
|
|
|
$this->tagManager = $tagManager;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns an array with the favorites
|
|
|
|
*
|
|
|
|
* @param string $user
|
|
|
|
* @return array
|
|
|
|
* @throws \RuntimeException when too many or no favorites where found
|
|
|
|
*/
|
|
|
|
public function getFavoriteFilePaths($user) {
|
|
|
|
$tags = $this->tagManager->load('files', [], false, $user);
|
|
|
|
$favorites = $tags->getFavorites();
|
|
|
|
|
|
|
|
if (empty($favorites)) {
|
|
|
|
throw new \RuntimeException('No favorites', 1);
|
2020-04-10 11:35:09 +03:00
|
|
|
} elseif (isset($favorites[self::FAVORITE_LIMIT])) {
|
2015-03-30 18:21:06 +03:00
|
|
|
throw new \RuntimeException('Too many favorites', 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Can not DI because the user is not known on instantiation
|
|
|
|
$rootFolder = \OC::$server->getUserFolder($user);
|
|
|
|
$folders = $items = [];
|
|
|
|
foreach ($favorites as $favorite) {
|
|
|
|
$nodes = $rootFolder->getById($favorite);
|
2015-04-01 13:13:49 +03:00
|
|
|
if (!empty($nodes)) {
|
2015-03-30 18:21:06 +03:00
|
|
|
/** @var \OCP\Files\Node $node */
|
|
|
|
$node = array_shift($nodes);
|
|
|
|
$path = substr($node->getPath(), strlen($user . '/files/'));
|
|
|
|
|
|
|
|
$items[] = $path;
|
|
|
|
if ($node instanceof Folder) {
|
|
|
|
$folders[] = $path;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (empty($items)) {
|
|
|
|
throw new \RuntimeException('No favorites', 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
return [
|
|
|
|
'items' => $items,
|
|
|
|
'folders' => $folders,
|
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|