Blame | Last modification | View Log | RSS feed
<?php/**************************************************************************** Copyright (C) 2009-2011 by Geo Varghese(www.seopanel.in) ** sendtogeo@gmail.com ** ** 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. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the ** Free Software Foundation, Inc., ** 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ****************************************************************************/class Install {# func to check requirementsfunction checkRequirements($error=false) {$phpClass = "red";$phpSupport = "No";$phpVersion = phpversion();if (intval($phpVersion) >= 5) {$phpClass = "green";$phpSupport = "Yes";}$phpSupport .= " ( PHP $phpVersion )";$mysqlClass = "red";$mysqlSupport = "No";if(function_exists('mysql_query') || function_exists('mysqli_query')){$mysqlSupport = "Yes";$mysqlClass = "green";}$curlClass = "red";$curlSupport = "No";if(function_exists('curl_version')){$version = curl_version();$curlSupport = "Yes ( CURL {$version['version']} )";$curlClass = "green";}/*$shorttagClass = "red";$shorttagSupport = "Disabled";if(ini_get('short_open_tag')){$shorttagSupport = "Enabled";$shorttagClass = "green";}*/$gdClass = "red";$gdSupport = "No";if(function_exists('gd_info')){$version = gd_info();$gdSupport = "Yes ( GD {$version['GD Version']} )";$gdClass = "green";}$configClass = "red";$configSupport = "Not found";$configFile = SP_INSTALL_CONFIG_FILE;if(file_exists($configFile)){include_once(SP_INSTALL_CONFIG_FILE);if(defined('SP_INSTALLED')){die("<p style='color:red'>Seo Panel version ".SP_INSTALLED." is already installed in your system!</p>");}$configSupport = "Found, Unwritable<br><p class='note'><b>Command:</b> chmod 666 config/sp-config.php</p>";if(is_writable($configFile)){$configSupport = "Found, Writable";$configClass = "green";}}$tmpClass = "red";$tmpSupport = "Not found";$tmpFile = SP_INSTALL_DIR.'/../tmp';if(file_exists($tmpFile)){$tmpSupport = "Found, Unwritable<br><p class='note'><b>Command:</b> chmod -R 777 tmp/</p>";if(is_writable($tmpFile)){$tmpSupport = "Found, Writable";$tmpClass = "green";}}$errMsg = "";if($error){if( ($phpClass == 'red') || ($mysqlClass == 'red') || ($curlClass == 'red') || ($shorttagClass == 'red') || ($configClass == 'red') ){$errMsg = "Please fix the following errors to proceed to next step!";}}?><h1 class="BlockHeader">Welcome to Seo panel Installation</h1><form method="post"><table width="100%" cellspacing="8px" cellpadding="0px" class="formtab"><tr><th colspan="2" class="header">Installation compatibility</th></tr><tr><td colspan="2" class="error"><?php echo $errMsg;?></td></tr><tr><th>PHP version >= 5.4.0</th><td class="<?php echo $phpClass;?>"><?php echo $phpSupport;?></td></tr><tr><th>MySQL Support</th><td class="<?php echo $mysqlClass;?>"><?php echo $mysqlSupport;?></td></tr><tr><th>CURL Support</th><td class="<?php echo $curlClass;?>"><?php echo $curlSupport; ?></td></tr><?php /* ?><tr><th>PHP short_open_tag</th><td class="<?php echo $shorttagClass;?>"><?php echo $shorttagSupport; ?></td></tr><?php */ ?><tr><th>GD graphics support</th><td class="<?php echo $gdClass;?>"><?php echo $gdSupport; ?></td></tr><tr><th>/config/sp-config.php</th><td class="<?php echo $configClass;?>"><?php echo $configSupport; ?></td></tr><tr><th>/tmp</th><td class="<?php echo $tmpClass;?>"><?php echo $tmpSupport; ?></td></tr></table><input type="hidden" value="<?php echo $phpClass;?>" name="php_support"><input type="hidden" value="<?php echo $mysqlClass;?>" name="mysql_support"><input type="hidden" value="<?php echo $curlClass;?>" name="curl_support"><?php /* ?><input type="hidden" value="<?php echo $shorttagClass;?>" name="short_open_tag"><?php */ ?><input type="hidden" value="<?php echo $configClass;?>" name="config"><input type="hidden" value="startinstall" name="sec"><input type="submit" value="Proceed to next step >>" name="submit" class="button"></form><?php}# func to start installationfunction startInstallation($info='', $errMsg='') {if( ($info['php_support'] == 'red') || ($info['mysql_support'] == 'red') || ($info['curl_support'] == 'red')|| ($info['config'] == 'red') ){$this->checkRequirements(true);return;}?><h1 class="BlockHeader">Database Settings</h1><form method="post"><table width="100%" cellspacing="8px" cellpadding="0px" class="formtab"><tr><th colspan="2" class="header">Database configuration</th></tr><tr><td colspan="2" class="error"><?php echo $errMsg;?></td></tr><tr><th>Database type:</th><td><select name="db_engine"><option value="mysql">MySQL</option></select></td></tr><tr><th>Database server hostname:</th><td><input type="text" name="db_host" value="<?php echo empty($info['db_host']) ? "localhost" : $info['db_host'];?>"></td></tr><tr><th>Database name:</th><td><input type="text" name="db_name" value="<?php echo $info['db_name'];?>"></td></tr><tr><th>Database username:</th><td><input type="text" name="db_user" value="<?php echo $info['db_user'];?>"></td></tr><tr><th>Database password:</th><td><input type="text" name="db_pass" value="<?php echo $info['db_pass'];?>"></td></tr><tr><th>Admin email address:</th><td><input type="text" name="email" value="<?php echo $info['email'];?>"></td></tr></table><input type="hidden" value="proceedinstall" name="sec"><input type="submit" value="Proceed to next step >>" name="submit" class="button"></form><?php}# func to write to config filefunction writeConfigFile($info) {$handle = fopen(SP_INSTALL_CONFIG_SAMPLE, "r");$cfgData = fread($handle, filesize(SP_INSTALL_CONFIG_SAMPLE));fclose($handle);$search = array('[SP_WEBPATH]', '[DB_NAME]', '[DB_USER]', '[DB_PASSWORD]', '[DB_HOST]', '[DB_ENGINE]');$replace = array($info['web_path'], $info['db_name'], $info['db_user'], $info['db_pass'], $info['db_host'], $info['db_engine'] );$cfgData = str_replace($search, $replace, $cfgData);$handle = fopen(SP_INSTALL_CONFIG_FILE, "w");fwrite($handle, $cfgData);fclose($handle);}function getWebPath(){// to fix the issue with IISif (!isset($_SERVER['REQUEST_URI'])) {$_SERVER['REQUEST_URI'] = substr($_SERVER['PHP_SELF'], 1 );if (isset($_SERVER['QUERY_STRING'])) {$_SERVER['REQUEST_URI'].='?'.$_SERVER['QUERY_STRING'];}}$reqUrl = $_SERVER['REQUEST_URI'];$count = 0;$reqUrl = preg_replace('/\/install\/$/i', '', $reqUrl, 1, $count);if(empty($count)){$reqUrl = preg_replace('/\/install\/index.php$/i', '', $reqUrl, 1, $count);if(empty($count)){$reqUrl = preg_replace('/\/install$/i', '', $reqUrl, 1, $count);if(empty($count)) return false;}}// find protocol of the server to get seo panel installation urlif (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {$protocol = 'https://';} else {$protocol = 'http://';}$port = empty($_SERVER['SERVER_PORT']) ? "" : (int) $_SERVER['SERVER_PORT'];$host = strtolower($_SERVER['HTTP_HOST']);if(!empty($port) && ($port <> 443) && ($port <> 80)){if(strpos($host, ':') === false){ $host .= ':' . $port; }}$webPath = $protocol.$host.$reqUrl;return $webPath;}# func to proceed installationfunction proceedInstallation($info) {// if mysqli function exists$db = function_exists('mysqli_query') ? New DBI() : New DB();# checking db settings$errMsg = $db->connectDatabase($info['db_host'], $info['db_user'], $info['db_pass'], $info['db_name']);if($db->error ){$this->startInstallation($info, $errMsg);return;}# checking config file settingsif(!is_writable(SP_INSTALL_CONFIG_FILE)){$this->checkRequirements(true);return;}# checking seo panel web path$info['web_path'] = $this->getWebPath();if(empty($info['web_path'])){$errMsg = "Error occured while parsing installation url. Please <a href='https://www.seopanel.org/contact/' target='_blank'>contact</a> Seo Panel team.<br> or <br> Try manual installation by steps specified in <a href='http://www.seopanel.org/install/manual/' target='_blank'>http://www.seopanel.org/install/manual/</a>";$this->startInstallation($info, $errMsg);return;}# importing data to db$errMsg = $db->importDatabaseFile(SP_INSTALL_DB_FILE);if($db->error ){$errMsg = "Error occured while importing data: ". $errMsg;$this->startInstallation($info, $errMsg);return;}# importing text file$errMsg = $db->importDatabaseFile(SP_INSTALL_DB_LANG_FILE);if($db->error ){$errMsg = "Error occured while importing data: ". $errMsg;$this->startInstallation($info, $errMsg);return;}# write to config file$this->writeConfigFile($info);# create API Key if not exists$this->createSeoPanelAPIKey($db);if(gethostbynamel('seopanel.in')){include_once SP_INSTALL_DIR.'/../libs/spider.class.php';include_once(SP_INSTALL_CONFIG_FILE);$installUpdateUrl = "https://www.seopanel.org/installupdate.php?url=".urlencode($info['web_path'])."&ip=".$_SERVER['SERVER_ADDR']."&email=".urlencode($info['email']);$installUpdateUrl .= "&version=".SP_INSTALLED;$spider = New Spider();$spider->getContent($installUpdateUrl, false, false);}$db = function_exists('mysqli_query') ? New DBI() : New DB();$db->connectDatabase($info['db_host'], $info['db_user'], $info['db_pass'], $info['db_name']);// update email for admin$sql = "update users set email='".addslashes($info['email'])."' where id=1";$db->query($sql);// select languages list$sql = "select * from languages where translated=1";$langList = $db->select($sql);// select timezones$sql = "select * from timezone order by id";$timezoneList = $db->select($sql);?><form method="post" action="<?php echo $info['web_path']."/login.php"; ?>"><h1 class="BlockHeader">Seo Panel Installation Success</h1><table width="100%" cellspacing="8px" cellpadding="0px" class="formtab"><tr><th colspan="2" class="headersuccess">Seo Panel installed successfully!</th></tr><tr><td class="warning" colspan="2">Warning!</td></tr><tr><td style="border: none;" colspan="2"><ul class="list"><li> Please change permission of config file <b><?php echo SP_CONFIG_FILE;?></b> to avoid security issues.</li><li>Please remove installation directory <b>install</b> to avoid security issues.</li></ul></td></tr><tr><td class="warning" style="color:black;" colspan="2">Admin Login</td></tr><tr><td style="border-left: none;">Default Language:</td><td><select name="lang_code"><?phpforeach ($langList as $langInfo) {$selected = ($langInfo['lang_code'] == 'en') ? "selected" : "";?><option value="<?php echo $langInfo['lang_code']?>" <?php echo $selected?>><?php echo $langInfo['lang_name']?></option><?php}?></select></td></tr><tr><td style="border-left: none;">Default Time Zone:</td><td><select name="time_zone" style="width: 260px;"><?php$listInfo['set_val'] = ini_get('date.timezone');foreach ($timezoneList as $timezoneInfo) {$selected = (trim($timezoneInfo['timezone_name']) == $listInfo['set_val']) ? 'selected="selected"' : "";?><option value="<?php echo $timezoneInfo['timezone_name']?>" <?php echo $selected?> ><?php echo $timezoneInfo['timezone_label']?></option><?php}?></select></td></tr><tr><td style="border: none;font-weight: normal;font-size: 13px;" colspan="2"><b>Username:</b> <?php echo SP_ADMIN_USER?><br><b>Password:</b> <?php echo SP_ADMIN_PASS?><br><br><b>Note:</b> Please change password of admin after first login.</td></tr></table><input type="hidden" name="sec" value="login"><input type="hidden" name="userName" value="spadmin"><input type="hidden" name="password" value="spadmin"><input type="submit" value="Proceed to admin login >>" name="submit" class="button"></form><?php}# func to check upgrade requirementsfunction checkUpgradeRequirements($error=false, $errorMsg='') {$phpClass = "red";$phpSupport = "No";$phpVersion = phpversion();if (intval($phpVersion) >= 5) {$phpClass = "green";$phpSupport = "Yes";}$phpSupport .= " ( PHP $phpVersion )";$mysqlClass = "red";$mysqlSupport = "No";if(function_exists('mysql_query')|| function_exists('mysqli_query')){$mysqlSupport = "Yes";$mysqlClass = "green";}$curlClass = "red";$curlSupport = "No";if(function_exists('curl_version')){$version = curl_version();$curlSupport = "Yes ( CURL {$version['version']} )";$curlClass = "green";}/*$shorttagClass = "red";$shorttagSupport = "Disabled";if(ini_get('short_open_tag')){$shorttagSupport = "Enabled";$shorttagClass = "green";}*/$gdClass = "red";$gdSupport = "No";if(function_exists('gd_info')){$version = gd_info();$gdSupport = "Yes ( GD {$version['GD Version']} )";$gdClass = "green";}$tmpClass = "red";$tmpSupport = "Not found";$tmpFile = SP_INSTALL_DIR.'/../tmp';if(file_exists($tmpFile)){$tmpSupport = "Found, Unwritable<br><p class='note'><b>Command:</b> chmod -R 777 tmp/</p>";if(is_writable($tmpFile)){$tmpSupport = "Found, Writable";$tmpClass = "green";}}$configClass = "red";$configSupport = "Not found";$configFile = SP_INSTALL_CONFIG_FILE;if(file_exists($configFile)){$configSupport = "Found";$configClass = "green";}$dbClass = "red";$dbSupport = "Database config variables not defined";include_once(SP_INSTALL_CONFIG_FILE);if(defined('DB_HOST') && defined('DB_NAME') && defined('DB_USER') && defined('DB_PASSWORD') && defined('DB_ENGINE')){$db = function_exists('mysqli_query') ? New DBI() : New DB();$errMsg = $db->connectDatabase(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);if($db->error ){$dbSupport = $errMsg;}else{$dbSupport = "Connected to database successfully";$dbClass = "green";}}$errMsg = "";if($error){if(empty($errorMsg)){if( ($phpClass == 'red') || ($mysqlClass == 'red') || ($curlClass == 'red')|| ($configClass == 'red') || ($dbClass == 'red') ){$errMsg = "Please fix the following errors to proceed to next step!";}}else{$errMsg = $errorMsg;}}?><h1 class="BlockHeader">Welcome to Seo panel Upgrade</h1><form method="post"><table width="100%" cellspacing="8px" cellpadding="0px" class="formtab"><tr><th colspan="2" class="header">Upgrade compatibility</th></tr><tr><td colspan="2" class="error"><?php echo $errMsg;?></td></tr><tr><th>PHP version >= 5.4.0</th><td class="<?php echo $phpClass;?>"><?php echo $phpSupport;?></td></tr><tr><th>MySQL Support</th><td class="<?php echo $mysqlClass;?>"><?php echo $mysqlSupport;?></td></tr><tr><th>CURL Support</th><td class="<?php echo $curlClass;?>"><?php echo $curlSupport; ?></td></tr><?php /*?><tr><th>PHP short_open_tag</th><td class="<?php echo $shorttagClass;?>"><?php echo $shorttagSupport; ?></td></tr><?php */ ?><tr><th>GD graphics support</th><td class="<?php echo $gdClass;?>"><?php echo $gdSupport; ?></td></tr><tr><th>/config/sp-config.php</th><td class="<?php echo $configClass;?>"><?php echo $configSupport; ?></td></tr><tr><th>Database</th><td class="<?php echo $dbClass;?>"><?php echo $dbSupport; ?></td></tr><tr><th>/tmp</th><td class="<?php echo $tmpClass;?>"><?php echo $tmpSupport; ?></td></tr></table><input type="hidden" value="<?php echo $phpClass;?>" name="php_support"><input type="hidden" value="<?php echo $mysqlClass;?>" name="mysql_support"><input type="hidden" value="<?php echo $curlClass;?>" name="curl_support"><?php /* ?><input type="hidden" value="<?php echo $shorttagClass;?>" name="short_open_tag"><?php */ ?><input type="hidden" value="<?php echo $configClass;?>" name="config"><input type="hidden" value="<?php echo $dbClass;?>" name="db_support"><input type="hidden" value="proceedupgrade" name="sec"><?php $submitLabel = defined('SP_INSTALLED') ? "Upgrade to Seo Panel v.".SP_INSTALLED : "Upgrade Seo Panel"; ?><input type="submit" value="<?php echo $submitLabel?> >>" name="submit" class="button"></form><?php}function getUpgradeDBFiles($db) {$upgradeFileList = array();$spVersionList = array('3.8.0','3.9.0','3.10.0','3.11.0','3.12.0','3.13.0','3.14.0','3.15.0','3.16.0','3.17.0','3.18.0','4.0.0','4.1.0','4.2.0','4.3.0','4.4.0',);// get current version number$sql = "Select set_val from settings where set_name='SP_VERSION_NUMBER'";$versionInfo = $db->select($sql, true);$currentVersion = !empty($versionInfo['set_val']) ? $versionInfo['set_val'] : '3.8.0';// if current version is setif ($currentVersion) {$index = array_search($currentVersion, $spVersionList);$lastIndex = count($spVersionList) - 1;// if it is not last index valueif ($index != $lastIndex) {$prevIndex = $index;// loop through the versionsfor ($i = $index + 1; $i <= $lastIndex; $i++) {$upgradeFileList[] = SP_INSTALL_DIR . "/data/upgrade_v$spVersionList[$prevIndex]_v$spVersionList[$i].sql";$prevIndex = $i;}}}$upgradeFileList[] = SP_UPGRADE_DB_FILE;return $upgradeFileList;}function proceedUpgrade($info=''){if( ($info['php_support'] == 'red') || ($info['mysql_support'] == 'red') || ($info['curl_support'] == 'red')|| ($info['config'] == 'red') || ($info['db_support'] == 'red')){$this->checkUpgradeRequirements(true);return;}include_once(SP_INSTALL_CONFIG_FILE);$db = function_exists('mysqli_query') ? New DBI() : New DB();// check database connection$errMsg = $db->connectDatabase(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);if($db->error){$this->checkUpgradeRequirements(true, $errMsg);return;}// loop through upgrade files and import data to db$upgradeFileList = $this->getUpgradeDBFiles($db);foreach ($upgradeFileList as $dbFile) {$errMsg = $db->importDatabaseFile($dbFile, false);}// importing text file$errMsg = $db->importDatabaseFile(SP_UPGRADE_DB_LANG_FILE, false);$_SESSION['text'] = "";# create API Key if not exists$this->createSeoPanelAPIKey($db);?><form method="post" action="<?php echo SP_WEBPATH."/login.php"; ?>"><h1 class="BlockHeader">Success Seo Panel v.<?php echo SP_INSTALLED;?> Upgrade</h1><table width="100%" cellspacing="8px" cellpadding="0px" class="formtab"><tr><th colspan="2" class="headersuccess">Seo Panel upgraded successfully!</th></tr><tr><td class="warning">Warning!</td></tr><tr><td style="border: none;"><ul class="list"><li>Please remove installation directory <b>install</b> to avoid security issues.</li></ul></td></tr></table><input type="submit" value="Proceed to admin login >>" name="submit" class="button"></form><?php}# func to show default install headerfunction showDefaultHeader() {?><html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type" /><link rel="shortcut icon" href="../images/favicon.ico" /><title>Seo Panel installation interface</title><meta name="description" content="Seo Panel installation Steps to install seo control panel for managing seo of your sites."><link rel="stylesheet" type="text/css" href="install.css" media="all" /></head><body><div class="installdiv"><?php}# func to show default install footerfunction showDefaultFooter($content='') {?></div></body></html><?php}# function to create seo panel API Keyfunction createSeoPanelAPIKey($db) {$sql = "Select id, set_val from settings where set_name='SP_API_KEY'";$apiInfo = $db->select($sql, true);if (empty($apiInfo['set_val'])) {$apiKey = rand(10000000, 100000000);$apiKey .= rand(10000000, 100000000);$apiKey .= rand(10000000, 100000000);$apiKey = md5($apiKey);if (empty($apiInfo['id'])) {$sql = "Insert into settings(set_label,set_name,set_val,set_type) values('Seo Panel API Key', 'SP_API_KEY', '$apiKey', 'large')";} else {$sql = "update settings set set_val='$apiKey' where set_name='SP_API_KEY'";}$apiInfo = $db->query($sql);}}}?>