def spotlight(self): if (isinstance(c.site, DefaultSR) and (not c.user_is_loggedin or (c.user_is_loggedin and c.user.pref_organic))): spotlight_links = organic.organic_links(c.user) pos = organic_pos() if not spotlight_links: pos = 0 elif pos != 0: pos = pos % len(spotlight_links) if c.user.pref_show_sponsors or not c.user.gold: spotlight_links, pos = promote.insert_promoted(spotlight_links, pos) trial = populate_spotlight() # Need to do this again, because if there was a duplicate removed, # pos might be pointing outside the list. if not spotlight_links: pos = 0 elif pos != 0: pos = pos % len(spotlight_links) if trial: spotlight_links.insert(pos, trial._fullname) if not spotlight_links: return None # get links in proximity to pos num_tl = len(spotlight_links) if num_tl <= 3: disp_links = spotlight_links else: left_side = max(-1, min(num_tl - 3, 8)) disp_links = [spotlight_links[(i + pos) % num_tl] for i in xrange(-2, left_side)] def trial_keep_fn(item): if trial and trial._fullname == item._fullname: return True return organic.keep_fresh_links(item) def trial_wrap(item): if item is trial: w = Wrapped(item) w.trial_mode = True w.render_class = LinkOnTrial return w return self.builder_wrapper(item) b = IDBuilder(disp_links, wrap = trial_wrap if trial else self.builder_wrapper, num = organic.organic_length, skip = True, keep_fn = trial_keep_fn if trial else organic.keep_fresh_links) try: vislink = spotlight_links[pos] except IndexError: g.log.error("spotlight_links = %r" % spotlight_links) g.log.error("pos = %d" % pos) raise s = SpotlightListing(b, spotlight_links = spotlight_links, visible_link = vislink, max_num = self.listing_obj.max_num, max_score = self.listing_obj.max_score).listing() if len(s.things) > 0: # only pass through a listing if the links made it # through our builder organic.update_pos(pos+1) return s # no organic box on a hot page, then show a random promoted link elif not isinstance(c.site, DefaultSR) and c.user.pref_show_sponsors: link_ids = randomized_promotion_list(c.user, c.site) if link_ids: res = wrap_links(link_ids, wrapper = self.builder_wrapper, num = 1, keep_fn = lambda x: x.fresh, skip = True) if res.things: return res
def spotlight(self): if (isinstance(c.site, DefaultSR) and (not c.user_is_loggedin or (c.user_is_loggedin and c.user.pref_organic))): spotlight_links = organic.organic_links(c.user) pos = organic_pos() if not spotlight_links: pos = 0 elif pos != 0: pos = pos % len(spotlight_links) if c.user.pref_show_sponsors or not c.user.gold: spotlight_links, pos = promote.insert_promoted( spotlight_links, pos) trial = populate_spotlight() # Need to do this again, because if there was a duplicate removed, # pos might be pointing outside the list. if not spotlight_links: pos = 0 elif pos != 0: pos = pos % len(spotlight_links) if trial: spotlight_links.insert(pos, trial._fullname) if not spotlight_links: return None # get links in proximity to pos num_tl = len(spotlight_links) if num_tl <= 3: disp_links = spotlight_links else: left_side = max(-1, min(num_tl - 3, 8)) disp_links = [ spotlight_links[(i + pos) % num_tl] for i in xrange(-2, left_side) ] def trial_keep_fn(item): if trial and trial._fullname == item._fullname: return True return organic.keep_fresh_links(item) def trial_wrap(item): if item is trial: w = Wrapped(item) w.trial_mode = True w.render_class = LinkOnTrial return w return self.builder_wrapper(item) b = IDBuilder( disp_links, wrap=trial_wrap if trial else self.builder_wrapper, num=organic.organic_length, skip=True, keep_fn=trial_keep_fn if trial else organic.keep_fresh_links) try: vislink = spotlight_links[pos] except IndexError: g.log.error("spotlight_links = %r" % spotlight_links) g.log.error("pos = %d" % pos) raise s = SpotlightListing( b, spotlight_links=spotlight_links, visible_link=vislink, max_num=self.listing_obj.max_num, max_score=self.listing_obj.max_score).listing() if len(s.things) > 0: # only pass through a listing if the links made it # through our builder organic.update_pos(pos + 1) return s # no organic box on a hot page, then show a random promoted link elif not isinstance(c.site, DefaultSR) and c.user.pref_show_sponsors: link_ids = randomized_promotion_list(c.user, c.site) if link_ids: res = wrap_links(link_ids, wrapper=self.builder_wrapper, num=1, keep_fn=lambda x: x.fresh, skip=True) res.parent_name = "promoted" if res.things: return res