trac#1223 Show most popular notices per tag in the tag page sidebar.

This commit is contained in:
Robin Millette 2009-04-14 23:03:19 +00:00
parent 60245f6a27
commit 2039466495
2 changed files with 24 additions and 8 deletions

View File

@ -45,6 +45,13 @@ class TagAction extends Action
return true; return true;
} }
function showSections()
{
$pop = new PopularNoticeSection($this);
$pop->show();
}
function title() function title()
{ {
if ($this->page == 1) { if ($this->page == 1) {

View File

@ -50,17 +50,26 @@ class PopularNoticeSection extends NoticeSection
{ {
if (common_config('db', 'type') == 'pgsql') { if (common_config('db', 'type') == 'pgsql') {
$weightexpr='sum(exp(-extract(epoch from (now() - fave.modified)) / %s))'; $weightexpr='sum(exp(-extract(epoch from (now() - fave.modified)) / %s))';
if (!empty($this->out->tag)) {
$tag = pg_escape_string($this->tag);
}
} else { } else {
$weightexpr='sum(exp(-(now() - fave.modified) / %s))'; $weightexpr='sum(exp(-(now() - fave.modified) / %s))';
if (!empty($this->out->tag)) {
$tag = mysql_escape_string($this->out->tag);
}
} }
$qry = "SELECT notice.*, $weightexpr as weight ";
$qry = 'SELECT notice.*, '. if(isset($tag)) {
$weightexpr . ' as weight ' . $qry .= 'FROM notice_tag, notice JOIN fave ON notice.id = fave.notice_id ' .
'FROM notice JOIN fave ON notice.id = fave.notice_id ' . "WHERE notice.id = notice_tag.notice_id and '$tag' = notice_tag.tag";
'GROUP BY notice.id,notice.profile_id,notice.content,notice.uri,' . } else {
'notice.rendered,notice.url,notice.created,notice.modified,' . $qry .= 'FROM notice JOIN fave ON notice.id = fave.notice_id';
'notice.reply_to,notice.is_local,notice.source ' . }
'ORDER BY weight DESC'; $qry .= ' GROUP BY notice.id,notice.profile_id,notice.content,notice.uri,' .
'notice.rendered,notice.url,notice.created,notice.modified,' .
'notice.reply_to,notice.is_local,notice.source ' .
'ORDER BY weight DESC';
$offset = 0; $offset = 0;
$limit = NOTICES_PER_SECTION + 1; $limit = NOTICES_PER_SECTION + 1;