paragraphs_sets-8.x-2.x-dev/paragraphs_sets.install
paragraphs_sets.install
<?php
/**
* @file
* Installation hooks for paragraphs_setss module.
*/
/**
* Implements hook_install().
*/
function paragraphs_sets_install(): void {
// Assign a weight 1 higher than paragraphs.
module_set_weight('paragraphs_sets', 12);
}
/**
* Implements hook_uninstall().
*/
function paragraphs_sets_uninstall(bool $is_syncing): void {
$config_factory = \Drupal::configFactory();
$names = $config_factory->listAll('core.entity_form_display.');
$storage = \Drupal::entityTypeManager()
->getStorage('entity_form_display');
foreach ($names as $name) {
$config = $config_factory->getEditable($name);
/** @var \Drupal\Core\Entity\Entity\EntityFormDisplay $form_display */
$form_display = $storage->load($config->get('id'));
// Loop over the fields to detect possible settings to be removed:
$fields = $form_display->getComponents();
foreach ($fields as $field_name => &$field) {
if (isset($field['third_party_settings']['paragraphs_sets'])) {
unset($field['third_party_settings']['paragraphs_sets']);
$form_display->setComponent($field_name, $field)->save();
}
}
}
}
/**
* Implements hook_requirements().
*
* @phpstan-ignore-next-line
*/
function paragraphs_sets_requirements(string $phase): array {
$requirements = [];
if (!in_array($phase, ['install', 'runtime'])) {
return $requirements;
}
// Check version of paragraphs module.
if (\Drupal::moduleHandler()->moduleExists('paragraphs')) {
/** @var array{
* 'version': string,
* ...
* } $module_info */
$module_info = \Drupal::service('extension.list.module')->getExtensionInfo('paragraphs');
if (empty($module_info['version'])) {
// Module checked out from git so we assume it is newer than required.
return $requirements;
}
if (version_compare($module_info['version'], '8.x-1.3', '<')) {
$requirements['paragraphs'] = [
'title' => t('Paragraphs version'),
'description' => t('You need to install at least version 8.x-1.3 of the %paragraphs module (installed version is %version).', [
'%paragraphs' => 'Paragraphs',
'%version' => $module_info['version'],
]),
'value' => t('Incompatible version'),
'severity' => REQUIREMENT_ERROR,
];
}
}
return $requirements;
}
/**
* Enable sets for all paragraph fields for backward compatibility.
*/
function paragraphs_sets_update_8201(): void {
$config_factory = \Drupal::configFactory();
$names = $config_factory->listAll('core.entity_form_display.');
foreach ($names as $name) {
$config = $config_factory->getEditable($name);
$content = $config->get('content');
/** @var array<string, array{
* 'type': string,
* 'third_party_settings'?: array<string, mixed>,
* ...
* }> $content */
foreach ($content as $field => $info) {
if ($info['type'] !== 'paragraphs') {
continue;
}
// @phpstan-ignore-next-line
if (!isset($info['third_party_settings']['paragraphs_sets']['paragraphs_sets']['use_paragraphs_sets'])) {
/** @var array<string, mixed> $config_array */
$config_array = $config->getOriginal();
// @phpstan-ignore-next-line
$config_array['content'][$field]['third_party_settings']['paragraphs_sets']['paragraphs_sets']['use_paragraphs_sets'] = '1';
$config->setData($config_array);
$config->save();
}
}
}
}
/**
* Change existing configuration files, property name.
*/
function paragraphs_sets_update_9001(): void {
/** @var \Drupal\Core\Config\ConfigFactoryInterface $config_factory */
$config_factory = \Drupal::configFactory();
$query = \Drupal::entityQuery('paragraphs_set');
/** @var array<string> $results */
$results = $query->execute();
foreach ($results as $id) {
/** @var \Drupal\Core\Config\ImmutableConfig $config */
$config = $config_factory->getEditable("paragraphs_sets.set.{$id}");
/** @var array<string, array<string, string>> $data */
$data = $config->get('paragraphs');
// Replace 'type' property with 'bundle'.
foreach ($data as $key => $item) {
if (isset($item['type'])) {
$data[$key]['bundle'] = $item['type'];
unset($data[$key]['type']);
}
}
try {
$config->set('paragraphs', $data);
$config->save();
}
catch (Exception $exception) {
\Drupal::logger('paragraphs_sets')->error($exception->getMessage());
}
}
}
