summaryrefslogtreecommitdiffstats
path: root/abs/mv-core/webcal/config.php
diff options
context:
space:
mode:
Diffstat (limited to 'abs/mv-core/webcal/config.php')
-rw-r--r--abs/mv-core/webcal/config.php263
1 files changed, 263 insertions, 0 deletions
diff --git a/abs/mv-core/webcal/config.php b/abs/mv-core/webcal/config.php
new file mode 100644
index 0000000..d803440
--- /dev/null
+++ b/abs/mv-core/webcal/config.php
@@ -0,0 +1,263 @@
+<?php
+/* This file loads configuration settings from the data file settings.php and
+ * sets up some needed variables.
+ *
+ * The settings.php file is created during installation using the web-based db
+ * setup page (install/index.php).
+ *
+ * <b>Note:</b>
+ * DO NOT EDIT THIS FILE!
+ *
+ *
+ * @author Craig Knudsen <cknudsen@cknudsen.com>
+ * @copyright Craig Knudsen, <cknudsen@cknudsen.com>, http://www.k5n.us/cknudsen
+ * @license http://www.gnu.org/licenses/gpl.html GNU GPL
+ * @version $Id: config.php,v 1.75.2.9 2008/02/17 02:21:25 cknudsen Exp $
+ * @package WebCalendar
+ */
+
+/* Prints a fatal error message to the user along with a link to the
+ * Troubleshooting section of the WebCalendar System Administrator's Guide.
+ *
+ * Execution is aborted.
+ *
+ * @param string $error The error message to display
+ * @internal We don't normally put functions in this file. But, since this
+ * file is included before some of the others, this function either
+ * goes here or we repeat this code in multiple files.
+ * Additionally, we don't want to call too many external functions
+ * from here since we could end up calling the function that called
+ * this one.
+ * NOTES: Don't call translate from here. This function if often called
+ * before translation stuff is initialized!
+ */
+function die_miserable_death ( $error ) {
+ global $APPLICATION_NAME, $LANGUAGE, $login, $TROUBLE_URL;
+ // Make sure app name is set.
+ $appStr = ( empty ( $APPLICATION_NAME ) ? 'WebCalendar' : $APPLICATION_NAME );
+
+ $h2_label = $appStr . ' ' . 'Error';
+ $title = $appStr . ': ' . 'Fatal Error';
+ $trouble_label = 'Troubleshooting Help';
+ $user_BGCOLOR = '#FFFFFF';
+
+ echo <<<EOT
+<html>
+ <head><title>{$title}</title></head>
+ <body bgcolor ="{$user_BGCOLOR}">
+ <h2>{$h2_label}</h2>
+ <p>{$error}</p><hr />
+ <p><a href="{$TROUBLE_URL}" target="_blank">{$trouble_label}</a></p>
+ </body>
+</html>
+EOT;
+ exit;
+}
+
+function db_error ( $doExit = false, $sql = '' ) {
+ global $settings;
+
+ $ret = str_replace ( 'XXX', dbi_error (), translate ( 'Database error XXX.' ) )
+ . ( ! empty ( $settings['mode'] ) && $settings['mode'] == 'dev' && !
+ empty ( $sql ) ? '<br />SQL:<br />' . $sql : '' );
+
+ if ( $doExit ) {
+ echo $ret;
+ exit;
+ } else
+ return $ret;
+}
+
+/**
+ * Get the full path to a file located in the webcalendar includes
+ * directory.
+ */
+function get_full_include_path ( $filename )
+{
+ if ( preg_match ( "/(.*)config.php/", __FILE__, $matches ) ) {
+ $fileLoc = $matches[1] . $filename;
+ return $fileLoc;
+ } else {
+ // Oops. This file is not named config.php!
+ die_miserable_death ( "Crap! Someone renamed config.php" );
+ }
+}
+
+function do_config ( $fileLoc ) {
+ global $db_database, $db_host, $db_login, $db_password, $db_persistent,
+ $db_type, $NONUSER_PREFIX, $phpdbiVerbose, $PROGRAM_DATE, $PROGRAM_NAME,
+ $PROGRAM_URL, $PROGRAM_VERSION, $readonly, $run_mode, $settings, $single_user,
+ $single_user_login, $TROUBLE_URL, $use_http_auth, $user_inc;
+
+ $PROGRAM_VERSION = 'v1.2.b1';
+ $PROGRAM_DATE = '25 Feb 2008';
+ $PROGRAM_NAME = 'WebCalendar ' . "$PROGRAM_VERSION ($PROGRAM_DATE)";
+ $PROGRAM_URL = 'http://www.k5n.us/webcalendar.php';
+ $TROUBLE_URL = 'docs/WebCalendar-SysAdmin.html#trouble';
+
+ // Open settings file to read.
+ $settings = array ();
+ if ( file_exists ( $fileLoc ) ) {
+ $fd = @fopen ( $fileLoc, 'rb', true );
+ }
+ if ( empty ( $fd ) && defined ( '__WC_INCLUDEDIR' ) ) {
+ $fd = @fopen ( __WC_INCLUDEDIR . '/settings.php', 'rb', true );
+ if ( $fd )
+ $fileLoc = __WC_INCLUDEDIR . '/settings.php';
+ }
+ // If still empty.... use __FILE__.
+ if ( empty ( $fd ) ) {
+ $testName = get_full_include_path ( "settings.php" );
+ $fd = @fopen ( $fileLoc, 'rb', true );
+ if ( $fd )
+ $fileLoc = $testName;
+ }
+ if ( empty ( $fd ) || filesize ( $fileLoc ) == 0 ) {
+ // There is no settings.php file.
+ // Redirect user to install page if it exists.
+ if ( file_exists ( 'install/index.php' ) ) {
+ header ( 'Location: install/index.php' );
+ exit;
+ } else
+ die_miserable_death (
+ translate ( 'Could not find settings.php file...' ) );
+ }
+
+ // We don't use fgets () since it seems to have problems with Mac-formatted
+ // text files. Instead, we read in the entire file, and split the lines manually.
+ $data = '';
+ while ( ! feof ( $fd ) ) {
+ $data .= fgets ( $fd, 4096 );
+ }
+ fclose ( $fd );
+
+ // Replace any combination of carriage return (\r) and new line (\n)
+ // with a single new line.
+ $data = preg_replace ( "/[\r\n]+/", "\n", $data );
+
+ // Split the data into lines.
+ $configLines = explode ( "\n", $data );
+
+ for ( $n = 0, $cnt = count ( $configLines ); $n < $cnt; $n++ ) {
+ $buffer = trim ( $configLines[$n], "\r\n " );
+ if ( preg_match ( '/^#|\/\*/', $buffer ) || // comments
+ preg_match ( '/^<\?/', $buffer ) || // start PHP code
+ preg_match ( '/^\?>/', $buffer ) ) // end PHP code
+ continue;
+ if ( preg_match ( '/(\S+):\s*(\S+)/', $buffer, $matches ) )
+ $settings[$matches[1]] = $matches[2];
+ // echo "settings $matches[1] => $matches[2]<br />";
+ }
+ $configLines = $data = '';
+
+ // Extract db settings into global vars.
+ $db_database = $settings['db_database'];
+ $db_host = $settings['db_host'];
+ $db_login = $settings['db_login'];
+ $db_password = $settings['db_password'];
+ $db_persistent = ( preg_match ( '/(1|yes|true|on)/i',
+ $settings['db_persistent'] ) ? '1' : '0' );
+ $db_type = $settings['db_type'];
+
+ // If no db settings, then user has likely started install but not yet
+ // completed. So, send them back to the install script.
+ if ( empty ( $db_type ) ) {
+ if ( file_exists ( 'install/index.php' ) ) {
+ header ( 'Location: install/index.php' );
+ exit;
+ } else
+ die_miserable_death (
+ translate ( 'Incomplete settings.php file...' ) );
+ }
+
+ // Use 'db_cachedir' if found, otherwise look for 'cachedir'.
+ if ( ! empty ( $settings['db_cachedir'] ) )
+ dbi_init_cache ( $settings['db_cachedir'] );
+ else
+ if ( ! empty ( $settings['cachedir'] ) )
+ dbi_init_cache ( $settings['cachedir'] );
+
+ if ( ! empty ( $settings['db_debug'] ) &&
+ preg_match ( '/(1|true|yes|enable|on)/i', $settings['db_debug'] ) )
+ dbi_set_debug ( true );
+
+ foreach ( array ( 'db_type', 'db_host', 'db_login', 'db_password' ) as $s ) {
+ if ( empty ( $settings[$s] ) )
+ die_miserable_death ( str_replace ( 'XXX', $s,
+ translate ( 'Could not find XXX defined in...' ) ) );
+ }
+
+ // Allow special settings of 'none' in some settings[] values.
+ // This can be used for db servers not using TCP port for connection.
+ $db_host = ( $db_host == 'none' ? '' : $db_host );
+ $db_password = ( $db_password == 'none' ? '' : $db_password );
+
+ $readonly = preg_match ( '/(1|yes|true|on)/i',
+ $settings['readonly'] ) ? 'Y' : 'N';
+
+ if ( empty ( $settings['mode'] ) )
+ $settings['mode'] = 'prod';
+
+ $run_mode = ( preg_match ( '/(dev)/i', $settings['mode'] ) ? 'dev' : 'prod' );
+ $phpdbiVerbose = ( $run_mode == 'dev' ) ;
+ $single_user = preg_match ( '/(1|yes|true|on)/i',
+ $settings['single_user'] ) ? 'Y' : 'N';
+
+ if ( $single_user == 'Y' )
+ $single_user_login = $settings['single_user_login'];
+
+ if ( $single_user == 'Y' && empty ( $single_user_login ) )
+ die_miserable_death ( str_replace ( 'XXX', 'single_user_login',
+ translate ( 'You must define XXX in' ) ) );
+
+ $use_http_auth = ( preg_match ( '/(1|yes|true|on)/i',
+ $settings['use_http_auth'] ) ? true : false );
+
+ // Type of user authentication.
+ $user_inc = $settings['user_inc'];
+
+ // If sqlite, the db file is in the include directory
+ if ( $db_type == 'sqlite' )
+ $db_database = get_full_include_path ( $db_database );
+
+ // Check the current installation version.
+ // Redirect user to install page if it is different from stored value.
+ // This will prevent running WebCalendar until UPGRADING.html has been
+ // read and required upgrade actions completed.
+ $c = @dbi_connect ( $db_host, $db_login, $db_password, $db_database, false );
+ if ( $c ) {
+ $rows = dbi_get_cached_rows ( 'SELECT cal_value FROM webcal_config
+ WHERE cal_setting = \'WEBCAL_PROGRAM_VERSION\'' );
+ if ( ! $rows ) {
+ // &amp; does not work here...leave it as &.
+ header ( 'Location: install/index.php?action=mismatch&version=UNKNOWN' );
+ exit;
+ } else {
+ $row = $rows[0];
+ if ( empty ( $row ) || $row[0] != $PROGRAM_VERSION ) {
+ // &amp; does not work here...leave it as &.
+ header ( 'Location: install/index.php?action=mismatch&version='
+ . ( empty ( $row ) ? 'UNKNOWN' : $row[0] ) );
+ exit;
+ }
+ }
+ dbi_close ( $c );
+ } else { // Must mean we don't have a settings.php file.
+ // NOTE: if we get a connect error when running send_reminders.php,
+ // we may want to show that error message here.
+ // &amp; does not work here...leave it as &.
+ header ( 'Location: install/index.php?action=mismatch&version=UNKNOWN' );
+ exit;
+ }
+
+ // We can add extra 'nonuser' calendars such as a holiday, corporate,
+ // departmental, etc. We need a unique prefix for these calendars
+ // so we don't get them mixed up with real logins. This prefix should be
+ // a maximum of 5 characters and should NOT change once set!
+ $NONUSER_PREFIX = '_NUC_';
+
+ if ( $single_user != 'Y' )
+ $single_user_login = '';
+}
+
+?>