Example #1
0
def get_destination_url_path(request=None):
    """Get the (effective, sans any "traversal namespace notation" components
    and other such "traversal processing instruction" url components) target 
    URL path of the (current) request.
    """
    if request is None:
        request = common.get_request()
    #_url = request.URL
    #_url = request.getURL(level=0, path_only=True)
    # NOTE: both URL and getURL() depend on where we are in the traversal
    # process i.e. they return the *currently* traversed URL path and not
    # the full requested path.
    #
    # So, we use the request's PATH_INFO but as this may contain:
    # - (++) any number of Zope "traversal namespace notation" url components
    # - (@@/) to indicate that the URL is for an object that is a resource
    # - (@@)) to indicate a view name
    # we need to get rid of them:
    _url = "/".join([
        url_component for url_component in request.get("PATH_INFO").split("/")
        if not url_component.startswith("++")
        and not url_component.startswith("@@")
    ])
    log.debug(" [get_destination_url_path] %s " % _url)
    return _url
def get_request_language():
    request = common.get_request()
    if IHTTPRequest.providedBy(request):
        lang = request.locale.getLocaleID()
    else:
        lang = capi.default_language
    return lang
Example #3
0
 def as_json(self):
     date_formatter = date.getLocaleFormatter(common.get_request(), "date",
         "medium"
     )
     items_json = dict(
         items = [
             dict(
                 item_type = self.item_type,
                 item_id = orm.object_mapper(item).primary_key_from_instance(
                     item
                 )[0],
                 item_title = IDCDescriptiveProperties(item).title,
                 status = IWorkflow(item).get_state(item.status).title,
                 status_date = ( date_formatter.format(item.submission_date) 
                     if hasattr(item, "submission_date") else None
                 ),
                 registry_number = ( item.registry_number if
                     hasattr(item, "registry_number") else None
                 ),
                 item_mover = ( IDCDescriptiveProperties(item.owner).title if
                     hasattr(item, "owner") else None
                 ),
                 item_uri = IDCDescriptiveProperties(item).uri
             )
             for item in self.query()
         ]
     )
     return json.dumps(items_json)
Example #4
0
 def getter(item, formatter):
     value = getattr(item, name)
     if value:
         request = common.get_request()
         date_formatter = date.getLocaleFormatter(request, category, length)
         return date_formatter.format(value)
     return ""
Example #5
0
def get_user_context_roles():
    """Get the list of user's roles (including whether admin or not)--this 
    is the info needed (in addition to the field's modes) to further 
    filter whether a field is visible or not for a given (user, mode).
    
    Wraps common.get_context_roles(context), with the following differcnes: 
    - auto retrieves the context, needed param by common.get_context_roles()
    - handles case when user is not authenticated
    - handles case for when user is "admin"
    """
    request = common.get_request()
    if request is None:
        context = None
        principal = None
    else:
        context = common.get_traversed_context(request)
        principal = request.principal
    if IUnauthenticatedPrincipal.providedBy(principal):
        roles = ["bungeni.Anonymous"]
    else: 
        roles = common.get_context_roles(context)
        if common.is_admin(context):
            roles.append("bungeni.Admin")
    log.debug(""" [get_user_context_roles]
    PRINCIPAL: %s
    CONTEXT: %s
    ROLES: %s
    """ % (principal, context, roles))
    return roles
Example #6
0
 def getter(item, formatter):
     value = getattr(item, name)
     if value:
         request = common.get_request()
         date_formatter = date.getLocaleFormatter(request, category, length)
         return date_formatter.format(value)
     return ""
Example #7
0
 def as_json(self):
     date_formatter = date.getLocaleFormatter(common.get_request(), "date",
         "medium"
     )
     items = [
         dict(
             item_type = self.item_type,
             item_id = orm.object_mapper(item).primary_key_from_instance(
                 item
             )[0],
             item_title = IDCDescriptiveProperties(item).title,
             status = IWorkflow(item).get_state(item.status).title,
             status_date = ( date_formatter.format(item.submission_date) 
                 if (hasattr(item, "submission_date") and 
                     getattr(item, "submission_date")
                 )
                 else None
             ),
             registry_number = ( item.registry_number if
                 hasattr(item, "registry_number") else None
             ),
             item_mover = ( IDCDescriptiveProperties(item.owner).title if
                 hasattr(item, "owner") else None
             ),
             item_uri = "%s-%d" % (self.item_type,
                 orm.object_mapper(item).primary_key_from_instance(item)[0]
             )
         )
         for item in self.query()
     ]
     items = sorted(items, key=lambda item:item.get("status_date"),
         reverse=True
     )
     return json.dumps(dict(items=items))
Example #8
0
def get_request_language():
    request = common.get_request()
    if IHTTPRequest.providedBy(request):
        lang = request.locale.getLocaleID()
    else:
        lang = capi.default_language
    return lang
Example #9
0
 def test_context_roles(self, mode):
     """EXPERIMENTAL sample code to get a user's roles and whether is_admin 
     or not -- this is the info needed (in addition to the field's modes) 
     to further filter whether a field is visible or not for a 
     given (user, mode).
     """
     request = common.get_request()
     if request is None:
         context = None
         principal = None
     else:
         context = common.get_traversed_context(request)
         principal = request.principal
     if IUnauthenticatedPrincipal.providedBy(principal):
         roles = None
     else: 
         roles = common.get_context_roles(context)
     print """!+ModelDescriptor TEST_CONTEXT_ROLES [%s]
     PRINCIPAL: %s
     CONTEXT: %s
     MODE: %s
     ROLES: %s
     IS ADMIN: %s""" % (self,
         principal, 
         context,
         mode,
         roles, 
         common.is_admin(context)
     )
Example #10
0
def get_user_context_roles():
    """Get the list of user's roles (including whether admin or not)--this 
    is the info needed (in addition to the field's modes) to further 
    filter whether a field is visible or not for a given (user, mode).
    
    Wraps common.get_context_roles(context), with the following differcnes: 
    - auto retrieves the context, needed param by common.get_context_roles()
    - handles case when user is not authenticated
    - handles case for when user is "admin"
    """
    request = common.get_request()
    if request is None:
        context = None
        principal = None
    else:
        context = common.get_traversed_context(request)
        principal = request.principal
    if IUnauthenticatedPrincipal.providedBy(principal):
        roles = ["bungeni.Anonymous"]
    else:
        roles = common.get_context_roles(context)
        if common.is_admin(context):
            roles.append("bungeni.Admin")
    log.debug(""" [get_user_context_roles]
    PRINCIPAL: %s
    CONTEXT: %s
    ROLES: %s
    """ % (principal, context, roles))
    return roles
Example #11
0
 def as_json(self):
     is_text = IScheduleText.implementedBy(self.domain_class)
     date_formatter = date.getLocaleFormatter(common.get_request(), "date",
                                              "medium")
     items = [
         dict(
             item_type=self.item_type,
             item_id=orm.object_mapper(item).primary_key_from_instance(
                 item)[0],
             item_title=IDCDescriptiveProperties(item).title,
             status=(IWorkflow(item).get_state(item.status).title
                     if not is_text else None),
             status_date=(date_formatter.format(item.submission_date) if
                          (hasattr(item, "submission_date")
                           and getattr(item, "submission_date")) else None),
             registry_number=(item.registry_number if hasattr(
                 item, "registry_number") else None),
             item_mover=(IDCDescriptiveProperties(item.owner).title
                         if hasattr(item, "owner") else None),
             item_uri="%s-%d" %
             (self.item_type,
              orm.object_mapper(item).primary_key_from_instance(item)[0]))
         for item in self.query()
     ]
     items = sorted(items,
                    key=lambda item: item.get("status_date"),
                    reverse=True)
     return json.dumps(dict(items=items))
Example #12
0
def in_edit_mode():
    """Is current UI view in mode "edit" i.e. are we modifying bungeni content?
    
    As general practice, to avoid user surprises, we do not allow a workflow 
    transition when UI is displaying the doc in "edit" mode (and possibly with
    unsaved modifications).
    """
    return IFormEditLayer.providedBy(common.get_request())
Example #13
0
 def items_container(self):
     """The URL to a container listing documents available for scheduling
     """
     site =  getSite()
     container = site["workspace"]["scheduling"]["documents"]
     request = common.get_request()
     app_url = request.getApplicationURL()
     return url.absoluteURL(container, request).replace(app_url, "")
Example #14
0
def in_edit_mode():
    """Is current UI view in mode "edit" i.e. are we modifying bungeni content?
    
    As general practice, to avoid user surprises, we do not allow a workflow 
    transition when UI is displaying the doc in "edit" mode (and possibly with
    unsaved modifications).
    """
    return IFormEditLayer.providedBy(common.get_request())
Example #15
0
 def items_container(self):
     """The URL to a container listing documents available for scheduling
     """
     site = getSite()
     container = site["workspace"]["scheduling"]["documents"]
     request = common.get_request()
     app_url = request.getApplicationURL()
     return url.absoluteURL(container, request).replace(app_url, "")
Example #16
0
 def _get_change_data(self):
     """If request defines change_data, use it, else return a dummy dict.
     """
     cd = IAnnotations(common.get_request()).get("change_data")
     if cd is None:
         cd = {}
     cd.setdefault("note", cd.get("note", ""))
     cd.setdefault("date_active", cd.get("date_active", None))
     return cd
Example #17
0
def date_input_search_widget(table_id, field_id):
    form = DateFilterWidget(common.get_application(), common.get_request(),
                            table_id, field_id)
    html = '<div id="date_input_search_widget_%(table_id)s_%(field_id)s" style="display: none;">%(html)s</div>' \
           % {"table_id": table_id,
              "field_id": field_id,
              "html": form.render()}
    script = open("%s/templates/date-input-search-widget.js" % (_path)).read()
    return html, script % {"table_id": table_id, "field_id": field_id}
Example #18
0
 def getter(item, formatter):
     request = common.get_request()
     start = getattr(item, from_name)
     if start:
         start = date.getLocaleFormatter(request, "dateTime", format_length).format(start)
     end = getattr(item, to_name)
     if end:
         end = date.getLocaleFormatter(request, "time", format_length).format(end)
     return "%s - %s" % (start, end)
Example #19
0
 def _get_change_data(self):
     """If request defines change_data, use it, else return a dummy dict.
     """
     cd = IAnnotations(common.get_request()).get("change_data")
     if cd is None:
         cd = {}
     cd.setdefault("note", cd.get("note", ""))
     cd.setdefault("date_active", cd.get("date_active", None))
     return cd
Example #20
0
 def generate_tree(root, context):
     for element in root.getiterator():
         typ = get_attr(element, "type")
         src = get_attr(element, "source")
         if typ:
             if typ=="text":
                 clean_element(element)
                 element.text = get_element_value(context, src)
             elif typ=="link":
                 clean_element(element)
                 url_source = get_attr(element, "url")
                 if url_source:
                     link_url = get_element_value(context, url_source)
                 else:
                     link_url = url.absoluteURL(context, 
                         common.get_request()
                     )
                 element.attrib["href"] = link_url
                 if src:
                     element.text = get_element_value(context, src)
             elif typ=="html":
                 clean_element(element)
                 _html = u"<div>%s</div>" % get_element_value(context, 
                     src
                 )
                 new_html = element.insert(0, etree.fromstring(_html))
             elif typ=="listing":
                 listing = get_element_value(context, src, default=[])
                 
                 if IAlchemistContainer.providedBy(listing):
                     _listing = common.list_container_items(listing)
                     listing = [ item for item in _listing ]
                 
                 log.debug("[LISTING] %s @@ %s", src, listing)
                 listing_count = len(listing)
                 new_children = [
                     deepcopy(element.getchildren()) 
                     for x in range(listing_count) 
                 ]
                 empty_element(element)
                 clean_element(element)
                 
                 if listing_count == 0:
                     parent = element.getparent()
                     no_items_element = etree.SubElement(element, "p")
                     no_items_element.text = translate_i18n(
                         _(u"No items found")
                     )
                 else:
                     for (index, item) in enumerate(listing):
                         for child in new_children[index]:
                             generate_tree(child, item)
                     for children in new_children:
                         for descendant in children:
                             element.append(descendant)
                 break
     return etree.tostring(root)
Example #21
0
 def renderCell(self, item, formatter):
     abs_url = url.absoluteURL(item, common.get_request())
     title = super(LinkColumn, self).renderCell(item, formatter)
     if abs_url:
         link_html = zope.app.form.browser.widget.renderElement(
             "a", contents=title, href=abs_url)
         return zope.app.form.browser.widget.renderElement(
             "p", contents=link_html)
     return title
Example #22
0
def getLocaleFormatter(
    request=None,
    category="date",  # "date" | "time" | "dateTime"
    length="medium"  # "short" | "medium" | "long" | "full" | None
):
    """See: zope.i18n.locales.LocaleDates.getFormatter
    """
    if request is None:
        request = common.get_request()
    return request.locale.dates.getFormatter(category, length)
Example #23
0
def getLocaleFormatter(
            request=None, 
            category="date",    # "date" | "time" | "dateTime"
            length="medium"     # "short" | "medium" | "long" | "full" | None
        ):
    """See: zope.i18n.locales.LocaleDates.getFormatter
    """
    if request is None:
        request = common.get_request()
    return request.locale.dates.getFormatter(category, length)
Example #24
0
 def renderCell(self, item, formatter):
     abs_url = url.absoluteURL(item, common.get_request())
     title = super(LinkColumn, self).renderCell(item, formatter)
     if abs_url:
         link_html = zope.app.form.browser.widget.renderElement("a",
             contents=title, href=abs_url
         )
         return zope.app.form.browser.widget.renderElement("p",
             contents=link_html
         )
     return title
Example #25
0
 def getLanguage(self):
     request = get_request()
     if request is not None:
         browser_langs = BrowserLanguages(request)
         langs = browser_langs.getPreferredLanguages()
         try:
             return langs[0]
         except IndexError:
             return None
     else:
         return None
def get_request_language(request=None, default=capi.default_language):
    """Get current request's language; if no request use specified default.
    
    If the request instance is handy, it may be passed in as a parameter thus
    avoidng the need to call for it.
    """
    if request is None:
        request = common.get_request()
    if IHTTPRequest.providedBy(request):
        return request.locale.getLocaleID()
    return default
Example #27
0
def get_base_direction():
    request = get_request()
    ui_lang = request.getCookies().get("I18N_LANGUAGE")
    if ui_lang is not None:
        language = ui_lang
    else:
        language = capi.default_language
    if language[:2] in capi.right_to_left_languages:
        return "rtl"
    else:
        return "ltr"
def response_allow_submit(context):
    # The "submit_response" workflow transition should NOT be displayed when 
    # the UI is displaying the question in "edit" mode (as this transition
    # will cause deny of bungeni.Question.Edit to the Minister).
    request = common.get_request()
    if IFormEditLayer.providedBy(request):
        return False
    if context.response_text is None:
        return False
    else:
        return True
Example #29
0
def get_base_direction():
    request = get_request()
    ui_lang = request.getCookies().get("I18N_LANGUAGE")
    if ui_lang is not None:
        language = ui_lang
    else:
        language = capi.default_language
    if language[:2] in capi.right_to_left_languages:
        return "rtl"
    else:
        return "ltr"
Example #30
0
 def getter(item, formatter):
     request = common.get_request()
     start = getattr(item, from_name)
     if start:
         start = date.getLocaleFormatter(request,
             "dateTime", format_length).format(start)
     end = getattr(item, to_name)
     if end:
         end = date.getLocaleFormatter(request,
             "time", format_length).format(end)
     return "%s - %s" % (start, end)
Example #31
0
        def generate_tree(root, context):
            for element in root.getiterator():
                typ = get_attr(element, "type")
                src = get_attr(element, "source")
                if typ:
                    if typ == "text":
                        clean_element(element)
                        element.text = get_element_value(context, src)
                    elif typ == "link":
                        clean_element(element)
                        url_source = get_attr(element, "url")
                        if url_source:
                            link_url = get_element_value(context, url_source)
                        else:
                            link_url = url.absoluteURL(context,
                                                       common.get_request())
                        element.attrib["href"] = link_url
                        if src:
                            element.text = get_element_value(context, src)
                    elif typ == "html":
                        clean_element(element)
                        _html = u"<div>%s</div>" % get_element_value(
                            context, src)
                        new_html = element.insert(0, etree.fromstring(_html))
                    elif typ == "listing":
                        listing = get_element_value(context, src, default=[])

                        if IAlchemistContainer.providedBy(listing):
                            _listing = common.list_container_items(listing)
                            listing = [item for item in _listing]

                        log.debug("[LISTING] %s @@ %s", src, listing)
                        listing_count = len(listing)
                        new_children = [
                            deepcopy(element.getchildren())
                            for x in range(listing_count)
                        ]
                        empty_element(element)
                        clean_element(element)

                        if listing_count == 0:
                            parent = element.getparent()
                            no_items_element = etree.SubElement(element, "p")
                            no_items_element.text = translate_i18n(
                                _(u"No items found"))
                        else:
                            for (index, item) in enumerate(listing):
                                for child in new_children[index]:
                                    generate_tree(child, item)
                            for children in new_children:
                                for descendant in children:
                                    element.append(descendant)
                        break
            return etree.tostring(root)
Example #32
0
def get_request_language(request=None, default=capi.default_language):
    """Get current request's language; if no request use specified default.
    
    If the request instance is handy, it may be passed in as a parameter thus
    avoidng the need to call for it.
    """
    if request is None:
        request = common.get_request()
    if IHTTPRequest.providedBy(request):
        return request.locale.getLocaleID()
    return default
Example #33
0
 def getLanguage(self):
     request = get_request()
     if request is not None:
         browser_langs = BrowserLanguages(request)
         langs = browser_langs.getPreferredLanguages()
         try:
             return langs[0]
         except IndexError:
             return None
     else:
         return None
Example #34
0
def response_allow_submit(context):
    # The "submit_response" workflow transition should NOT be displayed when
    # the UI is displaying the question in "edit" mode (as this transition
    # will cause deny of bungeni.Question.Edit to the Minister).
    request = common.get_request()
    if IFormEditLayer.providedBy(request):
        return False
    if context.response_text is None:
        return False
    else:
        return True
Example #35
0
 def _get_change_data(self):
     """If request defines change_data, use it, else return a dummy dict.
     """
     try:
         cd = IAnnotations(common.get_request()).get("change_data")
         assert cd is not None, "change_data dict is None."
     except (TypeError, AssertionError):
         # Could not adapt... under testing, the "request" is a 
         # participation that has no IAnnotations.
         cd = {}
     cd.setdefault("note", cd.get("note", ""))
     cd.setdefault("date_active", cd.get("date_active", None))
     return cd
Example #36
0
def make_admin_url(obj_id, type_name, status, context, chamber_id):
    """Use traversal to find parent parliament
    """
    url = None
    chamber = get_parl_container(context, chamber_id)
    if chamber:
        items_container = get_type_container(chamber, type_name)
        if items_container:
            url = "/".join([
                absoluteURL(items_container, common.get_request()),
                container_obj_key(obj_id)
            ])
    return url
Example #37
0
 def _get_change_data(self):
     """If request defines change_data, use it, else return a dummy dict.
     """
     try:
         cd = IAnnotations(common.get_request()).get("change_data")
         assert cd is not None, "change_data dict is None."
     except (TypeError, AssertionError):
         # Could not adapt... under testing, the "request" is a 
         # participation that has no IAnnotations.
         cd = {}
     cd.setdefault("note", cd.get("note", ""))
     cd.setdefault("date_active", cd.get("date_active", None))
     return cd
Example #38
0
def make_admin_url(obj_id, type_name, status, context, chamber_id):
    """Use traversal to find parent parliament
    """
    url = None
    chamber = get_parl_container(context, chamber_id)
    if chamber:
        items_container = get_type_container(chamber, type_name)
        if items_container:
            url = "/".join([ 
                absoluteURL(items_container, common.get_request()),
                container_obj_key(obj_id)
            ])
    return url
Example #39
0
 def getLanguage(self):
     try:
         request = get_request()
     except zope.security.interfaces.NoInteraction:
         request=None
     if request is not None:
         browser_langs = BrowserLanguages(request)
         langs = browser_langs.getPreferredLanguages()
         try:
             return langs[0]
         except IndexError:
             return None
     else:
         return None
def translate_obj(context):
    """ translate a ITranslatable content object (context) into
    the language defined in the request
    -> copy of the object translated into language of the request
    """
    trusted = removeSecurityProxy(context)
    request = common.get_request()
    lang = request.locale.getLocaleID() # !+ get_browser_language()
    translation = get_translation_for(context, lang)
    obj = copy(trusted)
    for field_translation in translation:
        setattr(obj, field_translation.field_name, 
                    field_translation.field_text)
    return obj
Example #41
0
 def getter(item, formatter):
     state_title = get_wf_state(item)
     request = common.get_request()
     state_title = translate(state_title, domain="bungeni", context=request)
     # !+MY_LISTING_ROWS(mr, aug-2012) the following is a (exploratory) 
     # mechanism to add a distinction between what rows are owned by the 
     # current user and others. Here it is added only to "status" columns
     # but a generic "row-level" means to mark such rows as different 
     # from the others may be a useful feature.
     if IWorkspaceSectionLayer.providedBy(request) and IOwned.providedBy(item):
         # !+delegation?
         if item.owner == get_login_user():
             state_title = "<b>%s</b> *" % (state_title)
     return state_title
Example #42
0
 def getter(item, formatter):
     state_title = get_wf_state(item)
     request = common.get_request()
     state_title = translate(state_title, domain="bungeni", context=request)
     # !+MY_LISTING_ROWS(mr, aug-2012) the following is a (exploratory) 
     # mechanism to add a distinction between what rows are owned by the 
     # current user and others. Here it is added only to "status" columns
     # but a generic "row-level" means to mark such rows as different 
     # from the others may be a useful feature.
     if IWorkspaceSectionLayer.providedBy(request) and IOwned.providedBy(item):
         # !+delegation?
         if item.owner == get_db_user():
             state_title = "<b>%s</b> *" % (state_title)
     return state_title
Example #43
0
 def getLanguage(self):
     try:
         request = get_request()
     except zope.security.interfaces.NoInteraction:
         request = None
     if request is not None:
         browser_langs = BrowserLanguages(request)
         langs = browser_langs.getPreferredLanguages()
         try:
             return langs[0]
         except IndexError:
             return None
     else:
         return None
Example #44
0
def translate_obj(context):
    """Translate a ITranslatable content object (context, that may NOT be None)
    into the language defined in the request
    -> copy of the object translated into language of the request
    """
    trusted = removeSecurityProxy(context)
    request = common.get_request()
    lang = request.locale.getLocaleID()  # !+ get_browser_language()
    translation = get_translation_for(context, lang)
    obj = copy(trusted)
    for field_translation in translation:
        setattr(obj, field_translation.field_name,
                field_translation.field_text)
    return obj
Example #45
0
    def __call__(self, context):
        request = common.get_request()

        def get_locale_lang(code):
            if hasattr(request, "locale"):
                return request.locale.displayNames.languages.get(code)
            return None

        languages = get_all_languages()
        items = [(lang, (request and get_locale_lang(lang)
                         or languages[lang]['name']))
                 for lang in languages.keys()]
        items.sort(key=lambda language: language[1])
        items = [SimpleTerm(i[0], i[0], i[1]) for i in items]
        return SimpleVocabulary(items)
Example #46
0
def getLocaleFormatter(
    request=None,
    category="date",  # "date" | "time" | "dateTime"
    length="medium"  # "short" | "medium" | "long" | "full" | None
):
    """See: zope.i18n.locales.LocaleDates.getFormatter
    """
    if request is None:
        try:
            request = common.get_request()
        except NoInteraction:
            request = None
    if request and hasattr(request, "locale"):
        return request.locale.dates.getFormatter(category, length)
    else:
        return locales.getLocale(capi.default_language).dates.getFormatter(
            category, length)
Example #47
0
def getLocaleFormatter(
            request=None, 
            category="date",    # "date" | "time" | "dateTime"
            length="medium"     # "short" | "medium" | "long" | "full" | None
        ):
    """See: zope.i18n.locales.LocaleDates.getFormatter
    """
    if request is None:
        try:
            request = common.get_request()
        except NoInteraction:
            request = None
    if request and hasattr(request, "locale"):
        return request.locale.dates.getFormatter(category, length)
    else:
        return locales.getLocale(capi.default_language).dates.getFormatter(
            category, length)
 def __call__(self, context):
     request = common.get_request()
     def get_locale_lang(code):
         if hasattr(request, "locale"):
             return request.locale.displayNames.languages.get(code)
         return None
     languages = get_all_languages()
     items = [ 
         (
             lang, 
             (request and get_locale_lang(lang) or languages[lang]['name'])
         )
         for lang in languages.keys()
     ]
     items.sort(key=lambda language: language[1])
     items = [ SimpleTerm(i[0], i[0], i[1]) for i in items ]
     return SimpleVocabulary(items)
Example #49
0
 def columns(self):
     date_formatter = date.getLocaleFormatter(common.get_request(),
                                              "dateTime", "medium")
     listing_columns = [
         column.GetterColumn(
             title=_("Take start time"),
             getter=lambda i, f: date_formatter.format(i.start_date)),
         column.GetterColumn(
             title=_("Take end time"),
             getter=lambda i, f: date_formatter.format(i.end_date)),
         column.GetterColumn(title=_("Take name"),
                             getter=lambda i, f: i.debate_take_name),
         column.GetterColumn(
             title=_("Take transcriber"),
             getter=lambda i, f: IDCDescriptiveProperties(i.user).title),
     ]
     return listing_columns
Example #50
0
 def valid_date_active(comment):
     request = common.get_request()
     # recover min_date_active, and adjust it to be 59 secs earlier to
     # avoid issues of doing 2 transitions in quick succession (within 
     # the same minute) the 2nd of which could be taken to be too old...
     min_date_active = (IAnnotations(request)["min_date_active"] - 
                                                 timedelta(seconds=59))
     if not hasattr(comment, "date_active"):
         # !+ because of a BUG in the datetime widget (probably) :
         # after a server restart, resubmitting a previously loaded 
         # form -- that displays valid data_active value results in a
         # form.NoDataInput("date_active") error... thus causing:
         # (comment.date_active<min_date_active) to be False !
         raise zope.interface.Invalid(_("NoDataInput for Active Date."))
     elif comment.date_active < min_date_active:
         raise zope.interface.Invalid(_("Active Date is too old."))
     elif comment.date_active > datetime.now():
         raise zope.interface.Invalid(_("Active Date is in the future."))
Example #51
0
 def as_json(self):
     date_formatter = date.getLocaleFormatter(common.get_request(), "date",
                                              "medium")
     items_json = dict(items=[
         dict(item_type=self.item_type,
              item_id=orm.object_mapper(item).primary_key_from_instance(
                  item)[0],
              item_title=IDCDescriptiveProperties(item).title,
              status=IWorkflow(item).get_state(item.status).title,
              status_date=(date_formatter.format(item.submission_date)
                           if hasattr(item, "submission_date") else None),
              registry_number=(item.registry_number if hasattr(
                  item, "registry_number") else None),
              item_mover=(IDCDescriptiveProperties(item.owner).
                          title if hasattr(item, "owner") else None),
              item_uri=IDCDescriptiveProperties(item).uri)
         for item in self.query()
     ])
     return json.dumps(items_json)
Example #52
0
 def valid_date_active(comment):
     request = common.get_request()
     # recover min_date_active, and adjust it to be 59 secs earlier to
     # avoid issues of doing 2 transitions in quick succession (within
     # the same minute) the 2nd of which could be taken to be too old...
     min_date_active = (IAnnotations(request)["min_date_active"] -
                        timedelta(seconds=59))
     if not hasattr(comment, "date_active"):
         # !+ because of a BUG in the datetime widget (probably) :
         # after a server restart, resubmitting a previously loaded
         # form -- that displays valid data_active value results in a
         # form.NoDataInput("date_active") error... thus causing:
         # (comment.date_active<min_date_active) to be False !
         raise zope.interface.Invalid(_("NoDataInput for Active Date."))
     elif comment.date_active < min_date_active:
         raise zope.interface.Invalid(_("Active Date is too old."))
     elif comment.date_active > datetime.now():
         raise zope.interface.Invalid(
             _("Active Date is in the future."))
Example #53
0
def format_change_description(change):
    """Format/i18n a document's change object description for timeline listing
    """
    description = change.description
    if change.action == "new-version":
        version = change.origin.versions.get(
            int(change.extras.get("version_id")))
        chg_url = url.absoluteURL(version, common.get_request())
        if chg_url:
            description = "<a href='%s'>%s</a>" % (chg_url, (translate_i18n(
                change.description) or translate_i18n(u"New Version")))
    elif change.action == "workflow":
        description = translate_i18n(change.description)
    if not description:
        # use principal effecting the change as description as a fallback
        dc = IDCDescriptiveProperties(change.user, None)
        if dc:
            description = translate_i18n(dc.title_member)
    return description
Example #54
0
 def getter(item_user, formatter):
     related_user = _get_related_user(item_user, related_user_attribute_name)
     request = common.get_request()
     # !+ replace with: bungeni.ui.widgets._render_link_to_mp_or_user ?
     if IAdminSectionLayer.providedBy(request):
         # under admin, we link to the natural "view" of the schema relation
         parent = item_user
         while parent and not IAlchemistContainer.providedBy(parent):
             parent = removeSecurityProxy(parent.__parent__)
         item_user.__parent__ = parent
         href = url.absoluteURL(item_user, request)
     else:
         #!+BUSINESS(mb, feb-2013) is deprecated
         # else we link direct to the MP's "public" view
         # mp = get_member_of_parliament(related_user.user_id)
         # href = "/members/current/obj-%s/" % (mp.membership_id)
         return related_user.combined_name
     return zope.formlib.widget.renderElement(
         "a", contents=related_user.combined_name, href=href  # User.combined_name derived property
     )
Example #55
0
 def getter(item_user, formatter):
     related_user = _get_related_user(item_user, related_user_attribute_name)
     request = common.get_request()
     # !+ replace with: bungeni.ui.widgets._render_link_to_mp_or_user ?
     if IAdminSectionLayer.providedBy(request):
         # under admin, we link to the natural "view" of the schema relation
         parent = item_user
         while parent and not IAlchemistContainer.providedBy(parent):
             parent = removeSecurityProxy(parent.__parent__)
         item_user.__parent__ = parent
         href = url.absoluteURL(item_user, request)
     else:
         #!+BUSINESS(mb, feb-2013) is deprecated
         # else we link direct to the MP's "public" view
         #mp = get_member_of_parliament(related_user.user_id)
         #href = "/members/current/obj-%s/" % (mp.membership_id)
         return related_user.combined_name
     return zope.formlib.widget.renderElement("a",
         contents=related_user.combined_name,  # User.combined_name derived property
         href=href
     )
 def columns(self):
     date_formatter = date.getLocaleFormatter(common.get_request(),
         "dateTime", "medium")
     listing_columns = [
         column.GetterColumn(
             title=_("Take start time"),
             getter=lambda i,f: date_formatter.format(i.start_date)
         ),
         column.GetterColumn(
             title=_("Take end time"),
             getter=lambda i,f: date_formatter.format(i.end_date)
         ),
         column.GetterColumn(
             title=_("Take name"),
             getter=lambda i,f: i.debate_take_name
         ),
         column.GetterColumn(
             title=_("Take transcriber"),
             getter=lambda i,f: IDCDescriptiveProperties(i.user).title
         ),
     ]
     return listing_columns
Example #57
0
def get_destination_url_path(request=None):
    """Get the (effective, sans any "traversal namespace notation" components
    and other such "traversal processing instruction" url components) target 
    URL path of the (current) request.
    """
    if request is None:
        request = common.get_request()
    #_url = request.URL
    #_url = request.getURL(level=0, path_only=True)
    # NOTE: both URL and getURL() depend on where we are in the traversal 
    # process i.e. they return the *currently* traversed URL path and not 
    # the full requested path. 
    # 
    # So, we use the request's PATH_INFO but as this may contain:
    # - (++) any number of Zope "traversal namespace notation" url components
    # - (@@/) to indicate that the URL is for an object that is a resource
    # - (@@)) to indicate a view name
    # we need to get rid of them:
    _url = "/".join([ url_component 
            for url_component in request.get("PATH_INFO").split("/")
            if not url_component.startswith("++") and 
                not url_component.startswith("@@") ])
    log.debug(" [get_destination_url_path] %s " % _url)
    return _url
Example #58
0
 def test_context_roles(self, mode):
     """EXPERIMENTAL sample code to get a user's roles and whether is_admin 
     or not -- this is the info needed (in addition to the field's modes) 
     to further filter whether a field is visible or not for a 
     given (user, mode).
     """
     request = common.get_request()
     if request is None:
         context = None
         principal = None
     else:
         context = common.get_traversed_context(request)
         principal = request.principal
     if IUnauthenticatedPrincipal.providedBy(principal):
         roles = None
     else:
         roles = common.get_context_roles(context)
     print """!+ModelDescriptor TEST_CONTEXT_ROLES [%s]
     PRINCIPAL: %s
     CONTEXT: %s
     MODE: %s
     ROLES: %s
     IS ADMIN: %s""" % (self, principal, context, mode, roles,
                        common.is_admin(context))
Example #59
0
def format_change_description(change):
    """Format/i18n a document's change object description for timeline listing
    """
    description = change.description
    if change.action == "new-version":
        version = change.origin.versions.get(
            int(change.extras.get("version_id"))
        )
        chg_url = url.absoluteURL(version, common.get_request())
        if chg_url:
            description = "<a href='%s'>%s</a>" % (
                chg_url, 
                (translate_i18n(change.description) 
                    or translate_i18n(u"New Version")
                )
            )
    elif change.action == "workflow":
        description = translate_i18n(change.description)
    if not description:
        # use principal effecting the change as description as a fallback
        dc = IDCDescriptiveProperties(change.user, None)
        if dc:
            description = translate_i18n(dc.title_member)
    return description