Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 7 |
CRAP | |
0.00% |
0 / 48 |
ViewsForm | |
0.00% |
0 / 1 |
|
0.00% |
0 / 7 |
132 | |
0.00% |
0 / 48 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 8 |
|||
getFormId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 7 |
|||
buildForm | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 18 |
|||
validateForm | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
submitForm | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
getFormObject | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\views\Form\ViewsForm. | |
*/ | |
namespace Drupal\views\Form; | |
use Drupal\Component\Utility\UrlHelper; | |
use Drupal\Core\DependencyInjection\ClassResolverInterface; | |
use Drupal\Core\DependencyInjection\ContainerInjectionInterface; | |
use Drupal\Core\DependencyInjection\DependencySerializationTrait; | |
use Drupal\Core\Form\FormInterface; | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\Core\Routing\UrlGeneratorInterface; | |
use Drupal\Core\Url; | |
use Drupal\views\ViewExecutable; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
use Symfony\Component\HttpFoundation\RequestStack; | |
/** | |
* Provides a base class for single- or multistep view forms. | |
* | |
* This class only dispatches logic to the form for the current step. The form | |
* is always assumed to be multistep, even if it has only one step (which by | |
* default is \Drupal\views\Form\ViewsFormMainForm). That way it is actually | |
* possible for modules to have a multistep form if they need to. | |
*/ | |
class ViewsForm implements FormInterface, ContainerInjectionInterface { | |
use DependencySerializationTrait; | |
/** | |
* The class resolver to get the subform form objects. | |
* | |
* @var \Drupal\Core\DependencyInjection\ClassResolverInterface | |
*/ | |
protected $classResolver; | |
/** | |
* The request stack. | |
* | |
* @var \Symfony\Component\HttpFoundation\RequestStack | |
*/ | |
protected $requestStack; | |
/** | |
* The url generator to generate the form action. | |
* | |
* @var \Drupal\Core\Routing\UrlGeneratorInterface | |
*/ | |
protected $urlGenerator; | |
/** | |
* The ID of the view. | |
* | |
* @var string | |
*/ | |
protected $viewId; | |
/** | |
* The ID of the active view's display. | |
* | |
* @var string | |
*/ | |
protected $viewDisplayId; | |
/** | |
* Constructs a ViewsForm object. | |
* | |
* @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver | |
* The class resolver to get the subform form objects. | |
* @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator | |
* The url generator to generate the form action. | |
* @param \Symfony\Component\HttpFoundation\RequestStack $requestStack | |
* The request stack. | |
* @param string $view_id | |
* The ID of the view. | |
* @param string $view_display_id | |
* The ID of the active view's display. | |
*/ | |
public function __construct(ClassResolverInterface $class_resolver, UrlGeneratorInterface $url_generator, RequestStack $requestStack, $view_id, $view_display_id) { | |
$this->classResolver = $class_resolver; | |
$this->urlGenerator = $url_generator; | |
$this->requestStack = $requestStack; | |
$this->viewId = $view_id; | |
$this->viewDisplayId = $view_display_id; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function create(ContainerInterface $container, $view_id = NULL, $view_display_id = NULL) { | |
return new static( | |
$container->get('class_resolver'), | |
$container->get('url_generator'), | |
$container->get('request_stack'), | |
$view_id, | |
$view_display_id | |
); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getFormId() { | |
$parts = array( | |
'views_form', | |
$this->viewId, | |
$this->viewDisplayId, | |
); | |
return implode('_', $parts); | |
} | |
/** | |
* {@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'); | |
$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; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function validateForm(array &$form, FormStateInterface $form_state) { | |
$form_object = $this->getFormObject($form_state); | |
$form_object->validateForm($form, $form_state); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function submitForm(array &$form, FormStateInterface $form_state) { | |
$form_object = $this->getFormObject($form_state); | |
$form_object->submitForm($form, $form_state); | |
} | |
/** | |
* Returns the object used to build the step form. | |
* | |
* @param \Drupal\Core\Form\FormStateInterface $form_state | |
* The form_state of the current form. | |
* | |
* @return \Drupal\Core\Form\FormInterface | |
* The form object to use. | |
*/ | |
protected function getFormObject(FormStateInterface $form_state) { | |
// If this is a class, instantiate it. | |
$form_step_class = $form_state->get(['step_controller', $form_state->get('step')]) ?: 'Drupal\views\Form\ViewsFormMainForm'; | |
return $this->classResolver->getInstanceFromDefinition($form_step_class); | |
} | |
} |