protected function filterMustBeCleared($options)
 {
     $current_path = $this->getComparisonPath($this->request->params);
     $referer_path = $this->getComparisonPath(Router::parse($this->request->referer(true)));
     if ($current_path == $referer_path) {
         return false;
     } else {
         $plugin = isset($this->request->params['plugin']) ? $this->request->params['plugin'] : null;
         $prefix = isset($this->request->params['prefix']) ? $this->request->params['prefix'] : null;
         $controller = $this->request->params['controller'];
         $action = $this->request->params['action'];
         $pass = isset($this->request->params['pass']) ? $this->request->params['pass'] : [];
         $query = isset($this->request->params['?']) ? $this->request->params['?'] : [];
         $referer = Router::parse($this->request->referer(true));
         $referer_plugin = isset($referer['plugin']) ? $referer['plugin'] : null;
         $referer_prefix = isset($referer['prefix']) ? $referer['prefix'] : null;
         $referer_controller = $referer['controller'];
         $referer_action = $referer['action'];
         $referer_pass = isset($referer['pass']) ? $referer['pass'] : [];
         $referer_query = isset($referer['?']) ? $referer['?'] : [];
         if ($plugin == $referer_plugin && $prefix == $referer_prefix && $controller == $referer_controller) {
             if (isset($options['keep_filter_actions']) && is_array($options['keep_filter_actions'])) {
                 if (in_array($referer_action, $options['keep_filter_actions'])) {
                     return false;
                 }
             }
         }
     }
     return true;
 }
 /**
  * Test referer() with a base path that duplicates the
  * first segment.
  *
  * @return void
  */
 public function testRefererBasePath()
 {
     $request = new Request('some/path');
     $request->url = 'users/login';
     $request->webroot = '/waves/';
     $request->base = '/waves';
     $request->here = '/waves/users/login';
     $request->env('HTTP_REFERER', Configure::read('App.fullBaseUrl') . '/waves/waves/add');
     $result = $request->referer(true);
     $this->assertSame('/waves/add', $result);
 }
Exemple #3
0
 /**
  * Returns the referring URL for this request.
  *
  * @param string|null $default Default URL to use if HTTP_REFERER cannot be read from headers
  * @param bool $local If true, restrict referring URLs to local server
  * @return string Referring URL
  */
 public function referer($default = null, $local = false)
 {
     if (!$this->request) {
         return Router::url($default, !$local);
     }
     $referer = $this->request->referer($local);
     if ($referer === '/' && $default && $default !== $referer) {
         return Router::url($default, !$local);
     }
     return $referer;
 }
Exemple #4
0
 /**
  * Returns the referring URL for this request.
  *
  * @param string|array|null $default Default URL to use if HTTP_REFERER cannot be read from headers
  * @param bool $local If true, restrict referring URLs to local server
  * @return string Referring URL
  */
 public function referer($default = null, $local = false)
 {
     if (!$this->request) {
         return Router::url($default, !$local);
     }
     $referer = $this->request->referer($local);
     if ($referer === '/' && $default && $default !== $referer) {
         $url = Router::url($default, !$local);
         if ($local && $this->request->base && strpos($url, $this->request->base) === 0) {
             $url = substr($url, strlen($this->request->base));
             if ($url[0] !== '/') {
                 $url = '/' . $url;
             }
             return $url;
         }
         return $url;
     }
     return $referer;
 }