1<?php 2 3namespace Kanboard\Core\User; 4 5use Kanboard\Core\Base; 6 7/** 8 * User Synchronization 9 * 10 * @package user 11 * @author Frederic Guillot 12 */ 13class UserSync extends Base 14{ 15 /** 16 * Synchronize user profile 17 * 18 * @access public 19 * @param UserProviderInterface $user 20 * @return array 21 */ 22 public function synchronize(UserProviderInterface $user) 23 { 24 $profile = $this->userModel->getByExternalId($user->getExternalIdColumn(), $user->getExternalId()); 25 $properties = UserProperty::getProperties($user); 26 27 if (! empty($profile)) { 28 $profile = $this->updateUser($profile, $properties); 29 } elseif ($user->isUserCreationAllowed()) { 30 $profile = $this->createUser($user, $properties); 31 } 32 33 return $profile; 34 } 35 36 /** 37 * Update user profile 38 * 39 * @access public 40 * @param array $profile 41 * @param array $properties 42 * @return array 43 */ 44 private function updateUser(array $profile, array $properties) 45 { 46 $values = UserProperty::filterProperties($profile, $properties); 47 48 if (! empty($values)) { 49 $values['id'] = $profile['id']; 50 $result = $this->userModel->update($values); 51 return $result ? array_merge($profile, $properties) : $profile; 52 } 53 54 return $profile; 55 } 56 57 /** 58 * Create user 59 * 60 * @access public 61 * @param UserProviderInterface $user 62 * @param array $properties 63 * @return array 64 */ 65 private function createUser(UserProviderInterface $user, array $properties) 66 { 67 $userId = $this->userModel->create($properties); 68 69 if ($userId === false) { 70 $this->logger->error('Unable to create user profile: '.$user->getExternalId()); 71 return array(); 72 } 73 74 return $this->userModel->getById($userId); 75 } 76} 77