Merge pull request #23256 from nextcloud/backport/23184/stable20

[stable20] Make sure getUsersFavoritingObject can be run without a user
This commit is contained in:
Roeland Jago Douma 2020-10-08 11:49:03 +02:00 committed by GitHub
commit 2d2cba3c9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 39 deletions

View File

@ -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);
}
} }

View File

@ -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.
* *

View File

@ -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));
} }