Some installations might need to add further images
to records imported from ThüCAT.
The records are now extended to support adding images by editors.
The images are not touched during import.
The images are also ignored during clean ups,
the editor is in full control.
This feature for now is only added to tourist attractions by default.
The feature is implemented in a way that all objects extending the
``WerkraumMedia\ThueCat\Domain\Model\Frontend\Base`` class are usable
by adding an ``editorial_images`` field to their table.
Those are handled the same way,
the entity is skipped and errors are logged.
That way further entities can be imported
while only none working entities are skipped.
Relates: #10653
The command is also available as scheduler task.
This finally allows to regularly execute imports.
This also allows to import from CLI context
with differently configured timeouts.
Add own module group and migrate old menu to different modules.
This should improve user experience as most users are used to modules
and are not aware of the dropdown menu.
Rename Overview controller to Configuration controller
As it handled configurations.
This streamlines with labels and identifiers.
First check for existence before accessing.
The ObjectStorage itself has no check which will result in an PHP
warning due to accessing a none existing array key.
Relates: #10197
This allows to fetch merged opening hours instead of actually edited
opening hours.
They will be merged per valid time span.
The data structure is a bit different as each time span has a list of
week days, each with its own open and end.
Relates: #10246
The schema is very flexible and some values are not validated upfront.
This will result in many objects which we currently can not map.
This resulted in an exception breaking the rest of the import.
We now handle the broken mapping and skip those objects with proper
logging.
This allows to continue with import and report and debug those objects
in order to improve the mapping step by step.
Relates: #10198
Adds a new type of import configuration.
This configuration allows to define a single resource.
All the resources referenced via schema:containsPlace will be imported.
Relates: #10237
The objects might have an openingHours property.
This would break as our internal name would match during symfony
serialization.
We now use the expected property name.
The ctrl configuration already existed, just the corresponding column
configuration was missing.
It is now possible to hide and unhide the records within TYPO3 as usual.
Relates: #10230
Strip off seconds from strings.
Prepare code to easily provide a structured data to allow integrators to
format timing differently.
Provide a method to easily check if an opening hour is only valid for a
single day.
Relates: #10185
This broke with introduction of latest import date.
This could not be validated, but we do not need validation anyway and
therefore turn it off.
Relates: #9266
Opening hours are filtered. Opening hours from the past are no longer
available.
Opening hours are sorted. Newer opening hours are shown last.
Relates: #10185
The import resulted in an exception if there was an array of types
instead of a string.
Both situations are now handled and API of models is kept.
Existing imported data is also kept.
Not all things are managed by TouristMarketingCompany, some are managed
by generic organisations.
Those are now handled the same way as TouristMarketingCompany are
already handled.
That way those things can also be imported, as they now can import their
manager.
This is deprecated in newer PHP versions, one should use native
str_ends_with() instead.
We remove the deprecation by using this function. But we also support
older PHP versions, so we add symfony/polyfill-php80 as dependency to
always ensure this function exists.
The implementation of the TYPO3 RequestFactory and Uri classes is
internal API.
It is therefore better to decorate the PSR-17 interfaces instead
of extending or using the TYPO3 implementation directly.