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 requirements
function 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 installation
function 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 file
function 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 IIS
if (!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 url
if (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 installation
function 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 settings
if(!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">
<?php
foreach ($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 requirements
function 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 set
if ($currentVersion) {
$index = array_search($currentVersion, $spVersionList);
$lastIndex = count($spVersionList) - 1;
// if it is not last index value
if ($index != $lastIndex) {
$prevIndex = $index;
// loop through the versions
for ($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 header
function 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 footer
function showDefaultFooter($content='') {
?>
</div>
</body>
</html>
<?php
}
# function to create seo panel API Key
function 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);
}
}
}
?>