Jelajahi Sumber

Merge pull request #1884 from visuddhinanda/laravel

add InteractiveController
visuddhinanda 2 tahun lalu
induk
melakukan
c075435322

+ 1 - 1
app/Http/Api/TemplateRender.php

@@ -606,7 +606,7 @@ class TemplateRender{
                             }
                         }
                     }
-                    if($volume===false){
+                    if($volume===false || $volume === '' ){
                         $volume = $pageInfo->volume;
                     }
                     if(!$page){

+ 24 - 1
app/Http/Controllers/DiscussionController.php

@@ -61,7 +61,29 @@ class DiscussionController extends Controller
                                         ->where('status','active')->count();
                 $closeNumber = Discussion::where('parent',$request->get('id'))
                                         ->where('status','close')->count();
-                $table->where('status',$request->get('status','active'));
+                break;
+            case 'res_id':
+                /**
+                 * 先获取顶级节点
+                 *
+                 */
+                $roots = Discussion::where('res_id',$request->get('id'))
+                                    ->where('type', $request->get('type','discussion'))
+                                    ->where('status',$request->get('status','active'))
+                                    ->where('parent',null)
+                                    ->select('id')
+                                    ->get();
+
+                $table = Discussion::where(function ($query) use ($roots) {
+                                        $query->whereIn('id'  , $roots)
+                                            ->orWhereIn('parent', $roots);
+                                        });
+                $activeNumber = Discussion::where('res_id',$request->get('id'))
+                                            ->where('type', $request->get('type','discussion'))
+                                            ->where('status','active')->count();
+                $closeNumber = Discussion::where('res_id',$request->get('id'))
+                                            ->where('type', $request->get('type','discussion'))
+                                            ->where('status','close')->count();
                 break;
             case 'all':
                 $table = Discussion::where('parent',null);
@@ -205,6 +227,7 @@ class DiscussionController extends Controller
             $discussion->res_id = $request->get('res_id');
             $discussion->res_type = $request->get('res_type');
         }
+        $discussion->type = $request->get('type','discussion');
         $discussion->tpl_id = $request->get('tpl_id');
         $discussion->title = $request->get('title',null);
         $discussion->content = $request->get('content',null);

+ 117 - 0
app/Http/Controllers/InteractiveController.php

@@ -0,0 +1,117 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Models\Discussion;
+use Illuminate\Http\Request;
+use App\Http\Api\AuthApi;
+
+class InteractiveController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * 获取某个资源,某个用户的权限
+     * @param  \Illuminate\Http\Request  $request
+     * @param  string  $res_id
+     * @return \Illuminate\Http\Response
+     */
+    public function show(Request $request, string $res_id)
+    {
+        //
+        $user = AuthApi::current($request);
+        $data = [];
+        switch ($request->get('res_type')) {
+            case 'article':
+                /* qa */
+                $data['qa'] = [
+                    'can_create' => false,
+                    'can_reply' => false,
+                ];
+                if($user && ArticleController::userCanEditId($user['user_uid'],$res_id)){
+                    $data['qa']['can_create'] = true;
+                    $data['qa']['can_reply'] = true;
+                }
+                $data['qa']['count'] = Discussion::where('res_id',$res_id)
+                                                ->where('type','qa')
+                                                ->where('status','close')
+                                                ->count();
+                /* help */
+                $data['help'] = [
+                    'can_create' => false,
+                    'can_reply' => false,
+                ];
+                if($user){
+                    $data['help']['can_reply'] = true;
+                    if(ArticleController::userCanEditId($user['user_uid'],$res_id)){
+                        $data['help']['can_create'] = true;
+                    }
+                }
+                $data['help']['count'] = Discussion::where('res_id',$res_id)
+                                                ->where('type','help')
+                                                ->where('status','active')
+                                                ->count();
+
+
+
+                /* discussion */
+                $data['discussion'] = [
+                    'can_create' => false,
+                    'can_reply' => false,
+                ];
+                if($user){
+                    $data['discussion']['can_reply'] = true;
+                    $data['discussion']['can_create'] = true;
+                }
+                $data['discussion']['count'] = Discussion::where('res_id',$res_id)
+                                                ->where('type','discussion')
+                                                ->where('status','active')
+                                                ->count();
+                break;
+        }
+
+        return $this->ok($data);
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\Discussion  $discussion
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, Discussion $discussion)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\Discussion  $discussion
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(Discussion $discussion)
+    {
+        //
+    }
+}

+ 2 - 0
routes/api.php

@@ -85,6 +85,7 @@ use App\Http\Controllers\NavCSParaController;
 use App\Http\Controllers\SentencesInChapterController;
 use App\Http\Controllers\CompoundController;
 use App\Http\Controllers\NotificationController;
+use App\Http\Controllers\InteractiveController;
 
 /*
 |--------------------------------------------------------------------------
@@ -225,6 +226,7 @@ Route::group(['prefix' => 'v2'],function(){
     Route::apiResource('sentences-in-chapter',SentencesInChapterController::class);
     Route::apiResource('compound',CompoundController::class);
     Route::apiResource('notification',NotificationController::class);
+    Route::apiResource('interactive',InteractiveController::class);
 
     Route::get('download/{type1}/{type2}/{uuid}/{filename}', function ($type1,$type2,$uuid,$filename) {
         header("Content-Type: {$type1}/{$type1}");