ifthenelse-8.x-1.x-dev-no-core/modules/contrib/if_then_else/src/core/IfthenelseUtilities.php
modules/contrib/if_then_else/src/core/IfthenelseUtilities.php
<?php namespace Drupal\if_then_else\core; use Drupal\field\Entity\FieldConfig; use Drupal\Core\Entity\ContentEntityType; use Drupal\Core\Form\FormInterface; /** * Class defined to have common functions for ifthenelse rules processing. */ class IfthenelseUtilities { /** * Check if form class is valid. * * @param string $form_class * Form Class name to be validated. * * @return bool * Return if form class is valid or not. */ public static function validateFormClass($form_class) { if (is_string($form_class) && class_exists($form_class)) { // Generating class object from class string name to compare // if it is instance of FormInterface. $other_form_class = \Drupal::classResolver($form_class); if (is_object($other_form_class) && ($other_form_class instanceof FormInterface)) { return TRUE; } } return FALSE; } /** * Get content entities and bundles. * * @return array * Return array of Content entities and their bundles */ public function getContentEntitiesAndBundles() { static $content_entity_types = []; if (empty($content_entity_types)) { // Fetching all entities. $entity_type_definitions = \Drupal::entityTypeManager()->getDefinitions(); $bundle_info = \Drupal::service("entity_type.bundle.info")->getAllBundleInfo(); /* @var $definition EntityTypeInterface */ foreach ($entity_type_definitions as $definition) { // Checking if the entity is of type content. if ($definition instanceof ContentEntityType) { $entity_id = $definition->id(); $content_entity_types[$entity_id]['entity_id'] = $entity_id; $content_entity_types[$entity_id]['label'] = $definition->getLabel()->__toString(); // Fetching all bundles of entity. $entity_bundles = $bundle_info[$entity_id]; // Getting label of each bundle of an entity. foreach ($entity_bundles as $bundle_id => $bundle) { if (is_object($bundle['label'])) { $content_entity_types[$entity_id]['bundles'][$bundle_id]['label'] = $bundle['label']->__toString(); } elseif (!is_object($bundle['label']) && !is_array($bundle['label'])) { $content_entity_types[$entity_id]['bundles'][$bundle_id]['label'] = $bundle['label']; } $content_entity_types[$entity_id]['bundles'][$bundle_id]['bundle_id'] = $bundle_id; } } } } return $content_entity_types; } /** * Get list of fields by entity and bundle id. * * @param array $content_entity_types * List of content entities and bundles. * @param string $return_type * Type of field. * * @return array * List of fields associated with bundle. */ public function getFieldsByEntityBundleId(array $content_entity_types, $return_type = 'field') { static $listFields = []; static $field_type = []; static $extra_fields_name = ['title', 'status', 'uid']; if (empty($listFields)) { $entity_field_manager = \Drupal::service('entity_field.manager'); foreach ($content_entity_types as $entity) { $entity_id = $entity['entity_id']; if ($entity_id == 'user') { $extra_fields_name = array_merge($extra_fields_name, ['name', 'mail']); } foreach ($entity['bundles'] as $bundle_id => $bundle) { $fields = $entity_field_manager->getFieldDefinitions($entity_id, $bundle_id); foreach ($fields as $field_name => $field_definition) { if (!empty($field_definition->getTargetBundle()) || in_array($field_name, $extra_fields_name)) { // List of all fields in an entity bundle. $listFields[$field_name]['name'] = $field_definition->getLabel(); if (is_object($listFields[$field_name]['name'])) { $listFields[$field_name]['name'] = $listFields[$field_name]['name']->__toString(); } if ($field_name == 'status') { $listFields[$field_name]['name'] = t('Status'); } $listFields[$field_name]['code'] = $field_name; $listFields[$field_name]['entity_bundle']['entity'][$entity_id] = ['code' => $entity_id, 'name' => $entity['label']]; $listFields[$field_name]['entity_bundle'][$entity_id]['bundle'][] = ['code' => $bundle_id, 'name' => $bundle['label']]; $field_type[$entity_id][$field_name] = $field_definition->getType(); } } } } // Converting it to non associative array for working with // Vuejs multiselect. $listFieldsAssoc = $listFields; $listFields = []; $i = 0; foreach ($listFieldsAssoc as $field) { if ($field['name'] == 'Menu link title') { $field['name'] = 'Title'; } $listFields[$i]['name'] = $field['name']; $listFields[$i]['code'] = $field['code']; $listFields[$i]['entity_bundle'] = $field['entity_bundle']; $k = 0; foreach ($listFields[$i]['entity_bundle']['entity'] as $ekey => $entity) { $listFields[$i]['entity_bundle']['entity'][$k] = $entity; unset($listFields[$i]['entity_bundle']['entity'][$ekey]); $k++; } $i++; } } if ($return_type == 'field') { return $listFields; } elseif ($return_type == 'field_type') { return $field_type; } } /** * Get Entity and Bundle list by Field name. */ public function getEntityByFieldName($fields) { foreach ($fields as $field) { $fieldentity[$field['code']] = $field['entity_bundle']; } return $fieldentity; } /** * Get a specific field by entity, bundle id and field id. * * @param string $entity_id * Content Entity id. * @param string $bundle_id * Bundle id whose fields to be fetched. * @param string $field_name * Field name. * * @return array * Field definition and info for a specific field. */ public function getFieldInfoByEntityBundleId($entity_id, $bundle_id, $field_name) { // Get field definitation. $field = FieldConfig::loadByName($entity_id, $bundle_id, $field_name); $field_type = $field->getType(); // List text type of field. if ($field_type == 'list_string') { $field_settings = $field->getFieldStorageDefinition()->getSettings(); foreach ($field_settings['allowed_values'] as $key => $value) { $field_value[] = [ 'key' => $key, 'name' => $value, ]; } $field_type = 'select-input'; $field_label = $field->getLabel(); } // Plain text type of field. if ($field_type == 'string') { $field_value = ''; $field_type = 'text-input'; $field_label = $field->getLabel(); } // Plain text type of field. if ($field_type == 'text_with_summary') { $field_value = ''; $field_type = 'textarea-input'; $field_label = $field->getLabel(); } // Date field. if ($field_type == 'datetime') { $field_value = ''; $field_type = 'textdate-input'; $field_label = $field->getLabel(); } // Entity reference field. if ($field_type == 'entity_reference') { $target_entity = $field->getSettings()['target_type']; $bundles = $field->getSettings()['handler_settings']['target_bundles']; $list_query = \Drupal::entityQuery($target_entity) ->condition('status', 1); if ($target_entity == 'taxonomy_term') { $list_query->condition('vid', $bundles, "IN"); } elseif ($target_entity == 'node') { $list_query->condition('type', $bundles, 'IN'); } $nids = $list_query->execute(); $entities = \Drupal::entityTypeManager()->getStorage($target_entity)->loadMultiple($nids); $field_value = []; $i = 0; foreach ($entities as $entity) { $field_value[$i]['key'] = $entity->id(); if ($target_entity == 'taxonomy_term') { $field_value[$i]['name'] = $entity->getName(); } elseif ($target_entity == 'node') { $field_value[$i]['name'] = $entity->getTitle(); } elseif ($target_entity == 'user') { $field_value[$i]['name'] = $entity->getAccountName(); } $i++; } if ($target_entity == 'node') { $field_type = 'contentreference-input'; } elseif ($target_entity == 'taxonomy_term') { $field_type = 'taxonomyreference-input'; } elseif ($target_entity == 'user') { $field_type = 'userreference-input'; } $field_label = $field->getLabel(); } // Boolean type of field. if ($field_type == 'boolean') { $field_value = ''; $field_type = 'boolean-input'; $field_label = $field->getLabel(); } // Boolean type of field. if ($field_type == 'email') { $field_value = ''; $field_type = 'email-input'; $field_label = $field->getLabel(); } // Boolean type of field. if ($field_type == 'link') { $field_value = ''; $field_type = 'text-input'; $field_label = $field->getLabel(); } $field_info['type'] = $field_type; $field_info['field_name'] = $field_name; $field_info['value'] = $field_value; $field_info['field_label'] = $field_label; // Cardinality of field. $cardinality = $field->getFieldStorageDefinition()->getCardinality(); $field_info['cardinality'] = $cardinality; return $field_info; } /** * Get form fields by form class. * * @param string $form_class * Form class name which extends FormInterface class. * * @return array * List of fields in form. */ public function getFieldsByFormClass($form_class) { $listFields = []; if (is_string($form_class) && class_exists($form_class)) { // Generating class object from class string name to compare // if it is instance of FormInterface. $other_form_class = \Drupal::classResolver($form_class); if (!is_object($other_form_class) || !($other_form_class instanceof FormInterface)) { // @todo // exception if the form class entered is wrong. } else { $other_form = \Drupal::formBuilder()->getForm($form_class); // Iterate all keys of form array. foreach ($other_form as $field_name => $field) { // Skip all keys which starts with #. they are not fields. if (strpos($field_name, '#') === FALSE) { if ($field['#type'] == 'hidden' || $field['#type'] == 'token' || $field['#type'] == 'actions' || $field['#type'] == 'details' ||$field['#type'] == 'vertical_tabs') { // Skip all keys which can't be made required. continue; } if ($field['#type'] == 'container') { if (isset($field['widget'])) { foreach ($field['widget'] as $k => $value) { if (strpos($k, '#') !== FALSE) { // Skip all keys which have #. continue; } // If title is translatable object. if (is_object($field['widget'][$k]['#title'])) { $listFields[$field_name]['name'] = $field['widget'][$k]['#title']->__toString(); } elseif (is_string($field['widget'][$k]['#title'])) { $listFields[$field_name]['name'] = $field['widget'][$k]['#title']; } $listFields[$field_name]['code'] = $field_name; } } } else { if (is_object($field['#title'])) { $listFields[$field_name]['name'] = $field['#title']->__toString(); } elseif (is_string($field['#title'])) { $listFields[$field_name]['name'] = $field['#title']; } $listFields[$field_name]['code'] = $field_name; } } } } } return $listFields; } /** * Get views name and Display ID list. */ public function getViewsNameAndDisplay() { $query = \Drupal::entityQuery('view') ->condition('status', TRUE); $views_ids = $query->execute(); $views = \Drupal::entityTypeManager()->getStorage('view')->loadMultiple($views_ids); static $views_lists = []; foreach ($views as $view) { $views_lists[$view->id()]['id'] = $view->id(); $views_lists[$view->id()]['label'] = $view->label(); foreach ($view->get('display') as $dislay) { $views_lists[$view->id()]['display'][$dislay['id']]['id'] = $dislay['id']; $views_lists[$view->id()]['display'][$dislay['id']]['label'] = $dislay['display_title']; } } return $views_lists; } }