Git

You can anonymously read the source code, study it's features and documentation by going to the GitHub repository directoy:

https://github.com/ezecosystem/ezpublish-spi

You can anonymously check out the source code released by this project from its Git repository:

git clone https://github.com/ezecosystem/ezpublish-spi.git

You may be able to anonymously check out the source code released by this project from its expected composer package:

composer require ezecosystem/ezpublish-spi

To be able to commit changes to the project's repository, you need to be a member of the project.

Latest log messages

  • 9dfc99668321cbf5e94241640bd23cee52a3ebc1 on 29/08/2018 12:02 am by konradoboza <34310128+konradoboza@users.noreply.github.com> [GitHub Diff]
    Message: EZP-29290: Author Field Type prefilled by empty value by default (#2417)
  • c6a76e48464ff841ae0478ab14d6d674a7a1dcca on 09/08/2018 3:02 am by konradoboza <34310128+konradoboza@users.noreply.github.com> [GitHub Diff]
    Message: EZP-29290: As an Editor, I want to have preconfigured "Author" section while creating the content (#2392)

    * WIP prefilling author field type

    * EZP-29290: As an Editor, I want to have preconfigured "Author" section while creating the content

    * EZP-29290: As an Editor, I want to have preconfigured "Author" section while creating the content

    * EZP-29290: As an Editor, I want to have preconfigured "Author" section while creating the content
  • 20684526f44c53e2db064f8c9f5149eb4d5af9ec on 02/07/2018 1:16 am by André R <ar@ez.no> [GitHub Diff]
    Message: [SPI] Add some todo's
  • 28bdacea65bf8cf499f04abcb3fd08f5a89b0a1e on 29/06/2018 2:56 am by Adam Wójs <adam@wojs.pl> [GitHub Diff]
    Message: EZEE-2081: NotificationService clean up (#2368)

    * EZEE-2081: Missing backticks around owner_id column

    * EZEE-2081: Removed out of date SQL query to eznotification table creation from upgrade notes

    * EZEE-2081: Removed unused import from eZ/Publish/SPI/Persistence/Handler

    * EZEE-2081: Added \eZ\Publish\API\Repository\Values\Notification\CreateStruct validation

    * EZEE-2081: Moved @throws from impl. to \eZ\Publish\API\Repository\NotificationService

    * EZEE-2081: Moved NotificationRenderer to eZ\Publish\Core\Notification\Renderer\

    * EZEE-2081: Replaced tag ezstudio.notification.renderer with ezpublish.notification.renderer

    * EZEE-2081: CS

    * EZEE-2081: Applied the CR suggestions
  • ac1af80fe61b40320b49e4da441de5fac45b5cff on 27/06/2018 8:52 am by André R <andre.romcke@gmail.com> [GitHub Diff]
    Message: EZP-27429: Optional SiteAccessAware Repository layer (#2064)

    * [REST] Forward BC to make sure all languages are loaded

    * [Tests] Add testing of the SiteAccessAware Repository

    * New SiteAccessAware Repository layer

    Based on work done in https://github.com/ezsystems/ezpublish-kernel/pull/1966

    * Fix errror about missing class (loading order?)

    * CS

    * Add missing coreLoader in EzPublishCoreExtension

    * Update PR

    * Change ContentViewBuilder, Param Converters and relevant Twig helpers to use SiteAccessAware Repo

    * fix review comments

    * Remove RoleService which atm has no logic (re-add when we add prioritized languages there)

    * Move LanguageResolver into own namespace and fix phpdoc to use FQCN

    * Enable missing test coverage

    * Update language args phpdoc on UrlAliasService

    * [yml] Fixed wrong usage of inner_repository in siteaccessaware.repository
  • 59f844777a89108561e364a4417842bcc3bd7ccb on 27/06/2018 7:02 am by Dawid Parafiński <vinniczek@gmail.com> [GitHub Diff]
    Message: EZEE-2081: Move NotificationBundle into Kernel (#2356)

    * EZEE-2081: Move NotificationBundle into Kernel

    * EZEE-2081: Notification Cache Handler

    * EZEE-2081: Feature goes into 7.2

    * fixup! EZEE-2081: Notification Cache Handler

    * EZEE-2081: use alias fix

    * EZEE-2081: Typehints and docblocks fix

    * EZEE-2081: introduce API Notification value object

    * EZEE-2081: Impl. cache layer for \eZ\Publish\SPI\Persistence\Notification\Handler

    * EZEE-2081: Updated database schema

    * fixup! EZEE-2081: Updated database schema

    * EZEE-2081: Update Notifications fixes

    * EZEE-2081: psr-2 fixes

    * EZEE-2081: wrong return value from createNotification fix

    * EZEE-2081: Create struct

    * EZEE-2081: Impl. exception conversion layer for notifications gateway.

    * EZEE-2081: psr2 fix

    * EZEE-2081: Impl. unit tests for \eZ\Publish\Core\Persistence\Legacy\Notification\Mapper

    * EZEE-2081: Slot Notification Service

    * EZEE-2081: service definition is now public

    * EZEE-2081: Delete signal added

    * EZEE-2081: Notification service slot fix

    * EZEE-2081: after review fixes - missing docblocks and some minor improv

    * EZEE-2081: Impl. unit tests for SPI Cache, SignalSlot layer, Notification/Handler (partial)

    * EZEE-2081: Impl. integration tests for NotificationService

    * fixup! EZEE-2081: Impl. integration tests for NotificationService

    * EZEE-2081: Impl. tests for \eZ\Publish\Core\Persistence\Legacy\Notification\Gateway\DoctrineDatabase

    * EZEE-2081: Changed type of eznotification.data columny from bytea to text

    * fixup! EZEE-2081: Changed type of eznotification.data columny from bytea to text

    * fixup! EZEE-2081: Impl. unit tests for SPI Cache, SignalSlot layer, Notification/Handler (partial)

    * EZEE-2081: CS
  • 96582e8e8c480b5c063465d6b6c6ee23f15aa6e7 on 25/06/2018 6:24 am by André R <andre.romcke@gmail.com> [GitHub Diff]
    Message: EZP-28956: Expose lazy loaded Location->getContent() on API for better DX (#2328)

    * Add SPI ContentHandler::loadContentList() for bulk loading content

    Note on cache:
    - By design here version is skipped, as use case for loading lots of content is in current version.
    - So one downside for cache here is that it won't reuse cache from load() method, causing cache to be duplcated in current design.

    Possible ways to remedy:
    - Force having to provide versions also on loadContentList() making it less efficient for some use cases (Page builder scenarios for instance)
    - Allow $version on load() to be false, or expose a loadContentInCurrentVersion() kind of method, either way adapt usage for this so cache will be shared.

    * Add Location->getContent() using lazy properties

    * [Integration] Add coverage for Location->getContent()

    * Change SearchService->findContent() to bulk load content

    Now that we have method to load several at once, take advantage in findContent().

    * [ContentViewBuilder] Take advantage of Location->getContent() to avoid duplicate loading

    * Refactor for LoadStruct usage in SPI

    * fix review comments

    * Add internal ContentInfo proxy for ContentProxy usage

    * Make Trash item contain Content as well (as it extends Location)

    * Fix review comments

    * Don't use unset() on properties when they are no longer needed

    * Fix phpdoc on Abstract(Cache)Handler
  • 501711c54ed707bb5559ec43026798e760a89ef6 on 24/05/2018 11:24 pm by Adam Wójs <adam@wojs.pl> [GitHub Diff]
    Message: EZP-29202: Swapping a bookmarked locations (#2335)
  • fc960a68c375ecf574c6d25a4c2d337b65633975 on 18/02/2019 11:33 pm by André R <andre.romcke@gmail.com> [GitHub Diff]
    Message: EZP-30006: As a Developer I possibility to load several languages at once (#2524)

    Introduces API to load several languages at once (specifically by id or locale), exposes more specific methods on languageMask handler and in SPI to make language handling more efficient.
  • 32c84b799c1e3c1c732a637dd5f66c357e9916f4 on 14/01/2019 2:41 am by Maciej Kobus <webhdx@users.noreply.github.com> [GitHub Diff]
    Message: EZP-29997: Exposed information about removed content items in EmptyTrashSignal and DeleteTrashItemSignal (#2520)

    * EZP-29997: Expose information about removed content items in EmptyTrashSignal and DeleteTrashItemSignal

    * EZP-29997: Fix and update unit tests

    * EZP-29997: Made changes according to code review

    * Fixed unit tests
  • 9f25bb749b3bbeafbcf3b0609b934fae1a4d9350 on 20/12/2018 8:35 am by André R <ar@ez.no> [GitHub Diff]
    Message: Merge branch '7.3'
  • 2f9b3f518af0d9082ee8bfcbf35127ee7dd87158 on 20/12/2018 8:32 am by André R <ar@ez.no> [GitHub Diff]
    Message: Merge branch '7.2' into 7.3
  • 899f15e2586d1680b3fbd3e3604d158bf3b914d1 on 20/12/2018 8:31 am by André R <ar@ez.no> [GitHub Diff]
    Message: Merge branch '6.13' into 7.2
  • 787a455147e7f7b92b00c70182a62bda26b80291 on 20/12/2018 7:43 am by André R <ar@ez.no> [GitHub Diff]
    Message: Merge branch '6.7' into 6.13
  • 22d4981cfd80c3cfad7dc3da88b9b0d3c0621e69 on 20/12/2018 7:28 am by André R <andre.romcke@gmail.com> [GitHub Diff]
    Message: EZP-29899: Content loading can end up loading wrong version under concurrency (#2502)

    * EZP-29899: Content loading can end up loading wrong version under concurrency

    Under concurrency it's possible that current version number we get in content info
    is out of date by the time we ask for full content object. So change
    SPI to allow loading current version number directly.
  • 3b2b03f6c381a2408b32f670c07aed78f7be643b on 20/12/2018 2:01 am by André R <andre.romcke@gmail.com> [GitHub Diff]
    Message: EZP-29851: As a developer I want to be able to load several Locations at once, fast (#2493)

    * EZP-29851: As a developer I want to be able to load several Locations at once, fast

    Motivation
    ----------
    Like the other bulk loading API's added recently this is to optimize usage in:
    - Page builder
    - Cronjobs / Commands
    - GraphQL
    - REST
    - Admin UI
    - Internally in Repository itself
    - ...

    These changes allows for less PHP code to execute, less SQL lookups, and less cache lookups by taking advantage of
    Symfony Cache's multi get support.

    Biggest benfit will be on setups where cache server is on a different machine, this can save ~5ms
    for each and every lookup saved. Which can on complex landing pages mean saving up-to several seconds
    of load time when HTTPCache is cold or disabled.

    Design
    ------
    Like other multi load API's return iterable list of objects, in this case Locations.
    _Iterable as we might want to introduce custom collection in the future to expose more info, hence avoid hardcoding usage of plain PHP array type._

    ```
    /**
    * Return list of unique Locations, with location id as key.
    *
    * Missing items (NotFound) & those user does not have access to (Unauthorized), will be missing from the
    * list and not cause any exception. It's up to calling logic to determine if this should cause exception or not.
    *
    * @param array $locationIds
    * @param string[]|null $prioritizedLanguages Filter on and use as prioritized language code on translated properties of returned objects.
    * @param bool|null $useAlwaysAvailable Respect always available flag on content when filtering on $prioritizedLanguages.
    *
    * @return \eZ\Publish\API\Repository\Values\Content\Location[]|iterable
    */
    public function loadLocationList(array $locationIds, array $prioritizedLanguages = null, bool $useAlwaysAvailable = null): iterable;
    ```

    * Fix review comment in regards to REST Client fix

    * Fix review comment on SiteAccessAware repo tests return value usage
  • c519a6444b44691d4f1a9cd9a298c19154f19c03 on 14/12/2018 7:17 am by Dawid Parafiński <vinniczek@gmail.com> [GitHub Diff]
    Message: EZP-29788: As a developer, I want to delete content type translation (#2494)

    * EZP-29788: As a developer, I want to delete content type translation

    * EZP-29788: Move handling into persistence layer

    * EZP-29788: Code review fix

    * EZP-29788: Unit tests for new removeContentTypeTranslation method

    * EZP-29788: BC breaks doc updated

    * EZP-29788: Changed typehinting for contentTypeId from mixed to int
  • ee01b3c3c82320c907d1cdd4faa21ca3280a7cfd on 14/12/2018 7:15 am by Dawid Parafiński <vinniczek@gmail.com> [GitHub Diff]
    Message: EZP-29764: As a Developer I want to update single Content Type translation (#2484)

    * Created integration test for updating CT with single new translation

    * EZP-29764: As a Developer I want to update single Content Type translation

    * EZP-29764: Replace UpdateStruct with Type object for update content type method

    * EZP-29764: Handling for content type field definitions

    * EZP-29764: Handling translation for new field definition

    * EZP-29764: Handling translation for new field definition

    * EZP-29764: Code review fixes

    * Add missing language_mask attribute to select query

    * Fix failing tests

    * EZP-29764: bc breaks update
  • 6312cd88b51ec158fcd0f83f3c7692f9f2daeee8 on 11/12/2018 9:03 am by André R <ar@ez.no> [GitHub Diff]
    Message: Merge branch '7.3'
  • e2d29f008f436c9c53f20acc037014335c60a4d7 on 11/12/2018 9:03 am by André R <ar@ez.no> [GitHub Diff]
    Message: Merge branch '7.2' into 7.3
  • fd7c1227a90f68512883741fa2dc252d9f8368d2 on 11/12/2018 5:03 am by André R <andre.romcke@gmail.com> [GitHub Diff]
    Message: EZP-29823: Allow to filter Location on translations to not throw when lazy loading Content (#2480)

    * Created integration test for lazy-loading Location's not avail. Content

    This happens for the use case where Location has been loaded via
    SiteAccessAware Repository, but the underlying Content is not available
    for the languages specified by the SiteAccess prioritized languages list.

    * EZP-29823: [SPI] Add translation filtering on location load, & expose multi get SPI method while at it

    * Add useAlwaysAvailable flag on load methods

    * [API] Expose useAlwaysAvailable on Location load methods

    * Update eZ/Publish/Core/Persistence/Legacy/Content/Location/Gateway/DoctrineDatabase.php

    Co-Authored-By: andrerom <andre.romcke@gmail.com>

    * Apply suggestions from code review

    Co-Authored-By: andrerom <andre.romcke@gmail.com>

    * CS

    * Cleanup use of generateLanguageMask()

    * Unused import

    * CS

    * CS

    * TMP Bulk loading API for loadLocationList

    * Revert "Cleanup use of generateLanguageMask()"

    This reverts commit dfb56052639684a0a143cb3492ac699ac32e0446.

    * Revert "TMP Bulk loading API for loadLocationList"

    This reverts commit a9be8aaff3e3efa4fff9e9bfdbe65b2fa12616f7.

    * Remove bulk loading locations (to be openened in seperate Pr after this)

    * CS

    * Pass useAlwaysAvailable argument to buildLocation() as well

    Push again to get CI to run.

    * Fix own review notes
  • 59a0ea5d19dd9a7814190a022d6bff89584490f0 on 04/12/2018 4:44 am by André R <andre.romcke@gmail.com> [GitHub Diff]
    Message: EZP-29613: As a developer I want access to ContentType on Content to avoid re-loading it (#2444)

    API:
    * Initial simple addition of `Content->getContentType()` API
    * Implement getContentType() on Core User & UserGroup object
    * Add SPI method for multi load content types
    * Improve PHP doc on SPI/Persistence/Content/Type
    * Adapt content domain mappers to bulk load content types
    * Add unit test for Legacy/Content/Type/Handler::loadContentTypeList()
    * Change MemoryCachingHandler to correctly use loadContentTypeList() and not single load()
    * Change to use Doctrine QueryBuilder to fix loadTypesDataList(), use it for all loads for test coverage and consistency
    * Fix Legacy Search test to keep connection, also refactor to avoid duplication

    API:
    * Expose `ContentTypeService->loadContentTypeList()` in order to adapt for new loadContentListByContentInfo()

    Usage in Core, aka get rid of ContentType load operations:
    * Adapt FieldRenderingExtension to use Content->getContentType()
    * Optimize FieldHelper and it's usage in ContentExtension
    * Optimize RestExecutedView to use content->getContentType()
  • 2dbb6fb7c9197c649d9ccfe1741a8d3b82becfd7 on 17/10/2018 8:31 am by Andrew Longosz <andrzej.longosz@ez.no> [GitHub Diff]
    Message: Merge branch '7.2' into 7.3
  • 2fdfcc63b3390c7ac5a0c013757230fe77aa3805 on 17/10/2018 8:29 am by Andrew Longosz <andrzej.longosz@ez.no> [GitHub Diff]
    Message: Merge branch '6.13' into 7.2
  • 6f49227f04311599765e98f6a64637b69481e875 on 17/10/2018 7:59 am by Andrew Longosz <andrzej.longosz@ez.no> [GitHub Diff]
    Message: Merge branch '6.7' into 6.13
  • d46a18e8cbfe2c8c8f0f8d707a0fc010f6b74bb4 on 17/10/2018 6:34 am by Andrew Longosz <alongosz@users.noreply.github.com> [GitHub Diff]
    Message: EZP-29721: Broken URL alias history is not restored after regenerating aliases (#2459)

    * Moved cleaning corrupted aliases after refreshing

    * Created integration tests for the use case

    * Implemented repairing broken URL Aliases after refreshing

    * Optimized mapping data for archiving aliases for deleted Translations

    * fixup! Created integration tests for the use case

    * fixup! Optimized mapping data for archiving aliases for deleted Translations
  • 822f5acedaaae6de0fa75622dbabb9b1b32aee8c on 28/09/2018 6:55 am by Adam Wójs <adam@wojs.pl> [GitHub Diff]
    Message: EZP-29408: Impl. asset relation type (#2409)
  • 002d692640266d7f8c056c150ae99c06d2987bbf on 24/09/2018 9:27 am by Andrew Longosz <andrzej.longosz@ez.no> [GitHub Diff]
    Message: Merge branch '7.2'
  • f4c921e4448aae3e03bad3a27af13fc8250fc327 on 24/09/2018 9:21 am by Andrew Longosz <andrzej.longosz@ez.no> [GitHub Diff]
    Message: Merge branch '6.13' into 7.2
  • 40702cfb020a54d333bce6e6f47c707809ccbab9 on 24/09/2018 8:13 am by Andrew Longosz <andrzej.longosz@ez.no> [GitHub Diff]
    Message: Merge branch '6.7' into 6.13
  • 80e51b77ffcfba4481bc4d064fa45cb2226026a1 on 24/09/2018 7:06 am by Andrew Longosz <alongosz@users.noreply.github.com> [GitHub Diff]
    Message: Improved code related to EZP-29139 (#2454)

    * Improved Query selection logic in Content Gateway

    * [SPI] Improved list of thrown exceptions in PhpDocs of URLAlias Handler
  • ee03aa1e943ac55102d7012d0eb98e45b7994e51 on 20/09/2018 9:11 am by Adam Wójs <adam@wojs.pl> [GitHub Diff]
    Message: EZP-29508: As an editor I want to manage ALT field with an image asset field type (#2451)

    * EZP-29508: As an editor I want to manage ALT field with an image asset field type

    * fixup! EZP-29508: As an editor I want to manage ALT field with an image asset field type

    * fixup! EZP-29508: As an editor I want to manage ALT field with an image asset field type

    * fixup! EZP-29508: As an editor I want to manage ALT field with an image asset field type

    * fixup! EZP-29508: As an editor I want to manage ALT field with an image asset field type
  • 2a0a30dde766a9f7f8d70d67f034af3a3b0096f0 on 17/09/2018 10:18 am by Andrew Longosz <andrzej.longosz@ez.no> [GitHub Diff]
    Message: Merge branch '7.2'
  • 1e5308d8ea55b92fcd340d2c7b9d68c28c056ba7 on 17/09/2018 10:10 am by Andrew Longosz <andrzej.longosz@ez.no> [GitHub Diff]
    Message: Merge branch '6.13' into 7.2
  • 8e8e882dc29a81e38205510bd8de09ec6dac4838 on 17/09/2018 7:38 am by Andrew Longosz <andrzej.longosz@ez.no> [GitHub Diff]
    Message: Merge branch '6.7' into 6.13
  • c11bc98465434e97045fa1e27dfb54f0941eba9c on 17/09/2018 6:45 am by Andrew Longosz <alongosz@users.noreply.github.com> [GitHub Diff]
    Message: EZP-29139: RegenerateUrlAliasesCommand should keep historized Url Aliases (#2423)

    * EZP-29138: Implemented ezplatform:urls:regenerate-aliases command

    * Deprecated the ezplatform:regenerate:legacy_storage_url_aliases command.

    * [PAPI] Implemented LocationService::loadAllLocations API

    * [PAPI] Implemented ContentService::loadContentListByContentInfo API

    * [PAPI] Implemented URLAliasService cleanup APIs

    New UrlAliasService APIs:
    * refreshSystemUrlAliasesForLocation
    * deleteCorruptedUrlAliases

    * [SPI] Backported Content\Handler::loadContentInfoList

    * [SPI] Backported Content\Handler::loadContentList

    * Improved URLAlias Gateway loadPathData to throw API BadStateException

    * [Tests] Implemented integration tests for new APIs

    * [Installer] Removed corrupted URL alias entry from cleandata.sql
  • 186e0bbf220990debd849f69596e466e3d41958e on 17/09/2018 5:44 am by thiago2509 <thiago@mugo.ca> [GitHub Diff]
    Message: EZP-28881: Add a field to support "date object was trashed

    Closes #2379
  • ea520198004201141ef517653849aacebe7bdaa2 on 11/09/2018 11:34 am by Adam Wójs <adam@wojs.pl> [GitHub Diff]
    Message: EZP-29104: Implemented ImageAsset Field Type (#2403)

    * EZP-29104: ImageAsset field type (tests)

    * EZP-29104: ImageAsset field type (implementation)

    * EZP-29104: Impl. \eZ\Publish\SPI\FieldType\Indexable for ezimageasset FT
  • dc447018c32c4af1b3a6a2559ae8168ac58ff1c9 on 09/09/2018 8:04 pm by André R <ar@ez.no> [GitHub Diff]
    Message: Merge branch '7.2'
  • b0582eb3fc739fef72209788d0b73e04c9687688 on 09/09/2018 8:03 pm by André R <ar@ez.no> [GitHub Diff]
    Message: Merge branch '6.13' into 7.2
  • 753c982ff8c29f28a532c57bfb0118d402366287 on 09/09/2018 8:00 pm by André R <ar@ez.no> [GitHub Diff]
    Message: Merge branch '6.7' into 6.13

    Additional change for branch diff:
    - Adapt Integration tests for changes in TrashItem (test double usage, so not a API change)
  • d8b98bbdcb99cb298217293213c247188b979402 on 09/09/2018 3:27 am by André R <ar@ez.no> [GitHub Diff]
    Message: Run php-cs-fixer
  • cc95c7bdd7870dc33b6dc2d9ac0f2cd083dd2589 on 04/09/2018 2:32 am by Andrew Longosz <andrzej.longosz@ez.no> [GitHub Diff]
    Message: Merge branch '7.2'
  • b0e599e82f502c2c46d0ffc4ce65e7a0062f5c8f on 04/09/2018 2:31 am by André R <andre.romcke@gmail.com> [GitHub Diff]
    Message: Optimized content bulk loading for use with larger batch sizes (#2429)

    Several issues were identified with current bulk loading logic which slows it down on larger batches:
    1. The SQL becomes to big as we build up a large OR expression, which also means we repeat language filtering per item
    2. version filtering was not done on the join meaning mySQL had to do a lot more work to filter out correct items.
    3. loadVersionedNameData was given a lot of duplicated entries which caused the query there to be slowed down considerably as well

    So as:
    - version property on LoadStruct was not used and not adviced to be used (to make sure you get published one)
    - languages casues a lot of SQL being generated

    It was decided / suggested to drop LoadStruct and rather do a bit dumber filtering which would allow storage engine to handle
    larger batches much better.

    Changes:

    * Deprecated LoadStruct;

    * Refactored eZ\Publish\SPI\Persistence\Content\Handler::loadContentList to use separate lists of Content Ids and translations (language codes) instead of deprecated LoadStruct;

    * Improved performance of eZ\Publish\Core\Persistence\Legacy\Content\Gateway::loadContentList on large list of Content Ids.
  • 4803c63e4ba85de8b369c0493c5339178082d718 on 29/08/2018 4:42 am by Mikolaj Adamczyk <mikadamczyk@gmail.com> [GitHub Diff]
    Message: EZP-29541: As a developer, I want a API to manage user preference (#2426)

    * EZP-29541: As a developer, I want a API to manage user preference

    * EZP-29541: As a developer, I want a API to manage user preference (SPI)

    * EZP-29541: As a developer, I want a API to manage user preference (integration tests)

    * EZP-29541: As a developer, I want a API to manage user preference (SPI impl.)

    * EZP-29541: As a developer, I want a API to manage user preference (SPI cache)

    * EZP-29541: As a developer, I want a API to manage user preference (API impl.)

    * EZP-29541: As a developer, I want a API to manage user preference (signal slot)

    * EZP-29541: As a developer, I want a API to manage user preference (REST)

    * EZP-29541: As a developer, I want a API to manage user preference (configuration)