diff --git a/bundles/CoreBundle/config/cache.yaml b/bundles/CoreBundle/config/cache.yaml index ce6b572bae5..71551219861 100644 --- a/bundles/CoreBundle/config/cache.yaml +++ b/bundles/CoreBundle/config/cache.yaml @@ -26,19 +26,7 @@ services: class: Symfony\Component\Cache\Adapter\TagAwareAdapter arguments: [ '@pimcore.cache.adapter.doctrine_dbal', null ] - pimcore.cache.adapter.redis_tag_aware: - class: Symfony\Component\Cache\Adapter\RedisTagAwareAdapter - lazy: true - arguments: - - null - - null - - 0 - - '@cache.default_marshaller' - tags: - - { name: cache.pool, provider: cache.default_redis_provider, clearer: cache.default_clearer } - - { name: monolog.logger, channel: cache } - calls: - - [setLogger, ['@logger']] + pimcore.cache.adapter.redis_tag_aware: '@cache.adapter.redis_tag_aware' pimcore.cache.pool.app: class: Symfony\Component\Cache\Adapter\ProxyAdapter diff --git a/bundles/CoreBundle/config/pimcore/default.yaml b/bundles/CoreBundle/config/pimcore/default.yaml index 143b27b5443..5e65aaf326e 100644 --- a/bundles/CoreBundle/config/pimcore/default.yaml +++ b/bundles/CoreBundle/config/pimcore/default.yaml @@ -61,6 +61,7 @@ framework: pimcore_type: '*' pimcore_id: '*' allow_relative_links: true + allow_relative_medias: true allow_elements: span : [ 'class', 'style', 'id' ] div : [ 'class', 'style', 'id' ] @@ -79,6 +80,7 @@ framework: li: ['class', 'style', 'id'] ol: ['class', 'style', 'id'] br: '' + img: ['alt', 'style', 'src'] pimcore.translation_sanitizer: allow_attributes: pimcore_type: '*' diff --git a/bundles/CustomReportsBundle/src/Tool/Config/Dao.php b/bundles/CustomReportsBundle/src/Tool/Config/Dao.php index ed50f34cf1c..d7820335c7c 100644 --- a/bundles/CustomReportsBundle/src/Tool/Config/Dao.php +++ b/bundles/CustomReportsBundle/src/Tool/Config/Dao.php @@ -104,11 +104,9 @@ public function delete(): void protected function prepareDataStructureForYaml(string $id, mixed $data): mixed { return [ - 'pimcore' => [ - 'custom_report' => [ - 'definitions' => [ - $id => $data, - ], + 'pimcore_custom_reports' => [ + 'definitions' => [ + $id => $data, ], ], ]; diff --git a/bundles/SeoBundle/src/Controller/Document/DocumentController.php b/bundles/SeoBundle/src/Controller/Document/DocumentController.php index 9f677a28d15..ccfdfe78b11 100644 --- a/bundles/SeoBundle/src/Controller/Document/DocumentController.php +++ b/bundles/SeoBundle/src/Controller/Document/DocumentController.php @@ -92,7 +92,7 @@ public function seopanelTreeAction( // make sure document routes are also built for unpublished documents $documentRouteHandler->setForceHandleUnpublishedDocuments(true); - $document = Document::getById($allParams['node']); + $document = Document::getById((int) $allParams['node']); $documents = []; if ($document->hasChildren()) { diff --git a/bundles/TinymceBundle/public/js/editor.js b/bundles/TinymceBundle/public/js/editor.js index db5f409233c..a07b1b7c728 100644 --- a/bundles/TinymceBundle/public/js/editor.js +++ b/bundles/TinymceBundle/public/js/editor.js @@ -88,7 +88,7 @@ pimcore.bundle.tinymce.editor = Class.create({ base_url: '/bundles/pimcoretinymce/build/tinymce', suffix: '.min', convert_urls: false, - extended_valid_elements: 'a[name|href|target|title|pimcore_type|pimcore_id],img[style|longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align|pimcore_type|pimcore_id]', + extended_valid_elements: 'a[name|href|target|title|pimcore_id|pimcore_type],img[style|longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align|pimcore_id|pimcore_type]', init_instance_callback: function (editor) { editor.on('input', function (eChange) { const charCount = tinymce.activeEditor.plugins.wordcount.body.getCharacterCount(); diff --git a/doc/01_Getting_Started/00_Installation/00_Docker_Based_Installation.md b/doc/01_Getting_Started/00_Installation/00_Docker_Based_Installation.md index f217fcd3a08..58453d0fba4 100644 --- a/doc/01_Getting_Started/00_Installation/00_Docker_Based_Installation.md +++ b/doc/01_Getting_Started/00_Installation/00_Docker_Based_Installation.md @@ -57,4 +57,4 @@ If you would like to know more about the installation process or if you are havi ## Automating the Installation Process -For more information about ways to automate the installation process, have a look on [Advanced Installation Topics](../02_Advanced_Installation_Topics.md). +For more information about ways to automate the installation process, have a look on [Advanced Installation Topics](../02_Advanced_Installation_Topics/README.md). diff --git a/doc/01_Getting_Started/00_Installation/01_Webserver_Installation.md b/doc/01_Getting_Started/00_Installation/01_Webserver_Installation.md index 9c9419c2854..d24c5d2c8ff 100644 --- a/doc/01_Getting_Started/00_Installation/01_Webserver_Installation.md +++ b/doc/01_Getting_Started/00_Installation/01_Webserver_Installation.md @@ -65,7 +65,7 @@ This launches the interactive installer with a few questions. Make sure that you :::info - Pimcore allows a fully automated installation process. Read more here: [Advanced Installation Topics](../02_Advanced_Installation_Topics.md) + Pimcore allows a fully automated installation process. Read more here: [Advanced Installation Topics](../02_Advanced_Installation_Topics/README.md) ::: @@ -98,7 +98,7 @@ messages to the bus and run them afterward immediately from the queue. However, Keep in mind that the cron job has to run as the same user as the web interface to avoid permission issues (eg. `www-data`). -For information about how to handle failed jobs, see this [section](../01_Symfony_Messenger.md). +For information about how to handle failed jobs, see this [section](../02_Advanced_Installation_Topics/01_Symfony_Messenger.md). ## Caching Make sure to use any sort of [caching](https://pimcore.com/docs/platform/Pimcore/Development_Tools_and_Details/Cache/) to improve performance. We recommend Redis cache storage. @@ -109,8 +109,8 @@ If you would like to know more about the installation process or if you are havi ## 7. Further Reading -- [Symfony Messenger](../01_Symfony_Messenger.md) -- [Advanced Installation Topics](../02_Advanced_Installation_Topics.md) +- [Symfony Messenger](../02_Advanced_Installation_Topics/01_Symfony_Messenger.md) +- [Advanced Installation Topics](../02_Advanced_Installation_Topics/README.md) - [Apache Configuration](../../23_Installation_and_Upgrade/03_System_Setup_and_Hosting/01_Apache_Configuration.md) - [Nginx Configuration](../../23_Installation_and_Upgrade/03_System_Setup_and_Hosting/02_Nginx_Configuration.md) - [Database Setup](../../23_Installation_and_Upgrade/03_System_Setup_and_Hosting/05_DB_Setup.md) diff --git a/doc/01_Getting_Started/01_Symfony_Messenger.md b/doc/01_Getting_Started/02_Advanced_Installation_Topics/01_Symfony_Messenger.md similarity index 100% rename from doc/01_Getting_Started/01_Symfony_Messenger.md rename to doc/01_Getting_Started/02_Advanced_Installation_Topics/01_Symfony_Messenger.md diff --git a/doc/01_Getting_Started/02_Advanced_Installation_Topics.md b/doc/01_Getting_Started/02_Advanced_Installation_Topics/README.md similarity index 83% rename from doc/01_Getting_Started/02_Advanced_Installation_Topics.md rename to doc/01_Getting_Started/02_Advanced_Installation_Topics/README.md index 01facbb8763..e9198204ac2 100644 --- a/doc/01_Getting_Started/02_Advanced_Installation_Topics.md +++ b/doc/01_Getting_Started/02_Advanced_Installation_Topics/README.md @@ -51,14 +51,14 @@ Attention: The bundles will be added to `config/bundles.php` automatically. Available bundles for installation: -- [PimcoreApplicationLoggerBundle](../18_Tools_and_Features/17_Application_Logger.md) -- [PimcoreCustomReportsBundle](../18_Tools_and_Features/29_Custom_Reports.md) -- [PimcoreGlossaryBundle](../18_Tools_and_Features/21_Glossary.md) -- PimcoreSeoBundle (for SEO-related topics: [Robots.txt](../18_Tools_and_Features/38_Robots.txt.md), [Sitemaps](../18_Tools_and_Features/39_Sitemaps.md) and [Redirects](../02_MVC/04_Routing_and_URLs/04_Redirects.md)) +- [PimcoreApplicationLoggerBundle](../../18_Tools_and_Features/17_Application_Logger.md) +- [PimcoreCustomReportsBundle](../../18_Tools_and_Features/29_Custom_Reports.md) +- [PimcoreGlossaryBundle](../../18_Tools_and_Features/21_Glossary.md) +- PimcoreSeoBundle (for SEO-related topics: [Robots.txt](../../18_Tools_and_Features/38_Robots.txt.md), [Sitemaps](../../18_Tools_and_Features/39_Sitemaps.md) and [Redirects](../../02_MVC/04_Routing_and_URLs/04_Redirects.md)) - PimcoreSimpleBackendSearchBundle (for default search functionality in Backend UI interface) -- [PimcoreStaticRoutesBundle](../02_MVC/04_Routing_and_URLs/02_Custom_Routes.md) +- [PimcoreStaticRoutesBundle](../../02_MVC/04_Routing_and_URLs/02_Custom_Routes.md) - [PimcoreTinymceBundle](https://github.com/pimcore/pimcore/blob/11.x/bundles/TinymceBundle/README.md) (for default WYSIWYG editor) -- [PimcoreUuidBundle](../19_Development_Tools_and_Details/19_UUID_Support.md) +- [PimcoreUuidBundle](../../19_Development_Tools_and_Details/19_UUID_Support.md) - PimcoreWordExportBundle (for import/export functionality for translations in Word format) - PimcoreXliffBundle (for import/export functionality for translations in Xliff format) @@ -156,4 +156,4 @@ pimcore: ## Office document preview -The feature for displaying a [preview of documents](../04_Assets/03_Working_with_Thumbnails/05_Document_Thumbnails.md) directly in Pimcore is optional. To use it, you must install either [Gotenberg](../23_Installation_and_Upgrade/03_System_Setup_and_Hosting/06_Additional_Tools_Installation.md#gotenberg) or [LibreOffice](../23_Installation_and_Upgrade/03_System_Setup_and_Hosting/06_Additional_Tools_Installation.md#libreoffice-pdftotext-inkscape-) according to your preference. +The feature for displaying a [preview of documents](../../04_Assets/03_Working_with_Thumbnails/05_Document_Thumbnails.md) directly in Pimcore is optional. To use it, you must install either [Gotenberg](../../23_Installation_and_Upgrade/03_System_Setup_and_Hosting/06_Additional_Tools_Installation.md#gotenberg) or [LibreOffice](../../23_Installation_and_Upgrade/03_System_Setup_and_Hosting/06_Additional_Tools_Installation.md#libreoffice-pdftotext-inkscape-) according to your preference. diff --git a/doc/01_Getting_Started/README.md b/doc/01_Getting_Started/README.md index 6cb9d368739..b44c3da24d6 100644 --- a/doc/01_Getting_Started/README.md +++ b/doc/01_Getting_Started/README.md @@ -5,10 +5,10 @@ This section provides a quick getting started tutorial for Pimcore and covers th 1. Installation of Pimcore: - via [Docker](../01_Getting_Started/00_Installation/00_Docker_Based_Installation.md) - via [Webserver](../01_Getting_Started/00_Installation/01_Webserver_Installation.md) -2. [Symfony Messenger and How to Handle Failed Jobs](./01_Symfony_Messenger.md) -3. [Advanced Installation Topics](./02_Advanced_Installation_Topics.md) -4. [Directory Structure of Pimcore](./03_Directory_Structure.md) -5. [Configuration](./04_Configuration.md) -6. [Architecture Overview](./05_Architecture_Overview.md) -7. [Creating your First Project](./06_Create_a_First_Project.md) +2. [Advanced Installation Topics](./02_Advanced_Installation_Topics/README.md): + - [Symfony Messenger and How to Handle Failed Jobs](./02_Advanced_Installation_Topics/01_Symfony_Messenger.md) +3. [Directory Structure of Pimcore](./03_Directory_Structure.md) +4. [Configuration](./04_Configuration.md) +5. [Architecture Overview](./05_Architecture_Overview.md) +6. [Creating your First Project](./06_Create_a_First_Project.md) diff --git a/doc/19_Development_Tools_and_Details/09_Cache/README.md b/doc/19_Development_Tools_and_Details/09_Cache/README.md index 6436893dfb2..aa3c43b085e 100644 --- a/doc/19_Development_Tools_and_Details/09_Cache/README.md +++ b/doc/19_Development_Tools_and_Details/09_Cache/README.md @@ -27,11 +27,11 @@ framework: pools: pimcore.cache.pool: public: true - tags: true + #tags: true default_lifetime: 31536000 # 1 year #adapter: pimcore.cache.adapter.doctrine_dbal #provider: 'doctrine.dbal.default_connection' - adapter: pimcore.cache.adapter.redis_tag_aware + adapter: cache.adapter.redis_tag_aware provider: 'redis://localhost' ``` diff --git a/doc/20_Extending_Pimcore/13_Bundle_Developers_Guide/README.md b/doc/20_Extending_Pimcore/13_Bundle_Developers_Guide/README.md index 0cd48b0a9d8..7cd89941054 100644 --- a/doc/20_Extending_Pimcore/13_Bundle_Developers_Guide/README.md +++ b/doc/20_Extending_Pimcore/13_Bundle_Developers_Guide/README.md @@ -56,6 +56,17 @@ For bundles, translations should be stored in the `Resources/translations/` dire Example: admin.en.yml or messages.en.yml +#### Translations Domain +A translation domain is only considered valid when it is registered as follows: +```yaml +pimcore: + translations: + domains: + - site_1 + - site_2 +```` + +Then only translations stored in a dedicated domain table e.g. `translations_DOMAIN` are used by the Pimcore translation service. ### Security / Authentication diff --git a/doc/22_Administration_of_Pimcore/02_Cleanup_Data_Storage.md b/doc/22_Administration_of_Pimcore/02_Cleanup_Data_Storage.md index 42659798562..be9f7dca3d9 100644 --- a/doc/22_Administration_of_Pimcore/02_Cleanup_Data_Storage.md +++ b/doc/22_Administration_of_Pimcore/02_Cleanup_Data_Storage.md @@ -71,3 +71,6 @@ amount of items in your recycle bin: mysql -e "TRUNCATE TABLE ###.recyclebin;" rm -r var/recyclebin ``` + +**WARNING: The recycle bin is an administrative tool that displays any user's deleted elements. +Due to the nature and complexity of the elements deletion and restoration process, this tool should be reserved for administrator and advanced users** \ No newline at end of file diff --git a/doc/22_Administration_of_Pimcore/07_Users_and_Roles.md b/doc/22_Administration_of_Pimcore/07_Users_and_Roles.md index 6e346372965..7209f76b31a 100644 --- a/doc/22_Administration_of_Pimcore/07_Users_and_Roles.md +++ b/doc/22_Administration_of_Pimcore/07_Users_and_Roles.md @@ -21,7 +21,7 @@ In Pimcore, there are two levels of user permissions: 1) Permissions on system components, 2) Permissions on data elements (Assets, Data Objects, and Documents). -Permissions can be granted to roles or individual users. +Permissions can be granted to individual users or groups of users (called "roles" in Pimcore). The following paragraphs describe how and where permissions can be set and how they will or will not affect each other. It is not mandatory to use roles, permissions can be granted to users directly. However, it is advised to use roles if there is a larger user group to manage. In the `Users/Roles` settings tab it can be decided which permissions are granted to that user or role. An individual user has a few more general settings than the role. @@ -50,7 +50,7 @@ The following list outlines what the different system permissions (available for * **Notes & Events**: Notes & Events are visible * **Objects**: Objects tree is visible * **Predefined Properties**: User can create and modify predefined properties -* **Recycle Bin**: User has access to recycle bin +* **Recycle Bin**: User has access to the recycle bin and see all the deleted elements (even by other users). * **Redirects**: User can create and modify redirects * **Reports**: User has access to reports module * **Seemode**: Seemode available/not available for user @@ -95,7 +95,15 @@ The user permissions on element basis are summed up as follows: Individual users are granted access to all defined workspaces for any role they incorporate. In addition to that, users can have their own workspaces. These are added to the permissions granted by roles. For example, a role `myRole` has been granted list and view access to `/home/myPath`. The user editor incorporates the role `myRole` and thereby inherits all workspace settings from the role. -In case the editor has his own workspace settings on `/home/myPath`, these permissions are added to permissions from any role they incorporate. A permission granted by any role can not be rescinded for a single user. +In case the editor has his own workspace settings on `/home/myPath`, these permissions are added to permissions from any role they incorporate. + +:::caution + +Be aware that if individual permissions granted to a user are different from the ones granted by its role for the same workspace, user permissions win over the ones attributed to the role. This implies that if the user has fewer permissions granted as an individual than through its role, the role's permissions will also be overruled. + +For example, a user has only `List` permissions on a workspace, but its role defines `List`, `View`, `Save`, and `Publish` permissions for the same workspace. Because its individual permissions are restricted, this user will only have the possibility to see the workspace tree allowed by its `List` permissions. + +::: It is also possible to restrict access to localized fields on a language level. By default, users can view and edit (as long as they also have sufficient object permissions) all localized fields. This can now be restricted to a subset of languages. diff --git a/doc/23_Installation_and_Upgrade/03_System_Setup_and_Hosting/09_Performance_Guide.md b/doc/23_Installation_and_Upgrade/03_System_Setup_and_Hosting/09_Performance_Guide.md index 3a5e6732cc3..c4101565c55 100644 --- a/doc/23_Installation_and_Upgrade/03_System_Setup_and_Hosting/09_Performance_Guide.md +++ b/doc/23_Installation_and_Upgrade/03_System_Setup_and_Hosting/09_Performance_Guide.md @@ -231,9 +231,8 @@ framework: pools: pimcore.cache.pool: public: true - tags: true default_lifetime: 31536000 # 1 year - adapter: pimcore.cache.adapter.redis_tag_aware + adapter: cache.adapter.redis_tag_aware provider: 'redis://localhost' ``` diff --git a/doc/23_Installation_and_Upgrade/09_Upgrade_Notes/README.md b/doc/23_Installation_and_Upgrade/09_Upgrade_Notes/README.md index 41779fc7017..ae835bede57 100644 --- a/doc/23_Installation_and_Upgrade/09_Upgrade_Notes/README.md +++ b/doc/23_Installation_and_Upgrade/09_Upgrade_Notes/README.md @@ -1,6 +1,10 @@ -# Upgrade Notes - Pimcore 11.0.0 +# Upgrade Notes -## API +## Pimcore 11.0.6 +- Properties of `Pimcore\Model\DataObject\Data\Link` are nullable now. + +## Pimcore 11.0.0 +### API #### [General] : - **Attention:** Added native php types for argument types, property types, return types and strict type declaration where possible. Double check your classes which are extending from Pimcore classes and adapt if necessary. @@ -66,7 +70,7 @@ - Bumped `league/flysystem-bundle` minimum requirement to ^3.0 (which introduces `directoryExists()`,`has()` methods and fixes support for `directory_visibility` configuration option). Please bump the Flysystem Adapters requirement accordingly to `^3.0` in your project `composer.json`. ----------------- -## Admin UI +### Admin UI #### [General] : - Removed `adminer` as built-in database management tool. @@ -99,7 +103,7 @@ ----------------- -## Bundles +### Bundles #### [Bundles General] : - Removed support for loading bundles through `extensions.php`. @@ -181,7 +185,7 @@ - Service ids changed from `pimcore.newsletter` to `pimcore_newsletter` e.g. `pimcore_newsletter.document.newsletter.factory.default` -## Core +### Core #### [Commands] : @@ -262,7 +266,7 @@ pimcore: - `EcommerceFrameworkBundle\Tracking\TrackingManager` requires session from request stack. ----------------- -## Ecommerce +### Ecommerce #### [Ecommerce General] : - Ecommerce bundle has been moved into a package `pimcore/ecommerce-bundle`. If you wish to continue using the ecommerce framework, then please require the package in your composer.json and install it after enabling in `config/bundles.php`. @@ -287,7 +291,7 @@ pimcore: - Changed return type-hints of `CheckoutableInterface` methods `getOSPrice`, `getOSPriceInfo`, `getOSAvailabilityInfo`, `getPriceSystemName`, `getAvailabilitySystemName`, `getPriceSystemImplementation`, `getAvailabilitySystemImplementation` to be non-nullable. ----------------- -## Elements +### Elements #### [All] : @@ -476,7 +480,7 @@ pimcore_seo: - Removed [deprecated and legacy `