// Copyright: Copyright (C) 2002-2013 Pristine Communications // Set the include path if (!defined("INCPATH_SET")) { require_once dirname(__FILE__) . "/incpath.inc.php"; } // Referenced subroutines require_once "monica/cgiemu.inc.php"; require_once "monica/login.inc.php"; require_once "monica/requri.inc.php"; // Settings if (!defined("_ACTLOG_DONE_FINDING")) { _actlog_find_actlog_txt(); define("_ACTLOG_DONE_FINDING", true); } // actlog: Log an activity function actlog($message, $user = null) { // ACTLOG must be defined first if (!defined("ACTLOG")) { trigger_error("Activity log actlog.txt not found", E_USER_ERROR); } $date = date("Y-m-d H:i:s O"); $script = REQUEST_PATH; $remote = $_SERVER["REMOTE_ADDR"]; if (is_null($user)) { $user = get_login_id(); if (is_null($user)) { $user = "anonymous"; } } // Escape control characters for safety $message = str_replace("\t", "\\t", $message); $message = str_replace("\r", "\\r", $message); $message = str_replace("\n", "\\n", $message); $message = preg_replace_callback("/([\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F])/", function ($matches) { return sprintf("\\x%02x", ord($matches[1])); }, $message); $fp = fopen(ACTLOG, "a"); flock($fp, LOCK_EX); fwrite($fp, "[$date] $script: ($user from $remote) $message\n"); flock($fp, LOCK_UN); fclose($fp); return; } // _actlog_find_actlog_txt: Find the activity log file function _actlog_find_actlog_txt() { // It is set if (defined("ACTLOG")) { return; } // The file location candidates $cands = array(); if (defined("PACKAGE")) { $cands[] = "/var/log/apache2/" . PACKAGE . "/actlog.txt"; } $cands[] = "/var/log/apache2/actlog.txt"; // Find the first available one $actlog = null; foreach ($cands as $file) { if (file_exists($file) && is_file($file) && is_writable($file)) { $actlog = $file; break; } } if (!is_null($actlog)) { define("ACTLOG", $actlog); } return; } ?>