Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
 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
Esempio n. 5
0
 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
Esempio n. 6
0
 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)
Esempio n. 7
0
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)
Esempio n. 8
0
 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
Esempio n. 9
0
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
                )
Esempio n. 10
0
 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
Esempio n. 11
0
 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)
Esempio n. 12
0
    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)
Esempio n. 13
0
 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)
Esempio n. 14
0
 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)
Esempio n. 15
0
 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
Esempio n. 16
0
 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
Esempio n. 17
0
 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
Esempio n. 18
0
 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)
Esempio n. 19
0
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
Esempio n. 20
0
 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)
Esempio n. 21
0
 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")),
         }
     )
Esempio n. 22
0
 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
Esempio n. 23
0
 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
Esempio n. 24
0
 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
Esempio n. 25
0
 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
Esempio n. 26
0
 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
Esempio n. 27
0
 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
Esempio n. 28
0
 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
Esempio n. 29
0
 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
Esempio n. 30
0
 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
Esempio n. 31
0
 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
Esempio n. 32
0
 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
Esempio n. 33
0
 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