root/trunk/lib/SGL/Error.php

Revision 3125, 6.5 kB (checked in by demian, 3 weeks ago)

bugfix to trunk merge -3

  • Property svn:eol-style set to native
Line 
1 <?php
2 /* Reminder: always indent with 4 spaces (no tabs). */
3 // +---------------------------------------------------------------------------+
4 // | Copyright (c) 2006, Demian Turner                                         |
5 // | All rights reserved.                                                      |
6 // |                                                                           |
7 // | Redistribution and use in source and binary forms, with or without        |
8 // | modification, are permitted provided that the following conditions        |
9 // | are met:                                                                  |
10 // |                                                                           |
11 // | o Redistributions of source code must retain the above copyright          |
12 // |   notice, this list of conditions and the following disclaimer.           |
13 // | o Redistributions in binary form must reproduce the above copyright       |
14 // |   notice, this list of conditions and the following disclaimer in the     |
15 // |   documentation and/or other materials provided with the distribution.    |
16 // | o The names of the authors may not be used to endorse or promote          |
17 // |   products derived from this software without specific prior written      |
18 // |   permission.                                                             |
19 // |                                                                           |
20 // | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       |
21 // | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT         |
22 // | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR     |
23 // | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT      |
24 // | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     |
25 // | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT          |
26 // | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     |
27 // | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     |
28 // | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT       |
29 // | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE     |
30 // | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.      |
31 // |                                                                           |
32 // +---------------------------------------------------------------------------+
33 // | Seagull 0.6                                                               |
34 // +---------------------------------------------------------------------------+
35 // | Error.php                                                                 |
36 // +---------------------------------------------------------------------------+
37 // | Author:   Demian Turner <demian@phpkitchen.com>                           |
38 // +---------------------------------------------------------------------------+
39
40 /**
41  * Provides error handling methods.
42  *
43  * @package SGL
44  * @author  Demian Turner <demian@phpkitchen.com>
45  */
46 class SGL_Error
47 {
48     /**
49      * Returns true if one or more PEAR errors exist on the global stack.
50      *
51      * @return boolean
52      */
53     function count()
54     {
55         return count($GLOBALS['_SGL']['ERRORS']);
56     }
57
58     /**
59      * Pushes an error onto stack.
60      *
61      * @param PEAR_Error $oError
62      * @return integer   Returns the new number of elements in the array.
63      */
64     function push($oError)
65     {
66         return array_push($GLOBALS['_SGL']['ERRORS'], $oError);
67     }
68
69     /**
70      * Pops last error off stack.
71      *
72      * @return PEAR_Error
73      */
74     function pop()
75     {
76         return array_pop($GLOBALS['_SGL']['ERRORS']);
77     }
78
79     /**
80      * Remove first error off stack.
81      *
82      * @return PEAR_Error
83      */
84     function shift()
85     {
86         return array_shift($GLOBALS['_SGL']['ERRORS']);
87     }
88
89     function getLast()
90     {
91         return end($GLOBALS['_SGL']['ERRORS']);
92     }
93
94     /**
95      * Reset error stack to empty array.
96      *
97      * @return boolean
98      */
99     function reset()
100     {
101         unset($GLOBALS['_SGL']['ERRORS']);
102         $GLOBALS['_SGL']['ERRORS'] = array();
103         return true;
104     }
105
106     function toString($oError)
107     {
108         $message = $oError->getMessage();
109         $debugInfo = $oError->getDebugInfo();
110         $level = $oError->getCode();
111         $errorType = SGL_Error::constantToString($level);
112         $output = <<<EOF
113   <strong>MESSAGE</strong>: $message<br />
114   <strong>TYPE:</strong> $errorType<br />
115   <strong>DEBUG INFO:</strong> $debugInfo<br />
116   <strong>CODE:</strong> $level<br />
117 EOF;
118         return $output;
119     }
120
121     /**
122      * Converts error constants into equivalent strings.
123      *
124      * @access  public
125      * @param   int     $errorCode  error code
126      * @return  string              text representing error type
127      */
128     function constantToString($errorCode)
129     {
130         $aErrorCodes = array(
131             SGL_ERROR_INVALIDARGS       => 'invalid arguments',
132             SGL_ERROR_INVALIDCONFIG     => 'invalid config',
133             SGL_ERROR_NODATA            => 'no data',
134             SGL_ERROR_NOCLASS           => 'no class',
135             SGL_ERROR_NOMETHOD          => 'no method',
136             SGL_ERROR_NOAFFECTEDROWS    => 'no affected rows',
137             SGL_ERROR_NOTSUPPORTED      => 'not supported',
138             SGL_ERROR_INVALIDCALL       => 'invalid call',
139             SGL_ERROR_INVALIDAUTH       => 'invalid auth',
140             SGL_ERROR_EMAILFAILURE      => 'email failure',
141             SGL_ERROR_DBFAILURE         => 'db failure',
142             SGL_ERROR_DBTRANSACTIONFAILURE => 'db transaction failure',
143             SGL_ERROR_BANNEDUSER        => 'banned user',
144             SGL_ERROR_NOFILE            => 'no file',
145             SGL_ERROR_INVALIDFILEPERMS  => 'invalid file perms',
146             SGL_ERROR_INVALIDSESSION    => 'invalid session',
147             SGL_ERROR_INVALIDPOST       => 'invalid post',
148             SGL_ERROR_INVALIDTRANSLATION => 'invalid translation',
149             SGL_ERROR_FILEUNWRITABLE    => 'file unwritable',
150             SGL_ERROR_INVALIDREQUEST    => 'invalid request',
151             SGL_ERROR_INVALIDTYPE       => 'invalid type',
152             SGL_ERROR_RECURSION         => 'recursion',
153             SGL_ERROR_RESOURCENOTFOUND  => 'page not found',
154         );
155         if (in_array($errorCode, array_keys($aErrorCodes))) {
156             return strtoupper($aErrorCodes[$errorCode]);
157
158         //  if not within this range, most likely a PEAR::DB error
159         } else {
160             return 'PEAR';
161         }
162     }
163 }
164 ?>
Note: See TracBrowser for help on using the browser.