Редактирование фотографии

Редактирование фотографии производится аналогично добавлению, за исключением того, что новые данные не заносятся в базу, а обновляются. Редактирование фотографий осуществляет метод 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']}");

}

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

Редактирование фотографии - student2.ru

Поиск фотографии

На сайте определен поиск фотографии, как по названию самой фотографии, так и по названию альбома. Поиск осуществляется методом search модели photos_model, а загрузка результатов производится методом search контроллераphotos, который имеет следующий листинг:

/**

* Поиск фотографии

*/

public function search()

{

$photos = array();

$q = "";

// Пинимаем строку поиска

if ( $this->input->post("submit") )

{

$q = $this->input->post("q");

if ( ! $q )

$this->setMessage("Введите строку поиска");

else

$photos = $this->photos_model->search($q);

}

// Загружаем вид

$this->load->view('view', $this->data);

}

Листинг метода search модели photos_model:

/**

* Поиск фотографии

*/

public function search( $q = "" )

{

$photos = PHOTOS_TABLE;

$albums = ALBUMS_TABLE;

$users = USERS_TABLE;

return $this->db

->select(" P.*,

U.name AS user_name,

A.title AS album_title")

->from("$photos P")

->join("$users U", "P.user_id = U.id")

->join("$albums A", "P.album_id = A.id")

->like("P.title", $q)

->or_like("A.title", $q)

->order_by("P.id DESC")

->get()

->result_array();

}

Внешний вид страницы поиска:

Редактирование фотографии - student2.ru

Рисунок 34

Комментарии

Комментарии - это мнения о фотографиях, оставляемые пользователями. В данном случае комментарии могут быть от зарегистрированных пользователей и от гостей. При оставлении комментария зарегистрированным пользователем, авторство комментария определяется полем user_id в таблице comments. Если пользователь не авторизован, то ему необходимо указать свой E-mail, чтобы добавить комментарий.

Комментарии управляются контроллером comments. Он предоставляет доступ к следующим действиям:

Действие Метод
Добавление комментария add

Контроллер имеет следующую структуру:

class Comments extends MY_Controller

{

public function __construct()

{

parent::__construct();

}

/**

* Добавление комментария

*/

public function add( $photo_id ) {}

}

Также модель comments_model содержит метод get_comments, который возвращает список комментариев в зависимости от условий:

/**

* Получение комментариев

*/

public function get_comments( $where = array(), $limit = 1000, $offset = 0 )

{

$users = USERS_TABLE;

$comments = COMMENTS_TABLE;

return $this->db

->select(" C.*,

U.name AS user_name")

->from("$comments C")

->join("$users U", "C.user_id = U.id", "LEFT")

->having($where)

->limit($limit, $offset)

->order_by("C.id DESC")

->get()

->result_array();

}

Наши рекомендации