Portfolio plugins explicitly requires parent library with superclass definition
[moodle.git] / portfolio / picasa / lib.php
1 <?php
2 /**
3  * Picasa Portfolio Plugin
4  *
5  * @author Dan Poltawski <talktodan@gmail.com>
6  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
7  */
8 require_once($CFG->libdir.'/portfolio/plugin.php');
9 require_once($CFG->libdir.'/googleapi.php');
11 class portfolio_plugin_picasa extends portfolio_plugin_push_base {
12     private $sessionkey;
14     public function supported_formats() {
15         return array(PORTFOLIO_FORMAT_IMAGE, PORTFOLIO_FORMAT_VIDEO);
16     }
18     public static function get_name() {
19         return get_string('pluginname', 'portfolio_picasa');
20     }
22     public function prepare_package() {
23         // we send the files as they are, no prep required
24         return true;
25     }
27     public function get_interactive_continue_url(){
28         return 'http://picasaweb.google.com/';
29     }
31     public function expected_time($callertime) {
32         return $callertime;
33     }
35     public function send_package() {
36         if(!$this->sessionkey){
37             throw new portfolio_plugin_exception('noauthtoken', 'portfolio_picasa');
38         }
40         $picasa = new google_picasa(new google_authsub($this->sessionkey));
42         foreach ($this->exporter->get_tempfiles() as $file) {
44             if(!$picasa->send_file($file)){
45                 throw new portfolio_plugin_exception('sendfailed', 'portfolio_picasa', $file->get_filename());
46             }
47         }
48     }
50     public function steal_control($stage) {
51         global $CFG;
52         if ($stage != PORTFOLIO_STAGE_CONFIG) {
53             return false;
54         }
56         $sesskey = google_picasa::get_sesskey($this->get('user')->id);
58         if($sesskey){
59             try{
60                 $gauth = new google_authsub($sesskey);
61                 $this->sessionkey = $sesskey;
62                 return false;
63             }catch(Exception $e){
64                 // sesskey is not valid, delete store and re-auth
65                 google_picasa::delete_sesskey($this->get('user')->id);
66             }
67         }
69         return google_authsub::login_url($CFG->wwwroot.'/portfolio/add.php?postcontrol=1&id=' . $this->exporter->get('id') . '&sesskey=' . sesskey(), google_picasa::REALM);
70     }
72     public function post_control($stage, $params) {
73         if ($stage != PORTFOLIO_STAGE_CONFIG) {
74             return;
75         }
77         if(!array_key_exists('token', $params)){
78             throw new portfolio_plugin_exception('noauthtoken', 'portfolio_picasa');
79         }
81         // we now have our auth token, get a session token..
82         $gauth = new google_authsub(false, $params['token']);
84         $this->sessionkey = $gauth->get_sessiontoken();
86         google_picasa::set_sesskey($this->sessionkey, $this->get('user')->id);
87     }
89     public static function allows_multiple_instances() {
90         return false;
91     }
92 }
94 /**
95  * Registers to the user_deleted event to revoke any
96  * subauth tokens we have from them
97  *
98  * @param $user user object
99  * @return boolean true in all cases as its only minor cleanup
100  */
101 function portfolio_picasa_user_deleted($user){
102     // it is only by luck that the user prefstill exists now?
103     // We probably need a pre-delete event?
104     if($sesskey = google_picasa::get_sesskey($user->id)){
105         try{
106             $gauth = new google_authsub($sesskey);
108             $gauth->revoke_session_token();
109         }catch(Exception $e){
110             // we don't care that much about success- just being good
111             // google api citzens
112             return true;
113         }
114     }
116     return true;