/** * @param User $user * @return bool */ public function save(User $user) { $dataArr = $user->getDataArr(); $paramsArr = []; if (@$user->id > 0) { //updatujeme existující uživatele $sql = ''; foreach ($dataArr as $key => $value) { if ($key == 'id') { continue; } $sql .= ($sql != '' ? ',' : '') . ' ' . $key . '=:' . $key; $paramsArr[':' . $key] = $value; } $sql = 'UPDATE users SET ' . $sql . ' WHERE id=:id LIMIT 1;'; $paramsArr[':id'] = $user->id; $query = $this->pdo->prepare($sql); $result = $query->execute($paramsArr); } else { //insert nového uživatele $sql = 'INSERT INTO users ('; $sql .= implode(',', array_keys($dataArr)); $sql .= ')VALUES('; foreach ($dataArr as $key => $value) { $paramsArr[':' . $key] = $value; } $sql .= implode(',', array_keys($paramsArr)); $sql .= ')'; $query = $this->pdo->prepare($sql); $result = $query->execute($paramsArr); $user->id = $this->pdo->lastInsertId('users'); } return $result; }
/** * Formulář pro registraci uživatele * @return Form */ public function createComponentRegistrationForm() { $form = new Form(); $form->addText('name', 'Jméno a příjmení:')->setRequired('Je nutné zadat jméno.'); $form->addText('email', 'E-mail:')->setRequired('Je nutné zadat e-mail')->addRule(Form::EMAIL, 'Je nutné zadat platnou e-mailovou adresu.')->addRule(function (TextInput $input) { return !$this->usersModel->findByEmail($input->value); }, 'Uživatel s daným e-mailem již existuje.'); $password = $form->addPassword('password', 'Heslo:')->setRequired('Je nutné zadat heslo.')->addRule(Form::MIN_LENGTH, 'Heslo musí mít minumálně 4 znaky.', 4); $form->addPassword('password2', 'Potvrzení hesla:')->addRule(Form::EQUAL, 'Zadaná hesla se neshodují.', $password); $form->addSubmit('ok', 'registrovat se')->onClick[] = function (SubmitButton $button) { //funkce pro vytvoření nového uživatelského účtu a automatick přihlášení uživatele $data = $button->form->getValues(true); $user = new User(); $user->active = true; $user->name = $data['name']; $user->email = $data['email']; $user->password = User::encodePassword($data['password']); $user->role = User::DEFAULT_REGISTERED_ROLE; if ($this->usersModel->save($user)) { $this->flashMessage('Registrace byla úspěšně dokončena.'); $this->usersModel->sendRegistrationMail($user); } $this->user->login($data['email'], $data['password']); $this->redirect('Homepage:default'); }; return $form; }