funder_field-1.1.0-alpha1/src/Form/FunderFieldUninstallValidatorForm.php

src/Form/FunderFieldUninstallValidatorForm.php
<?php
namespace Drupal\funder_field\Form;

use Drupal\Core\Form\FormStateInterface;
use Drupal\field\Entity\FieldConfig;
use Symfony\Component\HttpFoundation\RedirectResponse;

class FunderFieldUninstallValidatorForm extends \Drupal\Core\Form\ConfigFormBase
{
  /**
   * @var ItemsToDelete
   */
  protected $items_to_delete;

  /**
   * {@interitdoc}
   */
  public function getFormId() {
    return 'funder_field_uninstall_settings';
  }

  /**
   * {@interitdoc}
   */
  protected function getEditableConfigNames() {
    return [
      'funder_field.uninstall_settings'
    ];
  }

  /**
   * Shows the fields that are required to be deleted before the funder field can be unstallled
   *
   * {@interitdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $weight = 0;
    $form['title'] = [
      '#markup' => $this->t('<div><b>FUNDER FIELDS</b></div>'),
      '#weight' => $weight++,
    ];
    $form['break1'] = [
      '#markup' => '<hr>',
      '#weight' => $weight++,
    ];

    $entityTypeManager = \Drupal::service('entity_type.manager');
    $contentTypes = $entityTypeManager->getStorage('node_type')->loadMultiple();
    foreach ($contentTypes as $contentType) {
      $type = $contentType->id();
      $fields = array_filter(
        \Drupal::service('entity_field.manager')->getFieldDefinitions('node', $type),
        function ($fieldDefinition) {
          return $fieldDefinition instanceof \Drupal\field\FieldConfigInterface;
        }
      );

      // String to search in entity_reference_revisions
      $searchStr = 'funder';
      foreach ($fields as $key => $definition) {
        if($definition->getType() == "funder_field") {
          $this->items_to_delete[$type][] = $key;
        }

        if($definition->getType() == "entity_reference_revisions" && str_contains($key, $searchStr)) {
          $this->items_to_delete[$type][] = $key;
        }
      }
    }

    $body = "<br/><ul>";
    if(isset($this->items_to_delete)) {
      foreach ($this->items_to_delete as $type => $fieldsArray) {
        foreach ($fieldsArray as $fieldName) {
          $body .= "<li> $fieldName ($type) </li>";
        }
      }
    }
    $body .= "</ul>";
    $form['body'] = [
      '#markup' => $this->t("<div>

        $body<br/>
        This action cannot be undone.<br/>
        Make a backup of your database if you want to be able to restore these items.
        </div>"),
      '#weight' => $weight++,
    ];

    $form['actions']['submit_cancel'] = [
      '#type' => 'submit',
      '#weight' => $weight++,
      '#value' => t('Cancel'),
      '#submit' => [[static::class, '_custom_form_cancel']],
      '#limit_validation_errors' => [],
    ];

    return parent::buildForm($form, $form_state);
  }

  /**
   * Cancel Button on the form
   * {@interitdoc}
   */
  public static function _custom_form_cancel(array &$form, FormStateInterface $form_state) {
    $host = \Drupal::request()->getSchemeAndHttpHost();
    $path = $host.'/admin/modules/uninstall';
    $response = new RedirectResponse($path);
    $response->send();
    return;
  }

  /**
   * On submit, execute delete operation of the fields shown on form
   * {@interitdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state)
  {
    // Deleting field.
    // FieldConfig::loadByName('node', 'page', 'field_funder_page')->delete();

    // Deleting field storage.
    // FieldStorageConfig::loadByName('node', 'field_funder2')->delete();

    $is_deleted = FALSE;

    if(isset($this->items_to_delete)) {
      foreach ($this->items_to_delete as $type => $fieldsArray) {
        foreach ($fieldsArray as $fieldName) {
          $is_deleted = TRUE;
          $field = FieldConfig::loadByName('node', $type, $fieldName);
          if ($field) {
            // Delete field.
            $field->delete();
          }
        }
      }

      if($is_deleted) {
        // Run cron job to clean up the fields
        $cron = \Drupal::service('cron');
        $cron->run();
      }

      $this->messenger()->addMessage($this->t('All funder fields deleted'));
    }
    else {
      $this->messenger()->addMessage($this->t('Nothing to delete'));
    }

    $host = \Drupal::request()->getSchemeAndHttpHost();
    $path = $host.'/drupal/admin/modules/uninstall';
    $response = new RedirectResponse($path);
    $response->send();
    return;

    parent::submitForm($form, $form_state);
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc