getParameter("site.path") . "/settings.php"; // setup user write permissions for the file $old = fileperms($filename); if ($old === FALSE) { return FALSE; } $new = 0777; // set all permissions if (!chmod($filename, $new)) { return FALSE; } // load install.inc if(is_file(DRUPAL_ROOT . "/internal/")) { include_once DRUPAL_ROOT . "/internal/core/includes/install.inc"; } else { include_once DRUPAL_ROOT . "/core/includes/install.inc"; } // update the provided setting $settings["settings"][$name] = (object)[ "value" => $value, "required" => TRUE, ]; // do the rewrite try { drupal_rewrite_settings($settings, $filename); } catch(Throwable $t) { return FALSE; } // reset the file mode return chmod($filename, $old); } /** Sets the trusted host to the specified domain */ function set_trusted_domain(string $domain): bool { return set_setting("trusted_host_patterns", [preg_quote($domain)]); } /** Sets up including a settings.php file from the given path */ function install_settings_include(array $paths): bool { // find the original filename $filename = DRUPAL_ROOT . "/" . \Drupal::getContainer()->getParameter("site.path") . "/settings.php"; // read the original file $original_content = file_get_contents($filename); if ($original_content === FALSE) { return FALSE; } // remove any old $pattern = '/\/\/(\s*)(.*?)\/\/(\s*)<\/distillery-settings-include>/s'; $new_content = preg_replace($pattern, '', $originalContent); $code = "// >\n//\n// DO NOT MODIFY THIS BLOCK AND KEEP IT AT THE END OF THE FILE.\n// DO NOT REMOVE CONFIG TAGS\n"; foreach ($paths as $path) { // escape the path to be included $the_path = "'" . addslashes($path) . "'"; // resolve it (if it isn't absolute) if (!str_starts_with($path, '/')) { $the_path = '$app_root . \'/\' . $site_path . \'/\' . ' . $the_path; } // add code to include the file if it exists $code = $code . 'if (file_exists(' . $the_path . ')) { include_once ' . $the_path . '; }' . "\n"; } $code = $code . "// "; // and store the settings try { file_put_contents($filename, $original_content . $code); } catch(Throwable $t) { return FALSE; } return TRUE; }