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" )
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")
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'])
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", )
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')
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", )