def queryCatalog(self, limit): """ """ querybuilder = QueryBuilder(self, self.request) if not hasattr(self.data, 'sort_on'): self.data.sort_on = 'effective' if not hasattr(self.data, 'sort_order'): self.data.sort_order = False if not hasattr(self.data, 'sort_folderorder'): self.data.sort_folderorder = False sort_order = 'descending' if self.data.sort_order else 'ascending' sort_on = self.data.sort_on if self.data.sort_folderorder: sort_on = 'getObjPositionInParent' query = list(self.data.query) if ICollection.providedBy(self.context): query += self.context.query and self.context.query or [] parent = aq_parent(aq_inner(self.context)) if ICollection.providedBy(parent): query += parent.query and parent.query or [] return querybuilder(query=query, sort_on=sort_on, sort_order=sort_order, limit=limit)
def results(self, batch=True, b_start=0, b_size=None, inherit=False, extra=[]): querybuilder = QueryBuilder(self, self.REQUEST) sort_order = 'reverse' if self.sort_reversed else 'ascending' if not b_size: b_size = self.item_count query = isinstance(self.query, list) and deepcopy(self.query) or [] if inherit: parent = aq_parent(self) if ICollection.providedBy(parent): query += parent.query and deepcopy(parent.query) or [] inparent = aq_parent(self) if ICollection.providedBy(inparent): query += inparent.query and deepcopy(inparent.query) or [] query = query + extra res = querybuilder(query=query, batch=batch, b_start=b_start, b_size=b_size, sort_on=self.sort_on, sort_order=sort_order, limit=self.limit) return res
def editCarouselLink(self): provider = self.collection() if provider is not None: if ICollection.providedBy(provider): return provider.absolute_url() + '/edit' return provider.absolute_url() + '/criterion_edit_form' return None
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
def _set_collection(self): if ICollection.providedBy(self.context) or \ (HAS_PAC and pac_ICollection.providedBy(self.context)): return self.context else: collection = getCurrentCollection(self.context) return collection
def contentsMethod(self): context = aq_inner(self.context) if IATTopic.providedBy(context) or ICollection.providedBy(context): contentsMethod = context.queryCatalog else: contentsMethod = context.getFolderContents return contentsMethod
def get_items(self): context = aq_inner(self.context) res = "" if IATFolder.providedBy(context) or \ IATBTreeFolder.providedBy(context): res = self.context.getFolderContents( contentFilter={ 'sort_on': 'getObjPositionInParent', 'portal_type': self.settings.allowed_types, 'limit': self.settings.limit }) elif IATTopic.providedBy(context): if self.settings.limit and self.settings.limit > 0: res = context.queryCatalog( batch=True, b_size=self.settings.limit, portal_type=self.settings.allowed_types, ) else: res = context.queryCatalog( portal_type=self.settings.allowed_types, limit=self.settings.limit) elif ICollection.providedBy(context): query = queryparser.parseFormquery(context, context.getRawQuery()) query['portal_type'] = self.settings.allowed_types query['limit'] = self.settings.limit if self.settings.limit and self.settings.limit > 0: res = context.queryCatalog(batch=True, b_size=self.settings.limit) else: res = context.queryCatalog(query) return res
def walk(items, result, parent): for item in items: collection = [] if COLLECTION and IContentListingObject.providedBy(item): item = item.getObject() elif IATTopic.providedBy(item): collection = item.queryCatalog(b_size=100, full_objects=True) elif COLLECTION and ICollection.providedBy(item): collection = item.getQuery() if collection: result[item.title_or_id()] = [] walk(collection, result, item.title_or_id()) else: # add only published items if wft.getInfoFor(item, "review_state") != "published": IStatusMessage(self.request).\ add(_(u'Some of the items in your list are private. ' 'They were not included in the wizard - ' 'MailChimp supports only published content.'), type='error') continue result[parent].append({'uid': IUUID(item), 'title': item.title_or_id()}) return result
def get_items(self): context = aq_inner(self.context) if IATFolder.providedBy(context) or \ IATBTreeFolder.providedBy(context): res = self.context.getFolderContents( contentFilter={ 'sort_on': 'getObjPositionInParent', 'portal_type': self.settings.allowed_types, 'limit': self.settings.limit } ) elif IATTopic.providedBy(context): if self.settings.limit and self.settings.limit > 0: res = context.queryCatalog(batch=True, b_size=self.settings.limit, portal_type= self.settings.allowed_types, ) else: res = context.queryCatalog( portal_type=self.settings.allowed_types, limit=self.settings.limit ) elif ICollection.providedBy(context): query = queryparser.parseFormquery( context, context.getRawQuery()) query['portal_type'] = self.settings.allowed_types query['limit'] = self.settings.limit if self.settings.limit and self.settings.limit > 0: res = context.queryCatalog(batch=True, b_size=self.settings.limit) else: res = context.queryCatalog(query) return res
def walk(items, result, parent): for item in items: collection = [] if COLLECTION and IContentListingObject.providedBy(item): item = item.getObject() elif IATTopic.providedBy(item): collection = item.queryCatalog(b_size=100, full_objects=True) elif COLLECTION and ICollection.providedBy(item): collection = item.getQuery() if collection: result[item.title_or_id()] = [] walk(collection, result, item.title_or_id()) else: # add only published items if wft.getInfoFor(item, "review_state") != "published": IStatusMessage(self.request).\ add(_(u'Some of the items in your list are private. ' 'They were not included in the wizard - ' 'MailChimp supports only published content.'), type='error') continue result[parent].append({ 'uid': IUUID(item), 'title': item.title_or_id() }) return result
def __call__(self, context, **query): ctool = getToolByName(context, 'portal_faceted', None) if ctool: search = ctool.search else: logger.debug('portal_faceted not present, using portal_catalog') ctool = getToolByName(context, 'portal_catalog') search = ctool.searchResults # Also get query from Topic buildQuery = getattr(context, 'buildQuery', None) newquery = buildQuery and buildQuery() or {} formquery = None # Get query from Collection if HAS_PAT: if PACI.ICollection.providedBy(context): infos = ICollection_behavior(context) sort_order = ('descending' if infos.sort_reversed else 'ascending') sort_on = infos.sort_on formquery = infos.query if ICollection.providedBy(context): getRawQuery = getattr(context, 'getRawQuery', lambda: []) formquery = getRawQuery() getSortOn = getattr(context, 'getSort_on', lambda: None) sort_on = getSortOn() if sort_on: getSortReversed = getattr( context, 'getSort_reversed', lambda: None) sort_order = getSortReversed() if sort_order: sort_order = 'descending' else: sort_order = 'ascending' else: sort_order = None if formquery is not None: newquery = parseFormquery(context, formquery, sort_on, sort_order) if not isinstance(newquery, dict): newquery = {} # Avoid mixing sorting params from faceted and collection if 'sort_on' not in query: query.pop('sort_order', None) if 'sort_on' in query and 'sort_order' not in query: newquery.pop('sort_order', None) newquery.update(query) notify(QueryWillBeExecutedEvent(context, newquery)) return search(**newquery)
def available(self): # only show on collection/topic if not self.context.restrictedTraverse('@@iscalendarlayout')(): return False if ICollection.providedBy(self.context): return True if IATTopic.providedBy(self.context): return True return False
def edit_collection(self): provider = self.collection() smanager = SecurityManagement.getSecurityManager() allowed = smanager.checkPermission(ChangeTopics, provider) if allowed: provider = self.collection() if provider is not None: if ICollection.providedBy(provider): return provider.absolute_url() + '/edit' return provider.absolute_url() + '/criterion_edit_form' return None
def get_collection_query(obj): """ return collection's query params """ if IATTopic.providedBy(obj): # old style collection return obj.buildQuery() if ICollection.providedBy(obj): # new style collection return parse_new_collection_query(obj)
def results(self, batch=True, b_start=0, b_size=None, inherit=False, extra=[]): querybuilder = QueryBuilder(self, self.REQUEST) sort_order = 'reverse' if self.sort_reversed else 'ascending' if not b_size: b_size = self.item_count query = isinstance(self.query, list) and deepcopy(self.query) or [] if inherit: parent = aq_parent(self) if ICollection.providedBy(parent): query += parent.query and deepcopy(parent.query) or [] inparent = aq_parent(self) if ICollection.providedBy(inparent): query += inparent.query and deepcopy(inparent.query) or [] query = query + extra res = querybuilder( query=query, batch=batch, b_start=b_start, b_size=b_size, sort_on=self.sort_on, sort_order=sort_order, limit=self.limit) return res
def getCollection(self, item): col = item.getCollection() if item.limit > 0: if HAS_COLLECTIONS and ICollection.providedBy(col) or \ HAS_PAC and IDXCollection.providedBy(col): results = col.queryCatalog(b_size=item.limit) else: results = col.queryCatalog(sort_limit=item.limit)[:item.limit] else: results = col.queryCatalog() return results
def results(self, provider): results = [] if provider is not None: # by default we assume that only Collections are addable # as a carousel provider # It doesn't make sense to show *all* objects from a collection # - some of them might return hundreeds of objects if ICollection.providedBy(provider): res = provider.results(b_size=7) return res return provider.queryCatalog()[:7] return results
def queryCatalog(self, limit): """ """ querybuilder = QueryBuilder(self, self.request) if not hasattr(self.data, 'sort_on'): self.data.sort_on = 'effective' if not hasattr(self.data, 'sort_reversed'): self.data.sort_reversed = False sort_order = 'descending' if self.data.sort_reversed else 'ascending' sort_on = self.data.sort_on query = list(self.data.query) if ICollection.providedBy(self.context): query += self.context.query and self.context.query or [] parent = aq_parent(aq_inner(self.context)) if ICollection.providedBy(parent): query += parent.query and parent.query or [] return querybuilder(query=query, sort_on=sort_on, sort_order=sort_order, limit=limit)
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, [k.encode('utf-8') for k in self.data.kw] print >> key, self.data.review_state print >> key, self.data.name 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 catalog = getToolByName(context, 'portal_catalog') self.options = {} if navigation_root_path: root_content = self.context.restrictedTraverse( navigation_root_path) if IATTopic.providedBy(root_content): self.options = root_content.buildQuery() elif ICollection.providedBy(root_content): self.options = parseFormquery( root_content, root_content.getField('query').getRaw(root_content)) print >> key, root_content.modified() self.options['start'] = {'query': end, 'range': 'max'} self.options['end'] = {'query': start, 'range': 'min'} _define_search_options(self, self.options) brains = catalog(**self.options) for brain in brains: add_cachekey(key, brain) return key.getvalue()
def getEventsForCalendar(self): navigation_root_path = self.root() self.options = {} if navigation_root_path: root_content = self.rootTopic() if root_content: if IATTopic.providedBy(root_content): self.options = root_content.buildQuery() elif ICollection.providedBy(root_content): self.options = parseFormquery(root_content, root_content.getField('query').getRaw(root_content)) _define_search_options(self, self.options) weeks = self._get_calendar_structure() return weeks
def results(self, provider): results = [] if provider is not None: # by default we assume that only Collections are addable # as a carousel provider # It doesn't make sense to show *all* objects from a collection # - some of them might return hundreeds of objects registry = getUtility(IRegistry) carousel_viewlet_max_size = registry.forInterface( ICarouselSettings, False).carousel_viewlet_max_size or 7 if ICollection.providedBy(provider): res = provider.results(b_size=carousel_viewlet_max_size) return res return provider.queryCatalog()[:carousel_viewlet_max_size] return results
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, [k.encode('utf-8') for k in self.data.kw] print >> key, self.data.review_state print >> key, self.data.name 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 catalog = getToolByName(context, 'portal_catalog') self.options = {} if navigation_root_path: root_content = self.context.restrictedTraverse(navigation_root_path) if IATTopic.providedBy(root_content): self.options = root_content.buildQuery() elif ICollection.providedBy(root_content): self.options = parseFormquery(root_content, root_content.getField('query').getRaw(root_content)) print >> key, root_content.modified() self.options['start'] = {'query': end, 'range': 'max'} self.options['end'] = {'query': start, 'range': 'min'} _define_search_options(self, self.options) brains = catalog(**self.options) for brain in brains: add_cachekey(key, brain) return key.getvalue()
def getEventsForCalendar(self): navigation_root_path = self.root() self.options = {} if navigation_root_path: root_content = self.rootTopic() if root_content: if IATTopic.providedBy(root_content): self.options = root_content.buildQuery() elif ICollection.providedBy(root_content): self.options = parseFormquery( root_content, root_content.getField('query').getRaw(root_content)) _define_search_options(self, self.options) weeks = self._get_calendar_structure() return weeks
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
def items(self): sdata = [] if IATTopic.providedBy(self.context): sdata = [a for a in self.context.queryCatalog() if a.portal_type in ['libertic_event']] if ICollection.providedBy(self.context): sdata = [a for a in self.context.results(batch=False, brains=True) if a.portal_type in ['libertic_event']] if IDatabase.providedBy(self.context): catalog = getToolByName(self.context, 'portal_catalog') query = { 'portal_type': 'libertic_event', 'review_state': 'published', 'path': { 'query' : '/'.join(self.context.getPhysicalPath()), }, } sdata = catalog.searchResults(**query) return sdata
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
def _is_collection(context): return IATTopic.providedBy(context) or \ ICollection.providedBy(context)
def is_collection(obj): return IATTopic.providedBy(obj) or ICollection.providedBy(obj)
def is_collection(self): ctx = self.default_context return ICollection and ICollection.providedBy(ctx) or False
def is_collection(obj): """ return true if given obj is a plone collection """ return IATTopic.providedBy(obj) or ICollection.providedBy(obj)
def test_adding(self): self.folder.invokeFactory('Collection', 'collection1') p1 = self.folder['collection1'] self.failUnless(ICollection.providedBy(p1))
def test_factory(self): fti = queryUtility(IDexterityFTI, name='Collection') factory = fti.factory new_object = createObject(factory) self.assertTrue(ICollection.providedBy(new_object))
def is_collection(obj): """ return true if given obj is a plone collection """ return IATTopic.providedBy(obj) or \ ICollection.providedBy(obj) or \ IOldCollection.providedBy(obj)
def test_adding(self): self.folder.invokeFactory('Collection', 'collection1') p1 = self.folder['collection1'] self.assertTrue(ICollection.providedBy(p1))
def test_factory(self): fti = queryUtility(IDexterityFTI, name='Collection') factory = fti.factory new_object = createObject(factory) self.failUnless(ICollection.providedBy(new_object))
def rootTopic(self): topic = self.context.restrictedTraverse(self.root()) if IATTopic.providedBy(topic) or ICollection.providedBy(topic): return topic return None
def getCriteria(self): if IATTopic.providedBy(self.context) or ICollection.providedBy(self.context) or IDXCollection.providedBy(self.context): return IListBaseQueryCriteria(self.context)() return []
def getCriteria(self): if IATTopic.providedBy(self.context) or ICollection.providedBy( self.context) or IDXCollection.providedBy(self.context): return IListBaseQueryCriteria(self.context)() return []