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;
}
}
