Explorar el Código

Merge pull request #1776 from visuddhinanda/laravel

sentence api 添加view=paragraph
visuddhinanda hace 2 años
padre
commit
cab1ff185b

+ 69 - 8
app/Http/Controllers/ArticleController.php

@@ -300,14 +300,75 @@ class ArticleController extends Controller
             $newArticle->save();
             OpsLog::debug($user['user_uid'],$newArticle);
 
-            if(Str::isUuid($request->get('anthologyId'))){
-                $articleMap = new ArticleCollection();
-                $articleMap->id = app('snowflake')->id();
-                $articleMap->article_id = $newArticle->uid;
-                $articleMap->collect_id = $request->get('anthologyId');
-                $articleMap->title = Article::find($newArticle->uid)->title;
-                $articleMap->level = 1;
-                $articleMap->save();
+            $anthologyId = $request->get('anthologyId');
+            if(Str::isUuid($anthologyId)){
+                $parentNode = $request->get('parentNode');
+                if(Str::isUuid($parentNode)){
+                    $map = ArticleCollection::where('collect_id',$anthologyId)
+                                        ->orderBy('id')->get();
+                    $newMap = array();
+                    $parentNodeLevel = -1;
+                    $appended = false;
+                    foreach ($map as $key => $row) {
+                        $orgNode = $row;
+                        if(!$appended){
+                            if($parentNodeLevel>0){
+                                if($row->level <= $parentNodeLevel ){
+                                    //parent node 末尾
+                                    $newNode = $row;
+                                    $newNode['article_id'] = $newArticle->uid;
+                                    $newNode['level'] = $parentNodeLevel+1;
+                                    $newNode['title'] = Article::find($newArticle->uid)->title;
+                                    $newMap[] = $newNode;
+                                    $appended = true;
+                                }
+                            }else{
+                                if($row->article_id === $parentNode){
+                                    $parentNodeLevel = $row->level;
+                                    $orgNode['children'] = $orgNode['children']+1;
+                                }
+                            }
+                        }
+                        $newMap[] = $orgNode;
+                    }
+                    if($parentNodeLevel>0 && $appended===false){
+                        //没挂上
+                        $newNode = array();
+                        $newNode['collect_id'] = $anthologyId;
+                        $newNode['article_id'] = $newArticle->uid;
+                        $newNode['level'] = $parentNodeLevel+1;
+                        $newNode['title'] = Article::find($newArticle->uid)->title;
+                        $newNode['children'] = 0;
+                        $newMap[] = $newNode;
+                    }
+                    $delete = ArticleCollection::where('collect_id',$anthologyId)->delete();
+                    $count=0;
+                    foreach ($newMap as $key => $row) {
+                        $new = new ArticleCollection;
+                        $new->id = app('snowflake')->id();
+                        $new->article_id = $row["article_id"];
+                        $new->collect_id = $row["collect_id"];
+                        $new->title = $row["title"];
+                        $new->level = $row["level"];
+                        $new->children = $row["children"];
+                        $new->editor_id = $user["user_id"];
+                        if(isset($row["deleted_at"])){
+                            $new->deleted_at = $row["deleted_at"];
+                        }
+                        $new->save();
+                        $count++;
+                    }
+                    ArticleMapController::updateCollection($anthologyId);
+                }else{
+                    $articleMap = new ArticleCollection();
+                    $articleMap->id = app('snowflake')->id();
+                    $articleMap->article_id = $newArticle->uid;
+                    $articleMap->collect_id = $request->get('anthologyId');
+                    $articleMap->title = Article::find($newArticle->uid)->title;
+                    $articleMap->level = 1;
+                    $articleMap->save();
+                }
+
             }
         });
         if(Str::isUuid($newArticle->uid)){

+ 13 - 2
app/Http/Controllers/SentenceController.php

@@ -153,6 +153,12 @@ class SentenceController extends Controller
                 $table = Sentence::where('book_id',$request->get('book'))
                                     ->whereBetween('paragraph',$chapter)
                                     ->whereIn('channel_uid',explode(',',$request->get('channels')));
+                break;
+            case 'paragraph':
+                $table = Sentence::where('book_id',$request->get('book'))
+                                    ->whereIn('paragraph',explode(',',$request->get('para')))
+                                    ->whereIn('channel_uid',explode(',',$request->get('channels')))
+                                    ->orderBy('book_id')->orderBy('paragraph')->orderBy('word_start');
                 break;
 			default:
 				# code...
@@ -162,7 +168,11 @@ class SentenceController extends Controller
         if($request->get('strlen',false)){
             $totalStrLen = $table->sum('strlen');
         }
-        $table = $table->orderBy($request->get('order','updated_at'),$request->get('dir','desc'));
+        if($request->get('view') !== 'paragraph'){
+            $table = $table->orderBy($request->get('order','updated_at'),
+                                    $request->get('dir','desc'));
+        }
+
         $table = $table->skip($request->get("offset",0))
                        ->take($request->get('limit',1000));
         $result = $table->get();
@@ -170,7 +180,8 @@ class SentenceController extends Controller
 		if($result){
             $output = ["count"=>$count];
             if($request->get('view') === 'sent-can-read' ||
-                $request->get('view') === 'chapter'){
+                $request->get('view') === 'chapter' ||
+                $request->get('view') === 'paragraph'){
                 $output["rows"] = SentResource::collection($result);
             }else{
                 $output["rows"] = $result;