def getAnnouncements(self, limit=5, published_only=True): """See IHasAnnouncements.""" # Create the SQL query. query = '1=1 ' # Filter for published news items if necessary. if published_only: query += """ AND Announcement.date_announced <= timezone('UTC'::text, now()) AND Announcement.active IS TRUE """ if IProduct.providedBy(self): if self.projectgroup is None: query += """ AND Announcement.product = %s""" % sqlvalues(self.id) else: query += """ AND (Announcement.product = %s OR Announcement.project = %s) """ % sqlvalues(self.id, self.projectgroup) elif IProjectGroup.providedBy(self): query += """ AND (Announcement.project = %s OR Announcement.product IN (SELECT id FROM Product WHERE project = %s)) """ % sqlvalues(self.id, self.id) elif IDistribution.providedBy(self): query += (' AND Announcement.distribution = %s' % sqlvalues(self.id)) elif IAnnouncementSet.providedBy(self): # There is no need to filter for pillar if we are looking for # all announcements. pass else: raise AssertionError('Unsupported announcement target') return Announcement.select(query, limit=limit)
def getAnnouncements(self, limit=5, published_only=True): """See IHasAnnouncements.""" # Create the SQL query. query = '1=1 ' # Filter for published news items if necessary. if published_only: query += """ AND Announcement.date_announced <= timezone('UTC'::text, now()) AND Announcement.active IS TRUE """ if IProduct.providedBy(self): if self.project is None: query += """ AND Announcement.product = %s""" % sqlvalues(self.id) else: query += """ AND (Announcement.product = %s OR Announcement.project = %s) """ % sqlvalues(self.id, self.project) elif IProjectGroup.providedBy(self): query += """ AND (Announcement.project = %s OR Announcement.product IN (SELECT id FROM Product WHERE project = %s)) """ % sqlvalues (self.id, self.id) elif IDistribution.providedBy(self): query += (' AND Announcement.distribution = %s' % sqlvalues(self.id)) elif IAnnouncementSet.providedBy(self): # There is no need to filter for pillar if we are looking for # all announcements. pass else: raise AssertionError, 'Unsupported announcement target' return Announcement.select(query, limit=limit)
def href(self): if IAnnouncementSet.providedBy(self.context): return urlappend(self.rooturl, 'announcements.atom') else: return urlappend(canonical_url(self.context, rootsite='feeds'), 'announcements.atom')
def title(self): if IAnnouncementSet.providedBy(self.context): return 'All Announcements' else: return 'Announcements for %s' % self.context.displayname