content_export_yaml-8.x-2.9/src/Form/ContentExportManagerForm.php
src/Form/ContentExportManagerForm.php
<?php namespace Drupal\content_export_yaml\Form; use Drupal\Core\Url; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Component\Serialization\Exception\InvalidDataTypeException; use Drupal\Component\Serialization\Yaml; use Drupal\Core\Config\FileStorage; use Symfony\Component\HttpFoundation\RedirectResponse; use Drupal\Core\Render\Markup; /** * Class ConfigImportForm. */ class ContentExportManagerForm extends FormBase { // /** // * {@inheritdoc} // */ protected function getEditableConfigNames() { return [ 'content_export_yaml.manage_content_yaml', ]; } /** * {@inheritdoc} */ public function getFormId() { return 'manage_content_yaml_form'; } public static function ajaxBundleCallback (array &$form, FormStateInterface $form_state){ $entity_name = $form_state->getValue('entity_name'); $bundle_list_name = \Drupal::service('entity_type.bundle.info')->getBundleInfo($entity_name); $help ='<ul>'; $help = '<li><b>Selected Entity Name : </b>'.$entity_name.'</li>' ; $help = $help.'</ul>'; $form['help']['#markup'] = $help ; $options = array_merge(['' => '-- None --'],[]); foreach( $bundle_list_name as $key => $bundle){ $options[$key] = $bundle['label']; } $form['bundle']['#options'] = $options; return $form; } public static function ajaxRangeCallback (array &$form, FormStateInterface $form_state){ $entity_name = $form_state->getValue('entity_name'); $bundle = $form_state->getValue('bundle'); $export = \Drupal::service('content_export_yaml.manager'); $count = $export->getCount($entity_name,$bundle); $help ='<ul>'; $help = '<li><b>Selected Entity Name : </b>'.$entity_name.'</li>' ; $help = $help.'<li><b>Selected Bundle Name : </b>'.$bundle.'</li>' ; $help = $help.'<li>'.$entity_name. ' with ' .$bundle.' have <b>'.$count. '</b> elements </li>'; $help = $help.'</ul>'; $form['help']['#markup'] = $help ; return $form['help']; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $form_state->setMethod('GET'); $settings = $this->config('content_export_yaml.contentexportsetting'); $export = \Drupal::service('content_export_yaml.manager'); $query = $this->getRequest()->query->all(); $path = $settings->get('path_export_content_folder'); if(!$path){ $form['help'] = [ '#type' => 'item', '#markup' => 'Please fill the path settings at first ', '#validated' => TRUE ]; } $form['#prefix'] = '<div id="entity-wrapper">'; $form['#suffix'] = '</div>'; $entity_list_name = (\Drupal::entityTypeManager()->getDefinitions()); $entity_list= array_merge(['' => '-- None --'],[]); foreach( $entity_list_name as $key => $entity_info){ $entity_list[$key] = $entity_info->getLabel(); } $form['entity_name'] = [ '#type' => 'select', '#title' => 'Select Entity Name', '#attributes' => ['name' => 'entity_name'], '#options' => $entity_list, '#validated' => TRUE, '#ajax' => [ 'callback' => [static::class, 'ajaxBundleCallback'] , 'method' => 'replace', 'wrapper' => ['entity-wrapper'] ] ]; $form['entity_name']['#disabled'] = FALSE; $bundle_list = ['' => 'none']; $form['bundle'] = [ '#attributes' => ['name' => 'bundle'], '#type' => 'select', '#title' => 'Select Bundle name', '#validated' => TRUE, '#options' => $bundle_list, '#ajax' => [ 'callback' => [static::class, 'ajaxRangeCallback'] , 'method' => 'replace', 'wrapper' => ['entity-wrapper-help'] ] ]; if(!isset($query['ajax_form']) && isset($query['op']) && $query['op']=='Export'){ $status_range = false ; if(isset($query['range']) && $query['range'] != ''){ $range = trim($query['range']); $range_array = explode('-',$range); if(sizeof( $range_array ) == 2 && is_numeric($range_array[0]) && is_numeric($range_array[1]) && $range_array[1] > 0 && $range_array[0] > 0 && $range_array[0] < $range_array[1]){ $status_range = true ; }else{ \Drupal::messenger()->addMessage(t('Range number is not correct format :'. $range ), 'error'); return new RedirectResponse(Url::fromRoute('content_export_yaml.manage_content_yaml_form')->toString()); } } $config = $this->config('content_export_yaml.contentexportsetting'); $root = $config->get('path_export_content_folder'); $entity_name = $query['entity_name']; $export = \Drupal::service('content_export_yaml.manager'); if(!empty($status_range)) { $results = $export->func->load_entity_list_range($entity_name,$query['bundle'], $range_array); } else{ $results = $export->func->load_entity_list($entity_name, $query['bundle']); } $object = \Drupal::entityTypeManager()->getStorage($entity_name); $batch = [ 'title' => $this->t('Export Content ...'), 'operations' => [], 'init_message' => $this->t('Starting ..'), 'progress_message' => $this->t('Processd @current out of @total.'), 'error_message' => $this->t('An error occurred during processing.'), 'finished' => '\Drupal\content_export_yaml\Form\ContentExportManagerForm::exportFinishedCallback', ]; if(empty($results)){ \Drupal::messenger()->addMessage(t('Entity:'.$entity_name. ' and Bunlde:'.$query['bundle']. ' dont have content ' ), 'error'); return new RedirectResponse(Url::fromRoute('content_export_yaml.manage_content_yaml_form')->toString()); } foreach ($results as $key => $id){ $batch['operations'][] = [$export->func->exportBase($id,$entity_name, $root ), []]; } batch_set($batch); return batch_process(Url::fromRoute('content_export_yaml.manage_content_yaml_form')->toString()); //return new RedirectResponse(Url::fromRoute('content_export_yaml.manage_content_yaml_form')->toString()); } $form['range'] = [ '#type' => 'textfield', '#title' => $this->t('Range number'), '#attributes' => ['name' => 'range'], '#default_value' => isset($query['range'])?$query['range']:'', '#description' => 'Leave empty to get all ,For example: 1 - 100' ]; $form['help'] = [ '#type' => 'item', '#title' => t('INFORMATION'), '#markup' => '', '#validated' => TRUE ]; $form['help']['#prefix'] = '<div id="entity-wrapper-help">'; $form['help']['#suffix'] = '</div>'; $form['actions'] = ['#type' => 'actions']; $form['actions']['submit'] = [ '#type' => 'submit', '#value' => 'Export', ]; $form['actions']['reset'] = [ '#type' => 'submit', '#value' => 'Reset', ]; // $form['#attached']['library'][] = 'core/drupal.dialog.ajax'; $form_state->setCached(FALSE); return $form ; } protected function _getBundleName($result){ $root_folder = dirname($result); return basename($root_folder); } protected function _getEntityType($result){ $root_folder_1 = dirname($result); $root_folder = dirname($root_folder_1); return basename($root_folder); } /** * {@inheritdoc} */ public function validateForm(array &$form, FormStateInterface $form_state) { // $range = $query['entity_name']; //$form_state->setErrorByName('content_export_yaml', t("Please upload a correct file.")); } /** * */ protected function exportElement($result) { $config_name = basename($result,'.yml') ; $bundle = $this->_getBundleName($result) ; $entity_type = $this->_getEntityType($result); $export = \Drupal::service('content_export_yaml.manager'); // $export->import($config_name,$entity_type,$bundle); } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { } /** * */ public static function exportFinishedCallback($success, $results, $operations) { if ($success) { $message = t('items successfully processed'); \Drupal::messenger()->addMessage($message); } return new RedirectResponse(Url::fromRoute('content_export_yaml.manage_content_yaml_form')->toString()); } }