Преглед изворни кода

获取studio信息 用 StudioApi::getById

visuddhinanda пре 3 година
родитељ
комит
ac7d3ee861
1 измењених фајлова са 127 додато и 13 уклоњено
  1. 127 13
      app/Http/Controllers/ChannelController.php

+ 127 - 13
app/Http/Controllers/ChannelController.php

@@ -173,6 +173,7 @@ class ChannelController extends Controller
                     }
 
                 }
+
                 if($value->owner_uid===$user['user_uid']){
                     $value['role'] = 'owner';
                 }else{
@@ -196,19 +197,7 @@ class ChannelController extends Controller
                     }
                 }
                 # 获取studio信息
-                $studio = $userinfo->getName($value->owner_uid);
-                $value->studio = [
-                    'id'=>$value->owner_uid,
-                    'nickName'=>$studio['nickname'],
-                    'studioName'=>$studio['username'],
-                    'avatar'=>'',
-                    'owner' => [
-                        'id'=>$value->owner_uid,
-                        'nickName'=>$studio['nickname'],
-                        'userName'=>$studio['username'],
-                        'avatar'=>'',
-                    ]
-                ];
+                $value->studio = \App\Http\Api\StudioApi::getById($value->owner_uid);
             }
 			return $this->ok(["rows"=>$result,"count"=>$count]);
 		}else{
@@ -216,7 +205,132 @@ class ChannelController extends Controller
 		}
 
     }
+    /**
+     * 获取章节的进度
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function progress(Request $request){
+		$indexCol = ['uid','name','summary','type','owner_uid','lang','status','updated_at','created_at'];
+
+        $sent = $request->get('sentence') ;
+        $query = [];
+        $sentContainer = [];
+        $sentLenContainer = [];
+
+        foreach ($sent as $value) {
+            $sentContainer[$value] = false;
+            $ids = explode('-',$value);
+            $query[] = $ids;
+        }
+        //获取单句长度
+        if(count($query)>0){
+            $sentLen = PaliSentence::whereIns(['book','paragraph','word_begin','word_end'],$query)
+                                    ->select(['book','paragraph','word_begin','word_end','length'])
+                                    ->get();
+
+            foreach ($sentLen as $value) {
+                $sentLenContainer["{$value->book}-{$value->paragraph}-{$value->word_begin}-{$value->word_end}"] = $value->length;
+            }
+        }
+
+        #获取 user 在某章节 所有有权限的 channel 列表
+        $user = AuthApi::current($request);
+        if(!$user){
+            return $this->error(__('auth.failed'));
+        }
+        $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']);
+        $result = $table->get();
+
+
 
+        foreach ($result as $key => $value) {
+            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信息
+            $result[$key]["studio"] = \App\Http\Api\StudioApi::getById($value->owner_uid);
+
+            //获取进度
+            if(count($query)>0){
+                $finalTable = Sentence::whereIns(['book_id','paragraph','word_start','word_end'],$query)
+                                        ->where('channel_uid',$value->uid)
+                                        ->where('strlen','>',0)
+                                        ->select(['strlen','book_id','paragraph','word_start','word_end']);
+                if($finalTable->count()>0){
+                    $finished = $finalTable->get();
+                    $currChannel = [];
+                    foreach ($finished as $key => $value) {
+                        $currChannel["{$value->book_id}-{$value->paragraph}-{$value->word_start}-{$value->word_end}"] = 1;
+                    }
+                    $final=[];
+                    foreach ($sentContainer as $sentId=>$value) {
+                        # code...
+                        if(isset($currChannel[$sentId])){
+                            $final[] = [$sentLenContainer[$sentId],true];
+                        }else{
+                            $final[] = [$sentLenContainer[$sentId],false];
+                        }
+                    }
+                    $result[$key]['final'] = $final;
+                }
+            }
+
+        }
+
+        return $this->ok(["rows"=>$result,count($result)]);
+
+    }
     /**
      * Store a newly created resource in storage.
      *