Zwischenstand

This commit is contained in:
Sven Wappler
2021-08-20 16:25:22 +02:00
parent bb12a00ef5
commit 95b29228a0
8 changed files with 183 additions and 5 deletions

View File

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

View 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;
}
}

View File

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

View 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();
}
}