You are here

social_event.install in Open Social 8.8

Install, update and uninstall functions for the social_event module.

File

modules/social_features/social_event/social_event.install
View source
<?php

/**
 * @file
 * Install, update and uninstall functions for the social_event module.
 */
use Drupal\menu_link_content\Entity\MenuLinkContent;
use Drupal\user\Entity\Role;

/**
 * Implements hook_install().
 *
 * Perform actions related to the installation of social_event.
 */
function social_event_install() {

  // Set some default permissions.
  _social_event_set_permissions();

  // Add menu links.
  _social_event_create_menu_links();
}

/**
 * Function to set permissions.
 */
function _social_event_set_permissions() {
  $roles = Role::loadMultiple();

  /** @var \Drupal\user\Entity\Role $role */
  foreach ($roles as $role) {
    if ($role
      ->id() === 'administrator') {
      continue;
    }
    $permissions = _social_event_get_permissions($role
      ->id());
    user_role_grant_permissions($role
      ->id(), $permissions);
  }
}

/**
 * Build permissions.
 *
 * @param string $role
 *   The role.
 *
 * @return array
 *   Returns an array containing the permissions.
 */
function _social_event_get_permissions($role) {

  // Anonymous.
  $permissions['anonymous'] = [
    'view node.event.field_content_visibility:public content',
  ];

  // Authenticated.
  $permissions['authenticated'] = array_merge($permissions['anonymous'], [
    'create event content',
    'delete own event content',
    'edit own event content',
    'override event published option',
    'view node.event.field_content_visibility:community content',
    'view events on my profile',
    'view events on other profiles',
  ]);

  // Content manager.
  $permissions['contentmanager'] = array_merge($permissions['authenticated'], [
    'delete any event content',
    'edit any event content',
    'revert event revisions',
    'delete event revisions',
    'view event revisions',
    'override event revision log entry',
    'override event authored by option',
    'override event authored on option',
    'override event promote to front page option',
    'override event revision option',
    'override event sticky option',
  ]);

  // Site manager.
  $permissions['sitemanager'] = array_merge($permissions['contentmanager'], [
    'administer visibility settings',
    'administer social_event settings',
    'view published event enrollment entities',
  ]);
  if (isset($permissions[$role])) {
    return $permissions[$role];
  }
  return [];
}

/**
 * Function to create some menu items.
 */
function _social_event_create_menu_links() {
  $menu_links = MenuLinkContent::loadMultiple();
  $parent = NULL;

  /** @var \Drupal\menu_link_content\Entity\MenuLinkContent $menu_link */
  foreach ($menu_links as $menu_link) {
    if ($menu_link
      ->label() === 'Explore' && $menu_link
      ->isExpanded()) {
      $parent = 'menu_link_content:' . $menu_link
        ->uuid();
    }
  }
  if (!is_null($parent)) {
    MenuLinkContent::create([
      'title' => t('All events'),
      'link' => [
        'uri' => 'internal:/community-events',
      ],
      'menu_name' => 'main',
      'expanded' => FALSE,
      'weight' => 30,
      'parent' => $parent,
    ])
      ->save();
  }
}

/**
 * Implements hook_update_dependencies().
 */
function social_event_update_dependencies() {

  // New config changes should run after the features removal/revert.
  $dependencies['social_event'][8802] = [
    'social_core' => 8805,
  ];
  return $dependencies;
}

/**
 * Enable event enrolling of open groups for not member.
 */
function social_event_update_8001() {
  \Drupal::configFactory()
    ->getEditable('social_event.settings')
    ->set('enroll', [])
    ->save();
}

/**
 * Set permissions to administer social_event settings.
 */
function social_event_update_8002() {

  // Give SM the administer social_event settings permission.
  user_role_grant_permissions('sitemanager', [
    'administer social_event settings',
  ]);
}

/**
 * Set my events permissions.
 */
function social_event_update_8003() {

  // Make it so that everyone who has the 'access user profiles' permission,
  // now also get these two new permissions.
  $permissions = [
    'view events on my profile',
    'view events on other profiles',
  ];

  /** @var \Drupal\user\Entity\Role $role */
  foreach (Role::loadMultiple() as $role) {
    if ($role
      ->hasPermission('access user profiles')) {
      user_role_grant_permissions($role
        ->id(), $permissions);
    }
  }
}

/**
 * Fix empty value in enroll setting.
 */
function social_event_update_8801() {

  // This does not need to run before 8802 necessarily because the
  // features_removal/ folder has also been updated so a revert works too.
  // This update mostly exists for people who've already updated to 8.0.
  $settings = \Drupal::configFactory()
    ->getEditable('social_event.settings');
  $enroll = $settings
    ->get('enroll');

  // Only change it if no value was set yet.
  if (empty($enroll)) {
    $settings
      ->set('enroll', [])
      ->save();
  }
}

/**
 * Remove public group from event.small_teaser.
 */
function social_event_update_8802() {

  /** @var \Drupal\update_helper\Updater $updateHelper */
  $updateHelper = \Drupal::service('update_helper.updater');

  // Execute configuration update definitions with logging of success.
  $updateHelper
    ->executeUpdate('social_event', 'social_event_update_8802');

  // Output logged messages to related channel of update execution.
  return $updateHelper
    ->logger()
    ->output();
}

/**
 * Update view mode for new small teaser style.
 */
function social_event_update_8803() {

  /** @var \Drupal\update_helper\Updater $updateHelper */
  $updateHelper = \Drupal::service('update_helper.updater');

  // Execute configuration update definitions with logging of success.
  $updateHelper
    ->executeUpdate('social_event', 'social_event_update_8803');

  // Output logged messages to related channel of update execution.
  return $updateHelper
    ->logger()
    ->output();
}

/**
 * Fix small teaser view mode after accidental regression for some sites.
 */
function social_event_update_8804() {

  /** @var \Drupal\update_helper\Updater $updateHelper */
  $updateHelper = \Drupal::service('update_helper.updater');

  // Execute configuration update definitions with logging of success.
  $updateHelper
    ->executeUpdate('social_event', 'social_event_update_8804');

  // Output logged messages to related channel of update execution.
  return $updateHelper
    ->logger()
    ->output();
}

Functions

Namesort descending Description
social_event_install Implements hook_install().
social_event_update_8001 Enable event enrolling of open groups for not member.
social_event_update_8002 Set permissions to administer social_event settings.
social_event_update_8003 Set my events permissions.
social_event_update_8801 Fix empty value in enroll setting.
social_event_update_8802 Remove public group from event.small_teaser.
social_event_update_8803 Update view mode for new small teaser style.
social_event_update_8804 Fix small teaser view mode after accidental regression for some sites.
social_event_update_dependencies Implements hook_update_dependencies().
_social_event_create_menu_links Function to create some menu items.
_social_event_get_permissions Build permissions.
_social_event_set_permissions Function to set permissions.