예제 #1
0
 /**
  * If the Garden.PrivateCommunity config setting is enabled,
  * then bypass the sign-in redirection and let the Basic Pages
  * view permission logic handle the redirection for
  * pages requested by guests.
  *
  * @param $Sender Gdn_Dispatcher
  */
 public function Gdn_Dispatcher_BeforeBlockDetect_Handler($Sender)
 {
     if (C('Garden.PrivateCommunity', false)) {
         $BlockExceptions =& $Sender->EventArguments['BlockExceptions'];
         $PathRequest = Gdn::Request()->Path();
         $PageModel = new PageModel();
         // Handle path requests that match "page/urlcode"
         $PathMatch = 'page/';
         if (substr($PathRequest, 0, strlen($PathMatch)) === $PathMatch) {
             $Page = $PageModel->GetByUrlCode(substr($PathRequest, strlen($PathMatch), strlen($PathRequest)));
             // Only bypass Garden.PrivateCommunity redirection if custom page view permission is enabled.
             if (isset($Page->ViewPermission) && (bool) $Page->ViewPermission) {
                 $BlockExceptions['/^page(\\/.*)?$/'] = Gdn_Dispatcher::BLOCK_NEVER;
             }
         } else {
             if (!strstr($PathRequest, '/')) {
                 // NOTE: Increases overhead every time the Dispatch method is called.
                 //       There is room for optimization to be done here.
                 //
                 // Handle path requests which don't contain a forward slash
                 // because the request could possibly be for a page with
                 // a path of "urlcode"
                 $Page = $PageModel->GetByUrlCode($PathRequest);
                 // Only bypass Garden.PrivateCommunity redirection if custom page view permission is enabled.
                 if (isset($Page->ViewPermission) && (bool) $Page->ViewPermission) {
                     $BlockExceptions['/^' . $PathRequest . '(\\/.*)?$/'] = Gdn_Dispatcher::BLOCK_NEVER;
                 }
             }
         }
     }
 }