ssb             Mon Jan 29 16:55:27 2001 EDT

  Added files:                 
    /php4/pear/tests    pear_error3.phpt 

  Modified files:              
    /php4/pear  PEAR.php.in 
    /php4/pear/tests    pear_error.phpt 
  Log:
  @Added raiseError and setErrorHandling methods to PEAR class (Stig, PEAR)
  # This allows all objects to have their own default error handling
  # or use a global default.
  
  
Index: php4/pear/PEAR.php.in
diff -u php4/pear/PEAR.php.in:1.11 php4/pear/PEAR.php.in:1.12
--- php4/pear/PEAR.php.in:1.11  Tue Jan  9 17:01:52 2001
+++ php4/pear/PEAR.php.in       Mon Jan 29 16:55:27 2001
@@ -17,7 +17,7 @@
 // |          Stig Bakken <[EMAIL PROTECTED]>                                   |
 // +----------------------------------------------------------------------+
 //
-// $Id: PEAR.php.in,v 1.11 2001/01/10 01:01:52 ssb Exp $
+// $Id: PEAR.php.in,v 1.12 2001/01/30 00:55:27 ssb Exp $
 //
 
 define('PEAR_ERROR_RETURN', 1);
@@ -30,6 +30,9 @@
 define('PEAR_INSTALL_DIR', '@PEAR_INSTALLDIR@');
 define('PEAR_EXTENSION_DIR', '@EXTENSION_DIR@');
 
+$_PEAR_default_error_mode = PEAR_ERROR_RETURN;
+$_PEAR_default_error_options = E_USER_NOTICE;
+$_PEAR_default_error_callback = '';
 $_PEAR_destructor_object_list = array();
 
 //
@@ -60,6 +63,9 @@
        // {{{ properties
 
        var $_debug = false;
+    var $_default_error_mode = null;
+    var $_default_error_options = null;
+    var $_default_error_handler = '';
 
        // }}}
 
@@ -115,6 +121,124 @@
        }
 
     // }}}
+    // {{{ setErrorHandling()
+
+    /**
+     * Sets how errors generated by this DB object should be handled.
+     * Can be invoked both in objects and statically.  If called
+     * statically, setErrorHandling sets the default behaviour for all
+     * PEAR objects.  If called in an object, setErrorHandling sets
+     * the default behaviour for that object.
+     *
+     * @param $mode int
+     *        one of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
+     *        PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE or
+     *        PEAR_ERROR_CALLBACK.
+     *
+     * @param $options mixed
+     *        Ignored unless $mode is PEAR_ERROR_TRIGGER or
+     *        PEAR_ERROR_CALLBACK.  When $mode is PEAR_ERROR_TRIGGER,
+     *        this parameter is expected to be an integer and one of
+     *        E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR.  When
+     *        $mode is PEAR_ERROR_CALLBACK, this parameter is expected
+     *        to be the callback function or method.  A callback
+     *        function is a string with the name of the function, a
+     *        callback method is an array of two elements: the element
+     *        at index 0 is the object, and the element at index 1 is
+     *        the name of the method to call in the object.
+     *
+     * @see PEAR_ERROR_RETURN
+     * @see PEAR_ERROR_PRINT
+     * @see PEAR_ERROR_TRIGGER
+     * @see PEAR_ERROR_DIE
+     * @see PEAR_ERROR_CALLBACK
+     *
+     * @since PHP 4.0.5
+     */
+
+    function setErrorHandling($mode, $options = null)
+    {
+        if (isset($this)) {
+            $setmode = &$this->_default_error_mode;
+            $setoptions = &$this->_default_error_options;
+            $setcallback = &$this->_default_error_callback;
+        } else {
+            $setmode = &$GLOBALS['_PEAR_default_error_mode'];
+            $setoptions = &$GLOBALS['_PEAR_default_error_options'];
+            $setcallback = &$GLOBALS['_PEAR_default_error_callback'];
+        }
+
+        switch ($mode) {
+            case PEAR_ERROR_RETURN:
+            case PEAR_ERROR_PRINT:
+            case PEAR_ERROR_TRIGGER:
+            case PEAR_ERROR_DIE:
+            case null:
+                $setmode = $mode;
+                $setoptions = $options;
+                break;
+
+            case PEAR_ERROR_CALLBACK:
+                $setmode = $mode;
+                if (is_string($options) ||
+                    (is_array($options) && sizeof($options) == 2 &&
+                     is_object($options[0]) && is_string($options[1]))) {
+                    $setcallback = $options;
+                } else {
+                    trigger_error(E_USER_WARNING, "invalid error callback");
+                }
+                break;
+                    
+            default:
+                trigger_error(E_USER_WARNING, "invalid error mode");
+                break;
+        }
+    }
+
+    // }}}
+    // {{{ raiseError()
+
+    /**
+     * This method is called by DB to generate an error.
+     *
+     * @since PHP 4.0.5
+     */
+
+    function &raiseError($message = null, $code = null, $mode = null,
+                         $options = null, $userinfo = null)
+    {
+        if ($mode === null) {
+            $mode = $this->_default_error_mode;
+            if ($mode === null) {
+                $mode = $GLOBALS['_PEAR_default_error_mode'];
+            }
+        }
+
+        if ($mode == PEAR_ERROR_TRIGGER && $options === null) {
+            $options = $this->_default_error_options;
+            if ($options === null) {
+                $options = $GLOBALS['_PEAR_default_error_options'];
+            }
+        }
+
+        if ($mode == PEAR_ERROR_CALLBACK) {
+            if (!is_string($options) &&
+                !(is_array($options) && sizeof($options) == 2 &&
+                  is_object($options[0]) && is_string($options[1]))) {
+                $options = $this->_default_error_callback;
+                if ($options === null) {
+                    $options = $GLOBALS['_PEAR_default_error_callback'];
+                }
+            }
+        } else {
+            if ($options === null) {
+                $options = $this->_default_error_options;
+            }
+        }
+        return new PEAR_Error($message, $code, $mode, $options, $userinfo);
+    }
+
+    // }}}
 }
 
 // {{{ _PEAR_call_destructors()
@@ -176,11 +300,8 @@
         * @access public
         *
         */
-       function PEAR_Error($message = 'unknown error',
-                                               $code = 0,
-                                               $mode = null,
-                                               $options = null,
-                                               $debuginfo = null)
+       function PEAR_Error($message = "unknown error", $code = null,
+                        $mode = null, $options = null, $userinfo = null)
        {
                if ($mode === null) {
                        $mode = PEAR_ERROR_RETURN;
@@ -188,7 +309,7 @@
                $this->message   = $message;
                $this->code      = $code;
                $this->mode      = $mode;
-               $this->debuginfo = $debuginfo;
+               $this->userinfo = $userinfo;
                if ($mode & PEAR_ERROR_CALLBACK) {
                        $this->level = E_USER_NOTICE;
                        $this->callback = $options;
@@ -294,6 +415,20 @@
        }
 
     // }}}
+    // {{{ getUserInfo()
+
+       /**
+        * Get additional user-supplied information.
+        *
+        * @return string user-supplied information
+        * @access public
+        */
+       function getUserInfo ()
+       {
+               return $this->userinfo;
+       }
+
+    // }}}
     // {{{ getDebugInfo()
 
        /**
@@ -304,7 +439,7 @@
         */
        function getDebugInfo ()
        {
-               return $this->debuginfo;
+               return $this->getUserInfo();
        }
 
     // }}}
Index: php4/pear/tests/pear_error.phpt
diff -u php4/pear/tests/pear_error.phpt:1.4 php4/pear/tests/pear_error.phpt:1.5
--- php4/pear/tests/pear_error.phpt:1.4 Thu Dec  7 11:53:27 2000
+++ php4/pear/tests/pear_error.phpt     Mon Jan 29 16:55:27 2001
@@ -89,16 +89,16 @@
 mode=callback(function): errorhandler function called, obj=[pear_error: message="test 
error" code=-42 mode=callback callback=errorhandler prefix="" prepend="" append="" 
debug=""]
 mode=callback(method): errorhandler method called, obj=[pear_error: message="test 
error" code=-42 mode=callback callback=errorclass::errorhandler prefix="" prepend="" 
append="" debug=""]
 mode=print&trigger: test error<br>
-<b>Notice</b>:  test error in <b>PEAR.php</b> on line <b>206</b><br>
+<b>Notice</b>:  test error in <b>PEAR.php</b> on line <b>327</b><br>
 [pear_error: message="test error" code=-42 mode=print|trigger level=notice prefix="" 
prepend="" append="" debug=""]
 mode=trigger: <br>
-<b>Notice</b>:  test error in <b>PEAR.php</b> on line <b>206</b><br>
+<b>Notice</b>:  test error in <b>PEAR.php</b> on line <b>327</b><br>
 [pear_error: message="test error" code=-42 mode=trigger level=notice prefix="" 
prepend="" append="" debug=""]
 mode=trigger,level=notice: <br>
-<b>Notice</b>:  test error in <b>PEAR.php</b> on line <b>206</b><br>
+<b>Notice</b>:  test error in <b>PEAR.php</b> on line <b>327</b><br>
 [pear_error: message="test error" code=-42 mode=trigger level=notice prefix="" 
prepend="" append="" debug=""]
 mode=trigger,level=warning: <br>
-<b>Warning</b>:  test error in <b>PEAR.php</b> on line <b>206</b><br>
+<b>Warning</b>:  test error in <b>PEAR.php</b> on line <b>327</b><br>
 [pear_error: message="test error" code=-42 mode=trigger level=warning prefix="" 
prepend="" append="" debug=""]
 mode=trigger,level=error: <br>
-<b>Fatal error</b>:  test error in <b>PEAR.php</b> on line <b>206</b><br>
+<b>Fatal error</b>:  test error in <b>PEAR.php</b> on line <b>327</b><br>

Index: php4/pear/tests/pear_error3.phpt
+++ php4/pear/tests/pear_error3.phpt
--TEST--
PEAR default error handling
--FILE--
<?php // -*- C++ -*-

// Test for: PEAR.php
// Parts tested: - PEAR_Error class
//               - PEAR::setErrorHandling
//               - PEAR::raiseError method

require_once "PEAR.php";

error_reporting(4095);

function errorhandler($eobj)
{
    if (PEAR::isError($eobj)) {
        print "errorhandler called with an error object.\n";
        print "error message: ".$eobj->getMessage()."\n";
    } else {
        print "errorhandler called, but without an error object.\n";
    }
}

$obj = new PEAR;
$obj->setErrorHandling(PEAR_ERROR_PRINT);
$obj->raiseError("error 1\n");
$obj->setErrorHandling(null);
$obj->raiseError("error 2\n");
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, "errorhandler");
$obj->raiseError("error 3\n");
$obj->setErrorHandling(PEAR_ERROR_PRINT);
$obj->raiseError("error 4\n");

?>
--EXPECT--
error 1
errorhandler called with an error object.
error message: error 3
error 4

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to