ifthenelse-8.x-1.x-dev-no-core/modules/contrib/if_then_else/src/core/Nodes/Conditions/FormCondition/FormCondition.php
modules/contrib/if_then_else/src/core/Nodes/Conditions/FormCondition/FormCondition.php
<?php
namespace Drupal\if_then_else\core\Nodes\Conditions\FormCondition;
use Drupal\Core\Form\FormState;
use Drupal\if_then_else\core\IfthenelseUtilities;
use Drupal\if_then_else\core\Nodes\Conditions\Condition;
use Drupal\if_then_else\Event\NodeSubscriptionEvent;
use Drupal\if_then_else\Event\NodeValidationEvent;
/**
* Class defined to process make all fields required action.
*/
class FormCondition extends Condition {
/**
* Return name of node.
*/
public static function getName() {
return 'form_class_condition';
}
/**
* Event subscriber for form condition node.
*/
public function registerNode(NodeSubscriptionEvent $event) {
// Calling custom service for if then else utilities. To
// fetch values of entities and bundles.
$if_then_else_utilities = \Drupal::service('ifthenelse.utilities');
$form_entity_info = $if_then_else_utilities->getContentEntitiesAndBundles();
$event->nodes[static::getName()] = [
'label' => t('Form Class'),
'type' => 'condition',
'class' => 'Drupal\\if_then_else\\core\\Nodes\\Conditions\\FormCondition\\FormCondition',
'library' => 'if_then_else/FormCondition',
'control_class_name' => 'FormIdControl',
'entity_info' => $form_entity_info,
'inputs' => [
'form_state' => [
'label' => t('Form State'),
'description' => t('Form state object.'),
'sockets' => ['form_state'],
],
],
'outputs' => [
'success' => [
'label' => t('Success'),
'description' => t('Did the condition pass?'),
'socket' => 'bool',
],
],
];
}
/**
* Validate Form condition node.
*/
public function validateNode(NodeValidationEvent $event) {
$node = $event->node;
// Make sure that form class is not empty and that it exists.
if (!array_key_exists('selected_entity', (array) $node->data) || !$node->data->selected_entity) {
$event->errors[] = t('Select entity / bundle of the form that you want to filter in "@node_name".', ['@node_name' => $node->name]);
}
elseif ($node->data->selected_entity->value == 'other_form') {
$form_class = $node->data->otherFormClass;
$valid_form = IfthenelseUtilities::validateFormClass($form_class);
if (!$valid_form) {
$event->errors[] = t('Form class "@form_class" provided in "@node_name either does not exist or is not an instance of FormInterface.', [
'@form_class' => $form_class,
'@node_name' => $node->name,
]);
}
}
elseif (!array_key_exists('selected_bundle', (array) $node->data) || !$node->data->selected_bundle) {
$event->errors[] = t('Select bundle of the form that you want to filter in "@node_name".', ['@node_name' => $node->name]);
}
}
/**
* Process Form condition node.
*/
public function process() {
$form_id_matched = FALSE;
$data = $this->data;
/** @var \Drupal\Core\Form\FormState $form_state */
$form_state = $this->inputs['form_state'];
$form_id = $form_state->getBuildInfo()['form_id'];
if (isset($data->selected_entity->value) && $data->selected_entity->value == 'other_form') {
// It is a form class so get the form id using form class.
$form_state = new FormState();
$formId_from_class = \Drupal::formBuilder()->getFormId($data->otherFormClass, $form_state);
if ($formId_from_class == $form_id) {
$form_id_matched = TRUE;
}
}
elseif (isset($data->selected_entity->value) && $data->selected_entity->value != 'other_form') {
// It is content entity so get the form id using it.
$form_object = $form_state->getFormObject();
// Checking if form is a entity form.
if (method_exists($form_object, 'getEntity')) {
$form_entity_id = $form_state->getFormObject()->getEntity()->getEntityTypeId();
$form_bundle_id = $form_state->getFormObject()->getEntity()->bundle();
if ($form_entity_id == $data->selected_entity->value && $form_bundle_id == $data->selected_bundle->value) {
$form_id_matched = TRUE;
}
}
}
$this->outputs['success'] = $form_id_matched;
}
}
