/** * {@inheritdoc} */ public function get() { if (!isset($this->destination)) { $query = $this->requestStack->getCurrentRequest()->query; if (UrlHelper::isExternal($query->get('destination'))) { $this->destination = '/'; } elseif ($query->has('destination')) { $this->destination = $query->get('destination'); } else { $this->destination = $this->urlGenerator->generateFromRoute('<current>', [], ['query' => UrlHelper::buildQuery(UrlHelper::filterQueryParameters($query->all()))]); } } return $this->destination; }
/** * Tests UrlHelper::filterQueryParameters(). */ function testDrupalGetQueryParameters() { $original = array('a' => 1, 'b' => array('d' => 4, 'e' => array('f' => 5)), 'c' => 3); // First-level exclusion. $result = $original; unset($result['b']); $this->assertEqual(UrlHelper::filterQueryParameters($original, array('b')), $result, "'b' was removed."); // Second-level exclusion. $result = $original; unset($result['b']['d']); $this->assertEqual(UrlHelper::filterQueryParameters($original, array('b[d]')), $result, "'b[d]' was removed."); // Third-level exclusion. $result = $original; unset($result['b']['e']['f']); $this->assertEqual(UrlHelper::filterQueryParameters($original, array('b[e][f]')), $result, "'b[e][f]' was removed."); // Multiple exclusions. $result = $original; unset($result['a'], $result['b']['e'], $result['c']); $this->assertEqual(UrlHelper::filterQueryParameters($original, array('a', 'b[e]', 'c')), $result, "'a', 'b[e]', 'c' were removed."); }
/** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state, ViewExecutable $view = NULL, $output = []) { if (!($step = $form_state->get('step'))) { $step = 'views_form_views_form'; $form_state->set('step', $step); } $form_state->set(['step_controller', 'views_form_views_form'], 'Drupal\\views\\Form\\ViewsFormMainForm'); // Cache the built form to prevent it from being rebuilt prior to validation // and submission, which could lead to data being processed incorrectly, // because the views rows (and thus, the form elements as well) have changed // in the meantime. $form_state->setCached(); $form = array(); $query = $this->requestStack->getCurrentRequest()->query->all(); $query = UrlHelper::filterQueryParameters($query, array(), ''); $options = array('query' => $query); $form['#action'] = $view->hasUrl() ? $view->getUrl()->setOptions($options)->toString() : Url::fromRoute('<current>')->setOptions($options)->toString(); // Tell the preprocessor whether it should hide the header, footer, pager... $form['show_view_elements'] = array('#type' => 'value', '#value' => $step == 'views_form_views_form' ? TRUE : FALSE); $form_object = $this->getFormObject($form_state); $form += $form_object->buildForm($form, $form_state, $view, $output); return $form; }
/** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state, ViewExecutable $view = NULL, $output = []) { if (!($step = $form_state->get('step'))) { $step = 'views_form_views_form'; $form_state->set('step', $step); } $form_state->set(['step_controller', 'views_form_views_form'], 'Drupal\\views\\Form\\ViewsFormMainForm'); // Add the base form ID. $form_state->addBuildInfo('base_form_id', $this->getBaseFormId()); $form = array(); $query = $this->requestStack->getCurrentRequest()->query->all(); $query = UrlHelper::filterQueryParameters($query, array(), ''); $options = array('query' => $query); $form['#action'] = $view->hasUrl() ? $view->getUrl()->setOptions($options)->toString() : Url::fromRoute('<current>')->setOptions($options)->toString(); // Tell the preprocessor whether it should hide the header, footer, pager, // etc. $form['show_view_elements'] = array('#type' => 'value', '#value' => $step == 'views_form_views_form' ? TRUE : FALSE); $form_object = $this->getFormObject($form_state); $form += $form_object->buildForm($form, $form_state, $view, $output); return $form; }
/** * Tests query filtering. * * @dataProvider providerTestFilterQueryParameters * @covers ::filterQueryParameters * * @param array $query * The array of query parameters. * @param array $exclude * A list of $query array keys to remove. Use "parent[child]" to exclude * nested items. * @param array $expected * An array containing query parameters. */ public function testFilterQueryParameters($query, $exclude, $expected) { $filtered = UrlHelper::filterQueryParameters($query, $exclude); $this->assertEquals($expected, $filtered, 'The query was not properly filtered.'); }
/** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state, ViewExecutable $view = NULL, $output = NULL) { $form_state['step'] = isset($form_state['step']) ? $form_state['step'] : 'views_form_views_form'; $form_state['step_controller']['views_form_views_form'] = 'Drupal\\views\\Form\\ViewsFormMainForm'; // Cache the built form to prevent it from being rebuilt prior to validation // and submission, which could lead to data being processed incorrectly, // because the views rows (and thus, the form elements as well) have changed // in the meantime. $form_state['cache'] = TRUE; $form = array(); $query = $this->requestStack->getCurrentRequest()->query->all(); $query = UrlHelper::filterQueryParameters($query, array(), ''); $form['#action'] = $this->urlGenerator->generateFromPath($view->getUrl(), array('query' => $query)); // Tell the preprocessor whether it should hide the header, footer, pager... $form['show_view_elements'] = array('#type' => 'value', '#value' => $form_state['step'] == 'views_form_views_form' ? TRUE : FALSE); $form_object = $this->getFormObject($form_state); $form += $form_object->buildForm($form, $form_state, $view, $output); return $form; }
/** * Computes the destination Url for an add-to-cart action. * * Redirect Url is chosen in the following order: * - Query parameter "destination" * - Cart config variable "uc_cart.settings.add_item_redirect" * * @return \Drupal\Core\Url * A Url destination for redirection. */ protected function getAddItemRedirect() { // Check for destination= query string $query = \Drupal::request()->query; $destination = $query->get('destination'); if (!empty($destination)) { return Url::fromUri('base:' . $destination); } // Save current Url to session before redirecting // so we can go "back" here from the cart. $session = \Drupal::service('session'); $session->set('uc_cart_last_url', Url::fromRoute('<current>')->toString()); $redirect = \Drupal::config('uc_cart.settings')->get('add_item_redirect'); if ($redirect != '<none>') { return Url::fromUri('base:' . $redirect); } else { return Url::fromRoute('<current>', [], ['query' => UrlHelper::filterQueryParameters($query->all())]); } }