MDL-16134 - exception handling in portfolio code

This commit is contained in:
mjollnir_
2008-08-19 14:20:32 +00:00
parent 7812e882b0
commit 3403520190
9 changed files with 159 additions and 101 deletions
+6
View File
@@ -23,6 +23,7 @@ $string['exporting'] = 'Exporting to portfolio';
$string['exportcomplete'] = 'Portfolio export complete!';
$string['exportqueued'] = 'Portfolio export has been successfully queued for transfer';
$string['exportedpreviously'] = 'Previous exports';
$string['exportexceptionnoexporter'] = 'A portfolio_export_exception was thrown with an active session but no exporter object';
$string['failedtosendpackage'] = 'Failed to send your data to the selected portfolio system!';
$string['filedenied'] = 'Access denied to this file';
$string['filenotfound'] = 'File not found';
@@ -40,6 +41,10 @@ $string['invalidaddformat'] = 'Invalid add format passed to portfolio_add_button
$string['invalidtempid'] = 'Invalid export id. maybe it has expired';
$string['invalidformat'] = 'Something is exporting an invalid format, $a';
$string['invalidinstance'] = 'Could not find that portfolio instance';
$string['invalidproperty'] = 'Could not find that property ($a->property of $a->class)';
$string['invalidexportproperty'] = 'Could not find that export config property ($a->property of $a->class)';
$string['invaliduserproperty'] = 'Could not find that user config property ($a->property of $a->class)';
$string['invalidconfigproperty'] = 'Could not find that config property ($a->property of $a->class)';
$string['manageportfolios'] = 'Manage portfolios';
$string['manageyourportfolios'] = 'Manage your portfolios';
$string['noavailableplugins'] = 'Sorry, but there are no available portfolios for you to export to';
@@ -62,6 +67,7 @@ $string['selectplugin'] = 'Select portfolio plugin to export to';
$string['someinstancesdisabled'] = 'Some configured plugin instances have been disabled either because they are misconfigured or rely on something else that is';
$string['somepluginsdisabled'] = 'Some entire plugins have been disabled because they are either misconfigured or rely on something else that is:';
$string['sure'] = 'Are you sure you want to delete \'$a\'? This cannot be undone.';
$string['thirdpartyexception'] = 'A third party exception was thrown during portfolio export ($a). Caught and rethrown but this should really be fixed';
$string['wanttowait_moderate'] = 'Do you want to wait for this transfer? It might take a few minutes';
$string['wanttowait_high'] = 'It is not recommended that you wait for this transfer to complete, but you can if you\'re sure and know what you\'re doing';
$string['wait'] = 'Wait';
+118 -72
View File
@@ -400,13 +400,14 @@ function portfolio_supported_formats_intersect($callerformats, $pluginformats) {
debugging(get_string('invalidformat', 'portfolio', $cf));
continue;
}
$cfobj = new $allformats[$cf]();
foreach ($pluginformats as $p => $pf) {
if (!array_key_exists($pf, $allformats)) {
debugging(get_string('invalidformat', 'portfolio', $pf));
unset($pluginformats[$p]); // to avoid the same warning over and over
continue;
}
if ($cf instanceof $pf) {
if ($cfobj instanceof $allformats[$pf]) {
$intersection[] = $cf;
}
}
@@ -430,7 +431,7 @@ function portfolio_instance($instanceid, $record=null) {
$instance = $record;
} else {
if (!$instance = $DB->get_record('portfolio_instance', array('id' => $instanceid))) {
return false; // @todo throw exception?
throw new portfolio_exception('invalidinstance', 'portfolio');
}
}
require_once($CFG->dirroot . '/portfolio/type/'. $instance->plugin . '/lib.php');
@@ -715,14 +716,13 @@ abstract class portfolio_caller_base {
* generic getter for properties belonging to this instance
* <b>outside</b> the subclasses
* like name, visible etc.
*
* @todo determine what to return in the error case
*/
public function get($field) {
if (property_exists($this, $field)) {
return $this->{$field};
}
return false; // @todo throw exception?
$a = (object)array('property' => $field, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invalidproperty', 'portfolio', $this->get_return_url(), $a);
}
/**
@@ -730,7 +730,6 @@ abstract class portfolio_caller_base {
* <b>outside</b> the subclass
* like name, visible, etc.
*
* @todo determine what to return in the error case
*/
public final function set($field, &$value) {
if (property_exists($this, $field)) {
@@ -738,8 +737,8 @@ abstract class portfolio_caller_base {
$this->dirty = true;
return true;
}
return false; // @todo throw exception?
$a = (object)array('property' => $field, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invalidproperty', 'portfolio', $this->get_return_url(), $a);
}
/**
@@ -756,7 +755,8 @@ abstract class portfolio_caller_base {
);
foreach ($config as $key => $value) {
if (!in_array($key, $allowed)) {
continue; // @ todo throw exception
$a = (object)array('property' => $key, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invalidexportproperty', 'portfolio', $this->get_return_url(), $a);
}
$this->exportconfig[$key] = $value;
}
@@ -767,7 +767,6 @@ abstract class portfolio_caller_base {
* subclasses shouldn't need to override this
*
* @param string key the config item to fetch
* @todo figure out the error cases (item not found or not allowed)
*/
public final function get_export_config($key) {
$allowed = array_merge(
@@ -775,10 +774,11 @@ abstract class portfolio_caller_base {
$this->get_allowed_export_config()
);
if (!in_array($key, $allowed)) {
return false; // @todo throw exception?
$a = (object)array('property' => $key, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invalidexportproperty', 'portfolio', $this->get_return_url(), $a);
}
if (!array_key_exists($key, $this->exportconfig)) {
return null; // @todo what to return|
return null;
}
return $this->exportconfig[$key];
}
@@ -1078,7 +1078,8 @@ abstract class portfolio_plugin_base {
);
foreach ($config as $key => $value) {
if (!in_array($key, $allowed)) {
continue; // @ todo throw exception
$a = (object)array('property' => $key, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invalidexportproperty', 'portfolio', $this->get_return_url(), $a);
}
$this->exportconfig[$key] = $value;
}
@@ -1092,7 +1093,6 @@ abstract class portfolio_plugin_base {
*
* @return string config value
*
* @todo figure out the error cases
*/
public final function get_export_config($key) {
$allowed = array_merge(
@@ -1100,10 +1100,11 @@ abstract class portfolio_plugin_base {
$this->get_allowed_export_config()
);
if (!in_array($key, $allowed)) {
return false; // @todo throw exception?
$a = (object)array('property' => $key, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invalidexportproperty', 'portfolio', $this->get_return_url(), $a);
}
if (!array_key_exists($key, $this->exportconfig)) {
return null; // @todo what to return|
return null;
}
return $this->exportconfig[$key];
}
@@ -1289,7 +1290,7 @@ abstract class portfolio_plugin_base {
global $DB;
if (!$record) {
if (!$record = $DB->get_record('portfolio_instance', array('id' => $instanceid))) {
return false; // @todo throw exception?
throw new portfolio_exception('invalidinstance', 'portfolio');
}
}
foreach ((array)$record as $key =>$value) {
@@ -1353,7 +1354,8 @@ abstract class portfolio_plugin_base {
continue;
}
if (!in_array($key, $this->get_allowed_config())) {
continue; // @todo throw exception?
$a = (object)array('property' => $key, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invalidconfigproperty', 'portfolio', null, $a);
}
if (!isset($this->config->{$key})) {
$DB->insert_record('portfolio_instance_config', (object)array(
@@ -1366,7 +1368,6 @@ abstract class portfolio_plugin_base {
}
$this->config->{$key} = $value;
}
return true; // @todo - if we're going to change here to throw exceptions, this can change
}
/**
@@ -1375,17 +1376,16 @@ abstract class portfolio_plugin_base {
* @param string $key key to fetch
*
* @return string the corresponding value
*
* @todo determine what to return in the error case.
*/
public final function get_config($key) {
if (!in_array($key, $this->get_allowed_config())) {
return false; // @todo throw exception?
$a = (object)array('property' => $key, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invalidconfigproperty', 'portfolio', null, $a);
}
if (isset($this->config->{$key})) {
return $this->config->{$key};
}
return false; // @todo null?
return null;
}
/**
@@ -1396,7 +1396,6 @@ abstract class portfolio_plugin_base {
*
* @return string the corresponding value
*
* @todo determine what to return in the error case
*/
public final function get_user_config($key, $userid=0) {
global $DB;
@@ -1407,7 +1406,8 @@ abstract class portfolio_plugin_base {
if ($key != 'visible') { // handled by the parent class
if (!in_array($key, $this->get_allowed_user_config())) {
return false; // @todo throw exception?
$a = (object)array('property' => $key, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invaliduserproperty', 'portfolio', null, $a);
}
}
if (!array_key_exists($userid, $this->userconfig)) {
@@ -1430,7 +1430,6 @@ abstract class portfolio_plugin_base {
* @param mixed $config array or stdclass containing key/value pairs to set
* @param integer $userid userid to set config for (defaults to current)
*
* @todo determine what to return in the error case
*/
public final function set_user_config($config, $userid=0) {
global $DB;
@@ -1441,7 +1440,8 @@ abstract class portfolio_plugin_base {
foreach ($config as $key => $value) {
if ($key != 'visible' && !in_array($key, $this->get_allowed_user_config())) {
continue; // @todo throw exception?
$a = (object)array('property' => $key, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invaliduserproperty', 'portfolio', null, $a);
}
if (!$existing = $DB->get_record('portfolio_instance_user', array('instance'=> $this->id, 'userid' => $userid, 'name' => $key))) {
$DB->insert_record('portfolio_instance_user', (object)array(
@@ -1455,7 +1455,6 @@ abstract class portfolio_plugin_base {
}
$this->userconfig[$userid]->{$key} = $value;
}
return true; // @todo
}
@@ -1464,13 +1463,13 @@ abstract class portfolio_plugin_base {
* <b>outside</b> the subclasses
* like name, visible etc.
*
* @todo determine what to return in the error case
*/
public final function get($field) {
if (property_exists($this, $field)) {
return $this->{$field};
}
return false; // @todo throw exception?
$a = (object)array('property' => $field, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invalidproperty', 'portfolio', $a);
}
/**
@@ -1478,7 +1477,6 @@ abstract class portfolio_plugin_base {
* <b>outside</b> the subclass
* like name, visible, etc.
*
* @todo determine what to return in the error case
*/
public final function set($field, $value) {
if (property_exists($this, $field)) {
@@ -1486,7 +1484,8 @@ abstract class portfolio_plugin_base {
$this->dirty = true;
return true;
}
return false; // @todo throw exception?
$a = (object)array('property' => $field, 'class' => get_class($this));
throw new portfolio_export_exception($this->get('exporter'), 'invalidproperty', 'portfolio', $a);
}
@@ -1666,7 +1665,7 @@ final class portfolio_admin_form extends moodleform {
}
if (isset($result) && is_string($result)) { // something went wrong, stop
return $this->raise_error($result, 'portfolio_' . $this->plugin, $CFG->wwwroot . '/' . $CFG->admin . '/portfolio.php');
throw new portfolio_exception($result, 'portfolio_' . $this->plugin, $CFG->wwwroot . '/' . $CFG->admin . '/portfolio.php');
}
// and set the data if we have some.
@@ -1765,7 +1764,7 @@ final class portfolio_exporter {
*
* @param portfolio_plugin_base subclass $instance portfolio instance (passed by reference)
* @param portfolio_caller_base subclass $caller portfolio caller (passed by reference)
* @param string $callerfile @todo document
* @param string $callerfile path to callerfile (relative to dataroot)
* @param string $navigation result of build_navigation (passed to print_header)
*/
public function __construct(&$instance, &$caller, $callerfile, $navigation) {
@@ -1785,24 +1784,20 @@ final class portfolio_exporter {
* generic getter for properties belonging to this instance
* <b>outside</b> the subclasses
* like name, visible etc.
*
* @todo determine what to return in the error case
*/
public function get($field) {
if (property_exists($this, $field)) {
return $this->{$field};
}
return false; // @todo throw exception?
$a = (object)array('property' => $field, 'class' => get_class($this));
throw new portfolio_export_exception($this, 'invalidproperty', 'portfolio', $a);
}
/**
* generic setter for properties belonging to this instance
* <b>outside</b> the subclass
* like name, visible, etc.
*
* @todo determine what to return in the error case
*/
public function set($field, &$value) {
if (property_exists($this, $field)) {
$this->{$field} =& $value;
@@ -1813,7 +1808,8 @@ final class portfolio_exporter {
$this->dirty = true;
return true;
}
return false; // @todo throw exception?
$a = (object)array('property' => $field, 'class' => get_class($this));
throw new portfolio_export_exception($this, 'invalidproperty', 'portfolio', $a);
}
/**
@@ -1847,12 +1843,21 @@ final class portfolio_exporter {
);
$function = 'process_stage_' . $functionmap[$stage];
if ($this->$function()) {
// if we get through here it means control was returned
// as opposed to wanting to stop processing
// eg to wait for user input.
$stage++;
return $this->process_stage($stage);
try {
if ($this->$function()) {
// if we get through here it means control was returned
// as opposed to wanting to stop processing
// eg to wait for user input.
$stage++;
return $this->process_stage($stage);
}
} catch (portfolio_caller_exception $e) {
portfolio_export_rethrow_exception($this, $e);
} catch (portfolio_plugin_exception $e) {
portfolio_export_rethrow_exception($this, $e);
} catch (Exception $e) {
debugging(get_string('thirdpartyexception', 'portfolio', get_class($e)));
portfolio_export_rethrow_exception($this, $e);
}
$this->save();
return false;
@@ -1894,7 +1899,7 @@ final class portfolio_exporter {
$expectedtime = $this->instance->expected_time($this->caller->expected_time());
if (count($formats) == 0) {
// something went wrong, we should not have gotten this far.
return $this->raise_error('nocommonformats', 'portfolio', get_class($caller));
throw new portfolio_export_exception($this, 'nocommonformats', 'portfolio', get_class($this->caller));
}
// even if neither plugin or caller wants any config, we have to let the user choose their format, and decide to wait.
if ($pluginobj || $callerobj || count($formats) > 1 || $expectedtime != PORTFOLIO_TIME_LOW) {
@@ -1911,7 +1916,7 @@ final class portfolio_exporter {
$this->cancel_request();
} else if ($fromform = $mform->get_data()){
if (!confirm_sesskey()) {
return $this->raise_error('confirmsesskeybad', '', $caller->get_return_url());
throw new portfolio_export_exception($this, 'confirmsesskeybad', '');
}
$pluginbits = array();
$callerbits = array();
@@ -2041,10 +2046,10 @@ final class portfolio_exporter {
// the caller is given control to package it up however it wants
// and then the portfolio plugin is given control to do whatever it wants.
if (!$this->caller->prepare_package()) {
return $this->raise_error('callercouldnotpackage', 'portfolio', $this->caller->get_return_url());
throw new portfolio_export_exception($this, 'callercouldnotpackage', 'portfolio');
}
if (!$package = $this->instance->prepare_package()) {
return $this->raise_error('plugincouldnotpackage', 'portfolio', $this->caller->get_return_url());
throw new portfolio_export_exception($this, 'plugincouldnotpackage', 'portfolio');
}
return true;
}
@@ -2077,7 +2082,7 @@ final class portfolio_exporter {
public function process_stage_send() {
// send the file
if (!$this->instance->send_package()) {
return $this->raise_error('failedtosendpackage', 'portfolio');
throw new portfolio_export_exception($this, 'failedtosendpackage', 'portfolio');
}
// log the transfer
global $DB;
@@ -2138,24 +2143,6 @@ final class portfolio_exporter {
print_header($titlestr, $headerstr, $this->navigation);
}
/**
* error handler - decides whether we're running interactively or not
* and behaves accordingly
*/
public function raise_error($string, $module='moodle', $continue=null, $a=null) {
if (defined('FULLME') && FULLME == 'cron') {
debugging(get_string($string, $module));
return false;
}
if (isset($this) && $this instanceof portfolio_exporter) {
// apparently even calling statically (with :: rather than ->
// causes $this to be set in some php versions
// (assuming this function is called from some other object - wtF?!)
$this->process_stage_cleanup(true);
}
print_error($string, $module, $continue, $a);
}
/**
* cancels a potfolio request and cleans up the tempdata
* and redirects the user back to where they started
@@ -2197,7 +2184,7 @@ final class portfolio_exporter {
public static function rewaken_object($id) {
global $DB, $CFG;
if (!$data = $DB->get_record('portfolio_tempdata', array('id' => $id))) {
portfolio_exporter::raise_error('invalidtempid', 'portfolio');
throw new portfolio_exception('invalidtempid', 'portfolio');
}
$exporter = unserialize(base64_decode($data->data));
if ($exporter->instancefile) {
@@ -2296,7 +2283,8 @@ class portfolio_instance_select extends moodleform {
true
);
if (empty($options)) {
portfolio_exporter::raise_error('noavailableplugins', 'portfolio');
debugging('noavailableplugins', 'portfolio');
return false;
}
$mform =& $this->_form;
$mform->addElement('select', 'instance', get_string('selectplugin', 'portfolio'), $options);
@@ -2366,4 +2354,62 @@ class portfolio_format_html extends portfolio_format_file {}
*/
class portfolio_format_mbkp extends portfolio_format_file {}
/**
* exception to throw during an export - will clean up session and tempdata
*/
class portfolio_export_exception extends portfolio_exception {
/**
* constructor.
* @param object $exporter instance of portfolio_exporter (will handle null case)
* @param string $errorcode language string key
* @param string $module language string module (optional, defaults to moodle)
* @param string $continue url to continue to (optional, defaults to wwwroot)
* @param mixed $a language string data (optional, defaults to null)
*/
public function __construct($exporter, $errorcode, $module=null, $continue=null, $a=null) {
if (!empty($exporter) && $exporter instanceof portfolio_exporter) {
if (empty($continue)) {
$caller = $exporter->get('caller');
if (!empty($caller) && $caller instanceof portfolio_caller_base) {
$continue = $exporter->get('caller')->get_return_url();
}
}
if (!defined('FULLME') || FULLME != 'cron') {
$exporter->process_stage_cleanup();
}
} else {
global $SESSION;
if (!empty($SESSION->portfolioexport)) {
debugging(get_string('exportexceptionnoexporter', 'portfolio'));
}
}
parent::__construct($errorcode, $module, $continue, $a);
}
}
/**
* exception for callers to throw when they have a problem.
* usually caught and rethrown as {@see portfolio_export_exception}
*/
class portfolio_caller_exception extends portfolio_exception {}
/**
* top level portfolio exception.
* sometimes caught and rethrown as {@see portfolio_export_exception}
*/
class portfolio_exception extends moodle_exception {}
/**
* exception for portfolio plugins to throw when they have a problem.
* usually caught and rethrown as {@see portfolio_export_exception}
*/
class portfolio_plugin_exception extends portfolio_exception {}
/**
* helper function to rethrow a caught portfolio_exception as an export exception
*/
function portfolio_export_rethrow_exception($exporter, $e) {
throw new portfolio_export_exception($exporter, $e->errorcode, $e->module, $e->link, $e->a);
}
?>
+1 -1
View File
@@ -829,7 +829,7 @@ class chat_portfolio_caller extends portfolio_module_caller_base {
public function __construct($callbackargs) {
global $DB, $USER;
if (!$this->cm = get_coursemodule_from_id('chat', $callbackargs['id'])) {
portfolio_exporter::raise_error('invalidid', 'chat');
throw new portfolio_caller_exception('invalidid', 'chat');
}
$this->chat = $DB->get_record('chat', array('id' => $this->cm->instance));
$select = 'chatid = ?';
+4 -4
View File
@@ -2448,7 +2448,7 @@ class data_portfolio_caller extends portfolio_module_caller_base {
public function __construct($callbackargs) {
global $DB;
if (!$this->cm = get_coursemodule_from_id('data', $callbackargs['id'])) {
portfolio_exporter::raise_error('invalidid', 'data');
throw new portfolio_caller_exception('invalidid', 'data');
}
$this->data = $DB->get_record('data', array('id' => $this->cm->instance));
$fieldrecords = $DB->get_records('data_fields', array('dataid'=>$this->cm->instance), 'id');
@@ -2532,15 +2532,15 @@ class data_portfolio_caller extends portfolio_module_caller_base {
$filename = clean_filename($this->cm->name . '.csv');
break;
case 'xls':
portfolio_exporter::raise_error('notimplemented', 'portfolio');
throw new portfolio_caller_exception('notimplemented', 'portfolio', '', 'xls');
$content = data_export_xls($this->exportdata, $this->cm->name, $count, true);
break;
case 'ods':
portfolio_exporter::raise_error('notimplemented', 'portfolio');
throw new portfolio_caller_exception('notimplemented', 'portfolio', '', 'ods');
$content = data_export_ods($this->exportdata, $this->cm->name, $count, true);
break;
default:
portfolio_exporter::raise_error('notimplemented', 'portfolio', '', $this->exporttype);
throw new portfolio_caller_exception('notimplemented', 'portfolio', '', $this->exporttype);
break;
}
return $this->exporter->write_new_file($content, $filename);
+2 -4
View File
@@ -7133,8 +7133,7 @@ class forum_portfolio_caller extends portfolio_module_caller_base {
// a single post, with or without attachment
// or just an attachment with no post
if (!$this->post) { // whole discussion
portfolio_exporter::raise_error('exoprting whole discussion not implemented - see MDL-15758');
// @todo see MDL-15758
throw new portfolio_caller_exception('TODO: exporting whole discussion not implemented - see MDL-15758');
} else {
$status = true;
if ($this->files) {
@@ -7229,8 +7228,7 @@ class forum_portfolio_caller extends portfolio_module_caller_base {
}
return sha1($attachsha1 . ',' . $this->post->subject . ',' . $this->post->message);
}
portfolio_exporter::raise_error('exporting whole discussion not implemented - see MDL-15758');
// @todo see MDL-15758
throw new portfolio_caller_exception('TODO: exporting whole discussion not implemented - see MDL-15758');
}
function expected_time() {
+5 -5
View File
@@ -2379,10 +2379,10 @@ class glossary_csv_portfolio_caller extends portfolio_module_caller_base {
public function __construct($callbackargs) {
global $DB;
if (!$this->cm = get_coursemodule_from_id('glossary', $callbackargs['id'])) {
portfolio_exporter::raise_error('invalidid', 'glossary');
throw new portfolio_caller_exception('invalidid', 'glossary');
}
if (!$this->glossary = $DB->get_record('glossary', array('id' => $this->cm->instance))) {
portfolio_exporter::raise_error('invalidid', 'glossary');
throw new portfolio_caller_exception('invalidid', 'glossary');
}
$entries = $DB->get_records('glossary_entries', array('glossaryid' => $this->glossary->id));
list($where, $params) = $DB->get_in_or_equal(array_keys($entries));
@@ -2446,14 +2446,14 @@ class glossary_entry_portfolio_caller extends portfolio_module_caller_base {
public function __construct($callbackargs) {
global $DB;
if (!$this->cm = get_coursemodule_from_id('glossary', $callbackargs['id'])) {
portfolio_exporter::raise_error('invalidid', 'glossary');
throw new portfolio_caller_exception('invalidid', 'glossary');
}
if (!$this->glossary = $DB->get_record('glossary', array('id' => $this->cm->instance))) {
portfolio_exporter::raise_error('invalidid', 'glossary');
throw new portfolio_caller_exception('invalidid', 'glossary');
}
if (!array_key_exists('entryid', $callbackargs)
|| !$this->entry = $DB->get_record('glossary_entries', array('id' => $callbackargs['entryid']))) {
portfolio_exporter::raise_error('noentry', 'glossary');
throw new portfolio_caller_exception('noentry', 'glossary');
}
}
+14 -6
View File
@@ -22,8 +22,10 @@ if ($dataid) {
}
if (!$exporter->get('instance')) {
if ($instance = optional_param('instance', '', PARAM_INT)) {
if (!$instance = portfolio_instance($instance)) {
$exporter->raise_error('invalidinstance', 'portfolio');
try {
$instance = portfolio_instance($instance);
} catch (portfolio_exception $e) {
portfolio_export_rethrow_exception($exporter, $e);
}
if ($broken = portfolio_instance_sanity_check($instance)) {
print_error(get_string($broken[$instance->get('id')], 'portfolio_' . $instance->get('plugin')));
@@ -36,11 +38,13 @@ if ($dataid) {
} else {
// we'e just posted here for the first time and have might the instance already
if ($instance = optional_param('instance', 0, PARAM_INT)) {
if (!$instance = portfolio_instance($instance)) {
portfolio_exporter::raise_error('invalidinstance', 'portfolio');
try {
$instance = portfolio_instance($instance);
} catch (portfolio_exception $e) {
portfolio_export_rethrow_exception($exporter, $e);
}
if ($broken = portfolio_instance_sanity_check($instance)) {
print_error(get_string($broken[$instance->get('id')], 'portfolio_' . $instance->get('plugin')));
throw new portfolio_exception($broken[$instance->get('id')], 'portfolio_' . $instance->get('plugin'));
}
$instance->set('user', $USER);
} else {
@@ -122,7 +126,11 @@ $alreadystolen = false;
// for places returning control to pass (rather than PORTFOLIO_STAGE_PACKAGE
// which is unstable if they can't get to the constant (eg external system)
if ($postcontrol = optional_param('postcontrol', 0, PARAM_INT)) {
$exporter->instance()->post_control($stage, array_merge($_GET, $_POST));
try {
$exporter->instance()->post_control($stage, array_merge($_GET, $_POST));
} catch (portfolio_plugin_exception $e) {
portfolio_export_rethrow_exception($exporter, $e);
}
$alreadystolen = true;
}
+3 -3
View File
@@ -9,16 +9,16 @@ $id = required_param('id', PARAM_INT);
$exporter = portfolio_exporter::rewaken_object($id);
if ($exporter->get('instance')->is_push()) {
$exporter->raise_error('filedenied', 'portfolio');
throw new portfolio_export_exception($exporter, 'filedenied', 'portfolio');
}
if (!$exporter->get('instance')->verify_file_request_params(array_merge($_GET, $_POST))) {
$exporter->raise_error('filedenied', 'portfolio');
throw new portfolio_export_exception($exporter, 'filedenied', 'portfolio');
}
$file = $exporter->get('instance')->get('file');
if (!($file instanceof stored_file)) {
$exporter->raise_error('filenotfound', 'portfolio');
throw new portfolio_export_exception($exporter, 'filenotfound', 'portfolio');
}
send_stored_file($file, 0, 0, true, null, true);
+6 -6
View File
@@ -39,7 +39,7 @@ class portfolio_plugin_boxnet extends portfolio_plugin_push_base {
parent::set_export_config($config);
if (array_key_exists('newfolder', $config) && !empty($config['newfolder'])) {
if (!$created = $this->boxclient->createFolder($config['newfolder'])) {
portfolio_exporter::raise_error('foldercreatefailed', 'portfolio_boxnet');
throw new portfolio_plugin_exception('foldercreatefailed', 'portfolio_boxnet');
}
$this->folders[$created['folder_id']] = $created['folder_type'];
parent::set_export_config(array('folder' => $created['folder_id']));
@@ -123,7 +123,7 @@ class portfolio_plugin_boxnet extends portfolio_plugin_push_base {
return false;
}
if (!$this->ensure_ticket()) {
portfolio_exporter::raise_error('noticket', 'portfolio_boxnet');
throw new portfolio_plugin_exception('noticket', 'portfolio_boxnet');
}
$token = $this->get_user_config('authtoken', $this->get('user')->id);
$ctime= $this->get_user_config('authtokenctime', $this->get('user')->id);
@@ -140,7 +140,7 @@ class portfolio_plugin_boxnet extends portfolio_plugin_push_base {
return;
}
if (!array_key_exists('auth_token', $params) || empty($params['auth_token'])) {
portfolio_exporter::raise_error('noauthtoken', 'portfolio_boxnet');
throw new portfolio_plugin_exception('noauthtoken', 'portfolio_boxnet');
}
$this->authtoken = $params['auth_token'];
$this->boxclient->auth_token = $this->authtoken;
@@ -154,7 +154,7 @@ class portfolio_plugin_boxnet extends portfolio_plugin_push_base {
$this->boxclient = new boxclient($this->get_config('apikey'), '');
$ticket_return = $this->boxclient->getTicket();
if ($this->boxclient->isError() || empty($ticket_return)) {
portfolio_exporter::raise_error('noticket', 'portfolio_boxnet');
throw new portfolio_plugin_exception('noticket', 'portfolio_boxnet');
}
$this->ticket = $ticket_return['ticket'];
return $this->ticket;
@@ -168,12 +168,12 @@ class portfolio_plugin_boxnet extends portfolio_plugin_push_base {
|| empty($this->authtoken)
|| empty($this->boxclient)) {
// if we don't have these we're pretty much screwed
portfolio_exporter::raise_error('folderlistfailed', 'portfolio_boxnet');
throw new portfolio_plugin_exception('folderlistfailed', 'portfolio_boxnet');
return false;
}
$this->accounttree = $this->boxclient->getAccountTree();
if ($this->boxclient->isError()) {
portfolio_exporter::raise_error('folderlistfailed', 'portfolio_boxnet');
throw new portfolio_plugin_exception('folderlistfailed', 'portfolio_boxnet');
}
if (!is_array($this->accounttree)) {
return false;