2021-08-20 13:33:13 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace WapplerSystems\BookmarksLikesRatings\Domain\Repository;
|
|
|
|
|
2021-08-20 16:25:22 +02:00
|
|
|
use TYPO3\CMS\Core\Database\ConnectionPool;
|
|
|
|
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
|
|
|
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
2021-08-20 13:33:13 +02:00
|
|
|
use TYPO3\CMS\Extbase\Persistence\QueryInterface;
|
|
|
|
use WapplerSystems\BookmarksLikesRatings\Domain\Model\Rating;
|
|
|
|
use WapplerSystems\BookmarksLikesRatings\Domain\Model\Vote;
|
|
|
|
use WapplerSystems\BookmarksLikesRatings\Domain\Model\Voter;
|
|
|
|
use TYPO3\CMS\Extbase\Persistence\Repository;
|
|
|
|
|
|
|
|
/**
|
|
|
|
*/
|
|
|
|
class BookmarkRepository extends Repository
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
public function countByUserTablenameObjectUid($userUid, $tablename, $objectUid)
|
|
|
|
{
|
|
|
|
$query = $this->createQuery();
|
|
|
|
|
|
|
|
return $query->matching(
|
|
|
|
$query->logicalAnd(
|
|
|
|
[
|
|
|
|
$query->equals('user', $userUid),
|
|
|
|
$query->equals('tablename', $tablename),
|
|
|
|
$query->equals('objectUid', $objectUid)
|
|
|
|
]
|
|
|
|
)
|
|
|
|
)->execute()->count();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function removeByUserTablenameObjectUid($userUid, $tablename, $objectUid)
|
|
|
|
{
|
|
|
|
$query = $this->createQuery();
|
|
|
|
|
|
|
|
$objs = $query->matching(
|
|
|
|
$query->logicalAnd(
|
|
|
|
[
|
|
|
|
$query->equals('user', $userUid),
|
|
|
|
$query->equals('tablename', $tablename),
|
|
|
|
$query->equals('objectUid', $objectUid)
|
|
|
|
]
|
|
|
|
)
|
|
|
|
)->execute()->toArray();
|
|
|
|
|
|
|
|
foreach ($objs as $obj) {
|
|
|
|
$this->remove($obj);
|
|
|
|
}
|
|
|
|
|
2021-08-20 13:47:55 +02:00
|
|
|
$this->persistenceManager->persistAll();
|
2021-08-20 13:33:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2021-08-20 16:25:22 +02:00
|
|
|
public function getTop($limit)
|
|
|
|
{
|
|
|
|
|
|
|
|
/** @var QueryBuilder $queryBuilder */
|
|
|
|
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_bookmarkslikesratings_domain_model_bookmark');
|
|
|
|
|
|
|
|
return $queryBuilder
|
|
|
|
->select('tablename')
|
|
|
|
->addSelect('object_uid')
|
|
|
|
->addSelectLiteral('count(*) as number')
|
|
|
|
->from('tx_bookmarkslikesratings_domain_model_bookmark')
|
|
|
|
->groupBy('tablename')
|
|
|
|
->addGroupBy('object_uid')
|
|
|
|
->orderBy('number', 'DESC')
|
|
|
|
->setMaxResults($limit)
|
|
|
|
->execute()->fetchAll();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2021-08-20 13:33:13 +02:00
|
|
|
/**
|
|
|
|
* Initialize this repository
|
|
|
|
*/
|
|
|
|
public function initializeObject(): void
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Finds the voting by giving the rating and voter objects
|
|
|
|
*
|
|
|
|
* @param Rating|null $rating The concerned ratingobject
|
|
|
|
* @param Voter|null $voter The Uid of the rated row
|
|
|
|
* @return Vote|object The voting
|
|
|
|
*/
|
|
|
|
public function findMatchingRatingAndVoter($rating = null, $voter = null)
|
|
|
|
{
|
|
|
|
/** @var QueryInterface $query */
|
|
|
|
$query = $this->createQuery();
|
|
|
|
|
|
|
|
return $query->matching(
|
|
|
|
$query->logicalAnd(
|
|
|
|
[
|
|
|
|
$query->equals('rating', $rating),
|
|
|
|
$query->equals('voter', $voter)
|
|
|
|
]
|
|
|
|
)
|
|
|
|
)->execute()->getFirst();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Counts all votings by giving the rating and ratingstep
|
|
|
|
*
|
|
|
|
* @param Rating $rating The concerned ratingobject
|
|
|
|
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf $stepconf The stepconf object
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
public function countByMatchingRatingAndVote($rating = null, $stepconf = null): int
|
|
|
|
{
|
|
|
|
$query = $this->createQuery();
|
|
|
|
$query->matching($query->logicalAnd(
|
|
|
|
[
|
|
|
|
$query->equals('rating', $rating->getUid()),
|
|
|
|
$query->equals('vote', $stepconf->getUid())
|
|
|
|
]
|
|
|
|
));
|
|
|
|
|
|
|
|
return count($query->execute());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Counts all anonymous votings by giving the rating and ratingstep
|
|
|
|
*
|
|
|
|
* @param Rating $rating The concerned ratingobject
|
|
|
|
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Model\Stepconf $stepconf The stepconf object
|
|
|
|
* @param int $anonymousVoter UID of the anonymous account
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
public function countAnonymousByMatchingRatingAndVote($rating = null, $stepconf = null, $anonymousVoter = null): int
|
|
|
|
{
|
|
|
|
/** @var int $count */
|
|
|
|
$count = 0;
|
|
|
|
|
|
|
|
if ($anonymousVoter !== null) {
|
|
|
|
$query = $this->createQuery();
|
|
|
|
$query->matching(
|
|
|
|
$query->logicalAnd([
|
|
|
|
$query->equals('rating', $rating->getUid()),
|
|
|
|
$query->equals('vote', $stepconf->getUid()),
|
|
|
|
$query->equals('voter', $anonymousVoter),
|
|
|
|
])
|
|
|
|
);
|
|
|
|
$count = count($query->execute());
|
|
|
|
}
|
|
|
|
|
|
|
|
return $count;
|
|
|
|
}
|
|
|
|
}
|