|
1
|
|
|
# -*- coding: utf-8 -*- |
|
2
|
|
|
|
|
3
|
|
|
from bika.lims import api |
|
4
|
|
|
from senaite.core.api import label as label_api |
|
5
|
|
|
from senaite.core.registry import get_registry_record |
|
6
|
|
|
|
|
7
|
|
|
labels_initialized = False |
|
8
|
|
|
|
|
9
|
|
|
|
|
10
|
|
|
def update_label_types(object, event): |
|
11
|
|
|
"""Update label enabled types |
|
12
|
|
|
|
|
13
|
|
|
NOTE: The settings are thread local! |
|
14
|
|
|
|
|
15
|
|
|
This means that in multi client environments the settings are not reflected |
|
16
|
|
|
in the other instances. |
|
17
|
|
|
|
|
18
|
|
|
A restart of these instances is required, so that the `init_labels` handler |
|
19
|
|
|
below marks the classes appropriately. |
|
20
|
|
|
""" |
|
21
|
|
|
# get the types that support labels directly |
|
22
|
|
|
enabled_types = object.label_enabled_portal_types |
|
23
|
|
|
plone_utils = api.get_tool("plone_utils") |
|
24
|
|
|
friendly_types = plone_utils.getUserFriendlyTypes() |
|
25
|
|
|
for portal_type in friendly_types: |
|
26
|
|
|
if portal_type not in enabled_types: |
|
27
|
|
|
label_api.disable_labels_for_type(portal_type) |
|
28
|
|
|
else: |
|
29
|
|
|
label_api.enable_labels_for_type(portal_type) |
|
30
|
|
|
|
|
31
|
|
|
|
|
32
|
|
|
def init_labels(site, event): |
|
33
|
|
|
"""Initialize labels for enabled portal types after startup |
|
34
|
|
|
|
|
35
|
|
|
This is a multi-subscriber to `zope.component.interfaces.ISite` and |
|
36
|
|
|
`zope.traversing.interfaces.BeforeTraverseEvent`. |
|
37
|
|
|
|
|
38
|
|
|
This is required because the Zope Component Architecture (Site Manager) is |
|
39
|
|
|
set for each request and is required here to lookup the registry settings. |
|
40
|
|
|
|
|
41
|
|
|
Also see `zope.site.site.threadSiteSubscriber`. |
|
42
|
|
|
|
|
43
|
|
|
We use a global variable to ensure it is only run once per instance. |
|
44
|
|
|
""" |
|
45
|
|
|
global labels_initialized |
|
46
|
|
|
if labels_initialized: |
|
47
|
|
|
return |
|
48
|
|
|
enabled_types = get_registry_record("label_enabled_portal_types") |
|
49
|
|
|
if not enabled_types: |
|
50
|
|
|
labels_initialized = True |
|
51
|
|
|
return |
|
52
|
|
|
for portal_type in enabled_types: |
|
53
|
|
|
label_api.enable_labels_for_type(portal_type) |
|
54
|
|
|
labels_initialized = True |
|
55
|
|
|
|