--- /dev/null
+<?php
+
+/*
+ * Please run composer install and configure htconfig.php
+ */
+
+if (PHP_SAPI !== 'cli') {
+ die("ERROR: Code execution only possible from CLI\n");
+}
+
+if (file_exists('.htconfig.php') && filesize('.htconfig.php')) {
+ die("ERROR: Installation was already executed, .htconfig.php already exists\n");
+}
+
+// Remove die from config file
+copy_config_file();
+
+require_once 'boot.php';
+require_once 'mod/install.php';
+require_once 'include/dba.php';
+
+/*
+ * ######################
+ * # Initialise the app #
+ * ######################
+ */
+echo "Initializing setup...\n";
+
+$a = new \Friendica\App(__DIR__);
+\Friendica\BaseObject::setApp($a);
+// add config
+require_once '.htautoinstall.php';
+
+echo " Complete!\n\n";
+
+/*
+ * #####################
+ * # Check basic setup #
+ * #####################
+ */
+echo "Checking basic setup...\n";
+
+$allChecksRequired = in_array('--all-required', $argv, true);
+
+$checkResults = [];
+$errorMessage = '';
+
+$checkResults['basic'] = run_basic_checks($a);
+
+foreach ($checkResults['basic'] as $result) {
+ if (($allChecksRequired || $result['required'] === true) && $result['status'] === false) {
+ $errorMessage .= "--------\n";
+ $errorMessage .= $result['title'] . ': ' . $result['help'] . "\n";
+ }
+}
+
+if ($errorMessage !== '') {
+ die($errorMessage);
+}
+
+echo " Complete!\n\n";
+
+/*
+ * #############################
+ * # Check database connection #
+ * #############################
+ */
+echo "Checking database...\n";
+
+$checkResults['db'] = array();
+$checkResults['db'][] = run_database_check();
+
+foreach ($checkResults['basic'] as $result) {
+ if (($allChecksRequired || $result['required'] === true) && $result['status'] === false) {
+ $errorMessage .= "--------\n";
+ $errorMessage .= $result['title'] . ': ' . $result['help'] . "\n";
+ }
+}
+
+if ($errorMessage !== '') {
+ die($errorMessage);
+}
+
+echo " Complete!\n\n";
+
+/*
+ * ####################
+ * # Install database #
+ * ####################
+ */
+echo "Inserting data into database...\n";
+
+$checkResults['data'] = load_database();
+if ($checkResults['data'] !== '') {
+ die("ERROR: DB Database creation error. Is the DB empty?\n");
+}
+echo " Complete!\n\n";
+
+/*
+ * ####################
+ * # Copy config file #
+ * ####################
+ */
+echo "Saving config file...\n";
+if (!copy('.htautoinstall.php', '.htconfig.php')) {
+ die("ERROR: Saving config file failed. Please copy .htautoinstall.php to .htconfig.php manually.\n");
+}
+echo " Complete!\n\n";
+
+echo "\nInstallation is finished\n";
+
+function copy_config_file()
+{
+ $fileContent = file_get_contents('./htconfig.php');
+ $fileContent = str_replace('die', '//die', $fileContent);
+ file_put_contents('.htautoinstall.php', $fileContent);
+}
+
+/**
+ * @param App $app
+ * @return array
+ */
+function run_basic_checks($app)
+{
+ $checks = [];
+
+ check_funcs($checks);
+ check_imagik($checks);
+ check_htconfig($checks);
+ check_smarty3($checks);
+ check_keys($checks);
+
+ if (!empty($app->config['php_path'])) {
+ check_php($app->config['php_path'], $checks);
+ } else {
+ die(" ERROR: The php_path is not set in the config. Please check the file .htconfig.php.\n");
+ }
+
+ echo " NOTICE: Not checking .htaccess/URL-Rewrite during CLI installation.\n";
+
+ return $checks;
+}
+
+function run_database_check()
+{
+ global $db_host;
+ global $db_user;
+ global $db_pass;
+ global $db_data;
+
+ $result = array(
+ 'title' => 'MySQL Connection',
+ 'required' => true,
+ 'status' => true,
+ 'help' => '',
+ );
+
+ if (!dba::connect($db_host, $db_user, $db_pass, $db_data, true)) {
+ $result['status'] = false;
+ $result['help'] = 'Failed, please check your MySQL settings and credentials.';
+ }
+
+ return $result;
+}