Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПвБД_Курсовик_ОрищенкоТС.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
895.63 Кб
Скачать

Добавление фотографии

Добавление новых фотографий осуществляет метод 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.

Удаление фотографии

Удаление фотографии происходит в два этапа:

  1. Удаление физического файла с диска

  2. Удаление записи о файле из БД

Удаление фотографии осуществляет метод 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']}");

}

При удачном удалении фотографии система выдает сообщение: