e6fbac68e8fe254f0730eec640fc0186532d7c1b
[moodle.git] / lib / portfolio / exceptions.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * This file contains all the portfolio exception classes.
19  *
20  * @package core_portfolio
21  * @copyright 2008 Penny Leach <penny@catalyst.net.nz>,  Martin Dougiamas
22  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 /**
28  * Top level portfolio exception.
29  * Sometimes caught and re-thrown as {@see portfolio_export_exception}
30  *
31  * @package core_portfolio
32  * @category portfolio
33  * @copyright 2008 Penny Leach <penny@catalyst.net.nz>
34  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
35  */
36 class portfolio_exception extends moodle_exception {}
38 /**
39  * Exception to throw during an export - will clean up session and tempdata
40  *
41  * @package core_portfolio
42  * @category portfolio
43  * @copyright 2008 Penny Leach <penny@catalyst.net.nz>
44  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
45  */
46 class portfolio_export_exception extends portfolio_exception {
48     /**
49      * Constructor.
50      *
51      * @param portfolio_exporter $exporter instance of portfolio_exporter (will handle null case)
52      * @param string $errorcode language string key
53      * @param string $module language string module (optional, defaults to moodle)
54      * @param string $continue url to continue to (optional, defaults to wwwroot)
55      * @param object $a language string data (optional, defaults to  null)
56      */
57     public function __construct($exporter, $errorcode, $module=null, $continue=null, $a=null) {
58         global $CFG;
59         // This static variable is necessary because sometimes the code below
60         // which tries to obtain a continue link can cause one of these
61         // exceptions to be thrown. This would create an infinite loop (until
62         // PHP hits its stack limit). Using this static lets us make the
63         // nested constructor finish immediately without attempting to call
64         // methods that might fail.
65         static $inconstructor = false;
67         if (!$inconstructor && !empty($exporter) &&
68                 $exporter instanceof portfolio_exporter) {
69             $inconstructor = true;
70             try {
71                 if (empty($continue)) {
72                     $caller = $exporter->get('caller');
73                     if (!empty($caller) && $caller instanceof portfolio_caller_base) {
74                         $continue = $exporter->get('caller')->get_return_url();
75                     }
76                 }
77                 // this was previously only called if we were in cron,
78                 // but I think if there's always an exception, we should clean up
79                 // rather than force the user to resolve the export later.
80                 $exporter->process_stage_cleanup();
81             } catch(Exception $e) {
82                 // Ooops, we had an exception trying to get caller
83                 // information. Ignore it.
84             }
85             $inconstructor = false;
86         }
87         parent::__construct($errorcode, $module, $continue, $a);
88     }
89 }
91 /**
92  * Exception for callers to throw when they have a problem.
93  * Usually caught and rethrown as {@see portfolio_export_exception}
94  *
95  * @package core_portfolio
96  * @category portfolio
97  * @copyright 2008 Penny Leach <penny@catalyst.net.nz>
98  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
99  */
100 class portfolio_caller_exception extends portfolio_exception {}
102 /**
103  * Exception for portfolio plugins to throw when they have a problem.
104  * Usually caught and rethrown as {@see portfolio_export_exception}
105  *
106  * @package core_portfolio
107  * @category portfolio
108  * @copyright 2008 Penny Leach <penny@catalyst.net.nz>
109  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
110  */
111 class portfolio_plugin_exception extends portfolio_exception {}
113 /**
114  * Exception for interacting with the button class
115  *
116  * @package core_portfolio
117  * @category portfolio
118  * @copyright 2008 Penny Leach <penny@catalyst.net.nz>
119  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
120  */
121 class portfolio_button_exception extends portfolio_exception {}
123 /**
124  * Leap2a exception - for invalid api calls
125  *
126  * @package core_portfolio
127  * @category portfolio
128  * @copyright 2008 Penny Leach <penny@catalyst.net.nz>
129  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
130  */
131 class portfolio_format_leap2a_exception extends portfolio_exception {}