コード例 #1
0
ファイル: actions.py プロジェクト: eea/eea.promotion
 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')
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
 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
コード例 #5
0
    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))
コード例 #6
0
 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')
コード例 #7
0
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