7 use Elgg\Traits\Loggable;
 
  153     private $initial_values;
 
  158     private $cookies_configured = 
false;
 
  163     private $cookies = [];
 
  170     protected $locked_values = [
 
  184     protected $deprecated = [
 
  192     protected $config_defaults = [
 
  193         'admin_validation_notification' => 
false,
 
  194         'allow_phpinfo' => 
false,
 
  195         'authentication_failures_lifetime' => 600,
 
  196         'authentication_failures_limit' => 5,
 
  197         'auto_disable_plugins' => 
true,
 
  198         'batch_run_time_in_secs' => 4,
 
  199         'boot_cache_ttl' => 3600,
 
  200         'can_change_username' => 
false,
 
  201         'class_loader_verify_file_existence' => 
true,
 
  202         'comment_box_collapses' => 
true,
 
  203         'comments_group_only' => 
true,
 
  204         'comments_latest_first' => 
true,
 
  205         'comments_max_depth' => 0,
 
  206         'comments_per_page' => 25,
 
  207         'db_enable_query_logging' => 
false,
 
  208         'db_query_cache_limit' => 50,
 
  209         'default_limit' => 10,
 
  210         'elgg_maintenance_mode' => 
false,
 
  211         'email_html_part' => 
true,
 
  212         'email_html_part_images' => 
'no',
 
  213         'email_subject_limit' => 998,
 
  214         'enable_delayed_email' => 
true,
 
  215         'friendly_time_number_of_days' => 30,
 
  217             'topbar' => [
'w' => 16, 
'h' => 16, 
'square' => 
true, 
'upscale' => 
true],
 
  218             'tiny' => [
'w' => 25, 
'h' => 25, 
'square' => 
true, 
'upscale' => 
true],
 
  219             'small' => [
'w' => 40, 
'h' => 40, 
'square' => 
true, 
'upscale' => 
true],
 
  220             'medium' => [
'w' => 100, 
'h' => 100, 
'square' => 
true, 
'upscale' => 
true],
 
  221             'large' => [
'w' => 200, 
'h' => 200, 
'square' => 
true, 
'upscale' => 
true],
 
  222             'master' => [
'w' => 10240, 
'h' => 10240, 
'square' => 
false, 
'upscale' => 
false, 
'crop' => 
false],
 
  225         'language_detect_from_browser' => 
true,
 
  227         'mentions_display_format' => 
'display_name',
 
  228         'message_delay' => 6,
 
  229         'min_password_length' => 6,
 
  231         'notifications_max_runtime' => 45,
 
  232         'notifications_queue_delay' => 0,
 
  233         'pagination_behaviour' => 
'ajax-replace',
 
  234         'require_admin_validation' => 
false,
 
  235         'security_email_require_confirmation' => 
true,
 
  236         'security_email_require_password' => 
true,
 
  237         'security_notify_admins' => 
true,
 
  238         'security_notify_user_password' => 
true,
 
  239         'security_protect_upgrade' => 
true,
 
  240         'session_bound_entity_icons' => 
false,
 
  241         'simplecache_enabled' => 
false,
 
  242         'subresource_integrity_enabled' => 
false,
 
  243         'system_cache_enabled' => 
false,
 
  244         'testing_mode' => 
false,
 
  245         'trash_enabled' => 
false,
 
  246         'trash_retention' => 30,
 
  247         'user_joined_river' => 
false,
 
  248         'webp_enabled' => 
true,
 
  249         'who_can_change_language' => 
'everyone',
 
  257     protected $path_properties = [
 
  269     const ENTITY_TYPES = [
'group', 
'object', 
'site', 
'user'];
 
  276     const SENSITIVE_PROPERTIES = [
 
  292         $this->saveInitialValues($values);
 
  294         $this->values = array_merge($this->config_defaults, $values);
 
  297         $this->getCookieConfig();
 
  310             unset($values[
$name]);
 
  313         $this->initial_values = $values;
 
  323     public static function factory(
string $settings_path = 
''): static {
 
  324         $settings_path = self::resolvePath($settings_path);
 
  326         return self::fromFile($settings_path);
 
  342         if (!is_readable(
$path)) {
 
  348         if (isset($GLOBALS[
'CONFIG'])) {
 
  350             $global = $GLOBALS[
'CONFIG'];
 
  351             unset($GLOBALS[
'CONFIG']);
 
  356         Includer::requireFile(
$path);
 
  358         if (empty($GLOBALS[
'CONFIG']->
dataroot)) {
 
  359             throw new ConfigurationException(__METHOD__ . 
': Reading configs failed: The Elgg settings file is missing $CONFIG->dataroot.');
 
  362         if (empty($GLOBALS[
'CONFIG']->
wwwroot)) {
 
  363             throw new ConfigurationException(__METHOD__ . 
': Reading configs failed: The Elgg settings file is missing $CONFIG->wwwroot.');
 
  366         $config = 
new self(get_object_vars($GLOBALS[
'CONFIG']));
 
  368         if ($global !== 
null) {
 
  370             $GLOBALS[
'CONFIG'] = $global;
 
  372             unset($GLOBALS[
'CONFIG']);
 
  375         if (
$config->{
'X-Sendfile-Type'}) {
 
  377             unset(
$config->{
'X-Sendfile-Type'});
 
  380         if (
$config->{
'X-Accel-Mapping'}) {
 
  382             unset(
$config->{
'X-Accel-Mapping'});
 
  395     public static function resolvePath(
string $settings_path = 
''): string {
 
  396         if (empty($settings_path)) {
 
  397             $settings_path = Paths::settingsFile(Paths::SETTINGS_PHP);
 
  400         return Paths::sanitize($settings_path, 
false);
 
  418         if ($this->cookies_configured) {
 
  419             return $this->cookies;
 
  423         if ($this->hasInitialValue(
'cookies')) {
 
  424             $cookies = $this->getInitialValue(
'cookies');
 
  428         if (!isset($cookies[
'session'])) {
 
  429             $cookies[
'session'] = [];
 
  432         $session_defaults = session_get_cookie_params();
 
  433         $session_defaults[
'name'] = 
'Elgg';
 
  434         $cookies[
'session'] = array_merge($session_defaults, $cookies[
'session']);
 
  437         if (!isset($cookies[
'remember_me'])) {
 
  438             $cookies[
'remember_me'] = [];
 
  441         $session_defaults[
'name'] = 
'elggperm';
 
  442         $session_defaults[
'expire'] = strtotime(
'+30 days');
 
  443         $cookies[
'remember_me'] = array_merge($session_defaults, $cookies[
'remember_me']);
 
  445         $this->cookies = $cookies;
 
  446         $this->cookies_configured = 
true;
 
  462         if (array_key_exists(
$name, $this->deprecated)) {
 
  466         if (!isset($this->values[
$name])) {
 
  471         if (in_array(
$name, $this->path_properties)) {
 
  496         return $this->initial_values[
$name] ?? 
null;
 
  518         $testing = $this->values[
'testing_mode'] ?? false;
 
  519         return !$testing && in_array(
$name, $this->locked_values) && $this->hasValue(
$name);
 
  532         if ($this->wasWarnedLocked(
$name)) {
 
  536         if (in_array(
$name, $this->path_properties)) {
 
  560         if ($this->wasWarnedLocked(
$name)) {
 
  564         unset($this->values[
$name]);
 
  576         if ($this->wasWarnedLocked(
$name)) {
 
  580         if (strlen(
$name) > 255) {
 
  581             $this->getLogger()->error(
'The name length for configuration variables cannot be greater than 255');
 
  587             return $this->
remove(
$name);
 
  604     public function remove(
string $name): 
bool {
 
  605         if ($this->wasWarnedLocked(
$name)) {
 
  611         unset($this->values[
$name]);
 
  627         $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.