3 // This file is part of Moodle - http://moodle.org/
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
19 * This plugin is used to access wikimedia files
22 * @package repository_wikimedia
23 * @copyright 2010 Dongsheng Cai {@link http://dongsheng.org}
24 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26 require_once($CFG->dirroot
. '/repository/lib.php');
27 require_once(__DIR__
. '/wikimedia.php');
30 * repository_wikimedia class
31 * This is a class used to browse images from wikimedia
34 * @package repository_wikimedia
35 * @copyright 2009 Dongsheng Cai {@link http://dongsheng.org}
36 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
39 class repository_wikimedia
extends repository
{
42 * Returns maximum width for images
44 * Takes the maximum width for images eithre from search form or from
45 * user preferences, updates user preferences if needed
49 public function get_maxwidth() {
50 $param = optional_param('wikimedia_maxwidth', 0, PARAM_INT
);
51 $pref = get_user_preferences('repository_wikimedia_maxwidth', WIKIMEDIA_IMAGE_SIDE_LENGTH
);
52 if ($param > 0 && $param != $pref) {
54 set_user_preference('repository_wikimedia_maxwidth', $pref);
60 * Returns maximum height for images
62 * Takes the maximum height for images eithre from search form or from
63 * user preferences, updates user preferences if needed
67 public function get_maxheight() {
68 $param = optional_param('wikimedia_maxheight', 0, PARAM_INT
);
69 $pref = get_user_preferences('repository_wikimedia_maxheight', WIKIMEDIA_IMAGE_SIDE_LENGTH
);
70 if ($param > 0 && $param != $pref) {
72 set_user_preference('repository_wikimedia_maxheight', $pref);
77 public function get_listing($path = '', $page = '') {
78 $client = new wikimedia
;
80 $list['page'] = (int)$page;
81 if ($list['page'] < 1) {
84 $list['list'] = $client->search_images($this->keyword
, $list['page'] - 1,
85 array('iiurlwidth' => $this->get_maxwidth(),
86 'iiurlheight' => $this->get_maxheight()));
87 $list['nologin'] = true;
88 $list['norefresh'] = true;
89 $list['nosearch'] = true;
90 if (!empty($list['list'])) {
91 $list['pages'] = -1; // means we don't know exactly how many pages there are but we can always jump to the next page
92 } else if ($list['page'] > 1) {
93 $list['pages'] = $list['page']; // no images available on this page, this is the last page
95 $list['pages'] = 0; // no paging
100 public function check_login() {
102 $this->keyword
= optional_param('wikimedia_keyword', '', PARAM_RAW
);
103 if (empty($this->keyword
)) {
104 $this->keyword
= optional_param('s', '', PARAM_RAW
);
106 $sess_keyword = 'wikimedia_'.$this->id
.'_keyword';
107 if (empty($this->keyword
) && optional_param('page', '', PARAM_RAW
)) {
108 // This is the request of another page for the last search, retrieve the cached keyword.
109 if (isset($SESSION->{$sess_keyword})) {
110 $this->keyword
= $SESSION->{$sess_keyword};
112 } else if (!empty($this->keyword
)) {
113 // Save the search keyword in the session so we can retrieve it later.
114 $SESSION->{$sess_keyword} = $this->keyword
;
116 return !empty($this->keyword
);
118 // if check_login returns false,
119 // this function will be called to print a login form.
120 public function print_login() {
121 $keyword = new stdClass();
122 $keyword->label
= get_string('keyword', 'repository_wikimedia').': ';
123 $keyword->id
= 'input_text_keyword';
124 $keyword->type
= 'text';
125 $keyword->name
= 'wikimedia_keyword';
126 $keyword->value
= '';
128 'label' => get_string('maxwidth', 'repository_wikimedia').': ',
130 'name' => 'wikimedia_maxwidth',
131 'value' => get_user_preferences('repository_wikimedia_maxwidth', WIKIMEDIA_IMAGE_SIDE_LENGTH
),
134 'label' => get_string('maxheight', 'repository_wikimedia').': ',
136 'name' => 'wikimedia_maxheight',
137 'value' => get_user_preferences('repository_wikimedia_maxheight', WIKIMEDIA_IMAGE_SIDE_LENGTH
),
139 if ($this->options
['ajax']) {
141 $form['login'] = array($keyword, (object)$maxwidth, (object)$maxheight);
142 $form['nologin'] = true;
143 $form['norefresh'] = true;
144 $form['nosearch'] = true;
145 $form['allowcaching'] = false; // indicates that login form can NOT
146 // be cached in filepicker.js (maxwidth and maxheight are dynamic)
152 <td>{$keyword->label}</td><td><input name="{$keyword->name}" type="text" /></td>
155 <input type="submit" />
160 // if this plugin support global search, if this function return
161 // true, search function will be called when global searching working
162 public function global_search() {
165 public function search($search_text, $page = 0) {
166 $client = new wikimedia
;
167 $search_result = array();
168 $search_result['list'] = $client->search_images($search_text);
169 return $search_result;
171 // when logout button on file picker is clicked, this function will be
173 public function logout() {
174 return $this->print_login();
176 public function supported_returntypes() {
177 return (FILE_INTERNAL | FILE_EXTERNAL
);
181 * Return the source information
183 * @param stdClass $url
184 * @return string|null
186 public function get_file_source_info($url) {
191 * Is this repository accessing private data?
195 public function contains_private_data() {