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

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

Просмотр средней оценки - student2.ru

Рисунок 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, но и из других контроллеров.

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