コード例 #1
0
def _get_title_from_context(context):
    title = None
    if IAlchemistContent.providedBy(context):
        if IDCDescriptiveProperties.providedBy(context):
            title = context.title
        else:
            props = IDCDescriptiveProperties(context, None)
            if props is not None:
                title = props.title
            else:
                ''' !+
AttributeError: 'GroupAddress' object has no attribute 'short_name':   File "/home/undesa/bungeni/cap_installs/bungeni_install/bungeni/releases/20100305100101/src/bungeni.main/bungeni/ui/viewlets/navigation.py", line 59, in _get_title_from_context
                #title = context.short_name 
So, we temporarily default the above to the context.__class__.__name__:
                '''
                title = getattr(context, "short_name", 
                    context.__class__.__name__)
    elif IAlchemistContainer.providedBy(context):
        domain_model = context._class 
        try:
            descriptor = queryModelDescriptor(domain_model)
        except:
            descriptor = None
            name = ""
        if descriptor:
            name = getattr(descriptor, 'container_name', None)
            if name is None:
                name = getattr(descriptor, 'display_name', None)
        if not name:
            name = getattr(context, '__name__', None)
        title = name
    elif ILocation.providedBy(context) and \
         IDCDescriptiveProperties.providedBy(context):
        title = context.title
    return title
コード例 #2
0
def get_title_from_context(context):
    title = None
    if IAlchemistContent.providedBy(context):
        if IDCDescriptiveProperties.providedBy(context):
            title = context.title
        else:
            props = IDCDescriptiveProperties(context, None)
            if props is not None:
                title = props.title
            else:
                title = context.short_name
    elif IAlchemistContainer.providedBy(context):
        domain_model = context._class
        try:
            descriptor = queryModelDescriptor(domain_model)
        except:
            descriptor = None
            name = ""
        if descriptor:
            name = getattr(descriptor, 'container_name', None)
            if name is None:
                name = getattr(descriptor, 'display_name', None)
        if not name:
            name = getattr(context, '__name__', None)
        title = name
    elif ILocation.providedBy(context) and \
         IDCDescriptiveProperties.providedBy(context):
        title = context.title
    return title
コード例 #3
0
def get_title_from_context(context):
    title = None
    if IAlchemistContent.providedBy(context):
        if IDCDescriptiveProperties.providedBy(context):
            title = context.title
        else:
            props = IDCDescriptiveProperties(context, None)
            if props is not None:
                title = props.title
            else:
                title = context.short_name
    elif IAlchemistContainer.providedBy(context):
        domain_model = context._class 
        try:
            descriptor = queryModelDescriptor(domain_model)
        except:
            descriptor = None
            name = ""
        if descriptor:
            name = getattr(descriptor, 'container_name', None)
            if name is None:
                name = getattr(descriptor, 'display_name', None)
        if not name:
            name = getattr(context, '__name__', None)
        title = name
    elif ILocation.providedBy(context) and \
         IDCDescriptiveProperties.providedBy(context):
        title = context.title
    return title
コード例 #4
0
def _get_title_from_context(context):
    title = None
    if IAlchemistContent.providedBy(context):
        if IDCDescriptiveProperties.providedBy(context):
            title = context.title
        else:
            props = IDCDescriptiveProperties(context, None)
            if props is not None:
                title = props.title
            else:
                ''' !+
AttributeError: 'GroupAddress' object has no attribute 'short_name':   File "/home/undesa/bungeni/cap_installs/bungeni_install/bungeni/releases/20100305100101/src/bungeni.main/bungeni/ui/viewlets/navigation.py", line 59, in _get_title_from_context
                #title = context.short_name 
So, we temporarily default the above to the context.__class__.__name__:
                '''
                title = getattr(context, "short_name",
                                context.__class__.__name__)
    elif IAlchemistContainer.providedBy(context):
        domain_model = context._class
        try:
            descriptor = queryModelDescriptor(domain_model)
        except:
            descriptor = None
            name = ""
        if descriptor:
            name = getattr(descriptor, 'container_name', None)
            if name is None:
                name = getattr(descriptor, 'display_name', None)
        if not name:
            name = getattr(context, '__name__', None)
        title = name
    elif ILocation.providedBy(context) and \
         IDCDescriptiveProperties.providedBy(context):
        title = context.title
    return title
コード例 #5
0
    def form_name(self):
        if IVersion.providedBy(self.context):
            context = self.context.head

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

        if self.is_translation:
            language = get_language_by_name(self.context.language)["name"]
            return _(u"edit_translation_legend",
                     default=u"Editing $language translation of '$title'",
                     mapping={
                         "title": translate(props.title, context=self.request),
                         "language": language
                     })

        elif IVersion.providedBy(self.context):
            return _(u"edit_version_legend",
                     default=u'Editing "$title" (version $version)',
                     mapping={
                         "title": translate(props.title, context=self.request),
                         "version": self.context.version_id
                     })

        return _(
            u"edit_item_legend",
            default=u'Editing "$title"',
            mapping={"title": translate(props.title, context=self.request)})
コード例 #6
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))
コード例 #7
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))
コード例 #8
0
ファイル: common.py プロジェクト: BenoitTalbot/bungeni-portal
    def form_name(self):
        if IVersion.providedBy(self.context):
            context = self.context.head
        else:
            context = self.context
        props = IDCDescriptiveProperties.providedBy(context) and context or IDCDescriptiveProperties(context)

        if self.is_translation:
            language = get_language_by_name(self.context.language)["name"]
            return _(
                u"edit_translation_legend",
                default=u"Editing $language translation of '$title'",
                mapping={"title": translate(props.title, context=self.request), "language": language},
            )

        elif IVersion.providedBy(self.context):
            return _(
                u"edit_version_legend",
                default=u'Editing "$title" (version $version)',
                mapping={"title": translate(props.title, context=self.request), "version": self.context.version_id},
            )

        return _(
            u"edit_item_legend",
            default=u'Editing "$title"',
            mapping={"title": translate(props.title, context=self.request)},
        )
コード例 #9
0
def _get_title_from_context(context):
    title = None
    if IAlchemistContent.providedBy(context):
        if IDCDescriptiveProperties.providedBy(context):
            title = context.title
        else:
            props = IDCDescriptiveProperties(context, None)
            if props is not None:
                title = props.title
            else:
                """ !+
AttributeError: 'GroupAddress' object has no attribute 'short_name':   File "/home/undesa/bungeni/cap_installs/bungeni_install/bungeni/releases/20100305100101/src/bungeni.main/bungeni/ui/viewlets/navigation.py", line 59, in _get_title_from_context
                #title = context.short_name 
So, we temporarily default the above to the context.__class__.__name__:
                """
                title = getattr(context, "title", context.__class__.__name__)
    elif IWorkspaceContainer.providedBy(context):
        # WorkspaceContainer._class is not set (and not unique) and it breaks the
        # connection between Container -> ContentClass
        title = context.__name__
    elif IAlchemistContainer.providedBy(context):
        domain_model = context._class
        try:
            descriptor = utils.get_descriptor(domain_model)
        except KeyError, e:
            log.warn("TYPE_INFO: no descriptor for model %s " "[container=%s] [error=%s]" % (domain_model, context, e))
            descriptor = None
            name = ""
        if descriptor:
            name = getattr(descriptor, "container_name", None)
            if name is None:
                name = getattr(descriptor, "display_name", None)
        if not name:
            name = getattr(context, "__name__", None)
        title = name
コード例 #10
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
コード例 #11
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
コード例 #12
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
コード例 #13
0
    def add_container_menu_items(self, context, container):
        request = self.request
        # add a menu item for each user workspace, if we are in an
        # IWorkspaceSectionLayer
        # !+ if user is logged in or if request.layer_data

        if (interfaces.IWorkspaceSectionLayer.providedBy(request)
                or interfaces.IWorkspaceSchedulingSectionLayer.providedBy(
                    request)):
            try:
                workspaces = IAnnotations(request)["layer_data"].get(
                    "workspaces")
            except:
                workspaces = []
            log.info("%s got user workspaces: %s" % (self, workspaces))
            base_url_path = "/workspace"
            for workspace in workspaces:
                log.info("appending menu item for user workspace: %s" %
                         str(workspace))
                self.items.append(
                    url.get_menu_item_descriptor(
                        workspace.full_name,
                        pos_action_in_url(
                            "/workspace/obj-%s" % workspace.group_id,
                            request.getURL()), base_url_path,
                        "obj-%s" % workspace.group_id))

        _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))
コード例 #14
0
    def add_container_menu_items(self, context, container):
        request = self.request
        # add a menu item for each user workspace, if we are in an
        # IWorkspaceSectionLayer
        # !+ if user is logged in or if request.layer_data
        if interfaces.IWorkspaceSectionLayer.providedBy(request):
            try:
                workspaces = IAnnotations(request)["layer_data"].get(
                    "workspaces")
            except:
                workspaces = []
            log.info("%s got user workspaces: %s" % (self, workspaces))
            base_url_path = "/workspace"
            for workspace in workspaces:
                log.info("appending menu item for user workspace: %s" %
                         str(workspace))
                self.items.append(
                    url.get_menu_item_descriptor(
                        workspace.full_name,
                        pos_action_in_url(
                            "/workspace/obj-%s" % workspace.group_id,
                            request.getURL()), base_url_path,
                        "obj-%s" % workspace.group_id))

        _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))
コード例 #15
0
    def update(self):
        self.path = self._get_path(self.context)

        # if the view is a location, append this to the breadcrumbs
        if ILocation.providedBy(self.__parent__) and \
               IDCDescriptiveProperties.providedBy(self.__parent__):
            self.path.append({
                "name": self.__parent__.title,
                "url": None,
            })
        self.chamber = get_chamber_for_context(self.context)
コード例 #16
0
    def update(self):
        self.path = self._get_path(self.context)

        # if the view is a location, append this to the breadcrumbs
        if ILocation.providedBy(self.__parent__) and IDCDescriptiveProperties.providedBy(self.__parent__):
            self.path.append({"name": self.__parent__.title, "url": None})

        try:
            self.user_name = self.request.principal.login
        except:
            pass
コード例 #17
0
 def update(self):
     self.path = self._get_path(self.context)
     
     # if the view is a location, append this to the breadcrumbs
     if ILocation.providedBy(self.__parent__) and \
            IDCDescriptiveProperties.providedBy(self.__parent__):
         self.path.append({
                 "name": self.__parent__.title,
                 "url": None,
             })
     self.chamber = get_chamber_for_context(self.context)
コード例 #18
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
コード例 #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
コード例 #20
0
    def update(self):
        self.path = self._get_path(self.context)

        # if the view is a location, append this to the breadcrumbs
        if ILocation.providedBy(self.__parent__) and \
               IDCDescriptiveProperties.providedBy(self.__parent__):
            self.path.append({
                'name': self.__parent__.title,
                'url': None,
            })
        try:
            self.user_name = self.request.principal.login
        except:
            pass
コード例 #21
0
    def update(self):
        need('yui-dragdrop')
        need('yui-container')

        session = Session()
        group_id = self.get_group_id()

        items = tuple(
            session.query(self.model).filter(
                sql.and_(self.model.status.in_(self.states),
                         self.model.group_id == group_id)))
        sitting = self._parent._parent.context
        scheduled_item_ids = [item.item_id for item in sitting.item_schedule]
        # add location to items
        gsm = component.getSiteManager()
        adapter = gsm.adapters.lookup(
            (interface.implementedBy(self.model), interface.providedBy(self)),
            ILocation)

        items = [adapter(item, None) for item in items]

        # for each item, format dictionary for use in template
        self.items = [
            {
                'title':
                properties.title,
                'name':
                item.__class__.__name__,
                'description':
                properties.description,
                #'date': _(u"$F", mapping={'F':
                #           datetimedict.fromdatetime(item.changes[-1].date)}),
                'date':
                item.changes[-1].date_active,
                'state':
                _(IWorkflow(item).workflow.states[item.status].title),
                'id':
                item.parliamentary_item_id,
                'class': (item.parliamentary_item_id in scheduled_item_ids)
                and "dd-disable" or "",
                'url':
                url.set_url_context(url.absoluteURL(item, self.request))
            }
            for (item,
                 properties) in [(item,
                                  (IDCDescriptiveProperties.providedBy(item)
                                   and item or IDCDescriptiveProperties(item)))
                                 for item in items]
        ]
コード例 #22
0
ファイル: common.py プロジェクト: BenoitTalbot/bungeni-portal
 def form_description(self):
     language = get_language_by_name(self.language)["name"]
     props = IDCDescriptiveProperties.providedBy(self.context) \
             and self.context or IDCDescriptiveProperties(self.context)
     if self.is_translation:
         return _(u"edit_translation_legend",
          default=u'Editing $language translation of "$title"',
          mapping={"title": translate(props.title, context=self.request),
                   "language": language}) 
     else:
         return _(
             u"translate_item_help",
             default=u'The document "$title" has not yet been translated into $language. Use this form to add the translation',
             mapping={"title": translate(props.title, context=self.request),
                      "language": language})
コード例 #23
0
    def update(self):
        need("yui-dragdrop")
        need("yui-container")

        sitting = self._parent._parent.context
        scheduled_item_ids = [item.item_id for item in sitting.item_schedule]

        # add location to items
        gsm = component.getSiteManager()
        adapter = gsm.adapters.lookup(
            (interface.implementedBy(self.model), interface.providedBy(self)),
            ILocation)

        date_formatter = self.get_date_formatter("date", "medium")
        items = [adapter(item, None) for item in self._query_items()]
        # for each item, format dictionary for use in template
        self.items = [
            {
                "title":
                properties.title,
                "name":
                item.__class__.__name__,
                "description":
                properties.description,
                #"date": _(u"$F", mapping={"F":
                #       datetimedict.fromdatetime(item.changes[-1].date)}),
                #"date":item.changes[-1].date,
                # not every item has a auditlog (headings)
                # use last status change instead.
                "date":
                self._item_date(item)
                and date_formatter.format(self._item_date(item)),
                "state":
                IWorkflow(item).get_state(item.status).title,
                "id":
                self._get_item_key(item),
                "class": ((self._get_item_key(item) in scheduled_item_ids
                           and "dd-disable") or ""),
                "url":
                self._item_url(item),
                "type":
                item.type
            } for item, properties in [(
                item, (IDCDescriptiveProperties.providedBy(item) and item
                       or IDCDescriptiveProperties(item))) for item in items]
        ]
コード例 #24
0
 def form_description(self):
     language = get_language_by_name(self.language)["name"]
     props = IDCDescriptiveProperties.providedBy(self.context) \
             and self.context or IDCDescriptiveProperties(self.context)
     if self.is_translation:
         return _(u"edit_translation_legend",
          default=u'Editing $language translation of "$title"',
          mapping={"title": translate(props.title, context=self.request),
                   "language": language}) 
     else:
         return _(u"translate_item_help",
             default=u'The document "$title" has not yet been translated ' \
                 u'into $language. Use this form to add the translation',
             mapping={
                 "title": translate(props.title, context=self.request),
                 "language": language
             }
         )
コード例 #25
0
    def expand_containers(self,
                          items,
                          containers,
                          _url,
                          chain=(),
                          context=None):
        #seen_context = False
        current = False

        for key, container in containers:
            if IAlchemistContainer.providedBy(container):
                descriptor = queryModelDescriptor(
                    proxy.removeSecurityProxy(container).domain_model)
                if descriptor:
                    name = getattr(descriptor, 'container_name', None)
                    if name is None:
                        name = getattr(descriptor, 'display_name', None)

                if not name:
                    name = container.domain_model.__name__
            else:
                assert IDCDescriptiveProperties.providedBy(container)
                container = proxy.removeSecurityProxy(container)
                name = container.title

            if context is not None:
                current = container.__name__ == context.__name__

            selected = len(chain) == 0 and current

            if current:
                #seen_context = True
                nodes = self.expand(chain)
            else:
                nodes = ()

            items.append({
                'title': name,
                'url': "%s/%s" % (_url.rstrip('/'), key),
                'current': current,
                'selected': selected,
                'kind': 'container',
                'nodes': nodes,
            })
コード例 #26
0
    def expand_containers(self,
                          items,
                          containers,
                          _url,
                          chain=(),
                          context=None):
        #seen_context = False
        current = False

        for key, container in containers:
            if IAlchemistContainer.providedBy(container):
                descriptor = queryModelDescriptor(
                    proxy.removeSecurityProxy(container).domain_model)
                if descriptor:
                    name = getattr(descriptor, "container_name", None)
                    if name is None:
                        name = getattr(descriptor, "display_name", None)

                if not name:
                    name = container.domain_model.__name__
            else:
                assert IDCDescriptiveProperties.providedBy(container)
                container = proxy.removeSecurityProxy(container)
                name = container.title

            if context is not None:
                current = container.__name__ == context.__name__

            selected = len(chain) == 0 and current

            if current:
                #seen_context = True
                nodes = self.expand(chain)
            else:
                nodes = ()

            items.append({
                "title": name,
                "url": "%s/%s" % (_url.rstrip("/"), key),
                "current": current,
                "selected": selected,
                "kind": "container",
                "nodes": nodes,
            })
コード例 #27
0
    def expand_containers(self,
                          items,
                          containers,
                          _url,
                          chain=(),
                          context=None):
        #seen_context = False
        current = False

        for key, container in containers:
            if IAlchemistContainer.providedBy(container):
                descriptor = queryModelDescriptor(
                    proxy.removeSecurityProxy(container).domain_model)
                if descriptor:
                    name = getattr(descriptor, 'container_name', None)
                    if name is None:
                        name = getattr(descriptor, 'display_name', None)

                if not name:
                    name = container.domain_model.__name__
            else:
                assert IDCDescriptiveProperties.providedBy(container)
                container = proxy.removeSecurityProxy(container)
                name = container.title

            if context is not None:
                current = container.__name__ == context.__name__

            selected = len(chain) == 0 and current

            if current:
                #seen_context = True
                nodes = self.expand(chain)
            else:
                nodes = ()

            items.append({
                'title': name,
                'url': "%s/%s" % (_url.rstrip('/'), key),
                'current': current,
                'selected': selected,
                'kind': 'container',
                'nodes': nodes,
            })
コード例 #28
0
    def update(self):
        need('yui-dragdrop')
        need('yui-container')

        session = Session()
        group_id = self.get_group_id()
        
        items = tuple(session.query(self.model).filter(
            sql.and_(
            self.model.status.in_(self.states),
            self.model.group_id == group_id)
            ))
        sitting = self._parent._parent.context
        scheduled_item_ids = [item.item_id for item in sitting.item_schedule]
        # add location to items
        gsm = component.getSiteManager()
        adapter = gsm.adapters.lookup(
            (interface.implementedBy(self.model),
             interface.providedBy(self)), ILocation)
        
        items = [adapter(item, None) for item in items]
        
        # for each item, format dictionary for use in template
        self.items = [{
            'title': properties.title,
            'name': item.__class__.__name__,
            'description': properties.description,
            #'date': _(u"$F", mapping={'F':
            #           datetimedict.fromdatetime(item.changes[-1].date)}),
            'date': item.changes[-1].date_active,
            'state': _(IWorkflow(item).workflow.states[item.status].title),
            'id': item.parliamentary_item_id,
            'class': (item.parliamentary_item_id in 
                            scheduled_item_ids) and "dd-disable" or "",
            'url': url.set_url_context(url.absoluteURL(item, self.request))
        } for (item, properties) in [
             (item, (IDCDescriptiveProperties.providedBy(item) and item or
                      IDCDescriptiveProperties(item))) 
              for item in items ]
        ]
コード例 #29
0
    def expand_containers(self, items, containers, _url, chain=(), context=None):
        # seen_context = False
        current = False

        for key, container in containers:
            if IAlchemistContainer.providedBy(container):
                descriptor = queryModelDescriptor(proxy.removeSecurityProxy(container).domain_model)
                if descriptor:
                    name = getattr(descriptor, "container_name", None)
                    if name is None:
                        name = getattr(descriptor, "display_name", None)

                if not name:
                    name = container.domain_model.__name__
            else:
                assert IDCDescriptiveProperties.providedBy(container)
                container = proxy.removeSecurityProxy(container)
                name = container.title

            if context is not None:
                current = container.__name__ == context.__name__

            selected = len(chain) == 0 and current

            if current:
                # seen_context = True
                nodes = self.expand(chain)
            else:
                nodes = ()

            items.append(
                {
                    "title": name,
                    "url": "%s/%s" % (_url.rstrip("/"), key),
                    "current": current,
                    "selected": selected,
                    "kind": "container",
                    "nodes": nodes,
                }
            )
コード例 #30
0
    def update(self):
        need("yui-dragdrop")
        need("yui-container")

        sitting = self._parent._parent.context
        scheduled_item_ids = [item.item_id for item in sitting.item_schedule]
        
        # add location to items
        gsm = component.getSiteManager()
        adapter = gsm.adapters.lookup(
            (interface.implementedBy(self.model), interface.providedBy(self)), 
            ILocation
        )
        
        date_formatter = self.get_date_formatter("date", "medium")
        items = [ adapter(item, None) for item in self._query_items() ]
        # for each item, format dictionary for use in template
        self.items = [{
                "title": properties.title,
                "name": item.__class__.__name__,
                "description": properties.description,
                #"date": _(u"$F", mapping={"F":
                #       datetimedict.fromdatetime(item.changes[-1].date)}),
                #"date":item.changes[-1].date,
                # not every item has a auditlog (headings) 
                # use last status change instead.
                "date": date_formatter.format(self._item_date(item)),
                "state": IWorkflow(item).get_state(item.status).title,
                "id": item.parliamentary_item_id,
                "class": (
                    (item.parliamentary_item_id in scheduled_item_ids and
                        "dd-disable") or 
                    ""),
                "url": self._item_url(item),
                "type": item.type
            } for item, properties in [
                (item, (IDCDescriptiveProperties.providedBy(item) and item or
                        IDCDescriptiveProperties(item))) 
                for item in items ]
        ]
コード例 #31
0
ファイル: common.py プロジェクト: BenoitTalbot/bungeni-portal
    def form_name(self):
        if IVersion.providedBy(self.context):
            context = self.context.head

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

        if self.is_translation:
            language = get_language_by_name(self.context.language)['name']
            return _(u"edit_translation_legend",
                     default=u'Editing $language translation of "$title"',
                     mapping={'title': translate(props.title, context=self.request),
                              'language': language})
        
        elif IVersion.providedBy(self.context):
            return _(u"edit_version_legend",
                     default=u'Editing "$title" (version $version)',
                     mapping={'title': translate(props.title, context=self.request),
                              'version': self.context.version_id})

        return _(u"edit_item_legend", default=u'Editing "$title"',
                 mapping={'title': translate(props.title, context=self.request)})
コード例 #32
0
    def update(self):
        need('yui-dragdrop')
        need('yui-container')
        session = Session()
        items = tuple(
            session.query(self.model).filter(self.model.status.in_(
                self.states)))

        sitting = self._parent._parent.context
        scheduled_item_ids = [item.item_id for item in sitting.item_schedule]

        # add location to items
        gsm = component.getSiteManager()
        adapter = gsm.adapters.lookup(
            (interface.implementedBy(self.model), interface.providedBy(self)),
            ILocation)

        items = [adapter(item, None) for item in items]
        site_url = url.absoluteURL(getSite(), self.request)
        # for each item, format dictionary for use in template
        self.items = [{
            'title': properties.title,
            'name': item.__class__.__name__,
            'description': properties.description,
            #            'date': _(u"$F", mapping={"F":
            #                      datetimedict.fromdatetime(item.changes[-1].date)}),
            #'date':item.changes[-1].date,
            # not every item has a auditlog (headings) use last status change instead.
            'date':item.status_date,
            #
            'state': IWorkflow(item).workflow.states[item.status].title,
            'id': item.parliamentary_item_id,
            'class': (item.parliamentary_item_id in scheduled_item_ids) and "dd-disable" or "",
            'url': url.set_url_context(site_url+('/business/%ss/obj-%s' % (item.type, item.parliamentary_item_id)))
            } for item, properties in \
            [(item, (IDCDescriptiveProperties.providedBy(item) and item or \
            IDCDescriptiveProperties(item))) for
             item in items]]
コード例 #33
0
def _get_title_from_context(context):
    title = None
    if IAlchemistContent.providedBy(context):
        if IDCDescriptiveProperties.providedBy(context):
            title = context.title
        else:
            props = IDCDescriptiveProperties(context, None)
            if props is not None:
                title = props.title
            else:
                ''' !+
AttributeError: 'GroupAddress' object has no attribute 'short_name':   File "/home/undesa/bungeni/cap_installs/bungeni_install/bungeni/releases/20100305100101/src/bungeni.main/bungeni/ui/viewlets/navigation.py", line 59, in _get_title_from_context
                #title = context.short_name 
So, we temporarily default the above to the context.__class__.__name__:
                '''
                title = getattr(context, "title", context.__class__.__name__)
    elif IWorkspaceContainer.providedBy(context):
        # WorkspaceContainer._class is not set (and not unique) and it breaks the
        # connection between Container -> ContentClass
        title = context.__name__
    elif IAlchemistContainer.providedBy(context):
        domain_model = context._class 
        try:
            descriptor = utils.get_descriptor(domain_model)
        except KeyError, e:
            log.warn("TYPE_INFO: no descriptor for model %s "
                    "[container=%s] [error=%s]" % (
                        domain_model, context, e))
            descriptor = None
            name = ""
        if descriptor:
            name = getattr(descriptor, "container_name", None)
            if name is None:
                name = getattr(descriptor, "display_name", None)
        if not name:
            name = getattr(context, "__name__", None)
        title = name
コード例 #34
0
    def update(self):
        need('yui-dragdrop')
        need('yui-container')
        session = Session()
        items = tuple(session.query(self.model).filter(
            self.model.status.in_(self.states)))

        sitting = self._parent._parent.context
        scheduled_item_ids = [item.item_id for item in sitting.item_schedule]
        
        # add location to items
        gsm = component.getSiteManager()
        adapter = gsm.adapters.lookup(
            (interface.implementedBy(self.model),
             interface.providedBy(self)), ILocation)

        items = [adapter(item, None) for item in items]
        site_url = url.absoluteURL(getSite(), self.request)
        # for each item, format dictionary for use in template
        self.items = [{
            'title': properties.title,
            'name': item.__class__.__name__,
            'description': properties.description,
#            'date': _(u"$F", mapping={"F":
#                      datetimedict.fromdatetime(item.changes[-1].date)}),
            #'date':item.changes[-1].date,
            # not every item has a auditlog (headings) use last status change instead.
            'date':item.status_date,
#
            'state': IWorkflow(item).workflow.states[item.status].title,
            'id': item.parliamentary_item_id,
            'class': (item.parliamentary_item_id in scheduled_item_ids) and "dd-disable" or "",
            'url': url.set_url_context(site_url+('/business/%ss/obj-%s' % (item.type, item.parliamentary_item_id)))
            } for item, properties in \
            [(item, (IDCDescriptiveProperties.providedBy(item) and item or \
            IDCDescriptiveProperties(item))) for
             item in items]]
コード例 #35
0
    def expand(self, chain, include_siblings=True):
        if len(chain) == 0:
            return ()

        context = chain.pop()
        items = []

        if IApplication.providedBy(context):
            items.extend(self.expand(chain))

        elif IAlchemistContent.providedBy(context):
            _url = url.absoluteURL(context, self.request)
            if IDCDescriptiveProperties.providedBy(context):
                title = context.title
            else:
                props = IDCDescriptiveProperties(context, None)
                if props is not None:
                    title = props.title
                else:
                    title = context.short_name

            selected = len(chain) == 0

            if chain:
                nodes = self.expand(chain)
            else:
                kls = context.__class__
                containers = [(key, getattr(context, key))
                              for key, value in kls.__dict__.items()
                              if isinstance(value, ManagedContainerDescriptor)]
                nodes = []
                self.expand_containers(nodes, containers, _url, chain, None)

            items.append({
                'title': title,
                'url': _url,
                'current': True,
                'selected': selected,
                'kind': 'content',
                'nodes': nodes,
            })

        elif IAlchemistContainer.providedBy(context):
            # loop through all managed containers of the parent
            # object, and include the present container as the
            # 'current' node.
            parent = context.__parent__
            assert parent is not None
            _url = url.absoluteURL(parent, self.request)

            # append managed containers as child nodes
            kls = type(proxy.removeSecurityProxy(parent))

            if include_siblings is True:
                if IApplication.providedBy(parent):
                    containers = [
                        (name, parent[name]) for name in
                        location.model_to_container_name_mapping.values()
                        if name in parent
                    ]
                elif IReadContainer.providedBy(parent):
                    containers = list(parent.items())
                else:
                    containers = [
                        (key, getattr(parent, key))
                        for key, value in kls.__dict__.items()
                        if isinstance(value, ManagedContainerDescriptor)
                    ]
            else:
                containers = [(context.__name__, context)]

            self.expand_containers(items, containers, _url, chain, context)

        elif ILocation.providedBy(context):
            _url = url.absoluteURL(context, self.request)
            #props = IDCDescriptiveProperties.providedBy(context) and \
            #    context or IDCDescriptiveProperties(context)
            if IDCDescriptiveProperties.providedBy(context):
                props = IDCDescriptiveProperties(context)
            else:
                props = context
            props = proxy.removeSecurityProxy(props)

            selected = len(chain) == 0
            if selected and IReadContainer.providedBy(context):
                nodes = []
                try:
                    self.expand_containers(nodes, context.items(), _url, chain,
                                           context)
                except:
                    pass
            else:
                nodes = self.expand(chain)
            i_id = getattr(props, 'id', 'N/A')
            items.append({
                'title': getattr(props, 'title', i_id),
                'url': _url,
                'current': True,
                'selected': selected,
                'kind': 'location',
                'nodes': nodes,
            })

        elif IReadContainer.providedBy(context):
            items.extend(self.expand(chain))

        return items
コード例 #36
0
    elif IAlchemistContainer.providedBy(context):
        domain_model = context._class
        try:
            descriptor = utils.get_descriptor(domain_model)
        except KeyError, e:
            log.warn("TYPE_INFO: no descriptor for model %s " "[container=%s] [error=%s]" % (domain_model, context, e))
            descriptor = None
            name = ""
        if descriptor:
            name = getattr(descriptor, "container_name", None)
            if name is None:
                name = getattr(descriptor, "display_name", None)
        if not name:
            name = getattr(context, "__name__", None)
        title = name
    elif ILocation.providedBy(context) and IDCDescriptiveProperties.providedBy(context):
        title = IDCDescriptiveProperties(context).title
    return title


#!+DevProgammingGuide(mr, oct-2012) always return localized template data
class SecondaryNavigationViewlet(browser.BungeniViewlet):

    render = ViewPageTemplateFile("templates/secondary-navigation.pt")

    def update(self):
        # request = self.request
        context = self.context
        chain = _get_context_chain(context)
        length = len(chain)
        self.items = []
コード例 #37
0
    def expand(self, chain, include_siblings=True):
        if len(chain) == 0:
            return ()

        context = chain.pop()
        items = []

        if IApplication.providedBy(context):
            items.extend(self.expand(chain))

        elif IAlchemistContent.providedBy(context):
            _url = url.absoluteURL(context, self.request)
            if IDCDescriptiveProperties.providedBy(context):
                title = context.title
            else:
                props = IDCDescriptiveProperties(context, None)
                if props is not None:
                    title = props.title
                else:
                    title = context.short_name

            selected = len(chain) == 0
            
            if chain:
                nodes = self.expand(chain)
            else:
                kls = context.__class__
                containers = [
                    (key, getattr(context, key))
                    for key, value in kls.__dict__.items()
                    if isinstance(value, ManagedContainerDescriptor)]
                nodes = []
                self.expand_containers(nodes, containers, _url, chain, None)

            items.append(
                {'title': title,
                 'url': _url,
                 'current': True,
                 'selected': selected,
                 'kind': 'content',
                 'nodes': nodes,
                 })

        elif IAlchemistContainer.providedBy(context):
            # loop through all managed containers of the parent
            # object, and include the present container as the
            # 'current' node.
            parent = context.__parent__
            assert parent is not None
            _url = url.absoluteURL(parent, self.request)

            # append managed containers as child nodes
            kls = type(proxy.removeSecurityProxy(parent))

            if include_siblings is True:
                if IApplication.providedBy(parent):
                    containers = [
                        (name, parent[name])
                        for name in 
                            location.model_to_container_name_mapping.values()
                        if name in parent
                    ]
                elif IReadContainer.providedBy(parent):
                    containers = list(parent.items())
                else:
                    containers = [
                        (key, getattr(parent, key))
                        for key, value in kls.__dict__.items()
                        if isinstance(value, ManagedContainerDescriptor)]
            else:
                containers = [(context.__name__, context)]
                
            self.expand_containers(items, containers, _url, chain, context)

        elif ILocation.providedBy(context):
            _url = url.absoluteURL(context, self.request)
            #props = IDCDescriptiveProperties.providedBy(context) and \
            #    context or IDCDescriptiveProperties(context)
            if IDCDescriptiveProperties.providedBy(context):
                props = IDCDescriptiveProperties(context)
            else:
                props = context
            props = proxy.removeSecurityProxy(props)

            selected = len(chain) == 0
            if selected and IReadContainer.providedBy(context):
                nodes = []
                try:
                    self.expand_containers(
                        nodes, context.items(), _url, chain, context)
                except:
                    pass
            else:
                nodes = self.expand(chain)
            i_id = getattr(props, 'id','N/A')
            items.append(
                {'title': getattr(props, 'title', i_id),
                 'url': _url,
                 'current': True,
                 'selected': selected,
                 'kind': 'location',
                 'nodes': nodes,
                 })

        elif IReadContainer.providedBy(context):
            items.extend(self.expand(chain))

        return items
コード例 #38
0
            descriptor = utils.get_descriptor(domain_model)
        except KeyError, e:
            log.warn("TYPE_INFO: no descriptor for model %s "
                    "[container=%s] [error=%s]" % (
                        domain_model, context, e))
            descriptor = None
            name = ""
        if descriptor:
            name = getattr(descriptor, "container_name", None)
            if name is None:
                name = getattr(descriptor, "display_name", None)
        if not name:
            name = getattr(context, "__name__", None)
        title = name
    elif (ILocation.providedBy(context) and
        IDCDescriptiveProperties.providedBy(context)):
        title = IDCDescriptiveProperties(context).title
    return title

#!+DevProgammingGuide(mr, oct-2012) always return localized template data
class SecondaryNavigationViewlet(browser.BungeniViewlet):

    render = ViewPageTemplateFile("templates/secondary-navigation.pt")

    def update(self):
        #request = self.request
        context = self.context
        chain = _get_context_chain(context)
        length = len(chain)
        self.items = []
        if length < 2:
コード例 #39
0
        try:
            descriptor = utils.get_descriptor(domain_model)
        except KeyError, e:
            log.warn("TYPE_INFO: no descriptor for model %s "
                     "[container=%s] [error=%s]" % (domain_model, context, e))
            descriptor = None
            name = ""
        if descriptor:
            name = getattr(descriptor, "container_name", None)
            if name is None:
                name = getattr(descriptor, "display_name", None)
        if not name:
            name = getattr(context, "__name__", None)
        title = name
    elif (ILocation.providedBy(context)
          and IDCDescriptiveProperties.providedBy(context)):
        title = IDCDescriptiveProperties(context).title
    return title


#!+DevProgammingGuide(mr, oct-2012) always return localized template data
class SecondaryNavigationViewlet(browser.BungeniViewlet):

    render = ViewPageTemplateFile("templates/secondary-navigation.pt")

    def update(self):
        #request = self.request
        context = self.context
        chain = _get_context_chain(context)
        length = len(chain)
        self.items = []
コード例 #40
0
ファイル: browser.py プロジェクト: mohalfaki/bungeni-portal
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