Selaa lähdekoodia

:bug: level=8 parent 错误

visuddhinanda 2 vuotta sitten
vanhempi
sitoutus
2afbdfd6de
1 muutettua tiedostoa jossa 114 lisäystä ja 117 poistoa
  1. 114 117
      app/Console/Commands/UpgradePaliText.php

+ 114 - 117
app/Console/Commands/UpgradePaliText.php

@@ -90,143 +90,140 @@ class UpgradePaliText extends Command
 			}
 			$title_data = PaliText::select(['book','paragraph','level','parent','toc','lenght'])
 								->where('book',$from)->orderby('paragraph','asc')->get();
-            {
-				$paragraph_count = count($title_data);
-				$paragraph_info = array();
-				$paragraph_info[] = array($from, -1, $paragraph_count, -1, -1, -1);
 
-
-                for ($iPar = 0; $iPar < count($title_data); $iPar++) {
-                    $title_data[$iPar]["level"] = $arrInserString[$iPar][3];
-                }
+            $paragraph_count = count($title_data);
+            $paragraph_info = array();
+            $paragraph_info[] = array($from, -1, $paragraph_count, -1, -1, -1);
 
 
-				for ($iPar = 0; $iPar < count($title_data); $iPar++) {
-					$book = $from ;
-					$paragraph = $title_data[$iPar]["paragraph"];
+            for ($iPar = 0; $iPar < count($title_data); $iPar++) {
+                $title_data[$iPar]["level"] = $arrInserString[$iPar][3];
+            }
 
-					if ((int) $title_data[$iPar]["level"] == 8) {
-						$title_data[$iPar]["level"] = 100;
-					}
+            for ($iPar = 0; $iPar < count($title_data); $iPar++) {
+                $this->info($iPar);
+                $book = $from ;
+                $paragraph = $title_data[$iPar]["paragraph"];
+                $true_level = (int) $title_data[$iPar]["level"];
 
-					$curr_level = (int) $title_data[$iPar]["level"];
-					# 计算这个chapter的段落数量
-					$length = -1;
+                if ((int) $title_data[$iPar]["level"] == 8) {
+                    $title_data[$iPar]["level"] = 100;
+                }
+                $curr_level = (int) $title_data[$iPar]["level"];
+                # 计算这个chapter的段落数量
+                $length = -1;
 
 
-					for ($iPar1 = $iPar + 1; $iPar1 < count($title_data); $iPar1++) {
-						$thislevel = (int) $title_data[$iPar1]["level"];
-						if ($thislevel <= $curr_level) {
-							$length = (int) $title_data[$iPar1]["paragraph"] - $paragraph;
-							break;
-						}
-					}
+                for ($iPar1 = $iPar + 1; $iPar1 < count($title_data); $iPar1++) {
+                    $thislevel = (int) $title_data[$iPar1]["level"];
+                    if ($thislevel <= $curr_level) {
+                        $length = (int) $title_data[$iPar1]["paragraph"] - $paragraph;
+                        break;
+                    }
+                }
 
-					if ($length == -1) {
-						$length = $paragraph_count - $paragraph + 1;
-					}
+                if ($length == -1) {
+                    $length = $paragraph_count - $paragraph + 1;
+                }
 
-                    /*
-                    上一个段落
-                    算法:查找上一个标题段落。而且该标题段落的下一个段落不是标题段落
-                    */
-                    $prev = -1;
-                    if ($iPar > 0) {
-                        for ($iPar1 = $iPar - 1; $iPar1 >= 0; $iPar1--) {
-                            if ($title_data[$iPar1]["level"] < 8 && $title_data[$iPar1+1]["level"]==100) {
-                                $prev = $title_data[$iPar1]["paragraph"];
-                                break;
-                            }
+                /*
+                上一个段落
+                算法:查找上一个标题段落。而且该标题段落的下一个段落不是标题段落
+                */
+                $prev = -1;
+                if ($iPar > 0) {
+                    for ($iPar1 = $iPar - 1; $iPar1 >= 0; $iPar1--) {
+                        if ($title_data[$iPar1]["level"] < 8 && $title_data[$iPar1+1]["level"]==100) {
+                            $prev = $title_data[$iPar1]["paragraph"];
+                            break;
                         }
                     }
-                    /*
-                    下一个段落
-                    算法:查找下一个标题段落。而且该标题段落的下一个段落不是标题段落
-                    */
-                    $next = -1;
-                    if ($iPar < count($title_data) - 1) {
-                        for ($iPar1 = $iPar + 1; $iPar1 < count($title_data)-1; $iPar1++) {
-                            if ($title_data[$iPar1]["level"] <8 && $title_data[$iPar1+1]["level"]==100) {
-                                $next = $title_data[$iPar1]["paragraph"];
-                                break;
-                            }
+                }
+                /*
+                下一个段落
+                算法:查找下一个标题段落。而且该标题段落的下一个段落不是标题段落
+                */
+                $next = -1;
+                if ($iPar < count($title_data) - 1) {
+                    for ($iPar1 = $iPar + 1; $iPar1 < count($title_data)-1; $iPar1++) {
+                        if ($title_data[$iPar1]["level"] <8 && $title_data[$iPar1+1]["level"]==100) {
+                            $next = $title_data[$iPar1]["paragraph"];
+                            break;
                         }
                     }
-
-					$parent = -1;
-					if ($iPar > 0) {
-						for ($iPar1 = $iPar - 1; $iPar1 >= 0; $iPar1--) {
-							if ($title_data[$iPar1]["level"] < $curr_level) {
-								$parent = $title_data[$iPar1]["paragraph"];
-								break;
-							}
-						}
-					}
-					//计算章节包含总字符数
-					$iChapter_strlen = 0;
-
-					for ($i = $iPar; $i < $iPar + $length; $i++) {
-						$iChapter_strlen += $title_data[$i]["lenght"];
-					}
-
-					$newData = [
-						'level' => $arrInserString[$iPar][3],
-						'toc' => $arrInserString[$iPar][5],
-						'chapter_len' => $length,
-						'next_chapter' => $next,
-						'prev_chapter' => $prev,
-						'parent' => $parent,
-						'chapter_strlen'=> $iChapter_strlen,
-					];
-
-                    $path = [];
-
-                    $title_data[$iPar]["level"] = $newData["level"];
-                    $title_data[$iPar]["toc"] = $newData["toc"];
-                    $title_data[$iPar]["parent"] = $newData["parent"];
-
-					/*
-                    *获取路径
-                    */
-                    $currParent = $parent;
-
-                    $iLoop = 0;
-                    while ($currParent != -1 && $iLoop<7) {
-                        # code...
-                        $pathTitle = $title_data[$currParent-1]["toc"];
-                        $pathLevel = $title_data[$currParent-1]['level'];
-                        $path[] = ["book"=>$book,"paragraph"=>$currParent,"title"=>$pathTitle,"level"=>$pathLevel];
-                        $currParent = $title_data[$currParent-1]["parent"];
-                        $iLoop++;
-                    }
-                    if(count($path)>0){
-                        //插入书名
-                        $bookTitle = BookTitle::where('book',$book)
-                                            ->where('paragraph',end($path)['paragraph'])
-                                            ->value('title');
-                        $path[] = ["book"=>0,"paragraph"=>0,"title"=>$bookTitle,"level"=>0];
+                }
+                //查找parent
+                $parent = -1;
+                if ($iPar > 0) {
+                    for ($iPar1 = $iPar - 1; $iPar1 >= 0; $iPar1--) {
+                        if ($title_data[$iPar1]["level"] < $true_level) {
+                            $parent = $title_data[$iPar1]["paragraph"];
+                            break;
+                        }
                     }
+                }
+                //计算章节包含总字符数
+                $iChapter_strlen = 0;
 
-                    # 将路径反向
-                    $path1 = [];
-                    for ($i=count($path)-1; $i >=0 ; $i--) {
-                        # code...
-                        $path1[] = $path[$i];
-                    }
-                    $newData['path'] = $path1;
+                for ($i = $iPar; $i < $iPar + $length; $i++) {
+                    $iChapter_strlen += $title_data[$i]["lenght"];
+                }
 
+                $newData = [
+                    'level' => $arrInserString[$iPar][3],
+                    'toc' => $arrInserString[$iPar][5],
+                    'chapter_len' => $length,
+                    'next_chapter' => $next,
+                    'prev_chapter' => $prev,
+                    'parent' => $parent,
+                    'chapter_strlen'=> $iChapter_strlen,
+                ];
+
+                $path = [];
+
+                $title_data[$iPar]["level"] = $newData["level"];
+                $title_data[$iPar]["toc"] = $newData["toc"];
+                $title_data[$iPar]["parent"] = $newData["parent"];
+
+                /*
+                *获取路径
+                */
+                $currParent = $parent;
+
+                $iLoop = 0;
+                while ($currParent != -1 && $iLoop<7) {
+                    # code...
+                    $pathTitle = $title_data[$currParent-1]["toc"];
+                    $pathLevel = $title_data[$currParent-1]['level'];
+                    $path[] = ["book"=>$book,"paragraph"=>$currParent,"title"=>$pathTitle,"level"=>$pathLevel];
+                    $currParent = $title_data[$currParent-1]["parent"];
+                    $iLoop++;
+                }
+                if(count($path)>0){
+                    //插入书名
+                    $bookTitle = BookTitle::where('book',$book)
+                                        ->where('paragraph',end($path)['paragraph'])
+                                        ->value('title');
+                    $path[] = ["book"=>0,"paragraph"=>0,"title"=>$bookTitle,"level"=>0];
+                }
 
-					PaliText::where('book',$book)
-							->where('paragraph',$paragraph)
-							->update($newData);
+                # 将路径反向
+                $path1 = [];
+                for ($i=count($path)-1; $i >=0 ; $i--) {
+                    # code...
+                    $path1[] = $path[$i];
+                }
+                $newData['path'] = $path1;
 
-					if ($curr_level > 0 && $curr_level < 8) {
-						$paragraph_info[] = array($book, $paragraph, $length, $prev, $next, $parent);
-					}
-				}
-			}
 
+                PaliText::where('book',$book)
+                        ->where('paragraph',$paragraph)
+                        ->update($newData);
 
+                if ($curr_level > 0 && $curr_level < 8) {
+                    $paragraph_info[] = array($book, $paragraph, $length, $prev, $next, $parent);
+                }
+            }
 			$bar->advance();
 		}
 		$bar->finish();