Чат основанный на сервисе Post Hawk
Добавить чат Post Hawk на сайт очень просто. Для этого необходимо сделать несколько простых действий:
git clone https://github.com/postHawk/hawk_chatРазместить у себя на сервере php файл с примерным содержимым:
<?php
namespace hawk_api\analitics;
require_once __DIR__ . '/hawk_api/php/hawk_api.php';
use \hawk_api\hawk_api;
class Сhat extends hawk_api
{
/**
* Конструктор. Инициалзирует объект апи
*/
public function __construct($key)
{
parent::__construct($key);
}
/**
* Точка входа
*/
public function main()
{
$action = (string)$_POST['action'];
switch ($action)
{
case 'register_user':
$this->add_user();
break;
default:
throw new \Exception('Unknow action');
}
}
/**
* Регистрирует пользвателя в сервисе и
* добавляет его в группу
* @return Boolean
*/
private function add_user()
{
if(!$_POST['user_id'])
{
return false;
}
$this->register_user($_POST['user_id']);
if($_POST['group_id'] && count($_POST['group_id']))
{
$this->add_user_to_group($_POST['user_id'], $_POST['group_id']);
}
$res = $this
->execute()
->get_results();
if($this->has_errors())
{
throw new \Exception(print_r($this->get_errors(), 1));
}
$res = $res[0]['register_user'];
echo json_encode($res);
}
}
$chat = new Сhat('api_key');
$chat->main();Подключить необходимые файлы на клиенте:
<link rel="stylesheet" type="text/css" href="Hawk_chat/lib/jquery.mCustomScrollbar.min.css"/>
<link rel="stylesheet" type="text/css" href="Hawk_chat/src/hawk_chat.css"/>
<script type="text/javascript" src="hawk_api/js/jq.js"></script>
<script type="text/javascript" src="Hawk_chat/lib/jquery.mCustomScrollbar.concat.min.js"></script>
<script type="text/javascript" src="hawk_api/js/hawk_api.js"></script>
<script type="text/javascript" src="Hawk_chat/src/hawk_chat.js"></script>Инициализировать плагин:
<div id="chat"></div>$('#chat').hawkChat({
userId: 'id', //id пользователя
serverSideUrl: 'index.php' //адрес серверного скрипта
});Настройки чата
var settings = {
/**
* @param string chatBody "тело" чата
*/
chatBody: methods.getDefaultHtml(),
/**
* @param string userId id пользователя,
* который будет зарегистрирован в сервсе
*/
userId: null,
/**
* @param string groupName название группы
* для регистрации в сервисе, также
* отображается на главной вкладке
*/
groupName: 'default_group',
/**
* @param string serverUrl адрес сервера Post Hawk
*/
serverUrl: 'wss://post-hawk.com:2222',
/**
* @param string inMessageFormat формать строки
* для отображения входящего сообщений в чате
*/
inMessageFormat: methods.getDefaultInMessageFormat(),
/**
* @param string outMessageFormat формать строки
* для отображения исходящего сообщений в чате
*/
outMessageFormat: methods.getDefaultInMessageFormat(),
/**
* @param string userFormat формать строки
* для отображения пользователей в списке
*/
userFormat: methods.getDefaultUserFormat(),
/**
* @param string groupFormat формать строки
* для отображения группы в списке
*/
groupFormat: methods.getDefaultGroupFormat(),
/**
* @param string serverSideUrl адрес
* скрипта для регистрации пользователей
*/
serverSideUrl: '/chat.php',
/**
* @param string onlineUserClass класс,
* который будет присвоен онлайн-пользователю
*/
onlineUserClass: 'chat-online',
/**
* @param string offlineUserClass класс,
* который будет присвоен оффлайн-пользователю
*/
offlineUserClass: 'chat-offline',
/**
* @param string currentUserClass класс,
* который будет присвоен текущему пользователю
*/
currentUserClass: 'chat-current',
/**
* @param string tabForCopySelector селектор
* для выборки шаблона таба
*/
tabForCopySelector: '.chat-tab.main',
/**
* @param string tabsContainerSelector селектор
* для выборки контейнера табов
*/
tabsContainerSelector: '.chat-tabs ul',
/**
* @param string tabsWrapperSelector селектор
* для выборки обёртки контейнера табов
*/
tabsWrapperSelector: '.chat-tabs',
/**
* @param string tabSelector селектор
* для выборки одного таба
*/
tabSelector: '.chat-tab',
/**
* @param string tabNameSelector селектор
* для выборки контейнера имени таба
*/
tabNameSelector: '.chat-tab-name',
/**
* @param string messagePanelSelector селектор
* для выборки контейнера сообщений чата
*/
messagePanelSelector: '.chat-mesasge-panel',
/**
* @param string textPanelSelector селектор
* для выборки контйнера с текстом для отправки
*/
textPanelSelector: '.chat-text-panel',
/**
* @param string bodySelector селектор
* для выборки основного контейнера чата
*/
bodySelector: '.chat-body',
/**
* @param string countNewMessageSelector селектор
* для выборки контейнера для отображения новых сообщений
*/
countNewMessageSelector: '.chat-tab-count-new',
/**
* @param string chatHeaderSelector селектор
* для выборки заголовка чата
*/
chatHeaderSelector: '.chat-header',
/**
* @param boolean inline статичный чат или перемещаемый
*/
inline: true,
/**
* @param boolean useTabs использовать ли табы
*/
useTabs: true,
/**
* @param boolean useUserList показывать или нет список пользователей
*/
useUserList: true,
/**
* @param string leftPanelSelector селектор
* для выборки контейнера со списком пользователей
*/
leftPanelSelector: '.chat-left-panel',
/**
* @param string title заголовок чата
*/
title: 'Post Hawk Chat',
/**
* @param string titleSelector селектор
* для выборки заголовка чата
*/
titleSelector: '.chat-title',
/**
* @param Array openWithUser
* после загрузки создать чат с пользователем
*/
openWithUser: [],
/**
* @param string closeTabSelector селектор
* для выборки кнопки закрытия таба
*/
closeTabSelector: '.chat-close-tab',
/**
* @param string textInputSelector селектор
* для выборки местонахождения текста
*/
textInputSelector: '#chat_send_message',
/**
* @param string onlineWrapperSelector селектор
* для выборки обёртки контейнера онлайн пользователей
*/
onlineWrapperSelector: '#chat_online_u',
/**
* @param string groupsWrapperSelector селектор
* для выборки обёртки контейнера групп пользователя
*/
groupsWrapperSelector: '#chat_groups_u',
/**
* @param string offlineWrapperSelector селектор
* для выборки обёртки контейнера оффлайн пользователей
*/
offlineWrapperSelector: '#chat_offline_u',
/**
* @param string usersContainerSelector селектор
* для выборки контейнера с пользователями
*/
usersContainerSelector: 'table.chat-users',
/**
* @param string exitGroupButtonSelector селектор
* для выборки кнопки прекращения создания группы
*/
exitGroupButtonSelector: '.add-hawk-group-dismiss',
/**
* @param string addGroupButtonSelector селектор
* для выборки кнопки подтверждения создания в группы
*/
addGroupButtonSelector: '.add-hawk-group-confirm',
/**
* @param string userToGroupAddSelector селектор
* для выборки пользователей для создания новой группы
*/
userToGroupAddSelector: '.hawk-new-users-group',
/**
* @param string createGroupButtonSelector селектор
* для выборки кнопки перехода в режим создания группы
*/
createGroupButtonSelector: '#create_new_group',
/**
* @param string createGroupButtonSelector селектор
* для выборки контейнера с кнопками
* создания/отказа от создания группы
*/
groupActionsWrapperSelector: '#actions_new_group',
/**
* callback, вызываемый после инициализиции плагина
*/
onInit: function () {},
/**
* callback, вызываемый при входящем сообщении
* в нём можно модифицировать строку,
* которую увидит пользователь.
* Если функция вернёт -1, то новая строка будет
* скомпилирована на основе изменённых свойст объекта
* сообщения.
*
* @param object msg объект сообщения
* @param string str сформированная строка
* @returns string|-1
*/
onInMessage: function (msg, str) {
return str;
},
/**
* callback, вызываемый перед отправкой сообщения
* в нём можно модифицировать объект,
* который будет отправлен
* @param object msg объект сообщения
*
*/
onOutMessage: function (msg) {},
/**
* callback, вызываемый при поступлении сообщени в приват
* в нём можно модифицировать строку,
* которую увидит пользователь
*
* @param object msg объект сообщения
* @param string str сформированная строка
* @returns string
*/
onPrivateMessage: function (msg, str) {
return str;
},
/**
* callback, вызываемый при создании новой приватной вкладки
* @param string from id пользователя, который прислал сообщение
*/
onNewPrivate: function (from) {},
/**
* callback, вызываемый после обновления списка пользователей,
* который в нём можно модифицировать
*
* @param array list массив пользователей
* @return array
*/
onUserUpdate: function (list) {
return list;
},
/**
* callback, вызываемый при смене вкладок
*
* @param object old_tab предыдущая вкладка
* @param object new_tab новая вкладка
*/
onChangeTab: function (old_tab, new_tab) {},
/**
* Функция для стилизации scrollbar
* если этот параметр установлен встроенная функци вызвана не будет
*/
customScroll: false
};