123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- <?php
- namespace App\Module;
- use App\Tasks\PushTask;
- use Cache;
- use DB;
- use Hhxsv5\LaravelS\Swoole\Task\Task;
- /**
- * Class Docs
- * @package App\Module
- */
- class Docs
- {
- /**
- * 检验是否有阅读或修改权限
- * @param $bookid
- * @param string $checkType edit|view
- * @return array|mixed
- */
- public static function checkRole($bookid, $checkType = 'edit')
- {
- $row = Base::DBC2A(DB::table('docs_book')->where('id', $bookid)->first());
- if (empty($row)) {
- return Base::retError('知识库不存在或已被删除!', -1000);
- }
- $userE = Users::authE();
- if (Base::isError($userE)) {
- $user = [];
- } else {
- $user = $userE['data'];
- }
- $checkType = $checkType == 'edit' ? 'edit' : 'view';
- if ($checkType == 'edit') {
- if (empty($user)) {
- return $userE;
- }
- } else {
- if ($row['role_view'] != 'all') {
- if (empty($user)) {
- return Base::retError('知识库仅对会员开放,请登录后再试!', -1001);
- }
- }
- }
- if ($user['username'] == $row['username']) {
- return Base::retSuccess('success');
- }
- //
- if ($row['role_' . $checkType] == 'member') {
- if (!DB::table('docs_users')->where('bookid', $bookid)->where('username', $user['username'])->exists()) {
- return Base::retError('知识库仅对成员开放!', $checkType == 'edit' && $row['role_look'] == 'reg' ? 1002 : -1002);
- }
- } elseif ($row['role_' . $checkType] == 'private') {
- if ($row['username'] != $user['username']) {
- return Base::retError('知识库仅对作者开放!', $checkType == 'edit' && $row['role_look'] == 'reg' ? 1003 : -1003);
- }
- }
- //
- return Base::retSuccess('success');
- }
- /**
- * 通知正在编辑的成员
- *
- * @param integer $sid 章节ID
- * @param array $bodyArray body参数
- */
- public static function notice($sid, $bodyArray = [])
- {
- $user = Users::auth();
- $array = Base::json2array(Cache::get("docs::" . $sid));
- if ($array) {
- foreach ($array as $uname => $vbody) {
- if (intval($vbody['indate']) + 20 < time()) {
- unset($array[$uname]);
- }
- }
- }
- $pushLists = [];
- if ($array) {
- foreach ($array AS $tuser) {
- $uLists = Base::DBC2A(DB::table('ws')->select(['fd', 'username', 'channel'])->where('username', $tuser['username'])->get());
- foreach ($uLists AS $item) {
- if ($item['username'] == $user['username']) {
- continue;
- }
- $pushLists[] = [
- 'fd' => $item['fd'],
- 'msg' => [
- 'messageType' => 'docs',
- 'body' => array_merge([
- 'sid' => $sid,
- 'nickname' => $user['nickname'] ?: $user['username'],
- 'time' => time(),
- ], $bodyArray)
- ]
- ];
- }
- }
- }
- $pushTask = new PushTask($pushLists);
- Task::deliver($pushTask);
- }
- }
|