Make sure getUsersFavoritingObject can be run without a user
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
f4891da160
commit
d68d62f052
|
@ -38,32 +38,27 @@
|
||||||
namespace OC;
|
namespace OC;
|
||||||
|
|
||||||
use OC\Tagging\TagMapper;
|
use OC\Tagging\TagMapper;
|
||||||
|
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||||
|
use OCP\IDBConnection;
|
||||||
|
use OCP\ITagManager;
|
||||||
|
use OCP\ITags;
|
||||||
|
use OCP\IUserSession;
|
||||||
|
|
||||||
class TagManager implements \OCP\ITagManager {
|
class TagManager implements ITagManager {
|
||||||
|
|
||||||
/**
|
/** @var TagMapper */
|
||||||
* User session
|
|
||||||
*
|
|
||||||
* @var \OCP\IUserSession
|
|
||||||
*/
|
|
||||||
private $userSession;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TagMapper
|
|
||||||
*
|
|
||||||
* @var TagMapper
|
|
||||||
*/
|
|
||||||
private $mapper;
|
private $mapper;
|
||||||
|
|
||||||
/**
|
/** @var IUserSession */
|
||||||
* Constructor.
|
private $userSession;
|
||||||
*
|
|
||||||
* @param TagMapper $mapper Instance of the TagMapper abstraction layer.
|
/** @var IDBConnection */
|
||||||
* @param \OCP\IUserSession $userSession the user session
|
private $connection;
|
||||||
*/
|
|
||||||
public function __construct(TagMapper $mapper, \OCP\IUserSession $userSession) {
|
public function __construct(TagMapper $mapper, IUserSession $userSession, IDBConnection $connection) {
|
||||||
$this->mapper = $mapper;
|
$this->mapper = $mapper;
|
||||||
$this->userSession = $userSession;
|
$this->userSession = $userSession;
|
||||||
|
$this->connection = $connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -90,4 +85,23 @@ class TagManager implements \OCP\ITagManager {
|
||||||
}
|
}
|
||||||
return new Tags($this->mapper, $userId, $type, $defaultTags);
|
return new Tags($this->mapper, $userId, $type, $defaultTags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all users who favorited an object
|
||||||
|
*
|
||||||
|
* @param string $objectType
|
||||||
|
* @param int $objectId
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getUsersFavoritingObject(string $objectType, int $objectId): array {
|
||||||
|
$query = $this->connection->getQueryBuilder();
|
||||||
|
$query->select('uid')
|
||||||
|
->from('vcategory_to_object', 'o')
|
||||||
|
->innerJoin('o', 'vcategory', 'c', $query->expr()->eq('o.categoryid', 'c.id'))
|
||||||
|
->where($query->expr()->eq('objid', $query->createNamedParameter($objectId, IQueryBuilder::PARAM_INT)))
|
||||||
|
->andWhere($query->expr()->eq('c.type', $query->createNamedParameter($objectType)))
|
||||||
|
->andWhere($query->expr()->eq('c.category', $query->createNamedParameter(ITags::TAG_FAVORITE)));
|
||||||
|
|
||||||
|
return $query->execute()->fetchAll(\PDO::FETCH_COLUMN);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -641,23 +641,6 @@ class Tags implements ITags {
|
||||||
return $this->unTag($objid, ITags::TAG_FAVORITE);
|
return $this->unTag($objid, ITags::TAG_FAVORITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all users who favorited an object
|
|
||||||
*/
|
|
||||||
public function getUsersFavoritingObject($objId) {
|
|
||||||
$entries = [];
|
|
||||||
|
|
||||||
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
|
|
||||||
$query->select('uid')
|
|
||||||
->from('vcategory_to_object', 'o')
|
|
||||||
->innerJoin('o', 'vcategory', 'c', $query->expr()->eq('o.categoryid', 'c.id'))
|
|
||||||
->where($query->expr()->eq('objid', $query->createNamedParameter($objId, IQueryBuilder::PARAM_INT)))
|
|
||||||
->andWhere($query->expr()->eq('c.type', $query->createNamedParameter($this->type)))
|
|
||||||
->andWhere($query->expr()->eq('c.category', $query->createNamedParameter(ITags::TAG_FAVORITE)));
|
|
||||||
|
|
||||||
return $query->execute()->fetchAll(\PDO::FETCH_COLUMN);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a tag/object relation.
|
* Creates a tag/object relation.
|
||||||
*
|
*
|
||||||
|
|
|
@ -61,7 +61,7 @@ class TagsTest extends \Test\TestCase {
|
||||||
|
|
||||||
$this->objectType = $this->getUniqueID('type_');
|
$this->objectType = $this->getUniqueID('type_');
|
||||||
$this->tagMapper = new \OC\Tagging\TagMapper(\OC::$server->getDatabaseConnection());
|
$this->tagMapper = new \OC\Tagging\TagMapper(\OC::$server->getDatabaseConnection());
|
||||||
$this->tagMgr = new \OC\TagManager($this->tagMapper, $this->userSession);
|
$this->tagMgr = new \OC\TagManager($this->tagMapper, $this->userSession, \OC::$server->getDatabaseConnection());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function tearDown(): void {
|
protected function tearDown(): void {
|
||||||
|
@ -78,7 +78,7 @@ class TagsTest extends \Test\TestCase {
|
||||||
->expects($this->any())
|
->expects($this->any())
|
||||||
->method('getUser')
|
->method('getUser')
|
||||||
->willReturn(null);
|
->willReturn(null);
|
||||||
$this->tagMgr = new \OC\TagManager($this->tagMapper, $this->userSession);
|
$this->tagMgr = new \OC\TagManager($this->tagMapper, $this->userSession, \OC::$server->getDatabaseConnection());
|
||||||
$this->assertNull($this->tagMgr->load($this->objectType));
|
$this->assertNull($this->tagMgr->load($this->objectType));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue