app.inc.php 6.16 KB
Newer Older
tbrehm's avatar
tbrehm committed
1
<?php
redray's avatar
redray committed
2

tbrehm's avatar
tbrehm committed
3
/*
redray's avatar
redray committed
4
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
tbrehm's avatar
tbrehm committed
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

31 32 33
//* Set timezone
if(isset($conf['timezone']) && $conf['timezone'] != '') date_default_timezone_set($conf['timezone']);

tbrehm's avatar
tbrehm committed
34
class app {
35

jwarnier's avatar
jwarnier committed
36 37
	var $loaded_modules = array();
	var $loaded_plugins = array();
38
	var $_calling_script = '';
39

40
	function __construct() {
tbrehm's avatar
tbrehm committed
41

42 43 44 45 46
		global $conf;

		if($conf['start_db'] == true) {
			$this->load('db_'.$conf['db_type']);
			$this->db = new db;
tbrehm's avatar
tbrehm committed
47

48 49
			/*
					Initialize the connection to the master DB,
50 51
					if we are in a multiserver setup
					*/
tbrehm's avatar
tbrehm committed
52

53
			if($conf['dbmaster_host'] != '' && ($conf['dbmaster_host'] != $conf['db_host'] || ($conf['dbmaster_host'] == $conf['db_host'] && $conf['dbmaster_database'] != $conf['db_database']))) {
54
				$this->dbmaster = new db($conf['dbmaster_host'], $conf['dbmaster_user'], $conf['dbmaster_password'], $conf['dbmaster_database'], $conf['dbmaster_port'], $conf['dbmaster_client_flags']);
55 56 57
			} else {
				$this->dbmaster = $this->db;
			}
tbrehm's avatar
tbrehm committed
58

59 60 61 62 63

		}

	}

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
	function setCaller($caller) {
		$this->_calling_script = $caller;
	}
	
	function getCaller() {
		return $this->_calling_script;
	}
	
	function forceErrorExit($errmsg = 'undefined') {
		global $conf;
		
		if($this->_calling_script == 'server') {
			@unlink($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock');
		}
		die('Exiting because of error: ' . $errmsg);
	}

81
	function uses($classes) {
jwarnier's avatar
jwarnier committed
82 83 84

		global $conf;

85
		$cl = explode(',', $classes);
jwarnier's avatar
jwarnier committed
86 87 88
		if(is_array($cl)) {
			foreach($cl as $classname) {
				if(!@is_object($this->$classname)) {
89
					if(is_file($conf['classpath'].'/'.$classname.'.inc.php') && (DEVSYSTEM ||  !is_link($conf['classpath'].'/'.$classname.'.inc.php'))) {
90
						include_once $conf['classpath'].'/'.$classname.'.inc.php';
jwarnier's avatar
jwarnier committed
91
						$this->$classname = new $classname;
tbrehm's avatar
tbrehm committed
92 93 94
					}
				}
			}
jwarnier's avatar
jwarnier committed
95
		}
96
	}
tbrehm's avatar
tbrehm committed
97

98
	function load($classes) {
tbrehm's avatar
tbrehm committed
99

jwarnier's avatar
jwarnier committed
100 101
		global $conf;

102
		$cl = explode(',', $classes);
jwarnier's avatar
jwarnier committed
103 104
		if(is_array($cl)) {
			foreach($cl as $classname) {
105
				if(is_file($conf['classpath'].'/'.$classname.'.inc.php') && (DEVSYSTEM || !is_link($conf['classpath'].'/'.$classname.'.inc.php'))) {
106
					include_once $conf['classpath'].'/'.$classname.'.inc.php';
jwarnier's avatar
jwarnier committed
107 108
				} else {
					die('Unable to load: '.$conf['classpath'].'/'.$classname.'.inc.php');
tbrehm's avatar
tbrehm committed
109 110
				}
			}
jwarnier's avatar
jwarnier committed
111
		}
112
	}
tbrehm's avatar
tbrehm committed
113

114
	/*
tbrehm's avatar
tbrehm committed
115 116 117 118 119
         0 = DEBUG
         1 = WARNING
         2 = ERROR
        */

120
	function log($msg, $priority = 0, $dblog = true) {
121

jwarnier's avatar
jwarnier committed
122
		global $conf;
123

124
		switch ($priority) {
125 126 127 128 129 130 131 132 133
		case 0:
			$priority_txt = 'DEBUG';
			break;
		case 1:
			$priority_txt = 'WARNING';
			break;
		case 2:
			$priority_txt = 'ERROR';
			break;
134 135
		}
		$log_msg = @date('d.m.Y-H:i').' - '.$priority_txt.' - '. $msg;
jwarnier's avatar
jwarnier committed
136 137

		if($priority >= $conf['log_priority']) {
138 139 140 141 142 143 144 145
			//if (is_writable($conf["log_file"])) {
			if (!$fp = fopen($conf['log_file'], 'a')) {
				die('Unable to open logfile.');
			}

			if (!fwrite($fp, $log_msg."\r\n")) {
				die('Unable to write to logfile.');
			}
tbrehm's avatar
tbrehm committed
146

147 148 149 150
			echo $log_msg."\n";
			fclose($fp);

			// Log to database
151
			if($dblog === true && isset($this->dbmaster)) {
152 153
				$server_id = $conf['server_id'];
				$loglevel = $priority;
154
				$message = $msg;
155 156
				$datalog_id = (isset($this->modules->current_datalog_id) && $this->modules->current_datalog_id > 0)?$this->modules->current_datalog_id:0;
				if($datalog_id > 0) {
157
					$tmp_rec = $this->dbmaster->queryOneRecord("SELECT count(syslog_id) as number FROM sys_log WHERE datalog_id = ? AND loglevel = ?", $datalog_id, LOGLEVEL_ERROR);
158 159
					//* Do not insert duplicate errors into the web log.
					if($tmp_rec['number'] == 0) {
160 161
						$sql = "INSERT INTO sys_log (server_id,datalog_id,loglevel,tstamp,message) VALUES (?, ?, ?, UNIX_TIMESTAMP(), ?)";
						$this->dbmaster->query($sql, $server_id, $datalog_id, $loglevel, $message);
162 163
					}
				} else {
164 165
					$sql = "INSERT INTO sys_log (server_id,datalog_id,loglevel,tstamp,message) VALUES (?, 0, ?, UNIX_TIMESTAMP(), ?)";
					$this->dbmaster->query($sql, $server_id, $loglevel, $message);
166
				}
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
			}

			//} else {
			//    die("Unable to write to logfile.");
			//}


		} // if

		if(isset($conf['admin_notify_priority']) && $priority >= $conf['admin_notify_priority'] && $conf['admin_mail'] != '') {
			// send notification to admin
			$mailBody = $log_msg;
			$mailSubject = substr($log_msg, 0, 50).'...';
			$mailHeaders      = "MIME-Version: 1.0" . "\n";
			$mailHeaders     .= "Content-type: text/plain; charset=utf-8" . "\n";
			$mailHeaders     .= "Content-Transfer-Encoding: 8bit" . "\n";
			$mailHeaders     .= "From: ". $conf['admin_mail'] . "\n";
			$mailHeaders     .= "Reply-To: ". $conf['admin_mail'] . "\n";

			mail($conf['admin_mail'], $mailSubject, $mailBody, $mailHeaders);
		}
	} // func

tbrehm's avatar
tbrehm committed
190

191
	/*
tbrehm's avatar
tbrehm committed
192 193 194 195 196
         0 = DEBUG
         1 = WARNING
         2 = ERROR
        */

197 198
	function error($msg) {
		$this->log($msg, 3);
jwarnier's avatar
jwarnier committed
199
		die($msg);
200
	}
tbrehm's avatar
tbrehm committed
201 202 203 204 205 206 207 208 209

}

/*
 Initialize application (app) object
*/

$app = new app;

210
?>