Initial commit - Typo3 11.5.41
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace Brightside\Paginatedprocessors\DataProcessing;
|
||||
|
||||
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
|
||||
use TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor;
|
||||
|
||||
// Use DataToPaginatedData class
|
||||
use Brightside\Paginatedprocessors\Processing\DataToPaginatedData;
|
||||
|
||||
class PaginatedDatabaseQueryProcessor extends DatabaseQueryProcessor
|
||||
{
|
||||
public function process(
|
||||
ContentObjectRenderer $cObj,
|
||||
array $contentObjectConfiguration,
|
||||
array $processorConfiguration,
|
||||
array $processedData
|
||||
) {
|
||||
$allProcessedData = parent::process($cObj, $contentObjectConfiguration, $processorConfiguration, $processedData);
|
||||
|
||||
// Get pagination settings from TypoScript
|
||||
$paginationSettings = $processorConfiguration['pagination.'];
|
||||
|
||||
// If pagination activated
|
||||
if ((int)($cObj->stdWrapValue('isActive', $paginationSettings ?? []))) {
|
||||
$paginatedData = new DataToPaginatedData();
|
||||
$allProcessedData = $paginatedData->getPaginatedData(
|
||||
$cObj,
|
||||
$contentObjectConfiguration,
|
||||
$processorConfiguration,
|
||||
$allProcessedData,
|
||||
$allProcessedData[$processorConfiguration['as']], // Data to paginate
|
||||
$processorConfiguration['as'] // Array key for the paginated data
|
||||
);
|
||||
return $allProcessedData;
|
||||
} else {
|
||||
return $allProcessedData;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
namespace Brightside\Paginatedprocessors\DataProcessing;
|
||||
|
||||
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
|
||||
use TYPO3\CMS\Frontend\Resource\FileCollector;
|
||||
use TYPO3\CMS\Frontend\DataProcessing\FilesProcessor;
|
||||
use Brightside\Paginatedprocessors\Processing\DataToPaginatedData;
|
||||
|
||||
class PaginatedFilesProcessor extends FilesProcessor
|
||||
{
|
||||
public function process(
|
||||
ContentObjectRenderer $cObj,
|
||||
array $contentObjectConfiguration,
|
||||
array $processorConfiguration,
|
||||
array $processedData
|
||||
) {
|
||||
$allProcessedData = parent::process($cObj, $contentObjectConfiguration, $processorConfiguration, $processedData);
|
||||
$paginationSettings = $processorConfiguration['pagination.'];
|
||||
if ((int)($cObj->stdWrapValue('isActive', $paginationSettings ?? []))) {
|
||||
$paginatedData = new DataToPaginatedData();
|
||||
$allProcessedData = $paginatedData->getPaginatedData(
|
||||
$cObj,
|
||||
$contentObjectConfiguration,
|
||||
$processorConfiguration,
|
||||
$allProcessedData,
|
||||
$allProcessedData[$processorConfiguration['as']],
|
||||
$processorConfiguration['as']
|
||||
);
|
||||
return $allProcessedData;
|
||||
} else {
|
||||
return $allProcessedData;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
namespace Brightside\Paginatedprocessors\DataProcessing;
|
||||
|
||||
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
|
||||
use TYPO3\CMS\Frontend\DataProcessing\MenuProcessor;
|
||||
use Brightside\Paginatedprocessors\Processing\DataToPaginatedData;
|
||||
|
||||
class PaginatedMenuProcessor extends MenuProcessor
|
||||
{
|
||||
/**
|
||||
* Allowed configuration keys for menu generation, other keys
|
||||
* will throw an exception to prevent configuration errors.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $allowedConfigurationKeys = [
|
||||
'cache_period',
|
||||
'entryLevel',
|
||||
'entryLevel.',
|
||||
'special',
|
||||
'special.',
|
||||
'minItems',
|
||||
'minItems.',
|
||||
'maxItems',
|
||||
'maxItems.',
|
||||
'begin',
|
||||
'begin.',
|
||||
'alternativeSortingField',
|
||||
'alternativeSortingField.',
|
||||
'showAccessRestrictedPages',
|
||||
'showAccessRestrictedPages.',
|
||||
'excludeUidList',
|
||||
'excludeUidList.',
|
||||
'excludeDoktypes',
|
||||
'includeNotInMenu',
|
||||
'includeNotInMenu.',
|
||||
'alwaysActivePIDlist',
|
||||
'alwaysActivePIDlist.',
|
||||
'protectLvar',
|
||||
'addQueryString',
|
||||
'addQueryString.',
|
||||
'if',
|
||||
'if.',
|
||||
'levels',
|
||||
'levels.',
|
||||
'expandAll',
|
||||
'expandAll.',
|
||||
'includeSpacer',
|
||||
'includeSpacer.',
|
||||
'as',
|
||||
'titleField',
|
||||
'titleField.',
|
||||
'dataProcessing',
|
||||
'dataProcessing.',
|
||||
'pagination.',
|
||||
];
|
||||
public function process(
|
||||
ContentObjectRenderer $cObj,
|
||||
array $contentObjectConfiguration,
|
||||
array $processorConfiguration,
|
||||
array $processedData
|
||||
) {
|
||||
$allProcessedData = parent::process($cObj, $contentObjectConfiguration, $processorConfiguration, $processedData);
|
||||
$paginationSettings = $processorConfiguration['pagination.'];
|
||||
if ((int)($cObj->stdWrapValue('isActive', $paginationSettings ?? []))) {
|
||||
$paginatedData = new DataToPaginatedData();
|
||||
$allProcessedData = $paginatedData->getPaginatedData(
|
||||
$cObj,
|
||||
$contentObjectConfiguration,
|
||||
$processorConfiguration,
|
||||
$allProcessedData,
|
||||
$allProcessedData[$processorConfiguration['as']],
|
||||
$processorConfiguration['as']
|
||||
);
|
||||
return $allProcessedData;
|
||||
} else {
|
||||
return $allProcessedData;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
namespace Brightside\Paginatedprocessors\Processing;
|
||||
|
||||
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
|
||||
use TYPO3\CMS\Core\Pagination\ArrayPaginator;
|
||||
use TYPO3\CMS\Core\Pagination\SimplePagination;
|
||||
|
||||
class DataToPaginatedData {
|
||||
public function getPaginatedData (
|
||||
ContentObjectRenderer $cObj,
|
||||
array $contentObjectConfiguration,
|
||||
array $processorConfiguration,
|
||||
array $allProcessedData,
|
||||
array $dataToPaginate,
|
||||
string $paginatedDataArrayKey
|
||||
) {
|
||||
$paginationSettings = $processorConfiguration['pagination.'];
|
||||
$uniquePaginatorId = $cObj->stdWrapValue('uniqueId', $paginationSettings ?? []);
|
||||
$uniquePaginatorIdKey = $cObj->getRequest()->getQueryParams()['paginatorId'] ?? null;
|
||||
if($uniquePaginatorId == $uniquePaginatorIdKey) {
|
||||
$currentPage = (int)$cObj->getRequest()->getQueryParams()['paginationPage'] ? : 1;
|
||||
} else {
|
||||
$currentPage = 1;
|
||||
}
|
||||
$uniquePaginatorName = $cObj->stdWrapValue('uniquePaginatorName', $paginationSettings ?? []);
|
||||
if ($uniquePaginatorName) {
|
||||
$paginationArray = 'pagination_' . $uniquePaginatorId;
|
||||
} else {
|
||||
$paginationArray = 'pagination';
|
||||
}
|
||||
$itemsToPaginate = $dataToPaginate;
|
||||
$itemsPerPage = (int)($cObj->stdWrapValue('itemsPerPage', $paginationSettings ?? [])) ? : 10;
|
||||
$pageLinksShown = (int)($cObj->stdWrapValue('pageLinksShown', $paginationSettings ?? [])) ? : 0;
|
||||
$anchorActive = (int)($cObj->stdWrapValue('anchorActive', $paginationSettings ?? [])) ? : 0;
|
||||
$anchorId = (int)($cObj->stdWrapValue('anchorId', $paginationSettings ?? [])) ? : 0;
|
||||
$paginator = new ArrayPaginator($itemsToPaginate, $currentPage, $itemsPerPage);
|
||||
$pagination = new SimplePagination($paginator);
|
||||
$allProcessedData = array_diff_key($allProcessedData, array_flip([$paginatedDataArrayKey]));
|
||||
$paginatedData = array(
|
||||
$paginatedDataArrayKey => $paginator->getPaginatedItems(),
|
||||
$paginationArray => array(
|
||||
'uniqueId' => $uniquePaginatorId,
|
||||
'numberOfPages' => $paginator->getNumberOfPages(),
|
||||
'currentPageNumber' => $paginator->getCurrentPageNumber(),
|
||||
'keyOfFirstPaginatedItem' => $paginator->getKeyOfFirstPaginatedItem(),
|
||||
'keyOfLastPaginatedItem' => $paginator->getKeyOfLastPaginatedItem(),
|
||||
'allPageNumbers' => $pagination->getAllPageNumbers(),
|
||||
'previousPageNumber' => $pagination->getPreviousPageNumber(),
|
||||
'nextPageNumber' => $pagination->getNextPageNumber(),
|
||||
'uniquePaginatorName' => $uniquePaginatorName,
|
||||
'pageLinksShown' => $pageLinksShown,
|
||||
'anchorActive' => $anchorActive,
|
||||
'anchorId' => $anchorId,
|
||||
)
|
||||
);
|
||||
$allProcessedData = array_merge($allProcessedData, $paginatedData);
|
||||
return $allProcessedData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
namespace Brightside\Paginatedprocessors\Routing\Aspect;
|
||||
|
||||
use TYPO3\CMS\Core\Database\ConnectionPool;
|
||||
use TYPO3\CMS\Core\Routing\Aspect\StaticMappableAspectInterface;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
class PaginatedprocessorsContentMapper implements StaticMappableAspectInterface
|
||||
{
|
||||
public function generate(string $value): ?string
|
||||
{
|
||||
if (($this->isValidContentElementUid($value)) OR ($this->isValidContentElementPaginatedprocessorsUrlsegment($value))) {
|
||||
return $value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function resolve(string $value): ?string
|
||||
{
|
||||
if (($this->isValidContentElementUid($value)) OR ($this->isValidContentElementPaginatedprocessorsUrlsegment($value))) {
|
||||
return $value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate, if $value is a valid uid in tt_content
|
||||
*
|
||||
* @param mixed $uid
|
||||
* @return bool
|
||||
*/
|
||||
protected function isValidContentElementUid($value): bool
|
||||
{
|
||||
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
|
||||
$data = (bool)$queryBuilder
|
||||
->select('uid')
|
||||
->from('tt_content')
|
||||
->where(
|
||||
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($value)),
|
||||
$queryBuilder->expr()->eq('tx_paginatedprocessors_paginationenabled', $queryBuilder->createNamedParameter(true))
|
||||
)
|
||||
->executeQuery()
|
||||
->rowCount();
|
||||
return $data;
|
||||
}
|
||||
/**
|
||||
* Validate, if $value is a valid tx_paginatedprocessors_slug in tt_content
|
||||
*
|
||||
* @param mixed $tx_paginatedprocessors_slug
|
||||
* @return bool
|
||||
*/
|
||||
protected function isValidContentElementPaginatedprocessorsUrlsegment($value): bool
|
||||
{
|
||||
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
|
||||
$data = (bool)$queryBuilder
|
||||
->select('tx_paginatedprocessors_urlsegment')
|
||||
->from('tt_content')
|
||||
->where(
|
||||
$queryBuilder->expr()->eq('tx_paginatedprocessors_urlsegment', $queryBuilder->createNamedParameter($value)),
|
||||
$queryBuilder->expr()->eq('tx_paginatedprocessors_paginationenabled', $queryBuilder->createNamedParameter(true))
|
||||
)
|
||||
->executeQuery()
|
||||
->rowCount();
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user