You are here

social_swiftmail.install in Open Social 10.0.x

Install and update hooks for Social Swiftmailer.

File

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

/**
 * @file
 * Install and update hooks for Social Swiftmailer.
 */

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

  // Get swift and mailsystem config.
  $swift_settings = \Drupal::configFactory()
    ->getEditable('swiftmailer.message');
  $mailsystem_settings = \Drupal::configFactory()
    ->getEditable('mailsystem.settings');

  // Alter swift settings.
  $swift_settings
    ->set('format', 'text/html')
    ->save();
  $swift_settings
    ->set('respect_format', FALSE)
    ->save();

  // Alter mailsystem settings.
  $mailsystem_settings
    ->set('theme', 'default')
    ->save();
  $mailsystem_settings
    ->set('defaults.sender', 'social_swiftmailer')
    ->save();
  $mailsystem_settings
    ->set('defaults.formatter', 'social_swiftmailer')
    ->save();
  $mailsystem_settings
    ->set('modules.swiftmailer.none.sender', 'social_swiftmailer')
    ->save();
  $mailsystem_settings
    ->set('modules.swiftmailer.none.formatter', 'social_swiftmailer')
    ->save();

  // Set some default permissions.
  _social_swiftmail_set_permissions();
}

/**
 * Function to set permissions.
 */
function _social_swiftmail_set_permissions() {
  $roles = \Drupal::entityQuery('user_role')
    ->condition('id', 'administrator', '<>')
    ->execute();
  foreach ($roles as $role) {
    $permissions = _social_swiftmail_get_permissions($role);
    user_role_grant_permissions($role, $permissions);
  }
}

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

  // Anonymous.
  $permissions['anonymous'] = [];

  // Authenticated.
  $permissions['authenticated'] = array_merge($permissions['anonymous'], [
    'use text format mail_html',
  ]);

  // Content manager.
  $permissions['contentmanager'] = array_merge($permissions['authenticated'], []);

  // Site manager.
  $permissions['sitemanager'] = array_merge($permissions['contentmanager'], [
    'administer social swiftmail',
  ]);
  return $permissions[$role] ?? [];
}

/**
 * Set which theme to use when sending emails.
 */
function social_swiftmail_update_8001() {

  // Alter mailsystem settings.
  $mailsystem_settings = \Drupal::configFactory()
    ->getEditable('mailsystem.settings');
  $mailsystem_settings
    ->set('theme', 'default')
    ->save();
}

/**
 * Set swiftmail permissions for sitemanagers settings.
 */
function social_swiftmail_update_8002() {

  // Give SM the correct permission.
  user_role_grant_permissions('sitemanager', [
    'use text format mail_html',
    'administer social swiftmail',
  ]);
}

/**
 * Allow using the "Mail HTML" text format by the logged user.
 */
function social_swiftmail_update_8003() {
  $roles = \Drupal::entityQuery('user_role')
    ->condition('id', [
    'authenticated',
    'contentmanager',
  ], 'IN')
    ->execute();
  foreach ($roles as $role) {
    user_role_grant_permissions($role, [
      'use text format mail_html',
    ]);
  }
}

Functions

Namesort descending Description
social_swiftmail_install Implements hook_install().
social_swiftmail_update_8001 Set which theme to use when sending emails.
social_swiftmail_update_8002 Set swiftmail permissions for sitemanagers settings.
social_swiftmail_update_8003 Allow using the "Mail HTML" text format by the logged user.
_social_swiftmail_get_permissions Build the permissions.
_social_swiftmail_set_permissions Function to set permissions.