/** * build source package with more simple form of install. * @param array $options */ function cos_build_simple($options = null) { $dir = getcwd(); $name = basename($dir); if (file_exists("./build/{$name}")) { common::execCommand("sudo rm -rf ./build/{$name}*"); } common::execCommand("mkdir ./build/{$name}"); $htdocs = "cp -rf htdocs/* ./build/{$name}"; common::execCommand($htdocs); $domain = conf::getMainIni('domain'); if (!$domain) { $domain = 'default'; } $files_rm = "sudo rm -rf ./build/{$name}/files/{$domain}/*"; common::execCommand($files_rm); $config = "mkdir ./build/{$name}/config"; common::execCommand($config); $tmp_dir = "mkdir ./build/{$name}/tmp"; common::execCommand($tmp_dir); $profiles = "cp -rf profiles ./build/{$name}"; common::execCommand($profiles); $sql_scripts = "cp -rf scripts ./build/{$name}"; common::execCommand($sql_scripts); $cli = "cp -rf coscli.sh ./build/{$name}"; common::execCommand($cli); $composer = "cp -rf composer.json ./build/{$name}"; common::execCommand($composer); // reset database password $ary = conf::getIniFileArray("./config/config.ini"); $profile = new profile(); $ary = $profile->iniArrayPrepare($ary); // clean ini settings for secrets $ini_settings = conf::arrayToIniFile($ary); // add ini dist file file_put_contents("./build/{$name}/config/config.ini-dist", $ini_settings); $index = "cp -rf htdocs/index.php ./build/{$name}/index.php"; common::execCommand($index); $phar_cli = "cp -rf phar-cli.php ./build/{$name}/"; common::execCommand($phar_cli); $phar_web = "cp -rf phar-web.php ./build/{$name}/"; common::execCommand($phar_web); $module_dir = conf::pathModules(); $modules = "cp -rf {$module_dir} ./build/{$name}"; common::execCommand($modules); $vendor = "cp -rf vendor ./build/{$name}"; common::execCommand($vendor); $rm_git = "rm `find ./build/{$name} -name '.git'` -rf"; common::execCommand($rm_git); $rm_ignore = "rm `find ./build/{$name} -name '.gitignore'` -rf"; common::execCommand($rm_ignore); $rm_doc = "rm -rf ./build/vendor/doc"; common::execCommand($rm_doc); $output = array(); exec('git tag -l', $output); $version = array_pop($output); $command = "cd ./build && tar -Pczf {$name}-{$version}.tar.gz {$name} "; common::execCommand($command); }
/** * set csendgrid config in config.ini */ function heroku_set_sendgrid_conf() { $user = heroku_get_setting('SENDGRID_USERNAME'); $pass = heroku_get_setting('SENDGRID_PASSWORD'); if ($user && $pass) { $config_file = heroku_get_config_filename(); conf::$vars['coscms_main'] = conf::getIniFileArray($config_file, true); $from_text = common::readSingleline('Enter which from text should be seen in his inbx, e.g. CosCMS (not the email)'); $reply = common::readSingleline('Enter which email users should reply to (an email):'); conf::$vars['coscms_main']['site_email'] = "{$from_text} <{$user}>"; conf::$vars['coscms_main']['site_email_reply'] = "{$from_text} <{$reply}>"; conf::$vars['coscms_main']['smtp_params_host'] = "smtp.sendgrid.net"; conf::$vars['coscms_main']['smtp_params_sender'] = $user; conf::$vars['coscms_main']['smtp_params_username'] = $user; conf::$vars['coscms_main']['smtp_params_password'] = $pass; conf::$vars['coscms_main']['smtp_params_auth'] = "true"; conf::$vars['coscms_main']['smtp_params_port'] = 587; $content = conf::arrayToIniFile(conf::$vars['coscms_main'], false); $path = conf::pathBase() . "/config/config.ini"; file_put_contents($path, $content); } }
/** * Method for creating a main config.ini file * @param string $profile name of the profile */ private function createConfigIni($profile) { $profile_dir = conf::pathBase() . "/profiles/{$profile}"; $source = conf::pathBase() . "/config/config.ini"; $ary = conf::getIniFileArray($source, true); unset($ary['base_path'], $ary['htdocs_path'], $ary['modules_dir'], $ary['modules_path'], $ary['files_dir']); $ary = $this->iniArrayPrepare($ary); $config_str = conf::arrayToIniFile($ary); file_put_contents($profile_dir . "/config.ini-dist", $config_str); }
/** * function for updating a modules .ini file with new settings * from updated ini-dist file. * * @param array $options */ function upgrade_config_ini_file($options) { $ini_file_path = conf::pathBase() . "/config/config.ini"; $ini_dist_path = conf::pathBase() . "/profiles/{$options['profile']}/config.ini-dist"; $ini_file = conf::getIniFileArray($ini_file_path, true); $ini_dist = conf::getIniFileArray($ini_dist_path, true); $ary = array_merge($ini_dist, $ini_file); $ary_diff = array_diff($ary, $ini_file); $content = conf::arrayToIniFile($ary); file_put_contents($ini_file_path, $content); if (empty($ary_diff)) { common::echoMessage("No new ini file settings for config.ini"); } else { $new_settings_str = conf::arrayToIniFile($ary_diff); common::echoMessage("New ini file written to: {$ini_file_path}"); common::echoMessage("These are the new ini settings for config.ini"); common::echoMessage(trim($new_settings_str)); } }
function cos_phar_web_create() { // move sources to build dir. // e.g. build/coscms cos_build_simple(); // some base values $dir = getcwd(); $base = basename($dir); // dir we build phar from $build_from_dir = "{$dir}/build/{$base}"; // when creating a web phar we add // config.ini // this is done so that on first exectution of the // phar archive we will create this file and a .sqlite database. $build_phar_dir = "build/phar"; if (!file_exists($build_phar_dir)) { common::execCommand("mkdir {$build_phar_dir}"); } // hidden .config file // cos_exec("cp -f config/config.ini $build_from_dir/tmp/.config.ini"); // reset database password $ary = conf::getIniFileArray("./config/config.ini"); $profile = new profile(); // rm secrets $ary = $profile->iniArrayPrepare($ary); // add sqlite database to build phar dir if (conf::getMainIni('phar_sqlite')) { db_to_sqlite(); // mv sqlite database into hidden file common::execCommand("cp -R sqlite/database.sql {$build_from_dir}/tmp/.database.sql"); common::execCommand("chmod 777 {$build_from_dir}/tmp/.database.sql"); common::execCommand("mkdir {$build_from_dir}/sqlite"); unset($ary['db_init']); $ary['url'] = 'sqlite:.database.sql'; } // no caching of assets. Place css and js in file $ary['cached_assets'] = 0; $ary['cashed_assets_reload'] = 0; $ary['cached_assets_minify'] = 0; $ary['cached_assets_compress'] = 0; $ary['cached_assets_inline'] = 1; if (conf::getMainIni('phar_files')) { common::execCommand("cp -rf htdocs/files {$build_from_dir}"); common::execCommand("sudo chown -R 777 {$build_from_dir}/files"); } $ini_settings = conf::arrayToIniFile($ary); file_put_contents("{$build_from_dir}/tmp/.config.ini", $ini_settings); chdir($build_phar_dir); $output = "{$base}-web.phar"; $phar = new Phar($output); $phar->buildFromDirectory($build_from_dir); $stub = $phar->createDefaultStub('phar-web.php', 'phar-web.php'); $phar->setStub($stub); $phar->stopBuffering(); echo "Web phar executable file created from current source ({$output})\n"; echo "Serve it e.g. with the built-in server. Like this:\n"; echo "cd {$build_phar_dir}\n"; echo "php -S localhost:8080 {$base}-web.phar\n"; exit(0); }
/** * function for doing a prompt install from shell mode * is a wrapper around other shell functions. */ function prompt_install() { common::echoMessage('Pick a version to install:', 'y'); $tags = git::getTagsInstallLatest() . PHP_EOL; $tags .= "master"; common::echoMessage($tags); $tag = common::readSingleline("Enter tag (version) to use:"); common::execCommand("git checkout {$tag}"); // Which profile to install $profiles = file::getFileList('profiles', array('dir_only' => true)); if (count($profiles) == 1) { $profile = array_pop($profiles); } else { common::echoMessage("List of profiles: "); foreach ($profiles as $val) { common::echoMessage("\t" . $val); } // select profile and load it $profile = common::readSingleline('Enter profile, and hit return: '); } common::echoMessage("Loading the profile '{$profile}'", 'y'); load_profile(array('profile' => $profile, 'config_only' => true)); common::echoMessage("Main configuration (placed in config/config.ini) for '{$profile}' is loaded", 'y'); // Keep base path. Ortherwise we will lose it when loading profile $base_path = conf::pathBase(); // Load the default config.ini settings as a skeleton conf::$vars['coscms_main'] = conf::getIniFileArray($base_path . '/config/config.ini', true); // Reset base path conf::setMainIni('base_path', $base_path); conf::defineCommon(); common::echoMessage("Enter MySQL credentials", 'y'); // Get configuration info $host = common::readSingleline('Enter your MySQL host: '); $database = common::readSingleline('Enter database name: '); $username = common::readSingleline('Enter database user: '******'Enter database users password: '******'Enter server host name: '); common::echoMessage("Writing database connection info to main configuration"); // Assemble configuration info conf::$vars['coscms_main']['url'] = "mysql:dbname={$database};host={$host};charset=utf8"; conf::$vars['coscms_main']['username'] = $username; conf::$vars['coscms_main']['password'] = $password; conf::$vars['coscms_main']['server_name'] = $server_name; // Write it to ini file $content = conf::arrayToIniFile(conf::$vars['coscms_main'], false); $path = conf::pathBase() . "/config/config.ini"; file_put_contents($path, $content); common::echoMessage("Your can also always change the config/config.ini file manually"); $options = array(); $options['profile'] = $profile; if ($tag == 'master') { $options['master'] = true; } common::echoMessage("Will now clone and install all modules", 'y'); cos_install($options); common::echoMessage("Create a super user", 'y'); useradd_add(); $login = "******"; common::echoMessage("If there was no errors you will be able to login at {$login}"); common::echoMessage("Remember to change file permissions. This will require super user"); common::echoMessage("E.g. like this:"); common::echoMessage("sudo ./coscli.sh file --chmod-files"); }
/** * function for updating a modules .ini file with new settings * from updated ini-dist file. * * @param array $options */ function update_ini_file($options) { if (!isset($options['module'])) { echo "Specify module\n"; exit(1); } $ini_file_path = conf::pathModules() . "/{$options['module']}/{$options['module']}.ini"; $ini_dist_path = $ini_file_path . "-dist"; $ini_file = conf::getIniFileArray($ini_file_path); $ini_dist = conf::getIniFileArray($ini_dist_path); $new_settings = array(); foreach ($ini_dist as $key => $val) { if (!isset($ini_file[$key])) { $ini_file[$key] = $val; // used for displaying which settings were updated. $new_settings[$key] = $val; } } // write it to ini file $content = conf::arrayToIniFile($ini_file); file_put_contents($ini_file_path, $content); // install profile. if (!empty($new_settings)) { $new_settings_str = conf::arrayToIniFile($new_settings); common::echoMessage("New ini file written with updated settings: {$ini_file_path}"); common::echoMessage("These are the new ini settings for module {$options['module']}:"); common::echoMessage(trim($new_settings_str)); } }