diff --git a/lang/en/repository.php b/lang/en/repository.php index b430e569a617..fadce50db53b 100644 --- a/lang/en/repository.php +++ b/lang/en/repository.php @@ -100,6 +100,7 @@ $string['errornotyourfile'] = 'You cannot pick file which is not added by your'; $string['erroruniquename'] = 'Repository instance name should be unique'; $string['errorpostmaxsize'] = 'The uploaded file may exceed max_post_size directive in php.ini.'; +$string['errorwhilecommunicatingwith'] = 'Error while communicating with the repository \'{$a}\'.'; $string['errorwhiledownload'] = 'An error occured while downloading the file: {$a}'; $string['existingrepository'] = 'This repository already exists'; $string['federatedsearch'] = 'Federated search'; diff --git a/repository/s3/lib.php b/repository/s3/lib.php index 54caa3bbc6c6..596fc09cbe3c 100644 --- a/repository/s3/lib.php +++ b/repository/s3/lib.php @@ -47,6 +47,7 @@ public function __construct($repositoryid, $context = SYSCONTEXTID, $options = a $this->access_key = get_config('s3', 'access_key'); $this->secret_key = get_config('s3', 'secret_key'); $this->s = new S3($this->access_key, $this->secret_key); + $this->s->setExceptions(true); } /** @@ -75,7 +76,7 @@ protected function explode_path($path) { public function get_listing($path = '', $page = '') { global $CFG, $OUTPUT; if (empty($this->access_key)) { - die(json_encode(array('e'=>get_string('needaccesskey', 'repository_s3')))); + throw new moodle_exception('needaccesskey', 'repository_s3'); } $list = array(); @@ -97,7 +98,11 @@ public function get_listing($path = '', $page = '') { $tree = array(); if (empty($path)) { - $buckets = $this->s->listBuckets(); + try { + $buckets = $this->s->listBuckets(); + } catch (S3Exception $e) { + throw new moodle_exception('errorwhilecommunicatingwith', 'repository', '', $this->get_name()); + } foreach ($buckets as $bucket) { $folder = array( 'title' => $bucket, @@ -112,7 +117,11 @@ public function get_listing($path = '', $page = '') { $folders = array(); list($bucket, $uri) = $this->explode_path($path); - $contents = $this->s->getBucket($bucket, $uri, null, null, '/', true); + try { + $contents = $this->s->getBucket($bucket, $uri, null, null, '/', true); + } catch (S3Exception $e) { + throw new moodle_exception('errorwhilecommunicatingwith', 'repository', '', $this->get_name()); + } foreach ($contents as $object) { // If object has a prefix, it is a 'CommonPrefix', which we consider a folder @@ -183,7 +192,11 @@ public function get_listing($path = '', $page = '') { public function get_file($filepath, $file = '') { list($bucket, $uri) = $this->explode_path($filepath); $path = $this->prepare_file($file); - $this->s->getObject($bucket, $uri, $path); + try { + $this->s->getObject($bucket, $uri, $path); + } catch (S3Exception $e) { + throw new moodle_exception('errorwhilecommunicatingwith', 'repository', '', $this->get_name()); + } return array('path' => $path); }