示例#1
0
 public function GET_page_compare($key, $left, $right)
 {
     $page = $this->getPage($key);
     $slug = $page->slug;
     if (!$slug) {
         // 존재하지 않는 문서이므로 생성 권장
         return redirect("/wiki/{$key}", 302);
     }
     if ($slug && $slug != $key) {
         // 이미 존재하는 문서인데 slug가 아니라 title로 들어왔다면 slug로 바꿔서 redirect 한다.
         // url 에 title 보다는 slug 를 권장하므로 영구적이동(301)
         return redirect("/wiki/{$slug}/compare/{$left}/{$right}", 301);
     }
     $l_page = WikiHistory::where('wiki_page_id', $page->id)->where('rev', $left)->first();
     $r_page = WikiHistory::where('wiki_page_id', $page->id)->where('rev', $right)->first();
     if (!$l_page || !$r_page) {
         // l 과 r 중 하나가 revision 이 없으므로 문서로 이동
         return redirect("/wiki/{$slug}", 302);
     }
     $this->setMetaTas($page);
     include "finediff.php";
     $l_text = mb_convert_encoding($l_page->content, 'HTML-ENTITIES', 'UTF-8');
     $r_text = mb_convert_encoding($r_page->content, 'HTML-ENTITIES', 'UTF-8');
     $opcodes = \FineDiff::getDiffOpcodes($l_text, $r_text, [\FineDiff::paragraphDelimiters, \FineDiff::sentenceDelimiters, \FineDiff::wordDelimiters, ';']);
     $rendered_diff = \FineDiff::renderDiffToHTMLFromOpcodes($l_text, $opcodes);
     $rendered_diff = mb_convert_encoding($rendered_diff, 'UTF-8', 'HTML-ENTITIES');
     $rendered_diff = str_replace('\\r\\n', '\\n', $rendered_diff);
     $rendered_diff = str_replace('\\r', '\\n', $rendered_diff);
     $rendered_diff = str_replace('\\n', '&nbsp;<br/>', $rendered_diff);
     return view('ncells::wiki.pages.wiki_compare', ['page' => $page, 'rendered_diff' => $rendered_diff]);
 }