social_lms_integrator-1.0.0-beta4/modules/social_lms_integrator_iteration_enrollment_notify/src/IterationWelcomeMessageAvailableFields.php

modules/social_lms_integrator_iteration_enrollment_notify/src/IterationWelcomeMessageAvailableFields.php
<?php

namespace Drupal\social_lms_integrator_iteration_enrollment_notify;


class IterationWelcomeMessageAvailableFields {
  
  public function getAvailableFields() {

    $group_field_definitions = [];
    $available_fields = []; 
    $group_bundles = [];
    $profile_bundles = []; 
    $user_bundles = ['user'];
    $forbidden_group_fields = [
      'type',
      'field_group_allowed_join_method',
      'field_group_allowed_visibility'
    ]; 
    $forbidden_profile_fields = [
      'type'
    ];
    $forbidden_user_fields = [
      'init'
    ];

    $default_tokens = [
      '[group]' => '[group]', 
      '[group:title]' => '[group:title]',     
      '[user:mail]' => '[user:mail]',
      '[user:one-time-login-url]' => '[user:one-time-login-url]',
      '[user:display-name]' => '[user:display-name]',
      '[site:name]' => '[site:name]',
      '[site:login-url]' => '[site:login-url]'
    ];

    // If there is keycloak_user_import module installed provide new tokens
    // and hide the default one time login url token created by drupal.

    if (\Drupal::moduleHandler()->moduleExists('keycloak_user_import')) {
      $default_tokens['[site:keycloak_user_import]'] = '[site:keycloak_user_import]';
      $default_tokens['[user:field_keycloak_pw:value]'] = '[user:field_keycloak_pw:value]';
      unset($default_tokens['[user:one-time-login-url]']);
    }
      
    // Get group bundles
    $group_bundles = $this->getBundle('group');

    if (isset($group_bundles) && !empty($group_bundles)) {

      $available_group_fields = $this->getFields('group',$group_bundles,$forbidden_group_fields);

    }

    // Get profile bundles
    $profile_bundles = $this->getBundle('profile');

    // Default Tokens for user profiles
    $default_tokens_user_profile = $this->getUserProfileBundleTokens($profile_bundles);

    if (isset($profile_bundles) && !empty($profile_bundles)) {

      $available_profile_fields = $this->getFields('profile',$profile_bundles,$forbidden_profile_fields);


    }

    $available_user_fields = $this->getFields('user',$user_bundles,$forbidden_user_fields);

    $available_fields = array_merge($default_tokens,
                                    $default_tokens_user_profile,
                                    $available_group_fields, 
                                    $available_profile_fields,
                                    $available_user_fields);


      
    // Get user field definitions
    
    return $available_fields;

  }

  protected function getUserProfileBundleTokens($profile_bundles) {

    $token_fields = [];

    foreach ($profile_bundles as $bundle_key => $bundle) {
      $token_fields['[user:' . $bundle_key .']'] = '[user:' . $bundle_key . ']';
    }

    return $token_fields;

  }

  protected function getFields(string $entity_type, array $bundles, array $forbidden_fields) {

    $field_definitions = [];
    $available_fields = [];
    


    foreach ($bundles as $bundle_key => $bundle) {

      $field_definitions = \Drupal::service('entity_field.manager')->getFieldDefinitions($entity_type, $bundle_key);

      foreach ($field_definitions as $field_key => $field_value) {

        $field_token_key = strtolower($field_definitions[$field_key]->getName());
        $field_token_key = str_replace(' ','_',$field_token_key);
            
        if ($field_definitions[$field_key]->isRequired() && !in_array($field_key, $forbidden_fields)) {
          if ($entity_type == 'profile') {
            $available_fields['[user:' . $bundle_key . ':' . $field_token_key . ']'] = '[user:' . $bundle_key . ':' . $field_token_key . ']';
          }
          $available_fields['[' . $entity_type . ':' . $field_token_key . ']'] = '[' . $entity_type . ':' . $field_token_key . ']'; 
        }
            
      }

    }

    return $available_fields;

  }

  protected function getBundle($entity_type) {

    $bundles = \Drupal::service('entity_type.bundle.info')->getBundleInfo($entity_type);
    return $bundles;    

  }


}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc