/** * @param UserDataField $field * @param User $user * @param mixed $value * @return UserData * @throws \InvalidArgumentException */ public static function create(UserDataField $field, User $user, $value) { // check if field is already set for user if ($user->getData($field->getName()) !== null) { throw new \InvalidArgumentException('User\'s data field ' . $field->getName() . ' already set.'); } $value = serialize($value); Aelix::db()->prepare('INSERT INTO `user_data` SET `userID` = :userID, `fieldID` = :fieldID, `value` = :value')->execute([':userID' => $user->getID(), ':fieldID' => $field->getID(), ':value' => $value]); $dataID = Aelix::db()->getPDO()->lastInsertId('user_data'); return new UserData($user, $field, $dataID, $value); }
/** * @param string $fieldName * @param mixed $value */ public function setData($fieldName, $value) { if (isset($this->data[$fieldName])) { $this->data[$fieldName]->setValue($value); return; } // check if we need a new field $field = UserDataField::createField($fieldName); $this->data[$field->getName()] = UserData::create($field, $this, $value); }