Xaraya / Postnuke CVS Notices - Message

Note: this list is kept only as a demonstration for CVSNotice. For the latest CVS notices, see the Xaraya and Postnuke sites

View Statistics - Next Notice - Previous Notice

Directory filter : [ all ] / postnuke_official / html / includes [ view in CVS ]

Date Directory [filter] File(s) [view] Author [filter]
17 Aug 2002 00:26:15postnuke_official/html/includespnEvt.php,NONE,1.1 pnLog.php,NONE,1.1Marco Canini
 Event Messanging System

Update of /home/cvsroot/postnuke_official/html/includes
In directory ns7.hostnuke.net:/tmp/cvs-serv11571

Added Files:
	pnEvt.php pnLog.php 
Log Message:
Event Messanging System
Log Facilities
I won't commit my modified version of pnAPI.php since I don't get this new installer working for them.
So they're here just to let you have an overview of how things will work.


--- NEW FILE: pnEvt.php ---
<?php
// File: $Id: pnEvt.php,v 1.1 2002/08/17 00:26:13 marco Exp $
// ----------------------------------------------------------------------
// PostNuke Content Management System
// Copyright (C) 2001 by the PostNuke Development Team.
// http://www.postnuke.com/
// ----------------------------------------------------------------------
// LICENSE
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License (GPL)
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// To read the license please visit http://www.gnu.org/copyleft/gpl.html
// ----------------------------------------------------------------------
// Original Author of file: Marco Canini
// Purpose of file: Event Messanging System
// ----------------------------------------------------------------------

function pnEvtInit()
{
    global $pnEvt_Subscribed;
    if (!is_array($pnEvt_Subscribed)) {
        $pnEvt_Subscribed = array();
    }
    return true;
}

function pnEvt_notify($modname, $modtype, $event, $value)
{
    pnLogMessage("pnEvt_notify: notifying event $event to $modname:$modtype");

    pnModFunc($modname, $modtype, '_On'.$event, array('value'=>$value));
    if (pnExceptionMajor() != PN_NO_EXCEPTION) {
        if (pnExceptionId() == 'MODULE_FUNCTION_NOT_EXIST') {
            pnExceptionFree();
        } else {
            return; // throw back
        }
    }
    pnModFunc($modname, $modtype, '_OnEvent', array('event'=>$event, 'value'=>$value));
    if (pnExceptionMajor() != PN_NO_EXCEPTION) {
        if (pnExceptionId() == 'MODULE_FUNCTION_NOT_EXIST') {
            pnExceptionFree();
        } else {
            return; // throw back
        }
    }
}

function pnEvtFire($event, $value = NULL)
{
    global $pnEvt_Subscribed;
    if (!isset($pnEvt_Subscribed[$event])) return;

    for ($i = 0; $i < count($pnEvt_Subscribed[$event]); $i++) {
        $callback = $pnEvt_Subscribed[$event][$i];
        if (is_array($callback)) {
            list($modname, $modtype) = $callback;
            pnLogMessage("pnEvtFire: firing event $event to $modname:$modtype");

            pnModFunc($modname, $modtype, '_On'.$event, array('value'=>$value));
            if (pnExceptionMajor() != PN_NO_EXCEPTION) {
                if (pnExceptionId() == 'MODULE_FUNCTION_NOT_EXIST') {
                    pnExceptionFree();
                } else {
                    return; // throw back
                }
            }
            pnModFunc($modname, $modtype, '_OnEvent', array('event'=>$event, 'value'=>$value));
            if (pnExceptionMajor() != PN_NO_EXCEPTION) {
                return; // throw back
            }
        } else {
            // Raw callback
            if (function_exists($callback)) {
                $callback($value);
            }
        }
    }
    
}

function pnEvt_subscribeRawCallback($event, $callback)
{
    global $pnEvt_Subscribed;
    if (!pnEvt_checkEvent($event)) {
        $msg = pnML('Unknown event.');
        pnExceptionSet(PN_SYSTEM_EXCEPTION, 'UNKNOWN',
                       new SystemException(__FILE__.'('.__LINE__.'): '.$msg));
        return;
    }

    $pnEvt_Subscribed[$event][] = $callback;
}

function pnEvtSubscribe($event, $modname, $modtype)
{
    global $pnEvt_Subscribed;
    if (!pnEvt_checkEvent($event)) {
        $msg = pnML('Unknown event.');
        pnExceptionSet(PN_SYSTEM_EXCEPTION, 'UNKNOWN',
                       new SystemException(__FILE__.'('.__LINE__.'): '.$msg));
        return;
    }

    $pnEvt_Subscribed[$event][] = array($modname, $modtype);
}

function pnEvtUnsubscribe($event, $modname, $modtype)
{
    global $pnEvt_Subscribed;
    if (!isset($pnEvt_Subscribed[$event])) return;

    for ($i = 0; $i < count($pnEvt_Subscribed[$event]); $i++) {
        list($mn, $mt) = $pnEvt_Subscribed[$event][$i];
        if ($modname == $mn && $modtype == $mt) {
            unset($pnEvt_Subscribed[$event][$i]);
            break;
        }
    }
}

function pnEvt_checkEvent($event)
{
    switch ($event) {
        case 'LoadModule':
        case 'PostBodyStart':
        case 'PreBodyEnd':
        case 'MissingTranslationString':
        case 'MissingTranslationKey':
        case 'MissingTranslationContext':
            return true;
    }
    return false;
}

?>

--- NEW FILE: pnLog.php ---
<?php
// File: $Id: pnLog.php,v 1.1 2002/08/17 00:26:13 marco Exp $
// ----------------------------------------------------------------------
// PostNuke Content Management System
// Copyright (C) 2001 by the PostNuke Development Team.
// http://www.postnuke.com/
// ----------------------------------------------------------------------
// LICENSE
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License (GPL)
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// To read the license please visit http://www.gnu.org/copyleft/gpl.html
// ----------------------------------------------------------------------
// Original Author of file: Marco Canini
// Purpose of file: Logging Facilities
// ----------------------------------------------------------------------

// TODO: <marco>
// When calendar & pnLocaleFormatDate is done complete simple logger
// and html logger
// When pnMail is done do email logger

define('PNLOG_LEVEL_DEBUG', 1);
define('PNLOG_LEVEL_NOTICE', 2);
define('PNLOG_LEVEL_WARNING', 4);
define('PNLOG_LEVEL_ERROR', 8);

function pnLogInit()
{
    global $pnLog_Logger, $pnLog_Level;

    $loggerName = pnConfigGetVar('Site.Logger');
    $args = pnConfigGetVar('Site.Logger.Args'); // Yet an array
    switch ($loggerName) {
        case 'dummy':
            $pnLog_Logger = new pnLog_Logger($args);
            break;
        case 'simple':
            $pnLog_Logger = new pnLog_SimpleLogger($args);
            break;
        case 'html':
            $pnLog_Logger = new pnLog_HTMLLogger($args);
            break;
        case 'javascript':
            $pnLog_Logger = new pnLog_JavaScriptLogger($args);
            break;
        case 'email':
            $pnLog_Logger = new pnLog_EmailLogger($args);
            break;
        default:
            die('Unknown logger: '.$loggerName);
    }
    $pnLog_Level = pnConfigGetVar('Site.Logger.Level');

    return true;
}

function pnLogGetLevel()
{
    global $pnLog_Level;
    return $pnLog_Level;
}

// TODO: <marco> Move to logger module
/*
function logger_adminapi_getLogLevelInfo($level)
{
    switch ($level) {
        case PNLOG_LEVEL_DEBUG:
            $name = pnML('Debug level');
            $description = pnML('Logs everuthing.');
            break;
        case PNLOG_LEVEL_NOTICE:
            $name = pnML('Notice level');
            $description = pnML('Logs all except debugging messages.');
            break;
        case PNLOG_LEVEL_WARNING:
            $name = pnML('Warning level');
            $description = pnML('Logs only warning and errors.');
            break;
        case PNLOG_LEVEL_ERROR:
            $name = pnML('Error level');
            $description = pnML('Logs only errors.');
            break;
    }
    return array('name'=>$name, 'description'=>$description);
}
*/
// TODO: <marco> Move to logger module
/*
function logger_adminapi_listLoggers()
{
    $dummy = array('id' => 'dummy',
                   'name' => 'Dummy logger',
                   'description' => pnML('Doesn\'t log anything.'));
    $simple = array('id' => 'simple',
                    'name' => 'Simple logger',
                    'description' => pnML('Logs in a file in plain text.'));
    $html = array('id' => 'html',
                  'name' => 'Html logger',
                  'description' => pnML('Logs in a file in html.'));
    $javascript = array('id' => 'javascript',
                        'name' => 'JavaScript logger',
                        'description' => pnML('Logs into a browser window (useful for debug).'));
    $email = array('id' => 'email',
                   'name' => 'Email logger',
                   'description' => pnML('Logs as plain text and send it as an email message.'));
    return array($dummy, $simple, $html, $javascript, $email);
}
*/

/**
 * Converts a string in the form key1=value1;key2=value2 to an
 * array in the form ('key1'=>'value1', 'key2'=>'value2')
 */
function pnLog_parseArgsString($string)
{
    $args = array();
    $tmp = explode(';', $string);
    foreach($tmp as $param) {
        list($k, $v) = explode('=', $param);
        $k = trim($k);
        $v = trim($v);
        $args[$k] = $v;
    }
    return $args;
}

function pnLogMessage($msg, $level = PNLOG_LEVEL_DEBUG)
{
    global $pnLog_Logger, $pnLog_Level, $pnDebug;
    if ($pnLog_Level > $level ||
       ($level == PNLOG_LEVEL_DEBUG && ($pnDebug & PNDBG_ACTIVE) == 0)) return;
    $pnLog_Logger->logMessage($msg);
}

function pnLogException($level = PNLOG_LEVEL_DEBUG)
{
    global $pnLog_Logger, $pnLog_Level, $pnDebug;
    if ($pnLog_Level > $level ||
       ($level == PNLOG_LEVEL_DEBUG && ($pnDebug & PNDBG_ACTIVE) == 0)) return;
    $pnLog_Logger->logException();
}

function pnLogVariable($name, $var, $level = PNLOG_LEVEL_DEBUG)
{
    global $pnLog_Logger, $pnLog_Level, $pnDebug;
    if ($pnLog_Level > $level ||
       ($level == PNLOG_LEVEL_DEBUG && ($pnDebug & PNDBG_ACTIVE) == 0)) return;
    $pnLog_Logger->logVariable($name, $var);
}

class pnLog_Logger
{
    // private
    var $depth = 0;
    var $format = 'text';

    function pnLog_Logger($args)
    { /* nothing do do */ }

    function logMessage($msg, $callPrepForDisplay = true)
    { /* nothing do do */ }

    function logException()
    {
        $msg = pnExceptionRender($this->format);
        $this->logMessage($msg, false);
    }

    function logVariable($name, $var)
    {
        $msg = $this->dumpVariable($var, $name);
        $this->logMessage($msg);
    }

    /**
     * @access protected
     */
    function setFormat($format)
    {
        $this->format = $format;
    }

    /**
     * @access protected
     */
    function formatLevel()
    {
        global $pnLog_Level;
        switch ($pnLog_Level) {
            case PNLOG_LEVEL_DEBUG:
                return 'DEBUG';
            case PNLOG_LEVEL_NOTICE:
                return 'NOTICE';
            case PNLOG_LEVEL_WARNING:
                return 'WARNING';
            case PNLOG_LEVEL_ERROR:
                return 'ERROR';
        }
    }

    /**
     * @access protected
     */
    function getTimestamp()
    {
        // TODO: <marco> Use formatDate here
        return date('Y-m-d H:i:s');
    }

    /**
     * @access protected
     */
    function dumpVariable($var, $name = NULL, $classname = NULL)
    {
        if ($this->depth > 32) { 
            return pnML('Recursive Depth Exceeded');
        }

        if ($this->depth == 0) {
            $blank = '';
        } else {
            $blank = str_repeat(' ', $this->depth);
        }
        $this->depth += 1;

        $TYPE_COLOR = "red";
        $NAME_COLOR = "blue";
        $VALUE_COLOR = "purple";

        $str = '';

        if (isset($name)) {
            if ($this->format == 'html') {
                $str = "<font color=\"$NAME_COLOR\">".$blank.'Variable name: <b>'.
                       htmlspecialchars($name).'</b></font><br/>';
            } else {
                $str = $blank."Variable name: $name\n";
            }
        }

        $type = gettype($var);
        if (is_object($var)) {
            $str = $this->dumpVariable(get_object_vars($var), $name, get_class($var));
        } elseif (is_array($var)) {

            if (isset($classname)) {
                $type = 'class';
            } else {
                $type = 'array';
            }

            if ($this->format == 'html') {
                $str .= "<font color=\"$TYPE_COLOR\">".$blank."Variable type: $type</font><br/>";
            } else {
                $str .= $blank."Variable type: $type\n";
            }

            if ($this->format == 'html') {
                $str .= '{<br/><ul>';
            } else {
                $str .= $blank."{\n";
            }

            foreach($var as $key => $val) {
                $str .= $this->dumpVariable($val, $key);
            }

            if ($this->format == 'html') {
                $str .= '</ul>}<br/><br/>';
            } else {
                $str .= $blank."}\n\n";
            }
        } else {
            if ($var === NULL) {
                $var = 'NULL';
            } else if ($var === false) {
                $var = 'false';
            } else if ($var === true) {
                $var = 'true';
            }
            if ($this->format == 'html') {
                $str .= "<font color=\"$TYPE_COLOR\">".$blank."Variable type: $type</font><br/>";
                $str .= "<font color=\"$VALUE_COLOR\">".$blank.'Variable value: "'.
                       htmlspecialchars($var).'"</font><br/><br/>';
            } else {
                $str .= $blank."Variable type: $type\n";
                $str .= $blank."Variable value: \"$var\"\n\n";
            }
        }

        $this->depth -= 1;
        return $str;
    }

}

// Implements a concrete logger, the most simple text based file logger.
class pnLog_SimpleLogger extends pnLog_Logger
{
    var $filename;

    function pnLog_SimpleLogger($args)
    {
        // TODO: <marco> Base filename & one log file per month or per week
        $this->filename = $args['filename'];
    }

    function logMessage($msg, $callPrepForDisplay = true)
    {
        if (!($fd = @fopen($this->filename, 'a'))) return;
        $ts = $this->getTimestamp();
        $str = $ts . ' - ';
        $blanklen = strlen($str);
        $str .= '('.$this->formatLevel().') ';
        $str .= $this->formatString($msg, $blanklen);
        $str .= "\n";
        fwrite($fd, $str);
        fclose($fd);
    }

    /**
     * @access protected
     */
    function formatString($string, $blanklen)
    {
        $break = "\n".str_repeat(' ', $blanklen);
        $rows = explode("\n", $string);
        foreach($rows as $row) {
            $newrows[] = wordwrap($row, 79 - $blanklen, $break, 1);
        }
        return join($break, $newrows);
    }
}

class pnLog_HTMLLogger extends pnLog_Logger
{
    var $filename;

    function pnLog_HTMLLogger($args)
    {
        // TODO: <marco> Base filename & one log file per month or per week
        $this->filename = $args['filename'];

        if (file_exists($this->filename) ||
            !($fd = @fopen($this->filename, 'a'))) return;
        $str = "<html><head><title>PostNuke HTML Logger</title></head><body>";
        fwrite($fd, $str);
        fclose($fd);
    }

    function logMessage($msg, $callPrepForDisplay = true)
    {
        if (!($fd = @fopen($this->filename, 'a'))) return;
        $str = $this->getTimestamp().' - ('.$this->formatLevel().')<br/>';
        if ($callPrepForDisplay) {
            $msg = pnVarPrepForDisplay($msg);
        }
        $str .= nl2br($msg).'<br/>';
        fwrite($fd, $str);
        fclose($fd);
    }

}

function pnLog_JavaScriptLogger_OnPostBodyStart($value)
{
    // This function is called whenever the <body> tag has being sent to the browser
    global $pnLog_Logger;
    echo $pnLog_Logger->getWindowLoaderScript();
}

function pnLog_JavaScriptLogger_OnPreBodyEnd($value)
{
    // This function is called whenever the </body> tag is going to be sent to the browser
    global $pnLog_Logger;
    echo $pnLog_Logger->getBuffer();
}

class pnLog_JavaScriptLogger extends pnLog_Logger
{
    var $buffer = '';

    function pnLog_JavaScriptLogger($args)
    {
        // Register proper callback functions at EMS
        pnEvt_subscribeRawCallback('PostBodyStart', 'pnLog_JavaScriptLogger_OnPostBodyStart');
        pnEvt_subscribeRawCallback('PreBodyEnd', 'pnLog_JavaScriptLogger_OnPreBodyEnd');
        // Set the HTML format
        $this->setFormat('html');
    }

    function getWindowLoaderScript()
    {
        $header = "<table size=\\\"100%\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr><td>".
                  "<hr size=\\\"1\\\">PostNuke Javascript Logger</hr></td><td width=\\\"1%\\\"><font face=\\\"Verdana,arial\\\" size=\\\"1\\\">".
                  date("Y-m-d H:i:s").
                  "</font></td></tr></table>";

        $str = "<script language=\"javascript\">\n".
               "debugWindow = window.open(\"PostNuke Javascript Logger\",\"PostNuke Javascript Logger\",\"width=450,height=500,scrollbars=yes,resizable=yes\");\n".
               "if (debugWindow) {\n".
               "    debugWindow.focus();\n".
               "    debugWindow.document.write(\"".$header."\"+'<p><b>'+window.location.href+'</b></p>');\n".
               "}\n".
               "</script>\n";
        return $str;
    }

    function getBuffer()
    {
        $str = "<script language=\"javascript\">\n".
               "if (debugWindow) {\n".
               $this->buffer.
               "    debugWindow.scrollBy(0,100000);\n".
               "}\n".
               "</script>\n";
        return $str;
    }

    function logMessage($msg, $callPrepForDisplay = true)
    {
        $str = "    debugWindow.document.write(\"".$this->getTimestamp().
               ' - ('.$this->formatLevel().')<br/>';
        if ($callPrepForDisplay) {
            $msg = pnVarPrepForDisplay($msg);
        }
        $str .= nl2br(addslashes($msg))."<br/>\");\n";
        $this->buffer .= $str;
    }

}

class pnLog_EmailLogger extends pnLog_Logger
{
    function pnLog_EmailLogger($args)
    { die('TODO'); }

    function logMessage($msg, $callPrepForDisplay = true)
    { die('TODO'); }

    function logException()
    { die('TODO'); }

    function logVariable($name, $var)
    { die('TODO'); }

}

?>


Directory filter : [ all ] / postnuke_official / html / includes [ view in CVS ]

View Statistics - Next Notice - Previous Notice


Visit Developer Site - Browse CVS Repository Syndicate via backend.rss
(max. once per hour please)
Powered by CVSNotice 0.1.3