Exemplo n.º 1
0
    def __iter__(self):
        for item in self.previous:
            pathkey = self.pathkey(*item.keys())[0]
            if not pathkey:
                yield item
                continue

            criterionkey = self.criterionkey(*item.keys())[0]
            if not criterionkey:
                yield item
                continue

            fieldkey = self.fieldkey(*item.keys())[0]
            if not fieldkey:
                yield item
                continue

            path = item[pathkey]

            obj = self.context.unrestrictedTraverse(
                str(path).lstrip('/'), None)
            if obj is None:  # path doesn't exist
                yield item
                continue

            criterion = item[criterionkey]
            field = item[fieldkey]

            if IATTopic.providedBy(obj):
                critid = 'crit__%s_%s' % (field, criterion)
                if getattr(aq_base(obj), critid, None) is None:
                    obj.addCriterion(field, criterion)
                item[pathkey] = '%s/%s' % (path, critid)

            yield item
Exemplo n.º 2
0
    def query(self, start, limit, contentFilter):
        """ Make catalog query for the folder listing.
    
        @param start: First index to query
    
        @param limit: maximum number of items in the batch
    
        @param contentFilter: portal_catalog filtering dictionary with index -> value pairs.
    
        @return: Products.CMFPlone.PloneBatch.Batch object
        """

        # Batch size
        b_size = limit

        # Batch start index, zero based
        b_start = start

        # We use different query method, depending on
        # whether we do listing for topic or folder
        if IATTopic.providedBy(self.context):
            # ATTopic like content
            # Call Products.ATContentTypes.content.topic.ATTopic.queryCatalog() method
            # This method handles b_start internally and
            # grabs it from HTTPRequest object
            return self.context.queryCatalog(contentFilter,
                                             batch=True,
                                             b_size=b_size)
        else:
            # Folder or Large Folder like content
            # Call CMFPlone(/skins/plone_scripts/getFolderContents Python script
            # This method handles b_start parametr internally and grabs it from the request object
            return self.context.getFolderContents(contentFilter,
                                                  batch=True,
                                                  b_size=b_size)
Exemplo n.º 3
0
    def __iter__(self):
        for item in self.previous:
            pathkey = self.pathkey(*item.keys())[0]
            if not pathkey:
                yield item; continue

            criterionkey = self.criterionkey(*item.keys())[0]
            if not criterionkey:
                yield item; continue

            fieldkey = self.fieldkey(*item.keys())[0]
            if not fieldkey:
                yield item; continue

            path = item[pathkey]

            obj = self.context.unrestrictedTraverse(str(path).lstrip('/'), None)
            if obj is None:         # path doesn't exist
                yield item; continue

            criterion = item[criterionkey]
            field = item[fieldkey]

            if IATTopic.providedBy(obj):
                critid = 'crit__%s_%s' % (field, criterion)
                if getattr(aq_base(obj), critid, None) is None:
                    obj.addCriterion(field, criterion)
                item[pathkey] = '%s/%s' % (path, critid)

            yield item
Exemplo n.º 4
0
 def contentsMethod(self):
     context = aq_inner(self.context)
     if IATTopic.providedBy(context):
         contentsMethod = context.queryCatalog
     else:
         contentsMethod = context.getFolderContents
     return contentsMethod
Exemplo n.º 5
0
 def getCriteriaKeys(self):
     li = []
     if IATTopic.providedBy(self.context) or ICollection.providedBy(self.context) or IDXCollection.providedBy(self.context):
         criteria = IListBaseQueryCriteria(self.context)()
         for criterion in [a['i'] for a in criteria]:
             li.append(self.name+'.'+criterion)
     return li
Exemplo n.º 6
0
 def contentsMethod(self):
     context = aq_inner(self.context)
     if IATTopic.providedBy(context):
         contentsMethod = context.queryCatalog
     else:
         contentsMethod = context.getFolderContents
     return contentsMethod
Exemplo n.º 7
0
    def query(self, start, limit, contentFilter):
        """ Make catalog query for the folder listing.

        @param start: First index to query

        @param limit: maximum number of items in the batch

        @param contentFilter: portal_catalog filtering dictionary with index ->
        value pairs.

        @return: Products.CMFPlone.PloneBatch.Batch object
        """

        # Batch size
        b_size = limit

        # We use different query method, depending on
        # whether we do listing for topic or folder
        if IATTopic.providedBy(self.context) or ICollection.providedBy(self.context):
            # ATTopic like content
            # Call Products.ATContentTypes.content.topic.ATTopic.queryCatalog()
            # method
            # This method handles b_start internally and
            # grabs it from HTTPRequest object
            return self.context.queryCatalog(contentFilter)
        else:
            # Folder or Large Folder like content
            # Call CMFPlone(/skins/plone_scripts/getFolderContents Python
            # script This method handles b_start parameter internally and grabs
            # it from the request object
            return self.context.getFolderContents(contentFilter,
                                                  batch=True,
                                                  b_size=b_size)
Exemplo n.º 8
0
 def getFolderContents(self, contentFilter=None, batch=False, b_size=100, full_objects=False):
     # logging.getLogger('foo').error('cont hitted')
     context = self.context
     mtool = context.portal_membership
     cur_path = "/".join(context.getPhysicalPath())
     path = {}
     if not contentFilter:
         contentFilter = {}
     else:
         contentFilter = dict(contentFilter)
     if not contentFilter.get("sort_on", None):
         contentFilter["sort_on"] = "getObjPositionInParent"
     if contentFilter.get("path", None) is None:
         path["query"] = cur_path
         path["depth"] = 1
         contentFilter["path"] = path
     show_inactive = mtool.checkPermission("Access inactive portal content", context)
     # Provide batching hints to the catalog
     b_start = int(context.REQUEST.get("b_start", 0))
     # Evaluate in catalog context because
     # some containers override queryCatalog
     # with their own unrelated method (Topics)
     method = context.portal_catalog.queryCatalog
     if IATTopic.providedBy(self.context):
         method = self.context.queryCatalog
     contents = list(method(contentFilter, show_all=1, show_inactive=show_inactive))
     if full_objects:
         contents = [b.getObject() for b in contents]
     contents.sort(key=comparecustom)
     if not b_size:
         b_size = len(contents)
     if batch:
         batch = Batch(contents, b_size, b_start, orphan=0)
         return batch
     return contents
Exemplo n.º 9
0
def _render_cachekey(fun, self):
    context = aq_inner(self.context)
    if not self.updated:
        self.update()

    if self.calendar.getUseSession():
        raise ram.DontCache()
    else:
        portal_state = getMultiAdapter((context, self.request), name=u'plone_portal_state')
        key = StringIO()
        print >> key, self.data.kw
        print >> key, portal_state.navigation_root_url()
        print >> key, cache.get_language(context, self.request)
        print >> key, self.calendar.getFirstWeekDay()

        year, month = self.getYearAndMonthToDisplay()
        print >> key, year
        print >> key, month
        navigation_root_path = self.root()
        start = DateTime('%s/%s/1' % (year, month))
        end = DateTime('%s/%s/1 23:59:59' % self.getNextMonth(year, month)) - 1

        def add(brain):
            key.write(brain.getPath())
            key.write('\n')
            key.write(brain.modified)
            key.write('\n\n')

        catalog = getToolByName(context, 'portal_catalog')
        path = navigation_root_path
        review_state = self.data.review_state or self.calendar.getCalendarStates()

        options = {}
        if navigation_root_path:
            root_content = self.context.restrictedTraverse(navigation_root_path)
            if IATTopic.providedBy(root_content):
                options = root_content.buildQuery()

        if options:
            # Topic
            options['start'] = {'query': end, 'range': 'max'}
            options['end'] = {'query': start, 'range': 'min'}
            if not options.get('review_state'):
                options['review_state'] = ''
            brains = catalog(**options)
        else:
            # Folder or site root
            brains = catalog(
                portal_type=self.calendar.getCalendarTypes(),
                start={'query': end, 'range': 'max'},
                end={'query': start, 'range': 'min'},
                review_state=review_state,
                path=path)

        for brain in brains:
            add(brain)

        return key.getvalue()
Exemplo n.º 10
0
    def getResults(self):
        query = self.getQuery();
        b_start = self.request.get('b_start', 0);
        b_size = 200

        if IATTopic.providedBy(self.context):
            query = self.getQuery()
            query.update(self.getTopicQuery())
            results = self.context.portal_catalog(**query);
            return Batch(results, b_size, b_start, orphan=0)
        else:
            return self.context.results(b_start=b_start, custom_query=query)
Exemplo n.º 11
0
def isApplicableCollectionView(view, types):
    if IATTopic.providedBy(view.context):
        items = view.context.queryCatalog({'portal_type': types}, batch=True, b_size=3)
    else:
        items = view.context.results(b_start=0, b_size=3, custom_query={'portal_type': types});

    if (items is not None):
        for brain in items:
            if (not brain.portal_type in types):
                return False
        return True

    return False;
Exemplo n.º 12
0
    def getImages(self):
        if IATTopic.providedBy(self.context):
            # ATTopic like content
            # Call Products.ATContentTypes.content.topic.ATTopic.queryCatalog() method
            # This method handles b_start internally and
            # grabs it from HTTPRequest object
            return self.context.queryCatalog(contentFilter={'portal_type' : 'Image'}, batch=False, b_size=100)

        else:
            # Folder or Large Folder like content
            # Call CMFPlone(/skins/plone_scripts/getFolderContents Python script
            # This method handles b_start parametr internally and grabs it from the request object
            return self.context.getFolderContents(contentFilter={'portal_type' : 'Image'}, batch=False, b_size=100)
 def results(self):
     """Get the actual result brains from the collection.
     It will limit the actual selection to photos.
     """
     results = []
     source = self.source
     iface = "Products.ATContentTypes.interface.image.IPhotoAlbumAble"
     if source is not None:
         if IATTopic.providedBy(source):
             results = source.queryCatalog(object_provides = iface)
         else:
             filters = dict(object_provides = iface)
             results = source.getFolderContents(contentFilter = filters)
     return results
Exemplo n.º 14
0
    def videos(self):
        target = self.target()
        limit = self.data.limit
        if target is None:
            return []
        if IRTVideo.providedBy(target):
            return [
                dict(title=target.Title(),
                     description=target.Description(),
                     url=target.absolute_url(),
                     path='/'.join(target.getPhysicalPath()),
                     year=target.getYear(),
                     duration=target.getDuration(),
                     image_url=getImageUrl(target)),
            ]
        if IATFolder.providedBy(target):
            values = []
            videos = target.getFolderContents(
                contentFilter={'object_provides': IRTVideo.__identifier__})
            for v in videos:
                values.append(
                    dict(
                        title=v.Title,
                        description=v.Description,
                        url=v.getURL(),
                        path=v.getPath(),
                        year=v.getYear,
                        duration=v.getDuration,
                        image_url=getImageUrl(v),
                    ))
            return (limit and values[:limit]) or values

        if IATTopic.providedBy(target):
            values = []
            videos = target.queryCatalog(
                contentFilter={'object_provides': IRTVideo.__identifier__})
            for v in videos:
                values.append(
                    dict(
                        title=v.Title,
                        description=v.Description,
                        url=v.getURL(),
                        path=v.getPath(),
                        year=v.getYear,
                        duration=v.getDuration,
                        image_url=getImageUrl(v),
                    ))
            return (limit and values[:limit]) or values
        return []
    def _contents(self):
        contents = []
        # Collection
        if IATTopic.providedBy(self.context):
            try:
                contents = self.context.queryCatalog(contentFilter={"sort_limit": 6})
            except:
                pass
        # probably a folder
        else:
            contents = self.context.getFolderContents()

        # Make sure the content is not too big
        contents = contents[:6]

        return contents
    def _contents(self):
        contents = []
        # Collection
        if IATTopic.providedBy(self.context):
            try:
                contents = self.context.queryCatalog(
                contentFilter={'sort_limit': 6})
            except:
                pass
        # probably a folder
        else:
            contents = self.context.getFolderContents()

        # Make sure the content is not too big
        contents = contents[:6]

        return contents
Exemplo n.º 17
0
    def videos(self):
        target = self.target()
        limit = self.data.limit
        if target is None:
            return []
        if IRTVideo.providedBy(target):
            return [dict(title=target.Title(),
                         description=target.Description(),
                         url=target.absolute_url(),
                         path='/'.join(target.getPhysicalPath()),
                         year=target.getYear(),
                         duration=target.getDuration(),
                         image_url=getImageUrl(target)),
                   ]
        if IATFolder.providedBy(target):
            values = []
            videos = target.getFolderContents(
                        contentFilter={'object_provides':
                                            IRTVideo.__identifier__})
            for v in videos:
                values.append(dict(title = v.Title,
                                   description = v.Description,
                                   url = v.getURL(),
                                   path=v.getPath(),
                                   year = v.getYear,
                                   duration = v.getDuration,
                                   image_url = getImageUrl(v),
                                   ))
            return (limit and values[:limit]) or values

        if IATTopic.providedBy(target):
            values = []
            videos = target.queryCatalog(
                    contentFilter={'object_provides':
                                    IRTVideo.__identifier__})
            for v in videos:
                values.append(dict(title=v.Title,
                                   description=v.Description,
                                   url=v.getURL(),
                                   path=v.getPath(),
                                   year=v.getYear,
                                   duration=v.getDuration,
                                   image_url=getImageUrl(v),
                                   ))
            return (limit and values[:limit]) or values
        return []
Exemplo n.º 18
0
 def getFolderContents(self,
                       contentFilter=None,
                       batch=False,
                       b_size=100,
                       full_objects=False):
     #logging.getLogger('foo').error('cont hitted')
     context = self.context
     mtool = context.portal_membership
     cur_path = '/'.join(context.getPhysicalPath())
     path = {}
     if not contentFilter:
         contentFilter = {}
     else:
         contentFilter = dict(contentFilter)
     if not contentFilter.get('sort_on', None):
         contentFilter['sort_on'] = 'getObjPositionInParent'
     if contentFilter.get('path', None) is None:
         path['query'] = cur_path
         path['depth'] = 1
         contentFilter['path'] = path
     show_inactive = mtool.checkPermission('Access inactive portal content',
                                           context)
     # Provide batching hints to the catalog
     b_start = int(context.REQUEST.get('b_start', 0))
     # Evaluate in catalog context because
     # some containers override queryCatalog
     # with their own unrelated method (Topics)
     method = context.portal_catalog.queryCatalog
     if IATTopic.providedBy(self.context):
         method = self.context.queryCatalog
     contents = list(
         method(
             contentFilter,
             show_all=1,
             show_inactive=show_inactive,
         ))
     if full_objects:
         contents = [b.getObject() for b in contents]
     contents.sort(key=comparecustom)
     if not b_size:
         b_size = len(contents)
     if batch:
         batch = Batch(contents, b_size, b_start, orphan=0)
         return batch
     return contents
Exemplo n.º 19
0
 def query_container(self, query, container, depth=1,
                     limit=None, sort_on="getObjPositionInParent"):
     if 'path' not in query:
         context_path = '/'.join(container.getPhysicalPath())
         query['path'] = {'query': context_path,
                          'depth': depth, }
     query['sort_on'] = sort_on
     query['limit'] = limit
     if IATTopic.providedBy(container):
         return container.queryCatalog(query,
                                       batch=False,
                                       b_size=10,
                                       full_objects=False)
     else:
         return container.getFolderContents(contentFilter=query,
                                                 batch=False,
                                                 b_size=10,
                                                 full_objects=False)
Exemplo n.º 20
0
    def getResults(self):
        context = Acquisition.aq_inner(self.context)
        if IATTopic.providedBy(context):
            results = context.queryCatalog()
        else:
            catalog = getToolByName(context, 'portal_catalog')
            if hasattr(catalog, 'getZCatalog'):
                catalog = catalog.getZCatalog()

            now = DateTime()
            queryA = Eq('portal_type', 'News Item')
            queryBoth = In('review_state', 'published') & Eq('path', '/'.join(context.getPhysicalPath())) \
                & Le('effective', now)

            query = And(queryA, queryBoth)
            results = catalog.evalAdvancedQuery(query, (('Date', 'desc'),))

        return results
Exemplo n.º 21
0
    def __call__(self):
        layout = self.context.getLayout()

        #danger of infinite recursion
        if layout in recursive_views and (IATTopic.providedBy(self.context) or ICollection.providedBy(self.context)):
            view = self.context.restrictedTraverse('folder_listing')
        else:
            view = self.context.restrictedTraverse(layout)

        self.request['ajax_load'] = "1"

        html = view()

        filtered = filterById(html,'content-core',newclass='template_' + layout)

        if filtered:
            return filtered

        # old styles views
        return filterById(html,'content',newclass='template_' + layout)
    def contents(self):
        """ Get the contents of the folder/collection.
        """

        context = aq_inner(self.context)
        settings = NoticeboardSettings(context)
        display_types = [x for x in settings.display_types]
        display_types.append(settings.note_type)
        display_types = list(set(display_types))
        if IATTopic.providedBy(context):
            # handle old collections
            items = context.queryCatalog(portal_types=display_types)
        elif ICollection.providedBy(context):
            # handle new collections
            items = context.results(batch=False, brains=False)
        else:
            # handle folders
            items = context.getFolderContents(full_objects=True,
                        contentFilter={"portal_type":display_types,
                                       "sort_on":"sortable_title"})
        return items
Exemplo n.º 23
0
    def contents(self):
        """ Get the contents of the folder/collection.
        """

        context = aq_inner(self.context)
        settings = NoticeboardSettings(context)
        display_types = [x for x in settings.display_types]
        display_types.append(settings.note_type)
        display_types = list(set(display_types))
        if IATTopic.providedBy(context):
            # handle old collections
            items = context.queryCatalog(portal_types=display_types)
        elif ICollection.providedBy(context):
            # handle new collections
            items = context.results(batch=False, brains=False)
        else:
            # handle folders
            items = context.getFolderContents(full_objects=True,
                                              contentFilter={
                                                  "portal_type": display_types,
                                                  "sort_on": "sortable_title"
                                              })
        return items
Exemplo n.º 24
0
    def items(self):
        catalog = getToolByName(self, 'portal_catalog')

        path = self.context.getPhysicalPath()
        path = "/".join(path)

        if IATTopic.providedBy(self.context):
            items = self.context.queryCatalog()
        else:
            sort_on = 'getObjPositionInParent'
            sort_order = 'ascending'
            sort_on_field = self.context.getField('sortOn')
            if sort_on_field and sort_on_field.get(self.context):
                sort_on = sort_on_field.get(self.context)[0]
            sort_order_field = self.context.getField('sortOrder')
            if sort_order_field and sort_order_field.get(self.context):
                sort_order = sort_order_field.get(self.context)[0]
            items = catalog.searchResults(path={'query': path, 'depth': 1},
                                          sort_on=sort_on,
                                          sort_order=sort_order)

        b_start = self.request.get('b_start', 0)
        return Batch(items, 20, int(b_start), orphan=0)
    def folderitems(self):
        """
        """
        context = aq_inner(self.context)

        # ATTopic object must come from a catalog, so revert to superclass
        if IATTopic.providedBy(context):
            return foldercontents.FolderContentsTable.folderitems.fget(self)
        
        results = []
        for i, id in enumerate(IFolderContents(context).contentIds()):
          
            if (i + 1) % 2 == 0:
                table_row_class = "draggable even"
            else:
                table_row_class = "draggable odd"

            results.append(
                LazyDict(
                    self._lazy_dict_func, id=id, table_row_class=table_row_class
                )
            )

        return results
Exemplo n.º 26
0
 def Title(self):
     context = Acquisition.aq_inner(self.context)
     if IATTopic.providedBy(context):
         return context.Title()
     return _(u"heading_newsboard_latest_news")
Exemplo n.º 27
0
 def getCriteria(self):
     if IATTopic.providedBy(self.context) or hasPAC:
         return IListBaseQueryTopicCriteria(self.context)()
     return []
Exemplo n.º 28
0
    def finderResults(self):
        """Return results to select
        """
        cat = self.data['catalog']
        scope = self.data['scope']
        if IATTopic.providedBy(scope):
            supQuery = self.finderQuery()
            if supQuery.has_key('path'):
                del supQuery['path']
            brains = finderTopicsQueryCatalog(scope, cat, **supQuery)
        else:
            query = self.finderQuery()
            brains = cat(**query)
        results = []
        for b in brains:
            title_or_id = b.pretty_title_or_id()
            r = {
                'uid': b.UID,
                'url': b.getURL(),
                'path': b.getPath(),
                'title': title_or_id,
                'jstitle': title_or_id.replace("\x27", "\x5C\x27"),
                'description':b.Description,
                'state_class': 'state-%s' % b.review_state,
                'is_folderish': b.is_folderish or False,
                'size': b.getObjSize,
                'type': b.portal_type,
                'blacklisted': False,
                'created': b.created,
                'actions_menu': {}
                }
            if r['type'] in self.imagestypes:
                o = b.getObject()
                imageInfos = self.getImageInfos(o)
                orientation = imageInfos[0]
                width = imageInfos[1]
                height = imageInfos[2]
                if width and height:
                    # FIXME: This should go in config.py
                    min, max = 70, 100
                    if orientation == 'portrait':
                        ratio = float(width)/float(height)
                        if height > max:
                            width = int(ratio *max)
                            height = max
                        if width > min:
                            width = min
                            height = int(min/ratio)
                    else:
                        ratio = float(height)/float(width)
                        if width > max:
                            height = int(ratio *max)
                            width = max
                        if height > min:
                            height = min
                            width = int(min/ratio)
                    thumb_sizes = self.getThumbSizes()
                    # define thumb icon and preview urls for display
                    thumb = icon = '%s/image' % r['url']
                    preview = '%s/image?isImage=1' % r['url']
                    for ts in thumb_sizes:
                        if ts[1] >= width and ts[2] >= height:
                            thumb = '%s/image_%s' % (r['url'], ts[0])
                            break
                    for ts in thumb_sizes:
                        if ts[1] >= 16 and ts[2] >= 16:
                            icon = '%s/image_%s' % (r['url'], ts[0])
                            break
                    for ts in thumb_sizes:
                        if ts[1] >= 400 and ts[2] >= 400:
                            preview = '%s/image_%s?isImage=1' % (r['url'], ts[0])
                            break
                    # images sizes actions menu
                    thumb_sizes.extend([('full',width ,height ,_('Full size'), '/image')])
                    if self.allowimagesizeselection:
                        r['actions_menu']['choose_image_size'] = {
                            'label': _(u'Choose image size'),
                            'actions': thumb_sizes
                            }
                    r.update({
                        'is_image': True,
                        'preview_url': preview,
                        'url': '%s/image' % r['url'],
                        'container_class': 'imageContainer',
                        'style': 'width: %ipx; height: %ipx' % (width, height)
                        })
                else:
                    orientation = 'small'
                    thumb = icon = None
                    r.update({
                        'iconclass': ('contenttype-%s divicon' %
                                      b.portal_type.lower().replace(' ','-')),
                        'is_image': False,
                        'container_class': 'fileContainer',
                        'style': ''
                        })
            else:
                # Not an image type
                orientation = 'small'
                r['style'] = ''
                if b.portal_type in self.filestypes:
                    o = b.getObject()
                    icon_base = o.getIcon()
                    if icon_base:
                        r['style'] = 'background-image: url(./%s)' % icon_base
                r['iconclass'] = 'contenttype-%s divicon' % b.portal_type.lower().replace(' ','-')
                thumb = icon = None
                r['is_image'] = False
                r['container_class'] = 'fileContainer'
            if self.typeview == 'image':
                r['orientation_class'] = orientation
                r['thumb'] = thumb
            else:
                r['orientation_class'] = '%s_icon' % orientation
                r['thumb'] = icon

            if r['size']:
                r['real_size'] = float(r['size'].split(' ')[0])
            else:
                r['real_size'] = 0

            results.append(r)

        return results
Exemplo n.º 29
0
 def getCriteria(self):
     if IATTopic.providedBy(self.context) or ICollection.providedBy(
             self.context) or IDXCollection.providedBy(self.context):
         return IListBaseQueryCriteria(self.context)()
     return []
Exemplo n.º 30
0
    def items(self):
        """
        """
        context = aq_inner(self.context)
        plone_utils = getToolByName(context, 'plone_utils')
        plone_view = getMultiAdapter((context, self.request), name=u'plone')
        portal_workflow = getToolByName(context, 'portal_workflow')
        portal_properties = getToolByName(context, 'portal_properties')
        portal_types = getToolByName(context, 'portal_types')
        site_properties = portal_properties.site_properties

        use_view_action = site_properties.getProperty(
            'typesUseViewActionInListings', ())
        browser_default = context.browserDefault()

        if IATTopic.providedBy(context):
            contentsMethod = context.queryCatalog
        else:
            contentsMethod = context.getFolderContents

        results = []
        for i, brain in enumerate(contentsMethod(self.contentFilter)):
            # don't bother if the object doesn't support bulk-tagging
            if brain.portal_type not in SUPPORTED_PORTAL_TYPES:
                continue

            if (i + 1) % 2 == 0:
                table_row_class = "draggable even"
            else:
                table_row_class = "draggable odd"

            url = brain.getURL()
            path = brain.getPath() or "/".join(brain.getPhysicalPath())
            icon = plone_view.getIcon(brain)

            type_class = 'contenttype-' + plone_utils.normalizeString(
                brain.portal_type)

            review_state = brain.review_state
            state_class = 'state-' + plone_utils.normalizeString(review_state)
            relative_url = brain.getURL(relative=True)

            type_title_msgid = portal_types[brain.portal_type].Title()
            url_href_title = u'%s: %s' % (translate(type_title_msgid,
                                                    context=self.request),
                                          safe_unicode(brain.Description))

            modified = plone_view.toLocalizedTime(brain.ModificationDate,
                                                  long_format=1)

            obj_type = brain.Type
            obj = brain.getObject()
            if obj_type in use_view_action:
                view_url = url + '/view'
            elif obj.is_folderish:
                view_url = url + "/folder_contents"
            else:
                view_url = url

            is_browser_default = len(
                browser_default[1]) == 1 and (brain.id
                                              == browser_default[1][0])

            subcategory = multilingualthesaurus = nace = ""

            is_canonical = obj.isCanonical()
            if not hasattr(self, 'subcategory_field'):
                self.subcategory_field = obj.getField('subcategory')
            if getInlineTreeView is not None:
                subcategory_pt = getInlineTreeView(self.context, brain,
                                                   self.request,
                                                   self.subcategory_field)
                subcategory_mode = (is_canonical or not self.subcategory_field.
                                    languageIndependent) and 'edit' or 'view'
                subcategory = subcategory_pt.render.macros.get(
                    subcategory_mode)
                if not hasattr(self, 'mt_field'):
                    self.mt_field = obj.getField('multilingual_thesaurus')
                multilingualthesaurus_pt = getInlineTreeView(
                    self.context, brain, self.request, self.mt_field)
                multilingualthesaurus_mode = (
                    is_canonical or
                    not self.mt_field.languageIndependent) and 'edit' or 'view'
                multilingualthesaurus = multilingualthesaurus_pt.render.macros.get(
                    multilingualthesaurus_mode)
                if not hasattr(self, 'nace_field'):
                    self.nace_field = obj.getField('nace')
                nace_pt = getInlineTreeView(self.context, brain, self.request,
                                            self.nace_field)
                nace_mode = (is_canonical
                             or not self.nace_field.languageIndependent
                             ) and 'edit' or 'view'
                nace = nace_pt.render.macros.get(nace_mode)
            else:
                error_msg = "slc.treecategories not available"
                subcategory = multilingualthesaurus = nace = error_msg
                subcategory_mode = multilingualthesaurus_mode = nace_mode = \
                                   "view"

            results.append(
                dict(
                    url=url,
                    url_href_title=url_href_title,
                    id=brain.getId,
                    quoted_id=urllib.quote_plus(brain.getId),
                    path=path,
                    title_or_id=brain.pretty_title_or_id(),
                    obj_type=obj_type,
                    size=brain.getObjSize,
                    modified=modified,
                    icon=icon.html_tag(),
                    type_class=type_class,
                    wf_state=review_state,
                    state_title=portal_workflow.getTitleForStateOnType(
                        review_state, obj_type),
                    state_class=state_class,
                    is_browser_default=is_browser_default,
                    folderish=brain.is_folderish,
                    relative_url=relative_url,
                    view_url=view_url,
                    table_row_class=table_row_class,
                    is_expired=context.isExpired(brain),
                    subcategory=subcategory,
                    multilingualthesaurus=multilingualthesaurus,
                    nace=nace,
                    subcategory_mode=subcategory_mode,
                    multilingualthesaurus_mode=multilingualthesaurus_mode,
                    nace_mode=nace_mode,
                    context=obj,
                ))
        return results
 def rootTopic(self):
     topic = self.context.restrictedTraverse(self.root())
     if IATTopic.providedBy(topic):
         return topic
     return None
Exemplo n.º 32
0
    def items(self):
        """
        """
        plone_utils = getToolByName(self.context, 'plone_utils')
        plone_view = getMultiAdapter((self.context, self.request), name=u'plone')
        portal_workflow = getToolByName(self.context, 'portal_workflow')
        portal_properties = getToolByName(self.context, 'portal_properties')
        site_properties = portal_properties.site_properties
        
        use_view_action = site_properties.getProperty('typesUseViewActionInListings', ())
        browser_default = self.context.browserDefault()
                
        if IATTopic.providedBy(self.context):
            contentsMethod = self.context.queryCatalog
        else:
            contentsMethod = self.context.portal_catalog.searchResults
	
        results = []

        brains = self.context.portal_catalog.searchResults(self.contentFilter)

        i = 0
        for obj in [brain for brain in brains if not getattr(brain.aq_explicit, 'exclude_from_nav', True) and brain.portal_type != 'Course']:

            if (i + 1) % 2 == 0:
                table_row_class = "draggable even"
            else:
                table_row_class = "draggable odd"
            
            if getattr(obj.aq_explicit, 'exclude_from_nav', True):
                continue

            url = obj.getURL()
            path = obj.getPath or "/".join(obj.getPhysicalPath())
            icon = plone_view.getIcon(obj);
            
            type_class = 'contenttype-' + plone_utils.normalizeString(
                obj.portal_type)

            review_state = obj.review_state
            state_class = 'state-' + plone_utils.normalizeString(review_state)
            relative_url = obj.getURL(relative=True)
            obj_type = obj.portal_type

            modified = plone_view.toLocalizedTime(
                obj.ModificationDate, long_format=1)
            
            if obj_type in use_view_action:
                view_url = url + '/view'
            elif obj.is_folderish:
                view_url = url + "/folder_contents"              
            else:
                view_url = url

            is_browser_default = len(browser_default[1]) == 1 and (
                obj.id == browser_default[1][0])
                                
            results.append(dict(
                url = url,
                id  = obj.getId,
                quoted_id = urllib.quote_plus(obj.getId),
                path = path,
                title_or_id = obj.pretty_title_or_id(),
                description = obj.Description,
                obj_type = obj_type,
                size = obj.getObjSize,
                modified = modified,
                icon = icon.html_tag(),
                type_class = type_class,
                wf_state = review_state,
                state_title = portal_workflow.getTitleForStateOnType(review_state,
                                                           obj_type),
                state_class = state_class,
                is_browser_default = is_browser_default,
                folderish = obj.is_folderish,
                relative_url = relative_url,
                view_url = view_url,
                table_row_class = table_row_class,
                is_expired = self.context.isExpired(obj),
            ))

            i += 1

        return results
Exemplo n.º 33
0
    def items(self):
        """
        """
        context = aq_inner(self.context)
        plone_utils = getToolByName(context, 'plone_utils')
        plone_view = getMultiAdapter((context, self.request), name=u'plone')
        portal_workflow = getToolByName(context, 'portal_workflow')
        portal_properties = getToolByName(context, 'portal_properties')
        portal_types = getToolByName(context, 'portal_types')
        site_properties = portal_properties.site_properties
        
        use_view_action = site_properties.getProperty('typesUseViewActionInListings', ())
        browser_default = context.browserDefault()

        if IATTopic.providedBy(context):
            contentsMethod = context.queryCatalog
        else:
            contentsMethod = context.getFolderContents

        results = []
        for i, obj in enumerate(contentsMethod(self.contentFilter)):
            if (i + 1) % 2 == 0:
                table_row_class = "draggable even"
            else:
                table_row_class = "draggable odd"

            url = obj.getURL()
            path = obj.getPath or "/".join(obj.getPhysicalPath())
            icon = plone_view.getIcon(obj);
            
            type_class = 'contenttype-' + plone_utils.normalizeString(
                obj.portal_type)

            review_state = obj.review_state
            state_class = 'state-' + plone_utils.normalizeString(review_state)
            relative_url = obj.getURL(relative=True)

            type_title_msgid = portal_types[obj.portal_type].Title()
            url_href_title = u'%s: %s' % (translate(type_title_msgid,
                                                    context=self.request),
                                          safe_unicode(obj.Description))

            modified = plone_view.toLocalizedTime(
                obj.ModificationDate, long_format=1)

            obj_type = obj.Type
            if obj_type in use_view_action:
                view_url = url + '/view'
            elif obj.is_folderish:
                view_url = url + "/folder_contents"              
            else:
                view_url = url

            is_browser_default = len(browser_default[1]) == 1 and (
                obj.id == browser_default[1][0])
                                 
            results.append(dict(
                url = url,
                url_href_title = url_href_title,
                id  = obj.getId,
                quoted_id = urllib.quote_plus(obj.getId),
                path = path,
                title_or_id = obj.pretty_title_or_id(),
                obj_type = obj_type,
                size = obj.getObjSize,
                modified = modified,
                icon = icon.html_tag(),
                type_class = type_class,
                wf_state = review_state,
                state_title = portal_workflow.getTitleForStateOnType(review_state,
                                                           obj_type),
                state_class = state_class,
                is_browser_default = is_browser_default,
                folderish = obj.is_folderish,
                relative_url = relative_url,
                view_url = view_url,
                table_row_class = table_row_class,
                is_expired = context.isExpired(obj),
            ))
        return results
Exemplo n.º 34
0
    def finderResults(self):
        """Return results to select
        """
        cat = self.data['catalog']
        scope = self.data['scope']
        if IATTopic.providedBy(scope):
            supQuery = self.finderQuery()
            if supQuery.has_key('path'):
                del supQuery['path']
            brains = finderTopicsQueryCatalog(scope, cat, **supQuery)
        else:
            query = self.finderQuery()
            brains = cat(**query)
        results = []
        for b in brains:
            title_or_id = b.pretty_title_or_id()
            r = {
                'uid': b.UID,
                'url': b.getURL(),
                'path': b.getPath(),
                'title': title_or_id,
                'jstitle': title_or_id.replace("\x27", "\x5C\x27"),
                'description': b.Description,
                'state_class': 'state-%s' % b.review_state,
                'is_folderish': b.is_folderish or False,
                'size': b.getObjSize,
                'type': b.portal_type,
                'blacklisted': False,
                'created': b.created,
                'actions_menu': {}
            }
            if r['type'] in self.imagestypes:
                o = b.getObject()
                imageInfos = self.getImageInfos(o)
                orientation = imageInfos[0]
                width = imageInfos[1]
                height = imageInfos[2]
                if width and height:
                    # FIXME: This should go in config.py
                    min, max = 70, 100
                    if orientation == 'portrait':
                        ratio = float(width) / float(height)
                        if height > max:
                            width = int(ratio * max)
                            height = max
                        if width > min:
                            width = min
                            height = int(min / ratio)
                    else:
                        ratio = float(height) / float(width)
                        if width > max:
                            height = int(ratio * max)
                            width = max
                        if height > min:
                            height = min
                            width = int(min / ratio)
                    thumb_sizes = self.getThumbSizes()
                    # define thumb icon and preview urls for display
                    thumb = icon = '%s/image' % r['url']
                    preview = '%s/image?isImage=1' % r['url']
                    for ts in thumb_sizes:
                        if ts[1] >= width and ts[2] >= height:
                            thumb = '%s/@@images/image/%s' % (r['url'], ts[0])
                            break
                    for ts in thumb_sizes:
                        if ts[1] >= 16 and ts[2] >= 16:
                            icon = '%s/@@images/image/%s' % (r['url'], ts[0])
                            break
                    for ts in thumb_sizes:
                        if ts[1] >= 400 and ts[2] >= 400:
                            preview = '%s/@@images/image/%s?isImage=1' % (
                                r['url'], ts[0])
                            break
                    # images sizes actions menu
                    thumb_sizes.extend([('full', width, height, _('Full size'),
                                         '/@@images/image')])
                    if self.allowimagesizeselection:
                        r['actions_menu']['choose_image_size'] = {
                            'label': _(u'Choose image size'),
                            'actions': thumb_sizes
                        }
                    r.update({
                        'is_image':
                        True,
                        'preview_url':
                        preview,
                        'url':
                        '%s/image' % r['url'],
                        'container_class':
                        'imageContainer',
                        'style':
                        'width: %ipx; height: %ipx' % (width, height)
                    })
                else:
                    orientation = 'small'
                    thumb = icon = None
                    r.update({
                        'iconclass': ('contenttype-%s divicon' %
                                      b.portal_type.lower().replace(' ', '-')),
                        'is_image':
                        False,
                        'container_class':
                        'fileContainer',
                        'style':
                        ''
                    })
            else:
                # Not an image type
                orientation = 'small'
                r['style'] = ''
                if b.portal_type in self.filestypes:
                    o = b.getObject()
                    icon_base = o.getIcon()
                    if icon_base:
                        r['style'] = 'background-image: url(./%s)' % icon_base
                r['iconclass'] = 'contenttype-%s divicon' % b.portal_type.lower(
                ).replace(' ', '-')
                thumb = icon = None
                r['is_image'] = False
                r['container_class'] = 'fileContainer'
            if self.typeview == 'image':
                r['orientation_class'] = orientation
                r['thumb'] = thumb
            else:
                r['orientation_class'] = '%s_icon' % orientation
                r['thumb'] = icon

            if r['size']:
                r['real_size'] = float(r['size'].split(' ')[0])
            else:
                r['real_size'] = 0

            results.append(r)

        return results
Exemplo n.º 35
0
    def items(self):
        """
        """
        plone_utils = getToolByName(self.context, 'plone_utils')
        plone_view = getMultiAdapter((self.context, self.request), name=u'plone')
        portal_workflow = getToolByName(self.context, 'portal_workflow')
        portal_properties = getToolByName(self.context, 'portal_properties')
        site_properties = portal_properties.site_properties
        
        use_view_action = site_properties.getProperty('typesUseViewActionInListings', ())
        browser_default = self.context.browserDefault()
                
        if IATTopic.providedBy(self.context):
            contentsMethod = self.context.queryCatalog
        else:
            contentsMethod = self.context.getFolderContents
	
        results = []
        for i, obj in enumerate(contentsMethod(self.contentFilter)):
            if (i + 1) % 2 == 0:
                table_row_class = "draggable even"
            else:
                table_row_class = "draggable odd"

            url = obj.getURL()
            path = obj.getPath or "/".join(obj.getPhysicalPath())
            icon = plone_view.getIcon(obj);
            
            type_class = 'contenttype-' + plone_utils.normalizeString(
                obj.portal_type)

            review_state = obj.review_state
            state_class = 'state-' + plone_utils.normalizeString(review_state)
            relative_url = obj.getURL(relative=True)
            obj_type = obj.portal_type

            modified = plone_view.toLocalizedTime(
                obj.ModificationDate, long_format=1)
            
            if obj_type in use_view_action:
                view_url = url + '/view'
            elif obj.is_folderish:
                view_url = url + "/folder_contents"              
            else:
                view_url = url

            is_browser_default = len(browser_default[1]) == 1 and (
                obj.id == browser_default[1][0])
            #Refactor :: determine why ProxyIndex not accessible here
            if IAnnotations(obj.getObject()).has_key('eduCommons.clearcopyright'):
                cc_status = IAnnotations(obj.getObject())['eduCommons.clearcopyright']
            else:
                cc_status = False

            if IAnnotations(obj.getObject()).has_key('eduCommons.accessible'):
                accessibility_status = IAnnotations(obj.getObject())['eduCommons.accessible']
            else:
                accessibility_status = False

            results.append(dict(
                url = url,
                id  = obj.getId,
                quoted_id = urllib.quote_plus(obj.getId),
                path = path,
                title_or_id = obj.pretty_title_or_id(),
                description = obj.Description,
                obj_type = obj_type,
                size = obj.getObjSize,
                modified = modified,
                icon = icon.html_tag(),
                type_class = type_class,
                wf_state = review_state,
                state_title = portal_workflow.getTitleForStateOnType(review_state,
                                                           obj_type),
                state_class = state_class,
                is_browser_default = is_browser_default,
                folderish = obj.is_folderish,
                relative_url = relative_url,
                view_url = view_url,
                table_row_class = table_row_class,
                is_expired = self.context.isExpired(obj),
                #Refactor :: determine why ProxyIndex not accessible here
                cc_status = cc_status,
                accessibility_status = accessibility_status
            ))
        return results
Exemplo n.º 36
0
 def getCriteria(self):
     if IATTopic.providedBy(self.context) or ICollection.providedBy(self.context) or IDXCollection.providedBy(self.context):
         return IListBaseQueryCriteria(self.context)()
     return []
Exemplo n.º 37
0
 def Title(self):
     context = Acquisition.aq_inner(self.context)
     if IATTopic.providedBy(context):
         return context.Title()
     return _(u"heading_newsboard_latest_news")
Exemplo n.º 38
0
    def items(self):
        """
        """
        context = aq_inner(self.context)
        plone_utils = getToolByName(context, 'plone_utils')
        plone_view = getMultiAdapter((context, self.request), name=u'plone')
        portal_workflow = getToolByName(context, 'portal_workflow')
        portal_properties = getToolByName(context, 'portal_properties')
        portal_types = getToolByName(context, 'portal_types')
        site_properties = portal_properties.site_properties

        use_view_action = site_properties.getProperty('typesUseViewActionInListings', ())
        browser_default = context.browserDefault()

        if IATTopic.providedBy(context):
            contentsMethod = context.queryCatalog
        else:
            contentsMethod = context.getFolderContents

        results = []
        for i, brain in enumerate(contentsMethod(self.contentFilter)):
            # don't bother if the object doesn't support bulk-tagging
            if brain.portal_type not in SUPPORTED_PORTAL_TYPES:
                continue

            if (i + 1) % 2 == 0:
                table_row_class = "draggable even"
            else:
                table_row_class = "draggable odd"

            url = brain.getURL()
            path = brain.getPath() or "/".join(brain.getPhysicalPath())
            icon = plone_view.getIcon(brain);

            type_class = 'contenttype-' + plone_utils.normalizeString(
                brain.portal_type)

            review_state = brain.review_state
            state_class = 'state-' + plone_utils.normalizeString(review_state)
            relative_url = brain.getURL(relative=True)

            type_title_msgid = portal_types[brain.portal_type].Title()
            url_href_title = u'%s: %s' % (translate(type_title_msgid,
                                                    context=self.request),
                                          safe_unicode(brain.Description))

            modified = plone_view.toLocalizedTime(
                brain.ModificationDate, long_format=1)

            obj_type = brain.Type
            obj = brain.getObject()
            if obj_type in use_view_action:
                view_url = url + '/view'
            elif obj.is_folderish:
                view_url = url + "/folder_contents"
            else:
                view_url = url

            is_browser_default = len(browser_default[1]) == 1 and (
                brain.id == browser_default[1][0])

            subcategory = multilingualthesaurus = nace = ""

            is_canonical = obj.isCanonical()
            if not hasattr(self, 'subcategory_field'):
                self.subcategory_field = obj.getField('subcategory')
            if getInlineTreeView is not None:
                subcategory_pt = getInlineTreeView(self.context, brain, self.request, self.subcategory_field)
                subcategory_mode = (is_canonical or not self.subcategory_field.languageIndependent) and 'edit' or 'view'
                subcategory = subcategory_pt.render.macros.get(subcategory_mode)
                if not hasattr(self, 'mt_field'):
                    self.mt_field = obj.getField('multilingual_thesaurus')
                multilingualthesaurus_pt = getInlineTreeView(self.context, brain, self.request, self.mt_field)
                multilingualthesaurus_mode = (is_canonical or not self.mt_field.languageIndependent) and 'edit' or 'view'
                multilingualthesaurus = multilingualthesaurus_pt.render.macros.get(multilingualthesaurus_mode)
                if not hasattr(self, 'nace_field'):
                    self.nace_field = obj.getField('nace')
                nace_pt = getInlineTreeView(self.context, brain, self.request, self.nace_field)
                nace_mode = (is_canonical or not self.nace_field.languageIndependent) and 'edit' or 'view'
                nace = nace_pt.render.macros.get(nace_mode)
            else:
                error_msg = "slc.treecategories not available"
                subcategory = multilingualthesaurus = nace = error_msg
                subcategory_mode = multilingualthesaurus_mode = nace_mode = \
                                   "view"

            results.append(dict(
                url=url,
                url_href_title=url_href_title,
                id=brain.getId,
                quoted_id=urllib.quote_plus(brain.getId),
                path=path,
                title_or_id=brain.pretty_title_or_id(),
                obj_type=obj_type,
                size=brain.getObjSize,
                modified=modified,
                icon=icon.html_tag(),
                type_class=type_class,
                wf_state=review_state,
                state_title=portal_workflow.getTitleForStateOnType(review_state,
                                                           obj_type),
                state_class=state_class,
                is_browser_default=is_browser_default,
                folderish=brain.is_folderish,
                relative_url=relative_url,
                view_url=view_url,
                table_row_class=table_row_class,
                is_expired=context.isExpired(brain),
                subcategory=subcategory,
                multilingualthesaurus=multilingualthesaurus,
                nace=nace,
                subcategory_mode=subcategory_mode,
                multilingualthesaurus_mode=multilingualthesaurus_mode,
                nace_mode=nace_mode,
                context=obj,
            ))
        return results
Exemplo n.º 39
0
 def is_topic(self):
     return IATTopic.providedBy(self.context)
Exemplo n.º 40
0
    def items(self):
        """
            We override state_class and state_title
            when returning values for multi-state content.
        """
        context = self.context
        request = self.request
        self.context_state = getMultiAdapter((context, request),
                                             name='plone_context_state')
        self.tools = getMultiAdapter((context, request), name='plone_tools')
        self.workflows = self.tools.workflow().getWorkflowsFor(self.context)
        plone_utils = getToolByName(self.context, 'plone_utils')
        plone_view = getMultiAdapter((self.context, self.request),
                                     name=u'plone')
        portal_properties = getToolByName(self.context, 'portal_properties')
        site_properties = portal_properties.site_properties
        use_view_action = site_properties.getProperty(
            'typesUseViewActionInListings', ())
        browser_default = self.context.browserDefault()

        if IATTopic.providedBy(self.context):
            contentsMethod = self.context.queryCatalog
        else:
            contentsMethod = self.context.getFolderContents

        results = []
        for i, obj in enumerate(contentsMethod(self.contentFilter)):
            if (i + 1) % 2 == 0:
                table_row_class = "draggable even"
            else:
                table_row_class = "draggable odd"

            url = obj.getURL()
            path = obj.getPath or "/".join(obj.getPhysicalPath())
            icon = plone_view.getIcon(obj)

            type_class = 'contenttype-' + plone_utils.normalizeString(
                obj.portal_type)

            review_state = obj.review_state
            state_class = 'state-' + plone_utils.normalizeString(review_state)

            relative_url = obj.getURL(relative=True)
            obj_type = obj.portal_type

            modified = plone_view.toLocalizedTime(obj.ModificationDate,
                                                  long_format=1)

            if obj_type in use_view_action:
                view_url = url + '/view'
            elif obj.is_folderish:
                view_url = url + "/folder_contents"
            else:
                view_url = url

            is_browser_default = len(
                browser_default[1]) == 1 and (obj.id == browser_default[1][0])

            # XXX: This does not get the proper workflow chain when we
            #      are dealing with an item that is under placeful
            #      workflow control.
            state_list = []
            wf_chain = self.tools.workflow().getChainForPortalType(obj_type)
            for w in wf_chain:
                wf_obj = self.tools.workflow()[w]
                state_var = wf_obj.state_var
                state_id = getattr(obj, state_var, None)
                wf_states = wf_obj.states
                # XXX: This is a bit of a hack, if there is a placeful
                #      worklflow in use then this might still be wrong.
                #      Since the state id could be the same in different
                #      workflows. The title it ends up getting might
                #      not be the correct one.
                if state_id is None or state_id not in wf_states.objectIds():
                    continue
                stitle = wf_states[state_id].title
                state_list.append('<span class="wf-%s state-%s">%s</span>' %
                                  (w, state_id, stitle))
            # XXX: If the state didn't exist in the workflow chain,
            #      fall back to the `review_state` on the brain. This
            #      Will happen when a placeful workflow is in place
            #      and the workflow chain cannot be determined.
            if not state_list and isinstance(review_state, basestring):
                state_list = [review_state]
            state_string = ', '.join(state_list)

            results.append(
                dict(
                    url=url,
                    id=obj.getId,
                    quoted_id=urllib.quote_plus(obj.getId),
                    path=path,
                    title_or_id=obj.pretty_title_or_id(),
                    description=obj.Description,
                    obj_type=obj_type,
                    size=obj.getObjSize,
                    modified=modified,
                    icon=icon.html_tag(),
                    type_class=type_class,
                    wf_state=review_state,
                    state_title=state_string,
                    state_class=state_class,
                    is_browser_default=is_browser_default,
                    folderish=obj.is_folderish,
                    relative_url=relative_url,
                    view_url=view_url,
                    table_row_class=table_row_class,
                    is_expired=self.context.isExpired(obj),
                ))
        return results
Exemplo n.º 41
0
    def finderResults(self):
        """Return results to select
        """
        cat = self.data["catalog"]
        scope = self.data["scope"]
        if IATTopic.providedBy(scope):
            supQuery = self.finderQuery()
            if supQuery.has_key("path"):
                del supQuery["path"]
            brains = finderTopicsQueryCatalog(scope, cat, **supQuery)
        else:
            query = self.finderQuery()
            brains = cat(**query)
        results = []
        for b in brains:
            title_or_id = b.pretty_title_or_id()
            r = {
                "uid": b.UID,
                "url": b.getURL(),
                "path": b.getPath(),
                "title": title_or_id,
                "jstitle": title_or_id.replace("\x27", "\x5C\x27"),
                "description": b.Description,
                "state_class": "state-%s" % b.review_state,
                "is_folderish": b.is_folderish or False,
                "size": b.getObjSize,
                "type": b.portal_type,
                "blacklisted": False,
                "created": b.created,
                "actions_menu": {},
            }
            if r["type"] in self.imagestypes:
                o = b.getObject()
                imageInfos = self.getImageInfos(o)
                orientation = imageInfos[0]
                width = imageInfos[1]
                height = imageInfos[2]
                if width and height:
                    # FIXME: This should go in config.py
                    min, max = 70, 100
                    if orientation == "portrait":
                        ratio = float(width) / float(height)
                        if height > max:
                            width = int(ratio * max)
                            height = max
                        if width > min:
                            width = min
                            height = int(min / ratio)
                    else:
                        ratio = float(height) / float(width)
                        if width > max:
                            height = int(ratio * max)
                            width = max
                        if height > min:
                            height = min
                            width = int(min / ratio)
                    thumb_sizes = self.getThumbSizes()
                    # define thumb icon and preview urls for display
                    thumb = icon = "%s/@@images/image" % r["url"]
                    preview = "%s/@@images/image?isImage=1" % r["url"]
                    for ts in thumb_sizes:
                        if ts[1] >= width and ts[2] >= height:
                            thumb = "%s/@@images/image/%s" % (r["url"], ts[0])
                            break
                    for ts in thumb_sizes:
                        if ts[1] >= 16 and ts[2] >= 16:
                            icon = "%s/@@images/image/%s" % (r["url"], ts[0])
                            break
                    for ts in thumb_sizes:
                        if ts[1] >= 400 and ts[2] >= 400:
                            preview = "%s/@@images/image/%s?isImage=1" % (r["url"], ts[0])
                            break
                    # images sizes actions menu
                    thumb_sizes.extend([("full", width, height, _("Full size"), "/image")])
                    if self.allowimagesizeselection:
                        r["actions_menu"]["choose_image_size"] = {
                            "label": _(u"Choose image size"),
                            "actions": thumb_sizes,
                        }
                    r.update(
                        {
                            "is_image": True,
                            "preview_url": preview,
                            "url": "%s/@@images/image" % r["url"],
                            "container_class": "imageContainer",
                            "style": "width: %ipx; height: %ipx" % (width, height),
                        }
                    )
                else:
                    orientation = "small"
                    thumb = icon = None
                    r.update(
                        {
                            "iconclass": ("contenttype-%s divicon" % b.portal_type.lower().replace(" ", "-")),
                            "is_image": False,
                            "container_class": "fileContainer",
                            "style": "",
                        }
                    )
            else:
                # Not an image type
                orientation = "small"
                r["style"] = ""
                if b.portal_type in self.filestypes:
                    o = b.getObject()
                    icon_base = o.getIcon()
                    if icon_base:
                        r["style"] = "background-image: url(./%s)" % icon_base
                r["iconclass"] = "contenttype-%s divicon" % b.portal_type.lower().replace(" ", "-")
                thumb = icon = None
                r["is_image"] = False
                r["container_class"] = "fileContainer"
            if self.typeview == "image":
                r["orientation_class"] = orientation
                r["thumb"] = thumb
            else:
                r["orientation_class"] = "%s_icon" % orientation
                r["thumb"] = icon

            if r["size"]:
                r["real_size"] = float(r["size"].split(" ")[0])
            else:
                r["real_size"] = 0

            results.append(r)

        return results
    def items(self):
        """
            We override state_class and state_title
            when returning values for multi-state content.
        """
        context = self.context
        request = self.request
        self.context_state = getMultiAdapter((context, request),
                                             name='plone_context_state')
        self.tools = getMultiAdapter((context, request), name='plone_tools')
        self.workflows = self.tools.workflow().getWorkflowsFor(self.context)
        plone_utils = getToolByName(self.context, 'plone_utils')
        plone_view = getMultiAdapter(
            (self.context, self.request), name=u'plone')
        portal_properties = getToolByName(self.context, 'portal_properties')
        site_properties = portal_properties.site_properties
        use_view_action = site_properties.getProperty(
            'typesUseViewActionInListings', ())
        browser_default = self.context.browserDefault()

        if IATTopic.providedBy(self.context):
            contentsMethod = self.context.queryCatalog
        else:
            contentsMethod = self.context.getFolderContents

        results = []
        for i, obj in enumerate(contentsMethod(self.contentFilter)):
            if (i + 1) % 2 == 0:
                table_row_class = "draggable even"
            else:
                table_row_class = "draggable odd"

            url = obj.getURL()
            path = obj.getPath or "/".join(obj.getPhysicalPath())
            icon = plone_view.getIcon(obj)

            type_class = 'contenttype-' + plone_utils.normalizeString(
                obj.portal_type)

            review_state = obj.review_state
            state_class = 'state-' + plone_utils.normalizeString(review_state)

            relative_url = obj.getURL(relative=True)
            obj_type = obj.portal_type

            modified = plone_view.toLocalizedTime(
                obj.ModificationDate, long_format=1)

            if obj_type in use_view_action:
                view_url = url + '/view'
            elif obj.is_folderish:
                view_url = url + "/folder_contents"
            else:
                view_url = url

            is_browser_default = len(browser_default[1]) == 1 and (
                obj.id == browser_default[1][0])

            # XXX: This does not get the proper workflow chain when we
            #      are dealing with an item that is under placeful
            #      workflow control.
            state_list = []
            wf_chain = self.tools.workflow().getChainForPortalType(obj_type)
            for w in wf_chain:
                wf_obj = self.tools.workflow()[w]
                state_var = wf_obj.state_var
                state_id = getattr(obj, state_var, None)
                wf_states = wf_obj.states
                # XXX: This is a bit of a hack, if there is a placeful
                #      worklflow in use then this might still be wrong.
                #      Since the state id could be the same in different
                #      workflows. The title it ends up getting might
                #      not be the correct one.
                if state_id is None or state_id not in wf_states.objectIds():
                    continue
                stitle = wf_states[state_id].title
                state_list.append('<span class="wf-%s state-%s">%s</span>'
                                  % (w, state_id, stitle))
            # XXX: If the state didn't exist in the workflow chain,
            #      fall back to the `review_state` on the brain. This
            #      Will happen when a placeful workflow is in place
            #      and the workflow chain cannot be determined.
            if not state_list and isinstance(review_state, basestring):
                state_list = [review_state]
            state_string = ', '.join(state_list)

            results.append(dict(
                url=url,
                id =obj.getId,
                quoted_id=urllib.quote_plus(obj.getId),
                path=path,
                title_or_id=obj.pretty_title_or_id(),
                description=obj.Description,
                obj_type=obj_type,
                size=obj.getObjSize,
                modified=modified,
                icon=icon.html_tag(),
                type_class=type_class,
                wf_state=review_state,
                state_title=state_string,
                state_class=state_class,
                is_browser_default=is_browser_default,
                folderish=obj.is_folderish,
                relative_url=relative_url,
                view_url=view_url,
                table_row_class=table_row_class,
                is_expired=self.context.isExpired(obj),
            ))
        return results