From bf1fccf02bf128000353a1c6c80bc3a2a345e309 Mon Sep 17 00:00:00 2001 From: dongsheng Date: Wed, 23 Jul 2008 04:43:53 +0000 Subject: [PATCH] MDL-13766, use exception model to report error. --- repository/ajax.php | 41 ++++++++++------ repository/boxnet/boxlibphp5.php | 4 +- repository/boxnet/repository.class.php | 10 ++-- repository/flickr/repository.class.php | 8 +++- repository/lib.php | 9 +++- repository/ws.php | 65 +++++++++++++++++++------- 6 files changed, 99 insertions(+), 38 deletions(-) diff --git a/repository/ajax.php b/repository/ajax.php index 2229d8ebb1..e327f5a833 100644 --- a/repository/ajax.php +++ b/repository/ajax.php @@ -91,7 +91,7 @@ var viewbar = null; var viewmode = 0; var repos = []; '; str += ''; str += '
'; - str += (''); + str += (''); str += obj[k].title+'
'; str += ''; } @@ -318,11 +323,16 @@ function print_login(){ var callback = { success: function(o) { + var panel = new YAHOO.util.Element('panel'); try { var ret = YAHOO.lang.JSON.parse(o.responseText); } catch(e) { alert('Invalid JSON String\n'+o.responseText); } + if(ret.e){ + panel.get('element').innerHTML = ret.e; + return; + } datasource = ret; if(datasource.l){ print_login(); @@ -336,16 +346,21 @@ success: function(o) { } } var loadfile = { - success: function(o) { - try { - var ret = YAHOO.lang.JSON.parse(o.responseText); - } catch(e) { - alert('Invalid JSON String\n'+o.responseText); - } - var panel = new YAHOO.util.Element('panel'); - var html = '

Download Successfully!

'; - html += 'Back'; - panel.get('element').innerHTML = html; +success: function(o) { + var panel = new YAHOO.util.Element('panel'); + try { + var ret = YAHOO.lang.JSON.parse(o.responseText); + } catch(e) { + alert('Invalid JSON String\n'+o.responseText); + } + if(ret.e){ + panel.get('element').innerHTML = ret.e; + return; + } + var panel = new YAHOO.util.Element('panel'); + var html = '

Download Successfully!

'; + html += 'Back'; + panel.get('element').innerHTML = html; } } diff --git a/repository/boxnet/boxlibphp5.php b/repository/boxnet/boxlibphp5.php index 01fb2b480b..71536af547 100755 --- a/repository/boxnet/boxlibphp5.php +++ b/repository/boxnet/boxlibphp5.php @@ -91,7 +91,7 @@ class boxclient { $ret = $c->post('http://www.box.net/api/1.0/auth/'.$ticket, $param); $header = $c->getResponse(); if(empty($header['location'])) { - return false; + throw new repository_exception('invalidpassword', 'repository'); } $location = $header['location']; preg_match('#auth_token=(.*)$#i', $location, $matches); @@ -100,7 +100,7 @@ class boxclient { $this->auth_token = $auth_token; return $auth_token; } else { - return false; + throw new repository_exception('invalidtoken', 'repository'); } } diff --git a/repository/boxnet/repository.class.php b/repository/boxnet/repository.class.php index e3ff8869f9..03bc50dcb4 100755 --- a/repository/boxnet/repository.class.php +++ b/repository/boxnet/repository.class.php @@ -30,8 +30,12 @@ class repository_boxnet extends repository{ && !empty($options['ticket']) ) { $this->box = new boxclient($options['api_key']); - $SESSION->box_token = $this->box->getAuthToken($options['ticket'], - $options['username'], $options['password']); + try{ + $SESSION->box_token = $this->box->getAuthToken($options['ticket'], + $options['username'], $options['password']); + } catch (repository_exception $e) { + throw $e; + } } // already logged if(!empty($SESSION->box_token)) { @@ -85,7 +89,7 @@ class repository_boxnet extends repository{ $ret['list'] = $list; return $ret; } else { - return null; + throw new repository_exception('nullfilelist', 'repository'); } } diff --git a/repository/flickr/repository.class.php b/repository/flickr/repository.class.php index 46290e49c9..d855e29211 100755 --- a/repository/flickr/repository.class.php +++ b/repository/flickr/repository.class.php @@ -46,6 +46,8 @@ class repository_flickr extends repository{ if(empty($action)) { $action = 'list'; } + } else { + throw new repository_exception('invalidemail', 'repository'); } } else { if($account = get_user_preferences('flickrmail', '')){ @@ -108,7 +110,11 @@ EOD; $ret->list[] = array('title'=>$p['title'],'source'=>$p['id'],'id'=>$p['id'],'thumbnail'=>$this->flickr->buildPhotoURL($p, 'Square'), 'date'=>'', 'size'=>'unknown'); } - return $ret; + if(empty($ret)) { + throw new repository_exception('nullphotolist', 'repository'); + } else { + return $ret; + } } public function print_listing(){ if(empty($this->photos)){ diff --git a/repository/lib.php b/repository/lib.php index 90f36cb738..feb63827a2 100644 --- a/repository/lib.php +++ b/repository/lib.php @@ -241,6 +241,13 @@ abstract class repository { } } +/** + * exception class for repository api + * + */ + +class repository_exception extends moodle_exception { +} /** * Listing object describing a listing of files and directories @@ -272,7 +279,7 @@ function repository_get_option($id, $position){ $ret = (array)unserialize($entry->$option); return $ret; } -function repository_get_repositories(){ +function repository_instances(){ global $DB, $CFG, $USER; $contextid = 0; $params = array(); diff --git a/repository/ws.php b/repository/ws.php index abbdd1ef2a..e48ef03154 100644 --- a/repository/ws.php +++ b/repository/ws.php @@ -2,9 +2,10 @@ set_time_limit(0); require_once('../config.php'); require_once('lib.php'); -$CFG->repository_cache_expire = 12000; +// set one hour here +$CFG->repository_cache_expire = 60*60; // repository id -$id = optional_param('id', PARAM_INT); +$id = optional_param('id', 1, PARAM_INT); // action of client $action = optional_param('action', '', PARAM_RAW); // Search text @@ -15,27 +16,43 @@ $title = optional_param('title', '', PARAM_RAW); $p = optional_param('p', '', PARAM_RAW); if(!$repository = $DB->get_record('repository', array('id'=>$id))) { - echo json_encode('wrong'); - die; + $err = new stdclass; + $err->e = get_string('invalidrepositoryid', 'repository'); + die(json_encode($err)); } -if(is_file($CFG->dirroot.'/repository/'.$repository->repositorytype.'/repository.class.php')) { - require_once($CFG->dirroot.'/repository/'.$repository->repositorytype.'/repository.class.php'); +if(file_exists($CFG->dirroot.'/repository/'. + $repository->repositorytype.'/repository.class.php')) +{ + require_once($CFG->dirroot.'/repository/'. + $repository->repositorytype.'/repository.class.php'); $classname = 'repository_' . $repository->repositorytype; - $repo = new $classname($id, SITEID, array('ajax'=>true)); + try{ + $repo = new $classname($id, SITEID, array('ajax'=>true)); + } catch (repository_exception $e){ + $err = new stdclass; + $err->e = $e->getMessage(); + die(json_encode($err)); + } } else { - print_error('invalidplugin', 'repository'); - echo json_encode('invalidplugin'); - die; + $err = new stdclass; + $err->e = get_string('invalidplugin', 'repository'); + die(json_encode($err)); } if($action == 'list') { - if(!empty($p)) { - echo json_encode($repo->get_listing($p)); - } else if(!empty($search)) { - echo json_encode($repo->get_listing('', $search)); - } else { - echo json_encode($repo->get_listing()); + try { + if(!empty($p)) { + echo json_encode($repo->get_listing($p)); + } else if(!empty($search)) { + echo json_encode($repo->get_listing('', $search)); + } else { + echo json_encode($repo->get_listing()); + } + } catch (repository_exception $e) { + $err = new stdclass; + $err->e = $e->getMessage(); + die(json_encode($err)); } } elseif($action == 'download') { @@ -43,9 +60,21 @@ if($action == 'list') { // TODO // Need to communicate with FILE API // Copy the tmp file to final location - echo json_encode($ret); + try { + echo json_encode($ret); + } catch (repository_exception $e){ + $err = new stdclass; + $err->e = $e->getMessage(); + die(json_encode($err)); + } } else { - echo json_encode($repo->print_login()); + try { + echo json_encode($repo->print_login()); + } catch (repository_exception $e){ + $err = new stdclass; + $err->e = $e->getMessage(); + die(json_encode($err)); + } } ?> -- 2.39.5