From dd6cc799110f7d943ea911701ab88b135ecac37b Mon Sep 17 00:00:00 2001 From: Stefan Hagspiel Date: Fri, 27 Feb 2026 11:53:14 +0100 Subject: [PATCH 1/2] update constant declarations to use type hints and visibility modifiers across admin bundle, fixes #52 --- .../Admin/DataObject/DataObjectController.php | 8 +- .../Admin/Document/DocumentControllerBase.php | 20 ++--- src/Event/AdminEvents.php | 76 +++++++++---------- src/Event/AssetEvents.php | 4 +- src/Event/ElementAdminStyleEvent.php | 11 +-- src/Installer.php | 4 +- src/Security/ContentSecurityPolicyHandler.php | 35 +++------ 7 files changed, 64 insertions(+), 94 deletions(-) diff --git a/src/Controller/Admin/DataObject/DataObjectController.php b/src/Controller/Admin/DataObject/DataObjectController.php index f078fec..daa43e3 100644 --- a/src/Controller/Admin/DataObject/DataObjectController.php +++ b/src/Controller/Admin/DataObject/DataObjectController.php @@ -69,13 +69,11 @@ class DataObjectController extends ElementControllerBase implements KernelContro use UserNameTrait; /** On active edit lock answer with editlock response */ - const TASK_RESPONSE = 'response'; - + public const string TASK_RESPONSE = 'response'; /** On active edit lock overwrite with new user */ - const TASK_OVERWRITE = 'overwrite'; - + public const string TASK_OVERWRITE = 'overwrite'; /** On active edit lock keep existing entry */ - const TASK_KEEP = 'keep'; + public const string TASK_KEEP = 'keep'; protected DataObject\Service $_objectService; diff --git a/src/Controller/Admin/Document/DocumentControllerBase.php b/src/Controller/Admin/Document/DocumentControllerBase.php index ad3bba8..a239a35 100644 --- a/src/Controller/Admin/Document/DocumentControllerBase.php +++ b/src/Controller/Admin/Document/DocumentControllerBase.php @@ -51,19 +51,13 @@ abstract class DocumentControllerBase extends AdminAbstractController implements use ElementEditLockHelperTrait; use UserNameTrait; - const TASK_PUBLISH = 'publish'; - - const TASK_UNPUBLISH = 'unpublish'; - - const TASK_SAVE = 'save'; - - const TASK_VERSION = 'version'; - - const TASK_SCHEDULER = 'scheduler'; - - const TASK_AUTOSAVE = 'autosave'; - - const TASK_DELETE = 'delete'; + public const string TASK_PUBLISH = 'publish'; + public const string TASK_UNPUBLISH = 'unpublish'; + public const string TASK_SAVE = 'save'; + public const string TASK_VERSION = 'version'; + public const string TASK_SCHEDULER = 'scheduler'; + public const string TASK_AUTOSAVE = 'autosave'; + public const string TASK_DELETE = 'delete'; public function __construct(protected ElementServiceInterface $elementService) { diff --git a/src/Event/AdminEvents.php b/src/Event/AdminEvents.php index b0cd578..c6e71b4 100644 --- a/src/Event/AdminEvents.php +++ b/src/Event/AdminEvents.php @@ -26,7 +26,7 @@ class AdminEvents * * @var string */ - const LOGIN_REDIRECT = 'opendxp.admin.login.redirect'; + public const string LOGIN_REDIRECT = 'opendxp.admin.login.redirect'; /** * The LOGIN_LOSTPASSWORD event is triggered before the lost password email @@ -40,7 +40,7 @@ class AdminEvents * * @var string */ - const LOGIN_LOSTPASSWORD = 'opendxp.admin.login.lostpassword'; + public const string LOGIN_LOSTPASSWORD = 'opendxp.admin.login.lostpassword'; /** * The LOGIN_LOGOUT event is triggered before the user is logged out. @@ -52,7 +52,7 @@ class AdminEvents * * @var string */ - const LOGIN_LOGOUT = 'opendxp.admin.login.logout'; + public const string LOGIN_LOGOUT = 'opendxp.admin.login.logout'; /** * The LOGIN_BEFORE_RENDER event is triggered before the login view is rendered. @@ -71,7 +71,7 @@ class AdminEvents * * @var string */ - const LOGIN_BEFORE_RENDER = 'opendxp.admin.login.beforeRender'; + public const string LOGIN_BEFORE_RENDER = 'opendxp.admin.login.beforeRender'; /** * The INDEX_SETTINGS event is triggered when the settings object is built for the index page. @@ -80,7 +80,7 @@ class AdminEvents * * @var string */ - const INDEX_ACTION_SETTINGS = 'opendxp.admin.indexAction.settings'; + public const string INDEX_ACTION_SETTINGS = 'opendxp.admin.indexAction.settings'; /** * Fired before the request params are parsed. This event apply to the grid list. @@ -93,7 +93,7 @@ class AdminEvents * * @var string */ - const OBJECT_LIST_BEFORE_FILTER_PREPARE = 'opendxp.admin.object.list.beforeFilterPrepare'; + public const string OBJECT_LIST_BEFORE_FILTER_PREPARE = 'opendxp.admin.object.list.beforeFilterPrepare'; /** * Allows you to modify the object list before it is loaded. This is a global event (search list, grid list, tree list, ...). @@ -107,7 +107,7 @@ class AdminEvents * * @var string */ - const OBJECT_LIST_BEFORE_LIST_LOAD = 'opendxp.admin.object.list.beforeListLoad'; + public const string OBJECT_LIST_BEFORE_LIST_LOAD = 'opendxp.admin.object.list.beforeListLoad'; /** * Allows you to modify the object list before it is prepared for export. @@ -121,7 +121,7 @@ class AdminEvents * * @var string */ - const OBJECT_LIST_BEFORE_EXPORT_PREPARE = 'opendxp.admin.object.list.beforeExportPrepare'; + public const string OBJECT_LIST_BEFORE_EXPORT_PREPARE = 'opendxp.admin.object.list.beforeExportPrepare'; /** * Allows you to modify the object list before it is exported. @@ -135,7 +135,7 @@ class AdminEvents * * @var string */ - const OBJECT_LIST_BEFORE_EXPORT = 'opendxp.admin.object.list.beforeExport'; + public const string OBJECT_LIST_BEFORE_EXPORT = 'opendxp.admin.object.list.beforeExport'; /** * Allows you to modify the result after the list was loaded. This event apply to the grid list. @@ -149,7 +149,7 @@ class AdminEvents * * @var string */ - const OBJECT_LIST_AFTER_LIST_LOAD = 'opendxp.admin.object.list.afterListLoad'; + public const string OBJECT_LIST_AFTER_LIST_LOAD = 'opendxp.admin.object.list.afterListLoad'; /** * Allows to implement an additional condition for the object list when the search field within the grid is used. @@ -164,7 +164,7 @@ class AdminEvents * * @var string */ - const OBJECT_LIST_HANDLE_FULLTEXT_QUERY = 'opendxp.admin.object.list.handleFulltextQuery'; + public const string OBJECT_LIST_HANDLE_FULLTEXT_QUERY = 'opendxp.admin.object.list.handleFulltextQuery'; /** * Fired before the request params are parsed. This event apply to both the folder content preview list and the grid list. @@ -177,7 +177,7 @@ class AdminEvents * * @var string */ - const ASSET_LIST_BEFORE_FILTER_PREPARE = 'opendxp.admin.asset.list.beforeFilterPrepare'; + public const string ASSET_LIST_BEFORE_FILTER_PREPARE = 'opendxp.admin.asset.list.beforeFilterPrepare'; /** * Allows you to modify the asset list before it is loaded. This is a global event (folder content preview list, grid list, tree list, ...). @@ -191,7 +191,7 @@ class AdminEvents * * @var string */ - const ASSET_LIST_BEFORE_LIST_LOAD = 'opendxp.admin.asset.list.beforeListLoad'; + public const string ASSET_LIST_BEFORE_LIST_LOAD = 'opendxp.admin.asset.list.beforeListLoad'; /** * Arguments: @@ -202,7 +202,7 @@ class AdminEvents * * @var string */ - const ASSET_GET_FIELD_GRID_CONFIG = 'opendxp.admin.asset.getFieldGridConfig'; + public const string ASSET_GET_FIELD_GRID_CONFIG = 'opendxp.admin.asset.getFieldGridConfig'; /** * Allows you to modify the result after the list was loaded. This event apply to both the folder content preview list and the grid list. @@ -216,7 +216,7 @@ class AdminEvents * * @var string */ - const ASSET_LIST_AFTER_LIST_LOAD = 'opendxp.admin.asset.list.afterListLoad'; + public const string ASSET_LIST_AFTER_LIST_LOAD = 'opendxp.admin.asset.list.afterListLoad'; /** * Allows you to modify the data from the listfolder grid before it gets processed @@ -230,7 +230,7 @@ class AdminEvents * * @var string */ - const ASSET_LIST_BEFORE_UPDATE = 'opendxp.admin.asset.list.beforeUpdate'; + public const string ASSET_LIST_BEFORE_UPDATE = 'opendxp.admin.asset.list.beforeUpdate'; /** * Allows you to modify the batch update data from the listfolder grid before it gets processed @@ -244,7 +244,7 @@ class AdminEvents * * @var string */ - const ASSET_LIST_BEFORE_BATCH_UPDATE = 'opendxp.admin.asset.list.beforeBatchUpdate'; + public const string ASSET_LIST_BEFORE_BATCH_UPDATE = 'opendxp.admin.asset.list.beforeBatchUpdate'; /** * Fired before the request params are parsed. This event apply to the seo panel tree. @@ -257,7 +257,7 @@ class AdminEvents * * @var string */ - const DOCUMENT_LIST_BEFORE_FILTER_PREPARE = 'opendxp.admin.document.list.beforeFilterPrepare'; + public const string DOCUMENT_LIST_BEFORE_FILTER_PREPARE = 'opendxp.admin.document.list.beforeFilterPrepare'; /** * Allows you to modify the document list before it is loaded. This is a global event (seo panel tree, tree list, ...). @@ -271,7 +271,7 @@ class AdminEvents * * @var string */ - const DOCUMENT_LIST_BEFORE_LIST_LOAD = 'opendxp.admin.document.list.beforeListLoad'; + public const string DOCUMENT_LIST_BEFORE_LIST_LOAD = 'opendxp.admin.document.list.beforeListLoad'; /** * Allows you to modify the result after the list was loaded. This event apply to the seo panel tree. @@ -285,7 +285,7 @@ class AdminEvents * * @var string */ - const DOCUMENT_LIST_AFTER_LIST_LOAD = 'opendxp.admin.document.list.afterListLoad'; + public const string DOCUMENT_LIST_AFTER_LIST_LOAD = 'opendxp.admin.document.list.afterListLoad'; /** * Fired before the request params are parsed. @@ -299,7 +299,7 @@ class AdminEvents * * @var string */ - const ASSET_GET_PRE_SEND_DATA = 'opendxp.admin.asset.get.preSendData'; + public const string ASSET_GET_PRE_SEND_DATA = 'opendxp.admin.asset.get.preSendData'; /** * Subject: \OpenDxp\Bundle\AdminBundle\Controller\Admin\Asset\AssetController @@ -310,7 +310,7 @@ class AdminEvents * * @var string */ - const ASSET_TREE_GET_CHILDREN_BY_ID_PRE_SEND_DATA = 'opendxp.admin.asset.treeGetChildrenById.preSendData'; + public const string ASSET_TREE_GET_CHILDREN_BY_ID_PRE_SEND_DATA = 'opendxp.admin.asset.treeGetChildrenById.preSendData'; /** * Fired before the request params are parsed. @@ -324,7 +324,7 @@ class AdminEvents * * @var string */ - const DOCUMENT_GET_PRE_SEND_DATA = 'opendxp.admin.document.get.preSendData'; + public const string DOCUMENT_GET_PRE_SEND_DATA = 'opendxp.admin.document.get.preSendData'; /** * Subject: \OpenDxp\Bundle\AdminBundle\Controller\Admin\DocumentController @@ -335,7 +335,7 @@ class AdminEvents * * @var string */ - const DOCUMENT_TREE_GET_CHILDREN_BY_ID_PRE_SEND_DATA = 'opendxp.admin.document.treeGetChildrenById.preSendData'; + public const string DOCUMENT_TREE_GET_CHILDREN_BY_ID_PRE_SEND_DATA = 'opendxp.admin.document.treeGetChildrenById.preSendData'; /** * Fired before the edit lock is handled. @@ -349,7 +349,7 @@ class AdminEvents * * @var string */ - const OBJECT_GET_IS_LOCKED = 'opendxp.admin.dataobject.get.isLocked'; + public const string OBJECT_GET_IS_LOCKED = 'opendxp.admin.dataobject.get.isLocked'; /** * Fired before the request params are parsed. @@ -363,7 +363,7 @@ class AdminEvents * * @var string */ - const OBJECT_GET_PRE_SEND_DATA = 'opendxp.admin.dataobject.get.preSendData'; + public const string OBJECT_GET_PRE_SEND_DATA = 'opendxp.admin.dataobject.get.preSendData'; /** * Subject: \OpenDxp\Bundle\AdminBundle\Controller\Admin\DataObject\DataObjectHelperController @@ -377,7 +377,7 @@ class AdminEvents * * @var string */ - const OBJECT_GRID_GET_COLUMN_CONFIG_PRE_SEND_DATA = 'opendxp.admin.dataobject.gridGetColumnConfig.preSendData'; + public const string OBJECT_GRID_GET_COLUMN_CONFIG_PRE_SEND_DATA = 'opendxp.admin.dataobject.gridGetColumnConfig.preSendData'; /** * Subject: \OpenDxp\Bundle\AdminBundle\Controller\Admin\DataObjectController @@ -388,7 +388,7 @@ class AdminEvents * * @var string */ - const OBJECT_TREE_GET_CHILDREN_BY_ID_PRE_SEND_DATA = 'opendxp.admin.dataobject.treeGetChildrenById.preSendData'; + public const string OBJECT_TREE_GET_CHILDREN_BY_ID_PRE_SEND_DATA = 'opendxp.admin.dataobject.treeGetChildrenById.preSendData'; /** * Subject: \OpenDxp\Bundle\AdminBundle\Controller\Admin\ClassController @@ -400,7 +400,7 @@ class AdminEvents * * @var string */ - const CLASS_FIELDCOLLECTION_LIST_PRE_SEND_DATA = 'opendxp.admin.class.fieldcollectionList.preSendData'; + public const string CLASS_FIELDCOLLECTION_LIST_PRE_SEND_DATA = 'opendxp.admin.class.fieldcollectionList.preSendData'; /** * Subject: \OpenDxp\Bundle\AdminBundle\Controller\Admin\ClassController @@ -412,7 +412,7 @@ class AdminEvents * * @var string */ - const CLASS_OBJECT_ICONS_PRE_SEND_DATA = 'opendxp.admin.class.dataobject.preSendData'; + public const string CLASS_OBJECT_ICONS_PRE_SEND_DATA = 'opendxp.admin.class.dataobject.preSendData'; /** * Subject: \OpenDxp\Bundle\AdminBundle\Controller\Admin\ClassController @@ -424,7 +424,7 @@ class AdminEvents * * @var string */ - const CLASS_OBJECTBRICK_LIST_PRE_SEND_DATA = 'opendxp.admin.class.objectbrickList.preSendData'; + public const string CLASS_OBJECTBRICK_LIST_PRE_SEND_DATA = 'opendxp.admin.class.objectbrickList.preSendData'; /** * Subject: \OpenDxp\Bundle\AdminBundle\Controller\Admin\ClassController @@ -435,7 +435,7 @@ class AdminEvents * * @var string */ - const CLASS_OBJECTBRICK_UPDATE_DEFINITION = 'opendxp.admin.class.objectbrick.updateDefinition'; + public const string CLASS_OBJECTBRICK_UPDATE_DEFINITION = 'opendxp.admin.class.objectbrick.updateDefinition'; /** * Subject: \OpenDxp\Bundle\AdminBundle\Controller\Admin\ClassController @@ -446,7 +446,7 @@ class AdminEvents * * @var string */ - const CLASS_SELECTOPTIONS_LIST_PRE_SEND_DATA = 'opendxp.admin.class.selectoptionsList.preSendData'; + public const string CLASS_SELECTOPTIONS_LIST_PRE_SEND_DATA = 'opendxp.admin.class.selectoptionsList.preSendData'; /** * Subject: \OpenDxp\Bundle\AdminBundle\Controller\Admin\ClassController @@ -457,7 +457,7 @@ class AdminEvents * * @var string */ - const CLASS_SELECTOPTIONS_UPDATE_CONFIGURATION = 'opendxp.admin.class.selectoptions.updateDefinition'; + public const string CLASS_SELECTOPTIONS_UPDATE_CONFIGURATION = 'opendxp.admin.class.selectoptions.updateDefinition'; /** * Fired before an element is opened @@ -471,7 +471,7 @@ class AdminEvents * * @var string */ - const RESOLVE_ELEMENT = 'opendxp.admin.resolve.element'; + public const string RESOLVE_ELEMENT = 'opendxp.admin.resolve.element'; /** * Fired before an element is opened @@ -484,7 +484,7 @@ class AdminEvents * * @var string */ - const RESOLVE_ELEMENT_ADMIN_STYLE = 'opendxp.admin.resolve.elementAdminStyle'; + public const string RESOLVE_ELEMENT_ADMIN_STYLE = 'opendxp.admin.resolve.elementAdminStyle'; /** * Subject: \OpenDxp\Bundle\AdminBundle\Controller\Admin\Asset\AssetController @@ -496,7 +496,7 @@ class AdminEvents * * @var string */ - const ASSET_METADATA_PRE_SET = 'opendxp.admin.asset.metadata.preSave'; + public const string ASSET_METADATA_PRE_SET = 'opendxp.admin.asset.metadata.preSave'; /** * This event is fired after OpenDXP generates the runtime Perspective @@ -509,5 +509,5 @@ class AdminEvents * * @var string */ - public const PERSPECTIVE_POST_GET_RUNTIME = 'opendxp.admin.perspective.postGetRuntime'; + public const string PERSPECTIVE_POST_GET_RUNTIME = 'opendxp.admin.perspective.postGetRuntime'; } diff --git a/src/Event/AssetEvents.php b/src/Event/AssetEvents.php index 15f72d6..1392b4b 100644 --- a/src/Event/AssetEvents.php +++ b/src/Event/AssetEvents.php @@ -19,8 +19,6 @@ class AssetEvents { /** * @Event("OpenDxp\Bundle\AdminBundle\Event\Model\AssetDeleteInfoEvent") - * - * @var string */ - const DELETE_INFO = 'opendxp.asset.deleteInfo'; + public const string DELETE_INFO = 'opendxp.asset.deleteInfo'; } diff --git a/src/Event/ElementAdminStyleEvent.php b/src/Event/ElementAdminStyleEvent.php index 9d25661..a1c7539 100644 --- a/src/Event/ElementAdminStyleEvent.php +++ b/src/Event/ElementAdminStyleEvent.php @@ -26,21 +26,16 @@ class ElementAdminStyleEvent extends Event /** * Style needed for tree */ - const CONTEXT_TREE = 1; - + public const int CONTEXT_TREE = 1; /** * Style needed for element editor */ - const CONTEXT_EDITOR = 2; - + public const int CONTEXT_EDITOR = 2; /** * Style needed for quicksearch */ - const CONTEXT_SEARCH = 3; + public const int CONTEXT_SEARCH = 3; - /** - * ElementAdminStyleEvent constructor. - */ public function __construct( protected ElementInterface $element, protected AdminStyle $adminStyle, diff --git a/src/Installer.php b/src/Installer.php index d5884c3..4194823 100644 --- a/src/Installer.php +++ b/src/Installer.php @@ -25,9 +25,9 @@ class Installer extends SettingsStoreAwareInstaller { - protected const USER_PERMISSIONS_CATEGORY = 'OpenDxp Admin Bundle'; + protected const string USER_PERMISSIONS_CATEGORY = 'OpenDxp Admin Bundle'; - const USER_PERMISSIONS = [ + public const array USER_PERMISSIONS = [ 'admin_translations', 'gdpr_data_extractor', 'system_appearance_settings', diff --git a/src/Security/ContentSecurityPolicyHandler.php b/src/Security/ContentSecurityPolicyHandler.php index f81bd2e..7d733ec 100644 --- a/src/Security/ContentSecurityPolicyHandler.php +++ b/src/Security/ContentSecurityPolicyHandler.php @@ -33,25 +33,16 @@ class ContentSecurityPolicyHandler implements LoggerAwareInterface private const string SELF = "'self'"; - public const DEFAULT_OPT = 'default-src'; - - public const IMG_OPT = 'img-src'; - - public const SCRIPT_OPT = 'script-src'; - - public const STYLE_OPT = 'style-src'; - - public const CONNECT_OPT = 'connect-src'; - - public const FONT_OPT = 'font-src'; - - public const MEDIA_OPT = 'media-src'; - - public const FRAME_OPT = 'frame-src'; - - public const FRAME_ANCHESTORS = 'frame-ancestors'; - - public const WORKER_OPT = 'worker-src'; + public const string DEFAULT_OPT = 'default-src'; + public const string IMG_OPT = 'img-src'; + public const string SCRIPT_OPT = 'script-src'; + public const string STYLE_OPT = 'style-src'; + public const string CONNECT_OPT = 'connect-src'; + public const string FONT_OPT = 'font-src'; + public const string MEDIA_OPT = 'media-src'; + public const string FRAME_OPT = 'frame-src'; + public const string FRAME_ANCHESTORS = 'frame-ancestors'; + public const string WORKER_OPT = 'worker-src'; private array $allowedUrls = [ self::CONNECT_OPT => [ @@ -109,9 +100,6 @@ private function getAllowedUrls(string $key, bool $flatten = true): array|string return isset($this->allowedUrls[$key]) && is_array($this->allowedUrls[$key]) ? implode(' ', $this->allowedUrls[$key]) : ''; } - /** - * @return $this - */ public function addAllowedUrls(string $key, array $value): static { if (!isset($this->allowedUrls[$key])) { @@ -125,9 +113,6 @@ public function addAllowedUrls(string $key, array $value): static return $this; } - /** - * @return $this - */ public function setCspHeader(string $key, string $value): static { $this->cspHeaderOptions[$key] = $value; From 20f07361c732e5b526ce40713cfacbc8d5f351d9 Mon Sep 17 00:00:00 2001 From: Stefan Hagspiel Date: Fri, 27 Feb 2026 11:56:44 +0100 Subject: [PATCH 2/2] re-add method docblocks and return types for fluent interfaces in CSP handler --- src/Security/ContentSecurityPolicyHandler.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Security/ContentSecurityPolicyHandler.php b/src/Security/ContentSecurityPolicyHandler.php index 7d733ec..3f5d42c 100644 --- a/src/Security/ContentSecurityPolicyHandler.php +++ b/src/Security/ContentSecurityPolicyHandler.php @@ -100,6 +100,9 @@ private function getAllowedUrls(string $key, bool $flatten = true): array|string return isset($this->allowedUrls[$key]) && is_array($this->allowedUrls[$key]) ? implode(' ', $this->allowedUrls[$key]) : ''; } + /** + * @return $this + */ public function addAllowedUrls(string $key, array $value): static { if (!isset($this->allowedUrls[$key])) { @@ -113,6 +116,9 @@ public function addAllowedUrls(string $key, array $value): static return $this; } + /** + * @return $this + */ public function setCspHeader(string $key, string $value): static { $this->cspHeaderOptions[$key] = $value;