/**
  * @inherit
  */
 public function handleError(\R3H6\Error404page\Domain\Model\Error $error)
 {
     $errorPage = $this->pageRepository->find404PageForError($error);
     if ($errorPage !== null) {
         $this->output = $this->httpService->readUrl($errorPage->getUrl());
         if ($this->output) {
             $this->cacheTags[] = 'pageId_' . $errorPage->getUid();
             return true;
         }
     }
     return false;
 }
 /**
  * @test
  */
 public function handleErrorReturnsTrueIfPageIsFound()
 {
     $expected = 'Error 404';
     /** @var \R3H6\Error404page\Domain\Model\Error $errorFixture */
     $errorFixture = new Error();
     /** @var \R3H6\Error404page\Domain\Model\Error $pageMock */
     $pageMock = $this->getPageMock(404, 'test');
     $this->pageRepositoryMock->expects($this->once())->method('find404PageForError')->with($errorFixture)->will($this->returnValue($pageMock));
     $this->httpServiceMock->expects($this->once())->method('readUrl')->with($this->equalTo('test'))->will($this->returnValue($expected));
     $this->assertTrue($this->subject->handleError($errorFixture));
     $this->assertSame($expected, $this->subject->getCachingData());
     $this->assertContains('pageId_404', $this->subject->getCacheTags());
 }
 /**
  * @inherit
  */
 public function handleError(\R3H6\Error404page\Domain\Model\Error $error)
 {
     if ($error->getStatusCode() !== Error::STATUS_CODE_FORBIDDEN) {
         return false;
     }
     if (!$error->getPid()) {
         return false;
     }
     if ($this->frontendUser->isLoggedIn()) {
         return false;
     }
     /** @var \R3H6\Error404page\Configuration\PageTsConfig $pageTsConfig */
     $pageTsConfig = $this->pageTsConfigManager->getPageTsConfig($error->getPid());
     $parameter = (string) $pageTsConfig->get('redirectError403To');
     if ($parameter === 'auto') {
         $loginPage = $this->pageRepository->findLoginPageForError($error);
         if ($loginPage !== null) {
             $parameter = (string) $loginPage->getUid();
         } else {
             $parameter = null;
         }
     }
     if (MathUtility::canBeInterpretedAsInteger($parameter)) {
         $this->cacheTags[] = 'pageId_' . $parameter;
         if ($this->frontendController->isDefaultType() === false) {
             $parameter .= ',' . $this->frontendController->getType();
         }
         if ($this->frontendController->isDefaultLanguage() === false || $this->frontendController->isDefaultGetVar('L') === true) {
             $parameter .= ' - - - &L=' . $this->frontendController->getSystemLanguageUid();
         }
     }
     $this->getLogger()->debug(sprintf('Redirect parameter "%s"', $parameter));
     if ($parameter) {
         $this->redirect = '';
         $this->redirect .= $this->frontendController->typoLink(array('parameter' => $parameter, 'forceAbsoluteUrl' => true));
         $this->redirect .= strpos($this->redirect, '?') === false ? '?' : '&';
         $this->redirect .= 'redirect_url=' . $error->getUrl();
         return true;
     }
     return false;
 }
 /**
  * @test
  */
 public function find404PageForErrorWillReturnLocalizedErrorPage()
 {
     /** @var \R3H6\Error404page\Domain\Model\Error $errorFixture */
     $errorFixture = $this->createError();
     $errorFixture->setLanguage(1);
     $pageRepository = $this->getInaccessibleProperty($this->pageRepository, 'pageRepository');
     $pageRepository->sys_language_uid = 1;
     $this->importDataSet('pages');
     $this->importDataSet('sys_language');
     $this->importPageRecord(array('uid' => 400, 'title' => 'Error Page', 'pid' => 1, 'doktype' => 104));
     $this->importPageLanguageOverlayRecord(array('uid' => 1, 'title' => 'Fehler Seite', 'pid' => 400, 'doktype' => 104, 'sys_language_uid' => 1, 't3_origuid' => 0));
     $errorPage = $this->pageRepository->find404PageForError($errorFixture);
     $this->assertInstanceOf('R3H6\\Error404page\\Domain\\Model\\Page', $errorPage);
     $this->assertEquals('Fehler Seite', $errorPage->getTitle(), 'Wrong page found!');
 }
 public function handleErrorFindsLoginPageWhenConfigurationIsAuto()
 {
     $expected = 'http://www.typo3.org/login/';
     /** @var \R3H6\Error404page\Domain\Model\Error $errorFixture */
     $errorFixture = $this->getErrorFixture();
     /** @var \R3H6\Error404page\Domain\Model\Error $pageFixture */
     $pageFixture = new Page(array('uid' => 123, 'pid' => 1));
     $this->mockPageTsConfig($errorFixture, 'auto');
     $this->pageRepositoryMock->expects($this->once())->method('findLoginPageForError')->with($errorFixture)->will($this->returnValue(null));
     $this->frontendControllerMock->expects($this->once())->method('typoLink')->with($this->equalTo(array('parameter' => '123', 'forceAbsoluteUrl' => true)))->will($this->returnValue($expected));
     $return = $this->subject->handleError($errorFixture);
     $this->assertStringStartsWith($expected, $this->subject->getCachingData());
     $this->assertStringEndsWith('?redirect_url=' . $errorFixture->getUrl(), $this->subject->getCachingData());
     $this->assertContains('pageId_123', $this->subject->getCacheTags(), 'Invalid cache tags');
     $this->assertTrue($return, 'Error handler shoudl return true');
 }