Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
7c8f6b6
[TASK] Update class to readonly and remove redundant readonly propert…
hojalatheef Aug 3, 2026
dd3d3bd
[TASK] Add strict types declaration in AjaxRoutes.php
hojalatheef Aug 3, 2026
b47d076
[TASK] Remove redundant union type parentheses in AjaxSolrController
hojalatheef Aug 3, 2026
07c0648
[TASK] Remove redundant variable name in exception catch block
hojalatheef Aug 3, 2026
02f5aa3
[TASK] Add readonly constructor and improve variable handling in Cach…
hojalatheef Aug 3, 2026
665bb6b
[TASK] Refactor password hashing command for type safety and clarity
hojalatheef Aug 3, 2026
b872c06
[TASK] Add readonly properties for FlashMessageService and Connection…
hojalatheef Aug 3, 2026
97aeb76
[TASK] Declare strict types and update TYPO3 dependency constraint
hojalatheef Aug 3, 2026
ec0aeec
[TASK] Declare strict types and add ValidateFileMetaDataOnSaveHook
hojalatheef Aug 3, 2026
e7f4ee6
[TASK] Add strict types declaration in Icons.php
hojalatheef Aug 3, 2026
f64e3df
[TASK] Introduce readonly Registry property in IndexQueueWorkerTask
hojalatheef Aug 3, 2026
e0d5a81
[TASK] Add readonly Registry property in IndexService
hojalatheef Aug 3, 2026
4a7d170
[TASK] Add readonly Registry property in IndexServiceEventListener
hojalatheef Aug 3, 2026
09642e7
[TASK] Refactor IsFileSelectableEventListener for dependency injectio…
hojalatheef Aug 3, 2026
d601edd
[TASK] Declare strict types in JavaScriptModules.php for type safety
hojalatheef Aug 3, 2026
18d0714
[TASK] Update language files for improved metadata handling
hojalatheef Aug 3, 2026
10f466e
[TASK] Add metadata placeholder image in jwtools2 extension
hojalatheef Aug 3, 2026
04d6526
[TASK] Refactor ModifyElementInformationHook for dependency injection…
hojalatheef Aug 3, 2026
00f9305
[TASK] Refactor MoveTranslatedContentElementsHook for dependency inje…
hojalatheef Aug 3, 2026
5503c79
[TASK] Simplify exception handling and remove redundant docblock in N…
hojalatheef Aug 3, 2026
4c21a0b
[TASK] Add FileMetaData overview module link in jwtools2 template
hojalatheef Aug 3, 2026
04a5717
[TASK] Refactor QueryGenerator for dependency injection
hojalatheef Aug 3, 2026
177069b
[TASK] Refactor ReduceCategoryTreeToPageTree for dependency injection
hojalatheef Aug 3, 2026
0ee0d6f
[TASK] Remove unused ConnectionPool dependency from SchedulerRepository
hojalatheef Aug 3, 2026
a9d0c0a
[TASK] Add hooks and event listeners for metadata validation and file…
hojalatheef Aug 3, 2026
149a9b7
[TASK] Refactor SolrController for dependency injection
hojalatheef Aug 3, 2026
ce8b0d3
[TASK] Simplify exception handling in SolrRepository
hojalatheef Aug 3, 2026
cd7610b
[TASK] Refactor SolrService for dependency injection
hojalatheef Aug 3, 2026
0d5ee88
[TASK] Simplify exception message syntax in SplitFileRefViewHelper
hojalatheef Aug 3, 2026
05b1cb9
[TASK] Use strict typing and improve JSON decoding in StatusReportCom…
hojalatheef Aug 3, 2026
275e283
[TASK] Refactor SysFileController for constructor property promotion …
hojalatheef Aug 3, 2026
b809f89
[TASK] Add strict typing declaration in tx_jwtools2_cache_expression.…
hojalatheef Aug 3, 2026
24da349
[TASK] Add strict typing in tx_jwtools2_stored_routes.php and fix whi…
hojalatheef Aug 3, 2026
ac86e27
[TASK] Simplify composer mode check in UnitTestsBootstrap
hojalatheef Aug 3, 2026
e3cb7c1
[TASK] Use FileType enum value for determining image file type
hojalatheef Aug 3, 2026
33fb9ee
[TASK] Add FileMetaDataController configuration and new metadata-rela…
hojalatheef Aug 3, 2026
ad4f314
[TASK] Add German translations for metadata-related settings and modules
hojalatheef Aug 3, 2026
2a2ed54
[TASK] Add EventListener to disable records with invalid file metadata
hojalatheef Aug 3, 2026
cee579a
[TASK] Introduce FileMetaDataController with advanced filtering and p…
hojalatheef Aug 3, 2026
ad3e2fa
[TASK] Add FileMetaDataValidationService for validating required file…
hojalatheef Aug 3, 2026
68776fb
[TASK] Add FileMetaData/List.html template for metadata listing
hojalatheef Aug 3, 2026
d48e512
[TASK] Add FileReferenceResolverService for file reference resolution
hojalatheef Aug 3, 2026
79009e8
[TASK] Add PlaceholderImageService for dynamic placeholder management
hojalatheef Aug 3, 2026
38a08fc
[TASK] Add ReplaceInvalidMetaDataImageEventListener for handling inva…
hojalatheef Aug 3, 2026
12b5434
[TASK] Add ValidateFileMetaDataOnSaveHook to disable references with …
hojalatheef Aug 3, 2026
8e58b0b
[TASK] Enable page ID display alongside titles in page tree configura…
hojalatheef Aug 3, 2026
9b78c58
[TASK] Remove redundant type declarations for constants across multip…
hojalatheef Aug 3, 2026
42deedb
[TASK] Remove redundant trailing commas and empty line breaks across …
hojalatheef Aug 3, 2026
435c6d4
[TASK] Add GitHub Actions workflow to automate TER releases for TYPO3…
hojalatheef Aug 3, 2026
f6c4baf
[TASK] Adjust class definitions and improve metadata validation logic
hojalatheef Aug 3, 2026
437f64d
[TASK] Refactor ExecuteQueryTaskTest for improved dependency injectio…
hojalatheef Aug 3, 2026
5408c26
[TASK] Add unit tests for FileMetaDataController, FileMetaDataValidat…
hojalatheef Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .github/workflows/ter-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: ter-release.yml

on:
release:
types: [published]

permissions:
contents: read

jobs:

publish:
name: Publish Extension to TYPO3 Extension Repository (TER)
runs-on: ubuntu-latest

env:
TYPO3_EXTENSION_KEY: ${{ secrets.TYPO3_EXTENSION_KEY }}
TYPO3_REPOSITORY_URL: ${{ secrets.TYPO3_REPOSITORY_URL }}
TYPO3_API_TOKEN: ${{ secrets.TYPO3_API_TOKEN }}
TYPO3_API_USERNAME: ${{ secrets.TYPO3_API_USERNAME }}
TYPO3_API_PASSWORD: ${{ secrets.TYPO3_API_PASSWORD }}

steps:
- name: Checkout repository
uses: actions/checkout@v6

- name: Get version and description
id: prep
run: |
# 1. Clean the version tag (removes 'v' prefix if present, e.g., v1.0.0 -> 1.0.0)
RAW_VERSION="${{ github.event.release.tag_name }}"
VERSION=${RAW_VERSION#v}
echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT"

# 2. Safely capture the multi-line release body as an ENV variable
echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV
echo "${{ github.event.release.body }}" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
extensions: intl, mbstring, json, libxml, xml, zip, curl
tools: composer:v2

- name: Install TYPO3 Tailor Extension
run: composer global require typo3/tailor --prefer-dist --no-progress --no-suggest

- name: Release to TER
run: |
# Use the VERSION from steps and RELEASE_NOTES from env
# We use double quotes around env.RELEASE_NOTES to handle the multi-line content
php ~/.composer/vendor/bin/tailor ter:publish ${{ steps.prep.outputs.VERSION }} \
--artefact=${{ env.TYPO3_REPOSITORY_URL }}/archive/${{ github.event.release.tag_name }}.zip \
--comment="${{ env.RELEASE_NOTES }}"
2 changes: 1 addition & 1 deletion Build/phpunit/UnitTestsBootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@

// We can use the "typo3/cms-composer-installers" constant "TYPO3_COMPOSER_MODE" to determine composer mode.
// This should be always true except for TYPO3 mono repository.
$composerMode = defined('TYPO3_COMPOSER_MODE') && TYPO3_COMPOSER_MODE === true;
$composerMode = defined('TYPO3_COMPOSER_MODE') && TYPO3_COMPOSER_MODE;

// @todo: Remove else branch when dropping support for v12
$hasConsolidatedHttpEntryPoint = class_exists(CoreHttpApplication::class);
Expand Down
2 changes: 1 addition & 1 deletion Classes/Command/CacheQueryCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ protected function getCache(string $cacheIdentifier): ?FrontendInterface
{
try {
$cache = $this->getCacheManager()->getCache($cacheIdentifier);
} catch (NoSuchCacheException $noSuchCacheException) {
} catch (NoSuchCacheException) {
return null;
}

Expand Down
6 changes: 3 additions & 3 deletions Classes/Command/ConvertPlainPasswordToHashCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ protected function updateUsers(string $mode): void
$counter = 0;
$connection = $this->getConnectionPool()->getConnectionForTable($this->modeMapping[$mode]['table']);
$statement = $this->getQueryResultForUsers($this->modeMapping[$mode]['table']);
while ($user = $statement->fetch()) {
while ($user = $statement->fetchAssociative()) {
if (!isset($user['password']) || $user['password'] === '') {
continue;
}
Expand All @@ -93,7 +93,7 @@ protected function updateUsers(string $mode): void
'Password for User ' . $user['uid'] . ' was not updated. Password already hashed.',
OutputInterface::VERBOSITY_VERBOSE,
);
} catch (InvalidPasswordHashException $e) {
} catch (InvalidPasswordHashException) {
// Perfect. No HashInstance can process this user password. Start update
$connection->update(
$this->modeMapping[$mode]['table'],
Expand Down Expand Up @@ -134,7 +134,7 @@ protected function getNewHashedPassword(string $password, string $mode): string
OutputInterface::VERBOSITY_VERBOSE,
);
$this->output->writeln(
'--> Hashed password will be stored (Hash shortened): ' . substr($newPassword, 0, 10),
'--> Hashed password will be stored (Hash shortened): ' . substr((string)$newPassword, 0, 10),
OutputInterface::VERBOSITY_DEBUG,
);
return $newPassword;
Expand Down
2 changes: 1 addition & 1 deletion Classes/Command/StatusReportCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ protected function checkDatabaseStatus(): void
$response->getBody()->rewind();
$json = $response->getBody()->getContents();

$result = json_decode($json, true);
$result = json_decode($json, true, 512, JSON_THROW_ON_ERROR);

$hasSuggestions = isset($result['suggestions']) && $result['suggestions'] !== ''
? '<error>YES</error>'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
namespace JWeiland\Jwtools2\ContextMenu\ItemProviders;

use TYPO3\CMS\Core\Resource\File;
use TYPO3\CMS\Core\Resource\FileType;
use TYPO3\CMS\Filelist\ContextMenu\ItemProviders\FileProvider;

/**
Expand Down Expand Up @@ -59,7 +60,7 @@ protected function canUpdateFile(): bool
{
if ($this->record instanceof File) {
// Do not use $this->record->isImage() as this is also true for SVG and PDF
return $this->record->getType() === $this->record::FILETYPE_IMAGE;
return $this->record->getType() === FileType::IMAGE->value;
}

return false;
Expand Down
2 changes: 1 addition & 1 deletion Classes/Controller/Ajax/AjaxSolrController.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public function createIndexQueueAction(ServerRequest $request): ResponseInterfac
$site,
$indexingConfigurationName,
);
} catch (ConnectionException|Exception $e) {
} catch (ConnectionException|Exception) {
}
}

Expand Down
19 changes: 7 additions & 12 deletions Classes/Controller/Ajax/SysFileController.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,10 @@
*/
class SysFileController
{
protected ResourceFactory $resourceFactory;

protected GraphicalFunctions $graphicalFunctions;

public function __construct(ResourceFactory $resourceFactory, GraphicalFunctions $graphicalFunctions)
{
$this->resourceFactory = $resourceFactory;
$this->graphicalFunctions = $graphicalFunctions;
}
public function __construct(
protected ResourceFactory $resourceFactory,
protected GraphicalFunctions $graphicalFunctions,
) {}

public function updateFileMetadataAction(ServerRequestInterface $request): JsonResponse
{
Expand Down Expand Up @@ -116,8 +111,8 @@ protected function getValidatedFiles(ServerRequestInterface $request): array
$validatedFiles = [];
$files = $request->getQueryParams()['CB']['files'] ?? [];
foreach ($files as $hash => $file) {
[$table, $hash] = explode('|', $hash);
if ($table === '_FILE' && $hash === substr(md5($file), 0, 10)) {
[$table, $hash] = explode('|', (string)$hash);
if ($table === '_FILE' && $hash === substr(md5((string)$file), 0, 10)) {
$validatedFiles[] = $file;
}
}
Expand All @@ -134,7 +129,7 @@ protected function determineImageMagickVersion(): string
// A version like 6.9.10-23
$version = '';
if (isset($string) && $string !== '') {
[, $version] = explode('Magick', $string);
[, $version] = explode('Magick', (string)$string);
[$version] = explode(' ', trim($version));
[$version] = explode('-', trim($version));
$version = trim($version);
Expand Down
Loading
Loading