6a83ca08238261ab4da2bfac77e359228a23dcd1
[moodle.git] / repository / picasa / lib.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * This plugin is used to access picasa pictures
19  *
20  * @since 2.0
21  * @package    repository_picasa
22  * @copyright  2009 Dan Poltawski <talktodan@gmail.com>
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
25 require_once($CFG->dirroot . '/repository/lib.php');
26 require_once($CFG->libdir.'/googleapi.php');
28 /**
29  * Picasa Repository Plugin
30  *
31  * @since 2.0
32  * @package    repository
33  * @subpackage picasa
34  * @copyright  2009 Dan Poltawski
35  * @author     Dan Poltawski <talktodan@gmail.com>
36  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
37  */
38 class repository_picasa extends repository {
39     private $subauthtoken = '';
41     public function __construct($repositoryid, $context = SYSCONTEXTID, $options = array()) {
42         global $USER;
43         parent::__construct($repositoryid, $context, $options);
45         // TODO: I wish there was somewhere we could explicitly put this outside of constructor..
46         $googletoken = optional_param('token', false, PARAM_RAW);
47         if($googletoken){
48             $gauth = new google_authsub(false, $googletoken); // will throw exception if fails
49             google_picasa::set_sesskey($gauth->get_sessiontoken(), $USER->id);
50         }
51         $this->check_login();
52     }
54     public function check_login() {
55         global $USER;
57         $sesskey = google_picasa::get_sesskey($USER->id);
59         if($sesskey){
60             try{
61                 $gauth = new google_authsub($sesskey);
62                 $this->subauthtoken = $sesskey;
63                 return true;
64             }catch(Exception $e){
65                 // sesskey is not valid, delete store and re-auth
66                 google_picasa::delete_sesskey($USER->id);
67             }
68         }
70         return false;
71     }
73     public function print_login(){
74         global $CFG;
75         $returnurl = $CFG->wwwroot.'/repository/repository_callback.php?callback=yes&repo_id='.$this->id;
76         $authurl = google_authsub::login_url($returnurl, google_picasa::REALM);
77         if($this->options['ajax']){
78             $ret = array();
79             $popup_btn = new stdClass();
80             $popup_btn->type = 'popup';
81             $popup_btn->url = $authurl;
82             $ret['login'] = array($popup_btn);
83             return $ret;
84         } else {
85             echo '<a target="_blank" href="'.$authurl.'">Login</a>';
86         }
87     }
89     public function get_listing($path='', $page = '') {
90         $picasa = new google_picasa(new google_authsub($this->subauthtoken));
92         $ret = array();
93         $ret['dynload'] = true;
94         $ret['manage'] = google_picasa::MANAGE_URL;
95         $ret['list'] = $picasa->get_file_list($path);
96         $ret['path'] = array((object)array('name'=>get_string('home'), 'path' => ''));
97         if ($path) {
98             $ret['path'][] = (object)array('name'=>$picasa->get_last_album_name(), 'path' => $path);
99         }
100         return $ret;
101     }
103     public function search($search_text, $page = 0) {
104         $picasa = new google_picasa(new google_authsub($this->subauthtoken));
106         $ret = array();
107         $ret['manage'] = google_picasa::MANAGE_URL;
108         $ret['list'] =  $picasa->do_photo_search($search_text);
109         return $ret;
110     }
112     public function logout(){
113         global $USER;
115         $token = google_picasa::get_sesskey($USER->id);
117         $gauth = new google_authsub($token);
118         // revoke token from google
119         $gauth->revoke_session_token();
121         google_picasa::delete_sesskey($USER->id);
122         $this->subauthtoken = '';
124         return parent::logout();
125     }
127     public function get_name(){
128         return get_string('pluginname', 'repository_picasa');
129     }
130     public function supported_filetypes() {
131         return array('web_image');
132     }
133     public function supported_returntypes() {
134         return (FILE_INTERNAL | FILE_EXTERNAL);
135     }
138 // Icon for this plugin retrieved from http://www.iconspedia.com/icon/picasa-2711.html
139 // Where the license is said documented to be Free