. /** * The GroupFavorited plugin adds a menu item for popular notices in groups. * * @package GroupFavoritedPlugin * @author Brion Vibber * @copyright 2010-2019 Free Software Foundation, Inc http://www.fsf.org * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ defined('GNUSOCIAL') || die(); class GroupFavoritedAction extends ShowgroupAction { /** * Title of the page * * @return string page title, with page number * @throws Exception */ public function title() { $base = $this->group->getFancyName(); if ($this->page == 1) { // TRANS: %s is a group name. return sprintf(_m('Popular posts in %s group'), $base); } else { // TRANS: %1$s is a group name, %2$s is a group number. return sprintf( _m('Popular posts in %1$s group, page %2$d'), $base, $this->page ); } } /** * Content area * * Shows the list of popular notices * * @return void */ public function showContent() { $groupId = (int)$this->group->id; $weightexpr = common_sql_weight('fave.modified', common_config('popular', 'dropoff')); $cutoff = sprintf( "fave.modified > TIMESTAMP '%s'", common_sql_date(time() - common_config('popular', 'cutoff')) ); $offset = ($this->page - 1) * NOTICES_PER_PAGE; $limit = NOTICES_PER_PAGE + 1; $qry = 'SELECT notice.*, ' . $weightexpr . ' AS weight ' . 'FROM notice ' . 'INNER JOIN group_inbox ON notice.id = group_inbox.notice_id ' . 'INNER JOIN fave ON notice.id = fave.notice_id ' . 'WHERE ' . $cutoff . ' AND group_id = ' . $groupId . ' ' . 'GROUP BY id, profile_id, uri, content, rendered, url, created, notice.modified, reply_to, is_local, source, notice.conversation ' . 'ORDER BY weight DESC LIMIT ' . $limit . ' OFFSET ' . $offset; $notice = Memcached_DataObject::cachedQuery('Notice', $qry, 600); $nl = new NoticeList($notice, $this); $cnt = $nl->show(); /*if ($cnt == 0) { $this->showEmptyList(); }*/ $this->pagination( $this->page > 1, $cnt > NOTICES_PER_PAGE, $this->page, 'groupfavorited', array('nickname' => $this->group->nickname) ); } }