/** * Inserts or updates a user model in the database. * * @param UserModel $user * * @return int The userId of the updated or inserted user. */ public function save(UserModel $user) { $fields = array(); $name = $user->getName(); $password = $user->getPassword(); $email = $user->getEmail(); $dateConfirmed = $user->getDateConfirmed(); $dateLastActivity = $user->getDateLastActivity(); $dateCreated = $user->getDateCreated(); $confirmed = $user->getConfirmed(); $confirmedCode = $user->getConfirmedCode(); if (!empty($name)) { $fields['name'] = $user->getName(); } if (!empty($password)) { $fields['password'] = $user->getPassword(); } if (!empty($email)) { $fields['email'] = $user->getEmail(); } if (!empty($dateCreated)) { $fields['date_created'] = $user->getDateCreated()->toDb(); } if (!empty($dateConfirmed)) { $fields['date_confirmed'] = $user->getDateConfirmed()->toDb(); } if (!empty($dateLastActivity)) { $fields['date_last_activity'] = $user->getDateLastActivity()->toDb(); } if ($confirmed !== null) { $fields['confirmed'] = $confirmed; } if ($confirmedCode !== null) { $fields['confirmed_code'] = $confirmedCode; } $fields['first_name'] = $user->getFirstName(); $fields['last_name'] = $user->getLastName(); $fields['homepage'] = $user->getHomepage(); $fields['city'] = $user->getCity(); $fields['birthday'] = $user->getBirthday(); $fields['avatar'] = $user->getAvatar(); $fields['signature'] = $user->getSignature(); $fields['opt_mail'] = $user->getOptMail(); $userId = (int) $this->db()->select('id')->from('users')->where(array('id' => $user->getId()))->execute()->fetchCell(); if ($userId) { /* * User does exist already, update. */ $this->db()->update('users')->values($fields)->where(array('id' => $userId))->execute(); } else { /* * User does not exist yet, insert. */ $userId = $this->db()->insert('users')->values($fields)->execute(); } if ($user->getGroups()) { $this->db()->delete('users_groups')->where(array('user_id' => $userId))->execute(); foreach ($user->getGroups() as $group) { $this->db()->insert('users_groups')->values(array('user_id' => $userId, 'group_id' => $group->getId()))->execute(); } } return $userId; }