class_logging.inc 3.86 KiB
<?php
/*
  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
  Copyright (C) 2007  Fabian Hickert
  Copyright (C) 2011-2016  FusionDirectory
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License 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.
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
/*!
 * \file class_log.inc
 * Source code for the class log
/*!
 * \brief This is the base class for the FusionDirectory logging functionality.
 * All logging should lead to this class.
 * \author  Fabian Hickert <hickert@gonicus.de>
 * \version 2.6
 * \date    11.04.2007
class logging {
  static $validActions = array('modify','create','remove','copy','snapshot','view','security','debug');
  /*!
   * \brief logging method
   * \param $action         One of these values (modify|create|remove|snapshot|copy)
   * \param $objecttype     represents the current edited objecttype, like user/user
   * \param $object         represents the current edited object dn
   * \param $changes_array  An array containing names of all touched attributes
   * \param $result         A status message, containing errors or success messages
  static function log ($action, $objecttype, $object, $changes_array = array(), $result = '')
    global $config, $ui;
    if (!is_array($changes_array)) {
      trigger_error('log(string,string,string,array(),bool). Forth parameter must be an array.');
      $changes_array = array();
    /* Create data object */
    $entry = array(
      'timestamp'   => time(),
      'action'      => $action,
      'objecttype'  => $objecttype,
      'object'      => $object,
      'changes'     => implode(',', $changes_array),
      'result'      => $result
    if (isset($ui->dn) && !empty($ui->dn)) {
      $entry['user']  = $ui->dn;
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
} else { $entry['user'] = 'unknown'; } /* Check if all given values are valid */ $msgs = static::check($entry); if (count($msgs)) { foreach ($msgs as $msg) { trigger_error('Logging failed, reason was: '.$msg); msg_dialog::display(_('Internal error'), sprintf(_('Logging failed: %s'), $msg), ERROR_DIALOG); } } else { if (is_object($config) && preg_match('/true/i', $config->get_cfg_value('logging', ''))) { static::log_into_syslog($entry); } } } /*! * \brief Check the options * * \param Array $entry to be checked */ static protected function check($entry = array()) { $msgs = array(); if (!isset($entry['action']) || !in_array($entry['action'], static::$validActions)) { $msgs[] = sprintf(_('Invalid option "%s" specified!'), $entry['action']); } if (!isset($entry['objecttype']) || empty($entry['objecttype'])) { $msgs[] = _('Specified objectType is empty or invalid!'); } return $msgs; } /* * \brief This function is used to into the systems syslog * * \param Array $entry Entry to be loged */ static function protected log_into_syslog($entry) { $str = ''; if (empty($entry['object']) && empty($entry['changes'])) { $str = '('.$entry['action'].') '.$entry['objecttype'].': '.$entry['result']; } else { $str = '('.$entry['action'].') '.$entry['object'].' of type '.$entry['objecttype'].' '.$entry['changes'].': '.$entry['result']; } fusiondirectory_log($str); } } ?>