diff --git a/core/config.class.inc.php b/core/config.class.inc.php index 5c270574f..9cb81f20b 100644 --- a/core/config.class.inc.php +++ b/core/config.class.inc.php @@ -659,6 +659,14 @@ class Config 'source_of_value' => '', 'show_in_conf_sample' => true, ), + 'demo_mode' => array( + 'type' => 'bool', + 'description' => 'Set to true to prevent users from changing passwords/languages', + 'default' => false, + 'value' => '', + 'source_of_value' => '', + 'show_in_conf_sample' => false, + ), ); public function IsProperty($sPropCode) diff --git a/datamodels/2.x/authent-local/model.authent-local.php b/datamodels/2.x/authent-local/model.authent-local.php index dc74ec4d0..b271a4314 100755 --- a/datamodels/2.x/authent-local/model.authent-local.php +++ b/datamodels/2.x/authent-local/model.authent-local.php @@ -74,7 +74,10 @@ class UserLocal extends UserInternal public function CanChangePassword() { - // For now everyone can change their password.. + if (MetaModel::GetConfig()->Get('demo_mode')) + { + return false; + } return true; } @@ -104,5 +107,28 @@ class UserLocal extends UserInternal $oChange->DBInsert(); $this->DBUpdateTracked($oChange, true); } + + /** + * Returns the set of flags (OPT_ATT_HIDDEN, OPT_ATT_READONLY, OPT_ATT_MANDATORY...) + * for the given attribute in the current state of the object + * @param $sAttCode string $sAttCode The code of the attribute + * @param $aReasons array To store the reasons why the attribute is read-only (info about the synchro replicas) + * @param $sTargetState string The target state in which to evalutate the flags, if empty the current state will be used + * @return integer Flags: the binary combination of the flags applicable to this attribute + */ + public function GetAttributeFlags($sAttCode, &$aReasons = array(), $sTargetState = '') + { + $iFlags = parent::GetAttributeFlags($sAttCode, $aReasons, $sTargetState); + if (MetaModel::GetConfig()->Get('demo_mode')) + { + if (strpos('contactid,login,language,password,profile_list,allowed_org_list', $sAttCode) !== false) + { + // contactid and allowed_org_list are disabled to make sure the portal remains accessible + $aReasons[] = 'Sorry, this attribute is read-only in the demonstration mode!'; + $iFlags |= OPT_ATT_READONLY; + } + } + return $iFlags; + } } diff --git a/pages/preferences.php b/pages/preferences.php index 946c61b24..a643ae791 100644 --- a/pages/preferences.php +++ b/pages/preferences.php @@ -52,6 +52,14 @@ function DisplayPreferences($oP) $aSortedlang = array(); foreach($aLanguages as $sCode => $aLang) { + if (MetaModel::GetConfig()->Get('demo_mode')) + { + if ($sCode != Dict::GetUserLanguage()) + { + // Demo mode: only the current user language is listed in the available choices + continue; + } + } $aSortedlang[$aLang['description']] = $sCode; } ksort($aSortedlang);