def get_mailing_lists(self, path=None): query = dict(portal_type='Open Mailing List') if path: query['path'] = path ml_brains = self.catalog(**query) mailing_lists = [brain for brain in ml_brains if brain.created <= self.report_date] mls = [] for lst in mailing_lists: mail_catalog = get_utility_for_context(ISearchableArchive, context=lst.getObject()) latest_date = DateTime.DateTime(0) if mail_catalog: query = dict(sort_on='date', sort_order='descending') brains = mail_catalog(**query) latest_date = brains[0].date mls.append({'Title':lst.Title, 'latest_date':latest_date, 'created':lst.created, 'num_threads': lst.mailing_list_threads, }) return mls
def items(self, n_items=5): if hasattr(self,'_items'): # If the property already contains something, there's no need to # regenerate it. return self._items # set self._items to empty list in case we have # no results at all self._items = [] all_msgs = [] for ml_id in self.mlists: mlist = self.context._getOb(ml_id) if not mlist.can_view_archives(mlist.REQUEST): continue cat = get_utility_for_context(ISearchableArchive, mlist) # aq wrap since brains work better this way cat = cat.__of__(mlist) msgs = cat(sort_limit=n_items, sort_order='descending', sort_on='modification_date') all_msgs.extend(msgs) all_msgs.sort(key=lambda x:x.modification_date, reverse=True) all_msgs = all_msgs[:n_items] for msg in all_msgs: mstruct = messageStructure(msg, sub_mgr=mlist) self.add_item(title=obfct(msg.subject), description=obfct(msg.subject), link='%s/forum_view' % mstruct['url'], author=mstruct['mail_from'], pubDate=msg.modification_date, # context=mlist, # byline='by', # responses=response ) return self._items