MDL-13766, use exception model to report error.

This commit is contained in:
dongsheng
2008-07-23 04:43:53 +00:00
parent a2353e9b0b
commit bf1fccf02b
6 changed files with 99 additions and 38 deletions
+28 -13
View File
@@ -91,7 +91,7 @@ var viewbar = null;
var viewmode = 0;
var repos = [];
<?php
$repos = repository_get_repositories();
$repos = repository_instances();
foreach($repos as $repo) {
echo 'repos.push('.json_encode($repo).')';
echo "\n";
@@ -248,7 +248,9 @@ function download(){
var title = document.getElementById('newname').value;
var file = document.getElementById('fileurl').value;
loading();
var trans = YAHOO.util.Connect.asyncRequest('POST', 'ws.php?id='+repositoryid+'&action=download', loadfile, postdata({'file':file, 'title':title}));
var trans = YAHOO.util.Connect.asyncRequest('POST',
'ws.php?id='+repositoryid+'&action=download', loadfile,
postdata({'file':file, 'title':title}));
}
// produce thumbnail view
function viewthumb(){
@@ -264,7 +266,10 @@ function viewthumb(){
str += '<div class="t">';
str += '<img title="'+obj[k].title+'" src="'+obj[k].thumbnail+'" />';
str += '<div style="text-align:center">';
str += ('<input type="radio" title="'+obj[k].title+'" name="selected-files" value="'+obj[k].source+'" onclick=\'rename("'+obj[k].title+'", "'+obj[k].source+'")\' />');
str += ('<input type="radio" title="'+obj[k].title
+'" name="selected-files" value="'+obj[k].source
+'" onclick=\'rename("'+obj[k].title+'", "'
+obj[k].source+'")\' />');
str += obj[k].title+'</div>';
str += '</div>';
}
@@ -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 = '<h1>Download Successfully!</h1>';
html += '<a href="###" onclick="viewfiles()">Back</a>';
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 = '<h1>Download Successfully!</h1>';
html += '<a href="###" onclick="viewfiles()">Back</a>';
panel.get('element').innerHTML = html;
}
}
+2 -2
View File
@@ -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');
}
}
+7 -3
View File
@@ -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');
}
}
+7 -1
View File
@@ -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)){
+8 -1
View File
@@ -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();
+47 -18
View File
@@ -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));
}
}
?>