diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 8db97a2..cbb2c18 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -29,7 +29,6 @@ jobs:
strategy:
matrix:
php-version:
- - 7.3
- 7.4
- 8.0
- 8.1
@@ -46,39 +45,6 @@ jobs:
- name: PHP lint
run: "find *.php Classes Configuration Tests -name '*.php' -print0 | xargs -0 -n 1 -P 4 php -l"
- check-dependencies:
- runs-on: ubuntu-latest
- needs:
- - check-composer
- strategy:
- matrix:
- include:
- - php-version: '7.4'
- typo3-version: '^10.4'
- - php-version: '7.4'
- typo3-version: '^11.5'
- - php-version: '8.0'
- typo3-version: '^11.5'
- - php-version: '8.1'
- typo3-version: '^11.5'
- steps:
- - uses: actions/checkout@v3
-
- - name: Install PHP
- uses: shivammathur/setup-php@v2
- with:
- php-version: "${{ matrix.php-version }}"
- coverage: none
- tools: composer:v2
- env:
- COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Install dependencies with expected TYPO3 version
- run: composer require --prefer-dist --no-progress --no-plugins "maglnet/composer-require-checker:^3.8" "typo3/cms-backend:${{ matrix.typo3-version }}" "typo3/cms-core:${{ matrix.typo3-version }}" "typo3/cms-dashboard:${{ matrix.typo3-version }}"
-
- - name: Missing composer requirements
- run: ./vendor/bin/composer-require-checker check --config-file dependency-checker.json
-
xml-linting:
runs-on: ubuntu-latest
needs:
@@ -130,65 +96,13 @@ jobs:
- name: Coding Guideline
run: ./vendor/bin/ecs check
- tests-sqlite:
- runs-on: ubuntu-latest
- needs:
- - check-dependencies
- - xml-linting
- strategy:
- matrix:
- include:
- - php-version: '7.3'
- typo3-version: '^10.4'
- - php-version: '7.4'
- typo3-version: '^10.4'
- - php-version: '7.4'
- typo3-version: '^11.5'
- - php-version: '8.0'
- typo3-version: '^11.5'
- - php-version: '8.1'
- typo3-version: '^11.5'
- steps:
- - uses: actions/checkout@v3
-
- - name: Install PHP
- uses: shivammathur/setup-php@v2
- with:
- php-version: "${{ matrix.php-version }}"
- coverage: none
- tools: composer:v2
- env:
- COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Install dependencies with expected TYPO3 version
- run: composer require --prefer-dist --no-progress "typo3/cms-backend:${{ matrix.typo3-version }}" "typo3/cms-core:${{ matrix.typo3-version }}" "typo3/cms-dashboard:${{ matrix.typo3-version }}"
-
- - name: PHPUnit Tests
- run: ./vendor/bin/phpunit --testdox
-
tests-mysql:
runs-on: ubuntu-latest
needs:
- - check-dependencies
- xml-linting
strategy:
matrix:
include:
- - db-version: '5.6'
- php-version: '7.3'
- typo3-version: '^10.4'
- - db-version: '5.6'
- php-version: '7.4'
- typo3-version: '^10.4'
- - db-version: '5.7'
- php-version: '7.3'
- typo3-version: '^10.4'
- - db-version: '5.7'
- php-version: '7.4'
- typo3-version: '^10.4'
- - db-version: '8'
- php-version: '7.4'
- typo3-version: '^10.4'
- db-version: '8'
php-version: '7.4'
typo3-version: '^11.5'
@@ -198,6 +112,9 @@ jobs:
- db-version: '8'
php-version: '8.1'
typo3-version: '^11.5'
+ - db-version: '8'
+ php-version: '8.1'
+ typo3-version: '~12.1.0'
steps:
- uses: actions/checkout@v3
@@ -231,21 +148,17 @@ jobs:
code-quality:
runs-on: ubuntu-latest
- needs:
- - check-dependencies
strategy:
matrix:
include:
- - php-version: '7.3'
- typo3-version: '^10.4'
- - php-version: '7.4'
- typo3-version: '^10.4'
- php-version: '7.4'
typo3-version: '^11.5'
- php-version: '8.0'
typo3-version: '^11.5'
- php-version: '8.1'
typo3-version: '^11.5'
+ - php-version: '8.1'
+ typo3-version: '~12.1.0'
steps:
- uses: actions/checkout@v3
diff --git a/Classes/Command/UpdateDataCommand.php b/Classes/Command/UpdateDataCommand.php
index 4aa4f07..d9ae240 100644
--- a/Classes/Command/UpdateDataCommand.php
+++ b/Classes/Command/UpdateDataCommand.php
@@ -25,7 +25,6 @@ namespace DanielSiepmann\Tracking\Command;
use DanielSiepmann\Tracking\Domain\Repository\Pageview;
use Symfony\Component\Console\Command\Command;
-use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
diff --git a/Classes/Dashboard/Provider/NewestPageviews.php b/Classes/Dashboard/Provider/NewestPageviews.php
index 0609db2..41a2eda 100644
--- a/Classes/Dashboard/Provider/NewestPageviews.php
+++ b/Classes/Dashboard/Provider/NewestPageviews.php
@@ -91,7 +91,8 @@ class NewestPageviews implements ListDataProviderInterface
->from('tx_tracking_pageview')
->orderBy('crdate', 'desc')
->addOrderBy('uid', 'desc')
- ->setMaxResults($this->maxResults);
+ ->setMaxResults($this->maxResults)
+ ;
if ($constraints !== []) {
$this->queryBuilder->where(...$constraints);
diff --git a/Classes/Dashboard/Provider/PageviewsPerDay.php b/Classes/Dashboard/Provider/PageviewsPerDay.php
index f44165b..b08fb94 100644
--- a/Classes/Dashboard/Provider/PageviewsPerDay.php
+++ b/Classes/Dashboard/Provider/PageviewsPerDay.php
@@ -63,14 +63,13 @@ class PageviewsPerDay implements ChartDataProviderInterface
private $languageLimitation;
public function __construct(
- LanguageService $languageService,
QueryBuilder $queryBuilder,
int $days = 31,
array $pagesToExclude = [],
array $languageLimitation = [],
string $dateFormat = 'Y-m-d'
) {
- $this->languageService = $languageService;
+ $this->languageService = $GLOBALS['LANG'];
$this->queryBuilder = $queryBuilder;
$this->days = $days;
$this->pagesToExclude = $pagesToExclude;
@@ -80,20 +79,20 @@ class PageviewsPerDay implements ChartDataProviderInterface
public function getChartData(): array
{
- list($labels, $data) = $this->calculateData();
+ [$labels, $data] = $this->calculateData();
return [
'labels' => $labels,
'datasets' => [
[
'label' => $this->languageService->sL(
- Extension::LANGUAGE_PATH . 'widgets.pageViewsBar.chart.dataSet.0'
+ Extension::LANGUAGE_PATH . ':dashboard.widgets.pageViewsBar.chart.dataSet.0'
),
'backgroundColor' => WidgetApi::getDefaultChartColors()[0],
'border' => 0,
- 'data' => $data
- ]
- ]
+ 'data' => $data,
+ ],
+ ],
];
}
@@ -111,7 +110,6 @@ class PageviewsPerDay implements ChartDataProviderInterface
$start = (int) strtotime('-' . $this->days . ' day 0:00:00');
$end = (int) strtotime('tomorrow midnight');
-
foreach ($this->getPageviewsInPeriod($start, $end) as $day) {
$data[$day['label']] = (int) $day['count'];
}
@@ -155,7 +153,7 @@ class PageviewsPerDay implements ChartDataProviderInterface
->where(...$constraints)
->groupBy('label')
->orderBy('label', 'ASC')
- ;
+ ;
if ($this->queryBuilder->getConnection()->getDatabasePlatform()->getName() === 'sqlite') {
$this->queryBuilder->addSelectLiteral('date(crdate, "unixepoch") as "label"');
diff --git a/Classes/Dashboard/Provider/PageviewsPerOperatingSystem.php b/Classes/Dashboard/Provider/PageviewsPerOperatingSystem.php
index 23da1ee..54ab8d4 100644
--- a/Classes/Dashboard/Provider/PageviewsPerOperatingSystem.php
+++ b/Classes/Dashboard/Provider/PageviewsPerOperatingSystem.php
@@ -64,7 +64,7 @@ class PageviewsPerOperatingSystem implements ChartDataProviderInterface
public function getChartData(): array
{
- list($labels, $data) = $this->getPageViewsPerPage();
+ [$labels, $data] = $this->getPageViewsPerPage();
return [
'labels' => $labels,
@@ -72,7 +72,7 @@ class PageviewsPerOperatingSystem implements ChartDataProviderInterface
[
'backgroundColor' => WidgetApi::getDefaultChartColors(),
'data' => $data,
- ]
+ ],
],
];
}
@@ -113,7 +113,8 @@ class PageviewsPerOperatingSystem implements ChartDataProviderInterface
->addOrderBy('operating_system', 'asc')
->setMaxResults($this->maxResults)
->execute()
- ->fetchAll();
+ ->fetchAll()
+ ;
foreach ($result as $row) {
if (is_array($row) === false) {
diff --git a/Classes/Dashboard/Provider/PageviewsPerPage.php b/Classes/Dashboard/Provider/PageviewsPerPage.php
index e07cf32..92b07da 100644
--- a/Classes/Dashboard/Provider/PageviewsPerPage.php
+++ b/Classes/Dashboard/Provider/PageviewsPerPage.php
@@ -23,8 +23,6 @@ declare(strict_types=1);
namespace DanielSiepmann\Tracking\Dashboard\Provider;
-use DanielSiepmann\Tracking\Extension;
-use Doctrine\DBAL\ParameterType;
use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
@@ -82,7 +80,7 @@ class PageviewsPerPage implements ChartDataProviderInterface
public function getChartData(): array
{
- list($labels, $data) = $this->getPageviewsPerPage();
+ [$labels, $data] = $this->getPageviewsPerPage();
return [
'labels' => $labels,
@@ -90,7 +88,7 @@ class PageviewsPerPage implements ChartDataProviderInterface
[
'backgroundColor' => WidgetApi::getDefaultChartColors(),
'data' => $data,
- ]
+ ],
],
];
}
@@ -139,7 +137,8 @@ class PageviewsPerPage implements ChartDataProviderInterface
->addOrderBy('latest', 'desc')
->setMaxResults($this->maxResults)
->execute()
- ->fetchAll();
+ ->fetchAll()
+ ;
foreach ($result as $row) {
if (is_array($row) === false) {
diff --git a/Classes/Dashboard/Provider/Recordviews.php b/Classes/Dashboard/Provider/Recordviews.php
index c0f7122..a88752b 100644
--- a/Classes/Dashboard/Provider/Recordviews.php
+++ b/Classes/Dashboard/Provider/Recordviews.php
@@ -23,15 +23,11 @@ declare(strict_types=1);
namespace DanielSiepmann\Tracking\Dashboard\Provider;
-use DanielSiepmann\Tracking\Extension;
-use Doctrine\DBAL\ParameterType;
-use Doctrine\DBAL\Statement;
+use Generator;
use TYPO3\CMS\Backend\Utility\BackendUtility;
+use TYPO3\CMS\Core\Context\LanguageAspect;
use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
-use TYPO3\CMS\Core\Database\Query\Restriction\EndTimeRestriction;
-use TYPO3\CMS\Core\Database\Query\Restriction\HiddenRestriction;
-use TYPO3\CMS\Core\Database\Query\Restriction\StartTimeRestriction;
use TYPO3\CMS\Core\Domain\Repository\PageRepository;
use TYPO3\CMS\Dashboard\WidgetApi;
use TYPO3\CMS\Dashboard\Widgets\ChartDataProviderInterface;
@@ -100,7 +96,7 @@ class Recordviews implements ChartDataProviderInterface
public function getChartData(): array
{
- list($labels, $data) = $this->getRecordviews();
+ [$labels, $data] = $this->getRecordviews();
return [
'labels' => $labels,
@@ -108,7 +104,7 @@ class Recordviews implements ChartDataProviderInterface
[
'backgroundColor' => WidgetApi::getDefaultChartColors(),
'data' => $data,
- ]
+ ],
],
];
}
@@ -147,13 +143,13 @@ class Recordviews implements ChartDataProviderInterface
];
}
- private function getRecordviewsRecords(): \Generator
+ private function getRecordviewsRecords(): Generator
{
$constraints = [
$this->queryBuilder->expr()->gte(
'tx_tracking_recordview.crdate',
strtotime('-' . $this->days . ' day 0:00:00')
- )
+ ),
];
if (count($this->pagesToExclude)) {
@@ -198,7 +194,8 @@ class Recordviews implements ChartDataProviderInterface
->orderBy('total', 'desc')
->addOrderBy('latest', 'desc')
->setMaxResults($this->maxResults)
- ->execute();
+ ->execute()
+ ;
while ($row = $result->fetch()) {
yield $row;
@@ -213,7 +210,11 @@ class Recordviews implements ChartDataProviderInterface
$record = BackendUtility::getRecord($table, $uid);
if (count($this->languageLimitation) === 1 && $record !== null) {
- $record = $this->pageRepository->getRecordOverlay($table, $record, $this->languageLimitation[0]);
+ $record = $this->pageRepository->getRecordOverlay(
+ $table,
+ $record,
+ $this->createLanguageAspect($this->languageLimitation[0])
+ );
}
if (is_array($record) === false) {
@@ -225,4 +226,13 @@ class Recordviews implements ChartDataProviderInterface
'type' => $record[$recordTypeField] ?? '',
];
}
+
+ private function createLanguageAspect(int $languageUid): LanguageAspect
+ {
+ return new LanguageAspect(
+ $languageUid,
+ null,
+ LanguageAspect::OVERLAYS_MIXED
+ );
+ }
}
diff --git a/Classes/Domain/ExpressionLanguage/SymfonyExpressionLanguage.php b/Classes/Domain/ExpressionLanguage/SymfonyExpressionLanguage.php
index 7a45b2e..f30cf06 100644
--- a/Classes/Domain/ExpressionLanguage/SymfonyExpressionLanguage.php
+++ b/Classes/Domain/ExpressionLanguage/SymfonyExpressionLanguage.php
@@ -25,10 +25,7 @@ namespace DanielSiepmann\Tracking\Domain\ExpressionLanguage;
use DanielSiepmann\Tracking\Domain\Model\Expression;
use DanielSiepmann\Tracking\Domain\Model\SymfonyExpression;
-use Psr\Http\Message\ServerRequestInterface;
-use Symfony\Component\ExpressionLanguage\ExpressionFunction;
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
-use TYPO3\CMS\Core\Context\Context;
use TYPO3\CMS\Core\Utility\ArrayUtility;
use TYPO3\CMS\Core\Utility\Exception\MissingArrayPathException;
diff --git a/Classes/Domain/Model/Pageview.php b/Classes/Domain/Model/Pageview.php
index a09fca8..eef5058 100644
--- a/Classes/Domain/Model/Pageview.php
+++ b/Classes/Domain/Model/Pageview.php
@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace DanielSiepmann\Tracking\Domain\Model;
+use DateTimeImmutable;
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
class Pageview implements HasUserAgent
@@ -43,7 +44,7 @@ class Pageview implements HasUserAgent
private $language;
/**
- * @var \DateTimeImmutable
+ * @var DateTimeImmutable
*/
private $crdate;
@@ -65,7 +66,7 @@ class Pageview implements HasUserAgent
public function __construct(
int $pageUid,
SiteLanguage $language,
- \DateTimeImmutable $crdate,
+ DateTimeImmutable $crdate,
int $pageType,
string $url,
string $userAgent,
@@ -95,7 +96,7 @@ class Pageview implements HasUserAgent
return $this->language;
}
- public function getCrdate(): \DateTimeImmutable
+ public function getCrdate(): DateTimeImmutable
{
return $this->crdate;
}
diff --git a/Classes/Domain/Model/RecordRule.php b/Classes/Domain/Model/RecordRule.php
index 15438c2..3f64c31 100644
--- a/Classes/Domain/Model/RecordRule.php
+++ b/Classes/Domain/Model/RecordRule.php
@@ -52,7 +52,7 @@ class RecordRule
public static function fromArray(array $config): self
{
- return new RecordRule(
+ return new self(
$config['matches'],
$config['recordUid'],
$config['tableName']
diff --git a/Classes/Domain/Model/Recordview.php b/Classes/Domain/Model/Recordview.php
index 46407fd..a89fdca 100644
--- a/Classes/Domain/Model/Recordview.php
+++ b/Classes/Domain/Model/Recordview.php
@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace DanielSiepmann\Tracking\Domain\Model;
+use DateTimeImmutable;
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
class Recordview implements HasUserAgent
@@ -38,7 +39,7 @@ class Recordview implements HasUserAgent
private $language;
/**
- * @var \DateTimeImmutable
+ * @var DateTimeImmutable
*/
private $crdate;
@@ -65,7 +66,7 @@ class Recordview implements HasUserAgent
public function __construct(
int $pageUid,
SiteLanguage $language,
- \DateTimeImmutable $crdate,
+ DateTimeImmutable $crdate,
string $url,
string $userAgent,
int $recordUid,
@@ -90,7 +91,7 @@ class Recordview implements HasUserAgent
return $this->language;
}
- public function getCrdate(): \DateTimeImmutable
+ public function getCrdate(): DateTimeImmutable
{
return $this->crdate;
}
diff --git a/Classes/Domain/Pageview/Factory.php b/Classes/Domain/Pageview/Factory.php
index 74f4a40..fe5884f 100644
--- a/Classes/Domain/Pageview/Factory.php
+++ b/Classes/Domain/Pageview/Factory.php
@@ -24,10 +24,12 @@ declare(strict_types=1);
namespace DanielSiepmann\Tracking\Domain\Pageview;
use DanielSiepmann\Tracking\Domain\Model\Pageview;
+use DateTimeImmutable;
use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Core\Routing\PageArguments;
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
use TYPO3\CMS\Core\Site\SiteFinder;
+use UnexpectedValueException;
class Factory
{
@@ -46,7 +48,7 @@ class Factory
return new Pageview(
$this->getRouting($request)->getPageId(),
$this->getLanguage($request),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
(int) $this->getRouting($request)->getPageType(),
(string) $request->getUri(),
$request->getHeader('User-Agent')[0] ?? ''
@@ -58,7 +60,7 @@ class Factory
return new Pageview(
(int) $dbRow['pid'],
$this->siteFinder->getSiteByPageId((int) $dbRow['pid'])->getLanguageById((int) $dbRow['sys_language_uid']),
- new \DateTimeImmutable('@' . $dbRow['crdate']),
+ new DateTimeImmutable('@' . $dbRow['crdate']),
(int) $dbRow['type'],
$dbRow['url'],
$dbRow['user_agent'],
@@ -71,7 +73,7 @@ class Factory
$language = $request->getAttribute('language');
if (!$language instanceof SiteLanguage) {
- throw new \UnexpectedValueException('Could not fetch SiteLanguage from request attributes.', 1637847002);
+ throw new UnexpectedValueException('Could not fetch SiteLanguage from request attributes.', 1637847002);
}
return $language;
@@ -82,7 +84,7 @@ class Factory
$routing = $request->getAttribute('routing');
if (!$routing instanceof PageArguments) {
- throw new \UnexpectedValueException('Could not fetch PageArguments from request attributes.', 1637847002);
+ throw new UnexpectedValueException('Could not fetch PageArguments from request attributes.', 1637847002);
}
return $routing;
diff --git a/Classes/Domain/Recordview/Factory.php b/Classes/Domain/Recordview/Factory.php
index f8d9cfe..b97ed29 100644
--- a/Classes/Domain/Recordview/Factory.php
+++ b/Classes/Domain/Recordview/Factory.php
@@ -26,10 +26,11 @@ namespace DanielSiepmann\Tracking\Domain\Recordview;
use DanielSiepmann\Tracking\Domain\ExpressionLanguage\Factory as ExpressionFactory;
use DanielSiepmann\Tracking\Domain\Model\RecordRule;
use DanielSiepmann\Tracking\Domain\Model\Recordview;
+use DateTimeImmutable;
use Psr\Http\Message\ServerRequestInterface;
-use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use TYPO3\CMS\Core\Routing\PageArguments;
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
+use UnexpectedValueException;
class Factory
{
@@ -54,7 +55,7 @@ class Factory
)->evaluate();
if (is_numeric($recordUid) === false) {
- throw new \UnexpectedValueException(
+ throw new UnexpectedValueException(
sprintf(
'Could not determine record uid based on expression: "%1$s", got type "%2$s".',
$rule->getUidExpression(),
@@ -67,7 +68,7 @@ class Factory
return new Recordview(
self::getRouting($request)->getPageId(),
self::getLanguage($request),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
(string) $request->getUri(),
$request->getHeader('User-Agent')[0] ?? '',
(int) $recordUid,
@@ -80,7 +81,7 @@ class Factory
$language = $request->getAttribute('language');
if (!$language instanceof SiteLanguage) {
- throw new \UnexpectedValueException('Could not fetch SiteLanguage from request attributes.', 1637847002);
+ throw new UnexpectedValueException('Could not fetch SiteLanguage from request attributes.', 1637847002);
}
return $language;
@@ -91,7 +92,7 @@ class Factory
$routing = $request->getAttribute('routing');
if (!$routing instanceof PageArguments) {
- throw new \UnexpectedValueException('Could not fetch PageArguments from request attributes.', 1637847002);
+ throw new UnexpectedValueException('Could not fetch PageArguments from request attributes.', 1637847002);
}
return $routing;
diff --git a/Classes/Domain/Repository/Pageview.php b/Classes/Domain/Repository/Pageview.php
index 856c568..09d5ecf 100644
--- a/Classes/Domain/Repository/Pageview.php
+++ b/Classes/Domain/Repository/Pageview.php
@@ -25,6 +25,8 @@ namespace DanielSiepmann\Tracking\Domain\Repository;
use DanielSiepmann\Tracking\Domain\Model\Pageview as Model;
use DanielSiepmann\Tracking\Domain\Pageview\Factory;
+use Generator;
+use InvalidArgumentException;
use TYPO3\CMS\Core\Database\Connection;
class Pageview
@@ -53,7 +55,8 @@ class Pageview
->count('uid')
->from('tx_tracking_pageview')
->execute()
- ->fetchColumn();
+ ->fetchOne()
+ ;
if (is_numeric($result)) {
return (int) $result;
@@ -62,7 +65,7 @@ class Pageview
return 0;
}
- public function findAll(): \Generator
+ public function findAll(): Generator
{
$queryBuilder = $this->connection->createQueryBuilder();
$pageViews = $queryBuilder->select('*')->from('tx_tracking_pageview')->execute();
@@ -79,7 +82,7 @@ class Pageview
public function update(Model $pageview): void
{
if ($pageview->getUid() === 0) {
- throw new \InvalidArgumentException('Can not update pageview if uid is 0.', 1585770573);
+ throw new InvalidArgumentException('Can not update pageview if uid is 0.', 1585770573);
}
$this->connection->update(
diff --git a/Classes/Hooks/DataHandler.php b/Classes/Hooks/DataHandler.php
index 98c33a7..92d4386 100644
--- a/Classes/Hooks/DataHandler.php
+++ b/Classes/Hooks/DataHandler.php
@@ -26,7 +26,6 @@ namespace DanielSiepmann\Tracking\Hooks;
use TYPO3\CMS\Core\DataHandling\DataHandler as Typo3DataHandler;
use TYPO3\CMS\Core\Utility\ArrayUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Core\Utility\StringUtility;
class DataHandler
{
@@ -50,14 +49,14 @@ class DataHandler
private function preventCopyOfTrackingTables(Typo3DataHandler $dataHandler): void
{
- $copyWhichTables = $dataHandler->compileAdminTables();
+ $copyWhichTables = array_keys($GLOBALS['TCA']);
if ($dataHandler->copyWhichTables !== '*') {
$copyWhichTables = GeneralUtility::trimExplode(',', $dataHandler->copyWhichTables, true);
}
- $copyWhichTables = array_filter($copyWhichTables, function (string $tableName) {
- return StringUtility::beginsWith($tableName, 'tx_tracking_') === false;
+ $copyWhichTables = array_filter($copyWhichTables, static function (string $tableName) {
+ return \str_starts_with($tableName, 'tx_tracking_') === false;
});
$dataHandler->copyWhichTables = implode(',', $copyWhichTables);
diff --git a/Classes/Middleware/Recordview.php b/Classes/Middleware/Recordview.php
index 651b470..cc63442 100644
--- a/Classes/Middleware/Recordview.php
+++ b/Classes/Middleware/Recordview.php
@@ -31,7 +31,6 @@ use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
-use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
use TYPO3\CMS\Core\Context\Context;
class Recordview implements MiddlewareInterface
diff --git a/Configuration/RequestMiddlewares.php b/Configuration/RequestMiddlewares.php
index 57ecccd..41ad382 100644
--- a/Configuration/RequestMiddlewares.php
+++ b/Configuration/RequestMiddlewares.php
@@ -1,9 +1,11 @@
[
'danielsiepmann/tracking/pageview' => [
- 'target' => \DanielSiepmann\Tracking\Middleware\Pageview::class,
+ 'target' => Pageview::class,
'before' => [
'typo3/cms-frontend/content-length-headers',
],
@@ -12,7 +14,7 @@ return [
],
],
'danielsiepmann/tracking/recordview' => [
- 'target' => \DanielSiepmann\Tracking\Middleware\Recordview::class,
+ 'target' => Recordview::class,
'before' => [
'typo3/cms-frontend/content-length-headers',
],
diff --git a/Configuration/TCA/tx_tracking_pageview.php b/Configuration/TCA/tx_tracking_pageview.php
index 89c39ae..2efdc5b 100644
--- a/Configuration/TCA/tx_tracking_pageview.php
+++ b/Configuration/TCA/tx_tracking_pageview.php
@@ -12,7 +12,6 @@ return [
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'title' => 'LLL:EXT:tracking/Resources/Private/Language/locallang_tca.xlf:table.pageview',
- 'searchFields' => 'uid, url',
'iconfile' => 'EXT:tracking/Resources/Public/Icons/Record/Pageview.svg',
],
'types' => [
@@ -35,19 +34,12 @@ return [
'config' => [
'type' => 'input',
'eval' => 'datetime',
+ 'renderType' => 'inputDateTime',
],
],
'sys_language_uid' => [
'label' => 'LLL:EXT:tracking/Resources/Private/Language/locallang_tca.xlf:table.pageview.sys_language',
- 'config' => [
- 'type' => 'select',
- 'renderType' => 'selectSingle',
- 'foreign_table' => 'sys_language',
- 'items' => [
- ['LLL:EXT:tracking/Resources/Private/Language/locallang_tca.xlf:table.pageview.sys_language.0', 0],
- ],
- 'readOnly' => true,
- ]
+ 'config' => ['type' => 'language']
],
'user_agent' => [
'label' => 'LLL:EXT:tracking/Resources/Private/Language/locallang_tca.xlf:table.pageview.user_agent',
diff --git a/Configuration/TCA/tx_tracking_recordview.php b/Configuration/TCA/tx_tracking_recordview.php
index 98085c0..778afb4 100644
--- a/Configuration/TCA/tx_tracking_recordview.php
+++ b/Configuration/TCA/tx_tracking_recordview.php
@@ -12,7 +12,6 @@ return [
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'title' => 'LLL:EXT:tracking/Resources/Private/Language/locallang_tca.xlf:table.recordview',
- 'searchFields' => 'uid, url',
'iconfile' => 'EXT:tracking/Resources/Public/Icons/Record/Recordview.svg',
],
'types' => [
@@ -35,19 +34,12 @@ return [
'config' => [
'type' => 'input',
'eval' => 'datetime',
+ 'renderType' => 'inputDateTime',
],
],
'sys_language_uid' => [
'label' => 'LLL:EXT:tracking/Resources/Private/Language/locallang_tca.xlf:table.recordview.sys_language',
- 'config' => [
- 'type' => 'select',
- 'renderType' => 'selectSingle',
- 'foreign_table' => 'sys_language',
- 'items' => [
- ['LLL:EXT:tracking/Resources/Private/Language/locallang_tca.xlf:table.recordview.sys_language.0', 0],
- ],
- 'readOnly' => true,
- ]
+ 'config' => ['type' => 'language']
],
'user_agent' => [
'label' => 'LLL:EXT:tracking/Resources/Private/Language/locallang_tca.xlf:table.recordview.user_agent',
@@ -76,7 +68,6 @@ return [
'config' => [
'type' => 'group',
'allowed' => 'tt_content,sys_category,pages',
- 'internal_type' => 'db',
'maxitems' => 1,
'minitems' => 1,
'size' => 1,
diff --git a/Documentation/Changelog/2.0.0.rst b/Documentation/Changelog/2.0.0.rst
new file mode 100644
index 0000000..7e08579
--- /dev/null
+++ b/Documentation/Changelog/2.0.0.rst
@@ -0,0 +1,34 @@
+2.0.0
+=====
+
+Breaking
+--------
+
+* Support TYPO3 v12.1, drop v10.
+ We only support last two TYPO3 versions.
+ Bugfixes and Security will be available for v10 and v11.
+ New features and breaking changes will only be available for v12.1 and v11.5 from now on.
+
+* searchFields for records got removed.
+ This should speed up your instance TYPO3 backend search.
+ Feel free to add necessary fields by overwriting TCA yourself.
+
+Features
+--------
+
+Nothing
+
+Fixes
+-----
+
+Nothing
+
+Tasks
+-----
+
+Nothing
+
+Deprecation
+-----------
+
+Nothing
diff --git a/Tests/Functional/Command/UpdateDataCommandTest.php b/Tests/Functional/Command/UpdateDataCommandTest.php
index ac85d23..5626500 100644
--- a/Tests/Functional/Command/UpdateDataCommandTest.php
+++ b/Tests/Functional/Command/UpdateDataCommandTest.php
@@ -27,15 +27,15 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Command\UpdateDataCommand
+ * @covers \DanielSiepmann\Tracking\Command\UpdateDataCommand
*/
class UpdateDataCommandTest extends TestCase
{
- protected $testExtensionsToLoad = [
+ protected array $testExtensionsToLoad = [
'typo3conf/ext/tracking',
];
- protected $pathsToLinkInTestInstance = [
+ protected array $pathsToLinkInTestInstance = [
'typo3conf/ext/tracking/Tests/Functional/Fixtures/sites' => 'typo3conf/sites',
];
@@ -50,12 +50,12 @@ class UpdateDataCommandTest extends TestCase
$tester = new CommandTester($subject);
$tester->execute([], ['capture_stderr_separately' => true]);
- static::assertSame(0, $tester->getStatusCode());
+ self::assertSame(0, $tester->getStatusCode());
$records = $this->getAllRecords('tx_tracking_pageview');
- static::assertCount(2, $records);
- static::assertSame('Linux', $records[0]['operating_system']);
- static::assertSame('Android', $records[1]['operating_system']);
+ self::assertCount(2, $records);
+ self::assertSame('Linux', $records[0]['operating_system']);
+ self::assertSame('Android', $records[1]['operating_system']);
}
/**
@@ -69,12 +69,12 @@ class UpdateDataCommandTest extends TestCase
$tester = new CommandTester($subject);
$tester->execute([], ['capture_stderr_separately' => true]);
- static::assertSame(0, $tester->getStatusCode());
+ self::assertSame(0, $tester->getStatusCode());
$records = $this->getAllRecords('tx_tracking_pageview');
- static::assertCount(2, $records);
- static::assertSame('Linux', $records[0]['operating_system']);
- static::assertSame('Android', $records[1]['operating_system']);
+ self::assertCount(2, $records);
+ self::assertSame('Linux', $records[0]['operating_system']);
+ self::assertSame('Android', $records[1]['operating_system']);
}
/**
@@ -88,9 +88,9 @@ class UpdateDataCommandTest extends TestCase
$tester = new CommandTester($subject);
$tester->execute([], ['capture_stderr_separately' => true]);
- static::assertSame(0, $tester->getStatusCode());
+ self::assertSame(0, $tester->getStatusCode());
$records = $this->getAllRecords('tx_tracking_pageview');
- static::assertCount(0, $records);
+ self::assertCount(0, $records);
}
}
diff --git a/Tests/Functional/Dashboard/Provider/NewestPageviewsTest.php b/Tests/Functional/Dashboard/Provider/NewestPageviewsTest.php
index 7ebdfcf..a553899 100644
--- a/Tests/Functional/Dashboard/Provider/NewestPageviewsTest.php
+++ b/Tests/Functional/Dashboard/Provider/NewestPageviewsTest.php
@@ -27,11 +27,11 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Dashboard\Provider\NewestPageviews
+ * @covers \DanielSiepmann\Tracking\Dashboard\Provider\NewestPageviews
*/
class NewestPageviewsTest extends TestCase
{
- protected $testExtensionsToLoad = [
+ protected array $testExtensionsToLoad = [
'typo3conf/ext/tracking',
];
@@ -54,7 +54,7 @@ class NewestPageviewsTest extends TestCase
GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview')
);
- static::assertSame([
+ self::assertSame([
'Url 10 - User-Agent 10',
'Url 9 - User-Agent 9',
'Url 8 - User-Agent 8',
@@ -84,7 +84,7 @@ class NewestPageviewsTest extends TestCase
2
);
- static::assertSame([
+ self::assertSame([
'Url 10 - User-Agent 10',
'Url 9 - User-Agent 9',
], $subject->getItems());
@@ -111,7 +111,7 @@ class NewestPageviewsTest extends TestCase
[9]
);
- static::assertSame([
+ self::assertSame([
'Url 10 - User-Agent 10',
'Url 8 - User-Agent 8',
'Url 7 - User-Agent 7',
@@ -144,7 +144,7 @@ class NewestPageviewsTest extends TestCase
[1]
);
- static::assertSame([
+ self::assertSame([
'Url 9 - User-Agent 9',
'Url 7 - User-Agent 7',
'Url 5 - User-Agent 5',
diff --git a/Tests/Functional/Dashboard/Provider/PageviewsPerDayTest.php b/Tests/Functional/Dashboard/Provider/PageviewsPerDayTest.php
index acf8f09..de2d589 100644
--- a/Tests/Functional/Dashboard/Provider/PageviewsPerDayTest.php
+++ b/Tests/Functional/Dashboard/Provider/PageviewsPerDayTest.php
@@ -23,19 +23,31 @@ namespace DanielSiepmann\Tracking\Tests\Functional\Dashboard\Provider;
use DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerDay;
use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Localization\LanguageService;
+use TYPO3\CMS\Core\Localization\LanguageServiceFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerDay
+ * @covers \DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerDay
*/
class PageviewsPerDayTest extends TestCase
{
- protected $testExtensionsToLoad = [
+ protected array $testExtensionsToLoad = [
'typo3conf/ext/tracking',
];
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $GLOBALS['LANG'] = $this->getContainer()->get(LanguageServiceFactory::class)->create('default');
+ }
+
+ protected function tearDown(): void
+ {
+ unset($GLOBALS['LANG']);
+ parent::tearDown();
+ }
+
/**
* @test
*/
@@ -50,13 +62,12 @@ class PageviewsPerDayTest extends TestCase
}
$subject = new PageviewsPerDay(
- GeneralUtility::makeInstance(LanguageService::class),
- GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview')
+ GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'),
);
$result = $subject->getChartData();
- static::assertCount(32, $result['labels']);
- static::assertCount(32, $result['datasets'][0]['data']);
+ self::assertCount(32, $result['labels']);
+ self::assertCount(32, $result['datasets'][0]['data']);
}
/**
@@ -74,14 +85,13 @@ class PageviewsPerDayTest extends TestCase
}
$subject = new PageviewsPerDay(
- GeneralUtility::makeInstance(LanguageService::class),
GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'),
3
);
$result = $subject->getChartData();
- static::assertCount(4, $result['labels']);
- static::assertSame([
+ self::assertCount(4, $result['labels']);
+ self::assertSame([
1,
1,
1,
@@ -104,15 +114,14 @@ class PageviewsPerDayTest extends TestCase
}
$subject = new PageviewsPerDay(
- GeneralUtility::makeInstance(LanguageService::class),
GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'),
3,
[2]
);
$result = $subject->getChartData();
- static::assertCount(4, $result['labels']);
- static::assertSame([
+ self::assertCount(4, $result['labels']);
+ self::assertSame([
1,
0,
1,
@@ -129,7 +138,6 @@ class PageviewsPerDayTest extends TestCase
$connection = $this->getConnectionPool()->getConnectionForTable('tx_tracking_pageview');
$subject = new PageviewsPerDay(
- GeneralUtility::makeInstance(LanguageService::class),
GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'),
1,
[],
@@ -138,11 +146,11 @@ class PageviewsPerDayTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
date('d.m.Y', strtotime('-1 day')),
date('d.m.Y'),
], $result['labels']);
- static::assertCount(2, $result['datasets'][0]['data']);
+ self::assertCount(2, $result['datasets'][0]['data']);
}
/**
@@ -160,7 +168,6 @@ class PageviewsPerDayTest extends TestCase
}
$subject = new PageviewsPerDay(
- GeneralUtility::makeInstance(LanguageService::class),
GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tracking_pageview'),
11,
[],
@@ -168,7 +175,7 @@ class PageviewsPerDayTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
0 => 0,
1 => 0,
2 => 1,
diff --git a/Tests/Functional/Dashboard/Provider/PageviewsPerOperatingSystemTest.php b/Tests/Functional/Dashboard/Provider/PageviewsPerOperatingSystemTest.php
index 2adbbe2..40f90d4 100644
--- a/Tests/Functional/Dashboard/Provider/PageviewsPerOperatingSystemTest.php
+++ b/Tests/Functional/Dashboard/Provider/PageviewsPerOperatingSystemTest.php
@@ -27,11 +27,11 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerOperatingSystem
+ * @covers \DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerOperatingSystem
*/
class PageviewsPerOperatingSystemTest extends TestCase
{
- protected $testExtensionsToLoad = [
+ protected array $testExtensionsToLoad = [
'typo3conf/ext/tracking',
];
@@ -54,7 +54,7 @@ class PageviewsPerOperatingSystemTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'System 1',
'System 10',
'System 2',
@@ -62,7 +62,7 @@ class PageviewsPerOperatingSystemTest extends TestCase
'System 4',
'System 5',
], $result['labels']);
- static::assertCount(6, $result['datasets'][0]['data']);
+ self::assertCount(6, $result['datasets'][0]['data']);
}
/**
@@ -98,12 +98,12 @@ class PageviewsPerOperatingSystemTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'System 2',
'System 1',
'System 3',
], $result['labels']);
- static::assertCount(3, $result['datasets'][0]['data']);
+ self::assertCount(3, $result['datasets'][0]['data']);
}
/**
@@ -135,11 +135,11 @@ class PageviewsPerOperatingSystemTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'System 2',
'System 3',
], $result['labels']);
- static::assertCount(2, $result['datasets'][0]['data']);
+ self::assertCount(2, $result['datasets'][0]['data']);
}
/**
@@ -164,13 +164,13 @@ class PageviewsPerOperatingSystemTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'System 1',
'System 10',
'System 2',
'System 3',
], $result['labels']);
- static::assertCount(4, $result['datasets'][0]['data']);
+ self::assertCount(4, $result['datasets'][0]['data']);
}
/**
@@ -197,13 +197,13 @@ class PageviewsPerOperatingSystemTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'System 1',
'System 3',
'System 5',
'System 7',
'System 9',
], $result['labels']);
- static::assertCount(5, $result['datasets'][0]['data']);
+ self::assertCount(5, $result['datasets'][0]['data']);
}
}
diff --git a/Tests/Functional/Dashboard/Provider/PageviewsPerPageTest.php b/Tests/Functional/Dashboard/Provider/PageviewsPerPageTest.php
index 74084de..0aa45a6 100644
--- a/Tests/Functional/Dashboard/Provider/PageviewsPerPageTest.php
+++ b/Tests/Functional/Dashboard/Provider/PageviewsPerPageTest.php
@@ -24,18 +24,31 @@ namespace DanielSiepmann\Tracking\Tests\Functional\Dashboard\Provider;
use DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerPage;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Domain\Repository\PageRepository;
+use TYPO3\CMS\Core\Localization\LanguageServiceFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerPage
+ * @covers \DanielSiepmann\Tracking\Dashboard\Provider\PageviewsPerPage
*/
class PageviewsPerPageTest extends TestCase
{
- protected $testExtensionsToLoad = [
+ protected array $testExtensionsToLoad = [
'typo3conf/ext/tracking',
];
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $GLOBALS['LANG'] = $this->getContainer()->get(LanguageServiceFactory::class)->create('default');
+ }
+
+ protected function tearDown(): void
+ {
+ unset($GLOBALS['LANG']);
+ parent::tearDown();
+ }
+
/**
* @test
*/
@@ -56,7 +69,7 @@ class PageviewsPerPageTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Page 10',
'Page 9',
'Page 8',
@@ -64,7 +77,7 @@ class PageviewsPerPageTest extends TestCase
'Page 6',
'Page 5',
], $result['labels']);
- static::assertCount(6, $result['datasets'][0]['data']);
+ self::assertCount(6, $result['datasets'][0]['data']);
}
/**
@@ -97,12 +110,12 @@ class PageviewsPerPageTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Page 2',
'Page 3',
'Page 1',
], $result['labels']);
- static::assertCount(3, $result['datasets'][0]['data']);
+ self::assertCount(3, $result['datasets'][0]['data']);
}
/**
@@ -132,11 +145,11 @@ class PageviewsPerPageTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Page 3',
'Page 2',
], $result['labels']);
- static::assertCount(2, $result['datasets'][0]['data']);
+ self::assertCount(2, $result['datasets'][0]['data']);
}
/**
@@ -161,13 +174,13 @@ class PageviewsPerPageTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Page 10',
'Page 9',
'Page 8',
'Page 7',
], $result['labels']);
- static::assertCount(4, $result['datasets'][0]['data']);
+ self::assertCount(4, $result['datasets'][0]['data']);
}
/**
@@ -193,13 +206,13 @@ class PageviewsPerPageTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Page 10',
'Page 9',
'Page 8',
'Page 7',
], $result['labels']);
- static::assertCount(4, $result['datasets'][0]['data']);
+ self::assertCount(4, $result['datasets'][0]['data']);
}
/**
@@ -242,11 +255,11 @@ class PageviewsPerPageTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Page 2',
'Page 1',
], $result['labels']);
- static::assertCount(2, $result['datasets'][0]['data']);
+ self::assertCount(2, $result['datasets'][0]['data']);
}
/**
@@ -289,11 +302,11 @@ class PageviewsPerPageTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Page 2',
'Page 1',
'Page 3',
], $result['labels']);
- static::assertCount(3, $result['datasets'][0]['data']);
+ self::assertCount(3, $result['datasets'][0]['data']);
}
}
diff --git a/Tests/Functional/Dashboard/Provider/RecordviewsTest.php b/Tests/Functional/Dashboard/Provider/RecordviewsTest.php
index 79d4dbe..52e2619 100644
--- a/Tests/Functional/Dashboard/Provider/RecordviewsTest.php
+++ b/Tests/Functional/Dashboard/Provider/RecordviewsTest.php
@@ -23,18 +23,31 @@ namespace DanielSiepmann\Tracking\Tests\Functional\Dashboard\Provider;
use DanielSiepmann\Tracking\Dashboard\Provider\Recordviews;
use TYPO3\CMS\Core\Domain\Repository\PageRepository;
+use TYPO3\CMS\Core\Localization\LanguageServiceFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Dashboard\Provider\Recordviews
+ * @covers \DanielSiepmann\Tracking\Dashboard\Provider\Recordviews
*/
class RecordviewsTest extends TestCase
{
- protected $testExtensionsToLoad = [
+ protected array $testExtensionsToLoad = [
'typo3conf/ext/tracking',
];
+ protected function setUp(): void
+ {
+ parent::setUp();
+ $GLOBALS['LANG'] = $this->getContainer()->get(LanguageServiceFactory::class)->create('default');
+ }
+
+ protected function tearDown(): void
+ {
+ unset($GLOBALS['LANG']);
+ parent::tearDown();
+ }
+
/**
* @test
*/
@@ -57,7 +70,7 @@ class RecordviewsTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Category 10',
'Category 9',
'Category 8',
@@ -65,7 +78,7 @@ class RecordviewsTest extends TestCase
'Category 6',
'Category 5',
], $result['labels']);
- static::assertCount(6, $result['datasets'][0]['data']);
+ self::assertCount(6, $result['datasets'][0]['data']);
}
/**
@@ -107,12 +120,12 @@ class RecordviewsTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Category 2',
'Category 3',
'Category 1',
], $result['labels']);
- static::assertCount(3, $result['datasets'][0]['data']);
+ self::assertCount(3, $result['datasets'][0]['data']);
}
/**
@@ -148,11 +161,11 @@ class RecordviewsTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Category 3',
'Category 2',
], $result['labels']);
- static::assertCount(2, $result['datasets'][0]['data']);
+ self::assertCount(2, $result['datasets'][0]['data']);
}
/**
@@ -179,11 +192,11 @@ class RecordviewsTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Category 10',
'Category 9',
], $result['labels']);
- static::assertCount(2, $result['datasets'][0]['data']);
+ self::assertCount(2, $result['datasets'][0]['data']);
}
/**
@@ -212,14 +225,14 @@ class RecordviewsTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Category 10',
'Category 9',
'Category 8',
'Category 7',
'Category 6',
], $result['labels']);
- static::assertCount(5, $result['datasets'][0]['data']);
+ self::assertCount(5, $result['datasets'][0]['data']);
}
/**
@@ -255,12 +268,12 @@ class RecordviewsTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Category 3',
'Category 2',
'Category 1',
], $result['labels']);
- static::assertCount(3, $result['datasets'][0]['data']);
+ self::assertCount(3, $result['datasets'][0]['data']);
}
/**
@@ -295,11 +308,11 @@ class RecordviewsTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Content element 2',
'Content element 1',
], $result['labels']);
- static::assertCount(2, $result['datasets'][0]['data']);
+ self::assertCount(2, $result['datasets'][0]['data']);
}
/**
@@ -343,11 +356,11 @@ class RecordviewsTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Category 2',
'Kategorie 1',
], $result['labels']);
- static::assertCount(2, $result['datasets'][0]['data']);
+ self::assertCount(2, $result['datasets'][0]['data']);
}
/**
@@ -391,10 +404,10 @@ class RecordviewsTest extends TestCase
);
$result = $subject->getChartData();
- static::assertSame([
+ self::assertSame([
'Category 1',
'Category 2',
], $result['labels']);
- static::assertCount(2, $result['datasets'][0]['data']);
+ self::assertCount(2, $result['datasets'][0]['data']);
}
}
diff --git a/Tests/Functional/Domain/Recordview/FactoryTest.php b/Tests/Functional/Domain/Recordview/FactoryTest.php
index a1977e2..9853086 100644
--- a/Tests/Functional/Domain/Recordview/FactoryTest.php
+++ b/Tests/Functional/Domain/Recordview/FactoryTest.php
@@ -24,6 +24,7 @@ namespace DanielSiepmann\Tracking\Tests\Unit\Domain\Recordview;
use DanielSiepmann\Tracking\Domain\Model\RecordRule;
use DanielSiepmann\Tracking\Domain\Model\Recordview;
use DanielSiepmann\Tracking\Domain\Recordview\Factory;
+use DateTimeImmutable;
use Prophecy\PhpUnit\ProphecyTrait;
use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Core\Routing\PageArguments;
@@ -31,13 +32,13 @@ use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
/**
- * @covers DanielSiepmann\Tracking\Domain\Recordview\Factory
+ * @covers \DanielSiepmann\Tracking\Domain\Recordview\Factory
*/
class FactoryTest extends FunctionalTestCase
{
use ProphecyTrait;
- protected $testExtensionsToLoad = [
+ protected array $testExtensionsToLoad = [
'typo3conf/ext/tracking',
];
@@ -67,7 +68,7 @@ class FactoryTest extends FunctionalTestCase
$subject = $this->get(Factory::class);
$result = $subject->fromRequest($request->reveal(), $rule->reveal());
- static::assertInstanceOf(Recordview::class, $result);
+ self::assertInstanceOf(Recordview::class, $result);
}
/**
@@ -96,7 +97,7 @@ class FactoryTest extends FunctionalTestCase
$subject = $this->get(Factory::class);
$result = $subject->fromRequest($request->reveal(), $rule->reveal());
- static::assertSame('Some User Agent', $result->getUserAgent());
+ self::assertSame('Some User Agent', $result->getUserAgent());
}
/**
@@ -125,7 +126,7 @@ class FactoryTest extends FunctionalTestCase
$subject = $this->get(Factory::class);
$result = $subject->fromRequest($request->reveal(), $rule->reveal());
- static::assertSame('https://example.com', $result->getUrl());
+ self::assertSame('https://example.com', $result->getUrl());
}
/**
@@ -154,7 +155,7 @@ class FactoryTest extends FunctionalTestCase
$subject = $this->get(Factory::class);
$result = $subject->fromRequest($request->reveal(), $rule->reveal());
- static::assertInstanceOf(\DateTimeImmutable::class, $result->getCrdate());
+ self::assertInstanceOf(DateTimeImmutable::class, $result->getCrdate());
}
/**
@@ -183,7 +184,7 @@ class FactoryTest extends FunctionalTestCase
$subject = $this->get(Factory::class);
$result = $subject->fromRequest($request->reveal(), $rule->reveal());
- static::assertSame($language->reveal(), $result->getLanguage());
+ self::assertSame($language->reveal(), $result->getLanguage());
}
/**
@@ -212,7 +213,7 @@ class FactoryTest extends FunctionalTestCase
$subject = $this->get(Factory::class);
$result = $subject->fromRequest($request->reveal(), $rule->reveal());
- static::assertSame(10, $result->getPageUid());
+ self::assertSame(10, $result->getPageUid());
}
/**
@@ -241,7 +242,7 @@ class FactoryTest extends FunctionalTestCase
$subject = $this->get(Factory::class);
$result = $subject->fromRequest($request->reveal(), $rule->reveal());
- static::assertSame(20, $result->getRecordUid());
+ self::assertSame(20, $result->getRecordUid());
}
/**
@@ -270,6 +271,6 @@ class FactoryTest extends FunctionalTestCase
$subject = $this->get(Factory::class);
$result = $subject->fromRequest($request->reveal(), $rule->reveal());
- static::assertSame('sys_category', $result->getTableName());
+ self::assertSame('sys_category', $result->getTableName());
}
}
diff --git a/Tests/Functional/Fixtures/BackendUser.xml b/Tests/Functional/Fixtures/BackendUser.xml
new file mode 100644
index 0000000..e30cef2
--- /dev/null
+++ b/Tests/Functional/Fixtures/BackendUser.xml
@@ -0,0 +1,21 @@
+
+
+
+ 1
+ 0
+ 1366642540
+ admin
+ $1$tCrlLajZ$C0sikFQQ3SWaFAZ1Me0Z/1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 1366642540
+ 1
+ 0
+ NULL
+ 1371033743
+ 0
+
+
diff --git a/Tests/Functional/Fixtures/Extensions/recordview/ext_emconf.php b/Tests/Functional/Fixtures/Extensions/recordview/ext_emconf.php
index 8d502f3..12d912b 100644
--- a/Tests/Functional/Fixtures/Extensions/recordview/ext_emconf.php
+++ b/Tests/Functional/Fixtures/Extensions/recordview/ext_emconf.php
@@ -5,9 +5,6 @@ $EM_CONF[$_EXTKEY] = [
'description' => 'Used by functional tests',
'category' => 'fe',
'state' => 'stable',
- 'uploadfolder' => 0,
- 'createDirs' => '',
- 'clearCacheOnLoad' => 0,
'author' => 'Daniel Siepmann',
'author_email' => 'coding@daniel-siepmann.de',
'author_company' => '',
diff --git a/Tests/Functional/PageviewTest.php b/Tests/Functional/PageviewTest.php
index 6e9e34d..cfa3d45 100644
--- a/Tests/Functional/PageviewTest.php
+++ b/Tests/Functional/PageviewTest.php
@@ -27,14 +27,16 @@ use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase as TestCase;
/**
* @testdox Pageviews are
+ *
+ * @coversNothing
*/
class PageviewTest extends TestCase
{
- protected $testExtensionsToLoad = [
+ protected array $testExtensionsToLoad = [
'typo3conf/ext/tracking',
];
- protected $pathsToLinkInTestInstance = [
+ protected array $pathsToLinkInTestInstance = [
'typo3conf/ext/tracking/Tests/Functional/Fixtures/sites' => 'typo3conf/sites',
];
@@ -62,12 +64,12 @@ class PageviewTest extends TestCase
$records = $this->getAllRecords('tx_tracking_pageview');
self::assertCount(1, $records);
- self::assertSame('1', (string)$records[0]['pid']);
- self::assertSame('1', (string)$records[0]['uid']);
+ self::assertSame('1', (string) $records[0]['pid']);
+ self::assertSame('1', (string) $records[0]['uid']);
self::assertSame('http://localhost/?id=1', $records[0]['url']);
self::assertSame('Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0', $records[0]['user_agent']);
self::assertSame('Macintosh', $records[0]['operating_system']);
- self::assertSame('0', (string)$records[0]['type']);
+ self::assertSame('0', (string) $records[0]['type']);
}
/**
@@ -75,7 +77,8 @@ class PageviewTest extends TestCase
*/
public function notTrackedWhenDisallowed(): void
{
- $this->setUpBackendUserFromFixture(1);
+ $this->importDataSet('EXT:tracking/Tests/Functional/Fixtures/BackendUser.xml');
+ $this->setUpBackendUser(1);
$request = new InternalRequest();
$request = $request->withPageId(1);
diff --git a/Tests/Functional/RecordviewTest.php b/Tests/Functional/RecordviewTest.php
index ce72cf0..823afaf 100644
--- a/Tests/Functional/RecordviewTest.php
+++ b/Tests/Functional/RecordviewTest.php
@@ -22,20 +22,21 @@ namespace DanielSiepmann\Tracking\Tests\Functional;
*/
use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest;
-use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequestContext;
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase as TestCase;
/**
* @testdox Recordviews are
+ *
+ * @coversNothing
*/
class RecordviewTest extends TestCase
{
- protected $testExtensionsToLoad = [
+ protected array $testExtensionsToLoad = [
'typo3conf/ext/tracking',
'typo3conf/ext/tracking/Tests/Functional/Fixtures/Extensions/recordview',
];
- protected $pathsToLinkInTestInstance = [
+ protected array $pathsToLinkInTestInstance = [
'typo3conf/ext/tracking/Tests/Functional/Fixtures/sites' => 'typo3conf/sites',
];
@@ -64,13 +65,13 @@ class RecordviewTest extends TestCase
$records = $this->getAllRecords('tx_tracking_recordview');
self::assertCount(1, $records);
- self::assertSame('1', (string)$records[0]['pid']);
- self::assertSame('1', (string)$records[0]['uid']);
+ self::assertSame('1', (string) $records[0]['pid']);
+ self::assertSame('1', (string) $records[0]['uid']);
self::assertSame('http://localhost/?id=1&topic_id=1', $records[0]['url']);
self::assertSame('Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0', $records[0]['user_agent']);
self::assertSame('Macintosh', $records[0]['operating_system']);
self::assertSame('sys_category_1', $records[0]['record']);
- self::assertSame('1', (string)$records[0]['record_uid']);
+ self::assertSame('1', (string) $records[0]['record_uid']);
self::assertSame('sys_category', $records[0]['record_table_name']);
}
diff --git a/Tests/Functional/Typo3FeaturesTest.php b/Tests/Functional/Typo3FeaturesTest.php
index 95e5864..80b62fe 100644
--- a/Tests/Functional/Typo3FeaturesTest.php
+++ b/Tests/Functional/Typo3FeaturesTest.php
@@ -21,35 +21,37 @@ namespace DanielSiepmann\Tracking\Tests\Functional;
* 02110-1301, USA.
*/
-use DanielSiepmann\Tracking\Functional\CopyingPageWithRecordsWorks;
use TYPO3\CMS\Core\DataHandling\DataHandler;
use TYPO3\CMS\Core\Localization\LanguageServiceFactory;
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase as TestCase;
+use UnexpectedValueException;
/**
* @covers \DanielSiepmann\Tracking\Functional\CopyingPageWithRecordsWorks
+ *
* @testdox This extension works with TYPO3 feature:
*/
class Typo3FeaturesTest extends TestCase
{
- protected $testExtensionsToLoad = [
+ protected array $testExtensionsToLoad = [
'typo3conf/ext/tracking',
];
- public function setUp(): void
+ protected function setUp(): void
{
parent::setUp();
+ $this->importDataSet('EXT:tracking/Tests/Functional/Fixtures/BackendUser.xml');
$this->importDataSet('EXT:tracking/Tests/Functional/Fixtures/Typo3FeaturesTest/PageWithRecords.xml');
- $this->setUpBackendUserFromFixture(1);
+ $this->setUpBackendUser(1);
$languageServiceFactory = $this->getContainer()->get(LanguageServiceFactory::class);
if (!$languageServiceFactory instanceof LanguageServiceFactory) {
- throw new \UnexpectedValueException('Did not retrieve LanguageServiceFactory.', 1637847250);
+ throw new UnexpectedValueException('Did not retrieve LanguageServiceFactory.', 1637847250);
}
$GLOBALS['LANG'] = $languageServiceFactory->create('default');
}
- public function tearDown(): void
+ protected function tearDown(): void
{
unset($GLOBALS['LANG']);
@@ -58,6 +60,7 @@ class Typo3FeaturesTest extends TestCase
/**
* @test
+ *
* @testdox Copy pages. Tracking records will not be copied.
*/
public function copyContainingRecords(): void
@@ -80,6 +83,7 @@ class Typo3FeaturesTest extends TestCase
/**
* @test
+ *
* @testdox Copy individual tables, but always exclude tracking tables.
*/
public function copyCustomTablesViaDataHandler(): void
diff --git a/Tests/Unit/Domain/Model/ExtractorTest.php b/Tests/Unit/Domain/Model/ExtractorTest.php
index 740330e..f267467 100644
--- a/Tests/Unit/Domain/Model/ExtractorTest.php
+++ b/Tests/Unit/Domain/Model/ExtractorTest.php
@@ -27,7 +27,7 @@ use Prophecy\PhpUnit\ProphecyTrait;
use TYPO3\TestingFramework\Core\Unit\UnitTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Domain\Model\Extractor
+ * @covers \DanielSiepmann\Tracking\Domain\Model\Extractor
*/
class ExtractorTest extends TestCase
{
@@ -35,7 +35,9 @@ class ExtractorTest extends TestCase
/**
* @test
+ *
* @dataProvider possibleUserStringWithOperatingSystems
+ *
* @testdox Operating system $expectedOperatingSystem is extracted from UserAgent string: $userAgent
*/
public function returnsOperatingSystem(string $userAgent, string $expectedOperatingSystem): void
@@ -43,7 +45,7 @@ class ExtractorTest extends TestCase
$model = $this->prophesize(HasUserAgent::class);
$model->getUserAgent()->willReturn($userAgent);
- static::assertSame(
+ self::assertSame(
$expectedOperatingSystem,
Extractor::getOperatingSystem($model->reveal())
);
diff --git a/Tests/Unit/Domain/Model/PageviewTest.php b/Tests/Unit/Domain/Model/PageviewTest.php
index 780973d..6e0475e 100644
--- a/Tests/Unit/Domain/Model/PageviewTest.php
+++ b/Tests/Unit/Domain/Model/PageviewTest.php
@@ -22,12 +22,13 @@ namespace DanielSiepmann\Tracking\Tests\Unit\Domain\Model;
*/
use DanielSiepmann\Tracking\Domain\Model\Pageview;
+use DateTimeImmutable;
use Prophecy\PhpUnit\ProphecyTrait;
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
use TYPO3\TestingFramework\Core\Unit\UnitTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Domain\Model\Pageview
+ * @covers \DanielSiepmann\Tracking\Domain\Model\Pageview
*/
class PageviewTest extends TestCase
{
@@ -43,13 +44,13 @@ class PageviewTest extends TestCase
$subject = new Pageview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
0,
'',
''
);
- static::assertInstanceOf(Pageview::class, $subject);
+ self::assertInstanceOf(Pageview::class, $subject);
}
/**
@@ -62,13 +63,13 @@ class PageviewTest extends TestCase
$subject = new Pageview(
500,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
0,
'',
''
);
- static::assertSame(500, $subject->getPageUid());
+ self::assertSame(500, $subject->getPageUid());
}
/**
@@ -81,13 +82,13 @@ class PageviewTest extends TestCase
$subject = new Pageview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
0,
'',
''
);
- static::assertSame($language->reveal(), $subject->getLanguage());
+ self::assertSame($language->reveal(), $subject->getLanguage());
}
/**
@@ -96,7 +97,7 @@ class PageviewTest extends TestCase
public function returnsCrdate(): void
{
$language = $this->prophesize(SiteLanguage::class);
- $crdate = new \DateTimeImmutable();
+ $crdate = new DateTimeImmutable();
$subject = new Pageview(
0,
@@ -107,7 +108,7 @@ class PageviewTest extends TestCase
''
);
- static::assertSame($crdate, $subject->getCrdate());
+ self::assertSame($crdate, $subject->getCrdate());
}
/**
@@ -120,13 +121,13 @@ class PageviewTest extends TestCase
$subject = new Pageview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
999,
'',
''
);
- static::assertSame(999, $subject->getPageType());
+ self::assertSame(999, $subject->getPageType());
}
/**
@@ -139,13 +140,13 @@ class PageviewTest extends TestCase
$subject = new Pageview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
0,
'https://example.com/path.html',
''
);
- static::assertSame('https://example.com/path.html', $subject->getUrl());
+ self::assertSame('https://example.com/path.html', $subject->getUrl());
}
/**
@@ -158,13 +159,13 @@ class PageviewTest extends TestCase
$subject = new Pageview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
0,
'',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
);
- static::assertSame(
+ self::assertSame(
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0',
$subject->getUserAgent()
);
@@ -180,13 +181,13 @@ class PageviewTest extends TestCase
$subject = new Pageview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
0,
'',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
);
- static::assertSame(
+ self::assertSame(
0,
$subject->getUid()
);
@@ -202,14 +203,14 @@ class PageviewTest extends TestCase
$subject = new Pageview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
0,
'',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0',
10
);
- static::assertSame(
+ self::assertSame(
10,
$subject->getUid()
);
@@ -225,13 +226,13 @@ class PageviewTest extends TestCase
$subject = new Pageview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
0,
'',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
);
- static::assertSame(
+ self::assertSame(
'Linux',
$subject->getOperatingSystem()
);
diff --git a/Tests/Unit/Domain/Model/RecordRuleTest.php b/Tests/Unit/Domain/Model/RecordRuleTest.php
index e61a5e3..5cf2252 100644
--- a/Tests/Unit/Domain/Model/RecordRuleTest.php
+++ b/Tests/Unit/Domain/Model/RecordRuleTest.php
@@ -25,7 +25,7 @@ use DanielSiepmann\Tracking\Domain\Model\RecordRule;
use TYPO3\TestingFramework\Core\Unit\UnitTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Domain\Model\RecordRule
+ * @covers \DanielSiepmann\Tracking\Domain\Model\RecordRule
*/
class RecordRuleTest extends TestCase
{
@@ -40,7 +40,7 @@ class RecordRuleTest extends TestCase
''
);
- static::assertInstanceOf(RecordRule::class, $subject);
+ self::assertInstanceOf(RecordRule::class, $subject);
}
/**
@@ -55,7 +55,7 @@ class RecordRuleTest extends TestCase
'tableName' => '',
]);
- static::assertInstanceOf(RecordRule::class, $subject);
+ self::assertInstanceOf(RecordRule::class, $subject);
}
/**
@@ -76,9 +76,9 @@ class RecordRuleTest extends TestCase
],
]);
- static::assertCount(2, $result);
- static::assertInstanceOf(RecordRule::class, $result[0]);
- static::assertInstanceOf(RecordRule::class, $result[1]);
+ self::assertCount(2, $result);
+ self::assertInstanceOf(RecordRule::class, $result[0]);
+ self::assertInstanceOf(RecordRule::class, $result[1]);
}
/**
@@ -92,7 +92,7 @@ class RecordRuleTest extends TestCase
''
);
- static::assertSame('match expression', $subject->getMatchesExpression());
+ self::assertSame('match expression', $subject->getMatchesExpression());
}
/**
@@ -106,7 +106,7 @@ class RecordRuleTest extends TestCase
''
);
- static::assertSame('match expression', $subject->getUidExpression());
+ self::assertSame('match expression', $subject->getUidExpression());
}
/**
@@ -120,6 +120,6 @@ class RecordRuleTest extends TestCase
'table_name'
);
- static::assertSame('table_name', $subject->getTableName());
+ self::assertSame('table_name', $subject->getTableName());
}
}
diff --git a/Tests/Unit/Domain/Model/RecordviewTest.php b/Tests/Unit/Domain/Model/RecordviewTest.php
index 20e0850..a6fcff4 100644
--- a/Tests/Unit/Domain/Model/RecordviewTest.php
+++ b/Tests/Unit/Domain/Model/RecordviewTest.php
@@ -22,12 +22,13 @@ namespace DanielSiepmann\Tracking\Tests\Unit\Domain\Model;
*/
use DanielSiepmann\Tracking\Domain\Model\Recordview;
+use DateTimeImmutable;
use Prophecy\PhpUnit\ProphecyTrait;
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
use TYPO3\TestingFramework\Core\Unit\UnitTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Domain\Model\Recordview
+ * @covers \DanielSiepmann\Tracking\Domain\Model\Recordview
*/
class RecordviewTest extends TestCase
{
@@ -43,14 +44,14 @@ class RecordviewTest extends TestCase
$subject = new Recordview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
'',
'',
10,
'sys_category'
);
- static::assertInstanceOf(Recordview::class, $subject);
+ self::assertInstanceOf(Recordview::class, $subject);
}
/**
@@ -63,14 +64,14 @@ class RecordviewTest extends TestCase
$subject = new Recordview(
500,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
'',
'',
10,
'sys_category'
);
- static::assertSame(500, $subject->getPageUid());
+ self::assertSame(500, $subject->getPageUid());
}
/**
@@ -83,14 +84,14 @@ class RecordviewTest extends TestCase
$subject = new Recordview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
'',
'',
10,
'sys_category'
);
- static::assertSame($language->reveal(), $subject->getLanguage());
+ self::assertSame($language->reveal(), $subject->getLanguage());
}
/**
@@ -99,7 +100,7 @@ class RecordviewTest extends TestCase
public function returnsCrdate(): void
{
$language = $this->prophesize(SiteLanguage::class);
- $crdate = new \DateTimeImmutable();
+ $crdate = new DateTimeImmutable();
$subject = new Recordview(
0,
@@ -111,7 +112,7 @@ class RecordviewTest extends TestCase
'sys_category'
);
- static::assertSame($crdate, $subject->getCrdate());
+ self::assertSame($crdate, $subject->getCrdate());
}
/**
@@ -124,14 +125,14 @@ class RecordviewTest extends TestCase
$subject = new Recordview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
'https://example.com/path.html',
'',
10,
'sys_category'
);
- static::assertSame('https://example.com/path.html', $subject->getUrl());
+ self::assertSame('https://example.com/path.html', $subject->getUrl());
}
/**
@@ -144,14 +145,14 @@ class RecordviewTest extends TestCase
$subject = new Recordview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
'',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0',
10,
'sys_category'
);
- static::assertSame(
+ self::assertSame(
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0',
$subject->getUserAgent()
);
@@ -167,14 +168,14 @@ class RecordviewTest extends TestCase
$subject = new Recordview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
'',
'',
10,
'sys_category'
);
- static::assertSame(
+ self::assertSame(
10,
$subject->getRecordUid()
);
@@ -190,14 +191,14 @@ class RecordviewTest extends TestCase
$subject = new Recordview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
'',
'',
10,
'sys_category'
);
- static::assertSame(
+ self::assertSame(
'sys_category',
$subject->getTableName()
);
@@ -213,14 +214,14 @@ class RecordviewTest extends TestCase
$subject = new Recordview(
0,
$language->reveal(),
- new \DateTimeImmutable(),
+ new DateTimeImmutable(),
'',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
10,
'sys_category'
);
- static::assertSame(
+ self::assertSame(
'Linux',
$subject->getOperatingSystem()
);
diff --git a/Tests/Unit/Domain/Pageview/FactoryTest.php b/Tests/Unit/Domain/Pageview/FactoryTest.php
index 51b7966..92b9489 100644
--- a/Tests/Unit/Domain/Pageview/FactoryTest.php
+++ b/Tests/Unit/Domain/Pageview/FactoryTest.php
@@ -23,8 +23,8 @@ namespace DanielSiepmann\Tracking\Tests\Unit\Domain\Pageview;
use DanielSiepmann\Tracking\Domain\Model\Pageview;
use DanielSiepmann\Tracking\Domain\Pageview\Factory;
+use DateTimeImmutable;
use Prophecy\PhpUnit\ProphecyTrait;
-use Prophecy\Prophet;
use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Core\Routing\PageArguments;
use TYPO3\CMS\Core\Site\Entity\Site;
@@ -33,7 +33,7 @@ use TYPO3\CMS\Core\Site\SiteFinder;
use TYPO3\TestingFramework\Core\Unit\UnitTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Domain\Pageview\Factory
+ * @covers \DanielSiepmann\Tracking\Domain\Pageview\Factory
*/
class FactoryTest extends TestCase
{
@@ -59,7 +59,7 @@ class FactoryTest extends TestCase
$subject = new Factory($this->prophesize(SiteFinder::class)->reveal());
$result = $subject->fromRequest($request->reveal());
- static::assertInstanceOf(Pageview::class, $result);
+ self::assertInstanceOf(Pageview::class, $result);
}
/**
@@ -78,13 +78,13 @@ class FactoryTest extends TestCase
$request->getAttribute('language')->willReturn($language->reveal());
$request->getUri()->willReturn('');
$request->getHeader('User-Agent')->willReturn([
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0',
]);
$subject = new Factory($this->prophesize(SiteFinder::class)->reveal());
$result = $subject->fromRequest($request->reveal());
- static::assertSame(
+ self::assertSame(
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0',
$result->getUserAgent()
);
@@ -110,7 +110,7 @@ class FactoryTest extends TestCase
$subject = new Factory($this->prophesize(SiteFinder::class)->reveal());
$result = $subject->fromRequest($request->reveal());
- static::assertSame(
+ self::assertSame(
'https://example.com/path?query=params&some=more#anchor',
$result->getUrl()
);
@@ -136,7 +136,7 @@ class FactoryTest extends TestCase
$subject = new Factory($this->prophesize(SiteFinder::class)->reveal());
$result = $subject->fromRequest($request->reveal());
- static::assertSame(
+ self::assertSame(
50,
$result->getPageType()
);
@@ -162,7 +162,7 @@ class FactoryTest extends TestCase
$subject = new Factory($this->prophesize(SiteFinder::class)->reveal());
$result = $subject->fromRequest($request->reveal());
- static::assertInstanceOf(\DateTimeImmutable::class, $result->getCrdate());
+ self::assertInstanceOf(DateTimeImmutable::class, $result->getCrdate());
}
/**
@@ -185,7 +185,7 @@ class FactoryTest extends TestCase
$subject = new Factory($this->prophesize(SiteFinder::class)->reveal());
$result = $subject->fromRequest($request->reveal());
- static::assertInstanceOf(SiteLanguage::class, $result->getLanguage());
+ self::assertInstanceOf(SiteLanguage::class, $result->getLanguage());
}
/**
@@ -208,7 +208,7 @@ class FactoryTest extends TestCase
$subject = new Factory($this->prophesize(SiteFinder::class)->reveal());
$result = $subject->fromRequest($request->reveal());
- static::assertSame(
+ self::assertSame(
10,
$result->getPageUid()
);
@@ -237,13 +237,13 @@ class FactoryTest extends TestCase
'user_agent' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
]);
- static::assertInstanceOf(Pageview::class, $result);
- static::assertSame(1, $result->getUid());
- static::assertSame(2, $result->getPageUid());
- static::assertSame($siteLanguage->reveal(), $result->getLanguage());
- static::assertSame('1533906435', $result->getCrdate()->format('U'));
- static::assertSame(0, $result->getPageType());
- static::assertSame('https://example.com/path', $result->getUrl());
- static::assertSame('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36', $result->getUserAgent());
+ self::assertInstanceOf(Pageview::class, $result);
+ self::assertSame(1, $result->getUid());
+ self::assertSame(2, $result->getPageUid());
+ self::assertSame($siteLanguage->reveal(), $result->getLanguage());
+ self::assertSame('1533906435', $result->getCrdate()->format('U'));
+ self::assertSame(0, $result->getPageType());
+ self::assertSame('https://example.com/path', $result->getUrl());
+ self::assertSame('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36', $result->getUserAgent());
}
}
diff --git a/Tests/Unit/Domain/Repository/PageviewTest.php b/Tests/Unit/Domain/Repository/PageviewTest.php
index 7b4f844..e4d2015 100644
--- a/Tests/Unit/Domain/Repository/PageviewTest.php
+++ b/Tests/Unit/Domain/Repository/PageviewTest.php
@@ -24,15 +24,14 @@ namespace DanielSiepmann\Tracking\Tests\Unit\Domain\Repository;
use DanielSiepmann\Tracking\Domain\Model\Pageview as Model;
use DanielSiepmann\Tracking\Domain\Pageview\Factory;
use DanielSiepmann\Tracking\Domain\Repository\Pageview;
-use Doctrine\DBAL\Statement;
+use DateTimeImmutable;
use Prophecy\PhpUnit\ProphecyTrait;
use TYPO3\CMS\Core\Database\Connection;
-use TYPO3\CMS\Core\Database\Query\QueryBuilder;
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
use TYPO3\TestingFramework\Core\Unit\UnitTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Domain\Repository\Pageview
+ * @covers \DanielSiepmann\Tracking\Domain\Repository\Pageview
*/
class PageviewTest extends TestCase
{
@@ -46,7 +45,7 @@ class PageviewTest extends TestCase
$connection = $this->prophesize(Connection::class);
$factory = $this->prophesize(Factory::class);
- $dateTime = $this->prophesize(\DateTimeImmutable::class);
+ $dateTime = $this->prophesize(DateTimeImmutable::class);
$dateTime->format('U')->willReturn(1582660189);
$language = $this->prophesize(SiteLanguage::class);
@@ -103,7 +102,7 @@ class PageviewTest extends TestCase
$connection = $this->prophesize(Connection::class);
$factory = $this->prophesize(Factory::class);
- $dateTime = $this->prophesize(\DateTimeImmutable::class);
+ $dateTime = $this->prophesize(DateTimeImmutable::class);
$dateTime->format('U')->willReturn(1582660189);
$language = $this->prophesize(SiteLanguage::class);
@@ -132,100 +131,11 @@ class PageviewTest extends TestCase
'operating_system' => 'Linux',
],
[
- 'uid' => 1
+ 'uid' => 1,
]
)->willReturn(1)->shouldBeCalledTimes(1);
$subject = new Pageview($connection->reveal(), $factory->reveal());
$subject->update($model->reveal());
}
-
- /**
- * @test
- */
- public function returnsACountOfAllModels(): void
- {
- $statement = $this->prophesize(Statement::class);
- $statement->fetchColumn()->willReturn(10);
-
- $queryBuilder = $this->prophesize(QueryBuilder::class);
- $queryBuilder->count('uid')->willReturn($queryBuilder->reveal());
- $queryBuilder->from('tx_tracking_pageview')->willReturn($queryBuilder->reveal());
- $queryBuilder->execute()->willReturn($statement->reveal());
-
- $connection = $this->prophesize(Connection::class);
- $connection->createQueryBuilder()->willReturn($queryBuilder->reveal());
-
- $factory = $this->prophesize(Factory::class);
-
- $subject = new Pageview($connection->reveal(), $factory->reveal());
- static::assertSame(10, $subject->countAll());
- }
-
- /**
- * @test
- */
- public function returnsAllModells(): void
- {
- $statement = $this->prophesize(Statement::class);
- $statement->fetch()->willReturn(
- [
- 'pid' => '10',
- 'crdate' => '1595948372',
- 'type' => '0',
- 'sys_language_uid' => '0',
- 'url' => 'https://example.com/path/file.html',
- 'user_agent' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
- ],
- [
- 'pid' => '9',
- 'crdate' => '1595948376',
- 'type' => '0',
- 'sys_language_uid' => '0',
- 'url' => 'https://example.com/path/file.html',
- 'user_agent' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
- ],
- false
- );
-
- $queryBuilder = $this->prophesize(QueryBuilder::class);
- $queryBuilder->select('*')->willReturn($queryBuilder->reveal());
- $queryBuilder->from('tx_tracking_pageview')->willReturn($queryBuilder->reveal());
- $queryBuilder->execute()->willReturn($statement->reveal());
-
- $connection = $this->prophesize(Connection::class);
- $connection->createQueryBuilder()->willReturn($queryBuilder->reveal());
-
- $model1 = $this->prophesize(Model::class);
- $model1->getPageUid()->willReturn(10);
- $model2 = $this->prophesize(Model::class);
- $model2->getPageUid()->willReturn(9);
-
- $factory = $this->prophesize(Factory::class);
- $factory->fromDbRow([
- 'pid' => '10',
- 'crdate' => '1595948372',
- 'type' => '0',
- 'sys_language_uid' => '0',
- 'url' => 'https://example.com/path/file.html',
- 'user_agent' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
- ])->willReturn($model1->reveal());
- $factory->fromDbRow([
- 'pid' => '9',
- 'crdate' => '1595948376',
- 'type' => '0',
- 'sys_language_uid' => '0',
- 'url' => 'https://example.com/path/file.html',
- 'user_agent' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
- ])->willReturn($model2->reveal());
-
- $subject = new Pageview($connection->reveal(), $factory->reveal());
- static::assertCount(2, $subject->findAll());
-
- $pageUid = 10;
- foreach ($subject->findAll() as $model) {
- static::assertSame($pageUid, $model->getPageUid());
- --$pageUid;
- }
- }
}
diff --git a/Tests/Unit/Domain/Repository/RecordviewTest.php b/Tests/Unit/Domain/Repository/RecordviewTest.php
index 2e57035..4b66600 100644
--- a/Tests/Unit/Domain/Repository/RecordviewTest.php
+++ b/Tests/Unit/Domain/Repository/RecordviewTest.php
@@ -23,13 +23,14 @@ namespace DanielSiepmann\Tracking\Tests\Unit\Domain\Repository;
use DanielSiepmann\Tracking\Domain\Model\Recordview as Model;
use DanielSiepmann\Tracking\Domain\Repository\Recordview;
+use DateTimeImmutable;
use Prophecy\PhpUnit\ProphecyTrait;
use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
use TYPO3\TestingFramework\Core\Unit\UnitTestCase as TestCase;
/**
- * @covers DanielSiepmann\Tracking\Domain\Repository\Recordview
+ * @covers \DanielSiepmann\Tracking\Domain\Repository\Recordview
*/
class RecordviewTest extends TestCase
{
@@ -42,7 +43,7 @@ class RecordviewTest extends TestCase
{
$connection = $this->prophesize(Connection::class);
- $dateTime = $this->prophesize(\DateTimeImmutable::class);
+ $dateTime = $this->prophesize(DateTimeImmutable::class);
$dateTime->format('U')->willReturn(1582660189);
$language = $this->prophesize(SiteLanguage::class);
diff --git a/composer.json b/composer.json
index f083a0e..c658c99 100644
--- a/composer.json
+++ b/composer.json
@@ -26,28 +26,29 @@
}
},
"require": {
- "doctrine/dbal": "^2.12",
+ "doctrine/dbal": "^2.12 || ^3.3",
"ext-mbstring": "*",
"php": "~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0",
"psr/http-message": "^1.0",
"psr/http-server-handler": "^1.0",
"psr/http-server-middleware": "^1.0",
- "symfony/console": "^5.2",
- "symfony/expression-language": "^5.2",
- "typo3/cms-backend": "^10.4 || ^11.5",
- "typo3/cms-core": "^10.4 || ^11.5",
- "typo3/cms-dashboard": "^10.4 || ^11.5"
+ "symfony/console": "^5.2 || ^6.1",
+ "symfony/expression-language": "^5.2 || ^6.1",
+ "typo3/cms-backend": "^11.5 || ~12.1.0",
+ "typo3/cms-core": "^11.5 || ~12.1.0",
+ "typo3/cms-dashboard": "^11.5 || ~12.1.0"
},
"require-dev": {
"phpunit/phpunit": "^9.0",
- "phpstan/phpstan": "1.5.4",
+ "phpstan/phpstan": "^1.8.7",
"phpstan/extension-installer": "^1.1",
"jangregor/phpstan-prophecy": "^1.0",
"phpspec/prophecy-phpunit": "^2.0",
- "typo3/testing-framework": "^6.14",
- "saschaegerer/phpstan-typo3": "^1.0",
- "symplify/easy-coding-standard": "^9.3",
- "cweagans/composer-patches": "^1.7"
+ "typo3/testing-framework": "~7.0@dev",
+ "symplify/easy-coding-standard": "^11.1",
+ "cweagans/composer-patches": "^1.7",
+ "ssch/typo3-rector": "^1.0",
+ "sbuerk/typo3-cmscomposerinstallers-testingframework-bridge": "^0.1"
},
"minimum-stability": "dev",
"prefer-stable": true,
@@ -59,7 +60,7 @@
},
"extra": {
"typo3/cms": {
- "cms-package-dir": "{$vendor-dir}/typo3/cms",
+ "app-dir": ".Build",
"extension-key": "tracking",
"web-dir": ".Build/web"
},
@@ -75,7 +76,8 @@
"typo3/class-alias-loader": true,
"typo3/cms-composer-installers": true,
"cweagans/composer-patches": true,
- "phpstan/extension-installer": true
+ "phpstan/extension-installer": true,
+ "sbuerk/typo3-cmscomposerinstallers-testingframework-bridge": true
}
}
}
diff --git a/ecs.php b/ecs.php
index 7db1b34..893bf31 100644
--- a/ecs.php
+++ b/ecs.php
@@ -1,16 +1,312 @@
import(SetList::PSR_12);
+return static function (ECSConfig $ecsConfig): void {
+ $ecsConfig->sets([
+ SetList::PSR_12,
+ ]);
- $parameters = $containerConfigurator->parameters();
-
- $parameters->set(Option::PATHS, [
+ $ecsConfig->paths([
__DIR__ . '/Classes',
__DIR__ . '/Tests',
+ __DIR__ . '/ecs.php',
+ __DIR__ . '/ext_emconf.php',
+ __DIR__ . '/ext_localconf.php',
+ __DIR__ . '/rector.php',
]);
+
+ $ecsConfig->skip([
+ CamelCapsMethodNameSniff::class => [
+ __DIR__ . '/Classes/Hooks/DataHandler.php',
+ ],
+ ]);
+
+ // Alias
+ $ecsConfig->rule(MbStrFunctionsFixer::class);
+ $ecsConfig->rule(NoAliasFunctionsFixer::class);
+
+ // ArrayNotation
+ $ecsConfig->ruleWithConfiguration(ArraySyntaxFixer::class, [
+ 'syntax' => 'short',
+ ]);
+ $ecsConfig->rule(NoMultilineWhitespaceAroundDoubleArrowFixer::class);
+ $ecsConfig->rule(NormalizeIndexBraceFixer::class);
+ $ecsConfig->rule(NoTrailingCommaInSinglelineArrayFixer::class);
+ $ecsConfig->rule(NoWhitespaceBeforeCommaInArrayFixer::class);
+ $ecsConfig->rule(TrimArraySpacesFixer::class);
+
+ // Basic
+ $ecsConfig->rule(NoMultipleStatementsPerLineFixer::class);
+ $ecsConfig->rule(NonPrintableCharacterFixer::class);
+
+ // Casing
+ $ecsConfig->rule(NativeFunctionCasingFixer::class);
+ $ecsConfig->rule(NativeFunctionTypeDeclarationCasingFixer::class);
+
+ // CastNotation
+ $ecsConfig->rule(CastSpacesFixer::class);
+ $ecsConfig->rule(ModernizeTypesCastingFixer::class);
+ $ecsConfig->rule(NoUnsetCastFixer::class);
+
+ // ClassNotation
+ $ecsConfig->ruleWithConfiguration(ClassAttributesSeparationFixer::class, [
+ 'elements' => [
+ 'const' => 'one',
+ 'method' => 'one',
+ 'property' => 'one',
+ 'trait_import' => 'one',
+ ],
+ ]);
+ $ecsConfig->rule(NoNullPropertyInitializationFixer::class);
+ $ecsConfig->rule(SelfAccessorFixer::class);
+
+ $ecsConfig->rule(MultilineCommentOpeningClosingFixer::class);
+ $ecsConfig->rule(NoEmptyCommentFixer::class);
+ $ecsConfig->rule(SinglelineCommentSpacingFixer::class);
+ $ecsConfig->rule(SingleLineCommentStyleFixer::class);
+
+ // ControlStructure
+ $ecsConfig->rule(NoSuperfluousElseifFixer::class);
+ $ecsConfig->rule(NoTrailingCommaInListCallFixer::class);
+ $ecsConfig->rule(NoUnneededControlParenthesesFixer::class);
+ $ecsConfig->rule(NoUselessElseFixer::class);
+ $ecsConfig->rule(SimplifiedIfReturnFixer::class);
+ $ecsConfig->rule(TrailingCommaInMultilineFixer::class);
+ $ecsConfig->rule(PSR12ControlStructureSpacingSniff::class);
+
+ // FunctionNotation
+ $ecsConfig->rule(NoTrailingCommaInSinglelineFunctionCallFixer::class);
+ $ecsConfig->rule(NoUnreachableDefaultArgumentValueFixer::class);
+ $ecsConfig->rule(NoUselessSprintfFixer::class);
+ $ecsConfig->rule(NullableTypeDeclarationForDefaultNullValueFixer::class);
+ $ecsConfig->rule(RegularCallableCallFixer::class);
+ $ecsConfig->rule(StaticLambdaFixer::class);
+
+ // Import
+ $ecsConfig->rule(FullyQualifiedStrictTypesFixer::class);
+ $ecsConfig->rule(GlobalNamespaceImportFixer::class);
+ $ecsConfig->rule(NoUnneededImportAliasFixer::class);
+ $ecsConfig->rule(NoUnusedImportsFixer::class);
+ $ecsConfig->ruleWithConfiguration(OrderedImportsFixer::class, [
+ 'sort_algorithm' => 'alpha',
+ ]);
+
+ // LanguageConstruct
+ $ecsConfig->rule(CombineConsecutiveIssetsFixer::class);
+ $ecsConfig->rule(CombineConsecutiveUnsetsFixer::class);
+ $ecsConfig->rule(SingleSpaceAfterConstructFixer::class);
+
+ // ListNotation
+ $ecsConfig->rule(ListSyntaxFixer::class);
+
+ // NamespaceNotation
+ $ecsConfig->rule(SingleBlankLineBeforeNamespaceFixer::class);
+
+ // Naming
+ $ecsConfig->rule(CamelCapsMethodNameSniff::class);
+ $ecsConfig->rule(NoHomoglyphNamesFixer::class);
+ $ecsConfig->rule(UpperCaseConstantNameSniff::class);
+
+ // Operator
+ $ecsConfig->ruleWithConfiguration(IncrementStyleFixer::class, [
+ 'style' => 'post',
+ ]);
+ $ecsConfig->ruleWithConfiguration(NewWithBracesFixer::class, [
+ 'anonymous_class' => false,
+ 'named_class' => true,
+ ]);
+ $ecsConfig->rule(ObjectOperatorWithoutWhitespaceFixer::class);
+ $ecsConfig->ruleWithConfiguration(OperatorLinebreakFixer::class, [
+ 'position' => 'beginning',
+ ]);
+ $ecsConfig->rule(StandardizeIncrementFixer::class);
+ $ecsConfig->rule(TernaryToElvisOperatorFixer::class);
+ $ecsConfig->rule(TernaryToNullCoalescingFixer::class);
+ $ecsConfig->rule(UnaryOperatorSpacesFixer::class);
+
+ // Phpdoc
+ $ecsConfig->rule(NoBlankLinesAfterPhpdocFixer::class);
+ $ecsConfig->rule(NoEmptyPhpdocFixer::class);
+ $ecsConfig->ruleWithConfiguration(NoSuperfluousPhpdocTagsFixer::class, [
+ 'allow_mixed' => true,
+ ]);
+ $ecsConfig->ruleWithConfiguration(PhpdocAlignFixer::class, [
+ 'align' => 'left',
+ ]);
+ $ecsConfig->rule(PhpdocIndentFixer::class);
+ $ecsConfig->rule(PhpdocLineSpanFixer::class);
+ $ecsConfig->rule(PhpdocNoAccessFixer::class);
+ $ecsConfig->ruleWithConfiguration(PhpdocOrderByValueFixer::class, [
+ 'annotations' => [
+ 'covers',
+ 'throws',
+ ],
+ ]);
+ $ecsConfig->rule(PhpdocOrderFixer::class);
+ $ecsConfig->rule(PhpdocScalarFixer::class);
+ $ecsConfig->rule(PhpdocSeparationFixer::class);
+ $ecsConfig->rule(PhpdocToCommentFixer::class);
+ $ecsConfig->rule(PhpdocTrimConsecutiveBlankLineSeparationFixer::class);
+ $ecsConfig->rule(PhpdocTrimFixer::class);
+ $ecsConfig->rule(PhpdocTypesFixer::class);
+ $ecsConfig->rule(PhpdocTypesOrderFixer::class);
+ $ecsConfig->rule(PhpdocVarAnnotationCorrectOrderFixer::class);
+ $ecsConfig->rule(PhpdocVarWithoutNameFixer::class);
+
+ // PhpUnit
+ $ecsConfig->rule(PhpUnitConstructFixer::class);
+ $ecsConfig->rule(PhpUnitDedicateAssertFixer::class);
+ $ecsConfig->rule(PhpUnitDedicateAssertInternalTypeFixer::class);
+ $ecsConfig->rule(PhpUnitFqcnAnnotationFixer::class);
+ $ecsConfig->rule(PhpUnitMethodCasingFixer::class);
+ $ecsConfig->rule(PhpUnitMockFixer::class);
+ $ecsConfig->rule(PhpUnitMockShortWillReturnFixer::class);
+ $ecsConfig->rule(PhpUnitNamespacedFixer::class);
+ $ecsConfig->rule(PhpUnitNoExpectationAnnotationFixer::class);
+ $ecsConfig->rule(PhpUnitSetUpTearDownVisibilityFixer::class);
+ $ecsConfig->rule(PhpUnitStrictFixer::class);
+ $ecsConfig->ruleWithConfiguration(PhpUnitTestAnnotationFixer::class, [
+ 'style' => 'annotation',
+ ]);
+ $ecsConfig->ruleWithConfiguration(PhpUnitTestCaseStaticMethodCallsFixer::class, [
+ 'call_type' => 'self',
+ ]);
+ $ecsConfig->rule(PhpUnitTestClassRequiresCoversFixer::class);
+
+ // ReturnNotation
+ $ecsConfig->rule(NoUselessReturnFixer::class);
+
+ // Semicolon
+ $ecsConfig->ruleWithConfiguration(MultilineWhitespaceBeforeSemicolonsFixer::class, [
+ 'strategy' => 'new_line_for_chained_calls',
+ ]);
+ $ecsConfig->rule(NoEmptyStatementFixer::class);
+ $ecsConfig->rule(NoSinglelineWhitespaceBeforeSemicolonsFixer::class);
+ $ecsConfig->rule(SemicolonAfterInstructionFixer::class);
+
+ // StringNotation
+ $ecsConfig->rule(NoTrailingWhitespaceInStringFixer::class);
+ $ecsConfig->rule(SingleQuoteFixer::class);
+ $ecsConfig->rule(StringLengthToEmptyFixer::class);
+
+ // Whitespace
+ $ecsConfig->rule(ArrayIndentationFixer::class);
+ $ecsConfig->rule(ArrayIndentSniff::class);
+ $ecsConfig->rule(CompactNullableTypehintFixer::class);
+ $ecsConfig->rule(MethodChainingIndentationFixer::class);
+ $ecsConfig->rule(NoExtraBlankLinesFixer::class);
+ $ecsConfig->rule(NoSpacesAroundOffsetFixer::class);
+ $ecsConfig->ruleWithConfiguration(OperatorSpacingSniff::class, [
+ 'ignoreSpacingBeforeAssignments' => false,
+ 'ignoreNewlines' => true,
+ ]);
+ $ecsConfig->rule(StatementIndentationFixer::class);
+ $ecsConfig->rule(TypesSpacesFixer::class);
};
diff --git a/ext_emconf.php b/ext_emconf.php
index eb17779..c13b3f3 100644
--- a/ext_emconf.php
+++ b/ext_emconf.php
@@ -5,13 +5,10 @@ $EM_CONF[$_EXTKEY] = [
'description' => 'Tracks page visits in TYPO3.',
'category' => 'fe',
'state' => 'stable',
- 'uploadfolder' => 0,
- 'createDirs' => '',
- 'clearCacheOnLoad' => 0,
'author' => 'Daniel Siepmann',
'author_email' => 'coding@daniel-siepmann.de',
'author_company' => '',
- 'version' => '1.4.0',
+ 'version' => '2.0.0',
'constraints' => [
'depends' => [
'core' => '',
diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
new file mode 100644
index 0000000..b6b2deb
--- /dev/null
+++ b/phpstan-baseline.neon
@@ -0,0 +1,51 @@
+parameters:
+ ignoreErrors:
+ -
+ message: "#^Call to protected method getRecordOverlay\\(\\) of class TYPO3\\\\CMS\\\\Core\\\\Domain\\\\Repository\\\\PageRepository\\.$#"
+ count: 1
+ path: Classes/Dashboard/Provider/PageviewsPerPage.php
+
+ -
+ message: "#^Call to protected method getRecordOverlay\\(\\) of class TYPO3\\\\CMS\\\\Core\\\\Domain\\\\Repository\\\\PageRepository\\.$#"
+ count: 1
+ path: Classes/Dashboard/Provider/Recordviews.php
+
+ -
+ message: "#^Parameter \\#2 \\$callback of function array_filter expects callable\\(int\\|string\\)\\: mixed, Closure\\(string\\)\\: bool given\\.$#"
+ count: 1
+ path: Classes/Hooks/DataHandler.php
+
+ -
+ message: "#^Parameter \\#1 \\$command of class Symfony\\\\Component\\\\Console\\\\Tester\\\\CommandTester constructor expects Symfony\\\\Component\\\\Console\\\\Command\\\\Command, object given\\.$#"
+ count: 3
+ path: Tests/Functional/Command/UpdateDataCommandTest.php
+
+ -
+ message: "#^Call to an undefined method object\\:\\:getQueryBuilderForTable\\(\\)\\.$#"
+ count: 4
+ path: Tests/Functional/Dashboard/Provider/NewestPageviewsTest.php
+
+ -
+ message: "#^Call to an undefined method object\\:\\:getQueryBuilderForTable\\(\\)\\.$#"
+ count: 5
+ path: Tests/Functional/Dashboard/Provider/PageviewsPerDayTest.php
+
+ -
+ message: "#^Call to an undefined method object\\:\\:getQueryBuilderForTable\\(\\)\\.$#"
+ count: 5
+ path: Tests/Functional/Dashboard/Provider/PageviewsPerOperatingSystemTest.php
+
+ -
+ message: "#^Call to an undefined method object\\:\\:getQueryBuilderForTable\\(\\)\\.$#"
+ count: 7
+ path: Tests/Functional/Dashboard/Provider/PageviewsPerPageTest.php
+
+ -
+ message: "#^Parameter \\#2 \\$pageRepository of class DanielSiepmann\\\\Tracking\\\\Dashboard\\\\Provider\\\\PageviewsPerPage constructor expects TYPO3\\\\CMS\\\\Core\\\\Domain\\\\Repository\\\\PageRepository, object given\\.$#"
+ count: 7
+ path: Tests/Functional/Dashboard/Provider/PageviewsPerPageTest.php
+
+ -
+ message: "#^Parameter \\#1 \\$pageRepository of class DanielSiepmann\\\\Tracking\\\\Dashboard\\\\Provider\\\\Recordviews constructor expects TYPO3\\\\CMS\\\\Core\\\\Domain\\\\Repository\\\\PageRepository, object given\\.$#"
+ count: 9
+ path: Tests/Functional/Dashboard/Provider/RecordviewsTest.php
diff --git a/phpstan.neon b/phpstan.neon
index 8b39b98..5c49d0f 100644
--- a/phpstan.neon
+++ b/phpstan.neon
@@ -1,3 +1,5 @@
+includes:
+ - phpstan-baseline.neon
parameters:
level: max
paths:
@@ -6,16 +8,11 @@ parameters:
checkMissingIterableValueType: false
reportUnmatchedIgnoredErrors: false
ignoreErrors:
- # Ignore error for TYPO3 10 and TYPO3 11
- - '#Cannot call method fetch\(\) on Doctrine\\DBAL\\Driver\\Statement\|int\.#'
- - '#Cannot call method fetch\(\) on Doctrine\\DBAL\\Driver\\ResultStatement\|int\.#'
+ # Ignore error for TYPO3 11 and TYPO3 12
- '#Cannot call method fetch\(\) on Doctrine\\DBAL\\Result\|int\.#'
- - '#Cannot call method fetchAll\(\) on Doctrine\\DBAL\\Driver\\Statement\|int\.#'
- - '#Cannot call method fetchAll\(\) on Doctrine\\DBAL\\Driver\\ResultStatement\|int\.#'
- '#Cannot call method fetchAll\(\) on Doctrine\\DBAL\\Result\|int\.#'
- - '#Cannot call method fetchColumn\(\) on Doctrine\\DBAL\\Driver\\Statement\|int\.#'
- - '#Cannot call method fetchColumn\(\) on Doctrine\\DBAL\\Driver\\ResultStatement\|int\.#'
- '#Cannot call method fetchColumn\(\) on Doctrine\\DBAL\\Result\|int\.#'
+ - '#Cannot call method fetchOne\(\) on Doctrine\\DBAL\\Result\|int\.#'
- "#^Parameter \\#[0-9] \\.\\.\\.\\$predicates of method TYPO3\\\\CMS\\\\Core\\\\Database\\\\Query\\\\QueryBuilder\\:\\:where\\(\\) expects array\\\\|Doctrine\\\\DBAL\\\\Query\\\\Expression\\\\CompositeExpression, string given\\.$#"
- '#^Variable \$_EXTKEY might not be defined\.$#'
- "#^Cannot access offset '.*' on mixed.$#"
diff --git a/rector.php b/rector.php
new file mode 100644
index 0000000..e9af139
--- /dev/null
+++ b/rector.php
@@ -0,0 +1,64 @@
+parameters();
+
+ $rectorConfig->sets([
+ Typo3LevelSetList::UP_TO_TYPO3_11,
+ ]);
+
+ $rectorConfig->paths([
+ __DIR__ . '/Classes',
+ __DIR__ . '/Tests',
+ __DIR__ . '/Configuration',
+ __DIR__ . '/ext_*.php',
+ ]);
+
+ // In order to have a better analysis from phpstan we teach it here some more things
+ $rectorConfig->phpstanConfig(Typo3Option::PHPSTAN_FOR_RECTOR_PATH);
+
+ // FQN classes are not imported by default. If you don't do it manually after every Rector run, enable it by:
+ $rectorConfig->importNames();
+
+ // Disable parallel otherwise non php file processing is not working i.e. typoscript
+ $rectorConfig->disableParallel();
+
+ // this will not import root namespace classes, like \DateTime or \Exception
+ $rectorConfig->importShortClasses(true);
+
+ // Define your target version which you want to support
+ $rectorConfig->phpVersion(PhpVersion::PHP_74);
+
+ $rectorConfig->skip([
+ __DIR__ . '/.github/*',
+ NameImportingPostRector::class => [
+ 'ext_localconf.php',
+ 'ext_tables.php',
+ 'ClassAliasMap.php',
+ __DIR__ . '/**/Configuration/*.php',
+ __DIR__ . '/**/Configuration/**/*.php',
+ ],
+ ]);
+
+ $rectorConfig->rule(StringClassNameToClassConstantRector::class);
+
+ // Add some general TYPO3 rules
+ $rectorConfig->rule(ConvertImplicitVariablesToExplicitGlobalsRector::class);
+ $rectorConfig->ruleWithConfiguration(ExtEmConfRector::class, [
+ ExtEmConfRector::ADDITIONAL_VALUES_TO_BE_REMOVED => [],
+ ]);
+
+ $rectorConfig->rule(FileIncludeToImportStatementTypoScriptRector::class);
+};