def _render_editing(self, obj, text, icon_base_url):
        path = escape('/'.join(obj.getPhysicalPath()))
        icon = ""
        title = ""
        allowed_viewlets_ids = ""
        allowed_viewlets_titles = ""
        current_viewlet_id = ""
        full_path = obj.absolute_url()
        try:
            current_viewlet_id = obj.getCurrentViewlet().getId()
            o2 = obj.dereference()
            icon = escape(getIconURL(o2, icon_base_url).encode('utf8'))
            title = o2.title_and_id()
            
            if isinstance(title, unicode):
                title = escape(title.encode('utf8'))
            else:
                title = escape(title.decode('string_escape').decode('utf8'))
                
            composite_tool = getToolByName(self, TOOL_ID)
            viewlets_info = composite_tool.getViewletsFor(o2)

            allowed_viewlets = []
            if viewlets_info:
                default_id = viewlets_info['default']["id"]
                default_title = viewlets_info['default']["viewlet"].title_or_id()
                allowed_viewlets.append((default_id, default_title))
                for viewlet in viewlets_info['viewlets']:
                    allowed_viewlets.append((viewlet["id"],
                                             viewlet["viewlet"].title_or_id()))
            def vcmp(x, y):
                return cmp(x[1], y[1])
            allowed_viewlets.sort(vcmp)

            allowed_viewlets_ids = [v_id for v_id, v_title in allowed_viewlets]
            allowed_viewlets_ids = " ".join(allowed_viewlets_ids)
            allowed_viewlets_ids = allowed_viewlets_ids.encode('utf8')

            allowed_viewlets_titles = [v_title for v_id, v_title in allowed_viewlets]
            allowed_viewlets_titles = "%".join(allowed_viewlets_titles)
            allowed_viewlets_titles = allowed_viewlets_titles.encode('utf8')
        except:
            text = formatException(self, editing=1)
        template = plone_edit_template.__of__(self)
        result = template(source_path=path,
                             icon=icon,
                             title=title,
                             allowed_viewlets_ids=allowed_viewlets_ids,
                             allowed_viewlets_titles=allowed_viewlets_titles,
                             current_viewlet_id=current_viewlet_id,
                             full_path=full_path,
                             text=text)
        return result
    def _render_editing(self, obj, text, icon_base_url):
        path = escape('/'.join(obj.getPhysicalPath()))
        icon = ""
        title = ""
        allowed_viewlets_ids = ""
        allowed_viewlets_titles = ""
        current_viewlet_id = ""
        full_path = obj.absolute_url()
        try:
            current_viewlet_id = obj.getCurrentViewlet().getId()
            o2 = obj.dereference()
            icon = escape(getIconURL(o2, icon_base_url).encode('utf8'))
            title = escape(o2.title_and_id().encode('utf8'))
            composite_tool = getToolByName(self, TOOL_ID)
            viewlets_info = composite_tool.getViewletsFor(o2)

            allowed_viewlets = []
            if viewlets_info:
                default_id = viewlets_info['default']["id"]
                default_title = viewlets_info['default']["viewlet"].title_or_id()
                allowed_viewlets.append((default_id, default_title))
                for viewlet in viewlets_info['viewlets']:
                    allowed_viewlets.append((viewlet["id"],
                                             viewlet["viewlet"].title_or_id()))
            def vcmp(x, y):
                return cmp(x[1], y[1])
            allowed_viewlets.sort(vcmp)

            allowed_viewlets_ids = [v_id for v_id, v_title in allowed_viewlets]
            allowed_viewlets_ids = " ".join(allowed_viewlets_ids)
            allowed_viewlets_ids = allowed_viewlets_ids.encode('utf8')

            allowed_viewlets_titles = [v_title for v_id, v_title in allowed_viewlets]
            allowed_viewlets_titles = "%".join(allowed_viewlets_titles)
            allowed_viewlets_titles = allowed_viewlets_titles.encode('utf8')
        except:
            text = formatException(self, editing=1)
        template = plone_edit_template.__of__(self)
        result = template(source_path=path,
                             icon=icon,
                             title=title,
                             allowed_viewlets_ids=allowed_viewlets_ids,
                             allowed_viewlets_titles=allowed_viewlets_titles,
                             current_viewlet_id=current_viewlet_id,
                             full_path=full_path,
                             text=text)
        return result
Exemple #3
0
    def getManifest(self):
        """Returns a manifest of slot contents.

        Designed for use by page templates that implement a manual
        slotting user interface.
        """
        contents = []  # [{name, slot_info}]
        seen = {}
        specs = self.getSlotSpecs()
        if hasattr(self, 'portal_url'):
            icon_base_url = self.portal_url()
        else:
            request = getattr(self, 'REQUEST', None)
            if request is not None:
                icon_base_url = request['BASEPATH1']
            else:
                icon_base_url = ''
        for spec in specs:
            name = spec['name']
            if seen.has_key(name):
                # Don't show duplicate uses of a slot.
                continue
            seen[name] = 1
            slot = self.slots[name]
            elements = []
            index = 0
            slot_values = slot.objectValues()
            for element in slot_values:
                error = None
                template = None
                templates = ()
                try:
                    ob = element.dereference()
                    template = element.queryInlineTemplate(spec['class_name'])
                    templates = element.listAllowableInlineTemplates(
                        spec['class_name'])
                except:
                    error = formatException(self, editing=1)
                    ob = FailedElement().__of__(self)
                icon = getIconURL(ob, icon_base_url)
                available_templates = []
                for name, t in templates:
                    if hasattr(aq_base(t), 'title_or_id'):
                        title = t.title_or_id()
                    else:
                        title = name
                    available_templates.append({'id': name, 'title': title})
                element_info = {
                    'title': ob.title_or_id(),
                    'icon': icon,
                    'error': error,
                    'source_path': '/'.join(element.getPhysicalPath()),
                    'index': index,
                    'next_index': index + 1,
                    'can_move_up': (index > 0),
                    'can_move_down': (index < len(slot_values) - 1),
                    'template': template,
                    'available_templates': available_templates,
                }
                elements.append(element_info)
                index += 1
            slot_info = {
                'name': name,
                'title': spec['title'] or name,
                'class_name': spec['class_name'],
                'target_path': '/'.join(slot.getPhysicalPath()),
                'elements': elements,
            }
            contents.append(slot_info)
        return contents
Exemple #4
0
    def getManifest(self):
        """Returns a manifest of slot contents.

        Designed for use by page templates that implement a manual
        slotting user interface.
        """
        contents = []  # [{name, slot_info}]
        seen = {}
        specs = self.getSlotSpecs()
        if hasattr(self, 'portal_url'):
            icon_base_url = self.portal_url()
        else:
            request = getattr(self, 'REQUEST', None)
            if request is not None:
                icon_base_url = request['BASEPATH1']
            else:
                icon_base_url = ''
        for spec in specs:
            name = spec['name']
            if seen.has_key(name):
                # Don't show duplicate uses of a slot.
                continue
            seen[name] = 1
            slot = self.slots[name]
            elements = []
            index = 0
            slot_values = slot.objectValues()
            for element in slot_values:
                error = None
                template = None
                templates = ()
                try:
                    ob = element.dereference()
                    template = element.queryInlineTemplate(spec['class_name'])
                    templates = element.listAllowableInlineTemplates(
                        spec['class_name'])
                except:
                    error = formatException(self, editing=1)
                    ob = FailedElement().__of__(self)
                icon = getIconURL(ob, icon_base_url)
                available_templates = []
                for name, t in templates:
                    if hasattr(aq_base(t), 'title_or_id'):
                        title = t.title_or_id()
                    else:
                        title = name
                    available_templates.append({'id': name, 'title': title})
                element_info = {
                    'title': ob.title_or_id(),
                    'icon': icon,
                    'error': error,
                    'source_path': '/'.join(element.getPhysicalPath()),
                    'index': index,
                    'next_index': index + 1,
                    'can_move_up': (index > 0),
                    'can_move_down': (index < len(slot_values) - 1),
                    'template': template,
                    'available_templates': available_templates,
                    }
                elements.append(element_info)
                index += 1
            slot_info = {
                'name': name,
                'title': spec['title'] or name,
                'class_name': spec['class_name'],
                'target_path': '/'.join(slot.getPhysicalPath()),
                'elements': elements,
                }
            contents.append(slot_info)
        return contents