]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/plugin/MostPopular.php
No &new
[SourceForge/phpwiki.git] / lib / plugin / MostPopular.php
1 <?php
2
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 along
20  * with PhpWiki; if not, write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22  */
23
24 require_once 'lib/PageList.php';
25
26 class WikiPlugin_MostPopular
27     extends WikiPlugin
28 {
29     function getName()
30     {
31         return _("MostPopular");
32     }
33
34     function getDescription()
35     {
36         return _("List the most popular pages.");
37     }
38
39     function getDefaultArguments()
40     {
41         return array_merge
42         (
43             PageList::supportedArgs(),
44             array('pagename' => '[pagename]', // hackish
45                 //'exclude'  => '',
46                 'limit' => 20, // limit <0 returns least popular pages
47                 'noheader' => 0,
48                 'sortby' => '-hits',
49                 'info' => false,
50                 //'paging'   => 'auto'
51             ));
52     }
53
54     // info arg allows multiple columns
55     // info=mtime,hits,summary,version,author,locked,minor
56     // exclude arg allows multiple pagenames exclude=HomePage,RecentChanges
57     // sortby: only pagename or hits. mtime not!
58
59     function run($dbi, $argstr, &$request, $basepage)
60     {
61         $args = $this->getArgs($argstr, $request);
62         extract($args);
63         if (strstr($sortby, 'mtime')) {
64             trigger_error(_("sortby=mtime not supported with MostPopular"),
65                 E_USER_WARNING);
66             $sortby = '';
67         }
68         $columns = $info ? explode(",", $info) : array();
69         array_unshift($columns, 'hits');
70
71         if (!$request->getArg('count')) {
72             //$args['count'] = $dbi->numPages(false,$exclude);
73             $allpages = $dbi->mostPopular(0, $sortby);
74             $args['count'] = $allpages->count();
75         } else {
76             $args['count'] = $request->getArg('count');
77         }
78         //$dbi->touch();
79         $pages = $dbi->mostPopular($limit, $sortby);
80         $pagelist = new PageList($columns, $exclude, $args);
81         while ($page = $pages->next()) {
82             $hits = $page->get('hits');
83             // don't show pages with no hits if most popular pages wanted
84             if ($hits == 0 && $limit > 0) {
85                 break;
86             }
87             $pagelist->addPage($page);
88         }
89         $pages->free();
90
91         if (!$noheader) {
92             if ($limit > 0) {
93                 $pagelist->setCaption(fmt("The %d most popular pages of this wiki:", $limit));
94             } elseif ($limit < 0) {
95                 $pagelist->setCaption(fmt("The %d least popular pages of this wiki:", -$limit));
96             } else {
97                 $pagelist->setCaption(_("Visited pages on this wiki, ordered by popularity:"));
98             }
99         }
100
101         return $pagelist;
102     }
103 }
104
105 // Local Variables:
106 // mode: php
107 // tab-width: 8
108 // c-basic-offset: 4
109 // c-hanging-comment-ender-p: nil
110 // indent-tabs-mode: nil
111 // End: