Initial commit - Typo3 11.5.41

This commit is contained in:
Matteo Gallo
2026-07-03 17:53:31 +02:00
commit 5ca4743197
6811 changed files with 568848 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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

View File

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