From 50535478f9081babc3e47531a2be3b1f3bbf3d3d Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@osticket.com> Date: Thu, 10 May 2012 15:21:43 -0400 Subject: [PATCH] Core osTicket loader - extends config + provides runtime obj store + logging facility. --- include/class.osticket.php | 210 +++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 include/class.osticket.php diff --git a/include/class.osticket.php b/include/class.osticket.php new file mode 100644 index 000000000..01e77b512 --- /dev/null +++ b/include/class.osticket.php @@ -0,0 +1,210 @@ +<?php +/************************************************************************* + class.osticket.php + + osTicket (sys) -> Config. + + Core osTicket object: extends congfig and provides loggging facility. + + Use osTicket::start(configId) + + Peter Rotich <peter@osticket.com> + Copyright (c) 2006-2012 osTicket + http://www.osticket.com + + Released under the GNU General Public License WITHOUT ANY WARRANTY. + See LICENSE.TXT for details. + + vim: expandtab sw=4 ts=4 sts=4: +**********************************************************************/ + +require_once(INCLUDE_DIR.'class.config.php'); //Config helper +define('LOG_WARN',LOG_WARNING); + +class osTicket extends Config { + + var $loglevel=array(1=>'Error','Warning','Debug'); + var $errors; + var $warning; + var $message; + + var $headers; + + var $session; + + function osTicket($id) { + parent::Config($id); + $this->session=osTicketSession::start(SESSION_TTL); // start_session + } + + function getSession() { + return $this->session; + } + + function addExtraHeader($header) { + $this->headers[md5($header)] = $header; + } + + function getExtraHeaders() { + return $this->headers; + } + + function getErrors() { + return $this->errors; + } + + function setErrors($errors) { + if(!is_array($errors)) + return $this->setError($errors); + + $this->errors = $errors; + } + + function getError() { + return $this->errors['err']; + } + + function setError($error) { + $this->errors['err'] = $error; + } + + function clearError() { + $this->setError(''); + } + + function getWarning() { + return $this->warning; + } + + function setWarning($warn) { + $this->warning = $warn; + } + + function clearWarning() { + $this->setWarning(''); + } + + + function getMessage() { + return $this->message; + } + + function setMessage($msg) { + $this->message = $msg; + } + + function clearMessage() { + $this->setMessage(''); + } + + + function alertAdmin($subject, $message, $log=false) { + + //Set admin's email address + if(!($to=$this->getAdminEmail())) + $to=ADMIN_EMAIL; + + //Try getting the alert email. + $email=null; + if(!($email=$this->getAlertEmail())) + $email=$this->getDefaultEmail(); //will take the default email. + + if($email) { + $email->send($to, $subject, $message); + } else {//no luck - try the system mail. + Email::sendmail($to, $subject, $message, sprintf('"osTicket Alerts"<%s>',$to)); + } + + //log the alert? Watch out for loops here. + if($log) + $this->log(LOG_CRIT, $subject, $message, false); //Log the entry...and make sure no alerts are resent. + + } + + function logDebug($title, $message, $alert=false) { + return $this->log(LOG_DEBUG, $title, $message, $alert); + } + + function logInfo($title, $message, $alert=false) { + return $this->log(LOG_INFO, $title, $message, $alert); + } + + function logWarning($title, $message, $alert=true) { + return $this->log(LOG_WARN, $title, $message, $alert); + } + + function logError($title, $error, $alert=true) { + return $this->log(LOG_ERR, $title, $error, $alert); + } + + function log($priority, $title, $message, $alert=false) { + + //We are providing only 3 levels of logs. Windows style. + switch($priority) { + case LOG_EMERG: + case LOG_ALERT: + case LOG_CRIT: + case LOG_ERR: + $level=1; //Error + break; + case LOG_WARN: + case LOG_WARNING: + $level=2; //Warning + break; + case LOG_NOTICE: + case LOG_INFO: + case LOG_DEBUG: + default: + $level=3; //Debug + } + + //Alert admin if enabled... + if($alert) + $this->alertAdmin($title, $message); + + + if($this->getLogLevel()<$level) + return false; + + //Save log based on system log level settings. + $loglevel=array(1=>'Error','Warning','Debug'); + $sql='INSERT INTO '.SYSLOG_TABLE.' SET created=NOW(), updated=NOW() '. + ',title='.db_input($title). + ',log_type='.db_input($loglevel[$level]). + ',log='.db_input($message). + ',ip_address='.db_input($_SERVER['REMOTE_ADDR']); + + mysql_query($sql); //don't use db_query to avoid possible loop. + + return true; + } + + function purgeLogs() { + + if(!($gp=$this->getLogGracePeriod()) || !is_numeric($gp)) + return false; + + //System logs + $sql='DELETE FROM '.SYSLOG_TABLE.' WHERE DATE_ADD(created, INTERVAL '.$gp.' MONTH)<=NOW()'; + db_query($sql); + + //TODO: Activity logs + + return true; + } + + /**** static functions ****/ + function start($configId) { + + if(!$configId || !($ost = new osTicket($configId)) || $ost->getId()!=$configId) + return null; + + //Set default time zone... user/staff settting will overwrite it (on login). + $_SESSION['TZ_OFFSET'] = $ost->getTZoffset(); + $_SESSION['TZ_DST'] = $ost->observeDaylightSaving(); + + return $ost; + } +} + +?> -- GitLab