
- •Хранилище фотоальбомов
- •Введение
- •Постановка задачи
- •Описание инструментов субд
- •Язык программирования
- •Структура базы данных Диаграмма
- •Описание таблиц
- •Структура web-приложения Определение основных страниц
- •Определение реализации страниц
- •Контроллеры
- •Просмотр списка пользователей
- •Просмотр профиля пользователя
- •Вход пользователя в систему
- •Выход пользователя из системы
- •Регистрация нового пользователя
- •Редактирование профиля
- •Удаление профиля
- •Восстановление пароля
- •Категории
- •Просмотр категорий пользователя
- •Добавление новой категории
- •Редактирование категории
- •Удаление категории
- •Альбомы
- •Вывод списка альбомов
- •Отображение списка альбомов в категории
- •Отображение альбомов конкретного пользователя
- •Добавление альбома
- •Изменение альбома
- •Удаление альбома
- •Фотографии
- •Вывод списка фотографий
- •Вывод списка фотографий в альбоме
- •Вывод списка фотографий пользователя
- •Просмотр фотографии
- •Добавление фотографии
- •Редактирование фотографии
- •Удаление фотографии
- •Поиск фотографии
- •Комментарии
- •Добавление комментариев
- •Просмотр комментариев
- •Оценивание фотографии
- •Просмотр средней оценки
- •Просмотр друзей пользователя
- •Добавление в друзья
- •Запросы в мои друзья
- •Принятие заявки
- •Отклонение заявки
- •Просмотр отправленных мной заявок
- •Удаление пользователя из списка друзей
- •Сообщения
- •Отправка сообщения
- •Просмотр списка диалогов
- •Просмотр диалога
- •Заключение
Добавление фотографии
Добавление новых фотографий осуществляет метод add контроллера photos. Он загружает форму загрузки фотографии и обрабатывает пришедший запрос. Вызвать метод можно из нескольких мест, различия лишь в том, будет ли установлен альбом, куда загружать фотографию или пользователь сам должен будет его выбрать из списка.
Частичный листинг метода add:
/**
* Добавление фотографии
*/
public function add( $album_id = null )
{
$albums = $this->albums_model->get_albums(
array("user_id" => $this->user['id'])
);
// Проверяем существование альбомов
if ( ! $albums )
{
$this->setError(
"Невозможно добавить фотографию. " .
"Для начала создайте хотя бы один альбом",
"albums/add"
);
}
...
// Принимаем данные формы
if ( $this->input->post("submit") )
{
// Определяем правила проверки
$config = array();
// Устанавливаем правила
// Проверяем данные формы
if ( $this->form_validation->run() == true )
{
// Пытаемся загрузить файл
// Создаем папки, если их еще нет
// Определяем критерии фотографии
$config = array(
"upload_path" => $dir
"encrypt_name" => "true"
...
);
// Загружаем
if ( $this->upload->do_upload() )
{
// Проверка на целостность
$album = $this->albums_model->get_album($photo['album_id']);
if ( ! $album || ($this->user['id'] != $album['user_id']) )
{
$this->setError(
"Загрузка фотографий в чужой альбом недопустима",
"photos/add"
);
}
// Формируем массив
$photo = array();
...
// Заносим информацию в БД
if ( $id = $this->db_model->insert(PHOTOS_TABLE, $photo) )
...
}
else
{
// Выводим ошибку загрузки
}
}
}
// Загружаем отображение
$this->load->view('view', $this->data);
}
Внешний вид формы загрузки:
Рисунок 33
Ошибка при отсутствии категорий:
Ошибка при отсутствии альбомов:
Пример ошибки загрузки файла:
Редактирование фотографии
Редактирование фотографии производится аналогично добавлению, за исключением того, что новые данные не заносятся в базу, а обновляются. Редактирование фотографий осуществляет метод edit контроллера photos.
Удаление фотографии
Удаление фотографии происходит в два этапа:
Удаление физического файла с диска
Удаление записи о файле из БД
Удаление фотографии осуществляет метод delete контроллера photos. Он получает в качестве параметра идентификатор фотографии, проверяет ее авторство, и, если у пользователя достаточно прав для удаления, удаляет фотографию.
Частичный листинг метода delete:
/**
* Удаление фотографии
*/
public function delete( $photo_id )
{
// Проверяем существование фотографии
$photo = $this->photos_model->get_photo( $photo_id );
if ( ! $photo )
$this->setError(
"Фотография с номером $photo_id не найдена",
"photos/user/{$this->user['id']}"
);
// Проверка авторства фотографии
if ( $this->user['id'] != $photo['user_id'] )
$this->setError(
"Вы не можете удалять чужие фотографии",
"photos/user/{$this->user['id']}"
);
// Удаляем запись о фтографии из БД
if ( $this->db_model->delete(PHOTOS_TABLE, array('id' => $photo_id)) )
{
// Удаляем файл с диска
$date = date_parse($photo['date']);
$photo_url = "./" .
PHOTOS_DIR .
$date['year'] . "/" .
$date['month'] . "/" .
$date['day'] . "/" .
$photo['file_name'];
@unlink($photo_url);
$this->setMessage("Фотография <b>{$photo['title']}</b> удалена");
}
else
$this->setError("Фотография <b>{$photo['title']}</b> удалена");
redirect("photos/album/{$photo['album_id']}");
}
При удачном удалении фотографии система выдает сообщение: