-
Notifications
You must be signed in to change notification settings - Fork 0
/
exceptions.php
116 lines (98 loc) · 3.34 KB
/
exceptions.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
/* Copyright 2005-2008 Andrew A. Bakun
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class ContextException extends Exception { }
class NotControllerException extends Exception { }
class DataException extends Exception {
private $_errormsg = '';
private $_value = NULL;
public function __construct($em, $value = NULL) {
$this->_errormsg = $em;
$this->_value = $value;
parent::__construct($em);
}
public function value() {
return array('message'=>$this->_errormsg, 'value'=>$this->_value);
}
public function body() {
return $this->_errormsg;
}
}
class HTTPException extends Exception {
private $__location;
public function __construct($mesg, $code = 500, $location = NULL) {
parent::__construct($mesg, $code);
$this->__location = $location;
}
public function location() {
return $this->__location;
}
public function body() {
global $dispatch;
try {
$dispatch->find_controller_class(array('errorpage'));
$dispatch->create_controller();
ob_start();
$dispatch->render();
$output = ob_get_clean();
} catch (Exception $e) {
lib::log_exception($e);
# if there are any errors at all, fall back on simple error reporting
$code = $this->getCode();
$msg = $this->getMessage();
$ss = isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : '';
$ret = "<html><head><title>$msg</title></head><body><h1>$code</h1>$msg<hr/><em>$ss</em></body></html>";
return $ret;
}
return $output;
}
}
class HTTPMovedPermanently extends HTTPException {
public function __construct($loc) {
parent::__construct("found", 301, absolute($loc));
}
}
class HTTPFoundRedirect extends HTTPException {
public function __construct($loc) {
parent::__construct("found", 302, absolute($loc));
}
}
class HTTPSeeOther extends HTTPException {
public function __construct($loc) {
parent::__construct("see other", 303, absolute($loc));
}
}
class HTTPUnauthorized extends HTTPException {
public function __construct($extramsg = '') {
$msg = 'Unauthorized';
if ($extramsg) $msg .= " ($extramsg)";
parent::__construct($msg, 401);
}
}
class HTTPForbidden extends HTTPException {
public function __construct($extramsg = '') {
parent::__construct('Forbidden', 403);
}
}
class HTTPNotFound extends HTTPException {
public function __construct($extramsg = '') {
$x = $_SERVER['REQUEST_URI'];
$x = preg_replace('/[<>]/', '', $x);
$x = preg_replace('/\?.*/', '', $x);
$msg = "$x not found";
if ($extramsg) $msg .= " ($extramsg)";
parent::__construct($msg, 404);
}
}