"MDL-13766, fixed context default value"
[moodle.git] / repository / boxnet / repository.class.php
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
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.
9 //
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.
14 //
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/>.
18 require_once($CFG->libdir.'/boxlib.php');
20 /**
21  * repository_boxnet class
22  * This is a subclass of repository class
23  *
24  * @since 2.0
25  * @package moodlecore
26  * @subpackage repository
27  * @copyright 2009 Dongsheng Cai
28  * @author Dongsheng Cai <dongsheng@moodle.com>
29  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
30  */
31 class repository_boxnet extends repository {
32     private $box;
34     /**
35      * Constructor
36      * @global object $SESSION
37      * @param int $repositoryid
38      * @param object $context
39      * @param array $options
40      */
41     public function __construct($repositoryid, $context = SYSCONTEXTID, $options = array()) {
42         global $SESSION;
43         $options['username']   = optional_param('boxusername', '', PARAM_RAW);
44         $options['password']   = optional_param('boxpassword', '', PARAM_RAW);
45         $options['ticket']     = optional_param('ticket', '', PARAM_RAW);
46         $sess_name = 'box_token'.$this->id;
47         $this->sess_name = 'box_token'.$this->id;
48         parent::__construct($repositoryid, $context, $options);
49         $this->api_key = $this->get_option('api_key');
50         // do login
51         if(!empty($options['username']) && !empty($options['password']) && !empty($options['ticket']) ) {
52             $this->box = new boxclient($this->api_key);
53             try {
54                 $SESSION->$sess_name = $this->box->getAuthToken($options['ticket'],
55                     $options['username'], $options['password']);
56             } catch (repository_exception $e) {
57                 throw $e;
58             }
59         }
60         // already logged
61         if(!empty($SESSION->$sess_name)) {
62             if(empty($this->box)) {
63                 $this->box = new boxclient($this->api_key, $SESSION->$sess_name);
64             }
65             $this->auth_token = $SESSION->$sess_name;
66         } else {
67             $this->box = new boxclient($this->api_key);
68         }
69     }
71     /**
72      *
73      * @global object $SESSION
74      * @return boolean
75      */
76     public function check_login() {
77         global $SESSION;
78         return !empty($SESSION->{$this->sess_name});
79     }
81     /**
82      *
83      * @global object $SESSION
84      * @return string
85      */
86     public function logout() {
87         global $SESSION;
88         unset($SESSION->{$this->sess_name});
89         return $this->print_login();
90     }
92     /**
93      *
94      * @param array $options
95      * @return mixed
96      */
97     public function set_option($options = array()) {
98         if (!empty($options['api_key'])) {
99             set_config('api_key', trim($options['api_key']), 'boxnet');
100         }
101         unset($options['api_key']);
102         $ret = parent::set_option($options);
103         return $ret;
104     }
106     /**
107      *
108      * @param string $config
109      * @return mixed
110      */
111     public function get_option($config = '') {
112         if($config==='api_key') {
113             return trim(get_config('boxnet', 'api_key'));
114         } else {
115             $options['api_key'] = trim(get_config('boxnet', 'api_key'));
116         }
117         $options = parent::get_option($config);
118         return $options;
119     }
121     /**
122      *
123      * @global object $SESSION
124      * @return boolean
125      */
126     public function global_search() {
127         global $SESSION;
128         if (empty($SESSION->{$this->sess_name})) {
129             return false;
130         } else {
131             return true;
132         }
133     }
135     /**
136      *
137      * @global object $DB
138      * @return object
139      */
140     public function get_login() {
141         global $DB;
142         if ($entry = $DB->get_record('repository_instances', array('id'=>$this->id))) {
143             $ret->username = $entry->username;
144             $ret->password = $entry->password;
145         } else {
146             $ret->username = '';
147             $ret->password = '';
148         }
149         return $ret;
150     }
152     /**
153      *
154      * @global object $CFG
155      * @param string $search_text
156      * @return mixed
157      */
158     public function search($search_text) {
159         global $CFG, $OUTPUT;
160         $list = array();
161         $ret  = array();
162         $tree = $this->box->getAccountTree();
163         if (!empty($tree)) {
164             $filenames = $tree['file_name'];
165             $fileids   = $tree['file_id'];
166             $filesizes = $tree['file_size'];
167             $filedates = $tree['file_date'];
168             $fileicon  = $tree['thumbnail'];
169             foreach ($filenames as $n=>$v){
170                 if(strstr(strtolower($v), strtolower($search_text)) !== false) {
171                     $list[] = array('title'=>$v,
172                             'size'=>$filesizes[$n],
173                             'date'=>$filedates[$n],
174                             'source'=>'http://box.net/api/1.0/download/'
175                                 .$this->auth_token.'/'.$fileids[$n],
176                             'thumbnail' => $OUTPUT->pix_url(file_extension_icon($v, 32))->out());
177                 }
178             }
179         }
180         $ret['list'] = array_filter($list, array($this, 'filter'));
181         return $ret;
182     }
184     /**
185      *
186      * @global object $CFG
187      * @param string $path
188      * @return mixed
189      */
190     public function get_listing($path = '/', $page = ''){
191         global $CFG;
192         $list = array();
193         $ret  = array();
194         $ret['list'] = array();
195         $tree = $this->box->getfiletree($path);
196         $ret['manage'] = 'http://www.box.net/files';
197         $ret['path'] = array(array('name'=>'Root', 'path'=>0));
198         if(!empty($tree)) {
199             $ret['list'] = array_filter($tree, array($this, 'filter'));
200         }
201         return $ret;
202     }
204     /**
205      *
206      * @return array
207      */
208     public function print_login(){
209         $t = $this->box->getTicket();
210         $ret = $this->get_login();
211         if ($this->options['ajax']) {
212             $ticket_field->type = 'hidden';
213             $ticket_field->name = 'ticket';
214             $ticket_field->value = $t['ticket'];
216             $user_field->label = get_string('username', 'repository_boxnet').': ';
217             $user_field->id    = 'box_username';
218             $user_field->type  = 'text';
219             $user_field->name  = 'boxusername';
220             $user_field->value = $ret->username;
222             $passwd_field->label = get_string('password', 'repository_boxnet').': ';
223             $passwd_field->id    = 'box_password';
224             $passwd_field->type  = 'password';
225             $passwd_field->name  = 'boxpassword';
227             $ret = array();
228             $ret['login'] = array($ticket_field, $user_field, $passwd_field);
229             return $ret;
230         } else {
231             echo '<table>';
232             echo '<tr><td><label>'.get_string('username', 'repository_boxnet').'</label></td>';
233             echo '<td><input type="text" name="boxusername" /></td></tr>';
234             echo '<tr><td><label>'.get_string('password', 'repository_boxnet').'</label></td>';
235             echo '<td><input type="password" name="boxpassword" /></td></tr>';
236             echo '<input type="hidden" name="ticket" value="'.$t['ticket'].'" />';
237             echo '</table>';
238             echo '<input type="submit" value="'.get_string('enter', 'repository').'" />';
239         }
240     }
242     /**
243      * Names of the plugin settings
244      * @return array
245      */
246     public static function get_type_option_names() {
247         return array('api_key');
248     }
250     /**
251      * Add Plugin settings input to Moodle form
252      * @param object $mform
253      */
254     public function type_config_form($mform) {
255         $public_account = get_config('boxnet', 'public_account');
256         $api_key = get_config('boxnet', 'api_key');
257         if (empty($api_key)) {
258             $api_key = '';
259         }
260         $strrequired = get_string('required');
261         $mform->addElement('text', 'api_key', get_string('apikey', 'repository_boxnet'), array('value'=>$api_key,'size' => '40'));
262         $mform->addRule('api_key', $strrequired, 'required', null, 'client');
263         $mform->addElement('static', null, '',  get_string('information','repository_boxnet'));
264     }
265     public function supported_returntypes() {
266         return FILE_INTERNAL | FILE_EXTERNAL;
267     }