[prev in list] [next in list] [prev in thread] [next in thread] 

List:       squirrelmail-cvs
Subject:    [SM-CVS] CVS: squirrelmail/class error.class.php,NONE,1.1
From:       Marc Groot Koerkamp <stekkel () users ! sourceforge ! net>
Date:       2005-07-28 21:03:02
Message-ID: E1DyFWw-00006g-OH () sc8-pr-cvs1 ! sourceforge ! net
[Download RAW message or body]

Update of /cvsroot/squirrelmail/squirrelmail/class
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv338/class

Added Files:
	error.class.php 
Log Message:
Introduce error handling



--- NEW FILE ---
<?php

/**

 * error.class.php

 *

 * Copyright (c) 2005 The SquirrelMail Project Team

 * Licensed under the GNU GPL. For full terms see the file COPYING.

 *

 * This contains the custom error handler for SquirrelMail.

 *

 * @version $Id: error.class.php,v 1.1 2005/07/28 21:03:00 stekkel Exp $

 * @package squirrelmail

 */



define('SQM_NOTICE',0);

define('SQM_WARNING',1);

define('SQM_ERROR',2);



/**

 * Error Handler class

 *

 * This class contains a custom error handler in order to display

 * user notices/warnings/errors and php notices and warnings in a template

 *

 * @author  Marc Groot Koerkamp

 * @package squirrelmail

 */

class ErrorHandler {



    /**

     * Constructor

     * @param  object $oTemplate Template object

     * @param  string $sTemplateFile Template containing the error template

     * @since 1.5.1

     */

    function ErrorHandler(&$oTemplate, $sTemplateFile) {

        $this->TemplateName = $sTemplateFile;

        $this->Template =& $oTemplate;

        $this->aErrors = array();

    }



    /**

     * Sets the error template

     * @since 1.5.1

     */

    function SetTemplateFile($sTemplateFile) {

        $this->TemplateFile = $sTemplateFile;

    }



    /**

     * Custom Error handler (set with set_error_handler() )

     * @private

     * @since 1.5.1

     */

    function SquirrelMailErrorhandler($iErrNo, $sErrStr, $sErrFile, $iErrLine, \
$aContext) {

        $aError = array(

                        'type'     => SQM_NOTICE,// Error type, notice, warning or \
fatal error;

                        'category' => NULL,      // SquirrelMail error category;

                        'message'  => NULL,      // Error display message;

                        'extra'    => NULL,      // Key value based array with extra \
error info;

                        'link'     => NULL,      // Link to help location;

                        'tip'      => NULL       // User tip.

                  );

        $iType = NULL;

        $aErrorCategory = array();

        /*

         * The following errors cannot be handled by a user defined error handler:

         * E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, \
E_COMPILE_WARNING

         */

        switch ($iErrNo) {

            case E_NOTICE:

                $iType = (is_null($iType)) ? SQM_NOTICE : $iType;

            case E_WARNING:

                $iType = (is_null($iType)) ? SQM_WARNING : $iType;

                $aErrorCategory[] = 'PHP';

                $aError['message'] = $sErrStr;

                $aError['extra'] = array(

                                          'FILE' => $sErrFile,

                                          'LINE' => $iErrLine) ;;

                // what todo with $aContext?

                break;

            case E_USER_ERROR:

                $iType = (is_null($iType)) ? SQM_ERROR : $iType;

            case E_USER_NOTICE:

                $iType = (is_null($iType)) ? SQM_NOTICE : $iType;

            case E_USER_WARNING:

                $iType = (is_null($iType)) ? SQM_WARNING : $iType;

                if ($sErrFile == __FILE__) { // Error is triggered in this file and \
probably by sqm_trigger_error

                    $aErrorTemp = @unserialize($sErrStr);

                    if (!is_array($aErrorTemp)) {

                        $aError['message'] = $sErrStr;

                        $aErrorCategory[] = 'UNDEFINED';

                    } else {

                        $aError = array_merge($aError,$aErrorTemp);

                        // special error handling below

                        if ($aError['category'] & SQM_ERROR_IMAP) {

                             $aErrorCategory[] = 'IMAP';

                             // imap related error handling inside

                        }

                        if ($aError['category'] & SQM_ERROR_FS) {

                             $aErrorCategory[] = 'FILESYSTEM';

                             // filesystem related error handling inside

                        }

                        if ($aError['category'] & SQM_ERROR_SMTP) {

                             $aErrorCategory[] = 'SMTP';

                             // smtp related error handling inside

                        }

                        if ($aError['category'] & SQM_ERROR_LDAP) {

                             $aErrorCategory[] = 'LDAP';

                             // ldap related error handling inside

                        }

                        if ($aError['category'] & SQM_ERROR_DB) {

                             $aErrorCategory[] = 'DATABASE';

                             // db related error handling inside

                        }

                        if ($aError['category'] & SQM_ERROR_PLUGIN) {

                             $aErrorCategory[] = 'PLUGIN';

                             do_hook_function('error_handler_plugin',$aError);

                             // plugin related error handling inside

                        }

                        //if ($aError['category'] & SQM_ERROR_X) {

                        //     $aErrorCategory[] = 'X';

                        // place holder for a new category

                        //}

                    }

                    unset($aErrorTemp);

                } else {

                    $aError['message'] = $sErrStr;

                    $aErrorCategory[] = 'SQM_NOTICE';

                }

                break;

            default: break;

        }

        $aErrorTpl = array(

                    'type'      => $iType,

                    'category'  => $aErrorCategory,

                    'message'   => $aError['message'],

                    'link'      => $aError['link'],

                    'tip'       => $aError['tip'],

                    'extra'     => $aError['extra']);

        // Add the notice/warning/error to the existing list of notices/warnings

        $this->aErrors[] = $aErrorTpl;

        $this->Template->assign('aErrors',$this->aErrors);

        // Show the error immediate in case of fatal errors

        if ($iType == SQM_ERROR) {

            $this->DisplayErrors();

            exit(_("Terminating SquirrelMail due to a fatal error"));

        }

    }



    /**

     * Display the error array in the error template

     * @return void

     * @since 1.5.1

     */

    function DisplayErrors() {

        if (count($this->aErrors)) {

            $this->Template->display($this->TemplateName);

        }

    }

}



/**

 * Custom Error handler for PHP version < 4.3.0 (set with set_error_handler() )

 * @author  Marc Groot Koerkamp

 * @since 1.5.1

 */

function SquirrelMailErrorhandler($iErrNo, $sErrStr, $sErrFile, $iErrLine, $aContext) \
{

    global $oTemplate;

    static $oErrorHandler;

    if (!isset($oErrorHandler)) {

        $oErrorHandler = new ErrorHandler($oTemplate,'error_message.tpl');

    }

    $oErrorHandler->SquirrelMailErrorhandler($iErrNo, $sErrStr, $sErrFile, $iErrLine, \
$aContext);

}



/**

 * Triggers an imap error. Utility function for sqm_trigger_error()

 * @param  integer $iErrNo error number defined in errors.php

 * @param  string $sRequest imap request string

 * @param  string $sResponse tagged imap response

 * @param  string $sMessage tagged imap response message

 * @param  array  $aExtra optional associative array with extra error info

 * @return void

 * @author  Marc Groot Koerkamp

 * @since 1.5.1

 */

function sqm_trigger_imap_error($iErrNo,$sRequest,$sResponse, $sMessage, \
$aExtra=array()) {

    $aError = array(

                    'REQUEST' => $sRequest,

                    'RESPONSE' => $sResponse,

                    'MESSAGE' => $sMessage);

    $aError = array_merge($aExtra,$aError);

    sqm_trigger_error($iErrNo,$aError);

}



/**

 * Trigger an error.

 * @param  integer $iErrNo error number defined in errors.php

 * @param  array   $aExtra optional associative array with extra error info

 * @return void

 * @author  Marc Groot Koerkamp

 * @since 1.5.1

 */

function sqm_trigger_error($iErrNo,$aExtra=array()) {

    // Include the error definition file.

    include_once(SM_PATH.'include/errors.php');

    $iPhpErr = E_USER_NOTICE;

    if (is_array($aErrors) && isset($aErrors[$iErrNo]['level'])) {

        if (is_array($aExtra) && count($aExtra)) {

            $aErrors[$iErrNo]['extra'] = $aExtra;

        }

        // because trigger_error can only handle a string argument for the error \
description

        // we serialize the result.

        $sErrString = serialize($aErrors[$iErrNo]);

        $iPhpErr = $aErrors[$iErrNo]['level'];

    } else {

        $sErrString = "Error number <$iErrNo> does not exist, fix the code or update \
the errors.php file";

        $iPhpErr = E_USER_ERROR;

    }

    trigger_error($sErrString, $iPhpErr);

}

?>


-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO September
19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
--
squirrelmail-cvs mailing list
List Address: squirrelmail-cvs@lists.sourceforge.net
List Info: https://lists.sourceforge.net/lists/listinfo/squirrelmail-cvs
http://squirrelmail.org/cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic