156 lines
4.9 KiB
PHP
156 lines
4.9 KiB
PHP
|
<?php
|
|||
|
|
|||
|
namespace app\admin\controller\fastim;
|
|||
|
|
|||
|
use app\common\controller\Backend;
|
|||
|
use addons\fastim\library\Common;
|
|||
|
|
|||
|
/**
|
|||
|
* 会话管理
|
|||
|
*
|
|||
|
* @icon fa fa-circle-o
|
|||
|
*/
|
|||
|
class Session extends Backend
|
|||
|
{
|
|||
|
|
|||
|
/**
|
|||
|
* Session模型对象
|
|||
|
* @var \app\admin\model\fastim\Session
|
|||
|
*/
|
|||
|
protected $model = null;
|
|||
|
|
|||
|
protected $pageCount = 15;
|
|||
|
|
|||
|
public function _initialize()
|
|||
|
{
|
|||
|
parent::_initialize();
|
|||
|
$this->model = new \app\admin\model\fastim\Session;
|
|||
|
$this->view->assign("typeList", $this->model->getTypeList());
|
|||
|
}
|
|||
|
|
|||
|
public function import()
|
|||
|
{
|
|||
|
parent::import();
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 聊天记录
|
|||
|
*/
|
|||
|
public function record($ids, $page = 1)
|
|||
|
{
|
|||
|
$sessionInfo = Common::sessionInfo($ids);
|
|||
|
if (!$sessionInfo) {
|
|||
|
$this->error(__('No Results were found'));
|
|||
|
}
|
|||
|
|
|||
|
// 重新获取带会话用户的会话资料
|
|||
|
$sessionInfo = Common::sessionInfo($ids, $sessionInfo['user_one']);
|
|||
|
|
|||
|
if ($page == 1) {
|
|||
|
$min = 0;
|
|||
|
} else {
|
|||
|
$min = ($page - 1) * $this->pageCount;
|
|||
|
}
|
|||
|
|
|||
|
if ($sessionInfo['type'] == 'single') {
|
|||
|
// 单聊消息
|
|||
|
$message = Common::loadSingleChatRecord($sessionInfo['id'], [
|
|||
|
'min' => $min,
|
|||
|
'pageCount' => $this->pageCount
|
|||
|
], $sessionInfo['user_one']);
|
|||
|
|
|||
|
$sessionInfo['windowType'] = 'message';
|
|||
|
} elseif ($sessionInfo['type'] == 'service') {
|
|||
|
if ($sessionInfo['chat_id'] == 1 || $sessionInfo['chat_id'] == 2 || $sessionInfo['chat_id'] == 3) {
|
|||
|
$message = Common::loadServiceRecord($sessionInfo, [
|
|||
|
'min' => $min,
|
|||
|
'pageCount' => $this->pageCount
|
|||
|
], $sessionInfo['user_one']);
|
|||
|
|
|||
|
if ($message) {
|
|||
|
$sessionInfo['windowType'] = $message['windowType'];
|
|||
|
$message = $message['message'];
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
$nextpage = (count($message) < $this->pageCount) ? false : true;
|
|||
|
$message = Common::groupByTime($message);
|
|||
|
|
|||
|
if ($this->request->isAjax()) {
|
|||
|
$this->success('ok', '', [
|
|||
|
'pageData' => [
|
|||
|
'nextpage' => $nextpage,
|
|||
|
'page' => $page
|
|||
|
],
|
|||
|
'message' => $message,
|
|||
|
'sessionInfo' => $sessionInfo
|
|||
|
]);
|
|||
|
}
|
|||
|
|
|||
|
$this->assignconfig('pageData', [
|
|||
|
'nextpage' => $nextpage,
|
|||
|
'page' => $page,
|
|||
|
'__CDN__' => $this->request->domain()
|
|||
|
]);
|
|||
|
$this->assignconfig('message', $message);
|
|||
|
$this->assignconfig('sessionInfo', $sessionInfo);
|
|||
|
return $this->view->fetch();
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 查看
|
|||
|
*/
|
|||
|
public function index()
|
|||
|
{
|
|||
|
//当前是否为关联查询
|
|||
|
$this->relationSearch = true;
|
|||
|
//设置过滤方法
|
|||
|
$this->request->filter(['strip_tags', 'trim']);
|
|||
|
if ($this->request->isAjax()) {
|
|||
|
//如果发送的来源是Selectpage,则转发到Selectpage
|
|||
|
if ($this->request->request('keyField')) {
|
|||
|
return $this->selectpage();
|
|||
|
}
|
|||
|
[$where, $sort, $order, $offset, $limit] = $this->buildparams();
|
|||
|
|
|||
|
$list = $this->model->with([
|
|||
|
'user' => ['fauser', 'admin'],
|
|||
|
'usertwo' => ['fauser', 'admin']
|
|||
|
])
|
|||
|
->where($where)
|
|||
|
->where('session.type="single" OR session.type="service"')
|
|||
|
->order($sort, $order)
|
|||
|
->paginate($limit);
|
|||
|
|
|||
|
foreach ($list as $row) {
|
|||
|
|
|||
|
$row->getRelation('user')->visible(['nickname']);
|
|||
|
$aNickname = $row->user->admin->nickname ?? '';
|
|||
|
$faNickname = $row->user->fauser->nickname ?? '';
|
|||
|
if ($aNickname || $faNickname) {
|
|||
|
$row->user->nickname = $row->user->nickname . '(' . ($aNickname ? $aNickname : $faNickname) . ')';
|
|||
|
}
|
|||
|
|
|||
|
$row->getRelation('usertwo')->visible(['nickname', 'id']);
|
|||
|
if ($row->type == 'single') {
|
|||
|
$aNickname = $row->usertwo->admin->nickname ?? '';
|
|||
|
$faNickname = $row->usertwo->fauser->nickname ?? '';
|
|||
|
if ($aNickname || $faNickname) {
|
|||
|
$row->usertwo->nickname = $row->usertwo->nickname . '(' . ($aNickname ? $aNickname : $faNickname) . ')';
|
|||
|
}
|
|||
|
} elseif ($row->chat_info) {
|
|||
|
$row->usertwo->id = $row->chat_info['id'];
|
|||
|
$row->usertwo->nickname = $row->chat_info['nickname'];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
$result = ["total" => $list->total(), "rows" => $list->items()];
|
|||
|
|
|||
|
return json($result);
|
|||
|
}
|
|||
|
return $this->view->fetch();
|
|||
|
}
|
|||
|
|
|||
|
}
|