diff --git a/.github/ci/files/bin/console b/.github/ci/files/bin/console
index 0c9805c7..de28d8f6 100644
--- a/.github/ci/files/bin/console
+++ b/.github/ci/files/bin/console
@@ -16,8 +16,6 @@
use OpenDxp\Bootstrap;
use OpenDxp\Console\Application;
-ob_get_clean();
-
include __DIR__ . '/../vendor/autoload_runtime.php';
define('OPENDXP_PROJECT_ROOT', __DIR__ . '/..');
diff --git a/.github/ci/files/config/bundles.php b/.github/ci/files/config/bundles.php
index aa14853b..bb3c8118 100644
--- a/.github/ci/files/config/bundles.php
+++ b/.github/ci/files/config/bundles.php
@@ -1,5 +1,5 @@
['all' => true],
+ OpenDxp\Bundle\AdminBundle\OpenDxpAdminBundle::class => ['all' => true],
];
diff --git a/.github/ci/files/config/config.yaml b/.github/ci/files/config/config.yaml
index 459522ee..e0e2aae4 100644
--- a/.github/ci/files/config/config.yaml
+++ b/.github/ci/files/config/config.yaml
@@ -1,3 +1,82 @@
-imports:
- - { resource: services.yaml }
- - { resource: system.yaml }
\ No newline at end of file
+parameters:
+ secret: ThisTokenIsNotSoSecretChangeItImmediately
+ opendxp_test.db.dsn: '%env(OPENDXP_TEST_DB_DSN)%'
+ env(OPENDXP_TEST_DB_DSN): ~
+ opendxp.encryption.secret: 'def00000fc1e34a17a03e2ef85329325b0736a5941633f8062f6b0a1a20f416751af119256bea0abf83ac33ef656b3fff087e1ce71fa6b8810d7f854fe2781f3fe4507f6'
+
+doctrine:
+ dbal:
+ connections:
+ default:
+ url: '%opendxp_test.db.dsn%'
+ mapping_types:
+ enum: string
+ bit: boolean
+
+opendxp:
+ general:
+ timezone: Europe/Berlin
+ path_variable: ''
+ domain: opendxp-test.dev
+ redirect_to_maindomain: false
+ valid_languages:
+ - en
+ - de
+ fallback_languages:
+ en: ''
+ de: ''
+ default_language: ''
+ disable_usage_statistics: true
+ documents:
+ versions:
+ days: null
+ steps: 10
+ error_pages:
+ default: /error
+ allow_trailing_slash: 'no'
+ generate_preview: true
+ objects:
+ versions:
+ days: null
+ steps: 10
+ assets:
+ versions:
+ days: null
+ steps: 10
+ icc_rgb_profile: ''
+ icc_cmyk_profile: ''
+ full_page_cache:
+ enabled: false
+ lifetime: null
+ exclude_patterns: ''
+ exclude_cookie: ''
+ httpclient:
+ adapter: Socket
+ proxy_host: ''
+ proxy_port: ''
+ proxy_user: ''
+ proxy_pass: ''
+ email:
+ sender:
+ name: opendxp
+ email: contact@example.com
+ return:
+ name: opendxp
+ email: contact@example.com
+ debug:
+ email_addresses: ''
+ applicationlog:
+ mail_notification:
+ send_log_summary: false
+ filter_priority: null
+ mail_receiver: ''
+ archive_treshold: '30'
+ archive_alternative_database: ''
+
+opendxp_admin:
+ branding:
+ color_login_screen: ''
+ color_admin_interface: ''
+ login_screen_custom_image: ''
+ translations:
+ path: '@OpenDxpCoreBundle/translations'
diff --git a/.github/ci/files/config/event_listeners.yaml b/.github/ci/files/config/event_listeners.yaml
deleted file mode 100644
index ca56041e..00000000
--- a/.github/ci/files/config/event_listeners.yaml
+++ /dev/null
@@ -1,62 +0,0 @@
-services:
- _defaults:
- autowire: true
- autoconfigure: true
-
- #
- # SECURITY
- #
-
- OpenDxp\Bundle\AdminBundle\EventListener\AdminSecurityListener: ~
-
- OpenDxp\Bundle\AdminBundle\EventListener\CsrfProtectionListener: ~
-
- #
- # EXCEPTION HANDLING
- #
-
- OpenDxp\Bundle\AdminBundle\EventListener\AdminExceptionListener: ~
-
- #
- # GRID CONFIG CLEANUP
- #
-
- OpenDxp\Bundle\AdminBundle\EventListener\GridConfigListener: ~
-
- #
- # IMPORT CONFIG CLEANUP
- #
-
- OpenDxp\Bundle\AdminBundle\EventListener\ImportConfigListener: ~
-
- #
- # MISC
- #
-
- OpenDxp\Bundle\AdminBundle\EventListener\AdminSessionBagListener: ~
-
- OpenDxp\Bundle\AdminBundle\EventListener\HttpCacheListener: ~
-
- OpenDxp\Bundle\AdminBundle\EventListener\CustomAdminEntryPointCheckListener:
- arguments: ['%opendxp_admin.custom_admin_path_identifier%']
-
- OpenDxp\Bundle\AdminBundle\EventListener\UserPerspectiveListener:
- calls:
- - [setLogger, ['@logger']]
- tags:
- - { name: monolog.logger, channel: admin }
-
- OpenDxp\Bundle\AdminBundle\EventListener\UsageStatisticsListener:
- calls:
- - [setLogger, [ '@logger' ]]
- tags:
- - { name: monolog.logger, channel: admin_statistics }
-
- OpenDxp\Bundle\AdminBundle\EventListener\EnablePreviewTimeSliderListener: ~
-
- #
- # Workflows
- #
-
- OpenDxp\Bundle\AdminBundle\EventListener\WorkflowManagementListener:
- public: true # can be disabled
diff --git a/.github/ci/files/config/export.yaml b/.github/ci/files/config/export.yaml
deleted file mode 100644
index a2ac1db9..00000000
--- a/.github/ci/files/config/export.yaml
+++ /dev/null
@@ -1,268 +0,0 @@
-services:
- _defaults:
- autowire: true
- autoconfigure: true
-
- # resolvers and operator/value factories will be injected from compiler pass
- # TODO refactor how the service is used and change to private. Currently it is
- # used in a static method fetching the service from the container.
- OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Service:
- public: true
-
- #TODO: BC Layer, remove with OpenDxp 12
- OpenDxp\DataObject\GridColumnConfig\Service: '@OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Service'
-
- #
- # OPERATOR FACTORIES
- #
-
- opendxp.data_object.grid_column_config.operator.factory.anonymizer:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Anonymizer
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: Anonymizer }
-
- opendxp.data_object.grid_column_config.operator.factory.any_getter:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\AnyGetter
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: AnyGetter }
-
- opendxp.data_object.grid_column_config.operator.factory.arithmetic:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Arithmetic
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: Arithmetic }
-
- opendxp.data_object.grid_column_config.operator.factory.asset_metadata_getter:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\AssetMetadataGetter
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: AssetMetadataGetter }
-
- opendxp.data_object.grid_column_config.operator.factory.base64:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Base64
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: Base64 }
-
- opendxp.data_object.grid_column_config.operator.factory.boolean:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Boolean
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: Boolean }
-
- opendxp.data_object.grid_column_config.operator.factory.boolean_formatter:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\BooleanFormatter
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: BooleanFormatter }
-
- opendxp.data_object.grid_column_config.operator.factory.case_converter:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\CaseConverter
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: CaseConverter }
-
- opendxp.data_object.grid_column_config.operator.factory.char_counter:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\CharCounter
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: CharCounter }
-
- opendxp.data_object.grid_column_config.operator.factory.concatenator:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Concatenator
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: Concatenator }
-
- opendxp.data_object.grid_column_config.operator.factory.date_formatter:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\DateFormatter
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: DateFormatter }
-
- opendxp.data_object.grid_column_config.operator.factory.element_counter:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\ElementCounter
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: ElementCounter }
-
- opendxp.data_object.grid_column_config.operator.factory.field_collection_getter:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\FieldCollectionGetter
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: FieldCollectionGetter }
-
- opendxp.data_object.grid_column_config.operator.factory.is_equal:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\IsEqual
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: IsEqual }
-
- opendxp.data_object.grid_column_config.operator.factory.iterator:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Iterator
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: Iterator }
-
- opendxp.data_object.grid_column_config.operator.factory.geopoint_renderer:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\GeopointRenderer
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: GeopointRenderer }
-
- opendxp.data_object.grid_column_config.operator.factory.image_renderer:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\ImageRenderer
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: ImageRenderer }
-
- opendxp.data_object.grid_column_config.operator.factory.hotspotimage_renderer:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\HotspotimageRenderer
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: HotspotimageRenderer }
-
- opendxp.data_object.grid_column_config.operator.factory.json:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\JSON
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: JSON }
-
- opendxp.data_object.grid_column_config.operator.factory.lf_expander:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\LFExpanderFactory
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: LFExpander }
-
- opendxp.data_object.grid_column_config.operator.factory.locale_switcher:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\LocaleSwitcherFactory
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: LocaleSwitcher }
-
- opendxp.data_object.grid_column_config.operator.factory.merge:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Merge
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: Merge }
-
- opendxp.data_object.grid_column_config.operator.factory.object_field_getter:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\ObjectFieldGetter
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: ObjectFieldGetter }
-
- opendxp.data_object.grid_column_config.operator.factory.php:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\PHP
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: PHP }
-
- opendxp.data_object.grid_column_config.operator.factory.php_code:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\PHPCode
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: PHPCode }
-
- opendxp.data_object.grid_column_config.operator.factory.property_getter:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\PropertyGetter
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: PropertyGetter }
-
- opendxp.data_object.grid_column_config.operator.factory.required_by:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\RequiredBy
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: RequiredBy }
-
- opendxp.data_object.grid_column_config.operator.factory.string_contains:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\StringContains
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: StringContains }
-
- opendxp.data_object.grid_column_config.operator.factory.string_replace:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\StringReplace
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: StringReplace }
-
- opendxp.data_object.grid_column_config.operator.factory.substring:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Substring
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: Substring }
-
- opendxp.data_object.grid_column_config.operator.factory.text:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Text
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: Text }
-
- opendxp.data_object.grid_column_config.operator.factory.translate_value:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\TranslateValueFactory
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: TranslateValue }
-
- opendxp.data_object.grid_column_config.operator.factory.trimmer:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Trimmer
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: Trimmer }
-
- opendxp.data_object.grid_column_config.operator.factory.alias:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\DefaultOperatorFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Alias
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: Alias }
-
- opendxp.data_object.grid_column_config.operator.factory.workflowstate:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Operator\Factory\WorkflowStateFactory
- tags:
- - { name: opendxp.data_object.grid_column_config.operator_factory, id: WorkflowState }
-
-
-
- #
- # VALUE FACTORIES
- #
-
- opendxp.data_object.grid_column_config.value.factory.default:
- class: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Value\Factory\DefaultValueFactory
- arguments:
- $className: OpenDxp\Bundle\AdminBundle\DataObject\GridColumnConfig\Value\DefaultValue
- tags:
- - { name: opendxp.data_object.grid_column_config.value_factory, id: DefaultValue }
-
diff --git a/.github/ci/files/config/packages/security.yaml b/.github/ci/files/config/packages/security.yaml
index a8c23f90..c2f2cf56 100644
--- a/.github/ci/files/config/packages/security.yaml
+++ b/.github/ci/files/config/packages/security.yaml
@@ -1,58 +1,20 @@
security:
providers:
opendxp_admin:
- id: OpenDxp\Bundle\AdminBundle\Security\User\UserProvider
-
+ id: OpenDxp\Security\User\UserProvider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
-
- # OpenDXP WebDAV HTTP basic // DO NOT CHANGE!
opendxp_admin_webdav:
pattern: ^/admin/asset/webdav
provider: opendxp_admin
http_basic: ~
-
- # OpenDXP admin form login // DO NOT CHANGE!
- opendxp_admin:
- pattern: ^/admin(/.*)?$
- user_checker: OpenDxp\Bundle\AdminBundle\Security\User\UserChecker
- provider: opendxp_admin
- login_throttling:
- max_attempts: 3
- interval: '5 minutes'
- logout:
- path: opendxp_admin_logout
- target: opendxp_admin_login
- form_login:
- default_target_path: opendxp_admin_index
- always_use_default_target_path: true
- login_path: opendxp_admin_login
- check_path: opendxp_admin_login_check
- username_parameter: username
- password_parameter: password
- custom_authenticators:
- - OpenDxp\Bundle\AdminBundle\Security\Authenticator\AdminTokenAuthenticator
- two_factor:
- auth_form_path: /admin/login/2fa # Path or route name of the two-factor form
- check_path: /admin/login/2fa-verify # Path or route name of the two-factor code check
- default_target_path: /admin # Where to redirect by default after successful authentication
- always_use_default_target_path: false # If it should always redirect to default_target_path
- auth_code_parameter_name: _auth_code # Name of the parameter for the two-factor authentication code
- trusted_parameter_name: _trusted # Name of the parameter for the trusted device option
- multi_factor: false # If ALL active two-factor methods need to be fulfilled (multi-factor authentication)
-
+ opendxp_admin: '%opendxp_admin_bundle.firewall_settings%'
access_control:
- # OpenDXP admin ACl // DO NOT CHANGE!
- { path: ^/admin/settings/display-custom-logo, roles: PUBLIC_ACCESS }
- - { path: ^/admin/login/2fa-verify, roles: IS_AUTHENTICATED_2FA_IN_PROGRESS }
- - { path: ^/admin/login/2fa-setup, roles: ROLE_OPENDXP_USER }
- - { path: ^/admin/login/2fa, roles: IS_AUTHENTICATED_2FA_IN_PROGRESS }
- { path: ^/admin/login$, roles: PUBLIC_ACCESS }
- { path: ^/admin/login/(login|lostpassword|deeplink|csrf-token)$, roles: PUBLIC_ACCESS }
- { path: ^/admin, roles: ROLE_OPENDXP_USER }
-
role_hierarchy:
- # OpenDXP admin // DO NOT CHANGE!
ROLE_OPENDXP_ADMIN: [ROLE_OPENDXP_USER]
diff --git a/.github/ci/files/config/packages/test/config.yaml b/.github/ci/files/config/packages/test/config.yaml
index 490d840c..d77183c8 100644
--- a/.github/ci/files/config/packages/test/config.yaml
+++ b/.github/ci/files/config/packages/test/config.yaml
@@ -1,32 +1,2 @@
imports:
- { resource: ../../config.yaml }
-
-# this cache is used during tests when setting up opendxp
-framework:
- cache:
- pools:
- opendxp.cache.pool:
- public: true
- tags: true
- default_lifetime: 31536000 # 1 year
- adapter: cache.adapter.array
-
-doctrine:
- dbal:
- connections:
- default:
- server_version: '10.11'
- url: '%opendxp_test.db.dsn%'
- host: ~
- port: ~
- dbname: ~
- user: ~
- password: ~
- mapping_types:
- enum: string
- bit: boolean
-
-parameters:
- opendxp_test.db.dsn: '%env(OPENDXP_TEST_DB_DSN)%'
- env(OPENDXP_TEST_DB_DSN): ~
- opendxp.encryption.secret: 'def00000fc1e34a17a03e2ef85329325b0736a5941633f8062f6b0a1a20f416751af119256bea0abf83ac33ef656b3fff087e1ce71fa6b8810d7f854fe2781f3fe4507f6'
diff --git a/.github/ci/files/config/routes/test/routes.yaml b/.github/ci/files/config/routes/test/routes.yaml
new file mode 100755
index 00000000..4c18a901
--- /dev/null
+++ b/.github/ci/files/config/routes/test/routes.yaml
@@ -0,0 +1,2 @@
+_opendxp:
+ resource: '@OpenDxpCoreBundle/config/routing.yaml'
diff --git a/.github/ci/files/config/security_services.yaml b/.github/ci/files/config/security_services.yaml
deleted file mode 100644
index bce1e27f..00000000
--- a/.github/ci/files/config/security_services.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-services:
- _defaults:
- autowire: true
- autoconfigure: true
-
- #
- # SECURITY
- #
-
- # standard user provider returning admin users wrapped in a OpenDxp\Bundle\AdminBundle\Security\User\User proxy object.
- # using this user provider allows implementations to authenticate against opendxp users on every desired firewall
- OpenDxp\Bundle\AdminBundle\Security\User\UserProvider:
- public: true
-
- # the password hasher factory builds a dedicated hasher per user
- # as we need the user instance to hash passwords.
- # we don't specifiy this as fully qualified class name as there can be multiple factories (one for each user type)
- opendxp_admin.security.password_hasher_factory:
- class: OpenDxp\Security\Hasher\Factory\UserAwarePasswordHasherFactory
- arguments:
- - OpenDxp\Bundle\AdminBundle\Security\Hasher\AdminPasswordHasher
-
- # Authenticators for handling admin login and session authentications
- OpenDxp\Bundle\AdminBundle\Security\Authenticator\AdminTokenAuthenticator:
- calls:
- - [ setLogger, [ '@logger' ] ]
- tags:
- - { name: monolog.logger, channel: security }
-
- OpenDxp\Bundle\AdminBundle\Security\Event\LogoutListener:
- tags:
- - { name: 'kernel.event_subscriber', dispatcher: 'security.event_dispatcher.opendxp_admin'}
-
- OpenDxp\Bundle\AdminBundle\Security\User\TokenStorageUserResolver:
- public: true
- arguments:
- - '@security.token_storage'
-
- OpenDxp\Bundle\AdminBundle\Security\User\UserLoader: ~
-
- OpenDxp\Bundle\AdminBundle\Security\CsrfProtectionHandler:
- public: true
- arguments:
- - '%opendxp_admin.csrf_protection.excluded_routes%'
- - '@twig'
- calls:
- - [setLogger, ['@logger']]
- tags:
- - { name: monolog.logger, channel: security }
-
- OpenDxp\Bundle\AdminBundle\Security\ContentSecurityPolicyHandler:
- public: true
- calls:
- - [ setLogger, [ '@logger' ] ]
- tags:
- - { name: monolog.logger, channel: security }
-
- # user checker checking admin users for validity
- OpenDxp\Bundle\AdminBundle\Security\User\UserChecker: ~
-
diff --git a/.github/ci/files/config/serializer.yaml b/.github/ci/files/config/serializer.yaml
deleted file mode 100644
index c6c5b6a0..00000000
--- a/.github/ci/files/config/serializer.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-services:
- _defaults:
- autowire: true
-
- #
- # SERIALIZER
- #
- # We use an isolated serializer instance in the admin area to make sure the admin doesn't break when the global
- # serializer is used and configured in client applications. For example, we don't want to use most of the normalizers
- # which are preconfigured as we basically only need json_encode with error handling and reference loop detection.
- #
- # This allows to use the power and flexibility of the serializer component in both admin and website contexts
- # without influencing each other.
- #
-
- OpenDxp\Admin\Serializer:
- class: Symfony\Component\Serializer\Serializer
- public: true
- arguments: ['@?', '@?']
-
- opendxp_admin.serializer:
- alias: OpenDxp\Admin\Serializer
- public: true
-
- Symfony\Component\Serializer\Encoder\JsonEncoder:
- tags:
- - { name: opendxp_admin.serializer.encoder }
-
- OpenDxp\Bundle\AdminBundle\Serializer\Normalizer\ReferenceLoopNormalizer:
- tags:
- - { name: opendxp_admin.serializer.normalizer }
\ No newline at end of file
diff --git a/.github/ci/files/config/services.yaml b/.github/ci/files/config/services.yaml
deleted file mode 100644
index 83c4cc95..00000000
--- a/.github/ci/files/config/services.yaml
+++ /dev/null
@@ -1,84 +0,0 @@
-parameters:
- secret: ThisTokenIsNotSoSecretChangeIt
-
-services:
- _defaults:
- autowire: true
- autoconfigure: true
-
- #
- # CONTROLLERS
- #
-
- # auto-register all controllers as services
- OpenDxp\Bundle\AdminBundle\Controller\:
- resource: '../src/Controller'
- public: true
- tags: ['controller.service_arguments']
-
- #
- # TRANSLATIONS
- #
-
- OpenDxp\Bundle\AdminBundle\Translation\AdminUserTranslator: ~
-
- #
- # GDPR Services
- #
-
- # Tagged data providers will be injected from compiler pass
- OpenDxp\Bundle\AdminBundle\GDPR\DataProvider\Manager: ~
-
- # Providers implementing DataProviderInterface will be auto-tagged via autoconfiguration
- OpenDxp\Bundle\AdminBundle\GDPR\DataProvider\DataObjects:
- arguments:
- $config: '%opendxp.gdpr-data-extrator.dataobjects%'
-
- OpenDxp\Bundle\AdminBundle\GDPR\DataProvider\Assets:
- arguments:
- $config: '%opendxp.gdpr-data-extrator.assets%'
-
- OpenDxp\Bundle\AdminBundle\GDPR\DataProvider\SentMail: ~
- OpenDxp\Bundle\AdminBundle\GDPR\DataProvider\OpenDxpUsers:
- arguments:
- $logsDir: '%kernel.logs_dir%'
-
-
- #
- # Grid Helper Service
- #
-
- OpenDxp\Bundle\AdminBundle\Helper\GridHelperService: ~
-
-
- #
- # Default Preview Generator
- #
-
- OpenDxp\Model\DataObject\ClassDefinition\PreviewGeneratorInterface:
- class: OpenDxp\Bundle\AdminBundle\Service\PreviewGenerator
-
- #
- # Twig Extensions
- #
-
- OpenDxp\Twig\Extension\AdminExtension: ~
-
- OpenDxp\Bundle\AdminBundle\Twig\Extension\AdminExtension: ~
-
- #
- # Workflows
- #
-
- OpenDxp\Bundle\AdminBundle\Service\Workflow\ActionsButtonService: ~
-
- #
- # Admin Config Services
- #
- OpenDxp\Bundle\AdminBundle\System\AdminConfig: ~
-
- #
- # Element Services
- #
- OpenDxp\Bundle\AdminBundle\Service\ElementServiceInterface:
- class: OpenDxp\Bundle\AdminBundle\Service\ElementService
diff --git a/.github/ci/files/config/system.yaml b/.github/ci/files/config/system.yaml
deleted file mode 100644
index b0cfc67e..00000000
--- a/.github/ci/files/config/system.yaml
+++ /dev/null
@@ -1,66 +0,0 @@
-opendxp:
- general:
- timezone: Europe/Berlin
- path_variable: ''
- domain: opendxp-test.dev
- redirect_to_maindomain: false
- valid_languages:
- - en
- - de
- fallback_languages:
- en: ''
- de: ''
- default_language: ''
- disable_usage_statistics: false
- documents:
- versions:
- days: null
- steps: 10
- error_pages:
- default: /error
- allow_trailing_slash: 'no'
- generate_preview: true
- objects:
- versions:
- days: null
- steps: 10
- assets:
- versions:
- days: null
- steps: 10
- icc_rgb_profile: ''
- icc_cmyk_profile: ''
- full_page_cache:
- enabled: false
- lifetime: null
- exclude_patterns: ''
- exclude_cookie: ''
- httpclient:
- adapter: Socket
- proxy_host: ''
- proxy_port: ''
- proxy_user: ''
- proxy_pass: ''
- email:
- sender:
- name: opendxp
- email: contact@example.com
- return:
- name: opendxp
- email: contact@example.com
- debug:
- email_addresses: ''
- applicationlog:
- mail_notification:
- send_log_summary: false
- filter_priority: null
- mail_receiver: ''
- archive_treshold: '30'
- archive_alternative_database: ''
-opendxp_admin:
- branding:
- color_login_screen: ''
- color_admin_interface: ''
- login_screen_custom_image: ''
- translations:
- path: "@OpenDxpCoreBundle/translations"
diff --git a/.github/ci/files/public/.htaccess b/.github/ci/files/public/.htaccess
deleted file mode 100644
index 54755877..00000000
--- a/.github/ci/files/public/.htaccess
+++ /dev/null
@@ -1,155 +0,0 @@
-# Use the front controller as index file. It serves as a fallback solution when
-# every other rewrite/redirect fails (e.g. in an aliased environment without
-# mod_rewrite). Additionally, this reduces the matching process for the
-# start page (path "/") because otherwise Apache will apply the rewriting rules
-# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
-DirectoryIndex index_test.php
-
-# By default, Apache does not evaluate symbolic links if you did not enable this
-# feature in your server configuration. Uncomment the following line if you
-# install assets as symlinks or if you experience problems related to symlinks
-# when compiling LESS/Sass/CoffeScript assets.
-# Options FollowSymlinks
-
-# Disabling MultiViews prevents unwanted negotiation, e.g. "/app" should not resolve
-# to the front controller "/app.php" but be rewritten to "/app.php/app".
-
- Options -MultiViews
-
-
-# mime types
-AddType video/mp4 .mp4
-AddType video/webm .webm
-AddType image/jpeg .pjpeg
-
-Options +SymLinksIfOwnerMatch
-
-# Use UTF-8 encoding for anything served text/plain or text/html
-AddDefaultCharset utf-8
-
-RewriteEngine On
-
-
-
- Header always unset X-Content-Type-Options
-
-
-
-# Determine the RewriteBase automatically and set it as environment variable.
-# If you are using Apache aliases to do mass virtual hosting or installed the
-# project in a subdirectory, the base path will be prepended to allow proper
-# resolution of the app.php file and to redirect to the correct URI. It will
-# work in environments without path prefix as well, providing a safe, one-size
-# fits all solution. But as you do not need it in this case, you can comment
-# the following 2 lines to eliminate the overhead.
-RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
-RewriteRule ^(.*) - [E=BASE:%1]
-
-# Sets the HTTP_AUTHORIZATION header removed by Apache
-RewriteCond %{HTTP:Authorization} .
-RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
-
-# Redirect to URI without front controller to prevent duplicate content
-# (with and without `/app.php`). Only do this redirect on the initial
-# rewrite by Apache and not on subsequent cycles. Otherwise we would get an
-# endless redirect loop (request -> rewrite to front controller ->
-# redirect -> request -> ...).
-# So in case you get a "too many redirects" error or you always get redirected
-# to the start page because your Apache does not expose the REDIRECT_STATUS
-# environment variable, you have 2 choices:
-# - disable this feature by commenting the following 2 lines or
-# - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
-# following RewriteCond (best solution)
-RewriteCond %{ENV:REDIRECT_STATUS} ^$
-RewriteRule ^app\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
-
-
- RewriteCond %{REQUEST_URI} ^/(fpm|server)-(info|status|ping)
- RewriteRule . - [L]
-
-
-# restrict access to dotfiles
-RewriteCond %{REQUEST_FILENAME} -d [OR]
-RewriteCond %{REQUEST_FILENAME} -l [OR]
-RewriteCond %{REQUEST_FILENAME} -f
-RewriteRule /\.|^\.(?!well-known/) - [F,L]
-
-# ASSETS: check if request method is GET (because of WebDAV) and if the requested file (asset) exists on the filesystem, if both match, deliver the asset directly
-RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)
-RewriteCond %{DOCUMENT_ROOT}/var/assets%{REQUEST_URI} -f
-RewriteRule ^(.*)$ /var/assets%{REQUEST_URI} [PT,L]
-
-# Thumbnails
-RewriteCond %{REQUEST_URI} .*/(image|video)-thumb__[\d]+__.*
-RewriteCond %{DOCUMENT_ROOT}/var/tmp/%1-thumbnails%{REQUEST_URI} -f
-RewriteRule ^(.*)$ /var/tmp/%1-thumbnails%{REQUEST_URI} [PT,L]
-
-# cache-buster rule for scripts & stylesheets embedded using view helpers
-RewriteRule ^cache-buster\-[\d]+/(.*) $1 [PT,L]
-
-# If the requested filename exists, simply serve it.
-# We only want to let Apache serve files and not directories.
-RewriteCond %{REQUEST_FILENAME} -f
-RewriteRule ^ - [L]
-
-# Rewrite all other queries to the front controller.
-RewriteRule ^ %{ENV:BASE}/index_test.php [L]
-
-
-
-
-##########################################
-### OPTIONAL PERFORMANCE OPTIMIZATIONS ###
-##########################################
-
-
- # Force compression for mangled headers.
- # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
-
-
- SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
- RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
-
-
-
- # Compress all output labeled with one of the following MIME-types
- # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
- # and can remove the `` and `` lines
- # as `AddOutputFilterByType` is still in the core directives).
-
- AddOutputFilterByType DEFLATE application/atom+xml application/javascript application/json \
- application/vnd.ms-fontobject application/x-font-ttf application/rss+xml \
- application/x-web-app-manifest+json application/xhtml+xml \
- application/xml font/opentype image/svg+xml image/x-icon \
- text/css text/html text/plain text/x-component text/xml text/javascript
-
-
-
-
- ExpiresActive on
- ExpiresDefault "access plus 31536000 seconds"
-
- # specific overrides
- #ExpiresByType text/css "access plus 1 year"
-
-
-
- # opendxp mod_pagespeed integration
- # opendxp automatically disables mod_pagespeed in the following situations: debug-mode on, /admin, preview, editmode, ...
- # if you want to disable pagespeed for specific actions in opendxp you can use $this->disableBrowserCache() in your action
- RewriteCond %{REQUEST_URI} ^/(mod_)?pagespeed_(statistics|message|console|beacon|admin|global_admin)
- RewriteRule . - [L]
-
- ModPagespeed Off
- AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER text/html
- ModPagespeedModifyCachingHeaders off
- ModPagespeedRewriteLevel PassThrough
- # low risk filters
- ModPagespeedEnableFilters remove_comments,recompress_images
- # low and moderate filters, recommended filters, but can cause problems
- ModPagespeedEnableFilters lazyload_images,extend_cache_images,inline_preview_images,sprite_images
- ModPagespeedEnableFilters combine_css,rewrite_css,move_css_to_head,flatten_css_imports,extend_cache_css,prioritize_critical_css
- ModPagespeedEnableFilters extend_cache_scripts,combine_javascript,canonicalize_javascript_libraries,rewrite_javascript
- # high risk
- #ModPagespeedEnableFilters defer_javascript,local_storage_cache
-
diff --git a/.github/ci/files/public/index_test.php b/.github/ci/files/public/index.php
similarity index 100%
rename from .github/ci/files/public/index_test.php
rename to .github/ci/files/public/index.php
diff --git a/.github/ci/scripts/setup-opendxp-environment.sh b/.github/ci/scripts/setup-opendxp-environment.sh
index 90944a0b..eca6a740 100755
--- a/.github/ci/scripts/setup-opendxp-environment.sh
+++ b/.github/ci/scripts/setup-opendxp-environment.sh
@@ -8,7 +8,8 @@ mkdir -p bin
cp -r .github/ci/files/config/. config
cp -r .github/ci/files/templates/. templates
cp -r .github/ci/files/bin/console bin/console
-chmod 755 bin/console
cp -r .github/ci/files/kernel/. kernel
cp -r .github/ci/files/public/. public
cp .github/ci/files/.env ./
+
+chmod 755 bin/console
diff --git a/.github/workflows/codeception.yaml b/.github/workflows/codeception.yaml
index 349001d2..12dad786 100644
--- a/.github/workflows/codeception.yaml
+++ b/.github/workflows/codeception.yaml
@@ -6,9 +6,12 @@ on:
branches:
- "[0-9]+.[0-9]+"
- "[0-9]+.x"
- - "feature-*"
+ paths-ignore:
+ - 'doc/**'
pull_request:
types: [ opened, synchronize, reopened ]
+ paths-ignore:
+ - 'doc/**'
env:
OPENDXP_PROJECT_ROOT: ${{ github.workspace }}
@@ -36,13 +39,10 @@ jobs:
if [ -f composer.json ]; then
php_versions=$(jq -r '.require.php' composer.json | grep -oP '\d+\.\d+' | tr '\n' ',' | sed 's/,$//')
if [ -z "$php_versions" ]; then
- echo "No PHP versions found in composer.json"
- echo "Setting default PHP value"
- echo "php_versions=default" >> $GITHUB_OUTPUT
- else
- echo "php_versions=$php_versions" >> $GITHUB_OUTPUT
- echo "#### php versions #### : $php_versions"
+ echo "No PHP versions found in composer.json, using default"
+ php_versions="default"
fi
+ echo "php_versions=$php_versions" >> $GITHUB_OUTPUT
else
echo "composer.json not found"
exit 1
@@ -51,24 +51,14 @@ jobs:
- name: Set up matrix
id: set-matrix
run: |
- php_versions="${{ steps.parse-php-versions.outputs.php_versions }}"
-
- MATRIX_JSON=$(cat reusable-workflows/codeception-tests-configuration/matrix-config.json)
-
- IFS=',' read -ra VERSIONS_ARRAY <<< "$php_versions"
-
- FILTERED_MATRIX_JSON=$(echo $MATRIX_JSON | jq --arg php_versions "$php_versions" '
- {
- matrix: [
- .configs[] |
- select(.php_version == $php_versions) |
- .matrix[]
- ]
- }')
-
- ENCODED_MATRIX_JSON=$(echo $FILTERED_MATRIX_JSON | jq -c .)
-
- echo "matrix=${ENCODED_MATRIX_JSON}" >> $GITHUB_OUTPUT
+
+ php_versions="${{ steps.parse-php-versions.outputs.php_versions }}"
+
+ matrix_json=$(jq -c --arg php_versions "$php_versions" \
+ '{matrix: [.configs[] | select(.php_version == $php_versions) | .matrix[]]}' \
+ reusable-workflows/codeception-tests-configuration/matrix-config.json)
+
+ echo "matrix=${matrix_json}" >> $GITHUB_OUTPUT
codeception-tests:
needs: setup-matrix
@@ -76,14 +66,18 @@ jobs:
matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix) }}
uses: open-dxp/workflows-collection-public/.github/workflows/reusable-codeception-tests-centralized.yaml@main
with:
- APP_ENV: test
- OPENDXP_TEST: 1
- PHP_VERSION: ${{ matrix.matrix.php-version }}
- DATABASE: ${{ matrix.matrix.database }}
- SERVER_VERSION: ${{ matrix.matrix.server_version }}
- DEPENDENCIES: ${{ matrix.matrix.dependencies }}
- EXPERIMENTAL: ${{ matrix.matrix.experimental }}
- OPENDXP_VERSION: ${{ matrix.matrix.opendxp_version }}
+ app_env: test
+ opendxp_test: 1
+ php_version: ${{ matrix.matrix.php-version }}
+ database: ${{ matrix.matrix.database }}
+ server_version: ${{ matrix.matrix.server_version }}
+ dependencies: ${{ matrix.matrix.dependencies }}
+ experimental: ${{ matrix.matrix.experimental }}
+ opendxp_version: ${{ matrix.matrix.opendxp_version }}
+ opendxp_admin_version: ${{ matrix.matrix.opendxp_admin_version }}
+ composer_options: ${{ matrix.matrix.composer_options }}
+ composer_root_version: ${{ matrix.matrix.composer_root_version }}
secrets:
+ CLA_ACTION_ACCESS_TOKEN: ${{ secrets.CLA_ACTION_ACCESS_TOKEN }}
SSH_PRIVATE_KEY_OPENDXP_DEPLOYMENTS_USER: ${{ secrets.SSH_PRIVATE_KEY_OPENDXP_DEPLOYMENTS_USER }}
COMPOSER_OPENDXP_REPO_PACKAGIST_TOKEN: ${{ secrets.COMPOSER_OPENDXP_REPO_PACKAGIST_TOKEN }}
\ No newline at end of file
diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml
index 790b899c..9787fb56 100644
--- a/.github/workflows/static-analysis.yml
+++ b/.github/workflows/static-analysis.yml
@@ -1,20 +1,22 @@
name: Static analysis [centralised]
on:
+ workflow_dispatch:
schedule:
- cron: '0 3 * * 1,3,5'
- workflow_dispatch:
push:
branches:
- - "[0-9]+.[0-9]+"
- - "[0-9]+.x"
- - "feature-*"
+ - '[0-9]+.[0-9]+'
+ - '[0-9]+.x'
+ paths-ignore:
+ - 'doc/**'
pull_request:
types: [ opened, synchronize, reopened ]
+ paths-ignore:
+ - 'doc/**'
env:
OPENDXP_PROJECT_ROOT: ${{ github.workspace }}
- PRIVATE_REPO: ${{ github.event.repository.private }}
jobs:
setup-matrix:
@@ -22,7 +24,6 @@ jobs:
outputs:
php_versions: ${{ steps.parse-php-versions.outputs.php_versions }}
matrix: ${{ steps.set-matrix.outputs.matrix }}
- private_repo: ${{ env.PRIVATE_REPO }}
steps:
- name: Checkout code
uses: actions/checkout@v4
@@ -40,13 +41,10 @@ jobs:
if [ -f composer.json ]; then
php_versions=$(jq -r '.require.php' composer.json | grep -oP '\d+\.\d+' | tr '\n' ',' | sed 's/,$//')
if [ -z "$php_versions" ]; then
- echo "No PHP versions found in composer.json"
- echo "Setting default PHP value"
- echo "php_versions=default" >> $GITHUB_OUTPUT
- else
- echo "php_versions=$php_versions" >> $GITHUB_OUTPUT
- echo "#### php versions #### : $php_versions"
+ echo "No PHP versions found in composer.json, using default"
+ php_versions="default"
fi
+ echo "php_versions=$php_versions" >> $GITHUB_OUTPUT
else
echo "composer.json not found"
exit 1
@@ -55,24 +53,14 @@ jobs:
- name: Set up matrix
id: set-matrix
run: |
- php_versions="${{ steps.parse-php-versions.outputs.php_versions }}"
-
- MATRIX_JSON=$(cat reusable-workflows/phpstan-configuration/matrix-config.json)
-
- IFS=',' read -ra VERSIONS_ARRAY <<< "$php_versions"
-
- FILTERED_MATRIX_JSON=$(echo $MATRIX_JSON | jq --arg php_versions "$php_versions" '
- {
- matrix: [
- .configs[] |
- select(.php_version == $php_versions) |
- .matrix[]
- ]
- }')
-
- ENCODED_MATRIX_JSON=$(echo $FILTERED_MATRIX_JSON | jq -c .)
-
- echo "matrix=${ENCODED_MATRIX_JSON}" >> $GITHUB_OUTPUT
+
+ php_versions="${{ steps.parse-php-versions.outputs.php_versions }}"
+
+ matrix_json=$(jq -c --arg php_versions "$php_versions" \
+ '{matrix: [.configs[] | select(.php_version == $php_versions) | .matrix[]]}' \
+ reusable-workflows/phpstan-configuration/matrix-config.json)
+
+ echo "matrix=${matrix_json}" >> $GITHUB_OUTPUT
static-analysis:
needs: setup-matrix
@@ -80,13 +68,14 @@ jobs:
matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix) }}
uses: open-dxp/workflows-collection-public/.github/workflows/reusable-static-analysis-centralized.yaml@main
with:
- APP_ENV: test
- OPENDXP_TEST: 1
- PRIVATE_REPO: ${{ needs.setup-matrix.outputs.private_repo}}
- PHP_VERSION: ${{ matrix.matrix.php-version }}
- SYMFONY: ${{ matrix.matrix.symfony }}
- DEPENDENCIES: ${{ matrix.matrix.dependencies }}
- EXPERIMENTAL: ${{ matrix.matrix.experimental }}
- OPENDXP_VERSION: ${{ matrix.matrix.opendxp_version }}
- COMPOSER_OPTIONS: ${{ matrix.matrix.composer_options }}
- CACHE_CLEAR: 'true'
+ app_env: test
+ opendxp_test: 1
+ php_version: ${{ matrix.matrix.php-version }}
+ symfony: ${{ matrix.matrix.symfony }}
+ dependencies: ${{ matrix.matrix.dependencies }}
+ experimental: ${{ matrix.matrix.experimental }}
+ opendxp_version: ${{ matrix.matrix.opendxp_version }}
+ opendxp_admin_version: ${{ matrix.matrix.opendxp_admin_version }}
+ composer_options: ${{ matrix.matrix.composer_options }}
+ composer_root_version: ${{ matrix.matrix.composer_root_version }}
+ cache_clear: true
diff --git a/composer.json b/composer.json
index 1dda2b08..616da880 100644
--- a/composer.json
+++ b/composer.json
@@ -1,15 +1,27 @@
{
"name": "open-dxp/admin-bundle",
- "license": "GPL-3.0+",
+ "license": "GPL-3.0-or-later",
"type": "opendxp-bundle",
- "prefer-stable": true,
- "minimum-stability": "dev",
+ "homepage": "https://www.opendxp.io",
+ "authors": [
+ {
+ "name": "OpenDXP Team",
+ "email": "contact@opendxp.ch",
+ "homepage": "https://www.opendxp.io",
+ "role": "Developer"
+ }
+ ],
+ "support": {
+ "source": "https://github.com/open-dxp/admin-bundle",
+ "issues": "https://github.com/open-dxp/admin-bundle/issues",
+ "forum": "https://github.com/open-dxp/admin-bundle/discussions"
+ },
"require": {
"php": "~8.3.0 || ~8.4.0",
"cbschuld/browser.php": "^1.9.6",
"endroid/qr-code": "^4 || ^5.1",
"phpoffice/phpspreadsheet": "^2.2 || ^3.3",
- "open-dxp/opendxp": "^1.0",
+ "open-dxp/opendxp": "^1.1.2",
"symfony/webpack-encore-bundle": "^2.1.1"
},
"require-dev": {
@@ -48,10 +60,6 @@
},
"config": {
"sort-packages": true,
- "preferred-install": {
- "open-dxp/opendxp": "source",
- "*": "dist"
- },
"allow-plugins": {
"php-http/discovery": false,
"symfony/runtime": true