/** * @inheritdoc */ public function canSetProperty($name, $checkVars = true, $checkBehaviors = true) { if (parent::canSetProperty($name, $checkVars, $checkBehaviors)) { return true; } try { return $this->hasAttribute($name); } catch (\Exception $e) { // `hasAttribute()` may fail on base/abstract classes in case automatic attribute list fetching used return false; } }
protected function mapServiceAttributes(BaseClient &$client, Model &$model) { $clientUserAttributes = $client->getUserAttributes(); // go through native client attributes foreach ($clientUserAttributes as $attribute => $value) { if ($model->canSetProperty($attribute) || in_array($attribute, $model->attributes())) { $model->{$attribute} = $value; } } // now find mapping for this service $map = SocialMappings::mapForSocialService($this->socialServiceId); foreach ($map as $modelAttribute => $socialAttribute) { $value = []; foreach ($socialAttribute as $attribute) { $attribute = trim($attribute); if (isset($clientUserAttributes[$attribute])) { $attributeValue = trim($clientUserAttributes[$attribute]); if (!empty($attributeValue)) { $value[] = $clientUserAttributes[$attribute]; } } } $value = implode(' ', $value); if (!empty($value)) { $model->{$modelAttribute} = $value; } } }