00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 class Status {
00021 const OUTPUT_HTML = 'html';
00022 const OUTPUT_PLAIN = 'plain';
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 protected $messages = array();
00038
00039
00040
00041
00042
00043
00044 protected $isError = false;
00045
00046
00047
00048
00049
00050
00051 public function __construct($message = false) {
00052 if (!empty($message)) {
00053 $this->append($message);
00054 }
00055 }
00056
00057
00058
00059
00060 public function __toString() {
00061 return $this->to_string();
00062 }
00063
00064
00065
00066
00067
00068 public function __get($name) {
00069 if ($name === 'message') {
00070 return $this->to_string();
00071 }
00072 }
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 public function to_string($policy = self::OUTPUT_HTML) {
00085 $ret = '';
00086 if ($policy == self::OUTPUT_PLAIN) {
00087 $ret .= implode("\n", $this->messages);
00088 }
00089 else {
00090 $tmp = array_map(array('String', 'escape'), $this->messages);
00091 $ret .= implode('<br />', $tmp);
00092 }
00093 return $ret;
00094 }
00095
00096
00097
00098
00099
00100
00101 public function get_messages() {
00102 return $this->messages;
00103 }
00104
00105
00106
00107
00108 public function clear_messages() {
00109 $this->messages = array();
00110 }
00111
00112
00113
00114
00115
00116
00117
00118 public function append($text) {
00119 if (!empty($text)) {
00120 $this->messages[] = $text;
00121 $this->isError = true;
00122 }
00123 }
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133 public function merge($other) {
00134 if ($other instanceof Status) {
00135 foreach($other->get_messages() as $m) {
00136 $this->append($m);
00137 }
00138 }
00139 else if ($other instanceof PEAR_Error) {
00140 $this->append($other->getMessage());
00141 }
00142 else if ($other instanceof Exception) {
00143 $this->append($other->getMessage());
00144 }
00145 else if (!empty($other) && is_string($other)){
00146 $this->append($other);
00147 }
00148 }
00149
00150
00151
00152
00153
00154
00155 public function is_ok() {
00156 return ($this->isError == false);
00157 }
00158
00159
00160
00161
00162
00163
00164 public function is_error() {
00165 return ($this->isError == true);
00166 }
00167
00168
00169
00170
00171
00172
00173 public function is_empty() {
00174 return ($this->count() == 0);
00175 }
00176
00177
00178
00179
00180
00181 public function count() {
00182 return count($this->messages);
00183 }
00184
00185
00186
00187
00188
00189
00190 public function display($policy = self::OUTPUT_HTML) {
00191 print $this->render($policy);
00192 }
00193
00194
00195
00196
00197
00198
00199 public function render($policy = self::OUTPUT_HTML) {
00200 $ret = $this->to_string($policy);
00201 if ($ret !== '' && $policy == self::OUTPUT_HTML) {
00202 $ret = html::error($ret);
00203 }
00204 return $ret;
00205 }
00206
00207
00208
00209
00210
00211
00212 public function persist() {
00213 if (!$this->is_empty()) {
00214 Session::push('status', $this);
00215 return true;
00216 }
00217 return false;
00218 }
00219
00220
00221
00222
00223
00224
00225 public static function restore() {
00226 $ret = false;
00227 if (Session::is_started()) {
00228 $ret = Session::pull('status');
00229 }
00230 return $ret;
00231 }
00232 }
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250 class Message extends Status {
00251 public function is_error() {
00252 return false;
00253 }
00254
00255 public function is_ok() {
00256 return true;
00257 }
00258
00259 public function render($policy = self::OUTPUT_HTML) {
00260 $ret = $this->to_string($policy);
00261 if ($policy == self::OUTPUT_HTML) {
00262 $ret = html::success($ret);
00263 }
00264 return $ret;
00265 }
00266
00267
00268
00269
00270
00271
00272
00273 public function is_message() {
00274 return true;
00275 }
00276 }