Esempio n. 1
0
 /**
  * Automatically locates the ViewModel for the configured template, unless a response has already been generated.
  * 
  * @access  public
  * @return  Response
  */
 public function after($response)
 {
     // If a response has been provided, just go with it
     if (!is_null($response)) {
         return $response;
     }
     if ($this->status == 404) {
         return $this->show404();
     }
     // Get the model - this will have previously been found
     if (is_null($this->model)) {
         $this->model = \CMF::currentModel();
     }
     if (!isset($this->template)) {
         // Try and find the template from the CMF...
         $this->template = \CMF::$template;
     }
     if (is_null($this->template)) {
         return $this->show404();
     }
     // Determine whether the ViewModel class exists...
     if ($viewClass = \CMF::hasViewModel($this->template)) {
         $viewModel = new $viewClass('view', false, $this->template);
         $this->bindData($viewModel);
         return \Response::forge($viewModel, $this->status, $this->headers);
     }
     try {
         $viewClass = ucfirst(\CMF::$module) . '\\View_Base';
         if (!class_exists($viewClass)) {
             $viewClass = '\\View_Base';
         }
         $viewModel = new $viewClass('view', false, $this->template);
         $this->bindData($viewModel);
         return \Response::forge($viewModel, $this->status, $this->headers);
     } catch (\Exception $e) {
         return $this->show404("The template '" . $this->template . "' couldn't be found!");
     }
 }
Esempio n. 2
0
 /**
  * Tries to render an error response from a custom template, falling back to the default one
  */
 public static function getCustomErrorResponse($message = null, $code = 500, $default_template = 'errors/http.twig')
 {
     $view = null;
     $template = 'errors/' . $code . '.twig';
     $status = \Arr::get(\Response::$statuses, $code, 'Internal Server Error');
     $data = array('code' => $code, 'status' => $status, 'model' => null, 'message' => $message ? $message : \Lang::get("site.errors.http.{$code}", array('resource' => 'page'), \Lang::get("site.errors.http.default", array('resource' => 'page'), $status)));
     // First try the specific error page
     try {
         if ($viewClass = \CMF::hasViewModel($template)) {
             $view = new $viewClass('view', false, $template);
         } else {
             $viewClass = ucfirst(\CMF::$module) . '\\View_Base';
             if (!class_exists($viewClass)) {
                 $viewClass = '\\View_Base';
             }
             $view = new $viewClass('view', false, $template);
         }
         $view->set($data);
         $view = $view->render();
     } catch (\Exception $e) {
         $view = null;
     }
     // Then try the provided default template
     if (!$view) {
         try {
             if ($viewClass = \CMF::hasViewModel($default_template)) {
                 $view = new $viewClass('view', false, $default_template);
             } else {
                 $viewClass = ucfirst(\CMF::$module) . '\\View_Base';
                 if (!class_exists($viewClass)) {
                     $viewClass = '\\View_Base';
                 }
                 $view = new $viewClass('view', false, $default_template);
             }
             $view->set($data);
             $view = $view->render();
         } catch (\Exception $e) {
             $view = null;
         }
     }
     // Then try the above, without the view models
     if (!$view) {
         try {
             $view = \View::forge($template, $data);
         } catch (\Exception $e) {
             $view = null;
         }
     }
     if (!$view) {
         try {
             $view = \View::forge($default_template, $data);
         } catch (\Exception $e) {
             $view = null;
         }
     }
     // If all the above hasn't worked, we can always fall back to the system template!
     if (!$view) {
         $view = \View::forge('errors/http', $data);
     }
     return new \Response($view, $code);
 }
Esempio n. 3
0
 /**
  * Loops through the provided nocache names and injects their executed values
  * into the content
  * 
  */
 public static function addNoCacheAreas($names, $content, $context)
 {
     if (count($names) === 0 || !$names) {
         return $content;
     }
     static::$modified = true;
     // Set up the twig environment for rendering the non-cached parts
     \View_Twig::initLoader();
     $env = \View_Twig::parser();
     $template = new \CMF\Twig\TemplateInclude($env);
     if (empty($context)) {
         $context = array();
     }
     if (!empty($context['template'])) {
         $module = @$context['module'];
         // Determine whether the ViewModel class exists...
         if ($viewClass = \CMF::hasViewModel($context['template'])) {
             $context['view'] = new $viewClass('view', false, $context['template']);
         } else {
             try {
                 $viewClass = ucfirst($module) . '\\View_Base';
                 if (!class_exists($viewClass)) {
                     $viewClass = '\\View_Base';
                 }
                 $context['view'] = new $viewClass('view', false, $context['template']);
             } catch (\Exception $e) {
             }
         }
     }
     foreach ($names as $name => $include) {
         $content = preg_replace('/<!-- nocache_' . $name . ' .*<!-- endnocache_' . $name . ' -->/sU', $template->renderInclude($include, $context), $content);
     }
     return $content;
 }