2010-08-16 06:49:29 +02:00
< ? php
2017-11-29 13:52:27 +01:00
/**
* @ file mod / install . php
*/
2018-01-25 03:08:45 +01:00
2017-04-30 06:07:00 +02:00
use Friendica\App ;
2018-04-23 22:56:59 +02:00
use Friendica\Core\Install ;
2018-07-20 04:15:21 +02:00
use Friendica\Core\L10n ;
2017-08-26 08:04:21 +02:00
use Friendica\Core\System ;
2018-07-20 14:19:26 +02:00
use Friendica\Database\DBA ;
2018-01-25 03:08:45 +01:00
use Friendica\Util\Temporal ;
2012-01-02 20:16:28 +01:00
2017-04-30 06:01:26 +02:00
$install_wizard_pass = 1 ;
2016-02-07 15:11:34 +01:00
2017-01-09 13:14:25 +01:00
function install_init ( App $a ) {
2014-06-04 00:44:58 +02:00
2012-05-23 13:38:31 +02:00
// $baseurl/install/testrwrite to test if rewite in .htaccess is working
2017-04-25 07:55:20 +02:00
if ( $a -> argc == 2 && $a -> argv [ 1 ] == " testrewrite " ) {
2012-05-23 13:38:31 +02:00
echo " ok " ;
killme ();
}
2016-12-21 23:04:09 +01:00
2015-11-13 10:56:06 +01:00
// We overwrite current theme css, because during install we could not have a working mod_rewrite
// so we could not have a css at all. Here we set a static css file for the install procedure pages
2018-07-07 23:46:30 +02:00
$a -> setConfigValue ( 'system' , 'value' , '../install' );
2017-08-26 09:32:10 +02:00
$a -> theme [ 'stylesheet' ] = System :: baseUrl () . " /view/install/style.css " ;
2016-12-21 23:04:09 +01:00
2018-04-23 22:56:59 +02:00
Install :: setInstallMode ();
2012-01-02 20:16:28 +01:00
global $install_wizard_pass ;
2017-04-25 07:55:20 +02:00
if ( x ( $_POST , 'pass' )) {
2012-01-02 20:16:28 +01:00
$install_wizard_pass = intval ( $_POST [ 'pass' ]);
2016-12-21 23:04:09 +01:00
}
2016-02-07 15:11:34 +01:00
2012-01-02 20:16:28 +01:00
}
2010-08-16 06:49:29 +02:00
2017-01-09 13:14:25 +01:00
function install_post ( App $a ) {
2017-10-11 14:56:36 +02:00
global $install_wizard_pass ;
2010-08-16 06:49:29 +02:00
2012-01-02 20:16:28 +01:00
switch ( $install_wizard_pass ) {
case 1 :
case 2 :
return ;
break ; // just in case return don't return :)
case 3 :
$urlpath = $a -> get_path ();
$dbhost = notags ( trim ( $_POST [ 'dbhost' ]));
$dbuser = notags ( trim ( $_POST [ 'dbuser' ]));
$dbpass = notags ( trim ( $_POST [ 'dbpass' ]));
$dbdata = notags ( trim ( $_POST [ 'dbdata' ]));
$phpath = notags ( trim ( $_POST [ 'phpath' ]));
2012-12-28 22:51:50 +01:00
require_once ( " include/dba.php " );
2018-07-20 14:19:26 +02:00
if ( ! DBA :: connect ( $dbhost , $dbuser , $dbpass , $dbdata )) {
2017-04-25 07:55:20 +02:00
$a -> data [ 'db_conn_failed' ] = true ;
2011-03-22 01:34:29 +01:00
}
2011-07-08 04:12:35 +02:00
2014-06-04 00:44:58 +02:00
return ;
2012-01-02 20:16:28 +01:00
break ;
2012-08-18 21:28:49 +02:00
case 4 :
2012-01-02 20:16:28 +01:00
$urlpath = $a -> get_path ();
$dbhost = notags ( trim ( $_POST [ 'dbhost' ]));
$dbuser = notags ( trim ( $_POST [ 'dbuser' ]));
$dbpass = notags ( trim ( $_POST [ 'dbpass' ]));
$dbdata = notags ( trim ( $_POST [ 'dbdata' ]));
$phpath = notags ( trim ( $_POST [ 'phpath' ]));
$timezone = notags ( trim ( $_POST [ 'timezone' ]));
2016-04-06 20:18:33 +02:00
$language = notags ( trim ( $_POST [ 'language' ]));
2012-01-02 20:16:28 +01:00
$adminmail = notags ( trim ( $_POST [ 'adminmail' ]));
// connect to db
2018-07-20 14:19:26 +02:00
DBA :: connect ( $dbhost , $dbuser , $dbpass , $dbdata );
2012-01-02 20:16:28 +01:00
2018-08-20 22:15:39 +02:00
$errors = Install :: createConfig ( $urlpath , $dbhost , $dbuser , $dbpass , $dbdata , $phpath , $timezone , $language , $adminmail );
if ( $errors ) {
$a -> data [ 'db_failed' ] = $errors ;
return ;
}
$errors = Install :: installDatabaseStructure ();
if ( $errors ) {
$a -> data [ 'db_failed' ] = $errors ;
} else {
$a -> data [ 'db_installed' ] = true ;
}
2010-08-16 06:49:29 +02:00
2012-01-02 20:16:28 +01:00
return ;
break ;
}
2010-08-16 06:49:29 +02:00
}
2017-01-09 13:14:25 +01:00
function install_content ( App $a ) {
2010-08-16 06:49:29 +02:00
2017-10-11 14:56:36 +02:00
global $install_wizard_pass ;
2010-11-18 11:59:59 +01:00
$o = '' ;
2012-01-02 20:16:28 +01:00
$wizard_status = " " ;
2018-01-22 13:29:50 +01:00
$install_title = L10n :: t ( 'Friendica Communications Server - Setup' );
2012-05-23 13:38:31 +02:00
2014-06-04 00:44:58 +02:00
2017-04-25 07:55:20 +02:00
if ( x ( $a -> data , 'db_conn_failed' )) {
2012-01-02 20:16:28 +01:00
$install_wizard_pass = 2 ;
2018-01-22 13:29:50 +01:00
$wizard_status = L10n :: t ( 'Could not connect to database.' );
2012-01-02 20:16:28 +01:00
}
2017-04-25 07:55:20 +02:00
if ( x ( $a -> data , 'db_create_failed' )) {
2012-01-02 20:16:28 +01:00
$install_wizard_pass = 2 ;
2018-01-22 13:29:50 +01:00
$wizard_status = L10n :: t ( 'Could not create table.' );
2012-01-02 20:16:28 +01:00
}
2014-06-04 00:44:58 +02:00
2017-04-25 07:55:20 +02:00
$db_return_text = " " ;
if ( x ( $a -> data , 'db_installed' )) {
2012-01-02 20:16:28 +01:00
$txt = '<p style="font-size: 130%;">' ;
2018-01-22 13:29:50 +01:00
$txt .= L10n :: t ( 'Your Friendica site database has been installed.' ) . EOL ;
2012-05-23 13:38:31 +02:00
$db_return_text .= $txt ;
2011-03-22 01:34:29 +01:00
}
2017-04-25 07:55:20 +02:00
if ( x ( $a -> data , 'db_failed' )) {
2018-01-22 13:29:50 +01:00
$txt = L10n :: t ( 'You may need to import the file "database.sql" manually using phpmyadmin or mysql.' ) . EOL ;
$txt .= L10n :: t ( 'Please see the file "INSTALL.txt".' ) . EOL . " <hr> " ;
2017-04-25 07:55:20 +02:00
$txt .= " <pre> " . $a -> data [ 'db_failed' ] . " </pre> " . EOL ;
2012-05-23 13:38:31 +02:00
$db_return_text .= $txt ;
2011-03-22 01:34:29 +01:00
}
2014-06-04 00:44:58 +02:00
2018-07-20 14:19:26 +02:00
if ( DBA :: $connected ) {
2011-03-22 01:34:29 +01:00
$r = q ( " SELECT COUNT(*) as `total` FROM `user` " );
2018-07-21 14:46:04 +02:00
if ( DBA :: isResult ( $r ) && $r [ 0 ][ 'total' ]) {
2012-01-02 20:16:28 +01:00
$tpl = get_markup_template ( 'install.tpl' );
2018-01-15 14:05:12 +01:00
return replace_macros ( $tpl , [
2012-01-02 20:16:28 +01:00
'$title' => $install_title ,
'$pass' => '' ,
2018-01-22 13:29:50 +01:00
'$status' => L10n :: t ( 'Database already in use.' ),
2012-01-02 20:16:28 +01:00
'$text' => '' ,
2018-01-15 14:05:12 +01:00
]);
2011-03-22 01:34:29 +01:00
}
}
2010-11-18 11:59:59 +01:00
2017-04-25 07:55:20 +02:00
if ( x ( $a -> data , 'txt' ) && strlen ( $a -> data [ 'txt' ])) {
2012-05-23 13:38:31 +02:00
$db_return_text .= manual_config ( $a );
}
2014-06-04 00:44:58 +02:00
2017-04-25 07:55:20 +02:00
if ( $db_return_text != " " ) {
2012-08-18 21:28:49 +02:00
$tpl = get_markup_template ( 'install.tpl' );
2018-01-15 14:05:12 +01:00
return replace_macros ( $tpl , [
2012-05-23 13:38:31 +02:00
'$title' => $install_title ,
'$pass' => " " ,
'$text' => $db_return_text . what_next (),
2018-01-15 14:05:12 +01:00
]);
2012-05-23 13:38:31 +02:00
}
2014-06-04 00:44:58 +02:00
2017-04-25 07:55:20 +02:00
switch ( $install_wizard_pass ) {
2012-01-02 20:16:28 +01:00
case 1 : { // System check
2010-11-18 11:59:59 +01:00
2018-06-26 03:00:58 +02:00
$phpath = defaults ( $_POST , 'phpath' , 'php' );
2010-11-26 00:33:32 +01:00
2018-04-28 15:15:54 +02:00
list ( $checks , $checkspassed ) = Install :: check ( $phpath );
2012-01-02 20:16:28 +01:00
$tpl = get_markup_template ( 'install_checks.tpl' );
2018-01-15 14:05:12 +01:00
$o .= replace_macros ( $tpl , [
2012-01-02 20:16:28 +01:00
'$title' => $install_title ,
2018-01-22 13:29:50 +01:00
'$pass' => L10n :: t ( 'System check' ),
2012-01-02 20:16:28 +01:00
'$checks' => $checks ,
'$passed' => $checkspassed ,
2018-01-22 13:29:50 +01:00
'$see_install' => L10n :: t ( 'Please see the file "INSTALL.txt".' ),
'$next' => L10n :: t ( 'Next' ),
'$reload' => L10n :: t ( 'Check again' ),
2012-01-02 20:16:28 +01:00
'$phpath' => $phpath ,
2017-08-26 09:32:10 +02:00
'$baseurl' => System :: baseUrl (),
2018-01-15 14:05:12 +01:00
]);
2012-01-02 20:16:28 +01:00
return $o ;
}; break ;
2014-06-04 00:44:58 +02:00
2012-01-02 20:16:28 +01:00
case 2 : { // Database config
2018-07-12 04:23:35 +02:00
$dbhost = notags ( trim ( defaults ( $_POST , 'dbhost' , 'localhost' )));
$dbuser = notags ( trim ( defaults ( $_POST , 'dbuser' , '' )));
$dbpass = notags ( trim ( defaults ( $_POST , 'dbpass' , '' )));
$dbdata = notags ( trim ( defaults ( $_POST , 'dbdata' , '' )));
$phpath = notags ( trim ( defaults ( $_POST , 'phpath' , '' )));
$adminmail = notags ( trim ( defaults ( $_POST , 'adminmail' , '' )));
2012-01-02 20:16:28 +01:00
$tpl = get_markup_template ( 'install_db.tpl' );
2018-01-15 14:05:12 +01:00
$o .= replace_macros ( $tpl , [
2012-01-02 20:16:28 +01:00
'$title' => $install_title ,
2018-01-22 13:29:50 +01:00
'$pass' => L10n :: t ( 'Database connection' ),
'$info_01' => L10n :: t ( 'In order to install Friendica we need to know how to connect to your database.' ),
'$info_02' => L10n :: t ( 'Please contact your hosting provider or site administrator if you have questions about these settings.' ),
'$info_03' => L10n :: t ( 'The database you specify below should already exist. If it does not, please create it before continuing.' ),
2012-01-02 20:16:28 +01:00
'$status' => $wizard_status ,
2014-06-04 00:44:58 +02:00
2018-01-22 13:29:50 +01:00
'$dbhost' => [ 'dbhost' , L10n :: t ( 'Database Server Name' ), $dbhost , '' , 'required' ],
'$dbuser' => [ 'dbuser' , L10n :: t ( 'Database Login Name' ), $dbuser , '' , 'required' , 'autofocus' ],
'$dbpass' => [ 'dbpass' , L10n :: t ( 'Database Login Password' ), $dbpass , L10n :: t ( " For security reasons the password must not be empty " ), 'required' ],
'$dbdata' => [ 'dbdata' , L10n :: t ( 'Database Name' ), $dbdata , '' , 'required' ],
'$adminmail' => [ 'adminmail' , L10n :: t ( 'Site administrator email address' ), $adminmail , L10n :: t ( 'Your account email address must match this in order to use the web admin panel.' ), 'required' , 'autofocus' , 'email' ],
2012-01-02 20:16:28 +01:00
2018-01-22 13:29:50 +01:00
'$lbl_10' => L10n :: t ( 'Please select a default timezone for your website' ),
2014-06-04 00:44:58 +02:00
2017-08-26 09:32:10 +02:00
'$baseurl' => System :: baseUrl (),
2014-06-04 00:44:58 +02:00
2012-01-02 20:16:28 +01:00
'$phpath' => $phpath ,
2014-06-04 00:44:58 +02:00
2018-01-22 13:29:50 +01:00
'$submit' => L10n :: t ( 'Submit' ),
2018-01-15 14:05:12 +01:00
]);
2012-01-02 20:16:28 +01:00
return $o ;
}; break ;
case 3 : { // Site settings
2017-04-25 07:55:20 +02:00
$dbhost = (( x ( $_POST , 'dbhost' )) ? notags ( trim ( $_POST [ 'dbhost' ])) : 'localhost' );
2012-01-02 20:16:28 +01:00
$dbuser = notags ( trim ( $_POST [ 'dbuser' ]));
$dbpass = notags ( trim ( $_POST [ 'dbpass' ]));
$dbdata = notags ( trim ( $_POST [ 'dbdata' ]));
2012-02-10 23:03:43 +01:00
$phpath = notags ( trim ( $_POST [ 'phpath' ]));
2014-06-04 00:44:58 +02:00
2012-01-02 20:16:28 +01:00
$adminmail = notags ( trim ( $_POST [ 'adminmail' ]));
2017-04-25 07:55:20 +02:00
$timezone = (( x ( $_POST , 'timezone' )) ? ( $_POST [ 'timezone' ]) : 'America/Los_Angeles' );
2016-04-06 20:18:33 +02:00
/* Installed langs */
2018-01-21 18:06:27 +01:00
$lang_choices = L10n :: getAvailableLanguages ();
2014-06-04 00:44:58 +02:00
2012-01-02 20:16:28 +01:00
$tpl = get_markup_template ( 'install_settings.tpl' );
2018-01-15 14:05:12 +01:00
$o .= replace_macros ( $tpl , [
2012-01-02 20:16:28 +01:00
'$title' => $install_title ,
2018-01-22 13:29:50 +01:00
'$pass' => L10n :: t ( 'Site settings' ),
2012-01-02 20:16:28 +01:00
'$status' => $wizard_status ,
2014-06-04 00:44:58 +02:00
'$dbhost' => $dbhost ,
2012-01-02 20:16:28 +01:00
'$dbuser' => $dbuser ,
'$dbpass' => $dbpass ,
'$dbdata' => $dbdata ,
'$phpath' => $phpath ,
2014-06-04 00:44:58 +02:00
2018-01-22 13:29:50 +01:00
'$adminmail' => [ 'adminmail' , L10n :: t ( 'Site administrator email address' ), $adminmail , L10n :: t ( 'Your account email address must match this in order to use the web admin panel.' ), 'required' , 'autofocus' , 'email' ],
2012-01-02 20:16:28 +01:00
2014-06-04 00:44:58 +02:00
2018-01-25 03:08:45 +01:00
'$timezone' => Temporal :: getTimezoneField ( 'timezone' , L10n :: t ( 'Please select a default timezone for your website' ), $timezone , '' ),
2018-01-22 13:29:50 +01:00
'$language' => [ 'language' , L10n :: t ( 'System Language:' ), 'en' , L10n :: t ( 'Set the default language for your Friendica installation interface and to send emails.' ), $lang_choices ],
2017-08-26 09:32:10 +02:00
'$baseurl' => System :: baseUrl (),
2014-06-04 00:44:58 +02:00
2018-01-22 13:29:50 +01:00
'$submit' => L10n :: t ( 'Submit' ),
2014-06-04 00:44:58 +02:00
2018-01-15 14:05:12 +01:00
]);
2012-01-02 20:16:28 +01:00
return $o ;
}; break ;
2014-06-04 00:44:58 +02:00
2012-01-02 20:16:28 +01:00
}
}
2010-08-16 06:49:29 +02:00
2017-01-09 13:14:25 +01:00
function manual_config ( App $a ) {
2017-04-25 07:55:20 +02:00
$data = htmlentities ( $a -> data [ 'txt' ], ENT_COMPAT , 'UTF-8' );
2018-06-25 02:26:00 +02:00
$o = L10n :: t ( 'The database configuration file "config/local.ini.php" could not be written. Please use the enclosed text to create a configuration file in your web server root.' );
2010-11-16 04:27:15 +01:00
$o .= " <textarea rows= \" 24 \" cols= \" 80 \" > $data </textarea> " ;
2010-11-06 13:07:10 +01:00
return $o ;
2010-08-16 06:49:29 +02:00
}
2017-04-25 07:55:20 +02:00
function load_database_rem ( $v , $i ) {
2012-01-02 20:16:28 +01:00
$l = trim ( $i );
2017-04-25 07:55:20 +02:00
if ( strlen ( $l ) > 1 && ( $l [ 0 ] == " - " || ( $l [ 0 ] == " / " && $l [ 1 ] == " * " ))) {
2012-01-02 20:16:28 +01:00
return $v ;
} else {
return $v . " \n " . $i ;
}
}
2012-05-23 13:38:31 +02:00
function what_next () {
2017-08-26 09:32:10 +02:00
$baseurl = System :: baseUrl ();
2014-06-04 00:44:58 +02:00
return
2018-01-24 16:19:58 +01:00
L10n :: t ( '<h1>What next</h1>' )
2018-01-22 22:59:31 +01:00
. " <p> " . L10n :: t ( 'IMPORTANT: You will need to [manually] setup a scheduled task for the worker.' )
. L10n :: t ( 'Please see the file "INSTALL.txt".' )
2012-05-23 13:38:31 +02:00
. " </p><p> "
2018-01-24 22:51:32 +01:00
. L10n :: t ( 'Go to your new Friendica node <a href="%s/register">registration page</a> and register as new user. Remember to use the same email you have entered as administrator email. This will allow you to enter the site admin panel.' , $baseurl )
2012-05-23 13:38:31 +02:00
. " </p> " ;
}