798 lines
No EOL
28 KiB
PHP
Executable file
798 lines
No EOL
28 KiB
PHP
Executable file
<?php
|
|
/**
|
|
* Project: BeCast WebEngine - simple site engine
|
|
* File: install.php
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
* @link http://www.becast.at
|
|
* @copyright 2012-2025 becast.at
|
|
* @author Bernhard Jaud <bernhard at becast dot at>
|
|
* @package BcWe core
|
|
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
|
* @version $Id$
|
|
*/
|
|
class lang{
|
|
var array $langname=array('de'=>'Deutsch','en'=>'English');
|
|
var string $lang;
|
|
var array $lf = array();
|
|
|
|
function __construct(){
|
|
$language = "";
|
|
if(isset($_COOKIE['bcwe_install_lang'])) {
|
|
$language = $_COOKIE['bcwe_install_lang'];
|
|
}
|
|
if(!$language || $language==''){
|
|
$lang=$this->getbrowserlang();
|
|
if(!$lang){
|
|
$this->lang='en';
|
|
}else{
|
|
$this->lang=$lang;
|
|
}
|
|
}else{
|
|
$this->lang=$language;
|
|
}
|
|
include dirname(__FILE__).'/languages/'.$this->lang.'.lang.php';
|
|
if (isset($lf)) {
|
|
$this->lf = $lf;
|
|
}
|
|
}
|
|
|
|
|
|
function getbrowserlang(): string
|
|
{
|
|
$allowed_languages=array();
|
|
$langs=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
|
|
if(empty($langs)){
|
|
return "";
|
|
}
|
|
$alangs=$this->getlanguages();
|
|
foreach($alangs as $alang){
|
|
$allowed_languages[]=$alang['short'];
|
|
}
|
|
$accepted_languages = preg_split('/,\s*/', $langs);
|
|
$current_q = 0;
|
|
$current_lang = "";
|
|
foreach ($accepted_languages as $accepted_language) {
|
|
|
|
$res = preg_match ('/^([a-z]{1,8}(?:-[a-z]{1,8})*)'.'(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', $accepted_language, $matches);
|
|
if (!$res) {
|
|
continue;
|
|
}
|
|
$lang_code = explode ('-', $matches[1]);
|
|
|
|
if (isset($matches[2])) {
|
|
$lang_quality = (float)$matches[2];
|
|
} else {
|
|
$lang_quality = 1.0;
|
|
}
|
|
|
|
while (count ($lang_code)) {
|
|
if (in_array (strtolower (join ('-', $lang_code)), $allowed_languages)) {
|
|
if ($lang_quality > $current_q) {
|
|
$current_lang = strtolower (join ('-', $lang_code));
|
|
$current_q = $lang_quality;
|
|
break;
|
|
}
|
|
}
|
|
array_pop ($lang_code);
|
|
}
|
|
}
|
|
return $current_lang;
|
|
}
|
|
|
|
function setlang($lang): void
|
|
{
|
|
setcookie('bcwe_install_lang',$lang);
|
|
}
|
|
|
|
function getlanguages(): array
|
|
{
|
|
$langdir = dirname(__FILE__).'/languages';
|
|
$langs = opendir($langdir);
|
|
$langfile = array();
|
|
$i=0;
|
|
while ($lang = readdir($langs)) {
|
|
if (preg_match('/^.*?\.lang.php$/', $lang)) {
|
|
$langfile[$i]['short']=substr($lang,0,2);
|
|
$langfile[$i]['name']=$this->langname[$langfile[$i]['short']];
|
|
unset($lf);
|
|
$i++;
|
|
}
|
|
}
|
|
@closedir($langs);
|
|
return($langfile);
|
|
}
|
|
|
|
function _($string){
|
|
if(isset($this->lf[$string])){
|
|
return($this->lf[$string]);
|
|
}else{
|
|
return($string);
|
|
}
|
|
}
|
|
}
|
|
class dump{
|
|
var $db;
|
|
var $file;
|
|
var $commands = '';
|
|
var $errors = '';
|
|
|
|
function __construct(& $db){
|
|
$this->db = & $db;
|
|
}
|
|
|
|
function read($dumpfile){
|
|
$datei = fopen($dumpfile,'r');
|
|
while (!feof($datei)){
|
|
$this->file .= fgets($datei,filesize($dumpfile));
|
|
}
|
|
fclose($datei);
|
|
}
|
|
|
|
function prepare($prefix){
|
|
if($prefix!='as_'){
|
|
$this->file= preg_replace('/as_/',$prefix,$this->file);
|
|
}
|
|
$i=0;
|
|
$statements=array();
|
|
|
|
//HACK: We have ; in our Statements. This is to prevent String splitting there.
|
|
$this->file=str_replace(";\n",";~;\n",$this->file);
|
|
//Hack end
|
|
|
|
$lines=explode("\n",$this->file);
|
|
$this->file='';
|
|
$linecount= count($lines);
|
|
for ($i = 0; $i < count($lines); $i++){
|
|
if ( $lines[$i][0] != '#' && substr($lines[$i],0,2) != '--'){
|
|
$this->file.=stripslashes($lines[$i]);
|
|
}
|
|
}
|
|
$this->commands=explode(';~;',$this->file);
|
|
}
|
|
function execute(){
|
|
foreach($this->commands as $c){
|
|
$c=trim($c);
|
|
if($c!=''){
|
|
$result=$this->db->query($c);
|
|
if(!$result){
|
|
$this->errors[]=$this->db->error();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
class install{
|
|
var $t;
|
|
var $stepvalue=array('start'=>0,'license'=>1,'check'=>2,'database'=>3,'user'=>4,'finish'=>5);
|
|
var $chmod_list=array('../'=>'write','../inc'=>'notwrite','../inc/config.inc.php'=>'write','../modules'=>'write','../logs'=>'write');
|
|
var $checkdir=array();
|
|
var $dbas=array();
|
|
var $version;
|
|
function __construct(& $lang){
|
|
$this->version = 'unknown';
|
|
$this->t = & $lang;
|
|
include dirname(__FILE__).'/assets/becastwebengine.ver';
|
|
if (isset($ver)) {
|
|
$this->version=$ver;
|
|
}
|
|
}
|
|
|
|
function checkchmod(){
|
|
$status=true;
|
|
foreach ($this->chmod_list as $dir=>$status) {
|
|
if($status=='write'){
|
|
@chmod($dir,0777);
|
|
}else{
|
|
@chmod($dir,0555);
|
|
}
|
|
if (!is_writeable($dir)) {
|
|
if (!is_dir($dir) && !is_file($dir)){
|
|
$dir_status=$this->t->_('na');
|
|
$color='yellow';
|
|
}else{
|
|
$dir_status=$this->t->_('nichtbeschreibbar');
|
|
if($status=='write'){
|
|
$status=false;
|
|
$color='red';
|
|
}else{
|
|
$color='green';
|
|
}
|
|
}
|
|
}else{
|
|
$dir_status=$this->t->_('beschreibbar');
|
|
if($status=='write'){
|
|
$color='green';
|
|
}else{
|
|
$status=false;
|
|
$color='red';
|
|
}
|
|
}
|
|
$this->checkdir[]=array('dir'=>$dir,'status'=>$dir_status,'color'=>$color);
|
|
}
|
|
return $status;
|
|
}
|
|
|
|
function checkphp(){
|
|
$status=true;
|
|
$version=version_compare(PHP_VERSION, '8.1.0', '>=');
|
|
$color='green';
|
|
if(!$version){
|
|
$status=false;
|
|
$color='red';
|
|
}
|
|
$this->checkphp[]=array('name'=>'PHP','success'=>$color,'status'=>PHP_VERSION,'needed'=>'8.1.0');
|
|
$gd = @gd_info();
|
|
$color='green';
|
|
if(!$gd){
|
|
$success=FALSE;
|
|
$status=false;
|
|
$color='red';
|
|
}
|
|
if($gd['GD Version']==''){
|
|
$success=FALSE;
|
|
$status=$this->t->_('nichtinstalliert');
|
|
$color='red';
|
|
}
|
|
$success=version_compare($gd['GD Version'], '2', '>=');
|
|
if(!$success){
|
|
$success=FALSE;
|
|
$color='red';
|
|
}
|
|
$this->checkphp[]=array('name'=>'GD','success'=>$color,'status'=>$gd['GD Version'],'needed'=>'2.0.0');
|
|
return $status;
|
|
}
|
|
|
|
function getsupportetdbs(){
|
|
$status=false;
|
|
if (class_exists('mysqli')) {
|
|
$status=true;
|
|
$dbas[]=array('short'=>'mysqli','name'=>'MySQLi');
|
|
}
|
|
if (function_exists('mysql_connect')){
|
|
$status=true;
|
|
$dbas[]=array('short'=>'mysql','name'=>'MySQL');
|
|
}
|
|
$this->dbas=$dbas;
|
|
return $status;
|
|
}
|
|
|
|
function generate_Key($length=8){
|
|
$dummy = array_merge(range('0', '9'), range('a', 'z'), range('A', 'Z'));
|
|
mt_srand((double)microtime()*1000000);
|
|
for ($i = 1; $i <= (count($dummy)*2); $i++){
|
|
$swap = mt_rand(0,count($dummy)-1);
|
|
$tmp = $dummy[$swap];
|
|
$dummy[$swap] = $dummy[0];
|
|
$dummy[0] = $tmp;
|
|
}
|
|
return substr(implode('',$dummy),0,$length);
|
|
}
|
|
|
|
function header($step='start'){
|
|
|
|
$header='<!DOCTYPE html>
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="'.$this->t->_('LANG_CODE').'">
|
|
<head>
|
|
<title>BeCastWebEngine Installer</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<style media="all">
|
|
@import "style/install.css";
|
|
</style>
|
|
<!--[if lte IE 6]>
|
|
<style type="text/css" media="all">
|
|
@import "style/ie6_diff.css";
|
|
</style>
|
|
<![endif]-->
|
|
<!--[if gt IE 6]>
|
|
<style type="text/css" media="all">
|
|
@import "style/ie7_diff.css";
|
|
</style>
|
|
<![endif]-->
|
|
</head>
|
|
<body>
|
|
<div id="window">
|
|
<div id="container">';
|
|
$header.=$this->navigation($step);
|
|
$header.='<div class="main">
|
|
<div class="outer-prettification">
|
|
<div class="inner-prettification">
|
|
<div class="header">
|
|
<h1 class="title"><a>BeCastWebEngine - Simple Site Engine Setup</a></h1>
|
|
</div>
|
|
<div class="contents">';
|
|
|
|
echo $header;
|
|
}
|
|
|
|
function navigation($active='start'){
|
|
$nav['head']= '<div class="navigation">
|
|
<ul>';
|
|
$nav['start']='<li><a href="install.php?step=start">'.$this->t->_('Start').'</a></li>';
|
|
$nav['license']='<li><a>'.$this->t->_('Lizenz').'</a></li>';
|
|
$nav['check']='<li><a>'.$this->t->_('Pruefung').'</a></li>';
|
|
$nav['database']='<li><a>'.$this->t->_('Datenbank').'</a></li>';
|
|
$nav['user']='<li><a>'.$this->t->_('Benutzer').'</a></li>';
|
|
$nav['finish']='<li><a>'.$this->t->_('Abschluss').'</a></li>';
|
|
switch($this->stepvalue[$active]){
|
|
case 5:
|
|
$nav['finish']='<li><a href="install.php?step=finish">'.$this->t->_('Abschluss').'</a></li>';
|
|
case 4:
|
|
$nav['user']='<li><a href="install.php?step=user">'.$this->t->_('Benutzer').'</a></li>';
|
|
case 3:
|
|
$nav['database']='<li><a href="install.php?step=database">'.$this->t->_('Datenbank').'</a></li>';
|
|
case 2:
|
|
$nav['check']='<li><a href="install.php?step=check">'.$this->t->_('Pruefung').'</a></li>';
|
|
case 1:
|
|
$nav['license']='<li><a href="install.php?step=license">'.$this->t->_('Lizenz').'</a></li>';
|
|
break;
|
|
}
|
|
switch($active){
|
|
case 'start':
|
|
$nav['start']='<li class="active"><a href="install.php?step=start">'.$this->t->_('Start').'</a></li>';
|
|
break;
|
|
case 'license':
|
|
$nav['license']='<li class="active"><a href="install.php?step=license">'.$this->t->_('Lizenz').'</a></li>';
|
|
break;
|
|
case 'check':
|
|
$nav['check']='<li class="active"><a href="install.php?step=check">'.$this->t->_('Pruefung').'</a></li>';
|
|
break;
|
|
case 'database':
|
|
$nav['database']='<li class="active"><a href="install.php?step=database">'.$this->t->_('Datenbank').'</a></li>';
|
|
break;
|
|
case 'user':
|
|
$nav['user']='<li class="active"><a href="install.php?step=user">'.$this->t->_('Benutzer').'</a></li>';
|
|
break;
|
|
case 'finish':
|
|
$nav['finish']='<li class="active"><a href="install.php?step=finish">'.$this->t->_('Abschluss').'</a></li>';
|
|
break;
|
|
}
|
|
$nav['foot']= '</ul>
|
|
</div>';
|
|
return implode('', $nav);
|
|
}
|
|
|
|
function step($step='start'){
|
|
global $config;
|
|
switch($step){
|
|
|
|
case 'start':
|
|
if(isset($_POST['send'])){
|
|
$this->t->setlang($_POST['language']);
|
|
header("Location: install.php?step=license");
|
|
}
|
|
$options='';
|
|
$languages=$this->t->getlanguages();
|
|
foreach($languages as $lang){
|
|
$options.='<option value="'.$lang['short'].'">'.$lang['name'].'</option>';
|
|
}
|
|
$data='<h3>'.$this->t->_('Wilkommen').'</h3>
|
|
<p>'.$this->t->_('WilkommenText1').'</p>
|
|
<p>'.$this->t->_('Waehledeinesprache').'</p>
|
|
<form action="#" method="post">
|
|
<select name="language">
|
|
'.$options.'
|
|
</select>
|
|
<br>
|
|
<input type="submit" class="nextbutton" name="send" value="'.$this->t->_('Weiter').'" />
|
|
</form>
|
|
<br style="clear:both;" />';
|
|
break;
|
|
|
|
case 'license':
|
|
if(isset($_POST['back'])){
|
|
header("Location: install.php?step=start");
|
|
}
|
|
if(isset($_POST['send'])){
|
|
if($_POST['accept']!=1){
|
|
$err= '<p><div class="comment"><img src="style/images/error.png" alt="" /><span style="color: red;">'.$this->t->_('FehlerAkzeptieren').'</span></div></p>';
|
|
}else{
|
|
header("Location: install.php?step=check");
|
|
}
|
|
}
|
|
$datei = fopen(dirname(__FILE__).'/license/gpl2.txt','r');
|
|
$license='';
|
|
while (!feof($datei)){
|
|
$license .= fgets($datei,1024);
|
|
}
|
|
fclose($datei);
|
|
|
|
$data='<h3>'.$this->t->_('Lizenz').'</h3>
|
|
<p>'.$this->t->_('LizenzText').'</p>
|
|
'.$err.'
|
|
<div class="console" style="height:300px; overflow : auto;">'.$license.'</div>
|
|
<form action="#" method="post">
|
|
<p><input type="checkbox" class="checkbox" name="accept" value="1"/>'.$this->t->_('Akzeptieren').'</p>
|
|
<br />
|
|
<input type="submit" class="prevbutton" name="back" value="'.$this->t->_('Zurueck').'" /><input type="submit" class="nextbutton" name="send" value="'.$this->t->_('Weiter').'" />
|
|
</form>
|
|
<br style="clear:both;" />';
|
|
break;
|
|
|
|
case 'check':
|
|
$globcheck=true;
|
|
$dircheck=$this->checkchmod();
|
|
if($dircheck){
|
|
$dirs='<div class="comment"><img src="style/images/ok.png" alt="" />'.$this->t->_('dateiok');
|
|
}else{
|
|
$globcheck=false;
|
|
$dirs='<div class="comment"><img src="style/images/error.png" alt="" />'.$this->t->_('dateinichtok');
|
|
}
|
|
$dirs.='<table><tr><th>'.$this->t->_('Verzeichnis').'</th><th></th><th>'.$this->t->_('Ergebnis').'</th></tr>';
|
|
foreach($this->checkdir as $dir){
|
|
$dirs.='<tr style="color: '.$dir['color'].'"><td>'.$dir['dir'].'</td><td>................</td><td>'.$dir['status'].'</td></tr>';
|
|
}
|
|
$dirs.='</table></div>';
|
|
$phpcheck=$this->checkphp();
|
|
if($phpcheck){
|
|
$php='<div class="comment"><img src="style/images/ok.png" alt="" />'.$this->t->_('phpok');
|
|
}else{
|
|
$globcheck=false;
|
|
$php='<div class="comment"><img src="style/images/error.png" alt="" />'.$this->t->_('phpnichtok');
|
|
}
|
|
$php.='<table><tr><th>'.$this->t->_('Komponente').'</th><th>'.$this->t->_('benVersion').'</th><th>'.$this->t->_('instVersion').'</th></tr>';
|
|
foreach($this->checkphp as $p){
|
|
$php.='<tr style="color: '.$p['success'].'"><td>'.$p['name'].'</td><td>'.$p['needed'].'</td><td>'.$p['status'].'</td></tr>';
|
|
}
|
|
$php.='</table></div>';
|
|
$dbcheck=$this->getsupportetdbs();
|
|
if($dbcheck){
|
|
$dbs='<div class="comment"><img src="style/images/ok.png" alt="" />'.$this->t->_('dbsok');
|
|
}else{
|
|
$globcheck=false;
|
|
$dbs='<div class="comment"><img src="style/images/error.png" alt="" />'.$this->t->_('dbsnichtok');
|
|
}
|
|
$dbas = "";
|
|
foreach($this->dbas as $d){
|
|
if(empty($dbas))
|
|
$dbas=$d['name'];
|
|
else
|
|
$dbas.=' ,'.$d['name'];
|
|
}
|
|
if($dbas==''){
|
|
$dbas=$this->t->_('keine');
|
|
}
|
|
$dbs.='<br />'.$this->t->_('installiertedbs').': '.$dbas.'</div>';
|
|
if(isset($_POST['back'])){
|
|
header("Location: install.php?step=license");
|
|
}
|
|
if(isset($_POST['send'])){
|
|
if(!$globcheck){
|
|
$err= '<div class="comment"><img src="style/images/error.png" alt="" /><span style="color: red;">'.$this->t->_('Fehlererstloesen').'</span></div>';
|
|
}else{
|
|
header("Location: install.php?step=database");
|
|
}
|
|
}
|
|
|
|
$data='<h3>'.$this->t->_('Pruefung').'</h3>
|
|
<p>'.$this->t->_('PruefungText').'</p><p>'.$err.'</p>';
|
|
if($globcheck){
|
|
$data.='<p>'.$this->t->_('CheckOK').'</p>';
|
|
}else{
|
|
$data.='<p>'.$this->t->_('ChecknichtOK').'</p>';
|
|
$locked='disabled="disabled"';
|
|
}
|
|
$data.='<p>'.$dirs.'</p>
|
|
<p>'.$php.'</p>
|
|
<p>'.$dbs.'</p>
|
|
<form action="#" method="post">
|
|
<br />
|
|
<input type="submit" class="prevbutton" name="back" value="'.$this->t->_('Zurueck').'" /><input type="submit" class="refreshbutton" name="refresh" value="'.$this->t->_('Erneut').'" /><input type="submit" '.$locked.' class="nextbutton" name="send" value="'.$this->t->_('Weiter').'" />
|
|
</form>
|
|
<br style="clear:both;" />';
|
|
break;
|
|
|
|
case 'database':
|
|
$locked='disabled="disabled"';
|
|
if(isset($_POST['back'])){
|
|
@unlink(dirname(dirname(__FILE__)).'/config.tmp.php');
|
|
header("Location: install.php?step=check");
|
|
}
|
|
if(isset($_POST['test'])){
|
|
$error=false;
|
|
$user=$_POST['dbuser'];
|
|
$pass=$_POST['dbpass'];
|
|
$db=$_POST['db'];
|
|
$server=$_POST['dbserv'];
|
|
$prefix=$_POST['dbprefix'];
|
|
$driver=$_POST['dbdriver'];
|
|
$pdata=$_POST;
|
|
$configdata='<?php
|
|
$config[\'host\'] = \''.$server.'\';
|
|
// your Database Username
|
|
$config[\'user\'] = \''.$user.'\';
|
|
// your Database Password
|
|
$config[\'pass\'] = \''.$pass.'\';
|
|
// your Database
|
|
$config[\'db\'] = \''.$db.'\';
|
|
// your Database Prefix
|
|
$config[\'prefix\']=\''.$prefix.'\';
|
|
// your Database Sytem
|
|
$config[\'db_class\']= \''.$driver.'\';
|
|
?>';
|
|
define('DEBUG', FALSE);
|
|
include dirname(__FILE__, 2) .'/inc/logger.class.php';
|
|
include dirname(__FILE__, 2) .'/core/database/'.$driver.'.class.php';
|
|
try{
|
|
$db = new db($server, $user, $pass, $db,'utf8', FALSE,TRUE);
|
|
$result=$db->query("SHOW TABLES");
|
|
}catch(Exception $e){
|
|
$error=true;
|
|
}
|
|
if(!$error){
|
|
$datei = fopen(dirname(__FILE__, 2) .'/config.tmp.php','w');
|
|
fputs($datei,$configdata);
|
|
fclose($datei);
|
|
$locked='';
|
|
$err='<p><div class="comment"><img src="style/images/warning.png" alt="" /><span style="color: orange;">'.$this->t->_('Installationwarten').'</span></div></p>';
|
|
}else{
|
|
$err='<p><div class="comment"><img src="style/images/error.png" alt="" /><span style="color: red;">'.$this->t->_('FalscheDaten').'</span></div></p>';
|
|
}
|
|
}
|
|
if(isset($_POST['send'])){
|
|
define('DEBUG', FALSE);
|
|
include dirname(__FILE__, 2) .'/inc/logger.class.php';
|
|
include dirname(__FILE__, 2) .'/config.tmp.php';
|
|
include dirname(__FILE__, 2) .'/core/database/'.$config['db_class'].'.class.php';
|
|
|
|
$configdata='<?php
|
|
/**
|
|
* Project: BeCast WebEngine - simple site engine
|
|
* File: config.inc.php
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
* @link http://www.becast.at
|
|
* @copyright 2010-2025 becast.at
|
|
* @author Bernhard Jaud <bernhard at becast dot at>
|
|
* @package BcWe core
|
|
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
|
|
*/
|
|
/*
|
|
This file was created by the Installer. Don\'t touch it unless you have a very good reason to do so.
|
|
*/
|
|
if(!defined("in_astat")){
|
|
die();
|
|
}
|
|
// your Database Server (most likely localhost)
|
|
$config[\'host\'] = \''.$config['host'].'\';
|
|
// your Database Username
|
|
$config[\'user\'] = \''.$config['user'].'\';
|
|
// your Database Password
|
|
$config[\'pass\'] = \''.$config['pass'].'\';
|
|
// your Database
|
|
$config[\'db\'] = \''.$config['db'].'\';
|
|
// your Database Prefix
|
|
$config[\'prefix\']=\''.$config['prefix'].'\';
|
|
// your Database Sytem
|
|
$config[\'db_class\']= \''.$config['db_class'].'\';
|
|
|
|
define(\'INSTALLED\', TRUE);
|
|
define(\'CHARSET\', \'UTF-8\');
|
|
define(\'DEBUG\', FALSE);
|
|
?>';
|
|
$datei = fopen(dirname(__FILE__, 2) .'/inc/config.inc.php','w+');
|
|
fputs($datei,$configdata);
|
|
fclose($datei);
|
|
$db = new db($config['host'], $config['user'], $config['pass'], $config['db'],'utf8', FALSE,TRUE);
|
|
$dump = new dump($db);
|
|
$dump->read(dirname(__FILE__).'/sql/dump.sql');
|
|
$dump->prepare($config['prefix']);
|
|
$dump->execute();
|
|
$pdata=$_POST;
|
|
@unlink(dirname(__FILE__, 2) .'/config.tmp.php');
|
|
header("Location: install.php?step=user");
|
|
}
|
|
if($pdata['dbprefix']==''){
|
|
$pdata['dbprefix']='bcwe_';
|
|
}
|
|
if($pdata['dbserv']==''){
|
|
$pdata['dbserv']='localhost';
|
|
}
|
|
$this->getsupportetdbs();
|
|
foreach($this->dbas as $driver){
|
|
if($pdata['dbdriver']==$driver['short']){
|
|
$select='selected="selected"';
|
|
}
|
|
$drv.='<option value="'.$driver['short'].'" '.$select.'>'.$driver['name'].'</option>';
|
|
}
|
|
$data='<h3>'.$this->t->_('Datenbank').'</h3>
|
|
<p>'.$this->t->_('DatenbankText').'</p>
|
|
'.$err.'
|
|
<form action="#" method="post">
|
|
<div class="reihe">
|
|
<label class="label" for="dbuser">'.$this->t->_('Datenbankbenutzer').'</label>
|
|
<input class="feld" autocomplete="off" id="dbuser" name="dbuser" value="'.$pdata['dbuser'].'" type="text" />
|
|
</div>
|
|
<div class="reihe">
|
|
<label class="label" for="dbpass">'.$this->t->_('Datenbankpasswort').'</label>
|
|
<input class="feld" autocomplete="off" id="dbpass" name="dbpass" value="'.$pdata['dbpass'].'" type="password" />
|
|
</div>
|
|
<div class="reihe">
|
|
<label class="label" for="db">'.$this->t->_('Datenbank').'</label>
|
|
<input class="feld" autocomplete="off" id="db" name="db" value="'.$pdata['db'].'" type="text" />
|
|
</div>
|
|
<div class="reihe">
|
|
<label class="label" for="dbserv">'.$this->t->_('Datenbankserver').'</label>
|
|
<input class="feld" autocomplete="off" id="dbserv" name="dbserv" value="'.$pdata['dbserv'].'" type="text" />
|
|
</div>
|
|
<div class="reihe">
|
|
<label class="label" for="dbprefix">'.$this->t->_('Datenbankprefix').'</label>
|
|
<input class="feld" autocomplete="off" id="dbprefix" name="dbprefix" value="'.$pdata['dbprefix'].'" type="text" />
|
|
</div>
|
|
<div class="reihe">
|
|
<label class="label" for="dbdriver">'.$this->t->_('Datenbanktreiber').'</label>
|
|
<select class="feld" id="dbdriver" name="dbdriver">
|
|
'.$drv.'
|
|
</select>
|
|
</div>
|
|
<br />
|
|
<input type="submit" class="prevbutton" name="back" value="'.$this->t->_('Zurueck').'" /><input type="submit" class="refreshbutton" name="test" value="'.$this->t->_('Testen').'" /><input type="submit" '.$locked.' class="nextbutton" name="send" value="'.$this->t->_('Weiter').'" />
|
|
</form>
|
|
<br style="clear:both;" />';
|
|
break;
|
|
|
|
case 'user':
|
|
if(isset($_POST['back'])){
|
|
header("Location: install.php?step=database");
|
|
}
|
|
if(isset($_POST['send'])){
|
|
$err=false;
|
|
if($_POST['pass']!=$_POST['passrepeat']){
|
|
$err.='<p><div class="comment"><img src="style/images/error.png" alt="" /><span style="color: red;">'.$this->t->_('Passwoerterfalsch').'</span></div></p>';
|
|
}
|
|
if(!preg_match('/^(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){255,})(?!(?:(?:\x22?\x5C[\x00-\x7E]\x22?)|(?:\x22?[^\x5C\x22]\x22?)){65,}@)(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22))(?:\.(?:(?:[\x21\x23-\x27\x2A\x2B\x2D\x2F-\x39\x3D\x3F\x5E-\x7E]+)|(?:\x22(?:[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7F]|(?:\x5C[\x00-\x7F]))*\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\]))$/iD',$_POST['email'])){
|
|
$err.='<p><div class="comment"><img src="style/images/error.png" alt="" /><span style="color: red;">'.$this->t->_('Emailinkorrekt').'</span></div></p>';
|
|
}
|
|
if(!$err){
|
|
define('in_astat',TRUE);
|
|
define('DEBUG', FALSE);
|
|
include dirname(__FILE__, 2) .'/inc/logger.class.php';
|
|
include dirname(__FILE__, 2) .'/inc/config.inc.php';
|
|
include dirname(__FILE__, 2) .'/core/database/'.$config['db_class'].'.class.php';
|
|
$db = new db($config['host'], $config['user'], $config['pass'], $config['db'],'utf8', FALSE,TRUE);
|
|
$key=$this->generate_Key(50);
|
|
$salt=$this->generate_Key(6);
|
|
$active=1;
|
|
$pass=hash('sha256',$db->escape($salt.$_POST['pass']));
|
|
$username=$db->escape($_POST['user']);
|
|
$email=$db->escape($_POST['email']);
|
|
$db->query("INSERT INTO `" . $config['prefix'] . "users` (`username`,`password`,`loginkey`,`salt`,`email`,`active`,`since`,`role`) VALUES ('".$username."','".$pass."', '".$salt."','".$key."', '".$email."', '".$active."','".time()."','2')");
|
|
header("Location: install.php?step=finish");
|
|
}else{
|
|
$pdata=$_POST;
|
|
}
|
|
}
|
|
$data='<h3>'.$this->t->_('Benutzer').'</h3>
|
|
<p>'.$this->t->_('BenutzerText').'</p>
|
|
'.$err.'
|
|
<form action="#" method="post">
|
|
<div class="reihe">
|
|
<label class="label" for="user">'.$this->t->_('Benutzername').'</label>
|
|
<input class="feld" autocomplete="off" id="user" name="user" value="'.$pdata['user'].'" type="text" />
|
|
</div>
|
|
<div class="reihe">
|
|
<label class="label" for="pass">'.$this->t->_('Passwort').'</label>
|
|
<input class="feld" autocomplete="off" id="pass" name="pass" type="password" />
|
|
</div>
|
|
<div class="reihe">
|
|
<label class="label" for="passrepeat">'.$this->t->_('PasswortWiederholen').'</label>
|
|
<input class="feld" autocomplete="off" id="passrepeat" name="passrepeat" type="password" />
|
|
</div>
|
|
<div class="reihe">
|
|
<label class="label" for="email">'.$this->t->_('EMail').'</label>
|
|
<input class="feld" autocomplete="off" id="email" name="email" value="'.$pdata['email'].'" type="text" />
|
|
</div>
|
|
<br />
|
|
<input type="submit" class="prevbutton" name="back" value="'.$this->t->_('Zurueck').'" /><input type="submit" class="nextbutton" name="send" value="'.$this->t->_('Weiter').'" />
|
|
</form>
|
|
<br style="clear:both;" />';
|
|
break;
|
|
|
|
case 'finish':
|
|
$fopen=true;
|
|
$test=fopen('https://webengine.becast.at/install.php?test', 'r');
|
|
$testecho= fgets($test,1024);
|
|
fclose($test);
|
|
if($testecho!="Success"){
|
|
$fopen=false;
|
|
}
|
|
$server='Server: '.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'];
|
|
$astat_version='BcWe version: '.$this->version;
|
|
$timestamp='Timestamp: '.time();
|
|
$sendkey=base64_encode($_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF'].'|'.$this->version.'|'.time());
|
|
if(isset($_POST['back'])){
|
|
header("Location: install.php?step=user");
|
|
}
|
|
if(isset($_POST['send'])){
|
|
if($_POST['accept']!=1){
|
|
$key=fopen('https://webengine.becast.at/install.php?install='.$sendkey, 'r');
|
|
$ikey= fgets($key,1024);
|
|
fclose($key);
|
|
define('in_astat',TRUE);
|
|
include dirname(__FILE__, 2) .'/inc/logger.class.php';
|
|
include dirname(__FILE__, 2) .'/inc/config.inc.php';
|
|
include dirname(__FILE__, 2) .'/core/database/'.$config['db_class'].'.class.php';
|
|
$db = new db($config['host'], $config['user'], $config['pass'], $config['db'],'utf8', FALSE,TRUE);
|
|
$db->query("INSERT INTO `" . $config['prefix'] . "datacache` (`cache`,`content`,`expire`) VALUES ('installkey','".$ikey."','0')'");
|
|
}
|
|
header("Location: ../index.php");
|
|
}
|
|
if($fopen){
|
|
$fp='<p><div class="comment"><img src="style/images/love.png" alt="" />'.$this->t->_('Installationsbenachrichtigung').'<br />'.$this->t->_('DieseDaten').'<br />
|
|
<ul>
|
|
<li>'.$server.'</li>
|
|
<li>'.$astat_version.'</li>
|
|
<li>'.$timestamp.'</li>
|
|
</ul>
|
|
'.$this->t->_('Danke').'
|
|
</div></p>';
|
|
$cb='<p><input type="checkbox" class="checkbox" name="accept" value="1"/>'.$this->t->_('Datensenden').'</p>';
|
|
}
|
|
$data='<h3>'.$this->t->_('Abschluss').'</h3>
|
|
<p>'.$this->t->_('AbschlussText').'</p>
|
|
'.$fp.'
|
|
<form action="#" method="post">
|
|
'.$cb.'
|
|
<input type="submit" class="prevbutton" name="back" value="'.$this->t->_('Zurueck').'" /><input type="submit" class="nextbutton" name="send" value="'.$this->t->_('Fertig').'" />
|
|
</form>
|
|
<br style="clear:both;" />';
|
|
break;
|
|
|
|
}
|
|
echo $this->header($step);
|
|
echo $data;
|
|
}
|
|
|
|
function footer(): string
|
|
{
|
|
return '</div><div class="footer">
|
|
<p> <a href="http://www.becast.at">BeCastWebEngine Installer v1.2 © 2012-2025 BeCast</a></p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<span style="font-size: xx-small; display: block; text-align:center;">Original Theme: <a href="https://github.com/hnarayanan/simplicity-2">v2.0.0 © HN MMVII</a></span>
|
|
</div>
|
|
</div>
|
|
|
|
</body>
|
|
</html>';
|
|
}
|
|
|
|
}
|
|
|
|
$lang = new lang();
|
|
$install = new install($lang);
|
|
$step = $_GET['step'];
|
|
if(!$step || $step==''){
|
|
$step='start';
|
|
}
|
|
$install->step($step);
|
|
echo $install->footer(); |