From: dongsheng Date: Mon, 7 Jul 2008 06:34:39 +0000 (+0000) Subject: MDL-15488 X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=0eb58cf43a91875c36a842b213b7bfa866640e55;p=moodle.git MDL-15488 1. Create a ajax file picker, which can switch views(list and thumbnail now), transfer json data between server and client side 2. Improve curl.class.php 3. Improve boxnet plugin, which won't need to redirect box.net to authenticate from now on 4. Improve flickr plugin --- diff --git a/repository/ajax.php b/repository/ajax.php new file mode 100644 index 0000000000..b95291e565 --- /dev/null +++ b/repository/ajax.php @@ -0,0 +1,257 @@ + + + + + +Ajax picker demo page + + + + + + + + + + + + + + + + + + + + + + + +
+ + + diff --git a/repository/boxnet/boxlibphp5.php b/repository/boxnet/boxlibphp5.php index 78d6de934a..01711f80cd 100755 --- a/repository/boxnet/boxlibphp5.php +++ b/repository/boxnet/boxlibphp5.php @@ -17,7 +17,7 @@ * */ -require_once 'class.curl.php'; +require_once($CFG->dirroot.'/repository/'.'curl.class.php'); class boxclient { @@ -58,18 +58,21 @@ class boxclient { $query_str = implode('&', $args); } $request = $this->_box_api_url .'?'. $method . '&' . $query_str; - if ($this->_debug){ echo "Request: ".$request; } + if ($this->_debug){ + echo "Request: ".$request; + } } if ($useCURL) { - $c = &new curl($request ); - $c->setopt(CURLOPT_FOLLOWLOCATION, true); - $xml = $c->exec(); + $c = new curl($request); + $c->setopt(array('CURLOPT_FOLLOWLOCATION'=>true)); + $xml = $c->get($request); + /* $error = $c->hasError(); if ($error) { $this->_error_msg = $error; return false; } - $c->close() ; + */ } else { $url_parsed = parse_url($request); $host = $url_parsed["host"]; @@ -155,9 +158,10 @@ class boxclient { if ($ret_array['status'] == 'get_auth_token_ok'){ $this->auth_token = $ret_array['auth_token']; $auth_token = $ret_array['auth_token']; - global $auth_token; + return $auth_token; }else{ echo 'Login'; + return false; //header ('location: http://www.box.net/api/1.0/auth/'.$ticket) ; } } diff --git a/repository/boxnet/repository.class.php b/repository/boxnet/repository.class.php index 1477dd6973..c61f6fb86c 100755 --- a/repository/boxnet/repository.class.php +++ b/repository/boxnet/repository.class.php @@ -8,6 +8,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License */ require_once($CFG->dirroot.'/repository/'.'lib.php'); +require_once($CFG->dirroot.'/repository/'.'curl.class.php'); require_once($CFG->dirroot.'/repository/boxnet/'.'boxlibphp5.php'); class repository_boxnet extends repository{ @@ -16,39 +17,66 @@ class repository_boxnet extends repository{ var $ticket; public function __construct($repositoryid, $context = SITEID, $options = array()){ - global $SESSION; - $op = repository_get_option($repositoryid, 1); - $options['api_key'] = $op['api_key']; - $options['auth_token'] = optional_param('auth_token', '', PARAM_RAW); - if(!empty($options['auth_token'])) { - $SESSION->box_token = $options['auth_token']; - } else { - $options['auth_token'] = $SESSION->box_token; + global $SESSION, $action; + $options['username'] = optional_param('username', '', PARAM_RAW); + $options['password'] = optional_param('password', '', PARAM_RAW); + $options['ticket'] = optional_param('ticket', '', PARAM_RAW); + $options['api_key'] = 'dmls97d8j3i9tn7av8y71m9eb55vrtj4'; + // reset session + $reset = optional_param('reset', 0, PARAM_INT); + if(!empty($reset)) { + unset($SESSION->box_token); } - $options['api_key'] = 'dmls97d8j3i9tn7av8y71m9eb55vrtj4'; - parent::__construct($repositoryid, $context, $options); - if(!empty($options['api_key'])){ - $this->api_key = $options['api_key']; + // do login + if(!empty($options['username']) + && !empty($options['password']) + && !empty($options['ticket']) ) + { + $c = new curl; + $str = ''; + $c->setopt(array('CURLOPT_FOLLOWLOCATION'=>0)); + $param = array( + 'login_form1'=>'', + 'login'=>$options['username'], + 'password'=>$options['password'], + 'dologin'=>1, + '__login'=>1 + ); + $ret = $c->post('http://www.box.net/api/1.0/auth/'.$options['ticket'], $param); + $header = $c->getResponse(); + $location = $header['location']; + preg_match('#auth_token=(.*)$#i', $location, $matches); + $auth_token = $matches[1]; + $SESSION->box_token = $auth_token; } - if(empty($this->options['auth_token'])) { - $this->box = new boxclient($this->api_key, ''); + // already logged + if(!empty($SESSION->box_token)) { + $this->box = new boxclient($options['api_key'], $SESSION->box_token); + $this->options['auth_token'] = $SESSION->box_token; + $action = 'list'; } else { - $this->box = new boxclient($this->api_key, $this->options['auth_token']); + $this->box = new boxclient($options['api_key'], ''); + $action = ''; } + parent::__construct($repositoryid, $context, $options); } public function get_listing($path = '0', $search = ''){ - $ret = array(); + global $CFG; + $list = array(); + $ret = array(); if($this->box){ - $tree = $this->box->getAccountTree(); + $tree = $this->box->getAccountTree(); if($tree) { $filenames = $tree['file_name']; $fileids = $tree['file_id']; foreach ($filenames as $n=>$v){ - $ret[] = array('name'=>$v, 'size'=>0, 'date'=>'', - 'url'=>'http://box.net/api/1.0/download/'.$this->options['auth_token'].'/'.$fileids[$n]); + $list[] = array('title'=>$v, 'size'=>0, 'date'=>'', + 'url'=>'http://box.net/api/1.0/download/'.$this->options['auth_token'].'/'.$fileids[$n], + 'thumbnail'=>$CFG->pixpath.'/i/files.gif'); } - $this->listing = $ret; + $this->listing = $list; + $ret['list'] = $list; return $ret; } else { return null; @@ -58,13 +86,18 @@ class repository_boxnet extends repository{ public function print_login(){ if(!empty($this->box) && !empty($this->options['auth_token'])) { - echo 'View File list'; - return true; + if($this->options['ajax']){ + return $this->get_listing(); + } else { + echo $this->get_listing(); + } } else if(!empty($this->box)){ // get a ticket from box.net $ticket_return = $this->box->getTicket(); if($this->box->isError()) { - echo $this->box->getErrorMsg(); + if(!$this->options['ajax']){ + echo $this->box->getErrorMsg(); + } } else { $this->ticket = $ticket_return['ticket']; } @@ -83,11 +116,27 @@ class repository_boxnet extends repository{ // function instead a login screen. if($this->ticket && ($this->options['auth_token'] == '')){ - $this->box->getAuthToken($this->ticket); - return false; + $str = ''; + $str .= '
'; + $str .= ''; + $str .= ''; + $str .= '