151 private $initial_values;
156 private $cookies_configured =
false;
161 private $cookies = [];
168 protected $locked_values = [
182 protected $deprecated = [
190 protected $config_defaults = [
191 'allow_phpinfo' =>
false,
192 'authentication_failures_lifetime' => 600,
193 'authentication_failures_limit' => 5,
194 'auto_disable_plugins' =>
true,
195 'batch_run_time_in_secs' => 4,
196 'boot_cache_ttl' => 3600,
197 'can_change_username' =>
false,
198 'class_loader_verify_file_existence' =>
true,
199 'comment_box_collapses' =>
true,
200 'comments_group_only' =>
true,
201 'comments_latest_first' =>
true,
202 'comments_max_depth' => 0,
203 'comments_per_page' => 25,
204 'db_query_cache_limit' => 50,
205 'default_limit' => 10,
206 'elgg_maintenance_mode' =>
false,
207 'email_html_part' =>
true,
208 'email_html_part_images' =>
'no',
209 'email_subject_limit' => 998,
210 'enable_delayed_email' =>
true,
211 'friendly_time_number_of_days' => 30,
213 'topbar' => [
'w' => 16,
'h' => 16,
'square' =>
true,
'upscale' =>
true],
214 'tiny' => [
'w' => 25,
'h' => 25,
'square' =>
true,
'upscale' =>
true],
215 'small' => [
'w' => 40,
'h' => 40,
'square' =>
true,
'upscale' =>
true],
216 'medium' => [
'w' => 100,
'h' => 100,
'square' =>
true,
'upscale' =>
true],
217 'large' => [
'w' => 200,
'h' => 200,
'square' =>
true,
'upscale' =>
true],
218 'master' => [
'w' => 10240,
'h' => 10240,
'square' =>
false,
'upscale' =>
false,
'crop' =>
false],
221 'language_detect_from_browser' =>
true,
223 'mentions_display_format' =>
'display_name',
224 'message_delay' => 6,
225 'min_password_length' => 6,
227 'notifications_max_runtime' => 45,
228 'notifications_queue_delay' => 0,
229 'pagination_behaviour' =>
'ajax-replace',
230 'security_email_require_confirmation' =>
true,
231 'security_email_require_password' =>
true,
232 'security_notify_admins' =>
true,
233 'security_notify_user_password' =>
true,
234 'security_protect_upgrade' =>
true,
235 'session_bound_entity_icons' =>
false,
236 'simplecache_enabled' =>
false,
237 'subresource_integrity_enabled' =>
false,
238 'system_cache_enabled' =>
false,
239 'testing_mode' =>
false,
240 'trash_enabled' =>
false,
241 'trash_retention' => 30,
242 'user_joined_river' =>
false,
243 'webp_enabled' =>
true,
244 'who_can_change_language' =>
'everyone',
252 protected $path_properties = [
263 const ENTITY_TYPES = [
'group',
'object',
'site',
'user'];
270 const SENSITIVE_PROPERTIES = [
286 $this->saveInitialValues($values);
288 $this->values = array_merge($this->config_defaults, $values);
291 $this->getCookieConfig();
303 foreach (self::SENSITIVE_PROPERTIES as
$name) {
304 unset($values[$name]);
307 $this->initial_values = $values;
317 public static function factory(
string $settings_path =
''): static {
318 $settings_path = self::resolvePath($settings_path);
320 return self::fromFile($settings_path);
332 if (!is_file(
$path)) {
336 if (!is_readable(
$path)) {
342 if (isset($GLOBALS[
'CONFIG'])) {
344 $global = $GLOBALS[
'CONFIG'];
345 unset($GLOBALS[
'CONFIG']);
350 Includer::requireFile(
$path);
352 if (empty($GLOBALS[
'CONFIG']->
dataroot)) {
353 throw new ConfigurationException(__METHOD__ .
': Reading configs failed: The Elgg settings file is missing $CONFIG->dataroot.');
356 if (empty($GLOBALS[
'CONFIG']->
wwwroot)) {
357 throw new ConfigurationException(__METHOD__ .
': Reading configs failed: The Elgg settings file is missing $CONFIG->wwwroot.');
360 $config =
new self(get_object_vars($GLOBALS[
'CONFIG']));
362 if ($global !== null) {
364 $GLOBALS[
'CONFIG'] = $global;
366 unset($GLOBALS[
'CONFIG']);
369 if (
$config->{
'X-Sendfile-Type'}) {
371 unset(
$config->{
'X-Sendfile-Type'});
374 if (
$config->{
'X-Accel-Mapping'}) {
376 unset(
$config->{
'X-Accel-Mapping'});
389 public static function resolvePath(
string $settings_path =
''): string {
390 if (empty($settings_path)) {
391 $settings_path = Paths::settingsFile(Paths::SETTINGS_PHP);
394 return Paths::sanitize($settings_path,
false);
403 return $this->values;
412 if ($this->cookies_configured) {
413 return $this->cookies;
417 if ($this->hasInitialValue(
'cookies')) {
418 $cookies = $this->getInitialValue(
'cookies');
422 if (!isset($cookies[
'session'])) {
423 $cookies[
'session'] = [];
426 $session_defaults = session_get_cookie_params();
427 $session_defaults[
'name'] =
'Elgg';
428 $cookies[
'session'] = array_merge($session_defaults, $cookies[
'session']);
431 if (!isset($cookies[
'remember_me'])) {
432 $cookies[
'remember_me'] = [];
435 $session_defaults[
'name'] =
'elggperm';
436 $session_defaults[
'expire'] = strtotime(
'+30 days');
437 $cookies[
'remember_me'] = array_merge($session_defaults, $cookies[
'remember_me']);
439 $this->cookies = $cookies;
440 $this->cookies_configured =
true;
456 if (array_key_exists($name, $this->deprecated)) {
460 if (isset($this->values[$name])) {
461 return $this->values[
$name];
475 return isset($this->values[$name]);
485 return $this->initial_values[
$name] ?? null;
496 return isset($this->initial_values[$name]);
507 $testing = $this->values[
'testing_mode'] ??
false;
508 return !$testing && in_array($name, $this->locked_values) && $this->hasValue($name);
521 if ($this->wasWarnedLocked($name)) {
525 if (in_array($name, $this->path_properties)) {
539 return $this->__get($name) !== null;
549 if ($this->wasWarnedLocked($name)) {
553 unset($this->values[$name]);
565 if ($this->wasWarnedLocked($name)) {
569 if (
strlen($name) > 255) {
570 $this->
getLogger()->error(
'The name length for configuration variables cannot be greater than 255');
576 return $this->
remove(
$name);
581 $this->__set($name,
$value);
593 public function remove(
string $name):
bool {
594 if ($this->wasWarnedLocked(
$name)) {
600 unset($this->values[
$name]);
612 if (!$this->isLocked($name)) {
616 $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.