Browse Source

:sparkles: 获取用户有权限的channel列表

visuddhinanda 3 years ago
parent
commit
9cee9fc4cb
1 changed files with 105 additions and 4 deletions
  1. 105 4
      app/Http/Controllers/ChannelController.php

+ 105 - 4
app/Http/Controllers/ChannelController.php

@@ -5,10 +5,16 @@ namespace App\Http\Controllers;
 require_once __DIR__.'/../../../public/app/ucenter/function.php';
 
 use App\Models\Channel;
+use App\Models\Sentence;
+use App\Models\PaliSentence;
 use App\Http\Controllers\AuthController;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Log;
-use App\Http\Api;
+use App\Http\Api\AuthApi;
+use App\Http\Api\StudioApi;
+use App\Http\Api\ShareApi;
+use App\Http\Api\PaliTextApi;
+use Illuminate\Support\Arr;
 
 class ChannelController extends Controller
 {
@@ -26,7 +32,7 @@ class ChannelController extends Controller
 		switch ($request->get('view')) {
             case 'studio':
 				# 获取studio内所有channel
-                $user = \App\Http\Api\AuthApi::current($request);
+                $user = AuthApi::current($request);
                 if($user){
                     //判断当前用户是否有指定的studio的权限
                     if($user['user_uid'] === \App\Http\Api\StudioApi::getIdByName($request->get('name'))){
@@ -38,6 +44,46 @@ class ChannelController extends Controller
                     return $this->error(__('auth.failed'));
                 }
 				break;
+            case 'user-in-chapter':
+                #获取user所有有权限的channel列表
+                $user = AuthApi::current($request);
+                if($user){
+                    $channelById = [];
+                    $channelId = [];
+                    //获取共享channel
+                    $allSharedChannels = ShareApi::getResList($user['user_uid'],2);
+                    foreach ($allSharedChannels as $key => $value) {
+                        # code...
+                        $channelId[] = $value['res_id'];
+                        $channelById[$value['res_id']] = $value;
+                    }
+                    //获取全网公开channel
+                    $chapter = PaliTextApi::getChapterStartEnd($request->get('book'),$request->get('para'));
+                    $publicChannelsWithContent = Sentence::where('book_id',$request->get('book'))
+                                                ->whereBetween('paragraph',$chapter)
+                                                ->where('strlen','>',0)
+                                                ->where('status',30)
+                                                ->groupBy('channel_uid')
+                                                ->select('channel_uid')
+                                                ->get();
+                    foreach ($publicChannelsWithContent as $key => $value) {
+                        # code...
+                        $value['res_id']=$value->channel_uid;
+                        $value['power'] = 10;
+                        $value['type'] = 2;
+                        if(!isset($channelById[$value['res_id']])){
+                            $channelId[] = $value['res_id'];
+                            $channelById[$value['res_id']] = $value;
+                        }
+                    }
+                    $table = Channel::select($indexCol)
+                            ->whereIn('uid', $channelId)
+                            ->orWhere('owner_uid',$user['user_uid']);
+                }else{
+                    return $this->error(__('auth.failed'));
+                }
+                break;
+
         }
         //处理搜索
         if(isset($_GET["search"])){
@@ -65,19 +111,74 @@ class ChannelController extends Controller
         //获取数据
         $result = $table->get();
         if($result){
+            if($request->has('progress')){
+                //获取进度
+                //获取单句长度
+                $sentLen = PaliSentence::where('book',$request->get('book'))
+                ->whereBetween('paragraph',$chapter)
+                ->orderBy('word_begin')
+                ->select(['book','paragraph','word_begin','word_end','length'])
+                ->get();
+            }
             foreach ($result as $key => $value) {
+                if($request->has('progress')){
+                    //获取进度
+                    $finalTable = Sentence::where('book_id',$request->get('book'))
+                    ->whereBetween('paragraph',$chapter)
+                    ->where('channel_uid',$value->uid)
+                    ->where('strlen','>',0)
+                    ->select(['strlen','book_id','paragraph','word_start','word_end']);
+                    if($finalTable->count()>0){
+                        $finished = $finalTable->get();
+                        $final=[];
+                        foreach ($sentLen as  $sent) {
+                            # code...
+                            $first = Arr::first($finished, function ($value, $key) use($sent) {
+                                return ($value->book_id==$sent->book &&
+                                        $value->paragraph==$sent->paragraph &&
+                                        $value->word_start==$sent->word_begin &&
+                                        $value->word_end==$sent->word_end);
+                            });
+                            $final[] = [$sent->length,$first?true:false];
+                        }
+                        $value['final'] = $final;
+                    }
+
+                }
+                if($value->owner_uid===$user['user_uid']){
+                    $value['role'] = 'owner';
+                }else{
+                    if(isset($channelById[$value->uid])){
+                        switch ($channelById[$value->uid]['power']) {
+                            case 10:
+                                # code...
+                                $value['role'] = 'member';
+                                break;
+                            case 20:
+                                $value['role'] = 'editor';
+                                break;
+                            case 30:
+                                $value['role'] = 'owner';
+                                break;
+                            default:
+                                # code...
+                                $value['role'] = $channelById[$value->uid]['power'];
+                                break;
+                        }
+                    }
+                }
                 # 获取studio信息
                 $studio = $userinfo->getName($value->owner_uid);
                 $value->studio = [
                     'id'=>$value->owner_uid,
                     'nickName'=>$studio['nickname'],
                     'studioName'=>$studio['username'],
-                    'avastar'=>'',
+                    'avatar'=>'',
                     'owner' => [
                         'id'=>$value->owner_uid,
                         'nickName'=>$studio['nickname'],
                         'userName'=>$studio['username'],
-                        'avastar'=>'',
+                        'avatar'=>'',
                     ]
                 ];
             }