Skip to content

Commit

Permalink
Retire the ZMI find screens.
Browse files Browse the repository at this point in the history
  • Loading branch information
hannosch committed Aug 14, 2016
1 parent c8e4cd5 commit 4c66881
Show file tree
Hide file tree
Showing 11 changed files with 78 additions and 682 deletions.
2 changes: 2 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ Features Added
Restructuring
+++++++++++++

- Simplify ZMI control panel and globally available management screens.

- Move ZServer related testing support into ZServer.Testing.

- Split out Lifetime, webdav and ZServer packages into a ZServer project.
Expand Down
3 changes: 1 addition & 2 deletions src/OFS/Application.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@

import Folder
import misc_
from FindSupport import FindSupport
from interfaces import IApplication
from misc_ import Misc_

Expand All @@ -51,7 +50,7 @@
APP_MANAGER = None


class Application(ApplicationDefaultPermissions, Folder.Folder, FindSupport):
class Application(ApplicationDefaultPermissions, Folder.Folder):
"""Top-level system object"""

implements(IApplication)
Expand Down
143 changes: 58 additions & 85 deletions src/OFS/FindSupport.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@
from AccessControl.class_init import InitializeClass
from AccessControl.Permission import name_trans
from AccessControl.Permissions import view_management_screens
from Acquisition import aq_base
from App.special_dtml import DTMLFile
from Acquisition import aq_base, aq_parent
from DateTime.DateTime import DateTime
from DocumentTemplate.DT_Util import Eval
from DocumentTemplate.DT_Util import InstanceDict
Expand All @@ -33,33 +32,12 @@


class FindSupport(Base):

"""Find support for Zope Folders"""

implements(IFindSupport)

security = ClassSecurityInfo()

#findframe is deprecated
security.declareProtected(view_management_screens, 'manage_findFrame')
manage_findFrame=DTMLFile('dtml/findFrame', globals())

security.declareProtected(view_management_screens, 'manage_findForm')
manage_findForm=DTMLFile('dtml/findForm', globals(),
management_view='Find')

security.declareProtected(view_management_screens, 'manage_findAdv')
manage_findAdv=DTMLFile('dtml/findAdv', globals(),
management_view='Find')

security.declareProtected(view_management_screens, 'manage_findResult')
manage_findResult=DTMLFile('dtml/findResult', globals(),
management_view='Find')

manage_options=(
{'label':'Find', 'action':'manage_findForm'},
)

security.declareProtected(view_management_screens, 'ZopeFind')
def ZopeFind(self, obj, obj_ids=None, obj_metatypes=None,
obj_searchterm=None, obj_expr=None,
Expand All @@ -68,15 +46,13 @@ def ZopeFind(self, obj, obj_ids=None, obj_metatypes=None,
search_sub=0,
REQUEST=None, result=None, pre=''):
"""Zope Find interface"""
return self.ZopeFindAndApply(obj, obj_ids=obj_ids,
obj_metatypes=obj_metatypes, obj_searchterm=obj_searchterm,
obj_expr=obj_expr, obj_mtime=obj_mtime, obj_mspec=obj_mspec,
obj_permission=obj_permission, obj_roles=obj_roles,
search_sub=search_sub, REQUEST=REQUEST, result=result,
pre=pre, apply_func=None, apply_path='')

security.declareProtected(view_management_screens, 'PrincipiaFind')
PrincipiaFind=ZopeFind
return self.ZopeFindAndApply(
obj, obj_ids=obj_ids,
obj_metatypes=obj_metatypes, obj_searchterm=obj_searchterm,
obj_expr=obj_expr, obj_mtime=obj_mtime, obj_mspec=obj_mspec,
obj_permission=obj_permission, obj_roles=obj_roles,
search_sub=search_sub, REQUEST=REQUEST, result=result,
pre=pre, apply_func=None, apply_path='')

security.declareProtected(view_management_screens, 'ZopeFindAndApply')
def ZopeFindAndApply(self, obj, obj_ids=None, obj_metatypes=None,
Expand All @@ -89,72 +65,69 @@ def ZopeFindAndApply(self, obj, obj_ids=None, obj_metatypes=None,
"""Zope Find interface and apply"""

if result is None:
result=[]
result = []

if obj_metatypes and 'all' in obj_metatypes:
obj_metatypes=None
obj_metatypes = None

if obj_mtime and type(obj_mtime)==type('s'):
obj_mtime=DateTime(obj_mtime).timeTime()
if obj_mtime and isinstance(obj_mtime, str):
obj_mtime = DateTime(obj_mtime).timeTime()

if obj_permission:
obj_permission=p_name(obj_permission)
obj_permission = p_name(obj_permission)

if obj_roles and type(obj_roles) is type('s'):
obj_roles=[obj_roles]
if obj_roles and isinstance(obj_roles, str):
obj_roles = [obj_roles]

if obj_expr:
# Setup expr machinations
md=td()
obj_expr=(Eval(obj_expr), md, md._push, md._pop)
md = td()
obj_expr = (Eval(obj_expr), md, md._push, md._pop)

base = aq_base(obj)

if not hasattr(base, 'objectItems'):
return result
try: items=obj.objectItems()
except: return result
try:
items = obj.objectItems()
except Exception:
return result

try: add_result=result.append
except:
raise AttributeError, `result`
try:
add_result = result.append
except Exception:
raise AttributeError(repr(result))

for id, ob in items:
if pre: p="%s/%s" % (pre, id)
else: p=id
if pre:
p = "%s/%s" % (pre, id)
else:
p = id

dflag=0
if hasattr(ob, '_p_changed') and (ob._p_changed == None):
dflag=1
dflag = 0
if hasattr(ob, '_p_changed') and (ob._p_changed is None):
dflag = 1

bs = aq_base(ob)
if (
(not obj_ids or absattr(bs.getId()) in obj_ids)
and
if ((not obj_ids or absattr(bs.getId()) in obj_ids) and
(not obj_metatypes or (hasattr(bs, 'meta_type') and
bs.meta_type in obj_metatypes))
and
bs.meta_type in obj_metatypes)) and
(not obj_searchterm or
(hasattr(ob, 'PrincipiaSearchSource') and
obj_searchterm in ob.PrincipiaSearchSource())
or
obj_searchterm in ob.PrincipiaSearchSource()) or
(hasattr(ob, 'SearchableText') and
obj_searchterm in ob.SearchableText())
)
and
(not obj_expr or expr_match(ob, obj_expr))
and
(not obj_mtime or mtime_match(ob, obj_mtime, obj_mspec))
and
( (not obj_permission or not obj_roles) or \
role_match(ob, obj_permission, obj_roles)
)
):
) and
(not obj_expr or expr_match(ob, obj_expr)) and
(not obj_mtime or mtime_match(ob, obj_mtime, obj_mspec)) and
((not obj_permission or not obj_roles) or
role_match(ob, obj_permission, obj_roles))):

if apply_func:
apply_func(ob, (apply_path+'/'+p))
apply_func(ob, (apply_path + '/' + p))
else:
add_result((p, ob))
dflag=0
dflag = 0

if search_sub and hasattr(bs, 'objectItems'):
self.ZopeFindAndApply(ob, obj_ids, obj_metatypes,
Expand All @@ -164,7 +137,8 @@ def ZopeFindAndApply(self, obj, obj_ids=None, obj_metatypes=None,
search_sub,
REQUEST, result, p,
apply_func, apply_path)
if dflag: ob._p_deactivate()
if dflag:
ob._p_deactivate()

return result

Expand All @@ -176,32 +150,32 @@ class td(RestrictedDTML, TemplateDict):


def expr_match(ob, ed, c=InstanceDict, r=0):
e, md, push, pop=ed
e, md, push, pop = ed
push(c(ob, md))
try: r=e.eval(md)
try:
r = e.eval(md)
finally:
pop()
return r



def mtime_match(ob, t, q, fn=hasattr):
if not fn(ob, '_p_mtime'):
return 0
return q=='<' and (ob._p_mtime < t) or (ob._p_mtime > t)
return q == '<' and (ob._p_mtime < t) or (ob._p_mtime > t)


def role_match(ob, permission, roles, lt=type([]), tt=type(())):
pr=[]
fn=pr.append
pr = []
fn = pr.append

while 1:
if hasattr(ob, permission):
p=getattr(ob, permission)
p = getattr(ob, permission)
if type(p) is lt:
map(fn, p)
if hasattr(ob, 'aq_parent'):
ob=ob.aq_parent
if hasattr(ob, '__parent__'):
ob = aq_parent(ob)
continue
break
if type(p) is tt:
Expand All @@ -211,8 +185,8 @@ def role_match(ob, permission, roles, lt=type([]), tt=type(())):
map(fn, ('Manager', 'Anonymous'))
break

if hasattr(ob, 'aq_parent'):
ob=ob.aq_parent
if hasattr(ob, '__parent__'):
ob = aq_parent(ob)
continue
break

Expand All @@ -222,10 +196,9 @@ def role_match(ob, permission, roles, lt=type([]), tt=type(())):
return 1


# Helper functions

def absattr(attr):
if callable(attr): return attr()
if callable(attr):
return attr()
return attr


Expand Down
24 changes: 10 additions & 14 deletions src/OFS/Folder.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
from zope.interface import implements

from OFS import bbb
from OFS.FindSupport import FindSupport
from OFS.interfaces import IFolder
from OFS.Lockable import LockableItem
from OFS.ObjectManager import ObjectManager
Expand Down Expand Up @@ -52,14 +51,12 @@ def manage_addFolder(self, id, title='',


class Folder(
ObjectManager,
PropertyManager,
RoleManager,
Collection,
LockableItem,
Item,
FindSupport,
):
ObjectManager,
PropertyManager,
RoleManager,
Collection,
LockableItem,
Item):

"""Folders are basic container objects that provide a standard
interface for object management. Folder objects also implement
Expand All @@ -71,16 +68,15 @@ class Folder(

_properties=({'id':'title', 'type': 'string','mode':'wd'},)

manage_options=(
manage_options = (
ObjectManager.manage_options +
({'label': 'View', 'action': ''}, ) +
PropertyManager.manage_options +
RoleManager.manage_options +
Item.manage_options +
FindSupport.manage_options
)
Item.manage_options
)

__ac_permissions__=()
__ac_permissions__ = ()

def __init__(self, id=None):
if id is not None:
Expand Down
Loading

0 comments on commit 4c66881

Please sign in to comment.