/**
  * @return ContentController
  */
 public function getNestedController()
 {
     $request = $this->request;
     if (!($URLSegment = $request->param('URLSegment'))) {
         throw new Exception('ModelAsController->getNestedController(): was not passed a URLSegment value.');
     }
     // Find page by link, regardless of current locale settings
     Translatable::disable_locale_filter();
     $sitetree = DataObject::get_one('SiteTree', sprintf('"URLSegment" = \'%s\' %s', Convert::raw2sql($URLSegment), SiteTree::nested_urls() ? 'AND "ParentID" = 0' : null));
     Translatable::enable_locale_filter();
     if (!$sitetree) {
         // If a root page has been renamed, redirect to the new location.
         // See ContentController->handleRequest() for similiar logic.
         $redirect = self::find_old_page($URLSegment);
         if ($redirect = self::find_old_page($URLSegment)) {
             $params = $request->getVars();
             if (isset($params['url'])) {
                 unset($params['url']);
             }
             $this->response = new SS_HTTPResponse();
             $this->response->redirect(Controller::join_links($redirect->Link(Controller::join_links($request->param('Action'), $request->param('ID'), $request->param('OtherID'))), $params ? '?' . http_build_query($params) : null), 301);
             return $this->response;
         }
         $ctrl = new Paste_Controller();
         $ctrl->request = $request;
         $paste = $ctrl->getCurrentPaste();
         if ($paste) {
             if (is_string($paste) || is_object($paste) && is_a($paste, 'SS_HTTPResponse')) {
                 return $paste;
             }
             $ctrl->init($paste);
             $response = $ctrl->handleRequest($request);
             return $response;
         }
         if ($response = ErrorPage::response_for(404)) {
             return $response;
         } else {
             $this->httpError(404, 'The requested page could not be found.');
         }
     }
     // Enforce current locale setting to the loaded SiteTree object
     if ($sitetree->Locale) {
         Translatable::set_current_locale($sitetree->Locale);
     }
     if (isset($_REQUEST['debug'])) {
         Debug::message("Using record #{$sitetree->ID} of type {$sitetree->class} with link {$sitetree->Link()}");
     }
     return self::controller_for($sitetree, $this->request->param('Action'));
 }
예제 #2
0
 public function getCurrentPaste()
 {
     if (empty(self::$current_paste)) {
         $id = trim($this->request->getVar('url'), '/');
         if (strpos($id, '/') !== FALSE) {
             list($id, $func) = explode('/', $id);
             if ($id != 'Paste_Controller') {
                 $paste = DataObject::get_one('Paste', '"Filename" = \'' . Convert::raw2sql($id) . '\'');
                 if (!$paste) {
                     return FALSE;
                 }
             }
         }
         if ($id && $id != 'Paste_Controller') {
             $paste = DataObject::get_one('Paste', '"Filename" = \'' . Convert::raw2sql($id) . '\'');
         }
         if (empty($paste)) {
             $paste = new Paste();
             $paste->PHPVersionID = DataObject::get_one('PHPVersion', 'IsDefault=1')->ID;
         } else {
             $paste->Hits++;
             $paste->write();
         }
         self::$current_paste = $paste;
     }
     return self::$current_paste;
 }