You are here

profile.post_update.php in Profile 8

Post update functions for Profile.

File

profile.post_update.php
View source
<?php

use Drupal\Core\Config\ExtensionInstallStorage;
use Drupal\Core\Config\InstallStorage;
use Drupal\Core\Config\StorageInterface;
use Drupal\Core\Entity\Entity\EntityFormDisplay;
use Drupal\profile\Entity\ProfileType;
use Drupal\system\Entity\Action;

/**
 * @file
 * Post update functions for Profile.
 */

/**
 * Change the plugin ID of the delete action.
 */
function profile_post_update_change_delete_action_plugin() {
  $action_storage = \Drupal::entityTypeManager()
    ->getStorage('action');
  $action = $action_storage
    ->load('profile_delete_action');
  if ($action instanceof Action) {
    $action
      ->setPlugin('entity:delete_action:profile');
    $action
      ->save();
  }
}

/**
 * Change the plugin IDs of the publish and unpublish actions.
 */
function profile_post_update_change_publish_action_plugins() {
  $action_storage = \Drupal::entityTypeManager()
    ->getStorage('action');
  $publish_action = $action_storage
    ->load('profile_publish_action');
  if ($publish_action instanceof Action) {
    $publish_action
      ->setPlugin('entity:publish_action:profile');
    $publish_action
      ->save();
  }
  $unpublish_action = $action_storage
    ->load('profile_unpublish_action');
  if ($unpublish_action instanceof Action) {
    $unpublish_action
      ->setPlugin('entity:unpublish_action:profile');
    $unpublish_action
      ->save();
  }
}

/**
 * Add new revision settings to profile types.
 */
function profile_post_update_add_revision_settings() {

  /** @var \Drupal\profile\Entity\ProfileType[] $profile_types */
  $profile_types = ProfileType::loadMultiple();
  foreach ($profile_types as $profile_type) {
    if ($profile_type
      ->get('use_revisions')) {
      $profile_type
        ->set('allow_revisions', TRUE);
      $profile_type
        ->set('new_revision', TRUE);
      $profile_type
        ->save();
    }
  }
}

/**
 * Show the profile form at user registration using the profile_form widget.
 */
function profile_post_update_configure_register_form_mode() {
  $profile_types = ProfileType::loadMultiple();
  $profile_types = array_filter($profile_types, function (ProfileType $profile_type) {
    return $profile_type
      ->getRegistration();
  });
  if (!$profile_types) {

    // No profile types to update.
    return;
  }
  $register_display = EntityFormDisplay::load('user.user.register');
  if (!$register_display) {

    // The "register" form mode isn't customized by default.
    $default_display = EntityFormDisplay::load('user.user.default');
    $register_display = $default_display
      ->createCopy('register');
  }

  // Assign the inline widget to each computed field.
  $weight = 90;
  foreach ($profile_types as $profile_type) {
    $register_display
      ->setComponent($profile_type
      ->id() . '_profiles', [
      'type' => 'profile_form',
      'weight' => ++$weight,
    ]);
  }
  $register_display
    ->setStatus(TRUE);
  $register_display
    ->save();
}

/**
 * Replace the "profiles" view with the updated version.
 */
function profile_post_update_replace_view() {

  /** @var \Drupal\Core\Config\Entity\ConfigEntityStorageInterface $view_storage */
  $view_storage = \Drupal::entityTypeManager()
    ->getStorage('view');

  /** @var \Drupal\Core\Config\Entity\ConfigEntityInterface $view */
  $view = $view_storage
    ->load('profiles');
  if (!$view) {
    return;
  }
  $config_storage = \Drupal::service('config.storage');
  $extension_config_storage = new ExtensionInstallStorage($config_storage, InstallStorage::CONFIG_INSTALL_DIRECTORY, StorageInterface::DEFAULT_COLLECTION, TRUE, NULL);
  $config_data = $extension_config_storage
    ->read('views.view.profiles');
  $view
    ->setSyncing(TRUE);

  // The UUID must remain unchanged between updates.
  $uuid = $view
    ->uuid();
  $view = $view_storage
    ->updateFromStorageRecord($view, $config_data);
  $view
    ->set('uuid', $uuid);
  $view
    ->save();
}

Functions

Namesort descending Description
profile_post_update_add_revision_settings Add new revision settings to profile types.
profile_post_update_change_delete_action_plugin Change the plugin ID of the delete action.
profile_post_update_change_publish_action_plugins Change the plugin IDs of the publish and unpublish actions.
profile_post_update_configure_register_form_mode Show the profile form at user registration using the profile_form widget.
profile_post_update_replace_view Replace the "profiles" view with the updated version.