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

Просмотр комментариев

Просмотр комментариев осуществляется на странице просмотра фотографии. Комментарии разбиты на страницы по значению, определенному в свойстве контроллера photos $_comments_per_page.

Внешний вид панели комментариев:

Рисунок 37

Оценки

Каждая фотография может быть оценена пользователем по 5-тибальной шкале и притом единожды. За управление оценками отвечает контроллер marks и модель marks_model. В контроллере определены следующие действия:

Действие

Метод

Оценить фотографию

evaluate

Следовательно, структура контроллера marks будет следующей:

/**

* Контроллер оценок

*/

class Marks extends MY_Controller

{

public function __construct()

{

parent::__construct();

}

/**

* Оценивание фотографии

*/

public function evaluate( $photo_id ) {}

}

Также модель marks_model определяет следующие методы по выборке данных об оценках:

/**

* Получение средней оценки фотографии

*/

public function get_avg_mark( $photo_id )

{

$this->db->where("photo_id", $photo_id);

$this->db->select_avg('mark');

$res = $this->db->get(MARKS_TABLE);

$mark = $res->result_array();

return $mark[0]['mark'] ? $mark[0]['mark'] : 0;

}

/**

* Получение оценки пользователя

*/

public function get_mark( $photo_id, $user_id )

{

$where = array(

'user_id' => $user_id,

'photo_id' => $photo_id

);

$this->db->where($where);

$res = $this->db->get(MARKS_TABLE);

$mark = $res->result_array();

return $mark ? $mark[0] : 0;

}

Оценивание фотографии

Форма оценивания располагается на странице просмотра фотографии. Ее внешний вид:

Рисунок 38

После отправки формы система оповещает о результате:

Просмотр средней оценки

После оценивания хотя бы одним человеком доступна статистика в виде прогрессбара:

Рисунок 39

Пользователь, поставивший оценку, теперь будет видеть ее на месте формы.

Друзья

Для связывания пользователей служит связь «друг». Каждый пользователь может добавить к себе в список друзей интересных ему людей. Список друзей контролируется контроллером friends и моделью friends_model.

Для того, чтобы пользователю добавиться в друзья необходимо для начала отправить заявку, которую другой пользователь должен подтвердить.

Контроллер предоставляет следующие интерфейсы для управления друзьями:

Действие

Метод

Просмотр друзей пользователя

user

Запросы в мои друзья

requests

Отправленные мной заявки

my_requests

Добавление в друзья

add

Удаление из друзей

delete

Принятие заявки

accept

Отвержение заявки

decline

Отменна заявки

abort

Тогда, структура контроллера будет иметь вид:

/**

* Контроллер друзей

*/

class Friends extends MY_Controller

{

public function __construct()

{

parent::__construct();

}

/**

* Вывод списка друзей

*/

public function index() {}

/**

* Просмотр друзей пользователя

*/

public function user( $id = null ) {}

/**

* Запросы в друзья

*/

public function requests() {}

/**

* Отправленные мной заявки

*/

public function my_requests() {}

/**

* Добавление в друзья

*/

public function add( $user_id ) {}

/**

* Удаление из друзей

*/

public function delete( $user_id ) {}

/**

* Принятие заявки

*/

public function accept( $request_id ) {}

/**

* Отвержение заявки

*/

public function decline( $request_id ) {}

/**

* Отмена заявки

*/

public function abort( $request_id ) {}

}

Модель friends_model имеет следующие методы по выборке данных о друзьях:

/**

* Получение информации о связи

*/

public function get_friend($where)

{

$res = $this->db->get_where(FRIENDS_TABLE, $where)->result_array();

return $res ? $res[0] : array();

}

/**

* Получение списка друзей пользователя

*/

public function get_friends( $id = null )

{

$friends = FRIENDS_TABLE;

$users = USERS_TABLE;

$q1 = $this->db

->select(" F.friend2 AS friend,

F.confirmed,

U.name")

->from("$friends F")

->join("$users U", "F.friend2 = U.id")

->where("F.friend1 = $id")

->where("F.confirmed = 1")

->get()->result_array();

$q2 = $this->db

->select(" F.friend1 AS friend,

F.confirmed,

U.name")

->from("$friends F")

->join("$users U", "F.friend1 = U.id")

->where("F.friend2 = $id")

->where("F.confirmed = 1")

->get()->result_array();

$res = array_merge($q1, $q2);

$friends = array();

// Преобразовываем результат

foreach ( $res as $value )

{

$tmp = array();

foreach ( $value as $k => $v )

{

$tmp[$k] = $v;

}

$friends[$value['friend']] = $tmp;

}

return $friends;

}

/**

* Проверка дружбы

*/

public function is_friend( $user_id, $friend_id )

{

$friends = FRIENDS_TABLE;

$res = $this->db

->select("id")

->from("$friends")

->where(

"(friend1 = $user_id AND

friend2 = $friend_id AND

confirmed = 1)"

)

->or_where(

"(friend1 = $friend_id AND

friend2 = $user_id AND

confirmed = 1)"

)->get()->result_array();

return $res ? true : false;

}

/**

* Количество друзей

*/

public function get_friends_count( $user_id )

{

$friends = FRIENDS_TABLE;

$res = $this->db

->select("COUNT(id) AS friends_count")

->from("$friends")

->where(

"( friend1 = $user_id OR friend2 = $user_id ) AND confirmed = 1")

->get()->result_array();

return $res ? $res[0]['friends_count'] : 0;

}

/**

* Заявки в друзья к пользователю

*/

public function get_requests( $user_id )

{

$friends = FRIENDS_TABLE;

$users = USERS_TABLE;

$res = $this->db

->select(" F.id AS request_id,

F.friend1 AS user_id,

U.name AS user_name,

F.date")

->from("$friends F")

->join("$users U", "F.friend1 = U.id")

->where(array(

"confirmed" => "0",

"friend2" => $user_id

))

->get()->result_array();

return $res;

}

/**

* Отправленные пользователем заявки

*/

public function get_my_requests( $user_id )

{

$friends = FRIENDS_TABLE;

$users = USERS_TABLE;

$res = $this->db

->select(" F.id AS request_id,

F.friend2 as user_id,

U.nam as user_name,

F.date")

->from("$friends F")

->join("$users U", "F.friend2 = U.id")

->where(array(

"confirmed" => "0",

"friend1" => $user_id

))

->get()->result_array();

return $res;

}

Эти методы вызываются не только из контроллера friends, но и из других контроллеров.