protected function setUp()
 {
     global $_CONF, $_CONF_VALIDATE, $_USER;
     // set dummy values for the $_CONF options used in the language files
     $_CONF = array();
     $_CONF['site_url'] = 'http://www.example.com';
     $_CONF['site_admin_url'] = 'http://www.example.com/admin';
     $_CONF['site_name'] = 'Test Site';
     $_CONF['speedlimit'] = 42;
     $_CONF['commentspeedlimit'] = 42;
     $_CONF['backup_path'] = '/path/to/geeklog/';
     $_DB_mysqldump_path = '/usr/bin/mysqldump';
     $_USER['username'] = '******';
     if (!defined('XHTML')) {
         define('XHTML', '');
     }
     if (!defined('TOPIC_ALL_OPTION')) {
         define('TOPIC_ALL_OPTION', 'all');
     }
     if (!defined('TOPIC_NONE_OPTION')) {
         define('TOPIC_NONE_OPTION', 'none');
     }
     if (!defined('TOPIC_HOMEONLY_OPTION')) {
         define('TOPIC_HOMEONLY_OPTION', 'homeonly');
     }
     if (!defined('TOPIC_SELECTED_OPTION')) {
         define('TOPIC_SELECTED_OPTION', 'selectedtopics');
     }
     if (!defined('TOPIC_ROOT')) {
         define('TOPIC_ROOT', 'root');
     }
     // there's a date() call somewhere - make PHP 5.2 shut up
     $system_timezone = @date_default_timezone_get();
     date_default_timezone_set($system_timezone);
     $this->c = config::get_instance();
     include Tst::$root . 'language/english.php';
     include Tst::$public . 'admin/configuration_validation.php';
     require_once Tst::$public . 'admin/install/config-install.php';
     install_config();
 }
 protected function setUp()
 {
     global $_CONF, $_CONF_VALIDATE;
     // set dummy values for the $_CONF options used in the language files
     $_CONF = array();
     $_CONF['site_url'] = 'http://www.example.com';
     $_CONF['site_admin_url'] = 'http://www.example.com/admin';
     $_CONF['site_name'] = 'Test Site';
     $_CONF['speedlimit'] = 42;
     $_CONF['commentspeedlimit'] = 42;
     $_CONF['backup_path'] = '/path/to/geeklog/';
     $_DB_mysqldump_path = '/usr/bin/mysqldump';
     if (!defined('XHTML')) {
         define("XHTML", '');
     }
     // there's a date() call somewhere - make PHP 5.2 shut up
     $system_timezone = @date_default_timezone_get();
     date_default_timezone_set($system_timezone);
     $this->c =& config::get_instance();
     include Tst::$root . 'language/english.php';
     include Tst::$public . 'admin/configuration_validation.php';
     require_once Tst::$public . 'admin/install/config-install.php';
     install_config();
 }
Example #3
0
 /**
  * Installer engine
  * The guts of the installation and upgrade package.
  *
  * @param  string $installType 'install' or 'upgrade'
  * @param  int    $installStep 1 - 4
  * @return string
  */
 private function installEngine($installType, $installStep)
 {
     global $_CONF, $_TABLES, $_DB, $_DB_dbms, $_DB_host, $_DB_name, $_DB_user, $_DB_pass, $_DB_table_prefix;
     $retval = '';
     switch ($installStep) {
         // Page 1 - Enter Geeklog config information
         case 1:
             require_once $this->env['dbconfig_path'];
             // Get the current DB info
             if ($installType === 'upgrade') {
                 $v = $this->checkPost150Upgrade($this->env['dbconfig_path'], $this->env['siteconfig_path']);
                 // will skip to step 3 if possible, otherwise return here
                 if ($v == self::GL_VERSION) {
                     // looks like we're already up to date
                     $retval .= '<h2>' . $this->LANG['INSTALL'][74] . '</h2>' . PHP_EOL . '<p>' . $this->LANG['INSTALL'][75] . '</p>' . PHP_EOL;
                     return $retval;
                 }
             }
             $retval .= '<h1 class="heading">' . $this->LANG['INSTALL'][101] . ' ' . htmlspecialchars($this->request('display_step')) . ' - ' . $this->LANG['INSTALL'][102] . '</h1>' . PHP_EOL;
             // Set all the form values either with their defaults or with received POST data.
             // The only instance where you'd get POST data would be if the user has to
             // go back because they entered incorrect database information.
             $site_name = $this->post('site_name', $this->LANG['INSTALL'][29]);
             $site_name = str_replace('\\', '', $site_name);
             $site_slogan = $this->post('site_slogan', $this->LANG['INSTALL'][30]);
             $site_slogan = str_replace('\\', '', $site_slogan);
             $dbType = $this->post('db_type');
             if (!empty($dbType)) {
                 switch ($dbType) {
                     case 'mysql-innodb':
                         $db_selected = 'mysql-innodb';
                         break;
                     case 'pgsql':
                         $db_selected = 'pgsql';
                         break;
                     default:
                         $db_selected = 'mysql';
                         break;
                 }
             } else {
                 switch ($_DB_dbms) {
                     case 'pgsql':
                         $db_selected = 'pgsql';
                         break;
                     default:
                         $db_selected = 'mysql';
                         break;
                 }
             }
             if ($_DB_host !== 'localhost' || $_DB_name !== 'geeklog' || $_DB_user !== 'username' || $_DB_pass !== 'password') {
                 // only display those if they all have their default values
                 $_DB_host = '';
                 $_DB_name = '';
                 $_DB_user = '';
                 $_DB_pass = '';
             }
             $db_host = $this->post('db_host', $_DB_host !== 'localhost' ? '' : $_DB_host);
             $db_name = $this->post('db_name', $_DB_name !== 'geeklog' ? '' : $_DB_name);
             $db_user = $this->post('db_user', $_DB_user !== 'username' ? '' : $_DB_user);
             $db_pass = $this->post('db_pass', '');
             $db_prefix = $this->post('db_prefix', $_DB_table_prefix);
             $site_url = $this->post('site_url', $this->getSiteUrl());
             $site_admin_url = $this->post('site_admin_url', $this->getSiteAdminUrl());
             $host_name = explode(':', $this->server('HTTP_HOST'));
             $host_name = $host_name[0];
             if (empty($_CONF['site_mail'])) {
                 $_CONF['site_mail'] = '*****@*****.**';
             }
             $site_mail = $this->post('site_mail', $_CONF['site_mail'] !== '*****@*****.**' ? $_CONF['site_mail'] : 'admin@' . $host_name);
             if (empty($_CONF['noreply_mail'])) {
                 $_CONF['noreply_mail'] = '*****@*****.**';
             }
             $noreply_mail = $this->post('noreply_mail', $_CONF['noreply_mail'] != '*****@*****.**' ? $_CONF['noreply_mail'] : 'noreply@' . $host_name);
             if ($this->post('utf8') === 'on') {
                 $utf8 = true;
             } else {
                 $utf8 = false;
                 if (strcasecmp($this->LANG['CHARSET'], 'utf-8') === 0) {
                     $utf8 = true;
                 }
             }
             $this->env['install_type'] = $installType;
             $this->env['display_step'] = $this->request('display_step');
             $this->env['help_site_name'] = $this->getHelpLink('site_name');
             $this->env['site_name'] = $site_name;
             $this->env['help_site_slogan'] = $this->getHelpLink('site_slogan');
             $this->env['site_slogan'] = $site_slogan;
             $this->env['help_db_type'] = $this->getHelpLink('db_type');
             $this->env['db_type_selector'] = $this->listOfSupportedDBs($this->env['dbconfig_path'], $db_selected, $installType === 'install');
             $this->env['help_db_host'] = $this->getHelpLink('db_host');
             $this->env['db_host'] = $db_host;
             $this->env['help_db_name'] = $this->getHelpLink('db_name');
             $this->env['db_name'] = $db_name;
             $this->env['help_db_user'] = $this->getHelpLink('db_user');
             $this->env['db_user'] = $db_user;
             $this->env['help_db_pass'] = $this->getHelpLink('db_pass');
             $this->env['db_pass'] = $db_pass;
             $this->env['help_db_prefix'] = $this->getHelpLink('db_prefix');
             $this->env['db_prefix'] = $db_prefix;
             $this->env['help_site_url'] = $this->getHelpLink('site_url');
             $this->env['site_url'] = $site_url;
             $this->env['help_site_admin_url'] = $this->getHelpLink('site_admin_url');
             $this->env['site_admin_url'] = $site_admin_url;
             $this->env['help_site_mail'] = $this->getHelpLink('site_mail');
             $this->env['site_mail'] = $site_mail;
             $this->env['help_noreply_mail'] = $this->getHelpLink('noreply_mail');
             $this->env['noreply_mail'] = $noreply_mail;
             $this->env['new_install'] = $installType === 'install';
             $this->env['help_utf8'] = $this->getHelpLink('utf8');
             $this->env['utf8'] = $utf8;
             $this->env['button_text'] = $installType === 'install' ? $this->LANG['INSTALL'][50] : $this->LANG['INSTALL'][25];
             $retval .= MicroTemplate::quick(PATH_LAYOUT, 'step1', $this->env);
             break;
             // Page 2 - Enter information into db-config.php and ask about InnoDB tables (if supported)
         // Page 2 - Enter information into db-config.php and ask about InnoDB tables (if supported)
         case 2:
             // Set all the variables from the received POST data.
             $site_name = $this->post('site_name');
             $site_slogan = $this->post('site_slogan');
             $site_url = $this->post('site_url');
             $site_admin_url = $this->post('site_admin_url');
             $site_mail = $this->post('site_mail');
             $noreply_mail = $this->post('noreply_mail');
             $utf8 = $this->post('utf8') === 'on';
             $installPlugins = $this->post('install_plugins') !== null;
             $DB = array('type' => $this->post('db_type'), 'host' => $this->post('db_host'), 'name' => $this->post('db_name'), 'user' => $this->post('db_user'), 'pass' => $this->post('db_pass'), 'table_prefix' => $this->post('db_prefix'));
             // Check if $site_admin_url is correct
             if (!$this->urlExists($site_admin_url)) {
                 $retval .= '<h2>' . $this->LANG['INSTALL'][104] . '</h2>' . PHP_EOL . '<p>' . $this->LANG['INSTALL'][105] . '</p>' . PHP_EOL . $this->showReturnFormData($_POST) . PHP_EOL;
                 // Check for blank password in production environment
             } elseif (!$this->checkDbPassword($site_url, $DB)) {
                 $retval .= '<h2>' . $this->LANG['INSTALL'][54] . '</h2>' . PHP_EOL . '<p>' . $this->LANG['INSTALL'][107] . '</p>' . PHP_EOL . $this->showReturnFormData($_POST) . PHP_EOL;
                 // Check if we can connect to the database
             } elseif (!$this->dbConnect($DB)) {
                 $retval .= '<h2>' . $this->LANG['INSTALL'][54] . '</h2>' . PHP_EOL . '<p>' . $this->LANG['INSTALL'][55] . '</p>' . $this->showReturnFormData($_POST) . PHP_EOL;
                 // Check if the user's version of MySQL is out of date
             } elseif ($this->isMysqlOutOfDate($DB)) {
                 $mysqlVersion = $this->getMysqlVersion($DB['host'], $DB['user'], $DB['pass']);
                 $retval .= '<h1>' . sprintf($this->LANG['INSTALL'][51], self::SUPPORTED_MYSQL_VER) . '</h1>' . PHP_EOL . '<p>' . sprintf($this->LANG['INSTALL'][52], self::SUPPORTED_MYSQL_VER) . (is_array($mysqlVersion) ? implode('.', $mysqlVersion) : '?') . $this->LANG['INSTALL'][53] . '</p>' . PHP_EOL;
                 // Check if database doesn't exist
             } elseif (!$this->dbExists($DB)) {
                 $retval .= '<h2>' . $this->LANG['INSTALL'][56] . '</h2>' . PHP_EOL . '<p>' . $this->LANG['INSTALL'][57] . '</p>' . PHP_EOL . $this->showReturnFormData($_POST) . PHP_EOL;
             } else {
                 // Write the database info to db-config.php
                 if (!$this->writeConfig($this->env['dbconfig_path'], $DB)) {
                     exit($this->LANG['INSTALL'][26] . ' ' . htmlspecialchars($this->env['dbconfig_path']) . $this->LANG['INSTALL'][58]);
                 }
                 // for the default charset, patch siteconfig.php again
                 if ($installType !== 'upgrade') {
                     if (!$this->setDefaultCharset($this->env['siteconfig_path'], $utf8 ? 'utf-8' : $this->LANG['CHARSET'])) {
                         exit($this->LANG['INSTALL'][26] . ' ' . $this->env['siteconfig_path'] . $this->LANG['INSTALL'][58]);
                     }
                 }
                 require $this->env['dbconfig_path'];
                 require_once $this->env['siteconfig_path'];
                 require_once $_CONF['path_system'] . 'lib-database.php';
                 $params = array('mode' => $installType, 'step' => 3, 'dbconfig_path' => $this->env['dbconfig_path'], 'install_plugins' => $installPlugins, 'language' => $this->env['language'], 'site_name' => $site_name, 'site_slogan' => $site_slogan, 'site_url' => $site_url, 'site_admin_url' => $site_admin_url, 'site_mail' => $site_mail, 'noreply_mail' => $noreply_mail);
                 if ($utf8) {
                     $params['utf8'] = 'true';
                 }
                 $req_string = 'index.php?' . http_build_query($params);
                 switch ($installType) {
                     case 'install':
                         $this->env['installType'] = $installType;
                         $this->env['utf8_string'] = $utf8 ? 'true' : 'false';
                         // If using MySQL check to see if InnoDB is supported
                         if ($DB['type'] === 'mysql-innodb' && !$this->isInnodbSupported()) {
                             // Warn that InnoDB tables are not supported
                             $retval .= MicroTemplate::quick(PATH_LAYOUT, 'step2-install', $this->env);
                         } else {
                             // Continue on to step 3 where the installation will happen
                             if ($DB['type'] === 'mysql-innodb') {
                                 $req_string .= '&innodb=true';
                             }
                             header('Location: ' . $req_string);
                         }
                         break;
                     case 'upgrade':
                         // Try and find out what the current version of GL is
                         $currentVersion = $this->identifyGeeklogVersion();
                         if ($currentVersion == self::GL_VERSION) {
                             // If current version is the newest version
                             // then there's no need to update.
                             $retval .= '<h2>' . $this->LANG['INSTALL'][74] . '</h2>' . PHP_EOL . '<p>' . $this->LANG['INSTALL'][75] . '</p>';
                         } elseif ($currentVersion == 'empty') {
                             $retval .= '<h2>' . $this->LANG['INSTALL'][90] . '</h2>' . PHP_EOL . '<p>' . $this->LANG['INSTALL'][91] . '</p>';
                         } else {
                             if (!empty($currentVersion)) {
                                 // Continue on to step 3 where the upgrade will happen
                                 header('Location: ' . $req_string . '&version=' . $currentVersion);
                             }
                             // If we were unable to determine the current GL
                             // version is then ask the user what it is
                             $this->env['old_versions'] = array();
                             $old_versions = array('1.2.5-1', '1.3', '1.3.1', '1.3.2', '1.3.2-1', '1.3.3', '1.3.4', '1.3.5', '1.3.6', '1.3.7', '1.3.8', '1.3.9', '1.3.10', '1.3.11', '1.4.0', '1.4.1', '1.5.0', '1.5.1', '1.5.2', '1.6.0', '1.6.1', '1.7.0', '1.7.1', '1.7.2');
                             $tempCounter = 0;
                             foreach ($old_versions as $version) {
                                 $this->env['old_versions'][] = array('selected' => $tempCounter === count($old_versions) - 1 ? ' selected="selected"' : '', 'value' => $version);
                                 $tempCounter++;
                             }
                             $retval .= MicroTemplate::quick(PATH_LAYOUT, 'step2-upgrade', $this->env);
                             $currentVersion = $old_versions[count($old_versions) - 1];
                         }
                         break;
                 }
             }
             break;
             // Page 3 - Install
         // Page 3 - Install
         case 3:
             $gl_path = str_replace(self::DB_CONFIG_FILE, '', $this->env['dbconfig_path']);
             $installPlugins = $this->request('install_plugins') !== null;
             $nextLink = $installPlugins ? 'install-plugins.php?language=' . $this->env['language'] : 'success.php?type=' . $installType . '&language=' . $this->env['language'];
             switch ($installType) {
                 case 'install':
                     if ($this->post('submit') === '<< ' . $this->LANG['INSTALL'][61]) {
                         header('Location: index.php?mode=install');
                     }
                     // Check whether to use InnoDB tables
                     $use_innodb = $this->post('innodb') === 'true' || $this->get('innodb') === 'true';
                     $utf8 = $this->post('utf8') === 'true' || $this->get('utf8') === 'true';
                     // We need all this just to do one DB query
                     require_once $this->env['dbconfig_path'];
                     require_once $this->env['siteconfig_path'];
                     require_once $_CONF['path_system'] . 'lib-database.php';
                     if ($_DB_dbms === 'pgsql') {
                         //Create a func to check if plpgsql is already installed
                         DB_query("CREATE OR REPLACE FUNCTION make_plpgsql()\n                    RETURNS VOID LANGUAGE SQL AS \$\$\n                    CREATE LANGUAGE plpgsql;\n                    \$\$;\n                    SELECT\n                        CASE\n                        WHEN EXISTS( SELECT 1 FROM pg_catalog.pg_language WHERE lanname='plpgsql')\n                        THEN NULL\n                        ELSE make_plpgsql() END;");
                         //Create a function to check if table exists
                         DB_query("CREATE OR REPLACE FUNCTION check_table(varchar, varchar)\n                        RETURNS boolean AS \$\$\n                         DECLARE\n                           v_cnt integer;\n                           v_tbl boolean;\n                         BEGIN\n                           SELECT count(1) INTO v_cnt FROM pg_tables where tablename = \$1 and\n                        schemaname = \$2;\n                            IF v_cnt > 0 THEN\n                             v_tbl = 'true';\n                            END IF;\n                        return v_tbl;\n                        END;\n                        \$\$ LANGUAGE 'plpgsql'");
                     }
                     // Check if GL is already installed
                     if ($this->tableExists('vars')) {
                         $this->env['use_innodb_string'] = $use_innodb ? 'true' : 'false';
                         $this->env['installPlugins'] = $installPlugins;
                         $retval .= MicroTemplate::quick(PATH_LAYOUT, 'step3-install', $this->env);
                     } else {
                         if ($this->createDatabaseStructures()) {
                             $site_name = $this->post('site_name', $this->get('site_name', ''));
                             $site_slogan = $this->post('site_slogan', $this->get('site_slogan', ''));
                             $site_url = $this->post('site_url', $this->get('site_url', ''));
                             $site_admin_url = $this->post('site_admin_url', $this->get('site_admin_url', ''));
                             $site_mail = $this->post('site_mail', $this->get('site_mail', ''));
                             $noreply_mail = $this->post('noreply_mail', $this->get('noreply_mail', ''));
                             $this->personalizeAdminAccount($site_mail, $site_url);
                             // Insert the form data into the conf_values table
                             $site_name = urldecode($site_name);
                             $site_name = $this->cleanString($site_name);
                             $site_slogan = urldecode($site_slogan);
                             $site_slogan = $this->cleanString($site_slogan);
                             require_once $_CONF['path_system'] . 'classes/config.class.php';
                             require_once PATH_INSTALL . 'config-install.php';
                             install_config();
                             $config = config::get_instance();
                             $config->set('site_name', $site_name);
                             $config->set('site_slogan', $site_slogan);
                             $config->set('site_url', urldecode($site_url));
                             $config->set('site_admin_url', urldecode($site_admin_url));
                             $config->set('site_mail', urldecode($site_mail));
                             $config->set('noreply_mail', urldecode($noreply_mail));
                             $config->set('path_html', $this->env['html_path']);
                             $config->set('path_log', $gl_path . 'logs/');
                             $config->set('path_language', $gl_path . 'language/');
                             $config->set('backup_path', $gl_path . 'backups/');
                             $config->set('path_data', $gl_path . 'data/');
                             $config->set('path_images', $this->env['html_path'] . 'images/');
                             $config->set('path_themes', $this->env['html_path'] . 'layout/');
                             $config->set('path_editors', $this->env['html_path'] . 'editors/');
                             $config->set('rdf_file', $this->env['html_path'] . 'backend/geeklog.rss');
                             $config->set('path_pear', $_CONF['path_system'] . 'pear/');
                             $config->set('cookie_path', $this->guessCookiePath(urldecode($site_url)));
                             $config->set_default('default_photo', urldecode($site_url) . '/default.jpg');
                             $lng = $this->getDefaultLanguage($gl_path . 'language/', $this->env['language'], $utf8);
                             if (!empty($lng)) {
                                 $config->set('language', $lng);
                             }
                             $this->setVersion($this->env['siteconfig_path']);
                             if (!$installPlugins) {
                                 // do a default install of all available plugins
                                 /**
                                  * For the plugin install we would actually need
                                  * lib-common.php in the global namespace. Since
                                  * we're in a function, we need to hack a few
                                  * things and rely on a few global declarations
                                  * (see beginning of function).
                                  */
                                 // Hack: not needed here - avoid notice
                                 require_once dirname(__FILE__) . '/../../../lib-common.php';
                                 $this->defaultPluginInstall();
                             }
                             // Installation is complete. Continue onto either
                             // custom plugin installation page or success page
                             header('Location: ' . $nextLink);
                         } else {
                             $retval .= '<h2>' . $this->LANG['INSTALL'][67] . '</h2>' . PHP_EOL . '<p>' . $this->LANG['INSTALL'][68] . '</p>' . PHP_EOL;
                         }
                     }
                     break;
                 case 'upgrade':
                     // Get and set which version to display
                     $version = $this->get('version', $this->post('version', ''));
                     // Let's do this
                     require_once $this->env['dbconfig_path'];
                     require_once $this->env['siteconfig_path'];
                     require_once $_CONF['path_system'] . 'lib-database.php';
                     // If this is a MySQL database check to see if it was
                     // installed with InnoDB support
                     if ($_DB_dbms === 'mysql') {
                         // Query `vars` and see if 'database_engine' == 'InnoDB'
                         $result = DB_query("SELECT value FROM {$_TABLES['vars']} WHERE name = 'database_engine'");
                         $row = DB_fetchArray($result);
                         $this->env['use_innodb'] = $use_innodb = $row['value'] === 'InnoDB';
                     }
                     if ($this->doDatabaseUpgrades($version)) {
                         if (version_compare($version, '1.5.0') < 0) {
                             // After updating the database we'll want to update some of the information from the form.
                             $site_name = $this->post('site_name', $this->get('site_name', ''));
                             $site_slogan = $this->post('site_slogan', $this->get('site_slogan', ''));
                             $site_url = $this->post('site_url', $this->get('site_url', ''));
                             $site_admin_url = $this->post('site_admin_url', $this->get('site_admin_url', ''));
                             $site_mail = $this->post('site_mail', $this->get('site_mail', ''));
                             $noreply_mail = $this->post('noreply_mail', $this->get('noreply_mail', ''));
                             $site_name = urldecode($site_name);
                             $site_name = $this->cleanString($site_name);
                             $site_slogan = urldecode($site_slogan);
                             $site_slogan = $this->cleanString($site_slogan);
                             require_once $_CONF['path_system'] . 'classes/config.class.php';
                             $config = config::get_instance();
                             $config->set('site_name', $site_name);
                             $config->set('site_slogan', $site_slogan);
                             $config->set('site_url', urldecode($site_url));
                             $config->set('site_admin_url', urldecode($site_admin_url));
                             $config->set('site_mail', urldecode($site_mail));
                             $config->set('noreply_mail', urldecode($noreply_mail));
                             $config->set_default('default_photo', urldecode($site_url) . '/default.jpg');
                         } else {
                             $site_url = $this->post('site_url', $this->get('site_url', ''));
                             $site_admin_url = $this->post('site_admin_url', $this->get('site_admin_url', ''));
                         }
                         $this->fixPathsAndUrls($_CONF['path'], $this->env['html_path'], urldecode($site_url), urldecode($site_admin_url));
                         // disable plugins for which we don't have the source files
                         $this->checkPlugins();
                         // extra step 4: upgrade plugins
                         $nextLink = 'index.php?step=4&mode=' . $installType . '&language=' . $this->env['language'];
                         if ($installPlugins) {
                             $nextLink .= '&install_plugins=true';
                         }
                         header('Location: ' . $nextLink);
                     } else {
                         $retval .= '<h2>' . $this->LANG['INSTALL'][78] . '</h2>' . PHP_EOL . '<p>' . $this->LANG['INSTALL'][79] . '</p>' . PHP_EOL;
                     }
                     break;
             }
             // Clear the Geeklog Cache
             $this->clearCache();
             break;
             // Extra Step 4 - Upgrade plugins
         // Extra Step 4 - Upgrade plugins
         case 4:
             $this->upgradePlugins();
             $installPlugins = $this->get('install_plugins', null) !== null;
             if (!$installPlugins) {
                 // if we don't do the manual selection, install all new plugins now
                 $this->autoInstallNewPlugins();
             }
             $nextLink = $installPlugins ? 'install-plugins.php?language=' . $this->env['language'] : 'success.php?type=' . $installType . '&language=' . $this->env['language'];
             header('Location: ' . $nextLink);
             break;
     }
     return $retval;
 }
Example #4
0
/**
 * Installer engine
 *
 * The guts of the installation and upgrade package.
 *
 * @param   string  $install_type   'install' or 'upgrade'
 * @param   int     $install_step   1 - 4
 */
function INST_installEngine($install_type, $install_step)
{
    global $_CONF, $_TABLES, $LANG_INSTALL, $LANG_CHARSET, $_DB, $_DB_dbms, $_DB_table_prefix, $_URL, $gl_path, $html_path, $dbconfig_path, $siteconfig_path, $display, $language, $form_label_dir, $use_innodb;
    switch ($install_step) {
        /**
         * Page 1 - Enter Geeklog config information
         */
        case 1:
            require_once $dbconfig_path;
            // Get the current DB info
            if ($install_type == 'upgrade') {
                $v = INST_checkPost150Upgrade($dbconfig_path, $siteconfig_path);
                // will skip to step 3 if possible, otherwise return here
                if ($v == VERSION) {
                    // looks like we're already up to date
                    $display .= '<h2>' . $LANG_INSTALL[74] . '</h2>' . LB . '<p>' . $LANG_INSTALL[75] . '</p>';
                    return;
                }
            }
            $display .= '<h1 class="heading">' . $LANG_INSTALL[101] . ' ' . htmlspecialchars($_REQUEST['display_step']) . ' - ' . $LANG_INSTALL[102] . '</h1>' . LB;
            // Set all the form values either with their defaults or with received POST data.
            // The only instance where you'd get POST data would be if the user has to
            // go back because they entered incorrect database information.
            $site_name = isset($_POST['site_name']) ? str_replace('\\', '', $_POST['site_name']) : $LANG_INSTALL[29];
            $site_slogan = isset($_POST['site_slogan']) ? str_replace('\\', '', $_POST['site_slogan']) : $LANG_INSTALL[30];
            $mysql_innodb_selected = '';
            $mysql_selected = '';
            $mssql_selected = '';
            if (isset($_POST['db_type'])) {
                switch ($_POST['db_type']) {
                    case 'mysql-innodb':
                        $mysql_innodb_selected = ' selected="selected"';
                        break;
                    case 'mssql':
                        $mssql_selected = ' selected="selected"';
                        break;
                    default:
                        $mysql_selected = ' selected="selected"';
                        break;
                }
            } else {
                switch ($_DB_dbms) {
                    case 'mssql':
                        $mssql_selected = ' selected="selected"';
                        break;
                    default:
                        $mysql_selected = ' selected="selected"';
                        break;
                }
            }
            if ($_DB_host != 'localhost' || $_DB_name != 'geeklog' || $_DB_user != 'username' || $_DB_pass != 'password') {
                // only display those if they all have their default values
                $_DB_host = '';
                $_DB_name = '';
                $_DB_user = '';
                $_DB_pass = '';
            }
            $db_host = isset($_POST['db_host']) ? $_POST['db_host'] : ($_DB_host != 'localhost' ? '' : $_DB_host);
            $db_name = isset($_POST['db_name']) ? $_POST['db_name'] : ($_DB_name != 'geeklog' ? '' : $_DB_name);
            $db_user = isset($_POST['db_user']) ? $_POST['db_user'] : ($_DB_user != 'username' ? '' : $_DB_user);
            $db_pass = isset($_POST['db_pass']) ? $_POST['db_pass'] : '';
            $db_prefix = isset($_POST['db_prefix']) ? $_POST['db_prefix'] : $_DB_table_prefix;
            $site_url = isset($_POST['site_url']) ? $_POST['site_url'] : INST_getSiteUrl();
            $site_admin_url = isset($_POST['site_admin_url']) ? $_POST['site_admin_url'] : INST_getSiteAdminUrl();
            $host_name = explode(':', $_SERVER['HTTP_HOST']);
            $host_name = $host_name[0];
            if (empty($_CONF['site_mail'])) {
                $_CONF['site_mail'] = '*****@*****.**';
            }
            $site_mail = isset($_POST['site_mail']) ? $_POST['site_mail'] : ($_CONF['site_mail'] != '*****@*****.**' ? $_CONF['site_mail'] : 'admin@' . $host_name);
            if (empty($_CONF['noreply_mail'])) {
                $_CONF['noreply_mail'] = '*****@*****.**';
            }
            $noreply_mail = isset($_POST['noreply_mail']) ? $_POST['noreply_mail'] : ($_CONF['noreply_mail'] != '*****@*****.**' ? $_CONF['noreply_mail'] : 'noreply@' . $host_name);
            if (isset($_POST['utf8']) && $_POST['utf8'] == 'on') {
                $utf8 = true;
            } else {
                $utf8 = false;
                if (strcasecmp($LANG_CHARSET, 'utf-8') == 0) {
                    $utf8 = true;
                }
            }
            if ($install_type == 'install') {
                $buttontext = $LANG_INSTALL[50];
            } else {
                $buttontext = $LANG_INSTALL[25];
            }
            $display .= '<h2>' . $LANG_INSTALL[31] . '</h2>
            <form action="index.php" method="post" name="install">
            <input type="hidden" name="mode" value="' . htmlspecialchars($install_type) . '"' . XHTML . '>
            <input type="hidden" name="step" value="2"' . XHTML . '>
            <input type="hidden" name="display_step" value="' . htmlspecialchars($_REQUEST['display_step']) . '"' . XHTML . '>
            <input type="hidden" name="language" value="' . $language . '"' . XHTML . '>
            <input type="hidden" name="dbconfig_path" value="' . htmlspecialchars($dbconfig_path) . '"' . XHTML . '>

            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[32] . ' ' . INST_helpLink('site_name') . '</label> <input type="text" name="site_name" value="' . htmlspecialchars($site_name) . '" size="40"' . XHTML . '></p>
            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[33] . ' ' . INST_helpLink('site_slogan') . '</label> <input type="text" name="site_slogan" value="' . htmlspecialchars($site_slogan) . '" size="40"' . XHTML . '></p>
            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[34] . ' ' . INST_helpLink('db_type') . '</label> <select name="db_type">
                <option value="mysql"' . $mysql_selected . '>' . $LANG_INSTALL[35] . '</option>
                ' . ($install_type == 'install' ? '<option value="mysql-innodb"' . $mysql_innodb_selected . '>' . $LANG_INSTALL[36] . '</option>' : '') . '
                <option value="mssql"' . $mssql_selected . '>' . $LANG_INSTALL[37] . '</option></select> ' . '</p>
            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[39] . ' ' . INST_helpLink('db_host') . '</label> <input type="text" name="db_host" value="' . htmlspecialchars($db_host) . '" size="20"' . XHTML . '></p>
            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[40] . ' ' . INST_helpLink('db_name') . '</label> <input type="text" name="db_name" value="' . htmlspecialchars($db_name) . '" size="20"' . XHTML . '></p>
            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[41] . ' ' . INST_helpLink('db_user') . '</label> <input type="text" name="db_user" value="' . htmlspecialchars($db_user) . '" size="20"' . XHTML . '></p>
            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[42] . ' ' . INST_helpLink('db_pass') . '</label> <input type="password" name="db_pass" value="' . $db_pass . '" size="20"' . XHTML . '></p>
            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[43] . ' ' . INST_helpLink('db_prefix') . '</label> <input type="text" name="db_prefix" value="' . htmlspecialchars($db_prefix) . '" size="20"' . XHTML . '></p>

            <br' . XHTML . '>
            <h2>' . $LANG_INSTALL[44] . '</h2> 
            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[45] . ' ' . INST_helpLink('site_url') . '</label> <input type="text" name="site_url" value="' . htmlspecialchars($site_url) . '" size="50"' . XHTML . '>  &nbsp; ' . $LANG_INSTALL[46] . '</p>
            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[47] . ' ' . INST_helpLink('site_admin_url') . '</label> <input type="text" name="site_admin_url" value="' . htmlspecialchars($site_admin_url) . '" size="50"' . XHTML . '>  &nbsp; ' . $LANG_INSTALL[46] . '</p>
            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[48] . ' ' . INST_helpLink('site_mail') . '</label> <input type="text" name="site_mail" value="' . htmlspecialchars($site_mail) . '" size="50"' . XHTML . '></p>
            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[49] . ' ' . INST_helpLink('noreply_mail') . '</label> <input type="text" name="noreply_mail" value="' . htmlspecialchars($noreply_mail) . '" size="50"' . XHTML . '></p>';
            if ($install_type == 'install') {
                $display .= '
                <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[92] . ' ' . INST_helpLink('utf8') . '</label> <input type="checkbox" name="utf8"' . ($utf8 ? ' checked="checked"' : '') . XHTML . '></p>';
            }
            $display .= '<br' . XHTML . '>
            <input type="submit" name="submit" class="submit button big-button" value="' . $buttontext . ' &gt;&gt;"' . XHTML . '>
            <input type="submit" name="install_plugins" class="submit button big-button" value="' . $buttontext . ' ' . $LANG_INSTALL[103] . ' &gt;&gt;"' . XHTML . '>
            </form>' . LB;
            break;
            /**
             * Page 2 - Enter information into db-config.php
             * and ask about InnoDB tables (if supported)
             */
        /**
         * Page 2 - Enter information into db-config.php
         * and ask about InnoDB tables (if supported)
         */
        case 2:
            // Set all the variables from the received POST data.
            $site_name = $_POST['site_name'];
            $site_slogan = $_POST['site_slogan'];
            $site_url = $_POST['site_url'];
            $site_admin_url = $_POST['site_admin_url'];
            $site_mail = $_POST['site_mail'];
            $noreply_mail = $_POST['noreply_mail'];
            $utf8 = isset($_POST['utf8']) && $_POST['utf8'] == 'on' ? true : false;
            $install_plugins = isset($_POST['install_plugins']) ? true : false;
            $DB = array('type' => $_POST['db_type'], 'host' => $_POST['db_host'], 'name' => $_POST['db_name'], 'user' => $_POST['db_user'], 'pass' => $_POST['db_pass'], 'table_prefix' => $_POST['db_prefix']);
            // Check if $site_admin_url is correct
            if (!INST_urlExists($site_admin_url)) {
                $display .= '<h2>' . $LANG_INSTALL[104] . '</h2><p>' . $LANG_INSTALL[105] . '</p>' . INST_showReturnFormData($_POST) . LB;
                // Check if we can connect to the database
            } else {
                if (!INST_dbConnect($DB)) {
                    $display .= '<h2>' . $LANG_INSTALL[54] . '</h2><p>' . $LANG_INSTALL[55] . '</p>' . INST_showReturnFormData($_POST) . LB;
                    // Check if the user's version of MySQL is out of date
                } else {
                    if (INST_mysqlOutOfDate($DB)) {
                        $myv = mysql_v($DB['host'], $DB['user'], $DB['pass']);
                        $display .= '<h1>' . sprintf($LANG_INSTALL[51], SUPPORTED_MYSQL_VER) . '</h1>' . LB;
                        $display .= '<p>' . sprintf($LANG_INSTALL[52], SUPPORTED_MYSQL_VER) . $myv[0] . '.' . $myv[1] . '.' . $myv[2] . $LANG_INSTALL[53] . '</p>' . LB;
                        // Check if database doesn't exist
                    } else {
                        if (!INST_dbExists($DB)) {
                            $display .= '<h2>' . $LANG_INSTALL[56] . '</h2><p>' . $LANG_INSTALL[57] . '</p>' . INST_showReturnFormData($_POST) . LB;
                        } else {
                            // Write the database info to db-config.php
                            if (!INST_writeConfig($dbconfig_path, $DB)) {
                                exit($LANG_INSTALL[26] . ' ' . htmlspecialchars($dbconfig_path) . $LANG_INSTALL[58]);
                            }
                            // for the default charset, patch siteconfig.php again
                            if ($install_type != 'upgrade') {
                                if (!INST_setDefaultCharset($siteconfig_path, $utf8 ? 'utf-8' : $LANG_CHARSET)) {
                                    exit($LANG_INSTALL[26] . ' ' . $siteconfig_path . $LANG_INSTALL[58]);
                                }
                            }
                            require $dbconfig_path;
                            require_once $siteconfig_path;
                            require_once $_CONF['path_system'] . 'lib-database.php';
                            $req_string = 'index.php?mode=' . $install_type . '&step=3&dbconfig_path=' . $dbconfig_path . '&install_plugins=' . $install_plugins . '&language=' . $language . '&site_name=' . urlencode($site_name) . '&site_slogan=' . urlencode($site_slogan) . '&site_url=' . urlencode($site_url) . '&site_admin_url=' . urlencode($site_admin_url) . '&site_mail=' . urlencode($site_mail) . '&noreply_mail=' . urlencode($noreply_mail);
                            if ($utf8) {
                                $req_string .= '&utf8=true';
                            }
                            switch ($install_type) {
                                case 'install':
                                    $hidden_fields = '<input type="hidden" name="mode" value="' . $install_type . '"' . XHTML . '>
                            <input type="hidden" name="language" value="' . $language . '"' . XHTML . '>
                            <input type="hidden" name="dbconfig_path" value="' . htmlspecialchars($dbconfig_path) . '"' . XHTML . '>
                            <input type="hidden" name="site_name" value="' . urlencode($site_name) . '"' . XHTML . '>
                            <input type="hidden" name="site_slogan" value="' . urlencode($site_slogan) . '"' . XHTML . '>
                            <input type="hidden" name="site_url" value="' . urlencode($site_url) . '"' . XHTML . '>
                            <input type="hidden" name="site_admin_url" value="' . urlencode($site_admin_url) . '"' . XHTML . '>
                            <input type="hidden" name="site_mail" value="' . urlencode($site_mail) . '"' . XHTML . '>
                            <input type="hidden" name="noreply_mail" value="' . urlencode($noreply_mail) . '"' . XHTML . '>
                            <input type="hidden" name="utf8" value="' . ($utf8 ? 'true' : 'false') . '"' . XHTML . '>';
                                    // If using MySQL check to see if InnoDB is supported
                                    if ($DB['type'] == 'mysql-innodb' && !INST_innodbSupported()) {
                                        // Warn that InnoDB tables are not supported
                                        $display .= '<h2>' . $LANG_INSTALL[59] . '</h2>
                    <p>' . $LANG_INSTALL['60'] . '</p>

                    <br' . XHTML . '>
                    <div style="margin-left: auto; margin-right: auto; width: 125px">
                        <div style="position: relative; right: 10px">
                            <form action="index.php" method="post">
                            <input type="hidden" name="language" value="' . $language . '"' . XHTML . '>
                            <input type="hidden" name="step" value="1"' . XHTML . '>
                            ' . $hidden_fields . '
                            <input type="submit" class="button big-button" value="&lt;&lt; ' . $LANG_INSTALL[61] . '"' . XHTML . '>
                            </form>
                        </div>

                        <div style="position: relative; left: 65px; top: -27px">
                            <form action="index.php" method="post">
                            <input type="hidden" name="language" value="' . $language . '"' . XHTML . '>
                            <input type="hidden" name="step" value="3"' . XHTML . '>
                            ' . $hidden_fields . '
                            <input type="hidden" name="innodb" value="false"' . XHTML . '>
                            <input type="submit" class="button big-button" name="submit" value="' . $LANG_INSTALL[62] . ' &gt;&gt;"' . XHTML . '>
                            </form>
                        </div>
                    </div>' . LB;
                                    } else {
                                        // Continue on to step 3 where the installation will happen
                                        if ($DB['type'] == 'mysql-innodb') {
                                            $req_string .= '&innodb=true';
                                        }
                                        header('Location: ' . $req_string);
                                    }
                                    break;
                                case 'upgrade':
                                    // Try and find out what the current version of GL is
                                    $curv = INST_identifyGeeklogVersion();
                                    if ($curv == VERSION) {
                                        // If current version is the newest version
                                        // then there's no need to update.
                                        $display .= '<h2>' . $LANG_INSTALL[74] . '</h2>' . LB . '<p>' . $LANG_INSTALL[75] . '</p>';
                                    } elseif ($curv == 'empty') {
                                        $display .= '<h2>' . $LANG_INSTALL[90] . '</h2>' . LB . '<p>' . $LANG_INSTALL[91] . '</p>';
                                    } else {
                                        $old_versions = array('1.2.5-1', '1.3', '1.3.1', '1.3.2', '1.3.2-1', '1.3.3', '1.3.4', '1.3.5', '1.3.6', '1.3.7', '1.3.8', '1.3.9', '1.3.10', '1.3.11', '1.4.0', '1.4.1', '1.5.0', '1.5.1', '1.5.2', '1.6.0');
                                        if (empty($curv)) {
                                            // If we were unable to determine the current GL
                                            // version is then ask the user what it is
                                            $display .= '<h2>' . $LANG_INSTALL[76] . '</h2>
                            <p>' . $LANG_INSTALL[77] . '</p>
                            <form action="index.php" method="post">
                            <input type="hidden" name="mode" value="upgrade"' . XHTML . '>
                            <input type="hidden" name="step" value="3"' . XHTML . '>
                            <input type="hidden" name="dbconfig_path" value="' . htmlspecialchars($dbconfig_path) . '"' . XHTML . '>
                            <p><label class="' . $form_label_dir . '">' . $LANG_INSTALL[89] . '</label> <select name="version">';
                                            $tmp_counter = 0;
                                            $ver_selected = '';
                                            foreach ($old_versions as $version) {
                                                if ($tmp_counter == count($old_versions) - 1) {
                                                    $ver_selected = ' selected="selected"';
                                                }
                                                $display .= LB . '<option' . $ver_selected . '>' . $version . '</option>';
                                                $tmp_counter++;
                                            }
                                            $display .= '</select></p>
                            <br' . XHTML . '>
                            <input type="submit" name="submit" class="submit button big-button" value="' . $LANG_INSTALL[25] . ' &gt;&gt;"' . XHTML . '>
                            </form>' . LB;
                                            $curv = $old_versions[count($old_versions) - 1];
                                        } else {
                                            // Continue on to step 3 where the upgrade will happen
                                            header('Location: ' . $req_string . '&version=' . $curv);
                                        }
                                    }
                                    break;
                            }
                        }
                    }
                }
            }
            break;
            /**
             * Page 3 - Install
             */
        /**
         * Page 3 - Install
         */
        case 3:
            $gl_path = str_replace('db-config.php', '', $dbconfig_path);
            $install_plugins = isset($_REQUEST['install_plugins']) && !empty($_REQUEST['install_plugins']) ? true : false;
            $next_link = $install_plugins ? 'install-plugins.php?language=' . $language : 'success.php?type=' . $install_type . '&language=' . $language;
            switch ($install_type) {
                case 'install':
                    if (isset($_POST['submit']) && $_POST['submit'] == '<< ' . $LANG_INSTALL[61]) {
                        header('Location: index.php?mode=install');
                    }
                    // Check whether to use InnoDB tables
                    $use_innodb = false;
                    if (isset($_POST['innodb']) && $_POST['innodb'] == 'true' || isset($_GET['innodb']) && $_GET['innodb'] == 'true') {
                        $use_innodb = true;
                    }
                    $utf8 = false;
                    if (isset($_POST['utf8']) && $_POST['utf8'] == 'true' || isset($_GET['utf8']) && $_GET['utf8'] == 'true') {
                        $utf8 = true;
                    }
                    // We need all this just to do one DB query
                    require_once $dbconfig_path;
                    require_once $siteconfig_path;
                    require_once $_CONF['path_system'] . 'lib-database.php';
                    // Check if GL is already installed
                    if (INST_checkTableExists('vars')) {
                        $display .= '<p>' . $LANG_INSTALL[63] . '</p>
                        <ol>
                            <li>' . $LANG_INSTALL[64] . '</li>
                            <li>' . $LANG_INSTALL[65] . '</li>
                        </ol>

                        <div style="margin-left: auto; margin-right: auto; width: 175px">
                            <div style="position: absolute">
                                <form action="index.php" method="post">
                                <input type="hidden" name="mode" value="install"' . XHTML . '>
                                <input type="hidden" name="step" value="3"' . XHTML . '>
                                <input type="hidden" value="' . $language . '"' . XHTML . '>
                                <input type="hidden" name="dbconfig_path" value="' . htmlspecialchars($dbconfig_path) . '"' . XHTML . '>
                                <input type="hidden" name="innodb" value="' . ($use_innodb ? 'true' : 'false') . '"' . XHTML . '>
                                <input type="hidden" name="install_plugins" value="' . $install_plugins . '"' . XHTML . '>
                                <input type="submit" class="button big-button" value="' . $LANG_INSTALL[66] . '"' . XHTML . '>
                                </form>
                            </div>

                            <div style="position: relative; left: 105px; top: 5px">
                                <form action="index.php" method="post">
                                <input type="hidden" name="mode" value="upgrade"' . XHTML . '>
                                <input type="hidden" name="language" value="' . $language . '"' . XHTML . '>
                                <input type="hidden" name="dbconfig_path" value="' . htmlspecialchars($dbconfig_path) . '"' . XHTML . '>
                                <input type="submit" class="button big-button" value="' . $LANG_INSTALL[25] . '"' . XHTML . '>
                                </form>
                            </div>
                        </div>
                        ' . LB;
                    } else {
                        if (INST_createDatabaseStructures()) {
                            $site_name = isset($_POST['site_name']) ? $_POST['site_name'] : (isset($_GET['site_name']) ? $_GET['site_name'] : '');
                            $site_slogan = isset($_POST['site_slogan']) ? $_POST['site_slogan'] : (isset($_GET['site_slogan']) ? $_GET['site_slogan'] : '');
                            $site_url = isset($_POST['site_url']) ? $_POST['site_url'] : (isset($_GET['site_url']) ? $_GET['site_url'] : '');
                            $site_admin_url = isset($_POST['site_admin_url']) ? $_POST['site_admin_url'] : (isset($_GET['site_admin_url']) ? $_GET['site_admin_url'] : '');
                            $site_mail = isset($_POST['site_mail']) ? $_POST['site_mail'] : (isset($_GET['site_mail']) ? $_GET['site_mail'] : '');
                            $noreply_mail = isset($_POST['noreply_mail']) ? $_POST['noreply_mail'] : (isset($_GET['noreply_mail']) ? $_GET['noreply_mail'] : '');
                            INST_personalizeAdminAccount($site_mail, $site_url);
                            // Insert the form data into the conf_values table
                            require_once $_CONF['path_system'] . 'classes/config.class.php';
                            require_once 'config-install.php';
                            install_config();
                            $config = config::get_instance();
                            $config->set('site_name', urldecode($site_name));
                            $config->set('site_slogan', urldecode($site_slogan));
                            $config->set('site_url', urldecode($site_url));
                            $config->set('site_admin_url', urldecode($site_admin_url));
                            $config->set('site_mail', urldecode($site_mail));
                            $config->set('noreply_mail', urldecode($noreply_mail));
                            $config->set('path_html', $html_path);
                            $config->set('path_log', $gl_path . 'logs/');
                            $config->set('path_language', $gl_path . 'language/');
                            $config->set('backup_path', $gl_path . 'backups/');
                            $config->set('path_data', $gl_path . 'data/');
                            $config->set('path_images', $html_path . 'images/');
                            $config->set('path_themes', $html_path . 'layout/');
                            $config->set('rdf_file', $html_path . 'backend/geeklog.rss');
                            $config->set('path_pear', $_CONF['path_system'] . 'pear/');
                            $config->set_default('default_photo', urldecode($site_url) . '/default.jpg');
                            $lng = INST_getDefaultLanguage($gl_path . 'language/', $language, $utf8);
                            if (!empty($lng)) {
                                $config->set('language', $lng);
                            }
                            INST_setVersion($siteconfig_path);
                            if (!$install_plugins) {
                                // do a default install of all available plugins
                                /**
                                 * For the plugin install we would actually need
                                 * lib-common.php in the global namespace. Since
                                 * we're in a function, we need to hack a few
                                 * things and rely on a few global declarations
                                 * (see beginning of function).
                                 */
                                // Hack: not needed here - avoid notice
                                $_DB_mysqldump_path = '';
                                // Hack: lib-common will overwrite $language
                                $lx_inst = $language;
                                require_once '../../lib-common.php';
                                $language = $lx_inst;
                                INST_defaultPluginInstall();
                            }
                            // Installation is complete. Continue onto either
                            // custom plugin installation page or success page
                            header('Location: ' . $next_link);
                        } else {
                            $display .= "<h2>" . $LANG_INSTALL[67] . "</h2><p>" . $LANG_INSTALL[68] . "</p>";
                        }
                    }
                    break;
                case 'upgrade':
                    // Get and set which version to display
                    $version = '';
                    if (isset($_GET['version'])) {
                        $version = $_GET['version'];
                    } else {
                        if (isset($_POST['version'])) {
                            $version = $_POST['version'];
                        }
                    }
                    // Let's do this
                    require_once $dbconfig_path;
                    require_once $siteconfig_path;
                    require_once $_CONF['path_system'] . 'lib-database.php';
                    // If this is a MySQL database check to see if it was
                    // installed with InnoDB support
                    if ($_DB_dbms == 'mysql') {
                        // Query `vars` and see if 'database_engine' == 'InnoDB'
                        $result = DB_query("SELECT `name`,`value` FROM {$_TABLES['vars']} WHERE `name`='database_engine'");
                        $row = DB_fetchArray($result);
                        if ($row['value'] == 'InnoDB') {
                            $use_innodb = true;
                        } else {
                            $use_innodb = false;
                        }
                    }
                    if (INST_doDatabaseUpgrades($version)) {
                        if (version_compare($version, '1.5.0') == -1) {
                            // After updating the database we'll want to update some of the information from the form.
                            $site_name = isset($_POST['site_name']) ? $_POST['site_name'] : (isset($_GET['site_name']) ? $_GET['site_name'] : '');
                            $site_slogan = isset($_POST['site_slogan']) ? $_POST['site_slogan'] : (isset($_GET['site_slogan']) ? $_GET['site_slogan'] : '');
                            $site_url = isset($_POST['site_url']) ? $_POST['site_url'] : (isset($_GET['site_url']) ? $_GET['site_url'] : '');
                            $site_admin_url = isset($_POST['site_admin_url']) ? $_POST['site_admin_url'] : (isset($_GET['site_admin_url']) ? $_GET['site_admin_url'] : '');
                            $site_mail = isset($_POST['site_mail']) ? $_POST['site_mail'] : (isset($_GET['site_mail']) ? $_GET['site_mail'] : '');
                            $noreply_mail = isset($_POST['noreply_mail']) ? $_POST['noreply_mail'] : (isset($_GET['noreply_mail']) ? $_GET['noreply_mail'] : '');
                            require_once $_CONF['path_system'] . 'classes/config.class.php';
                            $config = config::get_instance();
                            $config->set('site_name', urldecode($site_name));
                            $config->set('site_slogan', urldecode($site_slogan));
                            $config->set('site_url', urldecode($site_url));
                            $config->set('site_admin_url', urldecode($site_admin_url));
                            $config->set('site_mail', urldecode($site_mail));
                            $config->set('noreply_mail', urldecode($noreply_mail));
                            $config->set_default('default_photo', urldecode($site_url) . '/default.jpg');
                        } else {
                            $site_url = isset($_POST['site_url']) ? $_POST['site_url'] : (isset($_GET['site_url']) ? $_GET['site_url'] : '');
                            $site_admin_url = isset($_POST['site_admin_url']) ? $_POST['site_admin_url'] : (isset($_GET['site_admin_url']) ? $_GET['site_admin_url'] : '');
                        }
                        INST_fixPathsAndUrls($_CONF['path'], $html_path, urldecode($site_url), urldecode($site_admin_url));
                        // disable plugins for which we don't have the source files
                        INST_checkPlugins();
                        // extra step 4: upgrade plugins
                        $next_link = 'index.php?step=4&mode=' . $install_type . '&language=' . $language;
                        if ($install_plugins) {
                            $next_link .= '&install_plugins=true';
                        }
                        header('Location: ' . $next_link);
                    } else {
                        $display .= '<h2>' . $LANG_INSTALL[78] . '</h2>
                        <p>' . $LANG_INSTALL[79] . '</p>' . LB;
                    }
                    break;
            }
            break;
            /**
             * Extra Step 4 - Upgrade plugins
             */
        /**
         * Extra Step 4 - Upgrade plugins
         */
        case 4:
            INST_pluginUpgrades();
            $install_plugins = isset($_GET['install_plugins']) && !empty($_GET['install_plugins']) ? true : false;
            if (!$install_plugins) {
                // if we don't do the manual selection, install all new plugins now
                INST_autoinstallNewPlugins();
            }
            $next_link = $install_plugins ? 'install-plugins.php?language=' . $language : 'success.php?type=' . $install_type . '&language=' . $language;
            header('Location: ' . $next_link);
            break;
    }
}
Example #5
-1
/**
 * Performs base site install and prompts for plugin / content install
 *
 * Initializes the database and configuration settings.
 * Prompts user for optional content and plugins to install.
 *
 * @return  string          HTML form
 *
 */
function INST_installAndContentPlugins()
{
    global $_GLFUSION, $_SYSTEM, $_CONF, $_TABLES, $_DB, $_DB_dbms, $_DB_host, $_DB_user, $_DB_pass, $site_url, $_DB_table_prefix, $LANG_INSTALL;
    if (($rc = _checkSession()) !== 0) {
        return $rc;
    }
    $_GLFUSION['currentstep'] = 'contentplugins';
    if (isset($_GLFUSION['innodb'])) {
        $use_innodb = $_GLFUSION['innodb'];
    } else {
        $use_innodb = false;
    }
    $utf8 = isset($_GLFUSION['utf8']) ? $_GLFUSION['utf8'] : 1;
    if ($utf8) {
        $charset = 'utf-8';
    } else {
        $charset = 'iso-8859-1';
    }
    if (isset($_GLFUSION['language'])) {
        $language = $_GLFUSION['language'];
    } else {
        $language = 'english';
    }
    $_PATH['dbconfig_path'] = $_GLFUSION['dbconfig_path'];
    $_PATH['public_html'] = INST_getHtmlPath();
    if (!preg_match('/^.*\\/$/', $_PATH['public_html'])) {
        $_PATH['public_html'] .= '/';
    }
    $dbconfig_path = str_replace('db-config.php', '', $_PATH['dbconfig_path']);
    // check the lib-custom...
    if (!@file_exists($_PATH['dbconfig_path'] . 'system/lib-custom.php')) {
        if (@file_exists($_PATH['dbconfig_path'] . 'system/lib-custom.php.dist')) {
            $rc = @copy($_PATH['dbconfig_path'] . 'system/lib-custom.php.dist', $_PATH['dbconfig_path'] . 'system/lib-custom.php');
            if ($rc === false) {
                return _displayError(LIBCUSTOM_NOT_WRITABLE, 'getsiteinformation');
            }
        } else {
            // no lib-custom.php.dist found
            return _displayError(LIBCUSTOM_NOT_FOUND, 'getsiteinformation');
        }
    }
    // check and see if site config really exists...
    if (!@file_exists($_PATH['public_html'] . 'siteconfig.php')) {
        if (@file_exists($_PATH['public_html'] . 'siteconfig.php.dist')) {
            $rc = @copy($_PATH['public_html'] . 'siteconfig.php.dist', $_PATH['public_html'] . 'siteconfig.php');
            if ($rc === false) {
                return _displayError(SITECONFIG_NOT_WRITABLE, 'getsiteinformation');
            }
            @chmod($_PATH['public_html'] . 'siteconfig.php', 0777);
            if (!@file_exists($_PATH['public_html'] . 'siteconfig.php')) {
                return _displayError(SITECONFIG_NOT_WRITABLE, 'getsiteinformation');
            }
        } else {
            // no site config found return error
            return _displayError(SITECONFIG_NOT_FOUND, 'getsiteinformation');
        }
    }
    // Edit siteconfig.php and enter the correct path and system directory path
    $siteconfig_path = $_PATH['public_html'] . 'siteconfig.php';
    $siteconfig_file = fopen($siteconfig_path, 'r');
    if ($siteconfig_file === false) {
        return _displayError(SITECONFIG_NOT_WRITABLE, 'getsiteinformation');
    }
    $siteconfig_data = fread($siteconfig_file, filesize($siteconfig_path));
    fclose($siteconfig_file);
    if (!file_exists($siteconfig_path)) {
        return _displayError(FILE_INCLUDE_ERROR, 'pathsetting', 'Error Code: ' . __LINE__);
    }
    require $siteconfig_path;
    $siteconfig_data = str_replace("\$_CONF['path'] = '{$_CONF['path']}';", "\$_CONF['path'] = '" . str_replace('db-config.php', '', $_PATH['dbconfig_path']) . "';", $siteconfig_data);
    $siteconfig_data = preg_replace('/\\$_CONF\\[\'default_charset\'\\] = \'[^\']*\';/', "\$_CONF['default_charset'] = '" . $charset . "';", $siteconfig_data);
    $siteconfig_file = fopen($siteconfig_path, 'w');
    if (!fwrite($siteconfig_file, $siteconfig_data)) {
        return _displayError(SITECONFIG_NOT_WRITABLE, 'getsiteinformation');
    }
    fclose($siteconfig_file);
    require $siteconfig_path;
    $config_file = $_GLFUSION['dbconfig_path'] . 'db-config.php';
    if (!file_exists($config_file)) {
        return _displayError(FILE_INCLUDE_ERROR, 'pathsetting', 'Error Code: ' . __LINE__);
    }
    require $config_file;
    $db = array('host' => isset($_GLFUSION['db_host']) ? $_GLFUSION['db_host'] : $_DB_host, 'name' => isset($_GLFUSION['db_name']) ? $_GLFUSION['db_name'] : $_DB_name, 'user' => isset($_GLFUSION['db_user']) ? $_GLFUSION['db_user'] : $_DB_user, 'pass' => isset($_GLFUSION['db_pass']) ? $_GLFUSION['db_pass'] : $_DB_pass, 'table_prefix' => isset($_GLFUSION['db_prefix']) ? $_GLFUSION['db_prefix'] : $_DB_table_prefix, 'type' => isset($_GLFUSION['db_type']) ? $_GLFUSION['db_type'] : $_DB_type);
    $dbconfig_file = fopen($config_file, 'r');
    $dbconfig_data = fread($dbconfig_file, filesize($config_file));
    fclose($dbconfig_file);
    $dbconfig_data = str_replace("\$_DB_host = '" . $_DB_host . "';", "\$_DB_host = '" . $_GLFUSION['db_host'] . "';", $dbconfig_data);
    // Host
    $dbconfig_data = str_replace("\$_DB_name = '" . $_DB_name . "';", "\$_DB_name = '" . $_GLFUSION['db_name'] . "';", $dbconfig_data);
    // Database
    $dbconfig_data = str_replace("\$_DB_user = '******';", "\$_DB_user = '******'db_user'] . "';", $dbconfig_data);
    // Username
    $dbconfig_data = str_replace("\$_DB_pass = '******';", "\$_DB_pass = '******'db_pass'] . "';", $dbconfig_data);
    // Password
    $dbconfig_data = str_replace("\$_DB_table_prefix = '" . $_DB_table_prefix . "';", "\$_DB_table_prefix = '" . $_GLFUSION['db_prefix'] . "';", $dbconfig_data);
    // Table prefix
    $dbconfig_data = str_replace("\$_DB_dbms = '" . $_DB_dbms . "';", "\$_DB_dbms = '" . $_GLFUSION['db_type'] . "';", $dbconfig_data);
    // Database type
    // Write changes to db-config.php
    $dbconfig_file = fopen($config_file, 'w');
    if (!fwrite($dbconfig_file, $dbconfig_data)) {
        return _displayError(DBCONFIG_NOT_WRITABLE, 'getsiteinformation');
    }
    fflush($dbconfig_file);
    fclose($dbconfig_file);
    require $config_file;
    if (!file_exists($_CONF['path_system'] . 'lib-database.php')) {
        return _displayError(FILE_INCLUDE_ERROR, 'pathsetting', 'Error code: ' . __LINE__);
    }
    require $_CONF['path_system'] . 'lib-database.php';
    if ($_DB_dbms == 'mysqli') {
        $_DB_dbms = 'mysql';
    }
    list($rc, $errors) = INST_createDatabaseStructures($use_innodb);
    if ($rc != true) {
        return _displayError(DB_NO_CONNECT, 'getsiteinformation', $errors);
    }
    $site_name = isset($_GLFUSION['site_name']) ? $_GLFUSION['site_name'] : '';
    $site_slogan = isset($_GLFUSION['site_slogan']) ? $_GLFUSION['site_slogan'] : '';
    $site_url = isset($_GLFUSION['site_url']) ? $_GLFUSION['site_url'] : INST_getSiteUrl();
    $site_admin_url = isset($_GLFUSION['site_admin_url']) ? $_GLFUSION['site_admin_url'] : INST_getSiteAdminUrl();
    $site_mail = isset($_GLFUSION['site_mail']) ? $_GLFUSION['site_mail'] : '';
    $noreply_mail = isset($_GLFUSION['noreply_mail']) ? $_GLFUSION['noreply_mail'] : '';
    $log_path = isset($_GLFUSION['log_path']) ? $_GLFUSION['log_path'] : $gl_path . 'logs/';
    $lang_path = isset($_GLFUSION['lang_path']) ? $_GLFUSION['lang_path'] : $gl_path . 'language/';
    $backup_path = isset($_GLFUSION['backup_path']) ? $_GLFUSION['backup_path'] : $gl_path . 'backups/';
    $data_path = isset($_GLFUSION['data_path']) ? $_GLFUSION['data_path'] : $gl_path . 'data/';
    INST_personalizeAdminAccount($site_mail, $site_url);
    if (!file_exists($_CONF['path_system'] . 'classes/config.class.php')) {
        return _displayError(FILE_INCLUDE_ERROR, 'pathsetting', 'Error Code: ' . __LINE__);
    }
    require_once $_CONF['path_system'] . 'classes/config.class.php';
    require_once 'config-install.php';
    install_config($site_url);
    $gl_path = $_GLFUSION['dbconfig_path'];
    $html_path = $_PATH['public_html'];
    $config = config::get_instance();
    $config->set('site_name', $site_name);
    $config->set('site_slogan', $site_slogan);
    $config->set('site_url', $site_url);
    $config->set('site_admin_url', $site_admin_url);
    $config->set('site_mail', $site_mail);
    $config->set('noreply_mail', $noreply_mail);
    $config->set('path_html', $html_path);
    $config->set('path_log', $log_path);
    $config->set('path_language', $lang_path);
    $config->set('backup_path', $backup_path);
    $config->set('path_data', $data_path);
    $config->set('path_images', $html_path . 'images/');
    $config->set('path_themes', $html_path . 'layout/');
    $config->set('rdf_file', $html_path . 'backend/glfusion.rss');
    $config->set('path_pear', $_CONF['path_system'] . 'pear/');
    $config->set_default('default_photo', $site_url . '/default.jpg');
    $lng = INST_getDefaultLanguage($gl_path . 'language/', $language, $utf8);
    if (!empty($lng)) {
        $config->set('language', $lng);
    }
    $_CONF['path_html'] = $html_path;
    $_CONF['site_url'] = $site_url;
    $_CONF['site_admin_url'] = $site_admin_url;
    // Setup default theme
    $config->set('theme', 'cms');
    DB_query("UPDATE {$_TABLES['users']} SET theme='cms' WHERE uid=2", 1);
    $var = time() - rand();
    $session_cookie = 'pw' . substr(md5($var), 0, 3);
    DB_query("UPDATE {$_TABLES['conf_values']} SET value='" . serialize($session_cookie) . "' WHERE name='cookie_password'", 1);
    $var = time() - rand();
    $session_cookie = 'pc' . substr(md5($var), 0, 3);
    DB_query("UPDATE {$_TABLES['conf_values']} SET value='" . serialize($session_cookie) . "' WHERE name='cookie_name'", 1);
    $var = time() - rand();
    $session_cookie = 'sc' . substr(md5($var), 0, 3);
    DB_query("UPDATE {$_TABLES['conf_values']} SET value='" . serialize($session_cookie) . "' WHERE name='cookie_session'", 1);
    $config->_purgeCache();
    // rebuild the config array
    if (!file_exists($siteconfig_path)) {
        return _displayError(FILE_INCLUDE_ERROR, 'pathsetting', 'Error Code: ' . __LINE__);
    }
    include $siteconfig_path;
    $config->set_configfile($_CONF['path'] . 'db-config.php');
    $config->load_baseconfig();
    $config->initConfig();
    $_CONF = $config->get_config('Core');
    $config->_purgeCache();
    @touch($log_path . 'error.log');
    @touch($log_path . 'access.log');
    @touch($log_path . 'captcha.log');
    @touch($log_path . 'spamx.log');
    global $_CONF, $_SYSTEM, $_DB, $_DB_dbms, $_GROUPS, $_RIGHTS, $TEMPLATE_OPTIONS;
    if (!file_exists($_CONF['path_html'] . 'lib-common.php')) {
        return _displayError(FILE_INCLUDE_ERROR, 'pathsetting', 'Error Code: ' . __LINE__);
    }
    require $_CONF['path_html'] . 'lib-common.php';
    if ($_DB_dbms == 'mysqli') {
        $_DB_dbms = 'mysql';
    }
    INST_pluginAutoInstall('bad_behavior2');
    INST_pluginAutoInstall('captcha');
    INST_pluginAutoInstall('ckeditor');
    INST_pluginAutoInstall('commentfeeds');
    INST_pluginAutoInstall('spamx');
    INST_pluginAutoInstall('staticpages');
    $config->_purgeCache();
    INST_clearCache();
    $T = new TemplateLite('templates/');
    $T->set_file('page', 'contentplugins.thtml');
    $T->set_var(array('lang_content_plugins' => $LANG_INSTALL['content_plugins'], 'lang_load_sample_content' => $LANG_INSTALL['load_sample_content'], 'lang_samplecontent_desc' => $LANG_INSTALL['samplecontent_desc'], 'lang_calendar' => $LANG_INSTALL['calendar'], 'lang_filemgmt' => $LANG_INSTALL['filemgmt'], 'lang_mediagallery' => $LANG_INSTALL['mediagallery'], 'lang_forum' => $LANG_INSTALL['forum'], 'lang_polls' => $LANG_INSTALL['polls'], 'lang_links' => $LANG_INSTALL['links'], 'lang_calendar_desc' => $LANG_INSTALL['calendar_desc'], 'lang_filemgmt_desc' => $LANG_INSTALL['filemgmt_desc'], 'lang_mediagallery_desc' => $LANG_INSTALL['mediagallery_desc'], 'lang_forum_desc' => $LANG_INSTALL['forum_desc'], 'lang_polls_desc' => $LANG_INSTALL['polls_desc'], 'lang_links_desc' => $LANG_INSTALL['links_desc'], 'lang_next' => $LANG_INSTALL['next'], 'hiddenfields' => _buildHiddenFields()));
    $T->parse('output', 'page');
    return $T->finish($T->get_var('output'));
}