getRules() as $property => $rule) { $data[$property] = $this->map($rule, $rawData); } return new LdapUser($id, $data); } public function map($propertyConfig, $rawData) { $data = array(); switch ($propertyConfig['type']) { case 'value' : $data = $propertyConfig['value']; break; case 'attributeValue' : if (isset($rawData[$propertyConfig['attribute']])) { $value = $rawData[$propertyConfig['attribute']]; $data = is_array($value) ? $value : array($value); } break; case 'callback' : if (isset($rawData[$propertyConfig['attribute']])) { $callback = $propertyConfig['callable']; if (is_callable($callback)) { $data = call_user_func($callback, $rawData[$propertyConfig['attribute']]); } } break; default : throw new \common_exception_InconsistentData('Unknown mapping: '.$propertyConfig['type']); } return $data; } public function getRules() { $rules = self::getDefaultConfig(); foreach ($this->getOptions() as $key => $value) { $rules[$key] = $value; } return $rules; } static public function getDefaultConfig() { return array( PROPERTY_USER_ROLES => self::rawValue(INSTANCE_ROLE_DELIVERY) ,PROPERTY_USER_UILG => self::rawValue(DEFAULT_LANG) ,PROPERTY_USER_DEFLG => self::rawValue(DEFAULT_LANG) ,PROPERTY_USER_TIMEZONE => self::rawValue(TIME_ZONE) ,PROPERTY_USER_MAIL => self::attributeValue('mail') ,PROPERTY_USER_FIRSTNAME => self::attributeValue('givenName') ,PROPERTY_USER_LASTNAME => self::attributeValue('sn') ,RDFS_LABEL => self::attributeValue('displayName') ); } static protected function rawValue($value) { return array( 'type' => 'value', 'value' => array($value) ); } static protected function attributeValue($attributeName) { return array( 'type' => 'attributeValue', 'attribute' => $attributeName ); } static protected function callback($callable, $attributeName) { return array( 'type' => 'callback', 'callable' => $callable, 'attribute' => $attributeName ); } }