public function __construct(Cursus $cursus)
 {
     $details = [];
     $details['id'] = $cursus->getId();
     $details['title'] = $cursus->getTitle();
     $details['code'] = $cursus->getCode();
     $details['blocking'] = $cursus->isBlocking();
     $details['details'] = $cursus->getDetails();
     $details['root'] = $cursus->getRoot();
     $details['lvl'] = $cursus->getLvl();
     $details['lft'] = $cursus->getLft();
     $details['rgt'] = $cursus->getRgt();
     $parent = $cursus->getParent();
     $course = $cursus->getCourse();
     $workspace = $cursus->getWorkspace();
     if (!is_null($parent)) {
         $details['parentId'] = $parent->getId();
         $details['parentTitle'] = $parent->getTitle();
         $details['parentCode'] = $parent->getCode();
     }
     if (!is_null($course)) {
         $details['courseId'] = $course->getId();
         $details['courseTitle'] = $course->getTitle();
         $details['courseCode'] = $course->getCode();
     }
     if (!is_null($workspace)) {
         $details['workspaceId'] = $workspace->getId();
         $details['workspaceName'] = $workspace->getName();
         $details['workspaceCode'] = $workspace->getCode();
         $details['workspaceGuid'] = $workspace->getGuid();
     }
     parent::__construct(self::ACTION, $details);
 }
 public function unregisterGroupFromCursus(Cursus $cursus, Group $group)
 {
     $users = $group->getUsers()->toArray();
     $cursusGroupsToDelete = array();
     $cursusUsersToDelete = array();
     $coursesToUnregister = array();
     $root = $cursus->getRoot();
     $cursusRoot = $this->getOneCursusById($root);
     if ($cursus->isBlocking()) {
         $course = $cursus->getCourse();
         if (!is_null($course)) {
             $coursesToUnregister[] = $course;
         }
         $cursusUsersToDelete = $this->getCursusUsersFromCursusAndUsers(array($cursus), $users);
         $cursusGroupsToDelete = $this->getCursusGroupsFromCursusAndGroups(array($cursus), array($group));
     } else {
         // Determines from which cursus descendants user has to be removed.
         $unlockedDescendants = $this->getUnlockedDescendants($cursus);
         // Current cursus is included
         $unlockedDescendants[] = $cursus;
         $cursusUsersToDelete = $this->getCursusUsersFromCursusAndUsers($unlockedDescendants, $users);
         $removableGroupDescendants = $this->getCursusGroupsFromCursusAndGroups($unlockedDescendants, array($group));
         foreach ($users as $user) {
             // Determines from which cursus ancestors user has to be removed
             $removableUserAncestors = $this->searchRemovableCursusUsersFromAncestors($cursus, $user);
             // Merge all removable CursusUser
             $cursusUsersToDelete = array_merge_recursive($cursusUsersToDelete, $removableUserAncestors);
         }
         $removableGroupAncestors = $this->searchRemovableCursusGroupsFromAncestors($cursus, $group);
         // Merge all removable CursusGroup
         $cursusGroupsToDelete = array_merge_recursive($removableGroupDescendants, $removableGroupAncestors);
         foreach ($cursusGroupsToDelete as $cursusGroup) {
             $cursus = $cursusGroup->getCursus();
             $course = $cursus->getCourse();
             if (!is_null($course)) {
                 $coursesToUnregister[] = $course;
             }
         }
     }
     $sessionsToUnregister = is_null($cursusRoot) ? array() : $this->getSessionsByCursusAndCourses($cursusRoot, $coursesToUnregister);
     $sessionsGroups = $this->getSessionGroupsBySessionsAndGroup($sessionsToUnregister, $group, 0);
     $this->om->startFlushSuite();
     foreach ($sessionsGroups as $sessionGroup) {
         $this->unregisterGroupFromSession($sessionGroup);
     }
     foreach ($cursusUsersToDelete as $cu) {
         $this->deleteCursusUser($cu);
     }
     foreach ($cursusGroupsToDelete as $cg) {
         $this->deleteCursusGroup($cg);
     }
     $this->om->endFlushSuite();
 }