
- •Хранилище фотоальбомов
- •Введение
- •Постановка задачи
- •Описание инструментов субд
- •Язык программирования
- •Структура базы данных Диаграмма
- •Описание таблиц
- •Структура web-приложения Определение основных страниц
- •Определение реализации страниц
- •Контроллеры
- •Просмотр списка пользователей
- •Просмотр профиля пользователя
- •Вход пользователя в систему
- •Выход пользователя из системы
- •Регистрация нового пользователя
- •Редактирование профиля
- •Удаление профиля
- •Восстановление пароля
- •Категории
- •Просмотр категорий пользователя
- •Добавление новой категории
- •Редактирование категории
- •Удаление категории
- •Альбомы
- •Вывод списка альбомов
- •Отображение списка альбомов в категории
- •Отображение альбомов конкретного пользователя
- •Добавление альбома
- •Изменение альбома
- •Удаление альбома
- •Фотографии
- •Вывод списка фотографий
- •Вывод списка фотографий в альбоме
- •Вывод списка фотографий пользователя
- •Просмотр фотографии
- •Добавление фотографии
- •Редактирование фотографии
- •Удаление фотографии
- •Поиск фотографии
- •Комментарии
- •Добавление комментариев
- •Просмотр комментариев
- •Оценивание фотографии
- •Просмотр средней оценки
- •Просмотр друзей пользователя
- •Добавление в друзья
- •Запросы в мои друзья
- •Принятие заявки
- •Отклонение заявки
- •Просмотр отправленных мной заявок
- •Удаление пользователя из списка друзей
- •Сообщения
- •Отправка сообщения
- •Просмотр списка диалогов
- •Просмотр диалога
- •Заключение
Выход пользователя из системы
Выход пользователя осуществляется вызовом метода контроллера users – logout, который уничтожает данные сессии для текущего пользователя. Данный метод не загружает ни один вид, но переадресовывает пользователя на главную страницу. Код метода logout:
/**
* Выход пользователя из системы
*/
public function logout()
{
// Вошел ли пользователь?
if ( $this->user )
{
$this->session->sess_destroy();
}
redirect("/");
}
Регистрация нового пользователя
Регистрация пользователя обеспечивается методом 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
Данный механизм восстановления забытого пароля является более чем примитивным, но для учебных целей это вполне достаточно.