Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Ainet\Controllers;
- use Ainet\Models\User;
- class UserController
- {
- public function listUsers()
- {
- $users = User::all();
- $title = 'List users';
- render_view('users.list', compact('title', 'users'));
- }
- public function addUser()
- {
- $title = 'Add user';
- $user = new User();
- $errors = [];
- if (empty($_POST)) {
- return render_view('users.add', compact('title', 'user', 'errors'));
- }
- if (isset($_POST['cancel'])) {
- $this->redirectToHome();
- }
- $user = $this->createUserFromRequest();
- $errors = $this->validateAddForm($user);
- if (count($errors) > 0) {
- return render_view('users.add', compact('title', 'user', 'errors'));
- }
- User::add($user);
- $this->redirectToHome();
- }
- public function editUser()
- {
- $userId = input_value('user_id');
- if (is_null($userId) && isset($_GET['user_id'])) {
- $userId = $_GET['user_id'];
- }
- $user = User::find($userId);
- if (is_null($user)) {
- $this->redirectToHome();
- }
- $errors = [];
- $title = 'Edit user';
- if (empty($_POST)) {
- return render_view('users.edit', compact('title', 'user', 'errors'));
- }
- if (isset($_POST['cancel'])) {
- $this->redirectToHome();
- }
- $this->updateUserFromRequest($user);
- $errors = $this->validateEditableFields($user);
- if (count($errors) > 0) {
- return render_view('users.edit', compact('title', 'user', 'errors'));
- }
- User::save($user);
- $this->redirectToHome();
- }
- public function deleteUser()
- {
- $userId = input_value('user_id');
- if (is_null($userId)) {
- $this->redirectToHome();
- }
- User::delete($userId);
- $this->redirectToHome();
- }
- private function createUserFromRequest()
- {
- $user = new User();
- $user->fullname = input_value('fullname');
- $user->email = input_value('email');
- $user->password = input_value('password');
- $user->type = input_value('user_type');
- return $user;
- }
- private function updateUserFromRequest($user)
- {
- $user->fullname = input_value('fullname');
- $user->email = input_value('email');
- $user->type = input_value('user_type');
- }
- private function validateEditableFields($user)
- {
- $errors = [];
- if (!trim($user->fullname)) {
- $errors['fullname'] = 'Fullname is required';
- } elseif (!filter_var($user->fullname, FILTER_VALIDATE_REGEXP, ['options' => ['regexp' => '/^[a-zA-Z ]+$/']])) {
- $errors['fullname'] = 'Only letters and whitespaces are allowed';
- }
- if (!$user->email) {
- $errors['email'] = 'Email is required';
- } elseif (!filter_var($user->email, FILTER_VALIDATE_EMAIL)) {
- $errors['email'] = 'Invalid email address';
- }
- if (is_null($user->type)) {
- $errors['type'] = 'Type is required';
- } elseif ($user->type < 0 || $user->type > 2) {
- $errors['type'] = 'Invalid type';
- }
- return $errors;
- }
- private function validateAddForm($user)
- {
- $errors = $this->validateEditableFields($user);
- if (!$user->password) {
- $errors['password'] = 'Password is required';
- } elseif (strlen($user->password) < 8) {
- $errors['password'] = 'Password is too short. It must have at least 8 characters.';
- }
- if ($user->password && input_value('password_confirmation') != $user->password) {
- $errors['password_confirmation'] = 'Password confirmation must be equal to password';
- }
- return $errors;
- }
- private function redirectToHome()
- {
- header('Location: users.php');
- exit(0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement