示例#1
0
 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;
 }
示例#2
0
 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');
     if (common_config('db', 'type') == 'pgsql') {
         $calc = 'sum(exp(-extract(epoch from (now()-created))/%s)) as weight';
     } else {
         $calc = 'sum(exp(-(now() - created)/%s)) as weight';
     }
     $tags->selectAdd(sprintf($calc, common_config('tag', 'dropoff')));
     $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) {
             $this->showTag($tag, $weight, $weight / $sum);
         }
         $this->elementEnd('ul');
         $this->elementEnd('dd');
         $this->elementEnd('dl');
         $this->elementEnd('div');
     }
 }
 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();
     }
 }