Просмотр отправленных мной заявок
Пользователь, отправивший запрос, может следить за состоянием заявки. Метод контроллера friends my_requests выводит список активных заявок в друзья пользователям:
В это время у пользователя «Катя» в ее заявках появилось сообщение:
Если же текущий пользователь нажмет «Отменить запрос», то отработает метод abort контроллера friends и заявка будет отменена:
А у пользователя «Катя» заявка исчезнет из списка:
Удаление пользователя из списка друзей
Для удаления пользователя из списка друзей необходимо при просмотре списка вызвать метод delete, кликнув на ссылке:
Рисунок 43
Отработает метод delete, который удалит запись о дружбе:
if (
$this->db_model->delete(
FRIENDS_TABLE,
array(
'friend1' => $this->user['id'],
'friend2' => $user_id
)
) ||
$this->db_model->delete(
FRIENDS_TABLE,
array(
'friend2' => $this->user['id'],
'friend1' => $user_id
)
)
)
{
// Запись удалена
}
else
{
// Запись не удалена
}
И система оповестит:
Сообщения
Личные сообщения обеспечивают приватное общение между пользователями. Работу сообщений обеспечивает контроллер messages и модель messages_model.
Контроллер содержит реализацию следующих действий:
Действие | Метод |
Отправление сообщения | send |
Просмотр диалогов | index |
Просмотр переписки | dialog |
Сообщения группируются по диалогам. Диалог объединяет пользователей для общей переписки. Структура контроллера mail имеет вид:
/**
* Контроллер сообщений
*/
class Mail extends MY_Controller
{
/**
* Количество сообщений на странице
*/
private $_messages_per_page = 2;
/**
* Просмотр диалогов
*/
public function index() {}
/**
* Просмотр диалога
*/
public function dialog( $dialog_id, $page = 1 ) {}
/**
* Отправка сообщения
*/
public function send( $to_id ) {}
}
Модель mail_model содержит следующие методы для выборки сообщений из БД:
/**
* Получение списка диалогов пользователя
*/
public function get_dialogs( $user_id )
{
$dialogs = DIALOGS_TABLE;
$users = USERS_TABLE;
$messages = MESSAGES_TABLE;
$res1 = $this->db
->select(" D.id,
D.user_2 AS user_id,
U.name AS user_name,
COUNT(M.id) AS messages_count")
->from("$dialogs D")
->join("$messages M", "D.id = M.dialog_id", "LEFT")
->join("$users U", "D.user_2 = U.id")
->where("D.user_1", $user_id)
->group_by("D.id")
->order_by("messages_count DESC")
->get()
->result_array();
$res2 = $this->db
->select(" D.id,
D.user_1 AS user_id,
U.name AS user_name,
COUNT(M.id) AS messages_count")
->from("$dialogs D")
->join("$messages M", "D.id = M.dialog_id", "LEFT")
->join("$users U", "D.user_1 = U.id")
->where("D.user_2", $user_id)
->group_by("D.id")
->order_by("messages_count DESC")
->get()
->result_array();
return array_merge($res1, $res2);
}
/**
* Получение информации о диалоге
*/
public function get_dialog( $where )
{
$res = $this->db
->where($where)
->get(DIALOGS_TABLE)
->result_array();
return $res ? $res[0] : array();
}
/**
* Получение сообщений
*/
public function get_messages( $where, $limit = 999, $offset = 0 )
{
$messages = MESSAGES_TABLE;
$res = $this->db
->select(" M.*,
M.from_id,
M.to_id,
M.date,
M.text,
M.read")
->from("$messages M")
->where($where)
->limit($limit, $offset)
->order_by("date DESC")
->get()
->result_array();
return $res;
}
/**
* Получение количества непрочитанных сообщений
*/
public function get_unread_count( $where = array() )
{
if ( $where )
$this->db->where($where);
$this->db->where('read', '0');
return $this->db->count_all_results(MESSAGES_TABLE);
}
Отправка сообщения
Отправка сообщения затрагивает две операции:
· создание нового диалога, если его нет
· отправка сообщения
Отправка сообщения происходит с методе send контроллера mail. Для инициирования или продолжения диалога необходимо нажать на ссылку рядом с другом или на боковой панели просмотра профиля пользователя:
или
Внешний вид формы нового письма:
Рисунок 44
После отправки появится статус сообщение:
Так как диалога до этого не было, то он был создан.