~alltray-developers/alltray/website

« back to all changes in this revision

Viewing changes to mediawiki-1.14.0/includes/api/ApiQueryLangLinks.php

  • Committer: Michael B. Trausch
  • Date: 2011-07-14 20:08:10 UTC
  • Revision ID: mike@trausch.us-20110714200810-m01r8l2f3w12uu5o
Remove wiki and update front page.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
 
3
 
/*
4
 
 * Created on May 13, 2007
5
 
 *
6
 
 * API for MediaWiki 1.8+
7
 
 *
8
 
 * Copyright (C) 2006 Yuri Astrakhan <Firstname><Lastname>@gmail.com
9
 
 *
10
 
 * This program is free software; you can redistribute it and/or modify
11
 
 * it under the terms of the GNU General Public License as published by
12
 
 * the Free Software Foundation; either version 2 of the License, or
13
 
 * (at your option) any later version.
14
 
 *
15
 
 * This program is distributed in the hope that it will be useful,
16
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
 
 * GNU General Public License for more details.
19
 
 *
20
 
 * You should have received a copy of the GNU General Public License along
21
 
 * with this program; if not, write to the Free Software Foundation, Inc.,
22
 
 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23
 
 * http://www.gnu.org/copyleft/gpl.html
24
 
 */
25
 
 
26
 
if (!defined('MEDIAWIKI')) {
27
 
        // Eclipse helper - will be ignored in production
28
 
        require_once ("ApiQueryBase.php");
29
 
}
30
 
 
31
 
/**
32
 
 * A query module to list all langlinks (links to correspanding foreign language pages).
33
 
 *
34
 
 * @ingroup API
35
 
 */
36
 
class ApiQueryLangLinks extends ApiQueryBase {
37
 
 
38
 
        public function __construct($query, $moduleName) {
39
 
                parent :: __construct($query, $moduleName, 'll');
40
 
        }
41
 
 
42
 
        public function execute() {
43
 
                if ( $this->getPageSet()->getGoodTitleCount() == 0 )
44
 
                        return;
45
 
 
46
 
                $params = $this->extractRequestParams();
47
 
                $this->addFields(array (
48
 
                        'll_from',
49
 
                        'll_lang',
50
 
                        'll_title'
51
 
                ));
52
 
 
53
 
                $this->addTables('langlinks');
54
 
                $this->addWhereFld('ll_from', array_keys($this->getPageSet()->getGoodTitles()));
55
 
                if(!is_null($params['continue'])) {
56
 
                        $cont = explode('|', $params['continue']);
57
 
                        if(count($cont) != 2)
58
 
                                $this->dieUsage("Invalid continue param. You should pass the " .
59
 
                                        "original value returned by the previous query", "_badcontinue");
60
 
                        $llfrom = intval($cont[0]);
61
 
                        $lllang = $this->getDB()->strencode($cont[1]);
62
 
                        $this->addWhere("ll_from > $llfrom OR ".
63
 
                                        "(ll_from = $llfrom AND ".
64
 
                                        "ll_lang >= '$lllang')");
65
 
                }
66
 
                # Don't order by ll_from if it's constant in the WHERE clause
67
 
                if(count($this->getPageSet()->getGoodTitles()) == 1)
68
 
                        $this->addOption('ORDER BY', 'll_lang');
69
 
                else
70
 
                        $this->addOption('ORDER BY', 'll_from, ll_lang');
71
 
                $this->addOption('LIMIT', $params['limit'] + 1);
72
 
                $res = $this->select(__METHOD__);
73
 
 
74
 
                $data = array();
75
 
                $lastId = 0;    // database has no ID 0
76
 
                $count = 0;
77
 
                $db = $this->getDB();
78
 
                while ($row = $db->fetchObject($res)) {
79
 
                        if (++$count > $params['limit']) {
80
 
                                // We've reached the one extra which shows that
81
 
                                // there are additional pages to be had. Stop here...
82
 
                                $this->setContinueEnumParameter('continue', "{$row->ll_from}|{$row->ll_lang}");
83
 
                                break;
84
 
                        }
85
 
                        if ($lastId != $row->ll_from) {
86
 
                                if($lastId != 0) {
87
 
                                        $this->addPageSubItems($lastId, $data);
88
 
                                        $data = array();
89
 
                                }
90
 
                                $lastId = $row->ll_from;
91
 
                        }
92
 
 
93
 
                        $entry = array('lang' => $row->ll_lang);
94
 
                        ApiResult :: setContent($entry, $row->ll_title);
95
 
                        $data[] = $entry;
96
 
                }
97
 
 
98
 
                if($lastId != 0) {
99
 
                        $this->addPageSubItems($lastId, $data);
100
 
                }
101
 
 
102
 
                $db->freeResult($res);
103
 
        }
104
 
 
105
 
        public function getAllowedParams() {
106
 
                return array(
107
 
                                'limit' => array(
108
 
                                        ApiBase :: PARAM_DFLT => 10,
109
 
                                        ApiBase :: PARAM_TYPE => 'limit',
110
 
                                        ApiBase :: PARAM_MIN => 1,
111
 
                                        ApiBase :: PARAM_MAX => ApiBase :: LIMIT_BIG1,
112
 
                                        ApiBase :: PARAM_MAX2 => ApiBase :: LIMIT_BIG2
113
 
                                ),
114
 
                                'continue' => null,
115
 
                );
116
 
        }
117
 
 
118
 
        public function getParamDescription () {
119
 
                return array(
120
 
                        'limit' => 'How many langlinks to return',
121
 
                        'continue' => 'When more results are available, use this to continue',
122
 
                );
123
 
        }
124
 
 
125
 
        public function getDescription() {
126
 
                return 'Returns all interlanguage links from the given page(s)';
127
 
        }
128
 
 
129
 
        protected function getExamples() {
130
 
                return array (
131
 
                                "Get interlanguage links from the [[Main Page]]:",
132
 
                                "  api.php?action=query&prop=langlinks&titles=Main%20Page&redirects",
133
 
                        );
134
 
        }
135
 
 
136
 
        public function getVersion() {
137
 
                return __CLASS__ . ': $Id: ApiQueryLangLinks.php 43271 2008-11-06 22:38:42Z siebrand $';
138
 
        }
139
 
}