Skip to content

Commit e172e5f

Browse files
committed
Compatibility with core#2835
1 parent 009f854 commit e172e5f

4 files changed

Lines changed: 52 additions & 16 deletions

File tree

src/senaite/storage/profiles/default/metadata.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
dependencies before installing this add-on own profile.
77
-->
88
<metadata>
9-
<version>2704</version>
9+
<version>2705</version>
1010
<!-- Be sure to install the following dependencies if not yet installed -->
1111
<dependencies>
1212
<dependency>profile-senaite.lims:default</dependency>

src/senaite/storage/setuphandlers.py

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020

2121
from Acquisition import aq_base
2222
from bika.lims import api
23-
from plone import api as ploneapi
24-
from plone.app.dexterity.behaviors.exclfromnav import IExcludeFromNavigation
23+
from plone.registry.interfaces import IRegistry
2524
from Products.CMFCore.permissions import ModifyPortalContent
2625
from Products.DCWorkflow.Guard import Guard
2726
from senaite.core import permissions
@@ -35,7 +34,7 @@
3534
from senaite.storage.catalog import StorageCatalog
3635
from senaite.storage.config import PRODUCT_NAME
3736
from senaite.storage.config import PROFILE_ID
38-
37+
from zope.component import getUtility
3938

4039
SITE_STRUCTURE = [
4140
# Tuples of (portal_type, obj_id, obj_title, parent_path, display_type)
@@ -429,20 +428,35 @@ def resolve_parent(parent_path):
429428

430429

431430
def display_in_nav(obj):
432-
"""Makes an object to be displayed in the navigation bar
431+
"""Makes an object and/or objects from the given portal type to be
432+
displayed in the navigation bar
433433
"""
434-
# Display in navigation
435-
registry_id = "plone.displayed_types"
436434
portal_type = api.get_portal_type(obj)
437-
to_display = ploneapi.portal.get_registry_record(registry_id, default=())
438-
if portal_type not in to_display:
439-
to_display = to_display + (portal_type, )
440-
ploneapi.portal.set_registry_record(registry_id, to_display)
441-
442-
nav_exclude = IExcludeFromNavigation(obj, None)
443-
if nav_exclude:
444-
nav_exclude.exclude_from_nav = False
445-
obj.reindexObject(idxs=["exclude_from_nav"])
435+
436+
# add to the plone's registry displayed_types
437+
registry = getUtility(IRegistry)
438+
key = "plone.displayed_types"
439+
displayed = registry.get(key, ())
440+
if portal_type not in displayed:
441+
displayed += (portal_type,)
442+
registry[key] = displayed
443+
444+
# add to senaite setup's sidebar_displayed_types
445+
setup = api.get_senaite_setup()
446+
displayed = setup.getSidebarDisplayedTypes()
447+
if displayed and portal_type not in displayed:
448+
displayed += (portal_type,)
449+
setup.setSidebarDisplayedTypes(displayed)
450+
451+
# if a root folder, add to senaite setup's sidebar_folders
452+
setup = api.get_senaite_setup()
453+
portal = api.get_portal()
454+
if api.get_parent(obj) == portal:
455+
obj_id = api.get_id(obj)
456+
folders = setup.getSidebarFolders()
457+
if obj_id not in folders:
458+
folders += (obj_id, )
459+
setup.setSidebarFolders(folders)
446460

447461

448462
def reindex_storage_structure(portal):

src/senaite/storage/upgrade/v02_07_000.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from senaite.storage import PRODUCT_NAME
3030
from senaite.storage import logger
3131
from senaite.storage.catalog import STORAGE_CATALOG
32+
from senaite.storage.setuphandlers import display_in_nav
3233
from zope.component import getMultiAdapter
3334

3435
version = "2.7.0"
@@ -415,3 +416,12 @@ def migrate_storage_root_folder_to_dx(tool):
415416
migrator.copy_id(src, target)
416417

417418
logger.info("Convert Storage Root Folder to Dexterity [DONE]")
419+
420+
421+
def display_storage_navbar(tool):
422+
"""Displays the storage's root folder in the navigation bar
423+
"""
424+
logger.info("Display storage in navigation bar ...")
425+
portal = api.get_portal()
426+
display_in_nav(portal.senaite_storage)
427+
logger.info("Display storage in navigation bar [DONE]")

src/senaite/storage/upgrade/v02_07_000.zcml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22
xmlns="http://namespaces.zope.org/zope"
33
xmlns:genericsetup="http://namespaces.zope.org/genericsetup">
44

5+
<genericsetup:upgradeStep
6+
title="Display Storage in navigation bar"
7+
description="
8+
This upgrade step makes the product compatible with senaite.core#2835
9+
by adding the Storage folder to the setup field “Sidebar displayed
10+
portal types”, thereby displaying the Storage link in the left-hand
11+
navigation bar."
12+
source="2704"
13+
destination="2705"
14+
handler=".v02_07_000.display_storage_navbar"
15+
profile="senaite.storage:default"/>
16+
517
<genericsetup:upgradeStep
618
title="SENAITE.STORAGE 2.7.0: Migrate Storage Root Folder to DX"
719
description="Migrate the Storage Root Folder to Dexterity"

0 commit comments

Comments
 (0)