def handleRepair(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        query = Indexed('chimpfeeds')
        brains = self.context.portal_catalog.evalAdvancedQuery(query)

        context = self.getContent()
        vocabulary = feeds_factory(context)
        all_feeds = set(term.value for term in vocabulary)

        count = 0
        bad = set()

        changed = []
        for i, brain in enumerate(brains):
            try:
                feeds = set(brain.chimpfeeds)
            except TypeError:
                continue

            missing = feeds - all_feeds
            bad |= missing

            if missing:
                count += 1
                obj = brain.getObject()
                try:
                    field = obj.getField('feeds')
                except AttributeError:
                    feeds = obj.feeds
                    field = None
                else:
                    feeds = set(field.get(obj))

                fixed = feeds - missing

                if field is None:
                    obj.feeds = fixed
                else:
                    field.set(obj, fixed)

                changed.append(obj)

        for obj in changed:
            modified(obj)
            obj.reindexObject()

        logger.info("Repair complete; %d items updated." % count)
        if bad:
            logger.info("Feeds removed: %s." % (", ".join(bad).encode('utf-8')))

        IStatusMessage(self.request).addStatusMessage(
            _(u"Repaired ${count} items.", mapping={'count': count}),
            "info"
        )
Exemplo n.º 2
0
    def handleRepair(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        query = Indexed('chimpfeeds')
        brains = self.context.portal_catalog.evalAdvancedQuery(query)

        context = self.getContent()
        vocabulary = feeds_factory(context)
        all_feeds = set(term.value for term in vocabulary)

        count = 0
        bad = set()

        changed = []
        for i, brain in enumerate(brains):
            try:
                feeds = set(brain.chimpfeeds)
            except TypeError:
                continue

            missing = feeds - all_feeds
            bad |= missing

            if missing:
                count += 1
                obj = brain.getObject()
                try:
                    field = obj.getField('feeds')
                except AttributeError:
                    feeds = obj.feeds
                    field = None
                else:
                    feeds = set(field.get(obj))

                fixed = feeds - missing

                if field is None:
                    obj.feeds = fixed
                else:
                    field.set(obj, fixed)

                changed.append(obj)

        for obj in changed:
            modified(obj)
            obj.reindexObject()

        logger.info("Repair complete; %d items updated." % count)
        if bad:
            logger.info("Feeds removed: %s." %
                        (", ".join(bad).encode('utf-8')))

        IStatusMessage(self.request).addStatusMessage(
            _(u"Repaired ${count} items.", mapping={'count': count}), "info")
Exemplo n.º 3
0
    def handleApprove(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        catalog = self.context.portal_catalog
        for rid in data['items'] or ():
            metadata = catalog.getMetadataForRID(rid)
            for brain in catalog(UID=metadata['UID']):
                obj = brain.getObject()

                try:
                    field = obj.getField('feedModerate')
                except AttributeError:
                    obj.feedModerate = True
                else:
                    field.set(obj, True)

                obj.reindexObject(['feedModerate'])
Exemplo n.º 4
0
    def handleApprove(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        catalog = self.context.portal_catalog
        bumped = []
        today = datetime.date.today()

        uids = []
        for rid in data['items'] or ():
            metadata = catalog.getMetadataForRID(rid)
            uids.append(metadata['UID'])

        settings = IFeedSettings(self.context)

        brains = catalog.unrestrictedSearchResults(UID=uids)
        for brain in brains:
            obj = brain.getObject()

            # Bump the scheduled date to today's date. This ensures that
            # the item will be shown on the moderation portlet.
            try:
                date = obj.getField('feedSchedule').get(obj)
                if date is not None:
                    date = date.asdatetime().date()
            except AttributeError:
                date = obj.feedSchedule

            if settings.bump_date_on_moderation and (date is None
                                                     or date < today):
                try:
                    field = obj.getField('feedSchedule')
                except AttributeError:
                    obj.feedSchedule = today
                else:
                    field.set(obj, DateTime(today.year, today.month,
                                            today.day))

                bumped.append(obj)

            try:
                field = obj.getField('feedModerate')
            except AttributeError:
                obj.feedModerate = True
            else:
                field.set(obj, True)

            # Reindex entire object (to make sure the metadata is
            # updated, too).
            obj.reindexObject()

        if data['items']:
            self.widgets['items'].update()

        if bumped:
            IStatusMessage(self.request).addStatusMessage(
                _(
                    u"The scheduled date has been set to today's date "
                    u"for the following items that were scheduled to "
                    u"a date in the past: ${titles}.",
                    mapping={
                        'titles':
                        u', '.join(
                            [obj.Title().decode('utf-8') for obj in bumped])
                    }),
                "info",
            )
Exemplo n.º 5
0
 def save(self):
     #get the content from etherpad
     field = self.context.getField(self.archetypes_fieldname)
     html = self.etherpad.getHTML(padID=self.padID)
     if html and 'html' in html:
         field.set(self.context, html['html'], mimetype='text/html')
Exemplo n.º 6
0
    def handleApprove(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        catalog = self.context.portal_catalog
        bumped = []
        today = datetime.date.today()

        uids = []
        for rid in data['items'] or ():
            metadata = catalog.getMetadataForRID(rid)
            uids.append(metadata['UID'])

        settings = IFeedSettings(self.context)

        brains = catalog.unrestrictedSearchResults(UID=uids)
        for brain in brains:
            obj = brain.getObject()

            # Bump the scheduled date to today's date. This ensures that
            # the item will be shown on the moderation portlet.
            try:
                date = obj.getField('feedSchedule').get(obj)
                if date is not None:
                    date = date.asdatetime().date()
            except AttributeError:
                date = obj.feedSchedule

            if settings.bump_date_on_moderation and (date is None or date < today):
                try:
                    field = obj.getField('feedSchedule')
                except AttributeError:
                    obj.feedSchedule = today
                else:
                    field.set(obj, DateTime(
                        today.year, today.month, today.day
                    ))

                bumped.append(obj)

            try:
                field = obj.getField('feedModerate')
            except AttributeError:
                obj.feedModerate = True
            else:
                field.set(obj, True)

            # Reindex entire object (to make sure the metadata is
            # updated, too).
            obj.reindexObject()

        if data['items']:
            self.widgets['items'].update()

        if bumped:
            IStatusMessage(self.request).addStatusMessage(
                _(u"The scheduled date has been set to today's date "
                  u"for the following items that were scheduled to "
                  u"a date in the past: ${titles}.",
                  mapping={'titles': u', '.join(
                      [obj.Title().decode('utf-8') for obj in bumped])}),
                "info",
            )