diff --git a/conf/icecoder_settings.php b/conf/icecoder_settings.php new file mode 100644 index 0000000..d7f08e7 --- /dev/null +++ b/conf/icecoder_settings.php @@ -0,0 +1,231 @@ +versionNo = "8.0"; + $this->docRoot = $_SERVER['DOCUMENT_ROOT']; + } + + + // ======== + // DATA DIR + // ======== + + public function getDataDirDetails() + { + clearstatcache(); + + // Return details about the data dir + $fullPath = dirname(__FILE__) . "/../data/"; + $exists = file_exists($fullPath); + $readable = is_readable($fullPath); + $writable = is_writable($fullPath); + return [ + "fullPath" => $fullPath, + "exists" => $exists, + "readable" => $readable, + "writable" => $writable, + ]; + } + + // ============= + // GLOBAL CONFIG + // ============= + + public function getConfigGlobalTemplate() + { + // Return the serialized global config template + $fileName = 'template-config-global.php'; + $fullPath = dirname(__FILE__) . "/../lib/" . $fileName; + if (function_exists('opcache_invalidate')) { + opcache_invalidate($fullPath, true); + } + $settings = file_get_contents($fullPath); + return $settings; + } + + public function getConfigGlobalFileDetails() + { + clearstatcache(); + + // Return details about the global config file + $fileName = 'config-global.php'; + $fullPath = dirname(__FILE__) . "/../data/" . $fileName; + $exists = file_exists($fullPath); + $readable = is_readable($fullPath); + $writable = is_writable($fullPath); + $filemtime = filemtime($fullPath); + return [ + "fileName" => $fileName, + "fullPath" => $fullPath, + "exists" => $exists, + "readable" => $readable, + "writable" => $writable, + "filemtime" => $filemtime + ]; + } + + public function getConfigGlobalSettings() + { + // Start an array with version number and document root + $settings = []; + $settings['versionNo'] = $this->versionNo; + $settings['docRoot'] = $this->docRoot; + // Get global config file details + $fullPath = $this->getConfigGlobalFileDetails()['fullPath']; + $settingsFromFile = $this->serializedFileData("get", $fullPath); + // Merge that with the array we started with and return + $settings = array_merge($settings, $settingsFromFile); + return $settings; + } + + public function setConfigGlobalSettings($settings): bool + { + // Get the global config file details + $fullPath = $this->getConfigGlobalFileDetails()['fullPath']; + if ($fConfigSettings = fopen($fullPath, 'w')) { + // If the settings we've received aren't in serialized format yet, do that now + // As $settings could be a serialized string or array + if (is_array($settings)) { + unset($settings['versionNo']); + unset($settings['docRoot']); + } + return $this->serializedFileData("set", $fullPath, $settings); + } else { + return false; + } + } + + public function updateConfigGlobalSettings($array): bool + { + // Update global config settings file + $settingsFromFile = $this->getConfigGlobalSettings(); + $settings = array_merge($settingsFromFile, $array); + return $this->setConfigGlobalSettings($settings); + } + + // ============ + // USERS CONFIG + // ============ + + public function getConfigUsersTemplate() + { + // Return the serialized users config template + $fileName = 'template-config-users.php'; + $fullPath = dirname(__FILE__) . "/../lib/" . $fileName; + if (function_exists('opcache_invalidate')) { + opcache_invalidate($fullPath, true); + } + $settings = file_get_contents($fullPath); + return $settings; + } + + public function getConfigUsersFileDetails($fileName) + { + // Return details about the users config file + $fullPath = dirname(__FILE__) . "/../data/" . $fileName; + $exists = file_exists($fullPath); + $readable = is_readable($fullPath); + $writable = is_writable($fullPath); + $filemtime = filemtime($fullPath); + return [ + "fileName" => $fileName, + "fullPath" => $fullPath, + "exists" => $exists, + "readable" => $readable, + "writable" => $writable, + "filemtime" => $filemtime, + ]; + } + + public function getConfigUsersSettings($fileName) + { + // Get users config file details + $fullPath = $this->getConfigUsersFileDetails($fileName)['fullPath']; + $settingsFromFile = $this->serializedFileData("get", $fullPath); + // Now return + return $settingsFromFile; + } + + public function setConfigUsersSettings($fileName, $settings): bool + { + // Get the users config file details + $fullPath = $this->getConfigUsersFileDetails($fileName)['fullPath']; + if ($fConfigSettings = fopen($fullPath, 'w')) { + return $this->serializedFileData("set", $fullPath, $settings); + } else { + return false; + } + } + + public function updateConfigUsersSettings($fileName, $array): bool + { + // Update users config settings file + $settingsFromFile = $this->getConfigUsersSettings($fileName); + $settings = array_merge($settingsFromFile, $array); + return $this->setConfigUsersSettings($fileName, $settings); + } + + public function updateConfigUsersCreateDate($fileName) + { + global $ICEcoderUserSettings; + + // Get users config file details + $filemtime = $this->getConfigUsersFileDetails($fileName)['filemtime']; + // Make it a number (avoids null, undefined etc) + $filemtime = intval($filemtime); + // Set it to the epoch time now if we don't have a real value + if (0 === $filemtime) { + $filemtime = time(); + } + // Update users config settings file + $ICEcoderSettingsFromFile = $this->getConfigUsersSettings($fileName); + $ICEcoderSettingsFromFile['configCreateDate'] = $filemtime; + $this->setConfigUsersSettings($fileName, $ICEcoderSettingsFromFile); + // Set the new value in array + $ICEcoderUserSettings['configCreateDate'] = $filemtime; + } + + public function createIPSettingsFileIfNotExist() + { + global $username, $settingsFile, $settingsFileAddr; + + // Create a duplicate version for the IP address of the domain if it doesn't exist yet + $serverAddr = $_SERVER['SERVER_ADDR'] ?? "1"; + if ($serverAddr == "1" || $serverAddr == "::1") { + $serverAddr = "127.0.0.1"; + } + $settingsFileAddr = 'config-' . $username . str_replace(".", "_", $serverAddr) . '.php'; + if (false === file_exists(dirname(__FILE__) . "/../data/" . $settingsFileAddr)) { + if (false === copy(dirname(__FILE__) . "/../data/" . $settingsFile, dirname(__FILE__) . "/../data/" . $settingsFileAddr)) { + $reqsFailures = ["phpCreateSettingsFileAddr"]; + include dirname(__FILE__) . "/../lib/requirements.php"; + } + } + } + + public function serializedFileData($do, $fullPath, $output=null) + { + if ("get" === $do) { + if (function_exists('opcache_invalidate')) { + opcache_invalidate($fullPath, true); + } + $data = file_get_contents($fullPath); + $data = str_replace("<"."?php\n/*\n\n", "", $data); + $data = str_replace("\n\n*/\n?".">", "", $data); + $data = unserialize($data); + return $data; + } + if ("set" === $do) { + if (true === is_array($output)) { + $output = serialize($output); + } + return false !== file_put_contents($fullPath, "<"."?php\n/*\n\n" . $output . "\n\n*/\n?" . ">"); + } + } +}