7 use Elgg\Traits\Loggable;
156 private $initial_values;
161 private $cookies_configured =
false;
166 private $cookies = [];
173 protected $locked_values = [
187 protected $deprecated = [
195 protected $config_defaults = [
196 'admin_validation_notification' =>
false,
197 'allow_phpinfo' =>
false,
198 'authentication_failures_lifetime' => 600,
199 'authentication_failures_limit' => 5,
200 'auto_disable_plugins' =>
true,
201 'batch_run_time_in_secs' => 4,
202 'boot_cache_ttl' => 3600,
203 'can_change_username' =>
false,
204 'class_loader_verify_file_existence' =>
true,
205 'comment_box_collapses' =>
true,
206 'comments_group_only' =>
true,
207 'comments_latest_first' =>
true,
208 'comments_max_depth' => 0,
209 'comments_per_page' => 25,
210 'db_enable_query_logging' =>
false,
211 'db_query_cache_limit' => 50,
212 'default_limit' => 10,
213 'elgg_maintenance_mode' =>
false,
214 'email_html_part' =>
true,
215 'email_html_part_images' =>
'no',
216 'email_subject_limit' => 998,
217 'enable_delayed_email' =>
true,
218 'friendly_time_number_of_days' => 30,
220 'topbar' => [
'w' => 16,
'h' => 16,
'square' =>
true,
'upscale' =>
true],
221 'tiny' => [
'w' => 25,
'h' => 25,
'square' =>
true,
'upscale' =>
true],
222 'small' => [
'w' => 40,
'h' => 40,
'square' =>
true,
'upscale' =>
true],
223 'medium' => [
'w' => 100,
'h' => 100,
'square' =>
true,
'upscale' =>
true],
224 'large' => [
'w' => 200,
'h' => 200,
'square' =>
true,
'upscale' =>
true],
225 'master' => [
'w' => 10240,
'h' => 10240,
'square' =>
false,
'upscale' =>
false,
'crop' =>
false],
227 'image_resize_max_height' => 10000,
228 'image_resize_max_resolution' => 16777216,
229 'image_resize_max_width' => 10000,
231 'language_detect_from_browser' =>
true,
233 'mentions_display_format' =>
'display_name',
234 'message_delay' => 6,
235 'min_password_length' => 6,
237 'notifications_max_runtime' => 45,
238 'notifications_queue_delay' => 0,
239 'pagination_behaviour' =>
'ajax-replace',
240 'require_admin_validation' =>
false,
241 'security_email_require_confirmation' =>
true,
242 'security_email_require_password' =>
true,
243 'security_notify_admins' =>
true,
244 'security_notify_user_password' =>
true,
245 'security_protect_upgrade' =>
true,
246 'session_bound_entity_icons' =>
false,
247 'simplecache_enabled' =>
false,
248 'subresource_integrity_enabled' =>
false,
249 'system_cache_enabled' =>
false,
250 'testing_mode' =>
false,
251 'trash_enabled' =>
false,
252 'trash_retention' => 30,
253 'user_joined_river' =>
false,
254 'webp_enabled' =>
true,
255 'who_can_change_language' =>
'everyone',
263 protected $path_properties = [
275 const ENTITY_TYPES = [
'group',
'object',
'site',
'user'];
282 const SENSITIVE_PROPERTIES = [
298 $this->saveInitialValues($values);
300 $this->values = array_merge($this->config_defaults, $values);
303 $this->getCookieConfig();
316 unset($values[
$name]);
319 $this->initial_values = $values;
329 public static function factory(
string $settings_path =
''): static {
330 $settings_path = self::resolvePath($settings_path);
332 return self::fromFile($settings_path);
348 if (!is_readable(
$path)) {
354 if (isset($GLOBALS[
'CONFIG'])) {
356 $global = $GLOBALS[
'CONFIG'];
357 unset($GLOBALS[
'CONFIG']);
362 Includer::requireFile(
$path);
364 if (empty($GLOBALS[
'CONFIG']->
dataroot)) {
365 throw new ConfigurationException(__METHOD__ .
': Reading configs failed: The Elgg settings file is missing $CONFIG->dataroot.');
368 if (empty($GLOBALS[
'CONFIG']->
wwwroot)) {
369 throw new ConfigurationException(__METHOD__ .
': Reading configs failed: The Elgg settings file is missing $CONFIG->wwwroot.');
372 $config =
new self(get_object_vars($GLOBALS[
'CONFIG']));
374 if ($global !==
null) {
376 $GLOBALS[
'CONFIG'] = $global;
378 unset($GLOBALS[
'CONFIG']);
381 if (
$config->{
'X-Sendfile-Type'}) {
383 unset(
$config->{
'X-Sendfile-Type'});
386 if (
$config->{
'X-Accel-Mapping'}) {
388 unset(
$config->{
'X-Accel-Mapping'});
401 public static function resolvePath(
string $settings_path =
''): string {
402 if (empty($settings_path)) {
403 $settings_path = Paths::settingsFile(Paths::SETTINGS_PHP);
406 return Paths::sanitize($settings_path,
false);
424 if ($this->cookies_configured) {
425 return $this->cookies;
429 if ($this->hasInitialValue(
'cookies')) {
430 $cookies = $this->getInitialValue(
'cookies');
434 if (!isset($cookies[
'session'])) {
435 $cookies[
'session'] = [];
438 $session_defaults = session_get_cookie_params();
439 $session_defaults[
'name'] =
'Elgg';
440 $cookies[
'session'] = array_merge($session_defaults, $cookies[
'session']);
443 if (!isset($cookies[
'remember_me'])) {
444 $cookies[
'remember_me'] = [];
447 $session_defaults[
'name'] =
'elggperm';
448 $session_defaults[
'expire'] = strtotime(
'+30 days');
449 $cookies[
'remember_me'] = array_merge($session_defaults, $cookies[
'remember_me']);
451 $this->cookies = $cookies;
452 $this->cookies_configured =
true;
468 if (array_key_exists(
$name, $this->deprecated)) {
472 if (!isset($this->values[
$name])) {
477 if (in_array(
$name, $this->path_properties)) {
502 return $this->initial_values[
$name] ??
null;
524 $testing = $this->values[
'testing_mode'] ?? false;
525 return !$testing && in_array(
$name, $this->locked_values) && $this->hasValue(
$name);
538 if ($this->wasWarnedLocked(
$name)) {
542 if (in_array(
$name, $this->path_properties)) {
566 if ($this->wasWarnedLocked(
$name)) {
570 unset($this->values[
$name]);
582 if ($this->wasWarnedLocked(
$name)) {
586 if (strlen(
$name) > 255) {
587 $this->getLogger()->error(
'The name length for configuration variables cannot be greater than 255');
593 return $this->
remove(
$name);
610 public function remove(
string $name):
bool {
611 if ($this->wasWarnedLocked(
$name)) {
617 unset($this->values[
$name]);
633 $this->getLogger()->warning(
"The property {$name} is read-only.");
if(! $user||! $user->canDelete()) $name
return[ 'admin/delete_admin_notices'=>['access'=> 'admin'], 'admin/menu/save'=>['access'=> 'admin'], 'admin/plugins/activate'=>['access'=> 'admin'], 'admin/plugins/activate_all'=>['access'=> 'admin'], 'admin/plugins/deactivate'=>['access'=> 'admin'], 'admin/plugins/deactivate_all'=>['access'=> 'admin'], 'admin/plugins/set_priority'=>['access'=> 'admin'], 'admin/security/security_txt'=>['access'=> 'admin'], 'admin/security/settings'=>['access'=> 'admin'], 'admin/security/regenerate_site_secret'=>['access'=> 'admin'], 'admin/site/cache/invalidate'=>['access'=> 'admin'], 'admin/site/flush_cache'=>['access'=> 'admin'], 'admin/site/icons'=>['access'=> 'admin'], 'admin/site/set_maintenance_mode'=>['access'=> 'admin'], 'admin/site/set_robots'=>['access'=> 'admin'], 'admin/site/theme'=>['access'=> 'admin'], 'admin/site/unlock_upgrade'=>['access'=> 'admin'], 'admin/site/settings'=>['access'=> 'admin'], 'admin/upgrade'=>['access'=> 'admin'], 'admin/upgrade/reset'=>['access'=> 'admin'], 'admin/user/ban'=>['access'=> 'admin'], 'admin/user/bulk/ban'=>['access'=> 'admin'], 'admin/user/bulk/delete'=>['access'=> 'admin'], 'admin/user/bulk/unban'=>['access'=> 'admin'], 'admin/user/bulk/validate'=>['access'=> 'admin'], 'admin/user/change_email'=>['access'=> 'admin'], 'admin/user/delete'=>['access'=> 'admin'], 'admin/user/login_as'=>['access'=> 'admin'], 'admin/user/logout_as'=>[], 'admin/user/makeadmin'=>['access'=> 'admin'], 'admin/user/resetpassword'=>['access'=> 'admin'], 'admin/user/removeadmin'=>['access'=> 'admin'], 'admin/user/unban'=>['access'=> 'admin'], 'admin/user/validate'=>['access'=> 'admin'], 'annotation/delete'=>[], 'avatar/upload'=>[], 'comment/save'=>[], 'diagnostics/download'=>['access'=> 'admin'], 'entity/chooserestoredestination'=>[], 'entity/delete'=>[], 'entity/mute'=>[], 'entity/restore'=>[], 'entity/subscribe'=>[], 'entity/trash'=>[], 'entity/unmute'=>[], 'entity/unsubscribe'=>[], 'login'=>['access'=> 'logged_out'], 'logout'=>[], 'notifications/mute'=>['access'=> 'public'], 'plugins/settings/remove'=>['access'=> 'admin'], 'plugins/settings/save'=>['access'=> 'admin'], 'plugins/usersettings/save'=>[], 'register'=>['access'=> 'logged_out', 'middleware'=>[\Elgg\Router\Middleware\RegistrationAllowedGatekeeper::class,],], 'river/delete'=>[], 'settings/notifications'=>[], 'settings/notifications/subscriptions'=>[], 'user/changepassword'=>['access'=> 'public'], 'user/requestnewpassword'=>['access'=> 'public'], 'useradd'=>['access'=> 'admin'], 'usersettings/save'=>[], 'widgets/add'=>[], 'widgets/delete'=>[], 'widgets/move'=>[], 'widgets/save'=>[],]
foreach( $paths as $path)
hasValue(string $name)
Test if we have a set value.
isLocked(string $name)
Is this value locked?
static fromFile($path)
Build a config from a file.
__construct(array $values=[])
Constructor.
getCookieConfig()
Set up and return the cookie configuration array resolved from settings.
save(string $name, $value)
Save a configuration setting to the database.
hasInitialValue(string $name)
Was a value available at construction time? (From settings.php)
getInitialValue(string $name)
Get a value set at construction time.
static factory(string $settings_path='')
Build a config from default settings locations.
saveInitialValues(array $values)
Stores the inital values.
static resolvePath(string $settings_path='')
Resolve settings path.
wasWarnedLocked(string $name)
Log a read-only warning if the name is read-only.
__set(string $name, $value)
Set an Elgg configuration value.
__isset(string $name)
Handle isset()
__unset(string $name)
Handle unset()
getValues()
Get all values.
__get(string $name)
Get an Elgg configuration value if it's been set or loaded during the boot process.
A generic parent class for Configuration exceptions.
Find Elgg and project paths.
$config
Advanced site settings, debugging section.
elgg_deprecated_notice(string $msg, string $dep_version)
Log a notice about deprecated use of a function, view, etc.
_elgg_services()
Get the global service provider.
if(parse_url(elgg_get_site_url(), PHP_URL_PATH) !=='/') if(file_exists(elgg_get_root_path() . 'robots.txt'))
Set robots.txt.
$CONFIG wwwroot
The installation root URL of the site.
if(!isset($CONFIG)) $CONFIG dataroot
The full file path for Elgg data storage.