[TASK] Deprecate ContentObjectRenderer->calcIntExplode()
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Documentation / Changelog / 9.3 / Feature-84244-AllowAddingAdditionalQueryrestrictions.rst
1 .. include:: ../../Includes.txt
2
3 ============================================================
4 Feature: #84244 - Allow adding additional query restrictions
5 ============================================================
6
7 See :issue:`84244`
8
9 Description
10 ===========
11
12 It is now possible to add additional query restrictions by adding class names as key to
13 :php:`$GLOBALS['TYPO3_CONF_VARS']['DB']['additionalQueryRestrictions']`
14 These restriction objects will be added to any select query executed using the QueryBuilder.
15
16 If these added restriction objects additionally implement :php:`\TYPO3\CMS\Core\Database\Query\Restriction\EnforceableQueryRestrictionInterface`
17 and return true in the to be implemented method :php:`isEnforced()`, calling :php:`$queryBuilder->getRestrictions()->removeAll()`
18 such restrictions will **still** be applied to the query.
19
20 If an enforced restriction must be removed, it can still be removed with :php:`$queryBuilder->->getRestrictions()->removeByType(SomeClass::class);`
21
22 Implementers of custom restrictions can therefore have their restrictions always enforced, or even not applied at all,
23 by returning an empty expression in certain cases.
24
25 To add a custom restriction class, use the following snippet in a :file:`ext_localconf.php` file of your extension:
26
27 .. code-block:: php
28
29     if (!isset($GLOBALS['TYPO3_CONF_VARS']['DB']['additionalQueryRestrictions'][\Vendor\ExtName\Database\Query\Restriction\CustomRestriction::class])) {
30         $GLOBALS['TYPO3_CONF_VARS']['DB']['additionalQueryRestrictions'][\Vendor\ExtName\Database\Query\Restriction\CustomRestriction::class] = [];
31     }
32
33 Please note, that the class name must be the array key and the value must always be an array, which is reserved for options
34 given to the restriction objects.
35
36 Impact
37 ======
38
39 Restrictions added by third party extensions will impact the whole system. Therefore this API does not allow removing restrictions
40 added by the system and adding restrictions should be handled with care.
41
42 Removing third party restrictions is possible, by setting the option value :php:`disabled` for a restriction to :php:`true`
43 in global TYPO3 configuration or :php:`ext_localconf.php` of an extension, like shown below.
44
45 .. code-block:: php
46
47     $GLOBALS['TYPO3_CONF_VARS']['DB']['additionalQueryRestrictions'][\Vendor\ExtName\Database\Query\Restriction\CustomRestriction::class]['disabled'] = true;
48
49 .. index:: Backend, Database, Frontend, ext:core