You are here

public function SimpleLdapUser::__set in Simple LDAP 7

Same name and namespace in other branches
  1. 7.2 simple_ldap_user/SimpleLdapUser.class.php \SimpleLdapUser::__set()

Magic __set() function.

Parameters

string $name: The name of the attribute to set.

mixed $value: The value to assigned to the given attribute.

File

simple_ldap_user/SimpleLdapUser.class.php, line 128
Class defining a simple LDAP user.

Class

SimpleLdapUser
@file Class defining a simple LDAP user.

Code

public function __set($name, $value) {
  $attribute_pass = simple_ldap_user_variable_get('simple_ldap_user_attribute_pass');
  switch ($name) {

    // Read-only values.
    case 'attributes':
    case 'exists':
      break;
    case 'dn':
      if ($this->dn != $value) {
        try {

          // Validate the DN format before trying to use it.
          SimpleLdap::ldap_explode_dn($value);

          // Save the old DN, so a move operation can be done during save().
          $this->move = $this->dn;
          $this->dn = $value;
          $this->dirty = TRUE;
        } catch (SimpleLdapException $e) {
        }
      }
      break;

    // Look up the raw password from the internal reverse hash map. This
    // intentionally falls through to default:.
    case $attribute_pass:
      if (isset(self::$hash[$value])) {
        $hash = simple_ldap_user_variable_get('simple_ldap_user_password_hash');
        $value = SimpleLdap::hash(self::$hash[$value], $hash);
      }
      else {

        // A plain text copy of the password is not available. Do not
        // overwrite the existing value.
        return;
      }
    default:

      // Make sure $value is an array.
      if (!is_array($value)) {
        $value = array(
          $value,
        );
      }

      // Make sure $this->attributes[$name] is an array.
      if (!isset($this->attributes[$name])) {
        $this->attributes[$name] = array();
      }

      // Compare the current value with the given value.
      $diff1 = @array_diff($this->attributes[$name], $value);
      $diff2 = @array_diff($value, $this->attributes[$name]);

      // If there are any differences, update the current value.
      if (!empty($diff1) || !empty($diff2)) {
        $this->attributes[$name] = $value;
        $this->dirty = TRUE;
      }
  }
}