function opigno_learning_path_entity_delete in Opigno Learning path 3.x
Same name and namespace in other branches
- 8 opigno_learning_path.module \opigno_learning_path_entity_delete()
Implements hook_entity_delete().
File
- ./
opigno_learning_path.module, line 1995 - Contains opigno_learning_path.module.
Code
function opigno_learning_path_entity_delete(EntityInterface $entity) {
if (in_array($entity
->bundle(), [
'learning_path-group_membership',
'opigno_course-group_membership',
])) {
LearningPathAccess::deleteUserStatus($entity);
if ($entity
->bundle() == 'learning_path-group_membership') {
LearningPathAccess::setLearningPathCourseMember($entity, 'delete');
}
}
if ($entity
->bundle() == 'group_content_type_27efa0097d858') {
// Get Class members.
$members = FALSE;
if ($entity && $entity
->getEntity()) {
$members = $entity
->getEntity()
->getMembers();
}
// Get class group id.
$gid = $entity
->getGroup()
->id();
$classes_members = [];
$classes_ids = LearningPathContent::getGroupMembershipIdsByType($gid, [
'group_content_type_27efa0097d858',
]);
if ($classes_ids) {
foreach ($classes_ids as $id) {
$class_members = LearningPathContent::getGroupMembershipIdsByType($id, [
'opigno_class-group_membership',
]);
if ($class_members) {
$classes_members = array_merge($classes_members, $class_members);
}
}
if ($classes_members) {
$classes_members = array_unique($classes_members);
}
}
if ($members && !empty($gid) && is_numeric($gid)) {
try {
$group = Group::load($gid);
// Get class parent groups.
foreach ($members as $member) {
$user = $member
->getGroupContent()
->getEntity();
$uid = $user
->id();
$class_id = $entity
->getEntity()
->id();
$created_group_membership = LearningPathContent::getGroupMembershipTimestamp($gid, $uid);
$created_class_membership = LearningPathContent::getGroupMembershipTimestamp($class_id, $uid);
if ($group && $user) {
// If user is the member only in this class of training all classes.
$unique_member = $classes_members ? !in_array($uid, $classes_members) : TRUE;
// Get group and class membership timestamps.
if ($unique_member && $created_group_membership && $created_class_membership && $created_group_membership >= $created_class_membership) {
// Remove class parent group membership.
$group
->removeMember($user);
}
}
}
} catch (\Exception $e) {
\Drupal::logger('opigno_learning_path')
->error($e
->getMessage());
\Drupal::messenger()
->addMessage($e
->getMessage(), 'error');
}
}
}
if ($entity
->bundle() == 'opigno_class-group_membership') {
// Get class group id.
$gid = $entity
->getGroup()
->id();
if (!empty($gid) && is_numeric($gid)) {
try {
// Get class parent groups.
$parent_groups = LearningPathContent::getClassGroups($gid);
if ($parent_groups) {
$user = $entity
->getEntity();
foreach ($parent_groups as $parent) {
$group = Group::load($parent->gid);
if ($group && $user) {
// Check if user is a member.
if ($group
->getMember($user) !== FALSE) {
// Get group and class membership timestamps.
$created_group_membership = LearningPathContent::getGroupMembershipTimestamp($parent->gid, $user
->id());
$created_class_membership = $entity
->getCreatedTime();
if ($created_group_membership && $created_class_membership && $created_group_membership >= $created_class_membership) {
// Remove class parent group membership.
$group
->removeMember($user);
}
}
}
}
}
} catch (\Exception $e) {
\Drupal::logger('opigno_learning_path')
->error($e
->getMessage());
\Drupal::messenger()
->addMessage($e
->getMessage(), 'error');
}
}
}
if ($entity
->bundle() == 'learning_path') {
LPStatus::removeCertificateExpiration($entity
->id());
}
}