Zwischenstand
This commit is contained in:
@@ -2,6 +2,9 @@
|
||||
|
||||
namespace WapplerSystems\BookmarksLikesRatings\Domain\Repository;
|
||||
|
||||
use TYPO3\CMS\Core\Database\ConnectionPool;
|
||||
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Persistence\QueryInterface;
|
||||
use WapplerSystems\BookmarksLikesRatings\Domain\Model\Rating;
|
||||
use WapplerSystems\BookmarksLikesRatings\Domain\Model\Vote;
|
||||
@@ -52,6 +55,25 @@ class BookmarkRepository extends Repository
|
||||
}
|
||||
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize this repository
|
||||
*/
|
||||
|
51
Classes/Widgets/Provider/TopBookmarksDataProvider.php
Normal file
51
Classes/Widgets/Provider/TopBookmarksDataProvider.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
namespace WapplerSystems\BookmarksLikesRatings\Widgets\Provider;
|
||||
|
||||
use TYPO3\CMS\Backend\Utility\BackendUtility;
|
||||
use WapplerSystems\BookmarksLikesRatings\Domain\Repository\BookmarkRepository;
|
||||
|
||||
class TopBookmarksDataProvider
|
||||
{
|
||||
|
||||
/** @var BookmarkRepository */
|
||||
protected $bookmarkRepository;
|
||||
|
||||
public function injectBookmarkRepository(BookmarkRepository $bookmarkRepository) {
|
||||
$this->bookmarkRepository = $bookmarkRepository;
|
||||
}
|
||||
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
public function getItems()
|
||||
{
|
||||
|
||||
$objs = $this->bookmarkRepository->getTop(10);
|
||||
|
||||
$items = [];
|
||||
|
||||
foreach ($objs as $obj) {
|
||||
$title = '';
|
||||
if ($obj['tablename'] === 'pages') {
|
||||
|
||||
$page = BackendUtility::getRecord('pages',$obj['object_uid'],'title');
|
||||
if ($page) {
|
||||
$title = $page['title'];
|
||||
}
|
||||
}
|
||||
$items[] = [
|
||||
'title' => $title,
|
||||
'number' => $obj['number']
|
||||
];
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
}
|
@@ -6,7 +6,6 @@ declare(strict_types=1);
|
||||
namespace WapplerSystems\BookmarksLikesRatings\Widgets\Provider;
|
||||
|
||||
use TYPO3\CMS\Backend\Utility\BackendUtility;
|
||||
use TYPO3\CMS\Core\Utility\DebugUtility;
|
||||
use WapplerSystems\BookmarksLikesRatings\Domain\Repository\LikeRepository;
|
||||
|
||||
class TopLikesDataProvider
|
||||
@@ -16,7 +15,7 @@ class TopLikesDataProvider
|
||||
protected $likeRepository;
|
||||
|
||||
/**
|
||||
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Repository\LikeRepository $bookmarkRepository
|
||||
* @param \WapplerSystems\BookmarksLikesRatings\Domain\Repository\LikeRepository $likeRepository
|
||||
*/
|
||||
public function injectLikeRepository(LikeRepository $likeRepository) {
|
||||
$this->likeRepository = $likeRepository;
|
||||
|
65
Classes/Widgets/TopBookmarksWidget.php
Normal file
65
Classes/Widgets/TopBookmarksWidget.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace WapplerSystems\BookmarksLikesRatings\Widgets;
|
||||
|
||||
use TYPO3\CMS\Dashboard\Widgets\ButtonProviderInterface;
|
||||
use TYPO3\CMS\Dashboard\Widgets\WidgetConfigurationInterface;
|
||||
use TYPO3\CMS\Dashboard\Widgets\WidgetInterface;
|
||||
use TYPO3\CMS\Fluid\View\StandaloneView;
|
||||
use WapplerSystems\BookmarksLikesRatings\Widgets\Provider\TopBookmarksDataProvider;
|
||||
|
||||
class TopBookmarksWidget implements WidgetInterface
|
||||
{
|
||||
/**
|
||||
* @var WidgetConfigurationInterface
|
||||
*/
|
||||
private $configuration;
|
||||
|
||||
/**
|
||||
* @var StandaloneView
|
||||
*/
|
||||
private $view;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $options;
|
||||
/**
|
||||
* @var ButtonProviderInterface|null
|
||||
*/
|
||||
private $buttonProvider;
|
||||
|
||||
/**
|
||||
* @var TopBookmarksDataProvider
|
||||
*/
|
||||
private $dataProvider;
|
||||
|
||||
public function __construct(
|
||||
WidgetConfigurationInterface $configuration,
|
||||
TopBookmarksDataProvider $dataProvider,
|
||||
StandaloneView $view,
|
||||
$buttonProvider = null,
|
||||
array $options = []
|
||||
)
|
||||
{
|
||||
$this->configuration = $configuration;
|
||||
$this->view = $view;
|
||||
$this->options = $options;
|
||||
$this->buttonProvider = $buttonProvider;
|
||||
$this->dataProvider = $dataProvider;
|
||||
}
|
||||
|
||||
public function renderWidgetContent(): string
|
||||
{
|
||||
$this->view->setTemplate('TopBookmarksWidget');
|
||||
$this->view->assignMultiple([
|
||||
'items' => $this->dataProvider->getItems(),
|
||||
'options' => $this->options,
|
||||
'button' => $this->buttonProvider,
|
||||
'configuration' => $this->configuration,
|
||||
]);
|
||||
return $this->view->render();
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user