]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/plugin/MostPopular.php
Revert r7194
[SourceForge/phpwiki.git] / lib / plugin / MostPopular.php
1 <?php // -*-php-*-
2 rcs_id('$Id$');
3 /*
4  Copyright 1999, 2000, 2001, 2002 $ThePhpWikiProgrammingTeam
5  Copyright 2009 Marc-Etienne Vargenau, Alcatel-Lucent
6
7  This file is part of PhpWiki.
8
9  PhpWiki is free software; you can redistribute it and/or modify
10  it under the terms of the GNU General Public License as published by
11  the Free Software Foundation; either version 2 of the License, or
12  (at your option) any later version.
13
14  PhpWiki is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with PhpWiki; if not, write to the Free Software
21  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  */
23
24 require_once('lib/PageList.php');
25
26 class WikiPlugin_MostPopular
27 extends WikiPlugin
28 {
29     function getName () {
30         return _("MostPopular");
31     }
32
33     function getDescription () {
34         return _("List the most popular pages.");
35     }
36
37     function getVersion() {
38         return preg_replace("/[Revision: $]/", '',
39                             "\$Revision$");
40     }
41
42     function getDefaultArguments() {
43         return array_merge
44             (
45              PageList::supportedArgs(),
46              array('pagename' => '[pagename]', // hackish
47                    //'exclude'  => '',
48                    'limit'    => 20, // limit <0 returns least popular pages
49                    'noheader' => 0,
50                    'sortby'   => '-hits',
51                    'info'     => false,
52                    //'paging'   => 'auto'
53                    ));
54     }
55     
56     // info arg allows multiple columns
57     // info=mtime,hits,summary,version,author,locked,minor
58     // exclude arg allows multiple pagenames exclude=HomePage,RecentChanges
59     // sortby: only pagename or hits. mtime not!
60
61     function run($dbi, $argstr, &$request, $basepage) {
62         $args = $this->getArgs($argstr, $request);
63         extract($args);
64         if (strstr($sortby,'mtime')) {
65             trigger_error(_("sortby=mtime not supported with MostPopular"),
66                           E_USER_WARNING);
67             $sortby = '';
68         }
69         $columns = $info ? explode(",", $info) : array();
70         array_unshift($columns, 'hits');
71         
72         if (! $request->getArg('count')) {
73             //$args['count'] = $dbi->numPages(false,$exclude);
74             $allpages = $dbi->mostPopular(0, $sortby);
75             $args['count'] = $allpages->count();
76         } else {
77             $args['count'] = $request->getArg('count');
78         }
79         //$dbi->touch();
80         $pages = $dbi->mostPopular($limit, $sortby);
81         $pagelist = new PageList($columns, $exclude, $args);
82         while ($page = $pages->next()) {
83             $hits = $page->get('hits');
84             // don't show pages with no hits if most popular pages wanted
85             if ($hits == 0 && $limit > 0) {
86                 break;
87             }
88             $pagelist->addPage($page);
89         }
90         $pages->free();
91
92         if (! $noheader) {
93             if ($limit > 0) {
94                 $pagelist->setCaption(fmt("The %d most popular pages of this wiki:", $limit));
95             } else if ($limit < 0) {
96                 $pagelist->setCaption(fmt("The %d least popular pages of this wiki:", -$limit));
97             } else {
98                 $pagelist->setCaption(_("Visited pages on this wiki, ordered by popularity:"));
99             }
100         }
101
102         return $pagelist;
103     }
104 };
105
106 // Local Variables:
107 // mode: php
108 // tab-width: 8
109 // c-basic-offset: 4
110 // c-hanging-comment-ender-p: nil
111 // indent-tabs-mode: nil
112 // End:
113 ?>