|
2 | 2 |
|
3 | 3 | from __future__ import annotations |
4 | 4 |
|
| 5 | +from plone.contentrules.engine.interfaces import IRuleStorage |
5 | 6 | from plone.restapi.controlpanels import RegistryConfigletPanel |
6 | 7 | from plone.restapi.controlpanels.interfaces import IContentRulesControlpanel |
7 | 8 | from plone.restapi.deserializer import json_body |
|
15 | 16 | from zExceptions import NotFound |
16 | 17 | from zope.component import adapter |
17 | 18 | from zope.component import queryMultiAdapter |
| 19 | +from zope.component import queryUtility |
18 | 20 | from zope.interface import alsoProvides |
19 | 21 | from zope.interface import implementer |
20 | 22 | from zope.interface import Interface |
@@ -342,3 +344,15 @@ def _delete_rule(self, rule_id: str) -> None: |
342 | 344 | # calls authorize directly, so we need to override that here |
343 | 345 | cpanel.authorize = lambda: True |
344 | 346 | cpanel.delete_rule() |
| 347 | + |
| 348 | + |
| 349 | +@adapter(Interface, IControlpanelLayer) |
| 350 | +@implementer(IContentRulesControlpanel) |
| 351 | +def content_rules_controlpanel(context, request): |
| 352 | + """Return the content rules control panel, or None when content rules |
| 353 | + are not activated (no storage or no add-on browser layer).""" |
| 354 | + if queryUtility(IRuleStorage) is None: |
| 355 | + return None |
| 356 | + if queryMultiAdapter((context, request), name="rules-controlpanel") is None: |
| 357 | + return None |
| 358 | + return ContentRulesControlpanel(context, request) |
0 commit comments