Ejemplo n.º 1
0
 public function executeDiff()
 {
     $this->setPage();
     // $this->revision is revision2
     $this->forward403Unless($this->canView);
     $this->forward404If($this->page->isNew());
     $this->forward404If($this->revision->isNew());
     // Source revision
     $c = new Criteria();
     $c->add(nahoWikiRevisionPeer::PAGE_ID, $this->page->getId());
     $c->add(nahoWikiRevisionPeer::REVISION, $this->getRequestParameter('oldRevision'));
     $this->revision1 = nahoWikiRevisionPeer::doSelectOne($c);
     $this->forward404Unless($this->revision1);
     // Dest revision
     $this->revision2 = $this->revision;
     // Make diff
     $lines1 = explode("\n", $this->revision1->getContent());
     $lines2 = explode("\n", $this->revision2->getContent());
     $diff = new Text_Diff('auto', array($lines1, $lines2));
     switch ($this->getRequestParameter('mode', 'inline')) {
         case 'unified':
             $renderer = new Text_Diff_Renderer_unified();
             break;
         case 'context':
             $renderer = new Text_Diff_Renderer_context();
             break;
         case 'inline':
         default:
             $renderer = new Text_Diff_Renderer_inline();
             break;
     }
     $this->diff = $renderer->render($diff);
     // Direct download
     if ($this->getRequestParameter('raw')) {
         $this->getResponse()->setContentType('text/plain');
         $this->renderText($this->diff);
         return sfView::NONE;
     }
     return sfView::SUCCESS;
 }