Example #1
0
def create_sittings_map(sittings, request):
    """Returns a dictionary that maps:

      (day, hour) -> {
         'record'   : sitting database record
         'actions'  : actions that apply to this sitting
         'class'    : sitting
         'span'     : span
         }
         
      (day, hour) -> ``None``
      
    If the mapped value is a sitting, then a sitting begins on that
    day and hour, if it's ``None``, then a sitting is reaching into
    this day and hour.
    
    The utility of the returned structure is to aid rendering a
    template with columns spanning several rows.
    """

    mapping = {}
    for sitting in sittings.values():
        day = sitting.start_date.weekday()
        hour = sitting.start_date.hour

        start_date = utils.timedict(sitting.start_date.hour, sitting.start_date.minute)

        end_date = utils.timedict(sitting.end_date.hour, sitting.end_date.minute)

        status = misc.get_wf_state(sitting)

        proxied = ProxyFactory(sitting)

        if checkPermission(u"bungeni.agendaitem.wf.schedule", proxied):
            link = "%s/schedule" % url.absoluteURL(sitting, request)
        else:
            link = url.absoluteURL(sitting, request)

        if checkPermission("zope.View", proxied):
            mapping[day, hour] = {
                "url": link,
                "record": sitting,
                "class": u"sitting",
                "actions": get_sitting_actions(sitting, request),
                "span": sitting.end_date.hour - sitting.start_date.hour,
                "formatted_start_time": start_date,
                "formatted_end_time": end_date,
                "status": status,
            }
            for hour in range(sitting.start_date.hour + 1, sitting.end_date.hour):
                mapping[day, hour] = None

        # make sure start- and end-date is the same DAY
        assert (
            (sitting.start_date.day == sitting.end_date.day)
            and (sitting.start_date.month == sitting.end_date.month)
            and (sitting.start_date.year == sitting.end_date.year)
        )

    return mapping
Example #2
0
def get_sitting_items(sitting, request, include_actions=False):
    items = []

    if (sitting.status in IWorkflow(sitting).get_state_ids(
            keys=["draft_agenda", "published_agenda"])):
        order = "planned_order"
    else:
        order = "real_order"

    schedulings = map(removeSecurityProxy,
                      sitting.items.batch(order_by=order, limit=None))
    for scheduling in schedulings:
        item = ProxyFactory(location_wrapped(scheduling.item, sitting))

        props = IDCDescriptiveProperties.providedBy(item) and item or \
                IDCDescriptiveProperties(item)

        discussions = tuple(scheduling.discussions.values())
        discussion = discussions and discussions[0] or None
        truncated_discussion = None
        if ((discussion is not None) and (discussion.body is not None)):
            #truncate discussion to first hundred characters
            t_discussion = discussion.body[0:100]
            try:
                #truncate discussion to first two lines
                index = t_discussion.index("<br>")
                index2 = t_discussion.index("<br>", index + 4)
                truncated_discussion = t_discussion[0:index2] + "..."
            except ValueError:
                truncated_discussion = t_discussion + "..."
        state_title = IWorkflow(item).get_state(item.status).title
        item = removeSecurityProxy(item)
        record = {
            "title": props.title,
            "description": props.description,
            "name": stringKey(scheduling),
            "status": item.status,
            "type": item.type.capitalize,
            "state_title": state_title,
            "heading": True if item.type == "heading" else False,
            #"category_id": scheduling.category_id,
            #"category": scheduling.category,
            "discussion": discussion,
            "truncated_discussion": truncated_discussion,
            "delete_url": "%s/delete" % url.absoluteURL(scheduling, request),
            "url": url.absoluteURL(item, request),
        }

        if include_actions:
            record["actions"] = get_scheduling_actions(scheduling, request)
            record["workflow"] = get_workflow_actions(item, request)

            discussion_actions = get_discussion_actions(discussion, request)
            if discussion_actions:
                assert len(discussion_actions) == 1
                record["discussion_action"] = discussion_actions[0]
            else:
                record["discussion_action"] = None
        items.append(record)
    return items
Example #3
0
def get_sitting_items(sitting, request, include_actions=False):
    items = []

    if sitting.status in get_states("groupsitting", keys=["draft_agenda", "published_agenda"]):
        order = "planned_order"
    else:
        order = "real_order"

    schedulings = map(removeSecurityProxy, sitting.items.batch(order_by=order, limit=None))
    site_url = url.absoluteURL(getSite(), request)
    for scheduling in schedulings:
        item = ProxyFactory(location_wrapped(scheduling.item, sitting))

        props = IDCDescriptiveProperties.providedBy(item) and item or IDCDescriptiveProperties(item)

        discussions = tuple(scheduling.discussions.values())
        discussion = discussions and discussions[0] or None
        truncated_discussion = None
        if (discussion is not None) and (discussion.body_text is not None):
            # truncate discussion to first hundred characters
            t_discussion = discussion.body_text[0:100]
            try:
                # truncate discussion to first two lines
                index = t_discussion.index("<br>")
                index2 = t_discussion.index("<br>", index + 4)
                truncated_discussion = t_discussion[0:index2] + "..."
            except ValueError:
                truncated_discussion = t_discussion + "..."
        info = IWorkflowInfo(item, None)
        state_title = info.workflow().workflow.states[item.status].title

        record = {
            "title": props.title,
            "description": props.description,
            "name": stringKey(scheduling),
            "status": item.status,
            "type": item.type.capitalize,
            "t": item.type,
            "state_title": state_title,
            #'category_id': scheduling.category_id,
            #'category': scheduling.category,
            "discussion": discussion,
            "truncated_discussion": truncated_discussion,
            "delete_url": "%s/delete" % url.absoluteURL(scheduling, request),
            "url": url.set_url_context(site_url + ("/business/%ss/obj-%s" % (item.type, item.parliamentary_item_id))),
        }

        if include_actions:
            record["actions"] = get_scheduling_actions(scheduling, request)
            record["workflow"] = get_workflow_actions(item, request)

            discussion_actions = get_discussion_actions(discussion, request)
            if discussion_actions:
                assert len(discussion_actions) == 1
                record["discussion_action"] = discussion_actions[0]
            else:
                record["discussion_action"] = None
        items.append(record)
    return items
Example #4
0
    def render(self, date, template=None):
        #need('yui-editor')
        need('yui-rte')
        need('yui-resize')
        need('yui-button')

        if template is None:
            template = self.template

        container = self.context.__parent__
        #schedule_url = self.request.getURL()
        container_url = url.absoluteURL(container, self.request)

        # determine position in container
        key = stringKey(self.context)
        keys = list(container.keys())
        pos = keys.index(key)

        links = {}
        if pos > 0:
            links['previous'] = "%s/%s/%s" % (container_url, keys[pos - 1],
                                              self.__name__)
        if pos < len(keys) - 1:
            links['next'] = "%s/%s/%s" % (container_url, keys[pos + 1],
                                          self.__name__)

        #start_date = utils.datetimedict.fromdatetime(self.context.start_date)
        #end_date = utils.datetimedict.fromdatetime(self.context.end_date)

        site_url = url.absoluteURL(getSite(), self.request)

        return template(
            display="sitting",
            #title=_(u"$A $e, $B $Y", mapping=start_date),
            title="%s: %s - %s" %
            (self.context.group.short_name,
             self.context.start_date.strftime('%Y-%m-%d %H:%M'),
             self.context.end_date.strftime('%H:%M')),
            description=_(
                u"$type &mdash; ${start}-${end}",
                mapping={
                    'start':
                    self.context.start_date.strftime('%Y-%m-%d %H:%M'),
                    'end': self.context.end_date.strftime('%H:%M')
                }),
            #            title = u"",
            #            description = u"",
            #
            links=links,
            actions=get_sitting_actions(self.context, self.request),
            items=get_sitting_items(self.context,
                                    self.request,
                                    include_actions=True),
            #categories=vocabulary.ItemScheduleCategories(self.context),
            new_category_url="%s/admin/content/categories/add?next_url=..." %
            site_url,
            status=self.context.status,
        )
Example #5
0
def get_sitting_items(sitting, request, include_actions=False):
    items = []

    if sitting.status in IWorkflow(sitting).get_state_ids(keys=["draft_agenda", "published_agenda"]):
        order = "planned_order"
    else:
        order = "real_order"

    schedulings = map(removeSecurityProxy, sitting.items.batch(order_by=order, limit=None))
    for scheduling in schedulings:
        item = ProxyFactory(location_wrapped(scheduling.item, sitting))

        props = IDCDescriptiveProperties.providedBy(item) and item or IDCDescriptiveProperties(item)

        discussions = tuple(scheduling.discussions.values())
        discussion = discussions and discussions[0] or None
        truncated_discussion = None
        if (discussion is not None) and (discussion.body is not None):
            # truncate discussion to first hundred characters
            t_discussion = discussion.body[0:100]
            try:
                # truncate discussion to first two lines
                index = t_discussion.index("<br>")
                index2 = t_discussion.index("<br>", index + 4)
                truncated_discussion = t_discussion[0:index2] + "..."
            except ValueError:
                truncated_discussion = t_discussion + "..."
        state_title = IWorkflow(item).get_state(item.status).title
        item = removeSecurityProxy(item)
        record = {
            "title": props.title,
            "description": props.description,
            "name": stringKey(scheduling),
            "status": item.status,
            "type": item.type.capitalize,
            "state_title": state_title,
            "heading": True if item.type == "heading" else False,
            # "category_id": scheduling.category_id,
            # "category": scheduling.category,
            "discussion": discussion,
            "truncated_discussion": truncated_discussion,
            "delete_url": "%s/delete" % url.absoluteURL(scheduling, request),
            "url": url.absoluteURL(item, request),
        }

        if include_actions:
            record["actions"] = get_scheduling_actions(scheduling, request)
            record["workflow"] = get_workflow_actions(item, request)

            discussion_actions = get_discussion_actions(discussion, request)
            if discussion_actions:
                assert len(discussion_actions) == 1
                record["discussion_action"] = discussion_actions[0]
            else:
                record["discussion_action"] = None
        items.append(record)
    return items
Example #6
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        if interfaces.IBusinessWhatsOnSectionLayer.providedBy(request):
            return ()
        else:
            if IBungeniApplication.providedBy(context.__parent__):
                return ()
        wf = IWorkflow(context, None)
        if wf is None:
            return ()
        #state = IWorkflowInfo(context).state().getState()
        wf_info = IWorkflowInfo(context)
        transitions = wf_info.getManualTransitionIds()

        # !+ context_workflow menu: the order of transitions is alphabetic, but
        # should really be order of definition.
        parliament_id = getCurrentParliamentId()

        url = ui_url.absoluteURL(context, request)
        site_url2 = ui_url.absoluteURL(getSite(), request)
        results = []
        for transition in transitions:
            tid = transition
            state_transition = wf.getTransitionById(transition)
            #Compares the current url to homepage to determine whether we are on workspace or not.
            #Fix for bug 319
            #Someone should probably review this.
            if url == site_url2:
                transition_url = site_url2 + \
                             '/archive/browse/parliaments/obj-' + str(parliament_id) + \
                             '/change_workflow_state?' + \
                             'transition=%s&next_url=...' % tid
            else:
                transition_url = url + \
                             '/change_workflow_state?'\
                             'transition=%s&next_url=...' % tid
            extra = {
                'id': 'workflow-transition-%s' % tid,
                'separator': None,
                'class': ''
            }

            state_title = translate(str(state_transition.title),
                                    domain="bungeni.core",
                                    context=request)
            results.append(
                dict(title=state_title,
                     description="",
                     action=transition_url,
                     selected=False,
                     transition_id=tid,
                     icon=None,
                     extra=extra,
                     submenu=None))

        return results
Example #7
0
 def __call__(self, timestamp=None):
     trusted = removeSecurityProxy(self.context)
     trusted.__name__ = self.__name__
     interface.alsoProvides(trusted, ILocation)
     if IBusinessSectionLayer.providedBy(self.request) and isinstance(trusted, SittingContainerSchedulingContext):
         self.url = url.absoluteURL(trusted.__parent__.__parent__, self.request)
     else:
         self.url = url.absoluteURL(trusted.__parent__, self.request)
     self.title = ISchedulingContext(self.context).label
     return self.render()
Example #8
0
 def getMenuItems(self, context, request):
     """Return menu item entries in a TAL-friendly form."""
     if interfaces.IBusinessWhatsOnSectionLayer.providedBy(request):
         return ()
     else:
         if IBungeniApplication.providedBy(context.__parent__):
             return ()
     wf = IWorkflow(context, None)
     if wf is None:
         return ()
     #state = IWorkflowInfo(context).state().getState()
     wf_info = IWorkflowInfo(context)
     transitions = wf_info.getManualTransitionIds()
     
     # !+ context_workflow menu: the order of transitions is alphabetic, but 
     # should really be order of definition.
     parliament_id = getCurrentParliamentId()
     
     _url = url.absoluteURL(context, request)
     site_url2 = url.absoluteURL(getSite(), request)
     results = []
     for transition in transitions:
         tid = transition
         state_transition = wf.getTransitionById(transition)
         #Compares the current url to homepage to determine whether we are on workspace or not.
         #Fix for bug 319
         #Someone should probably review this.
         if _url == site_url2:
             transition_url = site_url2 + \
                          "/archive/browse/parliaments/obj-" + str(parliament_id) + \
                          "/change_workflow_state?" + \
                          "transition=%s&next_url=..." % tid
         else:
             transition_url = _url + \
                          "/change_workflow_state?"\
                          "transition=%s&next_url=..." % tid
         extra = {"id": "workflow-transition-%s" % tid,
                  "separator": None,
                  "class": ""}
         
         state_title = translate(str(state_transition.title), 
                 domain="bungeni.core", 
                 context=request)
         results.append(
             dict(title=state_title,
                  description="",
                  action=transition_url,
                  selected=False,
                  transition_id=tid,
                  icon=None,
                  extra=extra,
                  submenu=None))
     
     return results
Example #9
0
    def render(self, date, template=None):
        #need('yui-editor')
        need('yui-connection')
        need('yui-rte')
        need('yui-resize')
        need('yui-button')
        
        if template is None:
            template = self.template

        container = self.context.__parent__
        #schedule_url = self.request.getURL()
        container_url = url.absoluteURL(container, self.request)
        
        # determine position in container
        key = stringKey(self.context)
        keys = list(container.keys())
        pos = keys.index(key)

        links = {}
        if pos > 0:
            links['previous'] = "%s/%s/%s" % (
                container_url, keys[pos-1], self.__name__)
        if pos < len(keys) - 1:
            links['next'] = "%s/%s/%s" % (
                container_url, keys[pos+1], self.__name__)

        #start_date = utils.datetimedict.fromdatetime(self.context.start_date)
        #end_date = utils.datetimedict.fromdatetime(self.context.end_date)
        

        site_url = url.absoluteURL(getSite(), self.request)
        reorder = "reorder" if self.context.status in \
                                ["draft_agenda", "draft_minutes"] \
                            else "dont-reorder"
        return template(
            display="sitting",
            #title=_(u"$A $e, $B $Y", mapping=start_date),
            title = "%s: %s - %s" % (self.context.group.short_name, 
                self.context.start_date.strftime('%Y-%m-%d %H:%M'), 
                self.context.end_date.strftime('%H:%M')),
            description=_(u"Sitting Info"),
#            title = u"",
#            description = u"",
#
            links=links,
            actions=get_sitting_actions(self.context, self.request),
            items=get_sitting_items(
                self.context, self.request, include_actions=True),
            #categories=vocabulary.ItemScheduleCategories(self.context),
            new_category_url="%s/admin/content/categories/add?next_url=..." % site_url,
            status=self.context.status,
            reorder=reorder,
            )
Example #10
0
def get_sitting_items(sitting, request, include_actions=False):
    items = []

    if sitting.status in [
            sitting_wf_state[u'draft-agenda'].id,
            sitting_wf_state[u'published-agenda'].id
    ]:
        order = "planned_order"
    else:
        order = "real_order"

    schedulings = map(removeSecurityProxy,
                      sitting.items.batch(order_by=order, limit=None))

    for scheduling in schedulings:
        item = ProxyFactory(location_wrapped(scheduling.item, sitting))

        props = IDCDescriptiveProperties.providedBy(item) and item or \
                IDCDescriptiveProperties(item)

        discussions = tuple(scheduling.discussions.values())
        discussion = discussions and discussions[0] or None

        info = IWorkflowInfo(item, None)
        state_title = info.workflow().workflow.states[item.status].title

        record = {
            'title': props.title,
            'description': props.description,
            'name': stringKey(scheduling),
            'status': item.status,
            'type': item.type.capitalize,
            't': item.type,
            'state_title': state_title,
            #'category_id': scheduling.category_id,
            #'category': scheduling.category,
            'discussion': discussion,
            'delete_url':
            "%s/delete" % ui_url.absoluteURL(scheduling, request),
            'url': ui_url.absoluteURL(item, request)
        }

        if include_actions:
            record['actions'] = get_scheduling_actions(scheduling, request)
            record['workflow'] = get_workflow_actions(item, request)

            discussion_actions = get_discussion_actions(discussion, request)
            if discussion_actions:
                assert len(discussion_actions) == 1
                record['discussion_action'] = discussion_actions[0]
            else:
                record['discussion_action'] = None
        items.append(record)
    return items
Example #11
0
 def __call__(self, timestamp=None):
     trusted = removeSecurityProxy(self.context)
     trusted.__name__ = self.__name__
     interface.alsoProvides(trusted, ILocation)
     if (IBusinessSectionLayer.providedBy(self.request)
             and isinstance(trusted, SittingContainerSchedulingContext)):
         self.url = url.absoluteURL(trusted.__parent__.__parent__,
                                    self.request)
     else:
         self.url = url.absoluteURL(trusted.__parent__, self.request)
     self.title = ISchedulingContext(self.context).label
     return self.render()
Example #12
0
 def handle_add_and_add_another(self, action, data):
     ob = self.createAndAdd(data)
     name = self.domain_model.__name__
     if not self._next_url:
         if IWorkspaceMyDocumentsSectionLayer.providedBy(self.request):
             item_type = capi.get_type_info(ob).workflow_key
             self._next_url = url.absoluteURL(self.context, self.request) + \
                          "/add_%s?portal_status_message=%s Added" % \
                          (item_type, name)
         else:
             self._next_url = url.absoluteURL(self.context, self.request) + \
                          "/add?portal_status_message=%s Added" % name
Example #13
0
def get_actions(name, context, request):
    menu = component.getUtility(IBrowserMenu, name)
    items = menu.getMenuItems(context, request)

    site_url = ui_url.absoluteURL(getSite(), request)
    url = ui_url.absoluteURL(context, request)

    for item in items:
        item['url'] = ui_url.urljoin(url, item['action'])
        item['id'] = item['title'].lower().replace(' ', '-')
        item['icon'] = ui_url.urljoin(site_url, item['icon'])
    return items
Example #14
0
def get_actions(name, context, request):
    menu = component.getUtility(IBrowserMenu, name)
    items = menu.getMenuItems(context, request)

    site_url = url.absoluteURL(getSite(), request)
    _url = url.absoluteURL(context, request)

    for item in items:
        item["url"] = url.urljoin(_url, item["action"])
        item["id"] = item["title"].lower().replace(" ", "-")
        item["icon"] = url.urljoin(site_url, item["icon"])
    return items
Example #15
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        if (not interfaces.IWorkspaceOrAdminSectionLayer.providedBy(request) or
            interfaces.IFormEditLayer.providedBy(request) or
            IVersion.providedBy(context)
        ):
            return ()
        #!+wfc.workflow
        wf = IWorkflow(context, None)
        if wf is None:
            return ()
        #state = IWorkflowController(context).state_controller.get_status()
        wfc = IWorkflowController(context)
        wf = wfc.workflow  # !+wfc.workflow
        tids = wfc.getManualTransitionIds()

        parliament_id = getCurrentParliamentId()
        _url = url.absoluteURL(context, request)
        site_url2 = url.absoluteURL(getSite(), request)
        results = []
        for tid in tids:
            state_transition = wf.get_transition(tid)
            #Compares the current url to homepage to determine whether
            #we are on workspace or not.
            #Fix for bug 319
            #Someone should probably review this.
            if _url == site_url2:
                transition_url = site_url2 + \
                             "/archive/browse/parliaments/obj-" + \
                             str(parliament_id) + \
                             "/change_workflow_state?" + \
                             "transition=%s&next_url=..." % tid
            else:
                transition_url = _url + \
                             "/change_workflow_state?"\
                             "transition=%s&next_url=..." % tid
            extra = {"id": "workflow-transition-%s" % tid,
                     "separator": None,
                     "class": ""}
            state_title = translate(str(state_transition.title),
                    domain="bungeni",
                    context=request)
            results.append(
                dict(title=state_title,
                     description="",
                     action=transition_url,
                     selected=False,
                     transition_id=tid,
                     icon=None,
                     extra=extra,
                     submenu=None))

        return results
Example #16
0
def get_actions(name, context, request):
    menu = component.getUtility(IBrowserMenu, name)
    items = menu.getMenuItems(context, request)

    site_url = url.absoluteURL(getSite(), request)
    _url = url.absoluteURL(context, request)

    for item in items:
        item["url"] = url.urljoin(_url, item["action"])
        item["id"] = item["title"].lower().replace(" ", "-")
        item["icon"] = url.urljoin(site_url, item["icon"])
    return items
Example #17
0
 def handle_add_and_add_another(self, action, data):
     ob = self.createAndAdd(data)
     name = self.domain_model.__name__
     if not self._next_url:
         if IWorkspaceMyDocumentsSectionLayer.providedBy(self.request):
             item_type = capi.get_type_info(ob).workflow_key
             self._next_url = url.absoluteURL(self.context, self.request) + \
                          "/add_%s?portal_status_message=%s Added" % \
                          (item_type, name)
         else:
             self._next_url = url.absoluteURL(self.context, self.request) + \
                          "/add?portal_status_message=%s Added" % name
Example #18
0
def get_actions(name, context, request):
    menu = component.getUtility(IBrowserMenu, name)
    items = menu.getMenuItems(context, request)
    
    site_url = ui_url.absoluteURL(getSite(), request)
    url = ui_url.absoluteURL(context, request)
    
    for item in items:
        item['url'] = ui_url.urljoin(url, item['action'])
        item['id'] = item['title'].lower().replace(' ', '-')
        item['icon'] = ui_url.urljoin(site_url, item['icon'])
    return items
Example #19
0
def get_sitting_items(sitting, request, include_actions=False):
    items = []

    if sitting.status in get_states("groupsitting", 
                                keys=["draft_agenda", "published_agenda"]):
        order = "planned_order"
    else:
        order = "real_order"

    schedulings = map(
        removeSecurityProxy,
        sitting.items.batch(order_by=order, limit=None))
    site_url = url.absoluteURL(getSite(), request)
    for scheduling in schedulings:
        item = ProxyFactory(location_wrapped(scheduling.item, sitting))
       
        props = IDCDescriptiveProperties.providedBy(item) and item or \
                IDCDescriptiveProperties(item)

        discussions = tuple(scheduling.discussions.values())
        discussion = discussions and discussions[0] or None

        info = IWorkflowInfo(item, None)
        state_title = info.workflow().workflow.states[item.status].title
        
        record = {
            'title': props.title,
            'description': props.description,
            'name': stringKey(scheduling),
            'status': item.status,
            'type': item.type.capitalize,
            't':item.type,
            'state_title': state_title,
            #'category_id': scheduling.category_id,
            #'category': scheduling.category,
            'discussion': discussion,
            'delete_url': "%s/delete" % url.absoluteURL(scheduling, request),
            'url': url.set_url_context(site_url+('/business/%ss/obj-%s' % (item.type, item.parliamentary_item_id)))}
        
        if include_actions:
            record['actions'] = get_scheduling_actions(scheduling, request)
            record['workflow'] = get_workflow_actions(item, request)

            discussion_actions = get_discussion_actions(discussion, request)
            if discussion_actions:
                assert len(discussion_actions) == 1
                record['discussion_action'] = discussion_actions[0]
            else:
                record['discussion_action'] = None
        items.append(record)
    return items
Example #20
0
    def process_form(self, data):
        class optionsobj(object):
            """Object that holds all the options."""

        self.options = optionsobj()
        if not hasattr(self, "short_name"):
            if "short_name" in data:
                self.short_name = data["short_name"]
        self.sittings = []
        if IGroupSitting.providedBy(self.context):
            trusted = removeSecurityProxy(self.context)
            order = "real_order" if self.display_minutes else "planned_order"
            trusted.item_schedule.sort(key=operator.attrgetter(order))
            self.sittings.append(trusted)
            self.start_date = self.context.start_date
            self.end_date = self.get_end_date(self.start_date,
                                              self.time_span(data))
        else:
            self.start_date = data["date"] if "date" in data else \
                                                datetime.datetime.today().date()
            self.end_date = self.get_end_date(self.start_date,
                                              self.time_span(data))
            sittings = ISchedulingContext(self.context).get_sittings(
                self.start_date, self.end_date).values()
            self.sittings = map(removeSecurityProxy, sittings)
        self.ids = ""
        for sitting in self.sittings:
            self.ids += str(sitting.group_sitting_id) + ","

        def cleanup(string):
            return string.lower().replace(" ", "_")

        for item_type in data["item_types"]:
            itemtype = cleanup(item_type)
            type_key = itemtype.rstrip("s").replace("_", "")
            setattr(self.options, type_key, True)
            setattr(self.options, itemtype, True)
            for option in data[itemtype + "_options"]:
                opt_key = "".join(
                    (cleanup(itemtype.rstrip("s")).replace("_", ""), "_",
                     cleanup(option)))
                setattr(self.options, opt_key, True)
        if self.display_minutes:
            self.link = url.absoluteURL(self.context, self.request) \
                                                + "/votes-and-proceedings"
        else:
            self.link = url.absoluteURL(self.context, self.request) + "/agenda"
        try:
            self.group = self.context.group
        except:
            self.group = ISchedulingContext(self.context).get_group()
Example #21
0
 def __call__(self, timestamp=None):
     log.debug("CalendarView.__call__: %s" % (self.context))
     trusted = removeSecurityProxy(self.context)
     trusted.__name__ = self.__name__
     interface.alsoProvides(trusted, ILocation)
     if (IBusinessSectionLayer.providedBy(self.request) and 
         isinstance(trusted, SittingContainerSchedulingContext)):
         self.url = url.absoluteURL(trusted.__parent__.__parent__, self.request)
     else:
         self.url = url.absoluteURL(trusted.__parent__, self.request)
     self.title = ISchedulingContext(self.context).label
     log.debug(debug.interfaces(self))
     log.debug(debug.location_stack(self))
     return self.render()
Example #22
0
    def process_form(self, data):
        class optionsobj(object):
            '''Object that holds all the options.'''
            pass

        self.options = optionsobj()
        if not hasattr(self, 'doc_type'):
            if 'doc_type' in data:
                self.doc_type = data['doc_type']
        self.sittings = []

        if IGroupSitting.providedBy(self.context):
            session = Session()
            st = self.context.sitting_id
            sitting = session.query(domain.GroupSitting).get(st)
            self.sittings.append(sitting)
            back_link = ui_url.absoluteURL(self.context,
                                           self.request) + '/schedule'
        elif ISchedulingContext.providedBy(self.context):
            self.sittings = self.get_sittings(self.start_date, self.end_date)
            back_link = ui_url.absoluteURL(self.context, self.request)
        else:
            raise NotImplementedError
        count = 0
        self.ids = ""
        for s in self.sittings:
            self.ids = self.ids + str(s.sitting_id) + ","

        def cleanup(string):
            return string.lower().replace(" ", "_")

        for item_type in data['item_types']:
            itemtype = cleanup(item_type)
            setattr(self.options, itemtype, True)
            for option in data[itemtype + "_options"]:
                setattr(self.options, cleanup(itemtype + "_" + option), True)

        if self.display_minutes:
            self.link = ui_url.absoluteURL(
                self.context, self.request) + '/votes-and-proceedings'
        else:
            self.link = ui_url.absoluteURL(self.context,
                                           self.request) + '/agenda'

        try:
            self.group = self.context.get_group()
        except:
            session = Session()
            self.group = session.query(domain.Group).get(self.context.group_id)
Example #23
0
 def process_form(self, data):
     class optionsobj(object):
         """Object that holds all the options."""
     self.options = optionsobj()
     if not hasattr(self, "short_name"):
         if "short_name" in data:
             self.short_name = data["short_name"]
     self.sittings = []
     if IGroupSitting.providedBy(self.context):
         trusted = removeSecurityProxy(self.context)
         order = "real_order" if self.display_minutes else "planned_order"
         trusted.item_schedule.sort(key=operator.attrgetter(order))
         self.sittings.append(trusted)
         self.start_date = self.context.start_date
         self.end_date = self.get_end_date(self.start_date,
                                                        self.time_span(data))
     else:
         self.start_date = data["date"] if "date" in data else \
                                             datetime.datetime.today().date()
         self.end_date = self.get_end_date(self.start_date, 
                                                        self.time_span(data))
         sittings = ISchedulingContext(self.context).get_sittings(
                                     self.start_date, self.end_date).values()
         self.sittings = map(removeSecurityProxy,sittings)
     self.ids = ""
     for sitting in self.sittings:
         self.ids += str(sitting.group_sitting_id) + ","
     def cleanup(string):
         return string.lower().replace(" ", "_")
     for item_type in data["item_types"]:
         itemtype = cleanup(item_type)
         type_key = itemtype.rstrip("s").replace("_", "")
         setattr(self.options, type_key, True)
         setattr(self.options, itemtype, True)
         for option in data[itemtype + "_options"]:
             opt_key = "".join((cleanup(itemtype.rstrip("s")).replace("_",""),
                 "_", cleanup(option)
             ))
             setattr(self.options, opt_key, True)
     if self.display_minutes:
         self.link = url.absoluteURL(self.context, self.request) \
                                             + "/votes-and-proceedings"
     else :
         self.link = url.absoluteURL(self.context, self.request) + "/agenda"
     try:
         self.group = self.context.group
     except:
         self.group = ISchedulingContext(self.context).get_group()
Example #24
0
 def _get_path(self, context):
     """Return the current path as a list
     """
     descriptor = None
     name = None 
     path = []
     
     context = proxy.removeSecurityProxy(context)
     if context is None:
         return path
     # Proof-of-concept: support for selective inclusion in breadcrumb trail:
     # a view marked with an attribute __crumb__=False is NOT included in 
     # the breadcrumb trail (see core/app.py: "workspace" Section)
     if not getattr(context, "__crumb__", True):
         return path
     if context.__parent__ is not None:
         path.extend(self._get_path(context.__parent__))
     
     _url = url.absoluteURL(context, self.request)
     
     # Append a trailing slash to each breadcrumb entry so that
     # the right context is always maintained when the breadcrumbs
     # are used for navigation.
     _url = url.set_url_context(_url)
     
     title = _get_title_from_context(context)
     
     if title is not None:
         path.append({ 'name':title, 'url':_url})
     
     return path
 def handle_generate_takes(self, action, data):
     transcribers = self.get_transcribers()
     sitting = self.context.sitting
     take_time_delta = datetime.timedelta(seconds=self.get_take_duration())
     current_end_time = sitting.start_date
     current_start_time = sitting.start_date
     take_count = 0
     session = Session()
     while current_end_time < sitting.end_date:
         take = domain.DebateTake()
         take.debate_record_id = self.context.debate_record_id
         take.start_date = current_start_time
         if ((current_end_time + take_time_delta) > sitting.end_date):
             current_end_time = sitting.end_date
         else:
             current_end_time = current_end_time + take_time_delta
             current_start_time = current_end_time + datetime.timedelta(
                 seconds=1)
         take.end_date = current_end_time
         take.transcriber_id = transcribers[
             take_count % len(transcribers)].user_id
         take.debate_take_name = self.get_take_name(take_count)
         take_count = take_count+1
         session.add(take)
     session.flush()
     next_url = url.absoluteURL(self, self.request)
     self.request.response.redirect(next_url)
Example #26
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        group_id = context.get_group().group_id
        contexts = self.getSchedulingContexts(request)
        results = []
        for context in contexts:
            group = context.get_group()
            if group.group_id == group_id:
                continue
            _url = url.absoluteURL(context, request)
            extra = {
                # !+HTML_ID(mario, may-2011) what is the use of making the
                # (presumably HTML, used for styling... ) id be derived from
                # an sql surrogate pk ?!
                "id": "calendar-link-%s" % group.group_id,
                "separator": None,
                "class": ""
            }
            #!+(miano. nov-2010) description is set to be the same as title
            # below because the description of a group is a rich text field
            # that may have HTML formatting etc thus is not suitable to be
            # used as a tootip
            results.append(
                dict(title=context.label,
                     description=context.label,
                     action=_url,
                     selected=False,
                     icon=None,
                     extra=extra,
                     submenu=None))

        # sort on title
        results.sort(key=operator.itemgetter("title"))
        return results
Example #27
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""

        group_id = context.get_group().group_id
        contexts = self.getSchedulingContexts()

        results = []
        for context in contexts:
            group = context.get_group()
            if group.group_id == group_id:
                continue

            url = ui_url.absoluteURL(context, request)

            extra = {
                'id': 'calendar-link-%s' % group.group_id,
                'separator': None,
                'class': ''
            }

            results.append(
                dict(title=context.label,
                     description=group.description,
                     action=url,
                     selected=False,
                     icon=None,
                     extra=extra,
                     submenu=None))

        # sort on title
        results.sort(key=operator.itemgetter("title"))

        return results
Example #28
0
 def handle_cancel(self, action, data):
     """Cancelling redirects to the listing."""
     session = Session()
     if not self._next_url:
         self._next_url = url.absoluteURL(self.__parent__, self.request)
     self.request.response.redirect(self._next_url)
     session.close()
Example #29
0
    def handle_add_and_another(self, action, data):
        self.createAndAdd(data)
        name = self.domain_model.__name__

        if not self._next_url:
            self._next_url = url.absoluteURL(self.context, self.request) + \
                             "/add?portal_status_message=%s Added" % name
Example #30
0
 def getMenuItems(self, context, request):
     results = []
     unproxied = proxy.removeSecurityProxy(context.__parent__)
     try:
         items = unproxied.items()
     except AttributeError:
         items = []
         for key, info in capi.iter_type_info():
             if IScheduleContent.implementedBy(info.domain_model):
                 name = naming.plural(key)
                 if hasattr(unproxied, name):
                     items.append((name, getattr(unproxied, name)))
     for key, item in items:
         if not IAlchemistContainer.providedBy(item): continue
         if not IScheduleContent.implementedBy(item.domain_model): continue
         type_info = capi.get_type_info(item.domain_model)
         permission = "bungeni.%s.Add" % (
             type_info.workflow_key
             or naming.type_key("model_name", item.domain_model.__name__))
         if not checkPermission(permission, context): continue
         dc_adapter = IDCDescriptiveProperties(item, None)
         if dc_adapter:
             _title = dc_adapter.title
         else:
             _title = getattr(item, "title", "Unknown")
         results.append(
             dict(title=_title,
                  description=_title,
                  action=url.absoluteURL(item, request),
                  selected=False,
                  icon=None,
                  extra={},
                  submenu=None))
     return results
Example #31
0
 def __call__(self, timestamp=None):
     trusted = removeSecurityProxy(self.context)
     trusted.__name__ = self.__name__
     interface.alsoProvides(trusted, ILocation)
     self.url = url.absoluteURL(trusted.__parent__, self.request)
     self.title = ISchedulingContext(self.context).label
     return self.render()
Example #32
0
 def getMenuItems(self, context, request):
     results = []
     try:
         items = proxy.removeSecurityProxy(context.__parent__).items()
     except AttributeError:
         return results
     for key, item in items:
         if not IAlchemistContainer.providedBy(item): continue
         if not IScheduleText.implementedBy(item.domain_model): continue
         dc_adapter = IDCDescriptiveProperties(item, None)
         if dc_adapter:
             _title = dc_adapter.title
         else:
             _title = getattr(item, "title", "Unknown")
         results.append(dict(
             title=_title,
             description=_title,
             action = url.absoluteURL(item, request),
             selected=False,
             icon=None,
             extra={},
             submenu=None
             
         ))
     return results
Example #33
0
 def handle_cancel(self, action, data):
     """Cancelling redirects to the listing."""
     session = Session()
     if not self._next_url:
         self._next_url = url.absoluteURL(self.__parent__, self.request)
     self.request.response.redirect(self._next_url)
     session.close()
Example #34
0
 def __new__(cls, context, request, view, manager):
     chain = _get_context_chain(context)
     chain.pop() # bungeni_app
     top_section = chain.pop()
     
     if not chain:
         return
     
     # we require the tree to begin with a container object
     if not IReadContainer.providedBy(chain[-1]):
         return
     
     # remove any views from navigation tree
     if not(IAlchemistContent.providedBy(chain[0]) or 
             IAlchemistContainer.providedBy(chain[0]) or
             ISection.providedBy(chain[0])
         ):
         chain.pop(0)
     
     subcontext = chain[-1]
     if (len(chain) > 1 or
             IReadContainer.providedBy(subcontext) and 
             not IAlchemistContainer.providedBy(subcontext) and 
             len(subcontext)
         ):
         inst = object.__new__(cls, context, request, view, manager)
         inst.chain = chain
         inst.top_section_url = url.absoluteURL(top_section, request)
         inst.id_prefix = "nav"
         return inst
Example #35
0
 def __init__(self,  context, request, view, manager):
     self.context = context
     self.request = request
     self.__parent__= view
     self.manager = manager
     self.path = []
     self.site_url = url.absoluteURL(getSite(), self.request)
Example #36
0
 def add_container_menu_items(self, context, container):
     request = self.request
     
     _url = url.absoluteURL(container, request)
     
     if IReadContainer.providedBy(container):
         #XXX should be the same in all containers ?
         container=proxy.removeSecurityProxy(container)
         for name, item in container.items():
             if context is None:
                 selected = False
             else:
                 selected = url.same_path_names(context.__name__, name)
             item = proxy.removeSecurityProxy(item)
             if IDCDescriptiveProperties.providedBy(item):
                 title = item.title
             else:
                 props = IDCDescriptiveProperties(item)
                 title = props.title
             # only items with valid title
             if title is not None:
                 self.items.append(url.get_menu_item_descriptor(
                         title, selected, _url, name))
     default_view_name = queryDefaultViewName(container, self.request)
     default_view = component.queryMultiAdapter(
         (container, self.request), name=default_view_name)
     if hasattr(default_view, "title") and default_view.title is not None:
         self.items.insert(0, url.get_menu_item_descriptor(
                 default_view.title, 
                 sameProxiedObjects(container, self.context), 
                 _url))
Example #37
0
 def getMenuItems(self, context, request):
     """Return menu item entries in a TAL-friendly form."""
     _url = url.absoluteURL(context, request)
     if checkPermission("bungeni.translation.Add", context):
         language = get_language(context)
         available = get_available_translations(context)
         results = []
         for name, obj in get_all_languages().items():
             title = obj["name"]
             # skip the current language
             if name == language:
                 continue
             action_url = "%s/translate?language=%s" % (_url, name)
             extra = {
                 "id": "translation-action-%s" % name,
                 "separator": None,
                 "class": ""
             }
             translation_id = available.get(name)
             results.append(
                 dict(title=title,
                      description="",
                      action=action_url,
                      selected=translation_id is not None,
                      icon=None,
                      extra=extra,
                      submenu=None))
         return results
     else:
         return None
Example #38
0
    def add_container_menu_items(self, context, container):
        request = self.request

        _url = url.absoluteURL(container, request)

        if IReadContainer.providedBy(container):
            #XXX should be the same in all containers ?
            container = proxy.removeSecurityProxy(container)
            for name, item in container.items():
                if context is None:
                    selected = False
                else:
                    selected = url.same_path_names(context.__name__, name)
                item = proxy.removeSecurityProxy(item)
                if IDCDescriptiveProperties.providedBy(item):
                    title = item.title
                else:
                    props = IDCDescriptiveProperties(item)
                    title = props.title
                # only items with valid title
                if title is not None:
                    self.items.append(
                        url.get_menu_item_descriptor(title, selected, _url,
                                                     name))
        default_view_name = queryDefaultViewName(container, self.request)
        default_view = component.queryMultiAdapter((container, self.request),
                                                   name=default_view_name)
        if hasattr(default_view, "title") and default_view.title is not None:
            self.items.insert(
                0,
                url.get_menu_item_descriptor(
                    default_view.title,
                    sameProxiedObjects(container, self.context), _url))
Example #39
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        group_id = context.get_group().group_id
        contexts = self.getSchedulingContexts(request)
        results = []
        for context in contexts:
            group = context.get_group()
            if group.group_id == group_id:
                continue
            _url = url.absoluteURL(context, request)
            extra = {
                # !+HTML_ID(mario, may-2011) what is the use of making the
                # (presumably HTML, used for styling... ) id be derived from
                # an sql surrogate pk ?!
                "id": "calendar-link-%s" % group.group_id,
                "separator": None,
                "class": ""
            }
            #!+(miano. nov-2010) description is set to be the same as title
            # below because the description of a group is a rich text field
            # that may have HTML formatting etc thus is not suitable to be
            # used as a tootip
            results.append(dict(
                    title=context.label,
                    description=context.label,
                    action=_url,
                    selected=False,
                    icon=None,
                    extra=extra,
                    submenu=None
            ))

        # sort on title
        results.sort(key=operator.itemgetter("title"))
        return results
Example #40
0
 def __init__(self, context, request, view, manager):
     self.context = context
     self.request = request
     self.__parent__ = view
     self.manager = manager
     self.path = []
     self.site_url = url.absoluteURL(getSite(), self.request)
Example #41
0
    def rssItems(self):
        """Elements of <item> 
        A channel may contain any number of <item>s. 
        An item may represent a "story" -- much like a story in a newspaper or magazine; 
        if so its description is a synopsis of the story, and the link points to the full story. 
        An item may also be complete in itself, if so, the description contains the text (entity-encoded HTML is allowed; 
        see examples), and the link and title may be omitted. 
        All elements of an item are optional, 
        however at least one of title or description must be present. 
        
        title	The title of the item.
        link	The URL of the item.
        description     	The item synopsis.
        pubDate	Indicates when the item was published. 
        """

        bill_id = self.context.bill_id

        results = queries.execute_sql(statements.sql_bill_timeline,
                                      item_id=bill_id)
        path = url.absoluteURL(self.context, self.request)
        rlist = []
        for result in results:
            rlist.append({
                'title': result.atype,
                'description': result.title,
                'date': result.adate.isoformat()
            })
        return rlist
Example #42
0
    def __new__(cls, context, request, view, manager):
        chain = _get_context_chain(context)
        chain.pop()  # bungeni_app
        top_section = chain.pop()

        if not chain:
            return

        # we require the tree to begin with a container object
        if not IReadContainer.providedBy(chain[-1]):
            return

        # remove any views from navigation tree
        if not (IAlchemistContent.providedBy(chain[0])
                or IAlchemistContainer.providedBy(chain[0])
                or ISection.providedBy(chain[0])):
            chain.pop(0)

        subcontext = chain[-1]
        if (len(chain) > 1 or IReadContainer.providedBy(subcontext)
                and not IAlchemistContainer.providedBy(subcontext)
                and len(subcontext)):
            inst = object.__new__(cls, context, request, view, manager)
            inst.chain = chain
            inst.top_section_url = url.absoluteURL(top_section, request)
            inst.id_prefix = "nav"
            return inst
Example #43
0
 def handle_edit_save_and_view(self, action, data):
     """Saves the  document and redirects to its view page"""
     self._do_save(data)
     if not self._next_url:
         self._next_url = url.absoluteURL(self.context, self.request) + \
             "?portal_status_message= Saved"
     self.request.response.redirect(self._next_url)
Example #44
0
    def rssItems(self):
        """Elements of <item> 
        A channel may contain any number of <item>s. 
        An item may represent a "story" -- much like a story in a newspaper or magazine; 
        if so its description is a synopsis of the story, and the link points to the full story. 
        An item may also be complete in itself, if so, the description contains the text (entity-encoded HTML is allowed; 
        see examples), and the link and title may be omitted. 
        All elements of an item are optional, 
        however at least one of title or description must be present. 
        
        title	The title of the item.
        link	The URL of the item.
        description     	The item synopsis.
        pubDate	Indicates when the item was published. 
        """

        bill_id = self.context.bill_id

        results = queries.execute_sql(
                            statements.sql_bill_timeline, item_id=bill_id)
        path = url.absoluteURL(self.context, self.request)
        rlist = []
        for result in results:
            rlist.append({
                    'title': result.atype,
                    'description': result.title,
                    'date': result.adate.isoformat()
                })
        return rlist
Example #45
0
 def getMenuItems(self, context, request):
     """Return menu item entries in a TAL-friendly form."""
     _url = url.absoluteURL(context, request)
     if checkPermission("bungeni.translation.Add", context):
         language = get_language(context)
         available = get_available_translations(context)
         results = []
         for name, obj in get_all_languages().items():
             title = obj["name"]
             # skip the current language
             if name == language:
                 continue
             action_url = "%s/translate?language=%s" % (_url, name)
             extra = {
                 "id": "translation-action-%s" % name,
                 "separator": None,
                 "class": ""
             }
             translation_id = available.get(name)
             results.append(
                 dict(title=title,
                      description="",
                      action=action_url,
                      selected=translation_id is not None,
                      icon=None,
                      extra=extra,
                      submenu=None))
         return results
     else:
         return None
Example #46
0
    def handle_add_and_another(self, action, data):
        self.createAndAdd(data)
        name = self.domain_model.__name__

        if not self._next_url:
            self._next_url = url.absoluteURL(self.context, self.request) + \
                             "/add?portal_status_message=%s Added" % name
Example #47
0
 def handle_add_and_add_another(self, action, data):
     ob = self.createAndAdd(data)
     name = self.domain_model.__name__
     if not self._next_url:
         self._next_url = "%s/%s?portal_status_message=%s Added" % (
             url.absoluteURL(self.context,
                             self.request), self.add_action_verb, name)
Example #48
0
 def handle_generate_takes(self, action, data):
     transcribers = self.get_transcribers()
     sitting = self.context.sitting
     take_time_delta = datetime.timedelta(seconds=self.get_take_duration())
     current_end_time = sitting.start_date
     current_start_time = sitting.start_date
     take_count = 0
     session = Session()
     while current_end_time < sitting.end_date:
         take = domain.DebateTake()
         take.debate_record_id = self.context.debate_record_id
         take.start_date = current_start_time
         if ((current_end_time + take_time_delta) > sitting.end_date):
             current_end_time = sitting.end_date
         else:
             current_end_time = current_end_time + take_time_delta
             current_start_time = current_end_time + datetime.timedelta(
                 seconds=1)
         take.end_date = current_end_time
         take.transcriber_id = transcribers[take_count %
                                            len(transcribers)].user_id
         take.debate_take_name = self.get_take_name(take_count)
         take_count = take_count + 1
         session.add(take)
     session.flush()
     next_url = url.absoluteURL(self, self.request)
     self.request.response.redirect(next_url)
Example #49
0
 def handle_edit_save_and_view(self, action, data):
     """Saves the  document and redirects to its view page"""
     self._do_save(data)
     if not self._next_url:
         self._next_url = url.absoluteURL(self.context, self.request) + \
             "?portal_status_message= Saved"
     self.request.response.redirect(self._next_url)
Example #50
0
    def _get_path(self, context):
        """Return the current path as a list
        """
        descriptor = None
        name = None
        path = []

        context = proxy.removeSecurityProxy(context)
        if context is None:
            return path
        # Proof-of-concept: support for selective inclusion in breadcrumb trail:
        # a view marked with an attribute __crumb__=False is NOT included in
        # the breadcrumb trail (see core/app.py: "workspace" Section)
        if not getattr(context, "__crumb__", True):
            return path
        if context.__parent__ is not None:
            path.extend(self._get_path(context.__parent__))

        _url = url.absoluteURL(context, self.request)

        # Append a trailing slash to each breadcrumb entry so that
        # the right context is always maintained when the breadcrumbs
        # are used for navigation.
        _url = url.set_url_context(_url)

        title = _get_title_from_context(context)

        if title is not None:
            path.append({'name': title, 'url': _url})

        return path
Example #51
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""
        url = ui_url.absoluteURL(context, request)
        if checkPermission("bungeni.translation.Add", context):
            language = get_language(context)
            available = get_available_translations(context)
            results = []
            for name, obj in get_all_languages().items():
                title = obj['name']
                
                # skip the current language
                if name == language:
                    continue

                translation_id = available.get(name)
                selected = translation_id is not None

                action_url = url + '/translate?language=%s' % name

                extra = {'id': 'translation-action-%s' % name,
                         'separator': None,
                         'class': ''}
                
                results.append(
                    dict(title=title,
                         description="",
                         action=action_url,
                         selected=selected,
                         icon=None,
                         extra=extra,
                         submenu=None))
                         
            return results
        else:
            return None
Example #52
0
    def render(self, today, template=None):
        if template is None:
            template = self.template

        calendar_url = url.absoluteURL(self.context.__parent__, self.request)
        cal_date = removeSecurityProxy(self.context.date)

        sittings = self.context.get_sittings()
        return template(
            display="daily",
#            title=_(u"$B $Y", mapping=date),
            title = cal_date,
#
            day={
                "formatted": datetime.datetime.strftime(cal_date, "%A %d"),
                "id": datetime.datetime.strftime(cal_date, "%Y-%m-%d"),
                "today": cal_date == today,
                "url": "%s/%d" % (calendar_url, cal_date.totimestamp()),
                },
            hours=range(6,21),
            week_no=date.isocalendar()[1],
            week_day=date.weekday(),
            links={
                "previous": "%s/%d" % (
                    calendar_url, (cal_date - timedelta(days=1)).totimestamp()),
                "next": "%s/%d" % (
                    calendar_url, (cal_date + timedelta(days=1)).totimestamp()),
                },
            sittings_map = create_sittings_map(sittings, self.request),
            )
Example #53
0
    def getMenuItems(self, context, request):
        """Return menu item entries in a TAL-friendly form."""

        group_id = context.get_group().group_id
        contexts = self.getSchedulingContexts(request)
        
        results = []
        for context in contexts:
            group = context.get_group()
            if group.group_id==group_id:
                continue
            
            url = ui_url.absoluteURL(context, request)
            
            extra = {'id': 'calendar-link-%s' % group.group_id,
                     'separator': None,
                     'class': ''}

            results.append(
                dict(title=context.label,
                     description=group.description,
                     action=url,
                     selected=False,
                     icon=None,
                     extra=extra,
                     submenu=None))

        # sort on title
        results.sort(key=operator.itemgetter("title"))

        return results
Example #54
0
    def render(self, today, template=None):
        if template is None:
            template = self.template

        calendar_url = ui_url.absoluteURL(self.context.__parent__,
                                          self.request)
        date = removeSecurityProxy(self.context.date)

        sittings = self.context.get_sittings()
        return template(
            display="daily",
            #            title=_(u"$B $Y", mapping=date),
            title=date,
            #
            day={
                'formatted': datetime.datetime.strftime(date, '%A %d'),
                'id': datetime.datetime.strftime(date, '%Y-%m-%d'),
                'today': date == today,
                'url': "%s/%d" % (calendar_url, date.totimestamp()),
            },
            hours=range(6, 21),
            week_no=date.isocalendar()[1],
            week_day=date.weekday(),
            links={
                'previous':
                "%s/%d" % (calendar_url,
                           (date - timedelta(days=1)).totimestamp()),
                'next':
                "%s/%d" % (calendar_url,
                           (date + timedelta(days=1)).totimestamp()),
            },
            sittings_map=create_sittings_map(sittings, self.request),
        )
Example #55
0
    def process_form(self, data):
        class optionsobj(object):
            """Object that holds all the options."""
            pass

        self.options = optionsobj()
        if not hasattr(self, "short_name"):
            if "short_name" in data:
                self.short_name = data["short_name"]
        self.sittings = []

        if IGroupSitting.providedBy(self.context):
            trusted = removeSecurityProxy(self.context)
            order = "real_order" if self.display_minutes else "planned_order"
            trusted.item_schedule.sort(key=operator.attrgetter(order))
            self.sittings.append(trusted)
            back_link = url.absoluteURL(self.context,
                                        self.request) + "/schedule"
        elif ISchedulingContext.providedBy(self.context):
            self.sittings = self.get_sittings(self.start_date, self.end_date)
            back_link = url.absoluteURL(self.context, self.request)
        else:
            raise NotImplementedError
        self.ids = ""
        for s in self.sittings:
            self.ids = self.ids + str(s.group_sitting_id) + ","

        def cleanup(string):
            return string.lower().replace(" ", "_")

        for item_type in data["item_types"]:
            itemtype = cleanup(item_type)
            setattr(self.options, itemtype, True)
            for option in data[itemtype + "_options"]:
                setattr(self.options, cleanup(itemtype + "_" + option), True)

        if self.display_minutes:
            self.link = url.absoluteURL(
                self.context, self.request) + "/votes-and-proceedings"
        else:
            self.link = url.absoluteURL(self.context, self.request) + "/agenda"

        try:
            self.group = self.context.get_group()
        except:
            session = Session()
            self.group = session.query(domain.Group).get(self.context.group_id)
Example #56
0
 def handle_add_and_add_another(self, action, data):
     ob = self.createAndAdd(data)
     name = self.domain_model.__name__
     if not self._next_url:
         self._next_url = "%s/%s?portal_status_message=%s Added" % (
                 url.absoluteURL(self.context, self.request),
                 self.add_action_verb, 
                 name)
Example #57
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 #58
0
 def getDataTableConfig(self):
     config = {}
     config['columns'], config['fields'] = self.getFieldColumns()
     config['data_url'] = self.getDataSourceURL()
     config['table_id'] = self.prefix
     config['link_url'] = ui_url.absoluteURL(self.context, self.request)
     config['context_name'] = self.context.__name__
     return config
Example #59
0
 def handle_preview(self, action, data):
     self.process_form(data)
     #import pdb; pdb.set_trace()
     self.save_link = ui_url.absoluteURL(self.context,
                                         self.request) + "/save_report"
     self.body_text = self.result_template()
     #import pdb; pdb.set_trace()
     return self.main_result_template()