Просмотр средней оценки
После оценивания хотя бы одним человеком доступна статистика в виде прогрессбара:
Рисунок 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, но и из других контроллеров.