public function onRoute(MvcEvent $e)
 {
     $request = $e->getRequest();
     if (!$request instanceof HttpRequest) {
         return;
     }
     $application = $e->getApplication();
     $serviceLocator = $application->getServiceManager();
     // Load the configuration for maintenance mode
     if ($serviceLocator->has('MaintenanceConfig')) {
         $config = $serviceLocator->get('MaintenanceConfig');
     } else {
         $config = new Config();
     }
     if (!$config->isEnabled()) {
         // Maintenance mode is disabled.
         return;
     }
     // Check the white list
     if ($request instanceof PhpRequest) {
         $address = $request->getServer('REMOTE_ADDR', null);
     } else {
         $address = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
     }
     if (!empty($address)) {
         if (in_array($address, $config->getWhitelist())) {
             return;
         }
     }
     // Render the maintenance layout
     $renderer = new PhpRenderer();
     if ($serviceLocator->has('ViewHelperManager')) {
         $renderer->setHelperPluginManager($serviceLocator->get('ViewHelperManager'));
     }
     $resolver = new TemplateMapResolver();
     $resolver->add('maintenance', $config->getTemplate());
     $renderer->setResolver($resolver);
     $content = $renderer->render('maintenance');
     // Set the response
     $response = $e->getResponse();
     if (!$response instanceof HttpResponse) {
         $response = new HttpResponse();
     }
     $statusCode = $config->getStatusCode();
     $response->setStatusCode($statusCode);
     if ($statusCode === 503 && !$response->getHeaders()->has('Retry-After')) {
         $retryDate = $config->getRetryAfter();
         if ($retryDate instanceof DateTime) {
             $retryAfter = new RetryAfter();
             $retryAfter->setDate($retryDate);
             $response->getHeaders()->addHeader($retryAfter);
         }
     }
     $response->setContent($content);
     $e->setResponse($response);
     // Return the response
     return $response;
 }
 public function testCanAppendMultipleEntriesAsTraversableViaAdd()
 {
     $map = array('foo/bar' => __DIR__ . '/foo/bar.phtml');
     $resolver = new TemplateMapResolver($map);
     $more = new ArrayObject(array('foo/baz' => __DIR__ . '/../foo/baz.phtml', 'baz/bat' => __DIR__ . '/baz/bat.phtml'));
     $resolver->add($more);
     $expected = array_merge($map, $more->getArrayCopy());
     $this->assertEquals($expected, $resolver->getMap());
 }
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     /* @var $config ModuleOptions */
     $config = $serviceLocator->get('ZendSmarty\\ModuleOptions');
     /* @var $orig TemplateMapResolver */
     $orig = $serviceLocator->get('ViewTemplateMapResolver');
     $suffix = '.' . $config->suffix;
     $nlen = -strlen($suffix);
     $instance = new TemplateMapResolver();
     foreach ($orig->getMap() as $name => $file) {
         if (substr($file, $nlen) === $suffix) {
             $instance->add($name, $file);
         }
     }
     return $instance;
 }
 public function testTriggersRenderErrorEventInCaseOfRenderingException()
 {
     $resolver = new TemplateMapResolver();
     $resolver->add('exception', __DIR__ . '/_files/exception.phtml');
     $this->renderer->setResolver($resolver);
     $strategy = new PhpRendererStrategy($this->renderer);
     $this->view->getEventManager()->attach($strategy);
     $model = new ViewModel();
     $model->setTemplate('exception');
     $this->event->setViewModel($model);
     $services = new ServiceManager();
     $services->setService('Request', $this->request);
     $services->setService('Response', $this->response);
     $services->setInvokableClass('SharedEventManager', 'Zend\\EventManager\\SharedEventManager');
     $services->setFactory('EventManager', function ($services) {
         $sharedEvents = $services->get('SharedEventManager');
         $events = new EventManager();
         $events->setSharedManager($sharedEvents);
         return $events;
     }, false);
     $application = new Application(array(), $services);
     $this->event->setApplication($application);
     $test = (object) array('flag' => false);
     $application->getEventManager()->attach(MvcEvent::EVENT_RENDER_ERROR, function ($e) use($test) {
         $test->flag = true;
         $test->error = $e->getError();
         $test->exception = $e->getParam('exception');
     });
     $this->strategy->render($this->event);
     $this->assertTrue($test->flag);
     $this->assertEquals(Application::ERROR_EXCEPTION, $test->error);
     $this->assertInstanceOf('Exception', $test->exception);
     $this->assertContains('script', $test->exception->getMessage());
 }