function opigno_learning_path_group_membership_add_form_submit in Opigno Learning path 3.x
Same name and namespace in other branches
- 8 opigno_learning_path.module \opigno_learning_path_group_membership_add_form_submit()
Callback used in opigno_learning_path_form_alter().
1 string reference to 'opigno_learning_path_group_membership_add_form_submit'
- opigno_learning_path_form_alter in ./
opigno_learning_path.module - Implements hook_form_alter().
File
- ./
opigno_learning_path.module, line 1528 - Contains opigno_learning_path.module.
Code
function opigno_learning_path_group_membership_add_form_submit(array $form, FormStateInterface $form_state) {
$options = $form_state
->getValue('training_users');
$send_message = $form_state
->getValue('send_message');
$message = $form_state
->getValue('message');
// Load added users & classes from the form_state.
$users = [];
$classes = [];
foreach ($options as $option) {
[
$type,
$id,
] = explode('_', $option);
if ($type === 'user') {
$users[] = $id;
}
elseif ($type === 'class') {
$classes[] = $id;
}
}
$users = User::loadMultiple($users);
$classes = Group::loadMultiple($classes);
$need_clear_cache = count($classes) > 1;
// Load the learning path group.
/** @var \Drupal\group\Entity\Group $group */
$group = \Drupal::routeMatch()
->getParameter('group');
$is_class = $group
->getGroupType()
->id() == 'opigno_class';
// Assign each class to the learning path.
foreach ($classes as $class) {
$db_connection = \Drupal::service('database');
$is_class_added = $db_connection
->select('group_content_field_data', 'g_c_f_d')
->fields('g_c_f_d', [
'id',
])
->condition('gid', $group
->id())
->condition('entity_id', $class
->id())
->condition('type', 'group_content_type_27efa0097d858')
->execute()
->fetchField();
if (!$is_class_added) {
/** @var \Drupal\group\Entity\Group $class */
$group
->addContent($class, 'subgroup:opigno_class');
// Rebuild module and theme data to escape cache warnings when add more then one class
if ($need_clear_cache) {
$module_data = \Drupal::service('extension.list.module')
->reset()
->getList();
$files = [];
$modules = [];
foreach ($module_data as $name => $extension) {
if ($extension->status) {
$files[$name] = $extension;
$modules[$name] = $extension->weight;
}
}
$modules = module_config_sort($modules);
\Drupal::service('kernel')
->updateModules($modules, $files);
$module_handler = \Drupal::moduleHandler();
$module_handler
->loadAll();
$module_handler
->invokeAll('rebuild');
}
// Add class members to the users.
$members = $class
->getMembers();
foreach ($members as $member) {
/** @var \Drupal\group\GroupMembership $member */
$user = $member
->getUser();
$users[$user
->id()] = $user;
}
}
}
// Add each user to the learning path & send email.
foreach ($users as $user) {
if (!isset($user)) {
continue;
}
// If user is already in learning path, do nothing.
$existing = $group
->getMember($user);
if ($existing !== FALSE) {
continue;
}
// Add user to the learning path.
/** @var \Drupal\user\Entity\User $user */
$group
->addMember($user);
if ($is_class) {
$group_roles = $form_state
->getValue('group_roles');
// Set new member roles.
if ($group_roles) {
if ($member = $group
->getMember($user)) {
$group_content = $member
->getGroupContent();
$group_roles_new = $group_content
->get('group_roles')
->getValue();
foreach ($group_roles as $group_role) {
$found = FALSE;
$role = $group_role['target_id'];
foreach ($group_roles_new as $index => $value) {
if ($value['target_id'] === $role) {
$found = TRUE;
unset($group_roles_new[$index]);
break;
}
}
if ($found === FALSE) {
$group_roles_new[] = [
'target_id' => $role,
];
}
}
try {
$group_content
->set('group_roles', $group_roles_new);
$group_content
->save();
} catch (\Exception $e) {
\Drupal::logger('opigno_learning_path')
->error($e
->getMessage());
\Drupal::messenger()
->addMessage($e
->getMessage(), 'error');
}
}
}
}
if ($send_message) {
// Send email.
$module = 'opigno_learning_path';
$key = 'opigno_learning_path_add_membership';
$email = $user
->getEmail();
$lang = $user
->getPreferredLangcode();
$params = [];
$params['subject'] = t('Opigno notification');
$params['message'] = $message ? $message : t('I invite you to take part in my learning program to boost your skills');
\Drupal::service('plugin.manager.mail')
->mail($module, $key, $email, $lang, $params);
}
}
$form_state
->setRedirect('opigno_learning_path.membership.overview', [
'group' => $group
->id(),
]);
}