150 private $initial_values;
155 private $cookies_configured =
false;
160 private $cookies = [];
167 protected $locked_values = [
181 protected $deprecated = [
189 protected $config_defaults = [
190 'allow_phpinfo' =>
false,
191 'authentication_failures_lifetime' => 600,
192 'authentication_failures_limit' => 5,
193 'auto_disable_plugins' =>
true,
194 'batch_run_time_in_secs' => 4,
195 'boot_cache_ttl' => 3600,
196 'can_change_username' =>
false,
197 'class_loader_verify_file_existence' =>
true,
198 'comment_box_collapses' =>
true,
199 'comments_group_only' =>
true,
200 'comments_latest_first' =>
true,
201 'comments_max_depth' => 0,
202 'comments_per_page' => 25,
203 'db_query_cache_limit' => 50,
204 'default_limit' => 10,
205 'elgg_maintenance_mode' =>
false,
206 'email_html_part' =>
true,
207 'email_html_part_images' =>
'no',
208 'email_subject_limit' => 998,
209 'enable_delayed_email' =>
true,
210 'friendly_time_number_of_days' => 30,
212 'topbar' => [
'w' => 16,
'h' => 16,
'square' =>
true,
'upscale' =>
true],
213 'tiny' => [
'w' => 25,
'h' => 25,
'square' =>
true,
'upscale' =>
true],
214 'small' => [
'w' => 40,
'h' => 40,
'square' =>
true,
'upscale' =>
true],
215 'medium' => [
'w' => 100,
'h' => 100,
'square' =>
true,
'upscale' =>
true],
216 'large' => [
'w' => 200,
'h' => 200,
'square' =>
true,
'upscale' =>
true],
217 'master' => [
'w' => 10240,
'h' => 10240,
'square' =>
false,
'upscale' =>
false,
'crop' =>
false],
220 'language_detect_from_browser' =>
true,
222 'mentions_display_format' =>
'display_name',
223 'message_delay' => 6,
224 'min_password_length' => 6,
226 'notifications_max_runtime' => 45,
227 'notifications_queue_delay' => 0,
228 'pagination_behaviour' =>
'ajax-replace',
229 'security_email_require_confirmation' =>
true,
230 'security_email_require_password' =>
true,
231 'security_notify_admins' =>
true,
232 'security_notify_user_password' =>
true,
233 'security_protect_upgrade' =>
true,
234 'session_bound_entity_icons' =>
false,
235 'simplecache_enabled' =>
false,
236 'subresource_integrity_enabled' =>
false,
237 'system_cache_enabled' =>
false,
238 'testing_mode' =>
false,
239 'user_joined_river' =>
false,
240 'webp_enabled' =>
true,
241 'who_can_change_language' =>
'everyone',
249 protected $path_properties = [
260 const ENTITY_TYPES = [
'group',
'object',
'site',
'user'];
267 const SENSITIVE_PROPERTIES = [
283 $this->saveInitialValues($values);
285 $this->values = array_merge($this->config_defaults, $values);
288 $this->getCookieConfig();
300 foreach (self::SENSITIVE_PROPERTIES as
$name) {
301 unset($values[$name]);
304 $this->initial_values = $values;
314 public static function factory(
string $settings_path =
''): static {
315 $settings_path = self::resolvePath($settings_path);
317 return self::fromFile($settings_path);
329 if (!is_file(
$path)) {
333 if (!is_readable(
$path)) {
339 if (isset($GLOBALS[
'CONFIG'])) {
341 $global = $GLOBALS[
'CONFIG'];
342 unset($GLOBALS[
'CONFIG']);
347 Includer::requireFile(
$path);
349 if (empty($GLOBALS[
'CONFIG']->
dataroot)) {
350 throw new ConfigurationException(__METHOD__ .
': Reading configs failed: The Elgg settings file is missing $CONFIG->dataroot.');
353 if (empty($GLOBALS[
'CONFIG']->
wwwroot)) {
354 throw new ConfigurationException(__METHOD__ .
': Reading configs failed: The Elgg settings file is missing $CONFIG->wwwroot.');
357 $config =
new self(get_object_vars($GLOBALS[
'CONFIG']));
359 if ($global !== null) {
361 $GLOBALS[
'CONFIG'] = $global;
363 unset($GLOBALS[
'CONFIG']);
366 if (
$config->{
'X-Sendfile-Type'}) {
368 unset(
$config->{
'X-Sendfile-Type'});
371 if (
$config->{
'X-Accel-Mapping'}) {
373 unset(
$config->{
'X-Accel-Mapping'});
386 public static function resolvePath(
string $settings_path =
''): string {
387 if (empty($settings_path)) {
388 $settings_path = Paths::settingsFile(Paths::SETTINGS_PHP);
391 return \Elgg\Project\Paths::sanitize($settings_path,
false);
400 return $this->values;
409 if ($this->cookies_configured) {
410 return $this->cookies;
414 if ($this->hasInitialValue(
'cookies')) {
415 $cookies = $this->getInitialValue(
'cookies');
419 if (!isset($cookies[
'session'])) {
420 $cookies[
'session'] = [];
423 $session_defaults = session_get_cookie_params();
424 $session_defaults[
'name'] =
'Elgg';
425 $cookies[
'session'] = array_merge($session_defaults, $cookies[
'session']);
428 if (!isset($cookies[
'remember_me'])) {
429 $cookies[
'remember_me'] = [];
432 $session_defaults[
'name'] =
'elggperm';
433 $session_defaults[
'expire'] = strtotime(
'+30 days');
434 $cookies[
'remember_me'] = array_merge($session_defaults, $cookies[
'remember_me']);
436 $this->cookies = $cookies;
437 $this->cookies_configured =
true;
453 if (array_key_exists($name, $this->deprecated)) {
457 if (isset($this->values[$name])) {
458 return $this->values[
$name];
472 return isset($this->values[$name]);
482 return $this->initial_values[
$name] ?? null;
493 return isset($this->initial_values[$name]);
504 $testing = $this->values[
'testing_mode'] ??
false;
505 return !$testing && in_array($name, $this->locked_values) && $this->hasValue($name);
518 if ($this->wasWarnedLocked($name)) {
522 if (in_array($name, $this->path_properties)) {
536 return $this->__get($name) !== null;
546 if ($this->wasWarnedLocked($name)) {
550 unset($this->values[$name]);
562 if ($this->wasWarnedLocked($name)) {
566 if (
strlen($name) > 255) {
567 $this->
getLogger()->error(
'The name length for configuration variables cannot be greater than 255');
573 return $this->
remove(
$name);
578 $this->__set($name,
$value);
590 public function remove(
string $name):
bool {
591 if ($this->wasWarnedLocked(
$name)) {
597 unset($this->values[
$name]);
609 if (!$this->isLocked($name)) {
613 $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.