1a58b569f39a1a287db0d7f10679420664f480fa
[moodle.git] / repository / googledocs / lib.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 /**
19  * Google Docs Plugin
20  *
21  * @since 2.0
22  * @package moodlecore
23  * @subpackage repository
24  * @copyright 2009 Dan Poltawski <talktodan@gmail.com>
25  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26  */
28 require_once($CFG->libdir.'/googleapi.php');
30 class repository_googledocs extends repository {
31     private $subauthtoken = '';
33     public function __construct($repositoryid, $context = SYSCONTEXTID, $options = array()) {
34         global $USER;
35         parent::__construct($repositoryid, $context, $options);
37         // TODO: I wish there was somewhere we could explicitly put this outside of constructor..
38         $googletoken = optional_param('token', false, PARAM_RAW);
39         if($googletoken){
40             $gauth = new google_authsub(false, $googletoken); // will throw exception if fails
41             google_docs::set_sesskey($gauth->get_sessiontoken(), $USER->id);
42         }
43         $this->check_login();
44     }
46     public function check_login() {
47         global $USER;
49         $sesskey = google_docs::get_sesskey($USER->id);
51         if($sesskey){
52             try{
53                 $gauth = new google_authsub($sesskey);
54                 $this->subauthtoken = $sesskey;
55                 return true;
56             }catch(Exception $e){
57                 // sesskey is not valid, delete store and re-auth
58                 google_docs::delete_sesskey($USER->id);
59             }
60         }
62         return false;
63     }
65     public function print_login($ajax = true){
66         global $CFG;
67         if($ajax){
68             $ret = array();
69             $popup_btn = new stdclass;
70             $popup_btn->type = 'popup';
71             $returnurl = $CFG->wwwroot.'/repository/repository_ajax.php?callback=yes&repo_id='.$this->id;
72             $popup_btn->url = google_authsub::login_url($returnurl, google_docs::REALM);
73             $ret['login'] = array($popup_btn);
74             return $ret;
75         }
76     }
78     public function get_listing($path='', $page = '') {
79         $gdocs = new google_docs(new google_authsub($this->subauthtoken));
81         $ret = array();
82         $ret['dynload'] = true;
83         $ret['list'] = $gdocs->get_file_list();
84         return $ret;
85     }
87     public function search($query){
88         $gdocs = new google_docs(new google_authsub($this->subauthtoken));
90         $ret = array();
91         $ret['dynload'] = true;
92         $ret['list'] = $gdocs->get_file_list($query);
93         return $ret;
94     }
96     public function logout(){
97         global $USER;
99         $token = google_docs::get_sesskey($USER->id);
101         $gauth = new google_authsub($token);
102         // revoke token from google
103         $gauth->revoke_session_token();
105         google_docs::delete_sesskey($USER->id);
106         $this->subauthtoken = '';
108         return parent::logout();
109     }
111     public function get_name(){
112         return get_string('pluginname', 'repository_googledocs');
113     }
115     public function get_file($url, $file) {
116         global $CFG;
117         $path = $this->prepare_file($file);
119         $fp = fopen($path, 'w');
120         $gdocs = new google_docs(new google_authsub($this->subauthtoken));
121         $gdocs->download_file($url, $fp);
123         return array('path'=>$path, 'url'=>$url);
124     }
126     public function supported_filetypes() {
127        return array('document');
128     }
129     public function supported_returntypes() {
130         return FILE_INTERNAL;
131     }
133 //Icon from: http://www.iconspedia.com/icon/google-2706.html