
- •Хранилище фотоальбомов
- •Введение
- •Постановка задачи
- •Описание инструментов субд
- •Язык программирования
- •Структура базы данных Диаграмма
- •Описание таблиц
- •Структура web-приложения Определение основных страниц
- •Определение реализации страниц
- •Контроллеры
- •Просмотр списка пользователей
- •Просмотр профиля пользователя
- •Вход пользователя в систему
- •Выход пользователя из системы
- •Регистрация нового пользователя
- •Редактирование профиля
- •Удаление профиля
- •Восстановление пароля
- •Категории
- •Просмотр категорий пользователя
- •Добавление новой категории
- •Редактирование категории
- •Удаление категории
- •Альбомы
- •Вывод списка альбомов
- •Отображение списка альбомов в категории
- •Отображение альбомов конкретного пользователя
- •Добавление альбома
- •Изменение альбома
- •Удаление альбома
- •Фотографии
- •Вывод списка фотографий
- •Вывод списка фотографий в альбоме
- •Вывод списка фотографий пользователя
- •Просмотр фотографии
- •Добавление фотографии
- •Редактирование фотографии
- •Удаление фотографии
- •Поиск фотографии
- •Комментарии
- •Добавление комментариев
- •Просмотр комментариев
- •Оценивание фотографии
- •Просмотр средней оценки
- •Просмотр друзей пользователя
- •Добавление в друзья
- •Запросы в мои друзья
- •Принятие заявки
- •Отклонение заявки
- •Просмотр отправленных мной заявок
- •Удаление пользователя из списка друзей
- •Сообщения
- •Отправка сообщения
- •Просмотр списка диалогов
- •Просмотр диалога
- •Заключение
Сообщения
Личные сообщения обеспечивают приватное общение между пользователями. Работу сообщений обеспечивает контроллер 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
После отправки появится статус сообщение:
Так как диалога до этого не было, то он был создан.