function _streamDirect($tag, $offset, $limit, $since_id, $max_id) { $nt = new Notice_tag(); $nt->tag = $tag; $nt->selectAdd(); $nt->selectAdd('notice_id'); if ($since_id != 0) { $nt->whereAdd('notice_id > ' . $since_id); } if ($max_id != 0) { $nt->whereAdd('notice_id < ' . $max_id); } $nt->orderBy('notice_id DESC'); if (!is_null($offset)) { $nt->limit($offset, $limit); } $ids = array(); if ($nt->find()) { while ($nt->fetch()) { $ids[] = $nt->notice_id; } } return $ids; }
function showContent() { # This should probably be cached rather than recalculated $tags = new Notice_tag(); #Need to clear the selection and then only re-add the field #we are grouping by, otherwise it's not a valid 'group by' #even though MySQL seems to let it slide... $tags->selectAdd(); $tags->selectAdd('tag'); #Add the aggregated columns... $tags->selectAdd('max(notice_id) as last_notice_id'); $calc = common_sql_weight('created', common_config('tag', 'dropoff')); $cutoff = sprintf("notice_tag.created > '%s'", common_sql_date(time() - common_config('tag', 'cutoff'))); $tags->selectAdd($calc . ' as weight'); $tags->whereAdd($cutoff); $tags->groupBy('tag'); $tags->orderBy('weight DESC'); $tags->limit(TAGS_PER_PAGE); $cnt = $tags->find(); if ($cnt > 0) { $this->elementStart('div', array('id' => 'tagcloud', 'class' => 'section')); $tw = array(); $sum = 0; while ($tags->fetch()) { $tw[$tags->tag] = $tags->weight; $sum += $tags->weight; } ksort($tw); $this->elementStart('dl'); $this->element('dt', null, _('Tag cloud')); $this->elementStart('dd'); $this->elementStart('ul', 'tags xoxo tag-cloud'); foreach ($tw as $tag => $weight) { if ($sum) { $weightedSum = $weight / $sum; } else { $weightedSum = 0.5; } $this->showTag($tag, $weight, $weightedSum); } $this->elementEnd('ul'); $this->elementEnd('dd'); $this->elementEnd('dl'); $this->elementEnd('div'); } else { $this->showEmptyList(); } }