def __call__(self): for obj in [self.context] + \ [i[0] for i in self.context.getTranslations().values()]: if IPromoted.providedBy(obj): promo = IPromotion(obj) if promo.display_on_frontpage: notify(ObjectModifiedEvent(obj)) promo.remove() directlyProvides(obj, directlyProvidedBy(obj) - IPromoted) obj.reindexObject() return self.request.RESPONSE.redirect(self.context.absolute_url() + \ '/edit?portal_status_message=Promotions removed from ' 'item and its translations')
def getPromotedItem(self, ptype=None, itype=None): """ get promoted item """ query = { 'object_provides': { 'query': ['eea.promotion.interfaces.IPromoted'], }, 'review_state': 'published', 'sort_on': 'effective', 'sort_order': 'reverse', } if itype: query['object_provides']['operator'] = 'and' query['object_provides']['query'].append(itype) if ptype: query['portal_type'] = ptype context = self.context.aq_inner query['getThemes'] = getTheme(context) catalog = getToolByName(context, 'portal_catalog') result = catalog(query) item = None for brain in result: item = brain.getObject() promo = IPromotion(item) if not promo.display_on_themepage: continue if not promo.active: continue break return item
def getSpotlight(self): """ retrieves promoted item that has the spotlight promotion assigned """ query = { 'object_provides': { 'query': [ 'eea.promotion.interfaces.IPromoted', 'Products.EEAContentTypes.content.interfaces.IExternalPromotion', ], 'operator': 'or', }, 'review_state': 'published', 'sort_on': 'effective', 'sort_order': 'reverse' } result = self.catalog(query) spotlight = [] for brain in result: obj = brain.getObject() promo = IPromotion(obj) if not promo.display_in_spotlight: continue if not promo.active: continue spotlight.append(brain) break return spotlight
def find_promotions(self): """ Find promotions """ ret = [] result = self.current_promotions() for brain in result: obj = brain.getObject() try: promo = IPromotion(obj) except Exception: continue ret.append({ 'title': brain.Title, 'href': promo.edit_url, 'locations': u', '.join(promo.locations), 'themes': u', '.join(promo.themes), 'themepage_section': (promo.themepage_section or '').split('/')[-1], 'url': promo.url, 'absolute_url': brain.getURL(), 'active': promo.active, 'is_external': promo.is_external, }) return ret
def getPromotions(self): """ Retrieves external and internal promotions for data and maps section """ query = { 'object_provides': { 'query': [ 'eea.promotion.interfaces.IPromoted', 'Products.EEAContentTypes.content.interfaces.IExternalPromotion', ], 'operator': 'or', }, 'review_state': 'published', 'sort_on': 'effective', 'sort_order': 'reverse' } noOfItems = 18 result = self.catalog(query) datasets_interfaces = [ 'Products.EEAContentTypes.content.interfaces.IInteractiveMap', 'Products.EEAContentTypes.content.interfaces.IInteractiveData', 'eea.dataservice.interfaces.IEEAFigureGraph', 'eea.dataservice.interfaces.IDataset', 'eea.dataservice.interfaces.IEEAFigureMap', 'eea.indicators.content.interfaces.IIndicatorAssessment' ] cPromos = [] for brain in result: obj = brain.getObject() promo = IPromotion(obj) obj_interfaces = obj.restrictedTraverse('@@get_interfaces')() for i in datasets_interfaces: if i in obj_interfaces: if not promo.display_on_datacentre: continue cPromos.append(brain) if len(cPromos) == noOfItems: break promotions = len(cPromos) if promotions >= 6: return cPromos else: cPromos.extend(self.getAllProducts()) return list(set(cPromos))
def disable_inactive_promotions(self): """ Disable all inactive promotions """ result = self.current_promotions() for brain in result: obj = brain.getObject() try: promo = IPromotion(obj) except Exception: continue if not promo.active: noLongerProvides(obj, IPromoted) obj.reindexObject(idxs=['object_provides']) msg = "Inactive Promotions have been succesfully disabled" IStatusMessage(self.request).addStatusMessage(msg, type='info') return self.request.response.redirect(self.context.absolute_url() + '/@@promotion_admin_view')
def _getPromotions(self, noOfItems=6): """ utility function to retrieve external and internal promotions """ query = { 'object_provides': { 'query': [ 'eea.promotion.interfaces.IPromoted', 'Products.EEAContentTypes.content.interfaces.IExternalPromotion', ], 'operator': 'or', }, 'review_state': 'published', 'sort_on': 'effective', 'sort_order': 'reverse' } context = self.context.aq_inner themes = getTheme(context) if themes: query['getThemes'] = themes result = self.catalog(query) cPromos = [] for brain in result: obj = brain.getObject() promo = IPromotion(obj) if themes: if not promo.display_on_themepage: continue if hasattr(context, 'layout') and \ context.layout == 'frontpage_view': if not promo.display_on_frontpage: continue if not promo.active: continue promo_versionIds = [b.getVersionId for b in cPromos] # Add to promo list if we do not already have a newer version of this # versionId in the promo list if not brain.getVersionId in promo_versionIds: cPromos.append(brain) if len(cPromos) == noOfItems: break return cPromos