-<?php
-/*
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
- * Copyright (C) 2002-2007 The Nucleus Group
- *
- * 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.
- * (see nucleus/documentation/index.html#license for more info)
- *
- * This script will install the Nucleus tables in your SQL-database,
- * and initialize the data in those tables.
- *
- * Below is a friendly way of letting users on non-php systems know that Nucleus won't run there.
- * ?><div style="font-size: xx-large;"> Your web server is not properly configured to run PHP scripts and will not be able to install Nucleus. </div> <div style="display: none;"><?php
- */
-
-
-/**
- * @license http://nucleuscms.org/license.txt GNU General Public License
- * @copyright Copyright (C) 2002-2007 The Nucleus Group
- * @version $Id$
- */
-
-// don't give warnings for uninitialized vars
-error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
-
-$minimum_php_version = '5.0.6';
-$minimum_mysql_version = '3.23';
-
-// begin if: server's PHP version is below the minimum; halt installation
-if ( version_compare(PHP_VERSION, $minimum_php_version, '<') )
-{
- exit('<div style="font-size: xx-large;"> Nucleus requires at least PHP version '. $minimum_php_version .'</div>');
-} // end if
-
-// make sure there's no unnecessary escaping: # set_magic_quotes_runtime(0);
-if ( version_compare(PHP_VERSION, '5.3.0', '<') )
-{
- ini_set('magic_quotes_runtime', '0');
-} // end if
-
-
-/**
- * This part of the ./install/index.php code allows for customization of the install process.
- * When distributing plugins or skins together with a Nucleus installation, the
- * configuration below will instruct to install them
- *
- * -- Start Of Configurable Part --
- **/
-
-/**
- * array with names of plugins to install. Plugin files must be present in the nucleus/plugin/ directory
- *
- * example:
- * array('NP_TrackBack', 'NP_MemberGoodies')
- **/
-$aConfPlugsToInstall = array('NP_SkinFiles', 'NP_SecurityEnforcer', 'NP_Text');
-
-/**
- * array with skins to install. skins must be present under the skins/ directory with
- * a subdirectory having the same name that contains a skinbackup.xml file
- *
- * example:
- * array('base', 'rsd')
- **/
-$aConfSkinsToImport = array('atom', 'rss2.0', 'rsd', 'default');
-
-/**
- * -- End Of Configurable Part --
- **/
-
-
-// Check if some important files
-doCheckFiles();
-
-// if there are some plugins or skins to import, do not include vars in globalfunctions.php again... so set a flag
-if ( (count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) )
-{
- global $CONF;
- $CONF['installscript'] = 1;
-} // end if
-
-// we will use postVar, getVar, ... methods instead of $_GET, $_POST ...
-include_once('../nucleus/libs/vars4.1.0.php');
-
-// include core classes that are needed for internationalization
-include_once('../nucleus/libs/i18n.php');
-
-if ( !i18n::init('UTF-8', './locales') )
-{
- exit('<div style="font-size: xx-large;"> Failed to initialize iconv or mbstring extension. Would you please contact the administrator of your PHP server? </div>');
-} // end if
-
-// check if mysql support is installed; this check may not make sense, as is, in a version past 3.5x
-if ( !function_exists('mysql_query') && !function_exists('mysqli_query') )
-{
- exit('<div style="font-size: xx-large;"> Your PHP version does not have support for MySQL :( </div>');
-} // end if
-
-// include core classes that are needed for login & plugin handling
-include_once('../nucleus/libs/mysql.php');
-
-// added for 3.5 sql_* wrapper
-global $MYSQL_HANDLER;
-
-//set the handler if different from mysql (or mysqli) # $MYSQL_HANDLER = array('pdo','mysql');
-if ( !isset($MYSQL_HANDLER) )
-{
- $MYSQL_HANDLER = array('mysql', '');
-} // end if
-
-include_once('../nucleus/libs/sql/' . $MYSQL_HANDLER[0] . '.php');
-// end new for 3.5 sql_* wrapper
-
-
-doAction();
-
-exit;
-
-/**
- * header tag of the installation screens
- **/
-function showHeader()
-{
- /* send HTTP header */
- header('Content-Type: text/html; charset=' . i18n::get_current_charset());
-
-?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=<?php echo i18n::get_current_charset(); ?>" />
- <title><?php echo _TITLE; ?></title>
- <link rel="stylesheet" type="text/css" href="./styles/inst.css" />
- <style type="text/css">
- <!--
- <?php echo _BODYFONTSTYLE; ?>
- -->
- </style>
- </head>
- <body>
-<?php
-}
-
-/**
- * footer tag of the installation screens
- **/
-function showFooter()
-{
-?>
- <div id="footer">
- © 2001-2012 The Nucleus Groupe . Running Nucleus CMS v4.00
- </div>
- </body>
-</html>
-<?php
-}
-
-
-/**
- * installer action
- */
-function doAction()
-{
- global $errors;
- $errors = array();
-
- session_start();
-
- if ( postVar('locale') )
- {
- $_SESSION['locale'] = postVar('locale');
- }
-
- /* TODO: if something input related to locale, set it, else set default */
- i18n::set_current_locale($_SESSION['locale'] ? $_SESSION['locale'] : 'en_Latn_US');
- $translation_file = './locales/' . i18n::get_current_locale() . '.' . i18n::get_current_charset() . '.php';
- if ( !file_exists($translation_file) )
- {
- $translation_file = './locales/en_Latn_US.UTF-8.php';
- }
- include($translation_file);
-
-
-
- showHeader();
-
- if ( !postVar('action') && !requestVar('mode') )
- {
- // Initialize the session
- $_SESSION = array();
- $_SESSION['mode'] = 'simple';
- $_SESSION['mysql_host'] = _hsc(@ini_get('mysql.default_host'));
- getURLAndPath();
- showSelectLocaleForm();
- }
- else
- {
- // mode change
- if ( requestVar('mode') )
- {
- $_SESSION['mode'] = requestVar('mode');
- }
-
- $action = postVar('action');
- $isValid = doValidate();
- if ( $action == 'install' && $isValid && doInstall() ) // install process
- {
- showInstallCompleteForm();
- // Clearing the session
- $_SESSION = array();
- }
- elseif ( $_SESSION['mode'] == 'simple' ) // simple install mode
- {
- if ( !$action || ( $action == 'next' && count($errors['db_setting']) > 0 ) )
- {
- if ( !$action )
- {
- $errors = array();
- }
- showDBSettingForm();
- }
- else
- {
- if ( $action == 'next' )
- {
- $errors = array();
- }
- showBlogSettingForm();
- }
- }
- else // advanced install mode
- {
- if ( !$action )
- {
- $errors = array();
- }
- showDetailSettingForm();
- }
- }
-
- showFooter();
-}
-
-/**
- * Display the form for language select
- */
-function showSelectLocaleForm()
-{
- // Get the browser language that can be displayed
- // TODO: not used
- $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
- foreach ($languages as $language)
- {
- if (strpos($language, ';') === FALSE)
- {
- break;
- }
- else
- {
- $language = preg_replace('#([^;]+).*#', '$1', $language);
- break;
- }
- }
-
-?>
- <div id="header">
- <div id="navigation">
- <h1><img src="./styles/nucleus_rogo.png" alt="NucleusCMS" /></h1>
- </div>
- </div>
- <div id="container">
- <p style="font-size:152%;font-weight:bold;">
- Select your locale:
- </p>
- <form method="post" action="./index.php">
-
- <div class="prt">
- <select name="locale">
- <option value="en_Latn_US">English - United States</option>
- <option value="ja_Jpan_JP">Japanese - Japan</option>
- </select>
- <p class="sbt">
- <button type="submit" name="mode" value="simple" class="sbt_arw">START</button>
- </p>
- </div>
- </form>
- </div>
-<?php
-}
-
-/**
- * Display the form to set up a database
- */
-function showDBSettingForm()
-{
- global $errors;
- getMySqlVersion(); // error is stored in $errors['mysql'].
-?>
- <div id="header">
- <div id="navigation">
- <h1><img src="./styles/nucleus_rogo.png" alt="NucleusCMS" /></h1>
- <ul>
- <li><?php echo _STEP1; ?></li>
- <li class="gry"> > <?php echo _STEP2; ?></li>
- <li class="gry"> > <?php echo _STEP3; ?></li>
- <li class="rightbox">
- <a href="./?mode=details"><?php echo _MODE2; ?></a>
- </li>
- </ul>
- </div>
- </div>
- <div id="container">
- <p class="msg">
- <?php echo _SIMPLE_NAVI1;
- if ( !canConfigFileWritable() ) echo '<span class="err">', $errors['config'], '</span>';
- if ( $errors['mysql'] ) echo '<span class="err">', $errors['mysql'], '</span>';
- if ( is_array($errors['install']) )
- {
- foreach ( $errors['install'] as $error )
- {
- echo '<span class="err">', $error, "</span>\n";
- }
- }
- ?>
- </p>
- <form method="post" action="./index.php">
- <div class="prt">
- <h2><?php echo _DB_HEADER; ?></h2>
- <p class="msg">
- <?php
- if ( is_array($errors['db_setting']) )
- {
- foreach ( $errors['db_setting'] as $error )
- {
- echo '<span class="err">', $error, "</span>\n";
- }
- }
- ?>
- </p>
- <table>
- <tr>
- <th><span class="nam"><?php echo _DB_FIELD1; ?></span><span class="sub"><?php echo _DB_FIELD1_DESC; ?></span></th>
- <td><input type="text" name="mysql_host" value="<?php echo $_SESSION['mysql_host']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _DB_FIELD2; ?></span><span class="sub"><?php echo _DB_FIELD2_DESC; ?></span></th>
- <td><input type="text" name="mysql_user" value="<?php echo $_SESSION['mysql_user']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _DB_FIELD3; ?></span><span class="sub"><?php echo _DB_FIELD3_DESC; ?></span></th>
- <td><input type="text" name="mysql_password" value="<?php echo $_SESSION['mysql_password']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _DB_FIELD4; ?></span><span class="sub"><?php echo _DB_FIELD4_DESC; ?></span></th>
- <td><input type="text" name="mysql_database" value="<?php echo $_SESSION['mysql_database']; ?>" /></td>
- </tr>
- </table>
- <p class="sbt">
- <button type="submit" name="mode" value="detail" class="sbt_sqr"><?php echo _MODE2; ?></button>
- <button type="submit" name="action" value="next" class="sbt_arw"><?php echo _NEXT; ?></button>
- </p>
- <p class="msg">
- <?php echo _DB_TEXT1; ?>
- </p>
- </div>
- </form>
- </div>
-<?php
-}
-
-/**
- * Displays a form to the blog settings
- */
-function showBlogSettingForm()
-{
- global $errors;
-?>
- <div id="header">
- <div id="navigation">
- <h1><img src="./styles/nucleus_rogo.png" alt="NucleusCMS" /></h1>
- <ul>
- <li><?php echo _STEP1; ?></li>
- <li> > <?php echo _STEP2; ?></li>
- <li class="gry"> > <?php echo _STEP3; ?></li>
- <li class="rightbox">
- <a href="./?mode=details"><?php echo _MODE2; ?></a>
- </li>
- </ul>
- </div>
- </div>
- <div id="container">
- <p class="msg">
- <?php echo _SIMPLE_NAVI2; ?>
- </p>
- <form method="post" action="./index.php">
- <div class="prt">
- <h2><?php echo _BLOG_HEADER; ?></h2>
- <p class="msg">
- <?php
- if ( is_array($errors['blog_setting']) )
- {
- foreach ( $errors['blog_setting'] as $error )
- {
- echo '<span class="err">', $error, "</span>\n";
- }
- }
- ?>
- </p>
- <table>
- <tr>
- <th><span class="nam"><?php echo _BLOG_FIELD1; ?></span></th>
- <td><input type="text" name="blog_name" value="<?php echo $_SESSION['blog_name'] ? $_SESSION['blog_name'] : 'My Nucleus CMS'; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _BLOG_FIELD2; ?></span><span class="sub"><?php echo _BLOG_FIELD2_DESC; ?></span></th>
- <td><input type="text" name="blog_shortname" value="<?php echo $_SESSION['blog_shortname'] ? $_SESSION['blog_shortname'] : 'mynucleuscms'; ?>" /></td>
- </tr>
- </table>
- </div>
-
- <div class="prt">
- <h2><?php echo _ADMIN_HEADER; ?></h2>
- <p class="msg">
- <?php
- if ( is_array($errors['user_setting']) )
- {
- foreach ( $errors['user_setting'] as $error )
- {
- echo '<span class="err">', $error, "</span>\n";
- }
- }
- ?>
- </p>
- <table>
- <tr>
- <th><span class="nam"><?php echo _ADMIN_FIELD1; ?></span></th>
- <td><input type="text" name="user_realname" value="<?php echo $_SESSION['user_name']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _ADMIN_FIELD2; ?></span><span class="sub"><?php echo _ADMIN_FIELD2_DESC; ?></span></th>
- <td><input type="text" name="user_name" value="<?php echo $_SESSION['user_realname']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _ADMIN_FIELD3; ?></span><span class="sub"><?php echo _ADMIN_FIELD3_DESC; ?></span></th>
- <td><input type="password" name="user_password" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _ADMIN_FIELD4; ?></span><span class="sub"><?php echo _ADMIN_FIELD4_DESC; ?></span></th>
- <td><input type="password" name="user_password2" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _ADMIN_FIELD5; ?></span></th>
- <td><input type="text" name="user_email" value="<?php echo $_SESSION['user_email']; ?>" /></td>
- </tr>
- </table>
- <p class="sbt">
- <button type="submit" name="action" value="install" class="sbt_arw"><?php echo _INSTALL; ?></button>
- </p>
- </div>
- </form>
- </div>
-<?php
-}
-
-/**
- * Displays a form to the detail settings
- */
-function showDetailSettingForm()
-{
- global $errors;
-?>
- <div id="header">
- <div id="navigation">
- <h1><img src="./styles/nucleus_rogo.png" alt="NucleusCMS" /></h1>
- <ul>
- <li class="rightbox">
- <a href="./?mode=simple"><?php echo _MODE1; ?></a>
- </li>
- </ul>
- </div>
- </div>
- <div id="container_detailed">
- <p class="msg">
- <?php echo _DETAIL_NAVI1; ?>
- </p>
- <ul class="msg">
- <li>PHP: <?php echo phpversion(); ?></li>
- <li>MySQL: <?php echo getMySqlVersion();
- if (array_key_exists('mysql', $errors)) echo '<span class="err">', $errors['mysql'], '</span>'; ?></li>
- </ul>
- <?php
- if ( is_array($errors['install']) )
- {
- echo '<p class="msg">';
- foreach ( $errors['install'] as $error )
- {
- echo '<span class="err">', $error, "</span>\n";
- }
- echo '</p>';
- }
- ?>
-
- <form method="post" action="">
-
- <div class="prt">
- <h2><?php echo _DETAIL_HEADER1; ?></h2>
- <p class="msg">
- <?php echo _DETAIL_TEXT1;
- if ( is_array($errors['db_setting']) )
- {
- foreach ( $errors['db_setting'] as $error )
- {
- echo '<span class="err">', $error, "</span>\n";
- }
- }
- ?>
- </p>
- <table>
- <tr>
- <th><span class="nam"><?php echo _DB_FIELD1; ?></span><span class="sub"><?php echo _DB_FIELD1_DESC; ?></span></th>
- <td><input type="text" name="mysql_host" value="<?php echo $_SESSION['mysql_host']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _DB_FIELD2; ?></span><span class="sub"><?php echo _DB_FIELD2_DESC; ?></span></th>
- <td><input type="text" name="mysql_user" value="<?php echo $_SESSION['mysql_user']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _DB_FIELD3; ?></span><span class="sub"><?php echo _DB_FIELD3_DESC; ?></span></th>
- <td><input type="text" name="mysql_password" value="<?php echo $_SESSION['mysql_password']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _DB_FIELD4; ?></span><span class="sub"><?php echo _DB_FIELD4_DESC; ?></span></th>
- <td><input type="text" name="mysql_database" value="<?php echo $_SESSION['mysql_database']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _DB_FIELD5; ?></span><span class="sub"><?php echo _DB_FIELD5_DESC; ?></span></th>
- <td><input type="text" name="mysql_tablePrefix" value="<?php echo $_SESSION['mysql_tablePrefix']; ?>" /></td>
- </tr>
- </table>
-
- <h2><?php echo _DETAIL_HEADER2; ?></h2>
- <p class="msg">
- <?php echo _DETAIL_TEXT2;
- if ( is_array($errors['path_setting']) )
- {
- foreach ( $errors['path_setting'] as $error )
- {
- echo '<span class="err">', $error, "</span>\n";
- }
- }
- ?>
- </p>
- <table>
- <tr>
- <th><span class="nam"><?php echo _PATH_FIELD1; ?></span></th>
- <td><input type="text" name="IndexURL" value="<?php echo $_SESSION['IndexURL']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _PATH_FIELD2; ?></span></th>
- <td><input type="text" name="AdminURL" value="<?php echo $_SESSION['AdminURL']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _PATH_FIELD3; ?></span></th>
- <td><input type="text" name="AdminPath" value="<?php echo $_SESSION['AdminPath']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _PATH_FIELD4; ?></span></th>
- <td><input type="text" name="MediaURL" value="<?php echo $_SESSION['MediaURL']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _PATH_FIELD5; ?></span></th>
- <td><input type="text" name="MediaPath" value="<?php echo $_SESSION['MediaPath']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _PATH_FIELD6; ?></span></th>
- <td><input type="text" name="SkinsURL" value="<?php echo $_SESSION['SkinsURL']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _PATH_FIELD7; ?></span></th>
- <td><input type="text" name="SkinsPath" value="<?php echo $_SESSION['SkinsPath']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _PATH_FIELD8; ?></span></th>
- <td><input type="text" name="PluginURL" value="<?php echo $_SESSION['PluginURL']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _PATH_FIELD9; ?></span></th>
- <td><input type="text" name="ActionURL" value="<?php echo $_SESSION['ActionURL']; ?>" /></td>
- </tr>
- </table>
- <p class="msg">
- <?php echo _DETAIL_TEXT3; ?>
- </p>
-
- <h2><?php echo _DETAIL_HEADER3; ?></h2>
- <p class="msg">
- <?php echo _DETAIL_TEXT4;
- if ( is_array($errors['user_setting']) )
- {
- foreach ( $errors['user_setting'] as $error )
- {
- echo '<span class="err">', $error, "</span>\n";
- }
- }
- ?>
- </p>
- <table>
- <tr>
- <th><span class="nam"><?php echo _ADMIN_FIELD1; ?></span></th>
- <td><input type="text" name="user_realname" value="<?php echo $_SESSION['user_realname']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _ADMIN_FIELD2; ?></span><span class="sub"><?php echo _ADMIN_FIELD2_DESC; ?></span></th>
- <td><input type="text" name="user_name" value="<?php echo $_SESSION['user_name']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _ADMIN_FIELD3; ?></span><span class="sub"><?php echo _ADMIN_FIELD3_DESC; ?></span></th>
- <td><input type="password" name="user_password" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _ADMIN_FIELD4; ?></span><span class="sub"><?php echo _ADMIN_FIELD4_DESC; ?></span></th>
- <td><input type="password" name="user_password2" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _ADMIN_FIELD5; ?></span></th>
- <td><input type="text" name="user_email" value="<?php echo $_SESSION['user_email']; ?>" /></td>
- </tr>
- </table>
-
- <h2><?php echo _DETAIL_HEADER4; ?></h2>
- <p class="msg">
- <?php echo _DETAIL_TEXT5;
- if ( is_array($errors['blog_setting']) )
- {
- foreach ( $errors['blog_setting'] as $error )
- {
- echo '<span class="err">', $error, "</span>\n";
- }
- }
- ?>
- </p>
- <table>
- <tr>
- <th><span class="nam"><?php echo _BLOG_FIELD1; ?></span></th>
- <td><input type="text" name="blog_name" value="<?php echo $_SESSION['blog_name']; ?>" /></td>
- </tr>
- <tr>
- <th><span class="nam"><?php echo _BLOG_FIELD2; ?></span><span class="sub"><?php echo _BLOG_FIELD2_DESC; ?></span></th>
- <td><input type="text" name="blog_shortname" value="<?php echo $_SESSION['blog_shortname']; ?>" /></td>
- </tr>
- </table>
-
- <p class="msg">
- <?php echo _DETAIL_TEXT6; ?>
- </p>
-
- <p class="sbt">
- <button type="submit" name="action" value="install" class="sbt_arw"><?php echo _INSTALL; ?></button>
- </p>
- </div>
-
- </form>
-
- </div>
-<?php
-}
-
-/**
- * Displays a screen to signal the completion of the installation
- */
-function showInstallCompleteForm()
-{
- global $errors;
-?>
- <div id="header">
- <div id="navigation">
- <h1><img src="./styles/nucleus_rogo.png" alt="NucleusCMS" /></h1>
- <ul>
- <li><?php echo _STEP1; ?></li>
- <li> > <?php echo _STEP2; ?></li>
- <li> > <?php echo _STEP3; ?></li>
- </ul>
- </div>
- </div>
- <div id="container">
- <p class="msg">
- <?php echo _INST_TEXT;
- if ( $errors['config_data'] )
- {
- echo '<span class="err">', _INST_TEXT4, '</span>';
- ?><pre><code><?php
-// mySQL connection information
-$MYSQL_HOST = '<b><?php echo $_SESSION['mysql_host']; ?></b>';
-$MYSQL_USER = '<b><?php echo $_SESSION['mysql_user']; ?></b>';
-$MYSQL_PASSWORD = '<i><b><?php echo $_SESSION['mysql_password']; ?></b></i>';
-$MYSQL_DATABASE = '<b><?php echo $_SESSION['mysql_database']; ?></b>';
-$MYSQL_PREFIX = '<b><?php echo $_SESSION['mysql_tablePrefix']; ?></b>';
-
-// new in 3.50. first element is db handler, the second is the db driver used by the handler
-// default is $MYSQL_HANDLER = array('mysql','mysql');
-//$MYSQL_HANDLER = array('mysql','mysql');
-//$MYSQL_HANDLER = array('pdo','mysql');
-$MYSQL_HANDLER = array('mysql','');
-
-// main nucleus directory
-$DIR_NUCLEUS = '<b><?php echo $_SESSION['AdminPath']; ?></b>';
-
-// path to media dir
-$DIR_MEDIA = '<b><?php echo $_SESSION['MediaPath']; ?></b>';
-
-// extra skin files for imported skins
-$DIR_SKINS = '<b><?php echo $_SESSION['SkinsPath']; ?></b>';
-
-// these dirs are normally sub dirs of the nucleus dir, but
-// you can redefine them if you wish
-$DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';
-$DIR_LOCALES = $DIR_NUCLEUS . 'locales/';
-$DIR_LIBS = $DIR_NUCLEUS . 'libs/';
-
-// include libs
-include($DIR_LIBS.'globalfunctions.php');
-?></code></pre>
- <?php
- }
- else
- {
- echo '<span class="err">', _INST_TEXT5, '</span>';
- }
- ?>
- </p>
- <form method="post" action="./index.php">
- <div class="prt">
- <h2><?php echo _INST_HEADER1; ?></h2>
- <p class="msg">
- <?php echo sprintf(_INST_TEXT1, $_SESSION['blog_name']); ?>
- </p>
- <p class="sbt">
- <button type="button" name="toBlog" onclick="location.href='<?php echo $_SESSION['IndexURL']; ?>';" class="sbt_arw"><?php echo _INST_BUTTON1; ?></button>
- </p>
- </div>
-
- <div class="prt">
- <h2><?php echo _INST_HEADER2; ?></h2>
- <p class="msg">
- <?php echo _INST_TEXT2; ?>
- </p>
- <p class="sbt">
- <button type="button" name="toMng" onclick="location.href='<?php echo $_SESSION['AdminURL']; ?>';" class="sbt_arw"><?php echo _INST_BUTTON2; ?></button>
- </p>
- </div>
-
- <div class="prt">
- <h2><?php echo _INST_HEADER3; ?></h2>
- <p class="msg">
- <?php echo _INST_TEXT3; ?>
- </p>
- <p class="sbt">
- <button type="button" name="toAddBlog" onclick="location.href='<?php echo $_SESSION['AdminURL']; ?>index.php?action=createnewlog';" class="sbt_arw"><?php echo _INST_BUTTON3; ?></button>
- </p>
- </div>
- </form>
- </div>
-<?php
-}
-
-/**
- *
- */
-function doValidate()
-{
- global $errors;
- $errors = array();
-
- // 0. put all POST-vars into sessions
- if (postVar('mysql_host')) $_SESSION['mysql_host'] = postVar('mysql_host');
- if (postVar('mysql_user')) $_SESSION['mysql_user'] = postVar('mysql_user');
- if (postVar('mysql_password')) $_SESSION['mysql_password'] = postVar('mysql_password');
- if (postVar('mysql_database')) $_SESSION['mysql_database'] = postVar('mysql_database');
- if (postVar('mysql_tablePrefix')) $_SESSION['mysql_tablePrefix'] = postVar('mysql_tablePrefix');
-
- if (postVar('blog_name')) $_SESSION['blog_name'] = postVar('blog_name');
- if (postVar('blog_shortname')) $_SESSION['blog_shortname'] = postVar('blog_shortname');
-
- if (postVar('user_name'))
- {
- $_SESSION['user_name'] = postVar('user_name');
- $_SESSION['user_password'] = postVar('user_password');
- $_SESSION['user_password2'] = postVar('user_password2');
- }
- if (postVar('user_realname')) $_SESSION['user_realname'] = postVar('user_realname');
- if (postVar('user_email')) $_SESSION['user_email'] = postVar('user_email');
-
- if (postVar('IndexURL')) $_SESSION['IndexURL'] = postVar('IndexURL');
- if (postVar('AdminURL')) $_SESSION['AdminURL'] = postVar('AdminURL');
- if (postVar('AdminPath')) $_SESSION['AdminPath'] = postVar('AdminPath');
- if (postVar('MediaURL')) $_SESSION['MediaURL'] = postVar('MediaURL');
- if (postVar('SkinsURL')) $_SESSION['SkinsURL'] = postVar('SkinsURL');
- if (postVar('PluginURL')) $_SESSION['PluginURL'] = postVar('PluginURL');
- if (postVar('ActionURL')) $_SESSION['ActionURL'] = postVar('ActionURL');
- if (postVar('MediaPath')) $_SESSION['MediaPath'] = postVar('MediaPath');
- if (postVar('SkinsPath')) $_SESSION['SkinsPath'] = postVar('SkinsPath');
-
- // TODO: I do not know why this is necessary
- $_SESSION['IndexURL'] = replace_double_backslash($_SESSION['IndexURL']);
- $_SESSION['AdminURL'] = replace_double_backslash($_SESSION['AdminURL']);
- $_SESSION['AdminPath'] = replace_double_backslash($_SESSION['AdminPath']);
- $_SESSION['MediaURL'] = replace_double_backslash($_SESSION['MediaURL']);
- $_SESSION['SkinsURL'] = replace_double_backslash($_SESSION['SkinsURL']);
- $_SESSION['PluginURL'] = replace_double_backslash($_SESSION['PluginURL']);
- $_SESSION['ActionURL'] = replace_double_backslash($_SESSION['ActionURL']);
- $_SESSION['MediaPath'] = replace_double_backslash($_SESSION['MediaPath']);
- $_SESSION['SkinsPath'] = replace_double_backslash($_SESSION['SkinsPath']);
-
-
- // 1. check the database connection
- $errors['db_setting'] = array();
- if ( !$_SESSION['mysql_host'] )
- {
- $errors['db_setting'][] = sprintf(_ERROR1, _DB_FIELD1);
- }
-
- if ( !$_SESSION['mysql_user'] )
- {
- $errors['db_setting'][] = sprintf(_ERROR1, _DB_FIELD2);
- }
-
- if ( !$_SESSION['mysql_database'] )
- {
- $errors['db_setting'][] = sprintf(_ERROR1, _DB_FIELD4);
- }
-
- if ( $_SESSION['mysql_tablePrefix'] && (!preg_match('/^[a-zA-Z0-9_]+$/i', $_SESSION['mysql_tablePrefix']) ) )
- {
- $errors['db_setting'][] = sprintf(_ERROR2, _DB_FIELD5);
- }
-
- if ( count($errors['db_setting']) == 0 )
- {
- // try to log in to mySQL
- global $MYSQL_CONN;
-
- // this will need to be changed if we ever allow
- $MYSQL_CONN = @sql_connect_args($_SESSION['mysql_host'], $_SESSION['mysql_user'], $_SESSION['mysql_password']);
-
- if ( $MYSQL_CONN == FALSE )
- {
- $errors['db_setting'][] = _ERROR3;
- }
- else
- {
- sql_close($MYSQL_CONN);
- }
- }
-
- if (count($errors['db_setting']) > 0)
- {
- return false;
- }
-
- // 2. check the blog settings
- $errors['blog_setting'] = array();
- $errors['user_setting'] = array();
- if ( !$_SESSION['blog_name'] )
- {
- $errors['blog_setting'][] = sprintf(_ERROR1, _BLOG_FIELD1);
- }
-
- if ( !$_SESSION['blog_shortname'] )
- {
- $errors['blog_setting'][] = sprintf(_ERROR1, _BLOG_FIELD2);
- }
- elseif ( !_isValidShortName($_SESSION['blog_shortname']) )
- {
- $errors['blog_setting'][] = _ERROR4;
- }
-
- if ( !$_SESSION['user_name'] )
- {
- $errors['user_setting'][] = sprintf(_ERROR1, _ADMIN_FIELD2);
- }
- elseif ( !_isValidDisplayName($_SESSION['user_name']) )
- {
- $errors['user_setting'][] = _ERROR5;
- }
-
- if ( !$_SESSION['user_password'] || !$_SESSION['user_password2'] )
- {
- $errors['user_setting'][] = sprintf(_ERROR1, _ADMIN_FIELD3);
- }
-
- if ( $_SESSION['user_password'] != $_SESSION['user_password2'] )
- {
- $errors['user_setting'][] = _ERROR6;
- }
-
- if ( !$_SESSION['user_email'] )
- {
- $errors['user_setting'][] = sprintf(_ERROR1, _ADMIN_FIELD5);
- }
- elseif ( !_isValidMailAddress($_SESSION['user_email']) )
- {
- $errors['user_setting'][] = _ERROR7;
- }
-
- if (count($errors['blog_setting']) > 0 || count($errors['user_setting']) > 0)
- {
- return false;
- }
-
-
- // 3. check the path/url
- $errors['path_setting'] = array();
- // TODO: add action.php check
- if ( !ends_with_slash($_SESSION['IndexURL'])
- || !ends_with_slash($_SESSION['AdminURL'])
- || !ends_with_slash($_SESSION['MediaURL'])
- || !ends_with_slash($_SESSION['SkinsURL'])
- || !ends_with_slash($_SESSION['PluginURL']) )
- {
- $errors['path_setting'][] = _ERROR8;
- }
-
- if ( !ends_with_slash($_SESSION['AdminPath']) )
- {
- $errors['path_setting'][] = sprintf(_ERROR9, _PATH_FIELD3);
- }
-
- if ( !ends_with_slash($_SESSION['MediaPath']) )
- {
- $errors['path_setting'][] = sprintf(_ERROR9, _PATH_FIELD5);
- }
-
- if ( !ends_with_slash($_SESSION['SkinsPath']) )
- {
- $errors['path_setting'][] = sprintf(_ERROR9, _PATH_FIELD7);
- }
-
- if ( !is_dir($_SESSION['AdminPath']) )
- {
- $errors['path_setting'][] = _ERROR10;
- }
-
- if (count($errors['path_setting']) > 0)
- {
- return false;
- }
-
- return true;
-}
-
-/**
- * The installation process itself
- */
-function doInstall()
-{
- global $errors;
- global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_PREFIX, $MYSQL_CONN;
-
- $errors = array();
- $errors['install'] = array();
-
- // 1. put all SESSION-vars into vars
- $MYSQL_HOST = $_SESSION['mysql_host'];
- $MYSQL_USER = $_SESSION['mysql_user'];
- $MYSQL_PASSWORD = $_SESSION['mysql_password'];
- $MYSQL_DATABASE = $_SESSION['mysql_database'];
- $MYSQL_PREFIX = $_SESSION['mysql_tablePrefix'];
-
- $blog_name = $_SESSION['blog_name'];
- $blog_shortname = $_SESSION['blog_shortname'];
-
- $user_name = $_SESSION['user_name'];
- $user_realname = $_SESSION['user_realname'];
- $user_password = $_SESSION['user_password'];
- $user_email = $_SESSION['user_email'];
-
- $config_indexurl = $_SESSION['IndexURL'];
- $config_adminurl = $_SESSION['AdminURL'];
- $config_mediaurl = $_SESSION['MediaURL'];
- $config_skinsurl = $_SESSION['SkinsURL'];
- $config_pluginurl = $_SESSION['PluginURL'];
- $config_actionurl = $_SESSION['ActionURL'];
- $config_adminpath = $_SESSION['AdminPath'];
- $config_mediapath = $_SESSION['MediaPath'];
- $config_skinspath = $_SESSION['SkinsPath'];
-
- $config_adminemail = $user_email;
- $config_sitename = $blog_name;
-
- // 2.open mySQL connection
-
- // this will need to be changed if we ever allow
- $MYSQL_CONN = @sql_connect_args($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD);
-
- if ( $MYSQL_CONN == FALSE )
- {
- $errors['install'][] = _ERROR3;
- return false;
- }
-
- // 3. try to create database
- if ( !sql_query('CREATE DATABASE IF NOT EXISTS ' . $MYSQL_DATABASE) )
- {
- $errors['install'][] = _ERROR11 . ': ' . sql_error();
- }
-
- // 4. try to select database
- if ( !sql_select_db($MYSQL_DATABASE) )
- {
- $errors['install'][] = _ERROR12;
- }
- sql_set_charset('utf8');
-
- // 4a. drop table that have already been created
- $result = sql_query('SHOW TABLES');
- while ($row = mysql_fetch_array($result, MYSQL_NUM))
- {
- if ( !sql_query('DROP TABLE ' . $row[0]) )
- {
- $errors['install'][] = _ERROR13 . ': ' . sql_error();
- }
- }
-
- if ( count($errors['install']) > 0 )
- {
- return false;
- }
-
- // 5. execute queries
- $filename = 'install.sql';
- $fd = fopen($filename, 'r');
- $queries = fread($fd, filesize($filename) );
- fclose($fd);
-
- $queries = preg_split('#(;\n|;\r)#', $queries);
-
- $aTableNames = array(
- 'nucleus_actionlog',
- 'nucleus_ban',
- 'nucleus_blog',
- 'nucleus_category',
- 'nucleus_comment',
- 'nucleus_config',
- 'nucleus_item',
- 'nucleus_karma',
- 'nucleus_member',
- 'nucleus_plugin',
- 'nucleus_skin',
- 'nucleus_template',
- 'nucleus_team',
- 'nucleus_activation',
- 'nucleus_tickets'
- );
-
- // these are unneeded (one of the replacements above takes care of them)
- // 'nucleus_plugin_event',
- // 'nucleus_plugin_option',
- // 'nucleus_plugin_option_desc',
- // 'nucleus_skin_desc',
- // 'nucleus_template_desc',
-
- $aTableNamesPrefixed = array(
- $MYSQL_PREFIX . 'nucleus_actionlog',
- $MYSQL_PREFIX . 'nucleus_ban',
- $MYSQL_PREFIX . 'nucleus_blog',
- $MYSQL_PREFIX . 'nucleus_category',
- $MYSQL_PREFIX . 'nucleus_comment',
- $MYSQL_PREFIX . 'nucleus_config',
- $MYSQL_PREFIX . 'nucleus_item',
- $MYSQL_PREFIX . 'nucleus_karma',
- $MYSQL_PREFIX . 'nucleus_member',
- $MYSQL_PREFIX . 'nucleus_plugin',
- $MYSQL_PREFIX . 'nucleus_skin',
- $MYSQL_PREFIX . 'nucleus_template',
- $MYSQL_PREFIX . 'nucleus_team',
- $MYSQL_PREFIX . 'nucleus_activation',
- $MYSQL_PREFIX . 'nucleus_tickets'
- );
-
- // these are unneeded (one of the replacements above takes care of them)
- // $MYSQL_PREFIX . 'nucleus_plugin_event',
- // $MYSQL_PREFIX . 'nucleus_plugin_option',
- // $MYSQL_PREFIX . 'nucleus_plugin_option_desc',
- // $MYSQL_PREFIX . 'nucleus_skin_desc',
- // $MYSQL_PREFIX . 'nucleus_template_desc',
-
- $count = count($queries);
-
- for ( $idx = 0; $idx < $count; $idx++ )
- {
- $query = trim($queries[$idx]);
- // echo "QUERY = <small>" . _hsc($query) . "</small><p>";
-
- if ( $query )
- {
-
- if ( $MYSQL_PREFIX )
- {
- $query = str_replace($aTableNames, $aTableNamesPrefixed, $query);
- } // end if
-
- if ( !sql_query($query) )
- {
- $errors['install'][] = _ERROR13 . ' (<small>' . _hsc($query) . '</small>): ' . sql_error();
- }
-
- } // end if
-
- } // end loop
-
- // 5a. make first post
- $newpost = "INSERT INTO ". tableName('nucleus_item')
- . " VALUES (1, '" . _1ST_POST_TITLE . "', '" . _1ST_POST . "', '" . _1ST_POST2 . "', 1, 1, '2005-08-15 11:04:26', 0, 0, 0, 1, 0, 1)";
- if ( !sql_query($newpost) )
- {
- $errors['install'][] = _ERROR13 . ' (<small>' . _hsc($newpost) . '</small>): ' . sql_error();
- }
-
- // 6. update global settings
- updateConfig('IndexURL', $config_indexurl);
- updateConfig('AdminURL', $config_adminurl);
- updateConfig('MediaURL', $config_mediaurl);
- updateConfig('SkinsURL', $config_skinsurl);
- updateConfig('PluginURL', $config_pluginurl);
- updateConfig('ActionURL', $config_actionurl);
- updateConfig('AdminEmail', $config_adminemail);
- updateConfig('SiteName', $config_sitename);
- updateConfig('Locale', i18n::get_current_locale());
-
- // 7. update GOD member
- $query = 'UPDATE ' . tableName('nucleus_member')
- . " SET mname = '" . sql_real_escape_string($user_name) . "',"
- . " mrealname = '" . sql_real_escape_string($user_realname) . "',"
- . " mpassword = '" . md5(sql_real_escape_string($user_password) ) . "',"
- . " murl = '" . sql_real_escape_string($config_indexurl) . "',"
- . " memail = '" . sql_real_escape_string($user_email) . "',"
- . " madmin = 1, mcanlogin = 1"
- . " WHERE mnumber = 1";
-
- if ( !sql_query($query) )
- {
- $errors['install'][] = _ERROR14 . ': ' . sql_error();
- }
-
- // 8. update weblog settings
- $query = 'UPDATE ' . tableName('nucleus_blog')
- . " SET bname = '" . sql_real_escape_string($blog_name) . "',"
- . " bshortname = '" . sql_real_escape_string($blog_shortname) . "',"
- . " burl = '" . sql_real_escape_string($config_indexurl) . "'"
- . " WHERE bnumber = 1";
-
- if ( !sql_query($query) )
- {
- $errors['install'][] = _ERROR15 . ': ' . sql_error();
- }
-
- // 8-2. update category settings
- $query = 'UPDATE ' . tableName('nucleus_category')
- . " SET cname = '" . _GENERALCAT_NAME . "',"
- . " cdesc = '" . _GENERALCAT_DESC . "'"
- . " WHERE catid = 1";
-
- if ( !sql_query($query) )
- {
- $errors['install'][] = _ERROR15 . ': ' . sql_error();
- }
-
- // 9. update item date
- $query = 'UPDATE ' . tableName('nucleus_item')
- . " SET itime = '" . date('Y-m-d H:i:s', time() ) ."'"
- . " WHERE inumber = 1";
-
- if ( !sql_query($query) )
- {
- $errors['install'][] = _ERROR16 . ': ' . sql_error();
- }
-
- sql_close();
-
- global $aConfPlugsToInstall, $aConfSkinsToImport;
- $aSkinErrors = array();
- $aPlugErrors = array();
-
- if ( (count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) )
- {
- // 10. set global variables
- global $DIR_NUCLEUS, $DIR_MEDIA, $DIR_SKINS, $DIR_PLUGINS, $DIR_LOCALES, $DIR_LIBS;
- $DIR_NUCLEUS = $config_adminpath;
- $DIR_MEDIA = $config_mediapath;
- $DIR_SKINS = $config_skinspath;
- $DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';
- $DIR_LOCALES = $DIR_NUCLEUS . 'locales/';
- $DIR_LIBS = $DIR_NUCLEUS . 'libs/';
-
- // Are utilized in the installCustomPlugs and installCustomSkins functions.
- include_once($DIR_LIBS . 'globalfunctions.php');
- global $manager;
- if ( !isset($manager) )
- {
- $manager = new MANAGER;
- }
-
- // 11. install custom skins
- $aSkinErrors = installCustomSkins();
- if ( count($aSkinErrors) > 0 )
- {
- array_push($errors['install'], $aSkinErrors);
- }
- $defskinQue = 'SELECT sdnumber FROM ' . tableName('nucleus_skin_desc') . " WHERE sdname='default'";
- $res = sql_query($defskinQue);
- $obj = sql_fetch_assoc($res);
- $defSkinID = $obj['sdnumber'];
- $updateQuery = 'UPDATE ' . tableName('nucleus_blog') . ' SET bdefskin=' . intval($defSkinID) . ' WHERE bnumber=1';
- sql_query($updateQuery);
- $updateQuery = 'UPDATE ' . tableName('nucleus_config') . ' SET value=' . intval($defSkinID). " WHERE name='BaseSkin'";
- sql_query($updateQuery);
-
- // 12. install custom plugins
- $aPlugErrors = installCustomPlugs($manager);
- if ( count($aPlugErrors) > 0 )
- {
- array_push($errors['install'], $aPlugErrors);
- }
- }
-
- // 13. Write config file ourselves (if possible)
- $config_data = '<' . '?php' . "\n\n";
- $config_data .= "// mySQL connection information\n";
- $config_data .= "\$MYSQL_HOST = '" . $MYSQL_HOST . "';\n";
- $config_data .= "\$MYSQL_USER = '" . $MYSQL_USER . "';\n";
- $config_data .= "\$MYSQL_PASSWORD = '" . $MYSQL_PASSWORD . "';\n";
- $config_data .= "\$MYSQL_DATABASE = '" . $MYSQL_DATABASE . "';\n";
- $config_data .= "\$MYSQL_PREFIX = '" . $MYSQL_PREFIX . "';\n";
- $config_data .= "// new in 3.50. first element is db handler, the second is the db driver used by the handler\n";
- $config_data .= "// default is \$MYSQL_HANDLER = array('mysql','mysql');\n";
- $config_data .= "//\$MYSQL_HANDLER = array('mysql','mysql');\n";
- $config_data .= "//\$MYSQL_HANDLER = array('pdo','mysql');\n";
- $config_data .= "\$MYSQL_HANDLER = array('".$MYSQL_HANDLER[0]."','".$MYSQL_HANDLER[1]."');\n";
- $config_data .= "\n";
- $config_data .= "// main nucleus directory\n";
- $config_data .= "\$DIR_NUCLEUS = '" . $config_adminpath . "';\n";
- $config_data .= "\n";
- $config_data .= "// path to media dir\n";
- $config_data .= "\$DIR_MEDIA = '" . $config_mediapath . "';\n";
- $config_data .= "\n";
- $config_data .= "// extra skin files for imported skins\n";
- $config_data .= "\$DIR_SKINS = '" . $config_skinspath . "';\n";
- $config_data .= "\n";
- $config_data .= "// these dirs are normally sub dirs of the nucleus dir, but \n";
- $config_data .= "// you can redefine them if you wish\n";
- $config_data .= "\$DIR_PLUGINS = \$DIR_NUCLEUS . 'plugins/';\n";
- $config_data .= "\$DIR_LOCALES = \$DIR_NUCLEUS . 'locales/';\n";
- $config_data .= "\$DIR_LIBS = \$DIR_NUCLEUS . 'libs/';\n";
- $config_data .= "\n";
- $config_data .= "// include libs\n";
- $config_data .= "include(\$DIR_LIBS.'globalfunctions.php');\n";
- $config_data .= "?" . ">";
-
- $errors['config_data'] = $config_data;
-
- if ( @!file_exists('../config.php')
- || (@file_exists('../config.php') && is_writable('../config.php')) )
- {
- if ( $fp = @fopen('../config.php', 'w') )
- {
- $result = @fwrite($fp, $config_data, i18n::strlen($config_data) );
- fclose($fp);
-
- if ( $result )
- {
- unset($errors['config_data']);
- if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' )
- {
- @chmod('../config.php', 0444);
- }
- } // end if
- }
- } // end if
-
- if ( count($errors['install']) > 0 )
- {
- return false;
- }
- return true;
-} // end function doInstall()
-
-/**
- * Verifying that you can write to the configuration file
- */
-function canConfigFileWritable()
-{
- global $errors;
-
- // tell people how they can have their config file filled out automatically
- if ( @file_exists('../config.php') && @!is_writable('../config.php') )
- {
- // try to change the permissions.
- if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' )
- {
- @chmod('../config.php', 0666);
- }
-
- if ( @!is_writable('../config.php') )
- {
- $errors['config'] = _ERROR17;
- return false;
- }
- } // end if
-
- return true;
-}
-
-/**
- * To obtain the version of MySQL
- *
- * @return string
- */
-function getMySqlVersion()
-{
- global $minimum_mysql_version, $errors;
- // Turn on output buffer
- // Needed to repress the output of the sql function that are
- // not part of php (in this case the @ operator doesn't work)
- ob_start();
-
- // note: this piece of code is taken from phpMyAdmin
- $conn = sql_connect_args('localhost', '', '');
- $result = @sql_query('SELECT VERSION() AS version', $conn);
-
- if ( $result != FALSE && sql_num_rows($result) > 0 )
- {
- $row = sql_fetch_array($result);
- $match = i18n::explode('.', $row['version']);
- }
- else
- {
- $result = @sql_query('SHOW VARIABLES LIKE \'version\'', $conn);
-
- if ( $result != FALSE && @sql_num_rows($result) > 0 )
- {
- $row = sql_fetch_row($result);
- $match = i18n::explode('.', $row[1]);
- }
- else
- {
- //$output = shell_exec('mysql -V');
- $output = ( function_exists('shell_exec') ) ? @shell_exec('mysql -V') : '0.0.0';
- preg_match('@[0-9]+\.[0-9]+\.[0-9]+@', $output, $version);
- $match = i18n::explode('.', $version[0]);
-
- if ( $match[0] == '' )
- {
- $match = array('0', '0', '0');
- } // end if
-
- } // end if
-
- } // end if
-
- @sql_disconnect($conn);
-
- //End and clean output buffer
- ob_end_clean();
-
- $mysqlVersion = implode($match, '.');
-
- if ( $mysqlVersion < $minimum_mysql_version )
- {
- $errors['mysql'] = sprintf(_ERROR18 , $minimum_mysql_version);
- }
-
- if ( $mysqlVersion == '0.0.0' )
- {
- return _ERROR19;
- }
- else
- {
- return $mysqlVersion;
- }
-}
-
-
-/**
- * To obtain information of the directory and path where you want to install the Nucleus.
- */
-function getURLAndPath()
-{
- // no need to this all! dirname(__FILE__) is all we need -- moraes
- /*
- // discover full path
- $fullPath = serverVar('PATH_TRANSLATED');
-
- if ($fullPath == '') {
- $fullPath = serverVar('SCRIPT_FILENAME');
- }
-
- $base_path = str_replace('./index.php', '', $fullPath);
- $base_path = replace_double_backslash($base_path);
- $base_path = replace_double_backslash($base_path);
-
- // add slash at end if necessary
- if (!ends_with_slash($base_path) ) {
- $base_path .= '/';
- }
- */
-
- /**
- * In the code below, there used to be if conditions within the form's HTML that conditionally echoed the URLs.
- *
- * For example:
- * if ($base_path) . . .
- * Or:
- * if ($url) . . .
- *
- * I removed this and simplified below, because PHP's type casting will make these always evaluate to TRUE.
- * At least currently, $base_path will always be non-empty, since the trailing slash is appended to it.
- * Similarly, $index_url will always be non-empty, since the 'http://' is prepended to it.
- * Non-empty, non-zero strings evaluated in if conditions are always cast to boolean TRUE.
- * The if conditions were accomplishing nothing (currently) and we should avoid using such comparisons, anyway.
- * If we need to check for a blank/empty string, use empty().
- *
- * I was initially replacing those if conditions with ternary operators for empty(), but then I realized
- * they will never be empty.
- *
- * In addition, I decided to remove the PHP logic from within the form and set up separate variables (they were
- * all just $url before), so the form just echos the values as needed.
- * - gregorlove 7/13/2011 5:56 PM
- */
-
- /* base path */
- $this_dir = implode('/', i18n::explode(DIRECTORY_SEPARATOR, dirname(__FILE__)));
- $base_path = realpath($this_dir . '/..');
- $pwd = preg_replace("#$base_path/#", '', $this_dir);
-
- # Index URL
- $index_url = 'http://' . serverVar('HTTP_HOST') . serverVar('PHP_SELF');
- $index_url = preg_replace("#$pwd/index.php#", '', $index_url);
- $index_url = replace_double_backslash($index_url);
-
- // add slash at end if necessary
- if ( !ends_with_slash($base_path) )
- {
- $base_path .= '/';
- }
- if ( !ends_with_slash($index_url) )
- {
- $index_url .= '/';
- }
-
- # Admin URL and path
- $admin_url = $index_url . 'nucleus/';
- $admin_path = $base_path . 'nucleus/';
-
- # Media URL and path
- $media_url = $index_url . 'media/';
- $media_path = $base_path . 'media/';
-
- # Skins URL and path
- $skins_url = $index_url . 'skins/';
- $skins_path = $base_path . 'skins/';
-
- # Plugins URL
- $plugins_url = $admin_url . 'plugins/';
-
- # Action URL
- $action_url = $index_url . 'action.php';
-
- $_SESSION['IndexURL'] = $index_url;
- $_SESSION['AdminURL'] = $admin_url;
- $_SESSION['AdminPath'] = $admin_path;
- $_SESSION['MediaURL'] = $media_url;
- $_SESSION['MediaPath'] = $media_path;
- $_SESSION['SkinsURL'] = $skins_url;
- $_SESSION['SkinsPath'] = $skins_path;
- $_SESSION['PluginURL'] = $plugins_url;
- $_SESSION['ActionURL'] = $action_url;
-
-}
-
-/**
- * Add a table prefix if it is used
- *
- * @param string $input table name with prefix
- * @return string
- */
-function tableName($input)
-{
- if ( $_SESSION['mysql_tablePrefix'] )
- {
- return $_SESSION['mysql_tablePrefix'] . $input;
- }
- else
- {
- return $input;
- } // end if
-
-}
-
-
-
-/**
- * Install custom plugins
- *
- * @param object $manager MANAGER class instance
- */
-function installCustomPlugs($manager)
-{
- global $aConfPlugsToInstall, $DIR_LIBS;
-
- $aErrors = array();
-
- if ( count($aConfPlugsToInstall) == 0 )
- {
- return $aErrors;
- }
-
- $res = sql_query('SELECT * FROM ' . tableName('nucleus_plugin') );
- $numCurrent = sql_num_rows($res);
-
- foreach ( $aConfPlugsToInstall as $plugName )
- {
- // do this before calling getPlugin (in case the plugin id is used there)
- $query = 'INSERT INTO ' . tableName('nucleus_plugin') . ' (porder, pfile) VALUES (' . (++$numCurrent) . ", '" . sql_real_escape_string($plugName) . "')";
- sql_query($query);
-
- // get and install the plugin
- $manager->clearCachedInfo('installedPlugins');
- $plugin =& $manager->getPlugin($plugName);
- $plugin->setID($numCurrent);
-
- if ( !$plugin )
- {
- sql_query('DELETE FROM ' . tableName('nucleus_plugin') . " WHERE pfile = '" . sql_real_escape_string($plugName) . "'");
- $numCurrent--;
- array_push($aErrors, sprintf(_ERROR20 ,$plugName));
- continue;
- } // end if
-
- $plugin->install();
- } // end loop
-
- // SYNC PLUGIN EVENT LIST
- sql_query('DELETE FROM ' . tableName('nucleus_plugin_event') );
-
- // loop over all installed plugins
- $res = sql_query('SELECT pid, pfile FROM ' . tableName('nucleus_plugin') );
-
- while ( $o = sql_fetch_object($res) )
- {
- $pid = $o->pid;
- $plug =& $manager->getPlugin($o->pfile);
-
- if ( $plug )
- {
- $eventList = $plug->getEventList();
-
- foreach ( $eventList as $eventName )
- {
- sql_query('INSERT INTO ' . tableName('nucleus_plugin_event') . ' (pid, event) VALUES (' . $pid . ", '" . $eventName . "')");
- } // end loop
-
- } // end if
-
- } // end loop
-
- return $aErrors;
-} // end function installCustomPlugs()
-
-
-/**
- * Install custom skins
- * Prepares the installation of custom skins
- */
-function installCustomSkins()
-{
- global $aConfSkinsToImport, $DIR_LIBS, $DIR_SKINS;
-
- $aErrors = array();
-
- if ( count($aConfSkinsToImport) == 0 )
- {
- return $aErrors;
- }
-
- // load skinie class
- include_once($DIR_LIBS . 'skinie.php');
-
- $importer = new SKINIMPORT();
-
- foreach ( $aConfSkinsToImport as $skinName )
- {
- $importer->reset();
- $skinFile = $DIR_SKINS . $skinName . '/skinbackup.xml';
-
- if ( !@file_exists($skinFile) )
- {
- array_push($aErrors, sprintf(_ERROR21, $skinFile));
- continue;
- } // end if
-
- $error = $importer->readFile($skinFile);
-
- if ( $error )
- {
- array_push($aErrors, sprintf(_ERROR22, $skinName) . ' : ' . $error);
- continue;
- } // end if
-
- $error = $importer->writeToDatabase(1);
-
- if ( $error )
- {
- array_push($aErrors, sprintf(_ERROR22, $skinName) . ' : ' . $error);
- continue;
- } // end if
-
- } // end loop
-
- return $aErrors;
-} // end function installCustomSkins()
-
-
-/**
- * Check if some important files of the Nucleus CMS installation are available
- * Give an error if one or more files are not accessible
- */
-function doCheckFiles()
-{
- $missingfiles = array();
- $files = array(
- './install.sql',
- '../index.php',
- '../action.php',
- '../nucleus/index.php',
- '../nucleus/media.php',
- '../nucleus/libs/globalfunctions.php',
- '../nucleus/libs/ADMIN.php',
- '../nucleus/libs/BLOG.php',
- '../nucleus/libs/COMMENT.php',
- '../nucleus/libs/COMMENTS.php',
- '../nucleus/libs/ITEM.php',
- '../nucleus/libs/MEMBER.php',
- '../nucleus/libs/SKIN.php',
- '../nucleus/libs/TEMPLATE.php',
- '../nucleus/libs/MEDIA.php',
- '../nucleus/libs/ACTIONLOG.php',
- '../nucleus/libs/vars4.1.0.php',
- '../nucleus/libs/i18n.php',
- '../nucleus/libs/mysql.php',
- '../nucleus/libs/sql/mysql.php'
- );
-
- $count = count($files);
-
- for ( $i = 0; $i < $count; $i++ )
- {
-
- if ( !is_readable($files[$i]) )
- {
- array_push( $missingfiles, 'File <b>' . $files[$i] . '</b> is missing or not readable.<br />');
- } // end if
-
- } // end loop
-
- if ( count($missingfiles) > 0 )
- {
- exit(implode( "\n", $missingfiles));
- } // end if
-
-} // end function doCheckFiles()
-
-
-/**
- * Updates the configuration in the database
- *
- * @param string $name name of the config var
- * @param string $value new value of the config var
- * @return int
- */
-function updateConfig($name, $value)
-{
- global $errors;
- $name = addslashes($name);
- $value = trim(addslashes($value) );
-
- $query = 'UPDATE ' . tableName('nucleus_config')
- . " SET `value` = '$value'"
- . " WHERE `name` = '$name'";
-
- if ( !sql_query($query) )
- {
- $errors['install'][] = _ERROR13 . ': ' . sql_error();
- }
- return sql_insert_id();
-}
-
-
-/**
- * Replaces double backslashs
- *
- * @param string $input string that could have double backslashs
- * @return string
- */
-function replace_double_backslash($input)
-{
- return str_replace('\\', '/', $input);
-}
-
-
-/**
- * Checks if a string ends with a slash
- *
- * @param string $input
- * @return string
- */
-function ends_with_slash($input)
-{
- return ( i18n::strrpos($input, '/') == i18n::strlen($input) - 1);
-}
-
-
-/**
- * Checks if email address is valid
- *
- * @param string $address address which should be tested
- * @return bool
- */
-function _isValidMailAddress($address)
-{
-
- if ( preg_match("/^[a-zA-Z0-9\._-]+@[A-Za-z0-9\._-]+\.[A-Za-z]{2,6}$/", $address) )
- {
- return TRUE;
- }
- else
- {
- return FALSE;
- } // end if
-
-}
-
-
-/*
- * Check if short blog names and nicknames are allowed
- * Returns true if the given string is a valid shortname
- * logic: only letters and numbers are allowed, no spaces allowed
- *
- * FIX: function eregi is deprecated since PHP 5.3.0
- *
- * @param string $name name which should be tested
- * @return bool
- */
-function _isValidShortName($name)
-{
-
- if ( preg_match("/^[a-z0-9]+$/i", $name) )
- {
- return TRUE;
- }
- else
- {
- return FALSE;
- } // end if
-
-}
-
-
-/*
- * Check if a display name is allowed
- * Returns true if the given string is a valid display name
- *
- * FIX: function eregi is deprecated since PHP 5.3.0
- *
- * @param string $name name which should be tested
- * @return bool
- */
-function _isValidDisplayName($name)
-{
-
- if ( preg_match("/^[a-z0-9]+[a-z0-9 ]*[a-z0-9]+$/i", $name) )
- {
- return TRUE;
- }
- else
- {
- return FALSE;
- } // end if
-
-}
-
-/**
- * _hsc
- * htmlspecialchars wrapper
- *
- * NOTE: htmlspecialchars_decode() is ASCII-to-ACII conversion
- * and its target string consists of several letters.
- * There are no problems.
- *
- * @static
- * @access public
- * @param string $string target string
- * @param string $quotation quotation mode. please refer to the argument of PHP built-in htmlspecialchars
- * @return string escaped string
- *
- */
-function _hsc($string, $quotation=ENT_QUOTES)
-{
- /*
- * we can use 'double_encode' flag instead of this when dropping supports for PHP 5.2.2 or lower
- */
- $string = htmlspecialchars_decode($string, $quotation);
- return (string) htmlspecialchars($string, $quotation, i18n::get_current_charset());
-}
-
-/* for the non-php systems that decide to show the contents:
-?></div>
-<?php
-*/
+<?php\r
+/*\r
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
+ * Copyright (C) 2002-2012 The Nucleus Group\r
+ *\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ * (see nucleus/documentation/index.html#license for more info)\r
+ *\r
+ * This script will install the Nucleus tables in your SQL-database,\r
+ * and initialize the data in those tables.\r
+ */\r
+\r
+/**\r
+ * @license http://nucleuscms.org/license.txt GNU General Public License\r
+ * @copyright Copyright (C) 2002-2012 The Nucleus Group\r
+ * @version $Id: index.php 1745 2012-04-12 23:45:47Z sakamocchi $\r
+ */\r
+\r
+/* global values initialize */\r
+$CONF = array();\r
+\r
+/* reporting all errors for support */\r
+error_reporting(E_ALL);\r
+\r
+$minimum_php_version = '5.0.6';\r
+$minimum_mysql_version = '3.23';\r
+\r
+$page_footer_copyright = '© 2001-2012 The Nucleus Groupe . Running Nucleus CMS v4.00';\r
+\r
+// begin if: server's PHP version is below the minimum; halt installation\r
+if ( version_compare(PHP_VERSION, $minimum_php_version, '<') )\r
+{\r
+ exit('<div style="font-size: xx-large;"> Nucleus requires at least PHP version ' . $minimum_php_version . '</div>');\r
+}\r
+\r
+// make sure there's no unnecessary escaping: # set_magic_quotes_runtime(0);\r
+if ( version_compare(PHP_VERSION, '5.3.0', '<') )\r
+{\r
+ ini_set('magic_quotes_runtime', '0');\r
+}\r
+\r
+/* default installed plugins and skins */\r
+$aConfPlugsToInstall = array('NP_SecurityEnforcer', 'NP_SkinFiles', 'NP_Medium');\r
+$aConfSkinsToImport = array('atom', 'rss2.0', 'rsd', 'default', 'admin/default', 'admin/bookmarklet');\r
+\r
+// Check if some important files\r
+do_check_files();\r
+\r
+/* i18n class is needed for internationalization */\r
+include_once('../nucleus/libs/i18n.php');\r
+if ( !i18n::init('UTF-8', '../nucleus/locales') )\r
+{\r
+ exit('<div style="font-size: xx-large;"> Failed to initialize iconv or mbstring extension. Would you please contact the administrator of your PHP server? </div>');\r
+}\r
+\r
+// include core classes that are needed for login & plugin handling\r
+\r
+// added for 3.5 sql_* wrapper\r
+global $MYSQL_HANDLER;\r
+\r
+if ( !isset($MYSQL_HANDLER) )\r
+{\r
+ $MYSQL_HANDLER = array('mysql', '');\r
+ \r
+ // check if mysql support is installed; this check may not make sense, as is, in a version past 3.5x\r
+ if ( !function_exists('mysql_query') && !function_exists('mysqli_query') )\r
+ {\r
+ exit('<div style="font-size: xx-large;"> Your PHP version does not have support for MySQL :( </div>');\r
+ }\r
+}\r
+include_once('../nucleus/libs/sql/sql.php');\r
+\r
+session_start();\r
+if ( count($_GET) == 0 && count($_POST) == 0 )\r
+{\r
+ unset($_SESSION['param_manager']);\r
+}\r
+\r
+// restore the $param from the session\r
+if ( array_key_exists('param_manager', $_SESSION) )\r
+{\r
+ $param = $_SESSION['param_manager'];\r
+}\r
+else\r
+{\r
+ $param = new ParamManager();\r
+}\r
+\r
+// include translation file\r
+if ( array_key_exists('locale', $_POST) ) $param->set_locale();\r
+i18n::set_current_locale($param->locale);\r
+$translation_file = './locales/' . i18n::get_current_locale() . '.' . i18n::get_current_charset() . '.php';\r
+if ( !file_exists($translation_file) )\r
+{\r
+ $translation_file = './locales/en_Latn_US.UTF-8.php';\r
+}\r
+include($translation_file);\r
+\r
+do_action();\r
+\r
+// $param is saved to the session\r
+if ( isset($param) )\r
+{\r
+ $_SESSION['param_manager'] = $param;\r
+}\r
+else\r
+{\r
+ unset($_SESSION['param_manager']);\r
+}\r
+exit;\r
+\r
+/**\r
+ * installer action\r
+ */\r
+function do_action()\r
+{\r
+ global $param;\r
+\r
+ if ( array_key_exists('action', $_POST) )\r
+ {\r
+ $isPostback = true;\r
+ }\r
+ else\r
+ {\r
+ $isPostback = false;\r
+ }\r
+\r
+ // mode change\r
+ if ( array_key_exists('mode', $_REQUEST) )\r
+ {\r
+ if ( $_REQUEST['mode'] == 'detail' )\r
+ {\r
+ $param->set_state('detail');\r
+ }\r
+ elseif ( $_REQUEST['mode'] == 'simple' )\r
+ {\r
+ $param->set_state('mysql');\r
+ }\r
+ }\r
+\r
+ // input parameter check\r
+ if ( $isPostback )\r
+ {\r
+ switch ( $param->state )\r
+ {\r
+ case 'locale':\r
+ $param->set_locale();\r
+ $param->set_state('mysql');\r
+ $isPostback = false;\r
+ break;\r
+ case 'mysql':\r
+ if ( count($param->check_mysql_parameters()) == 0 )\r
+ {\r
+ $param->set_state('weblog');\r
+ $isPostback = false;\r
+ }\r
+ break;\r
+ case 'weblog':\r
+ if ( count($param->check_user_parameters()) == 0\r
+ && count($param->check_weblog_parameters()) == 0 )\r
+ {\r
+ $param->set_state('install');\r
+ $isPostback = false;\r
+ }\r
+ break;\r
+ case 'detail':\r
+ if ( $param->check_all_parameters() )\r
+ {\r
+ $param->set_state('install');\r
+ $isPostback = false;\r
+ }\r
+ break;\r
+ }\r
+ }\r
+\r
+ // page render\r
+ show_header();\r
+ switch ( $param->state )\r
+ {\r
+ case 'locale':\r
+ show_select_locale_form();\r
+ break;\r
+ case 'mysql':\r
+ show_database_setting_form($isPostback);\r
+ break;\r
+ case 'weblog':\r
+ show_blog_setting_form($isPostback);\r
+ break;\r
+ case 'detail':\r
+ show_detail_setting_form($isPostback);\r
+ break;\r
+ case 'install':\r
+ show_install_complete_form();\r
+ break;\r
+ }\r
+ show_footer();\r
+}\r
+\r
+/**\r
+ * header tag of the installation screens\r
+ **/\r
+function show_header()\r
+{\r
+ global $param;\r
+\r
+ /* HTTP 1.1 application for no caching */\r
+ header("Cache-Control: no-cache, must-revalidate");\r
+ header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");\r
+ header('Content-Type: text/html; charset=' . i18n::get_current_charset());\r
+?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+ <head>\r
+ <title><?php echo _TITLE; ?></title>\r
+ <link rel="stylesheet" type="text/css" href="./styles/inst.css" />\r
+ <style type="text/css">\r
+ <!--\r
+ <?php echo _BODYFONTSTYLE; ?>\r
+ -->\r
+ </style>\r
+ <script type="text/javascript">\r
+ function SelectText( element ) {\r
+ window.setTimeout( function() { element.select() }, 0 );\r
+ }\r
+ var isSubmit = false;\r
+ function OnceSubmit() {\r
+ if (!isSubmit) {\r
+ isSubmit = true;\r
+ window.setTimeout( function() { isSubmit = false; }, 10000 );\r
+ return true;\r
+ }\r
+ return false;\r
+ }\r
+ </script>\r
+ </head>\r
+ <body>\r
+ <div id="header">\r
+ <div id="navigation">\r
+ <h1><img src="./styles/nucleus_rogo.png" alt="NucleusCMS" /></h1>\r
+ <ul>\r
+<?php\r
+ if ( in_array($param->state, array('mysql', 'weblog', 'install')) )\r
+ {\r
+ echo '<li>', _STEP1, '</li><li';\r
+ if ( $param->state == 'mysql' )\r
+ {\r
+ echo ' class="gry"';\r
+ }\r
+ echo '> > ', _STEP2, '</li><li';\r
+ if ( in_array($param->state, array('mysql', 'weblog')) )\r
+ {\r
+ echo ' class="gry"';\r
+ }\r
+ echo '> > ', _STEP3, "</li>\n";\r
+ }\r
+ if ( in_array($param->state, array('mysql', 'weblog', 'detail')) )\r
+ {\r
+ echo '<li class="rightbox">';\r
+ if ( in_array($param->state, array('mysql', 'weblog')) )\r
+ {\r
+ echo '<a href="./?mode=detail">', _MODE2, '</a>';\r
+ }\r
+ else\r
+ {\r
+ echo '<a href="./?mode=simple">', _MODE1, '</a>';\r
+ }\r
+ echo '</li>';\r
+ }\r
+?>\r
+ </ul>\r
+ </div>\r
+ </div>\r
+<?php\r
+}\r
+\r
+/**\r
+ * footer tag of the installation screens\r
+ **/\r
+function show_footer()\r
+{\r
+ global $page_footer_copyright;\r
+?>\r
+ <div id="footer">\r
+ <?php echo $page_footer_copyright; ?>\r
+ </div>\r
+ </body>\r
+</html>\r
+<?php\r
+}\r
+\r
+/**\r
+ * Display the form for language select\r
+ */\r
+function show_select_locale_form()\r
+{\r
+ // get locale list\r
+ $localelist = i18n::get_available_locale_list();\r
+ $locales = array();\r
+ foreach ( $localelist as $locale ) {\r
+ $checkfile = './locales/' . $locale . '.' . i18n::get_current_charset() . '.php';\r
+ $locales[] = array( $locale, (!file_exists($checkfile) ? '* ' : '') . $locale );\r
+ }\r
+?>\r
+ <div id="container">\r
+ <p style="font-size:152%;font-weight:bold;">\r
+ Select your locale:\r
+ </p>\r
+ <form method="post" action="./index.php">\r
+\r
+ <div class="prt">\r
+ <select name="locale">\r
+<?php\r
+ // Get the browser language that can be displayed\r
+ // TODO: default locale select simple implementation\r
+ $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);\r
+ $language = (is_array($languages) && count($languages) > 0) ? preg_replace('#^([\w]+).*$#', '$1', $languages[0]) : '';\r
+\r
+ foreach ( $locales as $locale )\r
+ {\r
+ echo "<option value=\"$locale[0]\"";\r
+ if ( i18n::strpos($locale[0], $language) === 0 )\r
+ {\r
+ echo ' selected';\r
+ }\r
+ echo ">$locale[1]</option>\n";\r
+ }\r
+?>\r
+ </select>\r
+ <p>Nucleus is installed in the selected locale, the locale of the Asterisk prefixed will be displayed in English because there is no translation of the installer file.</p>\r
+ <p>We will wait for the translator by volunteers!</p>\r
+ </p>\r
+ <p class="sbt">\r
+ <button type="submit" name="action" value="locale" class="sbt_arw">START</button>\r
+ </p>\r
+ </div>\r
+ </form>\r
+ </div>\r
+<?php\r
+}\r
+\r
+/**\r
+ * Display the form to set up a database\r
+ * @param bool $isPostback\r
+ */\r
+function show_database_setting_form($isPostback)\r
+{\r
+ global $param, $minimum_mysql_version;\r
+\r
+ $config_writable = canConfigFileWritable();\r
+ $mysql_version = getMySqlVersion();\r
+?>\r
+ <div id="container">\r
+ <p class="msg">\r
+<?php\r
+ echo _SIMPLE_NAVI1;\r
+ if ( $config_writable != '' )\r
+ {\r
+ echo '<span class="err">', $config_writable, '</span>';\r
+ }\r
+ if ( $mysql_version == '0.0.0' )\r
+ {\r
+ echo '<span class="err">', _DBVERSION_UNKOWN, '</span>';\r
+ }\r
+ elseif ( version_compare($mysql_version, $minimum_mysql_version, '<') )\r
+ {\r
+ echo '<span class="err">', sprintf(_DBVERSION_TOOLOW, $minimum_mysql_version), '</span>';\r
+ }\r
+?>\r
+ </p>\r
+ <form method="post" action="./index.php">\r
+ <div class="prt">\r
+ <h2><?php echo _DB_HEADER; ?></h2>\r
+ <p class="msg">\r
+<?php\r
+ if ( $isPostback )\r
+ {\r
+ $errors = $param->check_mysql_parameters();\r
+ if ( is_array($errors) )\r
+ {\r
+ foreach ( $errors as $error )\r
+ {\r
+ echo '<span class="err">', $error, "</span>\n";\r
+ }\r
+ }\r
+ }\r
+?>\r
+ </p>\r
+ <table>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _DB_FIELD1; ?></span><span class="sub"><?php echo _DB_FIELD1_DESC; ?></span></th>\r
+ <td><input type="text" name="mysql_host" value="<?php echo $param->mysql_host; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _DB_FIELD2; ?></span><span class="sub"><?php echo _DB_FIELD2_DESC; ?></span></th>\r
+ <td><input type="text" name="mysql_user" value="<?php echo $param->mysql_user; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _DB_FIELD3; ?></span></th>\r
+ <td><input type="text" name="mysql_password" value="<?php echo $param->mysql_password; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _DB_FIELD4; ?></span><span class="sub"><?php echo _DB_FIELD4_DESC; ?></span></th>\r
+ <td><input type="text" name="mysql_database" value="<?php echo $param->mysql_database; ?>" /></td>\r
+ </tr>\r
+ </table>\r
+ <p class="sbt">\r
+ <button type="submit" name="mode" value="detail" class="sbt_sqr"><?php echo _MODE2; ?></button>\r
+ <button type="submit" name="action" value="mysql" class="sbt_arw"><?php echo _NEXT; ?></button>\r
+ </p>\r
+ <p class="msg">\r
+ <?php echo _DB_TEXT1; ?>\r
+ </p>\r
+ </div>\r
+ </form>\r
+ </div>\r
+<?php\r
+}\r
+\r
+/**\r
+ * Displays a form to the blog settings\r
+ * @param bool $isPostback\r
+ */\r
+function show_blog_setting_form($isPostback)\r
+{\r
+ global $param;\r
+?>\r
+ <div id="container">\r
+ <p class="msg">\r
+ <?php echo _SIMPLE_NAVI2; ?>\r
+ </p>\r
+ <form method="post" action="./index.php">\r
+ <div class="prt">\r
+ <h2><?php echo _BLOG_HEADER; ?></h2>\r
+ <p class="msg">\r
+<?php\r
+ if ( $isPostback )\r
+ {\r
+ $errors = $param->check_weblog_parameters();\r
+ if ( is_array($errors) )\r
+ {\r
+ foreach ( $errors as $error )\r
+ {\r
+ echo '<span class="err">', $error, "</span>\n";\r
+ }\r
+ }\r
+ }\r
+?>\r
+ </p>\r
+ <table>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _BLOG_FIELD1; ?></span></th>\r
+ <td><input type="text" name="blog_name" value="<?php echo $param->blog_name; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _BLOG_FIELD2; ?></span><span class="sub"><?php echo _BLOG_FIELD2_DESC; ?></span></th>\r
+ <td><input type="text" name="blog_shortname" value="<?php echo $param->blog_shortname; ?>" /></td>\r
+ </tr>\r
+ </table>\r
+ </div>\r
+\r
+ <div class="prt">\r
+ <h2><?php echo _ADMIN_HEADER; ?></h2>\r
+ <p class="msg">\r
+<?php\r
+ if ( $isPostback )\r
+ {\r
+ $errors = $param->check_user_parameters();\r
+ if ( is_array($errors) )\r
+ {\r
+ foreach ( $errors as $error )\r
+ {\r
+ echo '<span class="err">', $error, "</span>\n";\r
+ }\r
+ }\r
+ }\r
+?>\r
+ </p>\r
+ <table>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _ADMIN_FIELD1; ?></span></th>\r
+ <td><input type="text" name="user_realname" value="<?php echo $param->user_realname; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _ADMIN_FIELD2; ?></span><span class="sub"><?php echo _ADMIN_FIELD2_DESC; ?></span></th>\r
+ <td><input type="text" name="user_name" value="<?php echo $param->user_name; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _ADMIN_FIELD3; ?></span></th>\r
+ <td><input type="password" name="user_password" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _ADMIN_FIELD4; ?></span></th>\r
+ <td><input type="password" name="user_password2" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _ADMIN_FIELD5; ?></span></th>\r
+ <td><input type="text" name="user_email" value="<?php echo $param->user_email; ?>" /></td>\r
+ </tr>\r
+ </table>\r
+ <p class="sbt">\r
+ <button type="submit" name="action" value="weblog" class="sbt_arw" onclick="OnceSubmit()"><?php echo _INSTALL; ?></button>\r
+ </p>\r
+ </div>\r
+ </form>\r
+ </div>\r
+<?php\r
+}\r
+\r
+/**\r
+ * Displays a form to the detail settings\r
+ * @param bool $isPostback\r
+ */\r
+function show_detail_setting_form($isPostback)\r
+{\r
+ global $param, $minimum_mysql_version;\r
+\r
+ $mysql_version = getMySqlVersion();\r
+?>\r
+ <div id="container_detailed">\r
+ <p class="msg">\r
+ <?php echo _DETAIL_NAVI1; ?>\r
+<?php\r
+ if ( $isPostback && !$param->check_all_parameters() )\r
+ {\r
+ echo '<span class="err">', _VALID_ERROR, "</span>\n";\r
+ }\r
+?>\r
+ </p>\r
+ <ul class="msg">\r
+ <li>PHP: <?php echo phpversion(); ?></li>\r
+ <li>MySQL:\r
+<?php\r
+ echo ($mysql_version == '0.0.0') ? _DBVERSION_UNKOWN : $mysql_version;\r
+ if ( version_compare($mysql_version, $minimum_mysql_version, '<') )\r
+ {\r
+ echo '<span class="err">', sprintf(_DBVERSION_TOOLOW, $minimum_mysql_version), '</span>';\r
+ }\r
+?></li>\r
+ </ul>\r
+ <form method="post" action="">\r
+\r
+ <div class="prt">\r
+ <h2><?php echo _DETAIL_HEADER1; ?></h2>\r
+ <p class="msg">\r
+<?php\r
+ if ( $isPostback )\r
+ {\r
+ $errors = $param->check_mysql_parameters();\r
+ if ( is_array($errors) )\r
+ {\r
+ foreach ( $errors as $error )\r
+ {\r
+ echo '<span class="err">', $error, "</span>\n";\r
+ }\r
+ }\r
+ }\r
+?>\r
+ </p>\r
+ <table>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _DB_FIELD1; ?></span><span class="sub"><?php echo _DB_FIELD1_DESC; ?></span></th>\r
+ <td><input type="text" name="mysql_host" value="<?php echo $param->mysql_host; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _DB_FIELD2; ?></span><span class="sub"><?php echo _DB_FIELD2_DESC; ?></span></th>\r
+ <td><input type="text" name="mysql_user" value="<?php echo $param->mysql_user; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _DB_FIELD3; ?></span></th>\r
+ <td><input type="text" name="mysql_password" value="<?php echo $param->mysql_password; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _DB_FIELD4; ?></span><span class="sub"><?php echo _DB_FIELD4_DESC; ?></span></th>\r
+ <td><input type="text" name="mysql_database" value="<?php echo $param->mysql_database; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _DB_FIELD5; ?></span><span class="sub"><?php echo _DB_FIELD5_DESC; ?></span></th>\r
+ <td><input type="text" name="mysql_tablePrefix" value="<?php echo $param->mysql_tablePrefix; ?>" /></td>\r
+ </tr>\r
+ </table>\r
+\r
+ <h2><?php echo _DETAIL_HEADER2; ?></h2>\r
+ <p class="msg">\r
+<?php\r
+ if ( $isPostback )\r
+ {\r
+ $errors = $param->check_uri_parameters();\r
+ if ( is_array($errors) )\r
+ {\r
+ foreach ( $errors as $error )\r
+ {\r
+ echo '<span class="err">', $error, "</span>\n";\r
+ }\r
+ }\r
+ $errors = $param->check_path_parameters();\r
+ if ( is_array($errors) )\r
+ {\r
+ foreach ( $errors as $error )\r
+ {\r
+ echo '<span class="err">', $error, "</span>\n";\r
+ }\r
+ }\r
+ }\r
+?>\r
+ </p>\r
+ <table>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _PATH_FIELD1; ?></span></th>\r
+ <td><input type="text" name="IndexURL" value="<?php echo $param->IndexURL; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _PATH_FIELD2; ?></span></th>\r
+ <td><input type="text" name="AdminURL" value="<?php echo $param->AdminURL; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _PATH_FIELD3; ?></span></th>\r
+ <td><input type="text" name="AdminPath" value="<?php echo $param->AdminPath; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _PATH_FIELD4; ?></span></th>\r
+ <td><input type="text" name="MediaURL" value="<?php echo $param->MediaURL; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _PATH_FIELD5; ?></span></th>\r
+ <td><input type="text" name="MediaPath" value="<?php echo $param->MediaPath; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _PATH_FIELD6; ?></span></th>\r
+ <td><input type="text" name="SkinsURL" value="<?php echo $param->SkinsURL; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _PATH_FIELD7; ?></span></th>\r
+ <td><input type="text" name="SkinsPath" value="<?php echo $param->SkinsPath; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _PATH_FIELD8; ?></span></th>\r
+ <td><input type="text" name="PluginURL" value="<?php echo $param->PluginURL; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _PATH_FIELD9; ?></span></th>\r
+ <td><input type="text" name="ActionURL" value="<?php echo $param->ActionURL; ?>" /></td>\r
+ </tr>\r
+ </table>\r
+ <p class="msg">\r
+ <?php echo _DETAIL_TEXT3; ?>\r
+ </p>\r
+\r
+ <h2><?php echo _DETAIL_HEADER3; ?></h2>\r
+ <p class="msg">\r
+<?php\r
+ echo _DETAIL_TEXT4;\r
+ if ( $isPostback )\r
+ {\r
+ $errors = $param->check_user_parameters();\r
+ if ( is_array($errors) )\r
+ {\r
+ foreach ( $errors as $error )\r
+ {\r
+ echo '<span class="err">', $error, "</span>\n";\r
+ }\r
+ }\r
+ }\r
+?>\r
+ </p>\r
+ <table>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _ADMIN_FIELD1; ?></span></th>\r
+ <td><input type="text" name="user_realname" value="<?php echo $param->user_realname; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _ADMIN_FIELD2; ?></span><span class="sub"><?php echo _ADMIN_FIELD2_DESC; ?></span></th>\r
+ <td><input type="text" name="user_name" value="<?php echo $param->user_name; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _ADMIN_FIELD3; ?></span></th>\r
+ <td><input type="password" name="user_password" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _ADMIN_FIELD4; ?></span></th>\r
+ <td><input type="password" name="user_password2" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _ADMIN_FIELD5; ?></span></th>\r
+ <td><input type="text" name="user_email" value="<?php echo $param->user_email; ?>" /></td>\r
+ </tr>\r
+ </table>\r
+\r
+ <h2><?php echo _DETAIL_HEADER4; ?></h2>\r
+ <p class="msg">\r
+<?php\r
+ echo _DETAIL_TEXT5;\r
+ if ( $isPostback )\r
+ {\r
+ $errors = $param->check_weblog_parameters();\r
+ if ( is_array($errors) )\r
+ {\r
+ foreach ( $errors as $error )\r
+ {\r
+ echo '<span class="err">', $error, "</span>\n";\r
+ }\r
+ }\r
+ }\r
+?>\r
+ </p>\r
+ <table>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _BLOG_FIELD1; ?></span></th>\r
+ <td><input type="text" name="blog_name" value="<?php echo $param->blog_name; ?>" /></td>\r
+ </tr>\r
+ <tr>\r
+ <th><span class="nam"><?php echo _BLOG_FIELD2; ?></span><span class="sub"><?php echo _BLOG_FIELD2_DESC; ?></span></th>\r
+ <td><input type="text" name="blog_shortname" value="<?php echo $param->blog_shortname; ?>" /></td>\r
+ </tr>\r
+ </table>\r
+\r
+ <p class="msg">\r
+ <?php echo _DETAIL_TEXT6; ?>\r
+ </p>\r
+\r
+ <p class="sbt">\r
+ <button type="submit" name="action" value="detail" class="sbt_arw" onclick="OnceSubmit()"><?php echo _INSTALL; ?></button>\r
+ </p>\r
+ </div>\r
+ </form>\r
+ </div>\r
+<?php\r
+}\r
+\r
+/**\r
+ * Displays a screen to signal the completion of the installation\r
+ */\r
+function show_install_complete_form()\r
+{\r
+ global $MYSQL_HANDLER, $param;\r
+ $errors = do_install();\r
+?>\r
+ <div id="container">\r
+ <p class="msg">\r
+<?php\r
+ if ( is_array($errors) && count($errors) > 0 )\r
+ {\r
+ echo _INST_ERROR;\r
+ foreach ( $errors as $error )\r
+ {\r
+ echo '<span class="err">', $error, "</span>\n";\r
+ }\r
+ }\r
+ else\r
+ {\r
+ echo _INST_TEXT;\r
+ if ( array_key_exists('config_data', $_SESSION) )\r
+ {\r
+ echo '<span class="err">', _INST_TEXT4, '</span>';\r
+?>\r
+<textarea id="config_text" readonly="readonly" onfocus="SelectText(this);"><?php echo htmlentities($_SESSION['config_data'], null, i18n::get_current_charset()) ?></textarea>\r
+<?php\r
+ }\r
+ else\r
+ {\r
+ echo '<span class="err">', _INST_TEXT5, '</span>';\r
+ }\r
+?>\r
+ </p>\r
+ <form method="post" action="./index.php">\r
+ <div class="prt">\r
+ <h2><?php echo _INST_HEADER1; ?></h2>\r
+ <p class="msg">\r
+ <?php echo sprintf(_INST_TEXT1, $param->blog_name); ?>\r
+ </p>\r
+ <p class="sbt">\r
+ <button type="button" name="toBlog" onclick="location.href='<?php echo $param->IndexURL; ?>';" class="sbt_arw"><?php echo _INST_BUTTON1; ?></button>\r
+ </p>\r
+ </div>\r
+\r
+ <div class="prt">\r
+ <h2><?php echo _INST_HEADER2; ?></h2>\r
+ <p class="msg">\r
+ <?php echo _INST_TEXT2; ?>\r
+ </p>\r
+ <p class="sbt">\r
+ <button type="button" name="toMng" onclick="location.href='<?php echo $param->AdminURL; ?>';" class="sbt_arw"><?php echo _INST_BUTTON2; ?></button>\r
+ </p>\r
+ </div>\r
+\r
+ <div class="prt">\r
+ <h2><?php echo _INST_HEADER3; ?></h2>\r
+ <p class="msg">\r
+ <?php echo _INST_TEXT3; ?>\r
+ </p>\r
+ <p class="sbt">\r
+ <button type="button" name="toAddBlog" onclick="location.href='<?php echo $param->AdminURL; ?>index.php?action=createnewlog';" class="sbt_arw"><?php echo _INST_BUTTON3; ?></button>\r
+ </p>\r
+ </div>\r
+ </form>\r
+<?php\r
+ }\r
+?>\r
+ </div>\r
+<?php\r
+ unset($param);\r
+}\r
+\r
+/**\r
+ * The installation process itself\r
+ * @return array error messages\r
+ */\r
+function do_install()\r
+{\r
+ global $param;\r
+ global $MYSQL_HANDLER, $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_PREFIX, $MYSQL_CONN;\r
+ global $DIR_NUCLEUS, $DIR_MEDIA, $DIR_SKINS, $DIR_PLUGINS, $DIR_LANG, $DIR_LIBS;\r
+ $errors = array();\r
+\r
+ /*\r
+ * 1. put all param-vars into vars\r
+ */\r
+ $MYSQL_HOST = $param->mysql_host;\r
+ $MYSQL_USER = $param->mysql_user;\r
+ $MYSQL_PASSWORD = $param->mysql_password;\r
+ $MYSQL_DATABASE = $param->mysql_database;\r
+ $MYSQL_PREFIX = $param->mysql_tablePrefix;\r
+\r
+ $DIR_NUCLEUS = $param->AdminPath;\r
+ $DIR_MEDIA = $param->MediaPath;\r
+ $DIR_SKINS = $param->SkinsPath;\r
+ $DIR_PLUGINS = $DIR_NUCLEUS . 'plugins/';\r
+ $DIR_LOCALES = $DIR_NUCLEUS . 'locales/';\r
+ $DIR_LIBS = $DIR_NUCLEUS . 'libs/';\r
+\r
+ /*\r
+ * 2.open mySQL connection\r
+ */\r
+ $MYSQL_CONN = @DB::setConnectionInfo($MYSQL_HANDLER[1], $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD);\r
+ if ( $MYSQL_CONN == FALSE )\r
+ {\r
+ $errors[] = _DBCONNECT_ERROR;\r
+ return $errors;\r
+ }\r
+\r
+ /*\r
+ * 3. try to create database if needed\r
+ */\r
+ if ( DB::execute("CREATE DATABASE IF NOT EXISTS {$MYSQL_DATABASE}") === FALSE )\r
+ {\r
+ $errinfo = DB::getError();\r
+ $errors[] = _INST_ERROR1 . ': ' . $errinfo[2];\r
+ }\r
+\r
+ /*\r
+ * 4. try to select database\r
+ */\r
+ $MYSQL_CONN = @DB::setConnectionInfo($MYSQL_HANDLER[1], $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE);\r
+ if ( !$MYSQL_CONN )\r
+ {\r
+ $errors[] = _INST_ERROR2;\r
+ }\r
+\r
+ if ( count($errors) > 0 )\r
+ {\r
+ return $errors;\r
+ }\r
+\r
+ /*\r
+ * 5. execute queries\r
+ */\r
+ $table_names = array(\r
+ 'nucleus_actionlog',\r
+ 'nucleus_ban',\r
+ 'nucleus_blog',\r
+ 'nucleus_category',\r
+ 'nucleus_comment',\r
+ 'nucleus_config',\r
+ 'nucleus_item',\r
+ 'nucleus_karma',\r
+ 'nucleus_member',\r
+ 'nucleus_plugin',\r
+ 'nucleus_skin',\r
+ 'nucleus_template',\r
+ 'nucleus_team',\r
+ 'nucleus_activation',\r
+ 'nucleus_tickets'\r
+ );\r
+\r
+ $prefixed_table_names = array();\r
+ foreach ( $table_names as $table_name )\r
+ {\r
+ $prefixed_table_names[] = $MYSQL_PREFIX . $table_name;\r
+ }\r
+\r
+ // table exists check\r
+ $result = DB::getResult('SHOW TABLES');\r
+ foreach ( $result as $row )\r
+ {\r
+ if ( in_array($row[0], $prefixed_table_names) )\r
+ {\r
+ $errors[] = _INST_ERROR3;\r
+ break;\r
+ }\r
+ }\r
+ if ( count($errors) > 0 )\r
+ {\r
+ return $errors;\r
+ }\r
+\r
+ $filename = 'install.sql';\r
+ $fd = fopen($filename, 'r');\r
+ $queries = fread($fd, filesize($filename));\r
+ fclose($fd);\r
+\r
+ $queries = preg_split('#(;\n|;\r)#', $queries);\r
+\r
+ foreach ( $queries as $query )\r
+ {\r
+ if ( preg_match('/\w+/', $query) )\r
+ {\r
+ if ( $MYSQL_PREFIX )\r
+ {\r
+ $query = str_replace($table_names, $prefixed_table_names, $query);\r
+ }\r
+\r
+ if ( DB::execute($query) === FALSE )\r
+ {\r
+ $errinfo = DB::getError();\r
+ $errors[] = _INST_ERROR4 . ' (<small>' . $query . '</small>): ' . $errinfo[2];\r
+ }\r
+ }\r
+ }\r
+\r
+ /*\r
+ * 6. put needed records\r
+ */\r
+ /* push first post */\r
+ $query = "INSERT INTO %s VALUES (1, %s, %s, %s, 1, 1, %s, 0, 0, 0, 1, 0, 1)";\r
+ $query = sprintf($query,\r
+ tableName('nucleus_item'),\r
+ DB::quoteValue(_1ST_POST_TITLE),\r
+ DB::quoteValue(_1ST_POST),\r
+ DB::quoteValue(_1ST_POST2),\r
+ DB::formatDateTime()\r
+ );\r
+ if ( DB::execute($query) === FALSE )\r
+ {\r
+ $errinfo = DB::getError();\r
+ $errors[] = _INST_ERROR4 . ' (<small>' . $newpost . '</small>): ' . $errinfo[2];\r
+ }\r
+\r
+ /* push configurations */\r
+ array_merge($errors, updateConfig('IndexURL', $param->IndexURL));\r
+ array_merge($errors, updateConfig('AdminURL', $param->AdminURL));\r
+ array_merge($errors, updateConfig('MediaURL', $param->MediaURL));\r
+ array_merge($errors, updateConfig('SkinsURL', $param->SkinsURL));\r
+ array_merge($errors, updateConfig('PluginURL', $param->PluginURL));\r
+ array_merge($errors, updateConfig('ActionURL', $param->ActionURL));\r
+ array_merge($errors, updateConfig('AdminEmail', $param->user_email));\r
+ array_merge($errors, updateConfig('SiteName', $param->blog_name));\r
+ array_merge($errors, updateConfig('Locale', i18n::get_current_locale()));\r
+\r
+ /* push super admin */\r
+ $query = "UPDATE %s SET mname = %s, mrealname = %s, mpassword = %s, memail = %s, murl = %s, madmin = 1, mcanlogin = 1 WHERE mnumber = 1";\r
+ $query = sprintf($query,\r
+ tableName('nucleus_member'),\r
+ DB::quoteValue($param->user_name),\r
+ DB::quoteValue($param->user_realname),\r
+ DB::quoteValue(md5($param->user_password)),\r
+ DB::quoteValue($param->user_email),\r
+ DB::quoteValue($param->IndexURL)\r
+ );\r
+ if ( DB::execute($query) === FALSE )\r
+ {\r
+ $errinfo = DB::getError();\r
+ $errors[] = _INST_ERROR5 . ': ' . $errinfo[2];\r
+ }\r
+\r
+ /* push new weblog */\r
+ $query = "UPDATE %s SET bname = %s, bshortname = %s, burl = %s WHERE bnumber = 1";\r
+ $query = sprintf($query,\r
+ tableName('nucleus_blog'),\r
+ DB::quoteValue($param->blog_name),\r
+ DB::quoteValue($param->blog_shortname),\r
+ DB::quoteValue($param->IndexURL)\r
+ );\r
+ if ( DB::execute($query) === FALSE )\r
+ {\r
+ $errinfo = DB::getError();\r
+ $errors[] = _INST_ERROR6 . ': ' . $errinfo[2];\r
+ }\r
+\r
+ /* push default category */\r
+ $query = "UPDATE %s SET cname = %s, cdesc = %s WHERE catid = 1";\r
+ $query = sprintf($query,\r
+ tableName('nucleus_category'),\r
+ DB::quoteValue(_GENERALCAT_NAME),\r
+ DB::quoteValue(_GENERALCAT_DESC)\r
+ );\r
+ if ( DB::execute($query) === FALSE )\r
+ {\r
+ $errinfo = DB::getError();\r
+ $errors[] = _INST_ERROR6 . ': ' . $errinfo[2];\r
+ }\r
+\r
+ /*\r
+ * 7. install default plugins and skins\r
+ */\r
+ global $aConfPlugsToInstall, $aConfSkinsToImport;\r
+ $aSkinErrors = array();\r
+ $aPlugErrors = array();\r
+\r
+ if ( (count($aConfPlugsToInstall) > 0) || (count($aConfSkinsToImport) > 0) )\r
+ {\r
+ include_once($DIR_LIBS . 'globalfunctions.php');\r
+ global $manager;\r
+ if ( !isset($manager) )\r
+ {\r
+ $manager = new Manager();\r
+ }\r
+\r
+ include_once($DIR_LIBS . 'skinie.php');\r
+ \r
+ $aSkinErrors = installCustomSkins();\r
+ if ( count($aSkinErrors) > 0 )\r
+ {\r
+ array_merge($errors, $aSkinErrors);\r
+ }\r
+ \r
+ $query = "SELECT sdnumber FROM %s WHERE sdname='admin/default'";\r
+ $query = sprintf($query, tableName('nucleus_skin_desc'));\r
+ $res = intval(DB::getValue($query));\r
+ array_merge($errors, updateConfig('AdminSkin', $res));\r
+ \r
+ $query = "SELECT sdnumber FROM %s WHERE sdname='admin/bookmarklet'";\r
+ $query = sprintf($query, tableName('nucleus_skin_desc'));\r
+ $res = intval(DB::getValue($query));\r
+ array_merge($errors, updateConfig('BookmarkletSkin', $res));\r
+ \r
+ $query = "SELECT sdnumber FROM %s WHERE sdname='default'";\r
+ $query = sprintf($query, tableName('nucleus_skin_desc'));\r
+ $defSkinID = intval(DB::getValue($query));\r
+\r
+ $query = "UPDATE %s SET bdefskin=%d WHERE bnumber=1";\r
+ $query = sprintf($query, tableName('nucleus_blog'), $defSkinID);\r
+ DB::execute($query);\r
+ \r
+ $query = "UPDATE %s SET value=%d WHERE name='BaseSkin'";\r
+ $query = sprintf($query, tableName('nucleus_config'), $defSkinID);\r
+ DB::execute($query);\r
+\r
+ $aPlugErrors = installCustomPlugs();\r
+ if ( count($aPlugErrors) > 0 )\r
+ {\r
+ array_merge($errors, $aPlugErrors);\r
+ }\r
+ }\r
+\r
+ /*\r
+ * 8. Write config file ourselves (if possible)\r
+ */\r
+ $config_data = '<' . '?php' . "\n";\r
+ $config_data .= "// mySQL connection information\n";\r
+ $config_data .= "\$MYSQL_HOST = '" . $MYSQL_HOST . "';\n";\r
+ $config_data .= "\$MYSQL_USER = '" . $MYSQL_USER . "';\n";\r
+ $config_data .= "\$MYSQL_PASSWORD = '" . $MYSQL_PASSWORD . "';\n";\r
+ $config_data .= "\$MYSQL_DATABASE = '" . $MYSQL_DATABASE . "';\n";\r
+ $config_data .= "\$MYSQL_PREFIX = '" . $MYSQL_PREFIX . "';\n";\r
+ $config_data .= "// new in 3.50. first element is db handler, the second is the db driver used by the handler\n";\r
+ $config_data .= "// default is \$MYSQL_HANDLER = array('mysql','mysql');\n";\r
+ $config_data .= "//\$MYSQL_HANDLER = array('mysql','mysql');\n";\r
+ $config_data .= "//\$MYSQL_HANDLER = array('pdo','mysql');\n";\r
+ $config_data .= "\$MYSQL_HANDLER = array('" . $MYSQL_HANDLER[0] . "','" . $MYSQL_HANDLER[1] . "');\n";\r
+ $config_data .= "\n";\r
+ $config_data .= "// main nucleus directory\n";\r
+ $config_data .= "\$DIR_NUCLEUS = '" . $DIR_NUCLEUS . "';\n";\r
+ $config_data .= "\n";\r
+ $config_data .= "// path to media dir\n";\r
+ $config_data .= "\$DIR_MEDIA = '" . $DIR_MEDIA . "';\n";\r
+ $config_data .= "\n";\r
+ $config_data .= "// extra skin files for imported skins\n";\r
+ $config_data .= "\$DIR_SKINS = '" . $DIR_SKINS . "';\n";\r
+ $config_data .= "\n";\r
+ $config_data .= "// these dirs are normally sub dirs of the nucleus dir, but \n";\r
+ $config_data .= "// you can redefine them if you wish\n";\r
+ $config_data .= "\$DIR_PLUGINS = \$DIR_NUCLEUS . 'plugins/';\n";\r
+ $config_data .= "\$DIR_LOCALES = \$DIR_NUCLEUS . 'locales/';\n";\r
+ $config_data .= "\$DIR_LIBS = \$DIR_NUCLEUS . 'libs/';\n";\r
+ $config_data .= "\n";\r
+ $config_data .= "// include libs\n";\r
+ $config_data .= "include(\$DIR_LIBS.'globalfunctions.php');\n";\r
+ $config_data .= "?" . ">";\r
+\r
+ $result = false;\r
+ if ( @!file_exists('../config.php') || is_writable('../config.php') )\r
+ {\r
+ if ( $fp = @fopen('../config.php', 'w') )\r
+ {\r
+ $result = @fwrite($fp, $config_data, i18n::strlen($config_data));\r
+ fclose($fp);\r
+ }\r
+ }\r
+\r
+ if ( $result )\r
+ {\r
+ // try to change the read-only permission.\r
+ if ( strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' )\r
+ {\r
+ @chmod('../config.php', 0444);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ $_SESSION['config_data'] = $config_data;\r
+ }\r
+\r
+ return $errors;\r
+}\r
+\r
+/**\r
+ * Confirm that you can write to the configuration file\r
+ * @return string error message\r
+ */\r
+function canConfigFileWritable()\r
+{\r
+ if ( @file_exists('../config.php') && @!is_writable('../config.php') )\r
+ {\r
+ // try to change the read-write permission.\r
+ if ( strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' )\r
+ {\r
+ @chmod('../config.php', 0666);\r
+ }\r
+\r
+ if ( @!is_writable('../config.php') )\r
+ {\r
+ return _INST_ERROR8;\r
+ }\r
+ }\r
+ return '';\r
+}\r
+\r
+/**\r
+ * To obtain the version of MySQL\r
+ * @return string\r
+ */\r
+function getMySqlVersion()\r
+{\r
+ global $MYSQL_HANDLER, $minimum_mysql_version, $errors;\r
+ // Turn on output buffer\r
+ // Needed to repress the output of the sql function that are\r
+ // not part of php (in this case the @ operator doesn't work)\r
+ ob_start();\r
+\r
+ // note: this piece of code is taken from phpMyAdmin\r
+ $conn = @DB::setConnectionInfo($MYSQL_HANDLER[1], 'localhost', '', '');\r
+\r
+ if ( $conn )\r
+ {\r
+ $row = DB::getAttribute(PDO::ATTR_SERVER_VERSION);\r
+ $match = preg_split('#\.#', $row);\r
+ }\r
+ else\r
+ {\r
+ $row = @DB::getRow('SHOW VARIABLES LIKE \'version\'');\r
+\r
+ if ( $row )\r
+ {\r
+ $match = preg_split('#\.#', $row[1]);\r
+ }\r
+ else\r
+ {\r
+ $output = (function_exists('shell_exec')) ? @shell_exec('mysql -V') : '0.0.0';\r
+ preg_match('@[0-9]+\.[0-9]+\.[0-9]+@', $output, $version);\r
+ $match = preg_split('#\.#', $version[0]);\r
+\r
+ if ( $match[0] == '' )\r
+ {\r
+ $match = array('0', '0', '0');\r
+ }\r
+ }\r
+ }\r
+\r
+ @DB::disConnect();\r
+\r
+ //End and clean output buffer\r
+ ob_end_clean();\r
+\r
+ return implode($match, '.');\r
+}\r
+\r
+/**\r
+ * Add a table prefix if it is used\r
+ *\r
+ * @param string $input table name with prefix\r
+ * @return string\r
+ */\r
+function tableName($input)\r
+{\r
+ global $MYSQL_PREFIX;\r
+ if ( $MYSQL_PREFIX )\r
+ {\r
+ return $MYSQL_PREFIX . $input;\r
+ }\r
+ else\r
+ {\r
+ return $input;\r
+ }\r
+}\r
+\r
+/**\r
+ * Install custom plugins\r
+ */\r
+function installCustomPlugs()\r
+{\r
+ global $aConfPlugsToInstall, $DIR_LIBS, $manager;\r
+\r
+ $aErrors = array();\r
+ if ( count($aConfPlugsToInstall) == 0 )\r
+ {\r
+ return $aErrors;\r
+ }\r
+\r
+ $query = sprintf('SELECT * FROM %s', tableName('nucleus_plugin'));\r
+ $res = DB::getResult($query);\r
+ $numCurrent = $res->rowCount();\r
+\r
+ foreach ( $aConfPlugsToInstall as $plugName )\r
+ {\r
+ $query = sprintf('INSERT INTO %s (porder, pfile) VALUES (%d, %s)',\r
+ tableName('nucleus_plugin'),\r
+ (++$numCurrent),\r
+ DB::quoteValue($plugName));\r
+ DB::execute($query);\r
+\r
+ $manager->clearCachedInfo('installedPlugins');\r
+ $plugin =& $manager->getPlugin($plugName);\r
+ $plugin->setID($numCurrent);\r
+\r
+ if ( !$plugin )\r
+ {\r
+ $query = sprintf('DELETE FROM %s WHERE pfile = %s',\r
+ tableName('nucleus_plugin'),\r
+ DB::quoteValue($plugName));\r
+ DB::execute($query);\r
+ $numCurrent--;\r
+ array_push($aErrors, sprintf(_INST_ERROR9, $plugName));\r
+ continue;\r
+ }\r
+ $plugin->install();\r
+ }\r
+\r
+ $query = sprintf('DELETE FROM %s', tableName('nucleus_plugin_event'));\r
+ DB::execute($query);\r
+ $query = sprintf('SELECT pid, pfile FROM %s', tableName('nucleus_plugin'));\r
+ $res = DB::getResult($query);\r
+\r
+ foreach ( $res as $row )\r
+ {\r
+ $plug =& $manager->getPlugin($row['pfile']);\r
+\r
+ if ( $plug )\r
+ {\r
+ $eventList = $plug->getEventList();\r
+ foreach ( $eventList as $eventName )\r
+ {\r
+ $query = sprintf('INSERT INTO %s (pid, event) VALUES (%d, %s)',\r
+ tableName('nucleus_plugin_event'),\r
+ intval($row['pid']),\r
+ DB::quoteValue($eventName));\r
+ DB::execute($query);\r
+ }\r
+ }\r
+ }\r
+ return $aErrors;\r
+}\r
+\r
+/**\r
+ * Install custom skins\r
+ * Prepares the installation of custom skins\r
+ */\r
+function installCustomSkins()\r
+{\r
+ global $aConfSkinsToImport, $DIR_LIBS, $DIR_SKINS;\r
+\r
+ $aErrors = array();\r
+ if ( count($aConfSkinsToImport) == 0 )\r
+ {\r
+ return $aErrors;\r
+ }\r
+\r
+ $importer = new SkinImport();\r
+\r
+ foreach ( $aConfSkinsToImport as $skinName )\r
+ {\r
+ $importer->reset();\r
+ $skinFile = $DIR_SKINS . $skinName . '/skinbackup.xml';\r
+\r
+ if ( !@file_exists($skinFile) )\r
+ {\r
+ array_push($aErrors, sprintf(_INST_ERROR10, $skinFile));\r
+ continue;\r
+ }\r
+\r
+ $error = $importer->readFile($skinFile);\r
+\r
+ if ( $error )\r
+ {\r
+ array_push($aErrors, sprintf(_INST_ERROR11, $skinName) . ' : ' . $error);\r
+ continue;\r
+ }\r
+\r
+ $error = $importer->writeToDatabase(1);\r
+\r
+ if ( $error )\r
+ {\r
+ array_push($aErrors, sprintf(_INST_ERROR12, $skinName) . ' : ' . $error);\r
+ continue;\r
+ }\r
+ }\r
+ return $aErrors;\r
+}\r
+\r
+/**\r
+ * Check if some important files of the Nucleus CMS installation are available\r
+ * Give an error if one or more files are not accessible\r
+ */\r
+function do_check_files()\r
+{\r
+ $missingfiles = array();\r
+ $files = array(\r
+ './install.sql',\r
+ '../index.php',\r
+ '../action.php',\r
+ '../nucleus/index.php',\r
+ '../nucleus/media.php',\r
+ '../nucleus/libs/ACTION.php',\r
+ '../nucleus/libs/ACTIONLOG.php',\r
+ '../nucleus/libs/ACTIONS.php',\r
+ '../nucleus/libs/ADMIN.php',\r
+ '../nucleus/libs/BaseActions.php',\r
+ '../nucleus/libs/BLOG.php',\r
+ '../nucleus/libs/BODYACTIONS.php',\r
+ '../nucleus/libs/COMMENT.php',\r
+ '../nucleus/libs/COMMENTACTIONS.php',\r
+ '../nucleus/libs/COMMENTS.php',\r
+ '../nucleus/libs/ENTITY.php',\r
+ '../nucleus/libs/globalfunctions.php',\r
+ '../nucleus/libs/i18n.php',\r
+ '../nucleus/libs/ITEM.php',\r
+ '../nucleus/libs/ITEMACTIONS.php',\r
+ '../nucleus/libs/LINK.php',\r
+ '../nucleus/libs/MANAGER.php',\r
+ '../nucleus/libs/MEDIA.php',\r
+ '../nucleus/libs/MEMBER.php',\r
+ '../nucleus/libs/NOTIFICATION.php',\r
+ '../nucleus/libs/PARSER.php',\r
+ '../nucleus/libs/PLUGIN.php',\r
+ '../nucleus/libs/PLUGINADMIN.php',\r
+ '../nucleus/libs/SEARCH.php',\r
+ '../nucleus/libs/showlist.php',\r
+ '../nucleus/libs/SKIN.php',\r
+ '../nucleus/libs/TEMPLATE.php',\r
+ '../nucleus/libs/vars4.1.0.php',\r
+ '../nucleus/libs/xmlrpc.inc.php',\r
+ '../nucleus/libs/xmlrpcs.inc.php',\r
+ '../nucleus/libs/sql/DB.php',\r
+ '../nucleus/libs/sql/MYSQLPDO.php'\r
+ );\r
+\r
+ $count = count($files);\r
+ for ( $i = 0; $i < $count; $i++ )\r
+ {\r
+ if ( !is_readable($files[$i]) )\r
+ {\r
+ array_push($missingfiles, 'File <b>' . $files[$i] . '</b> is missing or not readable.<br />');\r
+ }\r
+ }\r
+\r
+ if ( count($missingfiles) > 0 )\r
+ {\r
+ exit(implode("\n", $missingfiles));\r
+ }\r
+}\r
+\r
+/**\r
+ * Updates the configuration in the database\r
+ *\r
+ * @param string $name name of the config var\r
+ * @param string $value new value of the config var\r
+ * @return array\r
+ */\r
+function updateConfig($name, $value)\r
+{\r
+ $errors = array();\r
+\r
+ $query = "UPDATE %s SET value = %s WHERE name = %s";\r
+ $query = sprintf($query, tableName('nucleus_config'), DB::quoteValue(trim($value)), DB::quoteValue($name));\r
+\r
+ if ( DB::execute($query) === FALSE )\r
+ {\r
+ $errinfo = DB::getError();\r
+ $errors[] = _INST_ERROR4 . ': ' . $errinfo[2];\r
+ }\r
+ return $errors;\r
+}\r
+\r
+class ParamManager\r
+{\r
+ /* process parameter */\r
+ public $state;\r
+ public $locale;\r
+\r
+ /* mysql connection parameters */\r
+ public $mysql_host;\r
+ public $mysql_user;\r
+ public $mysql_password;\r
+ public $mysql_database;\r
+ public $mysql_tablePrefix;\r
+\r
+ /* weblog configuration parameters */\r
+ public $blog_name;\r
+ public $blog_shortname;\r
+\r
+ /* member configuration parameters */\r
+ public $user_name;\r
+ public $user_realname;\r
+ public $user_password;\r
+ private $user_password2;\r
+ public $user_email;\r
+\r
+ /* URI parameters */\r
+ private $root_url;\r
+ public $IndexURL;\r
+ public $AdminURL;\r
+ public $MediaURL;\r
+ public $SkinsURL;\r
+ public $PluginURL;\r
+ public $ActionURL;\r
+\r
+ /* path parameters */\r
+ private $root_path;\r
+ public $AdminPath;\r
+ public $MediaPath;\r
+ public $SkinsPath;\r
+\r
+ /**\r
+ * constructor\r
+ */\r
+ public function __construct()\r
+ {\r
+ $this->init();\r
+ }\r
+\r
+ public function init()\r
+ {\r
+ // set default values\r
+ $this->state = 'locale';\r
+ $this->install_mode = 'simple';\r
+ $this->locale = 'en_Latn_US';\r
+ $this->mysql_host = @ini_get('mysql.default_host');\r
+ $this->blog_name = 'My Nucleus CMS';\r
+ $this->blog_shortname = 'mynucleuscms';\r
+\r
+ /* root path */\r
+ $directory_separator = preg_quote(DIRECTORY_SEPARATOR, '|');\r
+ $this->root_path = implode('/', preg_split("|$directory_separator|", realpath(dirname(__FILE__) . '/..')));\r
+ if ( substr($this->root_path, -1, 1) !== '/' )\r
+ {\r
+ $this->root_path .= '/';\r
+ }\r
+ $base_path_pcre = preg_quote($this->root_path, '|');\r
+\r
+ /* current directry name */\r
+ $directory_name = preg_replace("#{$base_path_pcre}#", '', implode('/', preg_split("#{$directory_separator}#", realpath(dirname(__FILE__)))));\r
+ $directory_name_pcre = preg_quote($directory_name, '|');\r
+\r
+ /* root uri */\r
+ $root_url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];\r
+ $this->root_url = preg_replace("|$directory_name_pcre(.*)$|", '', $root_url);\r
+\r
+ $this->AdminPath = $this->root_path . 'nucleus/';\r
+ $this->MediaPath = $this->root_path . 'media/';\r
+ $this->SkinsPath = $this->root_path . 'skins/';\r
+\r
+ $this->IndexURL = $this->root_url;\r
+ $this->AdminURL = $this->root_url . 'nucleus/';\r
+ $this->MediaURL = $this->root_url . 'media/';\r
+ $this->SkinsURL = $this->root_url . 'skins/';\r
+ $this->PluginURL = $this->root_url . 'nucleus/plugins/';\r
+ $this->ActionURL = $this->root_url . 'action.php';\r
+ }\r
+\r
+ private function read_parameter($parameter)\r
+ {\r
+ foreach ( $parameter as $element )\r
+ {\r
+ if ( array_key_exists($element, $_POST) )\r
+ {\r
+ $this->$element = $_POST[$element];\r
+ }\r
+ }\r
+ }\r
+\r
+ public function set_state($state)\r
+ {\r
+ $states = array('locale', 'mysql', 'weblog', 'detail', 'install');\r
+ if ( in_array($state, $states) )\r
+ {\r
+ $this->state = $state;\r
+ }\r
+ }\r
+\r
+ public function set_locale()\r
+ {\r
+ $this->read_parameter(array('locale'));\r
+\r
+ if ( !in_array($this->locale, i18n::get_available_locale_list()) )\r
+ {\r
+ $this->locale = 'en_Latn_US';\r
+ }\r
+ }\r
+\r
+ public function check_mysql_parameters()\r
+ {\r
+ global $MYSQL_HANDLER;\r
+ \r
+ $parameters = array('mysql_host', 'mysql_user', 'mysql_password', 'mysql_database', 'mysql_tablePrefix');\r
+ $this->read_parameter($parameters);\r
+\r
+ $errors = array();\r
+ if ( $this->mysql_host == '' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR1, _DB_FIELD1);\r
+ }\r
+\r
+ if ( $this->mysql_user == '' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR1, _DB_FIELD2);\r
+ }\r
+ \r
+ if ( $this->mysql_user != ''\r
+ && !preg_match('/^[a-z0-9_\-]+$/i', $this->mysql_user) )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR2, _DB_FIELD2);\r
+ }\r
+ \r
+ if ( $this->mysql_database == '' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR1, _DB_FIELD4);\r
+ }\r
+\r
+ if ( $this->mysql_database != ''\r
+ && !preg_match('/^[a-z0-9_\-]+$/i', $this->mysql_database) )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR2, _DB_FIELD4);\r
+ }\r
+\r
+ if ( $this->mysql_tablePrefix != ''\r
+ && !preg_match('/^[a-z0-9_]+$/i', $this->mysql_tablePrefix) )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR3, _DB_FIELD5);\r
+ }\r
+ \r
+ if ( count($errors) == 0 )\r
+ {\r
+ $mysql_conn = @DB::setConnectionInfo($MYSQL_HANDLER[1], $this->mysql_host, $this->mysql_user, $this->mysql_password);\r
+ if ( $mysql_conn == false )\r
+ {\r
+ $errors[] = _DBCONNECT_ERROR;\r
+ }\r
+ else\r
+ {\r
+ @DB::disConnect();\r
+ }\r
+ }\r
+\r
+ return $errors;\r
+ }\r
+\r
+ public function check_user_parameters()\r
+ {\r
+ $parameters = array('user_name', 'user_realname', 'user_password', 'user_password2', 'user_email');\r
+ $this->read_parameter($parameters);\r
+\r
+ $errors = array();\r
+ if ( $this->user_realname == '' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR1, _ADMIN_FIELD1);\r
+ }\r
+\r
+ if ( $this->user_name == '' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR1, _ADMIN_FIELD2);\r
+ }\r
+ elseif ( !preg_match("/^[a-z0-9]+([ a-z0-9]*[a-z0-9]+)?$/i", $this->user_name) )\r
+ {\r
+ $errors[] = _VALID_ERROR5;\r
+ }\r
+\r
+ if ( $this->user_password == '' || $this->user_password2 == '' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR1, _ADMIN_FIELD3);\r
+ $this->user_password = '';\r
+ }\r
+ elseif ( $this->user_password != $this->user_password2 )\r
+ {\r
+ $errors[] = _VALID_ERROR6;\r
+ $this->user_password = '';\r
+ }\r
+\r
+ if ( !preg_match("/^[a-z0-9\._+\-]+@[a-z0-9\._\-]+\.[a-z]{2,6}$/i", $this->user_email) )\r
+ {\r
+ $errors[] = _VALID_ERROR7;\r
+ }\r
+\r
+ return $errors;\r
+ }\r
+\r
+ public function check_weblog_parameters()\r
+ {\r
+ $parameters = array('blog_name', 'blog_shortname');\r
+ $this->read_parameter($parameters);\r
+\r
+ $errors = array();\r
+ if ( $this->blog_name == '' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR1, _BLOG_FIELD1);\r
+ }\r
+\r
+ if ( $this->blog_shortname == '' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR1, _BLOG_FIELD2);\r
+ }\r
+\r
+ if ( !preg_match("/^[a-z0-9]+$/i", $this->blog_shortname) )\r
+ {\r
+ $errors[] = _VALID_ERROR4;\r
+ }\r
+\r
+ return $errors;\r
+ }\r
+\r
+ public function check_uri_parameters()\r
+ {\r
+ $parameters = array('IndexURL', 'AdminURL', 'MediaURL', 'SkinsURL', 'PluginURL', 'ActionURL');\r
+ $this->read_parameter($parameters);\r
+\r
+ $errors = array();\r
+ if ( substr($this->IndexURL, -1, 1) !== '/' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD1);\r
+ }\r
+\r
+ if ( substr($this->AdminURL, -1, 1) !== '/' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD2);\r
+ }\r
+\r
+ if ( substr($this->MediaURL, -1, 1) !== '/' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD4);\r
+ }\r
+\r
+ if ( substr($this->SkinsURL, -1, 1) !== '/' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD6);\r
+ }\r
+\r
+ if ( substr($this->PluginURL, -1, 1) !== '/' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR8, _PATH_FIELD8);\r
+ }\r
+\r
+ if ( strrchr($this->ActionURL, '/') != '/action.php' )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR9, _PATH_FIELD9);\r
+ }\r
+\r
+ return $errors;\r
+ }\r
+\r
+ public function check_path_parameters()\r
+ {\r
+ $parameters = array('AdminPath', 'MediaPath', 'SkinsPath');\r
+ $this->read_parameter($parameters);\r
+\r
+ $separators = array('/', DIRECTORY_SEPARATOR);\r
+ $errors = array();\r
+ if ( !in_array(substr($this->AdminPath, -1, 1), $separators) )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR10, _PATH_FIELD3);\r
+ }\r
+ elseif ( !file_exists($this->AdminPath) )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR11, _PATH_FIELD3);\r
+ }\r
+\r
+ if ( !in_array(substr($this->MediaPath, -1, 1), $separators) )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR10, _PATH_FIELD5);\r
+ }\r
+ elseif ( !file_exists($this->MediaPath) )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR11, _PATH_FIELD5);\r
+ }\r
+\r
+ if ( !in_array(substr($this->SkinsPath, -1, 1), $separators) )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR10, _PATH_FIELD7);\r
+ }\r
+ elseif ( !file_exists($this->SkinsPath) )\r
+ {\r
+ $errors[] = sprintf(_VALID_ERROR11, _PATH_FIELD7);\r
+ }\r
+\r
+ return $errors;\r
+ }\r
+\r
+ /**\r
+ * check all parameters\r
+ * @return bool\r
+ */\r
+ public function check_all_parameters()\r
+ {\r
+ $this->set_locale();\r
+\r
+ $isValid = true;\r
+ $isValid &= (count($this->check_mysql_parameters()) == 0);\r
+ $isValid &= (count($this->check_user_parameters()) == 0);\r
+ $isValid &= (count($this->check_weblog_parameters()) == 0);\r
+ $isValid &= (count($this->check_uri_parameters()) == 0);\r
+ $isValid &= (count($this->check_path_parameters()) == 0);\r
+\r
+ return $isValid;\r
+ }\r
+}\r