def check_item(self, domain_class, status): roles = get_workspace_roles() + ROLES_DIRECTLY_DEFINED_ON_OBJECTS for role in roles: statuses = self.workspace_config.get_status(role, domain_class, self.__name__) if statuses and status in statuses: return True return False
def get_status(self, item_type): # !+ why does item_type not use the standard type_key name as everywhere else? type_key = item_type # !+ what is this method supposed to do? # !+ why does something named "get_status" return a (translated) dict? translated = dict() if not type_key: return translated # !+ why is item_type allowed to be / is the empty string? # !+ why was domain_model being INSTANTIATED IN A LOOP to just get the workflow for it ?!? ti = capi.get_type_info(type_key) workflow, domain_model = ti.workflow, ti.domain_model workspace_config = component.getUtility(IWorkspaceTabsUtility) roles = get_workspace_roles() + ROLES_DIRECTLY_DEFINED_ON_OBJECTS #domain_class = workspace_config.get_domain(item_type) results = set() for role in roles: status = workspace_config.get_status( role, domain_model, self.context.__name__) if status: for s in status: results.add(s) for result in results: #workflow = IWorkflow(domain_model()) status_title = translate( workflow.get_state(result).title, domain="bungeni", context=self.request) translated[result] = status_title return translated
def check_item(self, domain_class, status): roles = get_workspace_roles() + ROLES_DIRECTLY_DEFINED_ON_OBJECTS for role in roles: statuses = self.workspace_config.get_status( role, domain_class, self.__name__) if statuses and status in statuses: return True return False
def check_item(self, domain_class, status): principal = get_principal() roles = get_workspace_roles(principal) roles.extend(OBJECT_ROLES) for role in roles: statuses = self.workspace_config.get_status( role, domain_class, self.__name__) if statuses and status in statuses: return True return False
def check_item(self, domain_class, status): principal = get_principal() roles = get_workspace_roles(principal) roles.extend(OBJECT_ROLES) for role in roles: statuses = self.workspace_config.get_status( role, domain_class, self.__name__ ) if statuses and status in statuses: return True return False
def _query(self, **kw): principal = get_principal() roles = get_workspace_roles() group_roles_domain_status = self.item_status_filter(kw, roles) session = Session() results = [] count = 0 for domain_class, status in group_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status) ) if kw.get("filter_short_name", None): column = self.title_column(domain_class) query = query.filter( """(lower(%s) LIKE '%%%s%%')""" % (column, kw["filter_short_name"].lower()) ) # The first page of the results is loaded the most number of times # The limit on the query below optimises for when no filter has # been applied by limiting the number of results returned. if (not kw.get("start", 0) and not kw.get("sort_on", None)): count = count + query.count() query = query.order_by(domain_class.status_date).limit( kw.get("limit", 25)) results.extend(query.all()) object_roles_domain_status = self.item_status_filter(kw, OBJECT_ROLES) for domain_class, status in object_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)) if kw.get("filter_short_name", None): column = self.title_column(domain_class) query = query.filter( """(lower(%s) LIKE '%%%s%%')""" % (column, kw["filter_short_name"]) ) if (not kw.get("start", 0) and not kw.get("sort_on", None)): count = count + query.count() query = query.order_by(domain_class.status_date).limit( kw.get("limit", 25)) for obj in query.all(): prm = IPrincipalRoleMap(obj) for obj_role in OBJECT_ROLES: if (prm.getSetting(obj_role, principal.id) == Allow and obj not in results): results.append(obj) break # Sort items if (kw.get("sort_on", None) and kw.get("sort_dir", None)): rev = True if (kw.get("sort_dir") == "desc") else False results.sort(key=lambda x: getattr(x, str(kw.get("sort_on"))), reverse=rev) if (kw.get("start", 0) and kw.get("sort_on", None)): count = len(results) return (results, count)
def make_workspace_url(obj_id, type_name, status, context, chamber_id): if obj_id and type_name and status: domain_class = capi.get_type_info(type_name).domain_model if model_ifaces.IFeatureWorkspace.implementedBy(domain_class): ws_roles = common.get_workspace_roles() tabs_config = zope.component.getUtility(IWorkspaceTabsUtility) ti = capi.get_type_info(domain_class) tab = tabs_config.get_tab(ws_roles[0], domain_class, status) if tab: return "./my-documents/%s/%s-%s" % (tab, ti.workflow_key, obj_id)
def domain_status(self): domain_status_map = {} workspace_roles = set(get_workspace_roles()) for type_key, ti in capi.iter_type_info(): workflow = ti.workflow if (workflow and workflow.has_feature("workspace") and (not workspace_roles.isdisjoint(set(workflow.roles_used)))): states = workflow.get_state_ids( tagged=["public"], not_tagged=["terminal"], conjunction="AND") domain_status_map[ti.domain_model] = states return domain_status_map
def make_workspace_url(obj_id, type_name, status, context, chamber_id): if obj_id and type_name and status: domain_class = capi.get_type_info(type_name).domain_model if model_ifaces.IFeatureWorkspace.implementedBy(domain_class): ws_roles = common.get_workspace_roles() tabs_config = zope.component.getUtility(IWorkspaceTabsUtility) ti = capi.get_type_info(domain_class) tab = tabs_config.get_tab(ws_roles[0], domain_class, status) if tab: return "./my-documents/%s/%s-%s" %( tab, ti.workflow_key, obj_id )
def domain_status(self): domain_status_map = {} workspace_roles = set(get_workspace_roles()) for type_key, ti in capi.iter_type_info(): workflow = ti.workflow if (workflow and workflow.has_feature("workspace") and (not workspace_roles.isdisjoint(set(workflow.roles_used)))): states = workflow.get_state_ids(tagged=["public"], not_tagged=["terminal"], conjunction="AND") domain_status_map[ti.domain_model] = states return domain_status_map
def _query(self, **kw): principal = common.get_request_principal() roles = get_workspace_roles() group_roles_domain_status = self.item_status_filter(kw, roles) session = Session() results = [] count = 0 reverse = True if (kw.get("sort_dir", "desc") == "desc") else False for domain_class, status in group_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)).enable_eagerloads(False) #filter on title query = self.filter_title(query, domain_class, kw) #filter on status_date query = self.filter_status_date(query, domain_class, kw) # Order results query = self.order_query(query, domain_class, kw, reverse) results.extend(query.all()) for obj_role in ROLES_DIRECTLY_DEFINED_ON_OBJECTS: object_roles_domain_status = self.item_status_filter( kw, [obj_role]) for domain_class, status in object_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)).enable_eagerloads(False) #filter on title query = self.filter_title(query, domain_class, kw) #filter on status_date query = self.filter_status_date(query, domain_class, kw) # Order results query = self.order_query(query, domain_class, kw, reverse) for obj in query.all(): if obj in results: continue prm = IPrincipalRoleMap(obj) if (prm.getSetting(obj_role, principal.id) == Allow): results.append( contained(obj, self, self.string_key(obj))) results = [ item for item in results if checkPermission(view_permission(item), contained(item, self, self.string_key(item))) ] # Sort items if (kw.get("sort_on", None) and kw.get("sort_dir", None)): results.sort(key=lambda x: getattr(x, str(kw.get("sort_on"))), reverse=reverse) count = len(results) if not (kw.get("filter_title", None) or kw.get("filter_type", None) or kw.get("filter_status", None) or kw.get("filter_status_date", None)): self.set_tab_count(principal.id, count) return (results, count)
def _query(self, **kw): # !+REWORK **kw to be explicit keywords, see context.query() in ui/workspace.py session = Session() results = [] count = 0 reverse = True if (kw.get("sort_dir", "desc") == "desc") else False principal_id = common.get_request_principal().id def extend_results_for_roles(roles): domain_status = self.item_status_filter(kw, roles) OBJECT_ROLES = [ role for role in roles if role in ROLES_DIRECTLY_DEFINED_ON_OBJECTS ] for domain_class, status in domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)).enable_eagerloads(False) query = self.filter_group(query, domain_class, kw) query = self.filter_title(query, domain_class, kw) query = self.filter_status_date(query, domain_class, kw) query = self.order_query(query, domain_class, kw, reverse) for obj in query.all(): if obj in results: continue if OBJECT_ROLES: prm = IPrincipalRoleMap(obj) if not prm.getSetting(obj_role, principal_id) == Allow: continue results.append(contained(obj, self, self.string_key(obj))) # get results for roles extend_results_for_roles(get_workspace_roles()) for obj_role in ROLES_DIRECTLY_DEFINED_ON_OBJECTS: extend_results_for_roles([obj_role]) # filter results = [ item for item in results if checkPermission(view_permission(item), item) ] # sort items if (kw.get("sort_on", None) and kw.get("sort_dir", None)): results.sort(key=lambda x: getattr(x, str(kw.get("sort_on"))), reverse=reverse) count = len(results) if not (kw.get("filter_title", None) or kw.get("filter_type", None) or kw.get("filter_status", None) or kw.get("filter_status_date", None)): self.set_tab_count(principal_id, count) return (results, count)
def _query(self, **kw): principal = utils.get_principal() roles = get_workspace_roles() group_roles_domain_status = self.item_status_filter(kw, roles) session = Session() results = [] count = 0 reverse = True if (kw.get("sort_dir", "desc") == "desc") else False for domain_class, status in group_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)).enable_eagerloads(False) #filter on title query = self.filter_title(query, domain_class, kw) #filter on status_date query = self.filter_status_date(query, domain_class, kw) # Order results query = self.order_query(query, domain_class, kw, reverse) results.extend(query.all()) for obj_role in ROLES_DIRECTLY_DEFINED_ON_OBJECTS: object_roles_domain_status = self.item_status_filter( kw, [obj_role]) for domain_class, status in object_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)).enable_eagerloads(False) #filter on title query = self.filter_title(query, domain_class, kw) #filter on status_date query = self.filter_status_date(query, domain_class, kw) # Order results query = self.order_query(query, domain_class, kw, reverse) for obj in query.all(): if obj in results: continue prm = IPrincipalRoleMap(obj) if (prm.getSetting(obj_role, principal.id) == Allow): results.append( contained(obj, self, self.string_key(obj))) results = [item for item in results if checkPermission( view_permission(item), contained(item, self, self.string_key(item)))] # Sort items if (kw.get("sort_on", None) and kw.get("sort_dir", None)): results.sort(key=lambda x: getattr(x, str(kw.get("sort_on"))), reverse=reverse) count = len(results) if not (kw.get("filter_title", None) or kw.get("filter_type", None) or kw.get("filter_status", None) or kw.get("filter_status_date", None) ): self.set_tab_count(principal.id, count) return (results, count)
def _query(self, **kw): principal = get_principal() roles = get_workspace_roles() group_roles_domain_status = self.item_status_filter(kw, roles) session = Session() results = [] count = 0 first_page = not kw.get("start", 0) reverse = True if (kw.get("sort_dir", "desc") == "desc") else False for domain_class, status in group_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status) ) #filter on title query = self.filter_query(query, domain_class, kw) # Order results query = self.order_query(query, domain_class, kw, reverse) # The first page of the results is loaded the most number of times # The limit on the query below optimises for when no filter has # been applied by limiting the number of results returned. if first_page: count = count + query.count() query = query.limit(kw.get("limit", 25)) results.extend(query.all()) object_roles_domain_status = self.item_status_filter(kw, OBJECT_ROLES) for domain_class, status in object_roles_domain_status.iteritems(): object_roles_results = [] query = session.query(domain_class).filter( domain_class.status.in_(status) ) #filter on title query = self.filter_query(query, domain_class, kw) # Order results query = self.order_query(query, domain_class, kw, reverse) for obj in query.all(): prm = IPrincipalRoleMap(obj) for obj_role in OBJECT_ROLES: if (prm.getSetting(obj_role, principal.id) == Allow and obj not in results): object_roles_results.append(obj) break if first_page: count = count + len(object_roles_results) results.extend(object_roles_results) # Sort items if (kw.get("sort_on", None) and kw.get("sort_dir", None)): results.sort(key=lambda x: getattr(x, str(kw.get("sort_on"))), reverse=reverse) if not first_page: count = len(results) return (results, count)
def __str__(self): tabs_utility = getUtility(IWorkspaceTabsUtility) domain_class = self.context.__class__ status = self.context.status roles = get_workspace_roles() + ROLES_DIRECTLY_DEFINED_ON_OBJECTS tab = None for role in roles: tab = tabs_utility.get_tab(role, domain_class, status) if tab: base_url = ui_utils.url.absoluteURL(getSite(), self.request) key = workspace.WorkspaceBaseContainer.string_key(self.context) return '%s/workspace/my-documents/%s/%s' % (base_url, tab, key) else: return None
def __str__(self): tabs_utility = getUtility(IWorkspaceTabsUtility) domain_class = self.context.__class__ status = self.context.status roles = get_workspace_roles() tab = None for role in roles: tab = tabs_utility.get_tab(role, domain_class, status) if tab: base_url = ui_utils.url.absoluteURL(getSite(), self.request) key = workspace.stringKey(self.context) return '%s/workspace/documents/%s/%s' % (base_url, tab, key) else: return None
def _query(self, **kw): principal = get_principal() roles = get_workspace_roles() group_roles_domain_status = self.item_status_filter(kw, roles) session = Session() results = [] count = 0 for domain_class, status in group_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)) if kw.get("filter_short_name", None): column = self.title_column(domain_class) query = query.filter("""(lower(%s) LIKE '%%%s%%')""" % (column, kw["filter_short_name"].lower())) # The first page of the results is loaded the most number of times # The limit on the query below optimises for when no filter has # been applied by limiting the number of results returned. if (not kw.get("start", 0) and not kw.get("sort_on", None)): count = count + query.count() query = query.order_by(domain_class.status_date).limit( kw.get("limit", 25)) results.extend(query.all()) object_roles_domain_status = self.item_status_filter(kw, OBJECT_ROLES) for domain_class, status in object_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)) if kw.get("filter_short_name", None): column = self.title_column(domain_class) query = query.filter("""(lower(%s) LIKE '%%%s%%')""" % (column, kw["filter_short_name"])) if (not kw.get("start", 0) and not kw.get("sort_on", None)): count = count + query.count() query = query.order_by(domain_class.status_date).limit( kw.get("limit", 25)) for obj in query.all(): prm = IPrincipalRoleMap(obj) for obj_role in OBJECT_ROLES: if (prm.getSetting(obj_role, principal.id) == Allow and obj not in results): results.append(obj) break # Sort items if (kw.get("sort_on", None) and kw.get("sort_dir", None)): rev = True if (kw.get("sort_dir") == "desc") else False results.sort(key=lambda x: getattr(x, str(kw.get("sort_on"))), reverse=rev) if (kw.get("start", 0) and kw.get("sort_on", None)): count = len(results) return (results, count)
def get_search_doc_types(context): """get types searchable in a context""" types = [] if IWorkspaceSection.providedBy(context): ws_config = zope.component.getUtility(IWorkspaceTabsUtility) roles = get_workspace_roles() wf_types = set() for role in roles: types = [] wf_types.update(*[ wsp.keys() for wsp in ws_config.workspaces[role].values() ]) types = [ capi.get_type_info(typ) for typ in wf_types ] else: types = [ info for key, info in capi.iter_type_info() ] return types
def _query(self, **kw): # !+REWORK **kw to be explicit keywords, see context.query() in ui/workspace.py session = Session() results = [] count = 0 reverse = True if (kw.get("sort_dir", "desc") == "desc") else False principal_id = common.get_request_principal().id def extend_results_for_roles(roles): domain_status = self.item_status_filter(kw, roles) OBJECT_ROLES = [ role for role in roles if role in ROLES_DIRECTLY_DEFINED_ON_OBJECTS ] for domain_class, status in domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)).enable_eagerloads(False) query = self.filter_group(query, domain_class, kw) query = self.filter_title(query, domain_class, kw) query = self.filter_status_date(query, domain_class, kw) query = self.order_query(query, domain_class, kw, reverse) for obj in query.all(): if obj in results: continue if OBJECT_ROLES: prm = IPrincipalRoleMap(obj) if not prm.getSetting(obj_role, principal_id) == Allow: continue results.append(contained(obj, self, self.string_key(obj))) # get results for roles extend_results_for_roles(get_workspace_roles()) for obj_role in ROLES_DIRECTLY_DEFINED_ON_OBJECTS: extend_results_for_roles([obj_role]) # filter results = [ item for item in results if checkPermission(view_permission(item), item) ] # sort items if (kw.get("sort_on", None) and kw.get("sort_dir", None)): results.sort(key=lambda x: getattr(x, str(kw.get("sort_on"))), reverse=reverse) count = len(results) if not (kw.get("filter_title", None) or kw.get("filter_type", None) or kw.get("filter_status", None) or kw.get("filter_status_date", None) ): self.set_tab_count(principal_id, count) return (results, count)
def handle_search(self, action, data): self.show_results = True user_roles = ( common.get_request_context_roles(self.request) + common.get_workspace_roles() + ["bungeni.Anonymous"]) data["role"] = list(set(user_roles)) data["page"] = self.request.form.get("page", 1) self.search_results = execute_search(data, self.prefix, self.request, self.context) self.status = _("Searched for '${search_string}' and found ${count} " "items. Searched in ${search_types}.", mapping={ "search_string": data.get("search") or _("everything"), "count": self.search_results.get("total"), "search_types": get_search_types(data.get("type")), } )
def get_item_types(self): workspace_config = component.getUtility(IWorkspaceTabsUtility) roles = get_workspace_roles() + ROLES_DIRECTLY_DEFINED_ON_OBJECTS domains = [] for role in roles: dom = workspace_config.get_role_domains(role, self.context.__name__) if dom: for key in dom: if key not in domains: domains.append(key) result = dict([("", "-")]) for d in domains: value = workspace_config.get_type(d) if value: descriptor_model = utils.get_descriptor(d) name = descriptor_model.display_name if descriptor_model else value result[value] = translate(name, context=self.request) return result
def get_status(self, item_type): workspace_config = component.getUtility(IWorkspaceTabsUtility) roles = get_workspace_roles() + OBJECT_ROLES domain_class = workspace_config.get_domain(item_type) results = set() for role in roles: status = workspace_config.get_status(role, domain_class, self.context.__name__) if status: for s in status: results.add(s) translated = dict() for result in results: workflow = IWorkflow(domain_class()) status_title = translate(str(workflow.get_state(result).title), domain="bungeni", context=self.request) translated[result] = status_title return translated
def get_item_types(self): workspace_config = component.getUtility(IWorkspaceTabsUtility) roles = get_workspace_roles() + OBJECT_ROLES domains = [] for role in roles: dom = workspace_config.get_role_domains(role, self.context.__name__) if dom: for key in dom: if key not in domains: domains.append(key) result = dict([("", "-")]) for domain in domains: value = workspace_config.get_type(domain) if value: descriptor = queryModelDescriptor(domain) name = descriptor.display_name if descriptor else value result[value] = translate(name, context=self.request) return result
def _query(self, **kw): principal = get_principal() roles = get_workspace_roles(principal) group_roles_domain_status = self.item_status_filter(kw, roles) session = Session() results = [] for domain_class, status in group_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status) ) if kw.get("filter_short_name", None): column = self.title_column(domain_class) query = query.filter( """(lower(%s) LIKE '%%%s%%')""" % (column, kw["filter_short_name"].lower()) ) results.extend(query.all()) object_roles_domain_status = self.item_status_filter(kw, OBJECT_ROLES) for domain_class, status in object_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)) if kw.get("filter_short_name", None): column = self.title_column(domain_class) query = query.filter( """(lower(%s) LIKE '%%%s%%')""" % (column, kw["filter_short_name"]) ) for obj in query.all(): prm = IPrincipalRoleMap(obj) for obj_role in OBJECT_ROLES: if (prm.getSetting(obj_role, principal.id) == Allow and obj not in results ): results.append(obj) break # Sort items if kw.get("sort_on", None): if kw.get("sort_dir", None): rev = True if (kw.get("sort_dir") == "desc") else False results.sort(key=lambda x: getattr(x, str(kw.get("sort_on"))), reverse=rev) return results
def get_item_types(self): workspace_config = component.getUtility(IWorkspaceTabsUtility) roles = get_workspace_roles() + OBJECT_ROLES domains = [] for role in roles: dom = workspace_config.get_role_domains( role, self.context.__name__ ) if dom: for key in dom: if key not in domains: domains.append(key) result = dict([("", "-")]) for domain in domains: value = workspace_config.get_type(domain) if value: descriptor = queryModelDescriptor(domain) name = descriptor.display_name if descriptor else value result[value] = translate(name, context=self.request) return result
def get_status(self, type_key): translated = dict() if not type_key: return translated ti = capi.get_type_info(type_key) workflow, domain_model = ti.workflow, ti.domain_model workspace_config = component.getUtility(IWorkspaceTabsUtility) roles = get_workspace_roles() + ROLES_DIRECTLY_DEFINED_ON_OBJECTS results = set() for role in roles: status = workspace_config.get_status(role, domain_model, self.context.__name__) if status: for s in status: results.add(s) for result in results: status_title = translate(workflow.get_state(result).title, domain="bungeni", context=self.request) translated[result] = status_title return translated
def get_status(self, item_type): workspace_config = component.getUtility(IWorkspaceTabsUtility) roles = get_workspace_roles() + OBJECT_ROLES domain_class = workspace_config.get_domain(item_type) results = set() for role in roles: status = workspace_config.get_status( role, domain_class, self.context.__name__) if status: for s in status: results.add(s) translated = dict() for result in results: workflow = IWorkflow(domain_class()) status_title = translate( str(workflow.get_state(result).title), domain="bungeni", context=self.request ) translated[result] = status_title return translated
def get_status(self, type_key): translated = dict() if not type_key: return translated ti = capi.get_type_info(type_key) workflow, domain_model = ti.workflow, ti.domain_model workspace_config = component.getUtility(IWorkspaceTabsUtility) roles = get_workspace_roles() + ROLES_DIRECTLY_DEFINED_ON_OBJECTS results = set() for role in roles: status = workspace_config.get_status( role, domain_model, self.context.__name__) if status: for s in status: results.add(s) for result in results: status_title = translate( workflow.get_state(result).title, domain="bungeni", context=self.request) translated[result] = status_title return translated
def _query( self ): principal = get_principal() roles = get_workspace_roles(principal) workspace_tabs = component.getUtility(IWorkspaceTabsUtility) domain_status = {} for role in roles: dom_stat = workspace_tabs.getDomainAndStatuses(role, self.__name__) if dom_stat: for key in dom_stat.keys(): if key in domain_status.keys(): domain_status[key].extend(dom_stat[key]) else: domain_status[key] = dom_stat[key] session = Session() results = [] for domain_class in domain_status.keys(): query = session.query(domain_class).filter( domain_class.status.in_(domain_status[domain_class])) results.extend(query.all()) results.sort(key = lambda x: x.status_date, reverse=True) for result in results: yield result
def _query(self): principal = get_principal() roles = get_workspace_roles(principal) workspace_tabs = component.getUtility(IWorkspaceTabsUtility) domain_status = {} for role in roles: dom_stat = workspace_tabs.getDomainAndStatuses(role, self.__name__) if dom_stat: for key in dom_stat.keys(): if key in domain_status.keys(): domain_status[key].extend(dom_stat[key]) else: domain_status[key] = dom_stat[key] session = Session() results = [] for domain_class in domain_status.keys(): query = session.query(domain_class).filter( domain_class.status.in_(domain_status[domain_class])) results.extend(query.all()) results.sort(key=lambda x: x.status_date, reverse=True) for result in results: yield result
def _query(self, **kw): principal = get_principal() roles = get_workspace_roles(principal) group_roles_domain_status = self.item_status_filter(kw, roles) session = Session() results = [] for domain_class, status in group_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)) if kw.get("filter_short_name", None): column = self.title_column(domain_class) query = query.filter("""(lower(%s) LIKE '%%%s%%')""" % (column, kw["filter_short_name"].lower())) results.extend(query.all()) object_roles_domain_status = self.item_status_filter(kw, OBJECT_ROLES) for domain_class, status in object_roles_domain_status.iteritems(): query = session.query(domain_class).filter( domain_class.status.in_(status)) if kw.get("filter_short_name", None): column = self.title_column(domain_class) query = query.filter("""(lower(%s) LIKE '%%%s%%')""" % (column, kw["filter_short_name"])) for obj in query.all(): prm = IPrincipalRoleMap(obj) for obj_role in OBJECT_ROLES: if (prm.getSetting(obj_role, principal.id) == Allow and obj not in results): results.append(obj) break # Sort items if kw.get("sort_on", None): if kw.get("sort_dir", None): rev = True if (kw.get("sort_dir") == "desc") else False results.sort(key=lambda x: getattr(x, str(kw.get("sort_on"))), reverse=rev) return results