X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=actions%2Ftag.php;h=50b76dbcdb40830cbf541fe967dd7509b89dab51;hb=facba2566b7695a84cb8bd6b40e9f9b842db6776;hp=132d76517151e0af0ab6d6f3adce68a4488816f0;hpb=9d89e7b4ac605f89a0769e62dd6ea736f59e0be4;p=quix0rs-gnu-social.git diff --git a/actions/tag.php b/actions/tag.php index 132d765171..50b76dbcdb 100644 --- a/actions/tag.php +++ b/actions/tag.php @@ -21,7 +21,6 @@ if (!defined('LACONICA')) { exit(1); } require_once(INSTALLDIR.'/actions/showstream.php'); define('TAGS_PER_PAGE', 100); -define('AGE_FACTOR', 864000.0); class TagAction extends StreamAction { @@ -36,7 +35,6 @@ class TagAction extends StreamAction { common_show_header(sprintf(_("Notices tagged with %s"), $tag), array($this, 'show_header'), $tag, array($this, 'show_top')); - $this->show_notices($tag); } else { common_show_header(_("Tags"), @@ -49,7 +47,7 @@ class TagAction extends StreamAction { } function show_header($tag = false) { - if (false && $tag) { + if ($tag) { common_element('link', array('rel' => 'alternate', 'href' => common_local_url('tagrss', array('tag' => $tag)), 'type' => 'application/rss+xml', @@ -68,29 +66,35 @@ class TagAction extends StreamAction { common_element_start('div', 'instructions'); common_raw($output); common_element_end('div'); + $this->public_views_menu(); } - - common_element_start('ul', array('id' => 'nav_views')); - - common_menu_item(common_local_url('tags'), - _('Recent Tags'), - _('Recent Tags'), - !$tag); - if ($tag) { - common_menu_item(common_local_url('tag', array('tag' => $tag)), - '#' . $tag, - sprintf(_("Notices tagged with %s"), $tag), - true); + else { + $this->show_feeds_list(array(0=>array('href'=>common_local_url('tagrss'), + 'type' => 'rss', + 'version' => 'RSS 1.0', + 'item' => 'tagrss'))); } - common_element_end('ul'); } function show_tags() { # This should probably be cached rather than recalculated $tags = DB_DataObject::factory('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'); - $tags->selectAdd(sprintf('sum(exp(-(now() - created)/%f)) as weight', AGE_FACTOR)); + 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'); @@ -109,43 +113,19 @@ class TagAction extends StreamAction { $tw[$tags->tag] = $tags->weight; $sum += $tags->weight; } - common_element_end('ul'); - } - common_pagination($page > 1, $cnt > TAGS_PER_PAGE, - $page, 'tags'); - } + ksort($tw); + + foreach ($tw as $tag => $weight) { + $this->show_tag($tag, $weight, $weight/$sum); + } - private static function show_tag($tag) { - common_element_start('li', array('class' => 'notice_single')); - common_element_start('a', array( - 'class' => 'nickname', - 'href' => common_local_url('tag', array('tag' => $tag->tag)), - 'title' => sprintf(_("Notices tagged with %s"), $tag->tag))); - common_text('#' . $tag->tag); - common_element_end('a'); - common_text(sprintf(_('%s Notices recently tagged with %s'), $tag->num, $tag->tag)); - - $notice = Notice::staticGet($tag->last_notice_id); - if ($notice) { - $noticeurl = common_local_url('shownotice', array('notice' => $notice->id)); - common_element_start('p', 'time'); - common_text(_('Last message posted: ')); - common_element('a', array('class' => 'permalink', - 'href' => $noticeurl, - 'title' => common_exact_date($notice->created)), - common_date_string($notice->created)); - - common_text(_(' by ')); - $profile = $notice->getProfile(); - common_element('a', array('href' => $profile->profileurl), - $profile->nickname); common_element_end('p'); } } function show_tag($tag, $weight, $relative) { - + # XXX: these should probably tune to the size of the site if ($relative > 0.1) { $cls = 'largest'; @@ -162,42 +142,29 @@ class TagAction extends StreamAction { } else { $cls = 'smallest'; } - + common_element('a', array('class' => "$cls weight-$weight relative-$relative", 'href' => common_local_url('tag', array('tag' => $tag))), $tag); common_text(' '); } - - function show_notices($tag) { - - $tags = DB_DataObject::factory('Notice_tag'); - $tags->tag = $tag; - - $tags->orderBy('created DESC'); + function show_notices($tag) { + $cnt = 0; + $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1; - $tags->limit((($page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1); + $notice = Notice_tag::getStream($tag, (($page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1); - $cnt = $tags->find(); - - if ($cnt > 0) { + if ($notice) { common_element_start('ul', array('id' => 'notices')); - for ($i = 0; $i < min($cnt, NOTICES_PER_PAGE); $i++) { - if ($tags->fetch()) { - $notice = new Notice(); - $notice->id = $tags->notice_id; - $result = $notice->find(true); - if (!$result) { - continue; - } - $this->show_notice($notice); - } else { - // shouldn't happen! + while ($notice->fetch()) { + $cnt++; + if ($cnt > NOTICES_PER_PAGE) { break; } + $this->show_notice($notice); } common_element_end('ul'); }