141 private $initial_values;
146 private $cookies_configured =
false;
151 private $cookies = [];
158 protected $locked_values = [
172 protected $deprecated = [
180 protected $config_defaults = [
181 'allow_phpinfo' =>
false,
182 'authentication_failures_lifetime' => 600,
183 'authentication_failures_limit' => 5,
184 'auto_disable_plugins' =>
true,
185 'batch_run_time_in_secs' => 4,
186 'boot_cache_ttl' => 3600,
187 'can_change_username' =>
false,
188 'class_loader_verify_file_existence' =>
true,
189 'comment_box_collapses' =>
true,
190 'comments_group_only' =>
true,
191 'comments_latest_first' =>
true,
192 'comments_max_depth' => 0,
193 'comments_per_page' => 25,
194 'db_query_cache_limit' => 50,
195 'default_limit' => 10,
196 'elgg_maintenance_mode' =>
false,
197 'email_html_part' =>
true,
198 'email_html_part_images' =>
'no',
199 'email_subject_limit' => 998,
200 'enable_delayed_email' =>
true,
201 'friendly_time_number_of_days' => 30,
203 'topbar' => [
'w' => 16,
'h' => 16,
'square' =>
true,
'upscale' =>
true],
204 'tiny' => [
'w' => 25,
'h' => 25,
'square' =>
true,
'upscale' =>
true],
205 'small' => [
'w' => 40,
'h' => 40,
'square' =>
true,
'upscale' =>
true],
206 'medium' => [
'w' => 100,
'h' => 100,
'square' =>
true,
'upscale' =>
true],
207 'large' => [
'w' => 200,
'h' => 200,
'square' =>
true,
'upscale' =>
true],
208 'master' => [
'w' => 10240,
'h' => 10240,
'square' =>
false,
'upscale' =>
false,
'crop' =>
false],
211 'language_detect_from_browser' =>
true,
213 'mentions_display_format' =>
'display_name',
214 'message_delay' => 6,
215 'min_password_length' => 6,
217 'notifications_max_runtime' => 45,
218 'notifications_queue_delay' => 0,
219 'pagination_behaviour' =>
'ajax-replace',
220 'security_email_require_confirmation' =>
true,
221 'security_email_require_password' =>
true,
222 'security_notify_admins' =>
true,
223 'security_notify_user_password' =>
true,
224 'security_protect_upgrade' =>
true,
225 'session_bound_entity_icons' =>
false,
226 'simplecache_enabled' =>
false,
227 'subresource_integrity_enabled' =>
false,
228 'system_cache_enabled' =>
false,
229 'testing_mode' =>
false,
230 'user_joined_river' =>
false,
231 'webp_enabled' =>
true,
232 'who_can_change_language' =>
'everyone',
240 protected $path_properties = [
251 const ENTITY_TYPES = [
'group',
'object',
'site',
'user'];
258 const SENSITIVE_PROPERTIES = [
274 $this->saveInitialValues($values);
276 $this->values = array_merge($this->config_defaults, $values);
279 $this->getCookieConfig();
291 foreach (self::SENSITIVE_PROPERTIES as
$name) {
292 unset($values[$name]);
295 $this->initial_values = $values;
305 public static function factory(
string $settings_path =
''): static {
306 $settings_path = self::resolvePath($settings_path);
308 return self::fromFile($settings_path);
320 if (!is_file(
$path)) {
324 if (!is_readable(
$path)) {
330 if (isset($GLOBALS[
'CONFIG'])) {
332 $global = $GLOBALS[
'CONFIG'];
333 unset($GLOBALS[
'CONFIG']);
338 Includer::requireFile(
$path);
340 if (empty($GLOBALS[
'CONFIG']->
dataroot)) {
341 throw new ConfigurationException(__METHOD__ .
': Reading configs failed: The Elgg settings file is missing $CONFIG->dataroot.');
344 if (empty($GLOBALS[
'CONFIG']->
wwwroot)) {
345 throw new ConfigurationException(__METHOD__ .
': Reading configs failed: The Elgg settings file is missing $CONFIG->wwwroot.');
348 $config =
new self(get_object_vars($GLOBALS[
'CONFIG']));
350 if ($global !== null) {
352 $GLOBALS[
'CONFIG'] = $global;
354 unset($GLOBALS[
'CONFIG']);
357 if (
$config->{
'X-Sendfile-Type'}) {
359 unset(
$config->{
'X-Sendfile-Type'});
362 if (
$config->{
'X-Accel-Mapping'}) {
364 unset(
$config->{
'X-Accel-Mapping'});
377 public static function resolvePath(
string $settings_path =
''): string {
378 if (empty($settings_path)) {
379 $settings_path = Paths::settingsFile(Paths::SETTINGS_PHP);
382 return \Elgg\Project\Paths::sanitize($settings_path,
false);
391 return $this->values;
400 if ($this->cookies_configured) {
401 return $this->cookies;
405 if ($this->hasInitialValue(
'cookies')) {
406 $cookies = $this->getInitialValue(
'cookies');
410 if (!isset($cookies[
'session'])) {
411 $cookies[
'session'] = [];
414 $session_defaults = session_get_cookie_params();
415 $session_defaults[
'name'] =
'Elgg';
416 $cookies[
'session'] = array_merge($session_defaults, $cookies[
'session']);
419 if (!isset($cookies[
'remember_me'])) {
420 $cookies[
'remember_me'] = [];
423 $session_defaults[
'name'] =
'elggperm';
424 $session_defaults[
'expire'] = strtotime(
'+30 days');
425 $cookies[
'remember_me'] = array_merge($session_defaults, $cookies[
'remember_me']);
427 $this->cookies = $cookies;
428 $this->cookies_configured =
true;
444 if (array_key_exists($name, $this->deprecated)) {
448 if (isset($this->values[$name])) {
449 return $this->values[
$name];
463 return isset($this->values[$name]);
473 return $this->initial_values[
$name] ?? null;
484 return isset($this->initial_values[$name]);
495 $testing = $this->values[
'testing_mode'] ??
false;
496 return !$testing && in_array($name, $this->locked_values) && $this->hasValue($name);
509 if ($this->wasWarnedLocked($name)) {
513 if (in_array($name, $this->path_properties)) {
527 return $this->__get($name) !== null;
537 if ($this->wasWarnedLocked($name)) {
541 unset($this->values[$name]);
553 if ($this->wasWarnedLocked($name)) {
557 if (
strlen($name) > 255) {
558 $this->
getLogger()->error(
'The name length for configuration variables cannot be greater than 255');
564 return $this->
remove(
$name);
569 $this->__set($name,
$value);
581 public function remove(
string $name):
bool {
582 if ($this->wasWarnedLocked(
$name)) {
588 unset($this->values[
$name]);
600 if (!$this->isLocked($name)) {
604 $this->
getLogger()->warning(
"The property {$name} is read-only.");
hasInitialValue(string $name)
Was a value available at construction time? (From settings.php)
static resolvePath(string $settings_path= '')
Resolve settings path.
A generic parent class for Configuration exceptions.
if(!isset($CONFIG)) $CONFIG dataroot
The full file path for Elgg data storage.
elgg_deprecated_notice(string $msg, string $dep_version)
Log a notice about deprecated use of a function, view, etc.
saveInitialValues(array $values)
Stores the inital values.
save(string $name, $value)
Save a configuration setting to the database.
if(!$user||!$user->canDelete()) $name
c Accompany it with the information you received as to the offer to distribute corresponding source complete source code means all the source code for all modules it plus any associated interface definition plus the scripts used to control compilation and installation of the executable as a special the source code distributed need not include anything that is normally and so on of the operating system on which the executable unless that component itself accompanies the executable If distribution of executable or object code is made by offering access to copy from a designated then offering equivalent access to copy the source code from the same place counts as distribution of the source even though third parties are not compelled to copy the source along with the object code You may not or distribute the Program except as expressly provided under this License Any attempt otherwise to sublicense or distribute the Program is void
wasWarnedLocked(string $name)
Log a read-only warning if the name is read-only.
__get(string $name)
Get an Elgg configuration value if it's been set or loaded during the boot process.
hasValue(string $name)
Test if we have a set value.
__set(string $name, $value)
Set an Elgg configuration value.
__construct(array $values=[])
Constructor.
$config
Advanced site settings, debugging section.
trait Loggable
Enables adding a logger.
static fromFile($path)
Build a config from a file.
__unset(string $name)
Handle unset()
__isset(string $name)
Handle isset()
isLocked(string $name)
Is this value locked?
getLogger()
Returns logger.
getCookieConfig()
Set up and return the cookie configuration array resolved from settings.
getValues()
Get all values.
getInitialValue(string $name)
Get a value set at construction time.
_elgg_services()
Get the global service provider.
$CONFIG wwwroot
The installation root URL of the site.
static factory(string $settings_path= '')
Build a config from default settings locations.