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', ' <br/>', $rendered_diff); return view('ncells::wiki.pages.wiki_compare', ['page' => $page, 'rendered_diff' => $rendered_diff]); }
<?php use NineCells\Wiki\Models\WikiHistory; $hs = WikiHistory::orderBy('id', 'desc')->paginate(10); ?> <table class="table table-bordered"> <thead> <tr> <th>제목</th> <th>변경</th> <th>변경한 사람</th> </tr> </thead> <tbody> @foreach ( $hs as $h ) <tr> <td><a href="/wiki/{{ $h->slug }}/{{ $h->rev }}">{{ $h->title }}</a></td> <td>{{ $h->created_at->diffForHumans() }}</td> <td><a href="/members/{{ $h->writer_id }}">{{ $h->writer->name }}</a></td> </tr> @endforeach </tbody> </table> {!! $hs->links() !!}