Рубрики
Uncategorized

Веб от переноса данных с Drupal 7 на Drupal 8

Автор оригинала: David Wong.

Идеи миграции Напишите SQL в Drupal 8, найдите все данные в Drupal 7, а затем организуйте структуру данных, чтобы вызвать API Drupal 8 для вставки данных в базу данных Drupal 8

Этапы миграции

  • Настройка среды подключения к базе данных

Измените настройку. php файл сайта Drupal 8

//Drupal 8 database link
$databases['default']['default'] = array (
  'database' => 'd8',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'host' => '127.0.0.1',
  'port' => '3306',
  'namespace' => 'Drupal\Core\Database\Driver\mysql',
  'driver' => 'mysql',
);
//Drupal 7 database link
$databases['upgrade']['default'] = array (
    'database' => 'd7',
    'username' => 'root',
    'password' => '',
    'prefix' => '',
    'host' => '127.0.0.1',
    'port' => '3306',
    'namespace' => 'Drupal\Core\Database\Driver\mysql',
    'driver' => 'mysql',
);
  • В соответствии со структурой веб-формы Drupal 7 создайте такую же веб-форму в Drupal 8
  • Узнайте данные веб-формы Drupal 7
$NID = 1382; // node ID corresponding to drupal7 webform
$firstSid = 0;
$webformId = 'register_as_an_independent';

//Get the submission of drupal7 form
$submittedData = [];
$dataQuery = Database::getConnection('default', 'upgrade')->select('webform_submitted_data', 'wd');
$dataQuery->join('webform_component', 'c', 'c.cid = wd.cid AND c.nid = wd.nid');
$dataQuery->addField('c', 'form_key');
$dataQuery->addField('wd', 'sid');
$dataQuery->addField('wd', 'data');
$dataQuery->condition('wd.nid', $nid, '=');
$result = $dataQuery->execute()->fetchAll();
foreach ($result as $row) {
      $submittedData[$row->sid][$row->form_key][] = [
              'value' => $row->data,
      ];
}
$query = Database::getConnection('default', 'upgrade')->select('webform_submissions', 'ws');
$query->addField('ws', 'sid');
$query->addField('ws','uid');
$query->addField('ws','submitted');
$query->addField('ws','completed');
$query->addField('ws','modified');
$query->addField('ws','remote_addr');
$query->condition('nid', $nid, '=');
$query->condition('sid', $firstSid, '>');
//        $query->condition('sid', ($firstSid+9), '<');
$submit = $query->execute()->fetchAllAssoc('sid');
  • Импорт данных в Drupal 8
$entityid = 90; // node ID corresponding to the form in Drupal 8
$checkBoxKey = array('target_types','following_dbms','versions_of_powerbuilder','work_locations');
foreach ($submit as $sid => $info) {
            if (empty($submittedData[$sid])) {
                continue;
            }
            //Import data to d8c
            $values = [
                'webform_id'  => $webformId,
                'entity_type' => 'node',
                'entity_id'   => $entityId,
                'in_draft'    => FALSE,
                'uid'         => $info->uid,
                'langcode'    => 'en',
                'token'       => 'pgmJREX2l4geg2RGFp0p78Qdfm1ksLxe6IlZ-mN9GZI',
                'uri'         => '/consultants/independents/apply',
                'created'     => $info->submitted,
                'completed'   => $info->completed,
                'changed'     => $info->modified,
                'remote_addr' => $info->remote_addr,
                'data'        => [
                    'target_types' => ['Appeon Web App'],
                    'following_dbms' => ['SQL Server'],
                    'versions_of_powerbuilder' => ['PB 12.x'],
                    'years_using_powerbuilder' => '5',
                    'powerbuilder_certification' => 'No',
                    'id_number' => '',
                    'linkedin_or_xing_profile' => '',
                    'work_type' => 'Full-time',
                    'work_locations' => ['Telecommute'],
                    'first_name' => 'first_name',
                    'last_name' => 'last_name',
                    'email_address' => '@',
                    'country' => 'US',
                    'state_province' => '',
                    'postal_code' => '0000',
                    'certify_true_and_correct' => '1',
                    'agree_to_be_published' => '1',
                    'agree_terms' => '1',
                    'email_of_subject' => '',
                ],
            ];
            foreach ($submittedData[$sid] as $key => $value){
                if (in_array($key,$checkBoxKey)){
                        $values['data'][$key] = [];
                    }
                    foreach ($value as $val){
                        if (in_array($key,$checkBoxKey)){
                            $values['data'][$key][] = $val['value'];
                        } else {
                            $values['data'][$key] = $val['value'];
                        }

                    }
            }
            // Check webform is open.
            $webform = Webform::load($values['webform_id']);
            $is_open = WebformSubmissionForm::isOpen($webform);

            if ($is_open === TRUE) {
                // Create new submission instance
                $webform_submission = WebformSubmission::create($values);

                // Validate submission.
                $errors = WebformSubmissionForm::validateWebformSubmission($webform_submission);

                // Check there are no validation errors.
                if (!empty($errors)) {
                    print_r($errors);
                    die();
                }
                else {
                    // Submit values and get submission ID.
                    $webform_submission = WebformSubmissionForm::submitWebformSubmission($webform_submission);
                    print $webform_submission->id();
                }
            }
        }

быть осторожным:

Если выбрано несколько полей, вставленное значение поля должно быть массивом

Если это вложение или фотография, вы можете провести собственное исследование.