Регистрация нового пользователя
Регистрация пользователя обеспечивается методом registration в контроллере users. Внешний вид формы регистрации:
Рисунок 9
Требование уникальности E-mail адреса проверяется в библиотеке From Validation, путем указания соответствующего ключа в конфигурации проверяемого поля:
// Определяем правила проверки
$config = array(
array(
'field' => 'email',
'label' => 'E-mail',
'rules' => '...|is_unique[users.email]'
)
...
Обработка ошибок осуществляется по такому же принципу, что и при процессе входа в систему. Внешний вид формы с ошибками ввода:
Рисунок 10
Вставка данных о новом пользователе происходит путем формирования массива, который в дальнейшем передается в метод insert модели db_model, в которой определены наиболее общие методы взаимодействия с БД:
if ( $id = $this->db_model->insert(USERS_TABLE, $user) )
{
$this->session->set_userdata("user_id", $id);
$this->setMessage("Вы успешно зарегистрированы", "users/user/$id");
}
else
{
$this->setError("Произошла ошибка при регистрации");
}
Редактирование профиля
Редактирование профиля контролируется методом edit контроллера users. Он загружает форму редактирования профиля:
Рисунок 11
Перед загрузкой формы, происходит проверка данных сессии, и, если пользователь не авторизован, то выводится стандартная ошибка, возникающая при неудачной проверке данных авторизации:
Рисунок 12
В остальном же, процесс изменения информации мало чем отличается от процесса регистрации, за исключением того, что вместо вставки новых данных происходит их обновление:
if ( $id = $this->db_model->update( USERS_TABLE,
$user,
array("id" => $this->user['id'])) )
{
$this->setMessage(
"Информация изменена",
"users/user/" . $this->user['id']
);
}
else
$this->setError("Информация не изменена");
Удаление профиля
Удаление профиля происходит в методе delete контроллера users. Физически это происходит установкой флага active таблицы users в 0. Ссылка на удаление расположена на странице редактирования профиля в боковой панели:
Рисунок 13
Код обработчика удаления:
/**
* Деактивация профиля
*/
public function delete()
{
$this->checkAuthorization();
if ( $this->db_model->update( USERS_TABLE,
array('active'=>'0'),
array('id' => $this->user['id'])) )
{
$this->setMessage("Профиль удален", "users/logout");
}
else
{
...
}
}
После удаления аккаунта, войти в него уже невозможно. При попытке входа система выдает следующую ошибку:
Рисунок 14
Восстановление пароля
Восстановление пароля обрабатывается методом restore, который принимает E-mail адрес пользователя, генерирует новый пароль и отсылает его на введенный E-mail.
Форма восстановления пароля имеет вид:
Рисунок 15
Если введенный E-mail имеется в базе данных, то новый пароль отправляется на него:
иначе система выдает ошибку
При удачном восстановлении на указанный ящик придет сообщение следующего содержания:
Уважаемый Павел, ваш новый пароль 1401096180
Данный механизм восстановления забытого пароля является более чем примитивным, но для учебных целей это вполне достаточно.
Категории
Категории управляются классом-контроллером categories, который имеет следующие функции, представленные методами:
Действие | Метод |
Просмотр категорий пользователя | user |
Добавление новой категории | add |
Редактирование категории | edit |
Удаление категории | delete |
Для манипулирования данными в БД используется модель categories_model, содержащая несколько специфических методов для категорий.
Структура контроллера categories
<?php
/**
* Контроллер категорий
*/
class Categories extends MY_Controller
{
/**
* Количество категорий на странице
*/
private $_categories_per_page = 2;
public function __construct()
{
parent::__construct();
}
/**
* Вывод списка категорий определенного пользователя
*/
public function user( $user_id, $page = 1 ) {}
/**
* Добавление новой категории
*/
public function add() {}
/**
* Редактирование категории
*/
public function edit( $category_id ) {}
/**
* Удаление категории
*/
public function delete( $category_id ) {}
}