diff --git a/public/main/group/group.php b/public/main/group/group.php index af508babdc7..84b1571dbb8 100644 --- a/public/main/group/group.php +++ b/public/main/group/group.php @@ -236,7 +236,20 @@ if ('true' === api_get_setting('allow_group_categories')) { if (empty($categories)) { $defaultCategoryId = GroupManager::create_category( - get_lang('Default groups') + get_lang('Default groups'), + '', + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0 ); $defaultCategory = GroupManager::get_category($defaultCategoryId); $categories = [$defaultCategory]; @@ -267,6 +280,11 @@ href="group_category.php?'.api_get_cidreq().'&id='.$categoryId.'" title="'.get_lang('Edit').'">'. Display::getMdiIcon('pencil', 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Edit this category')).'</a>'; + // Add group + $actions .= ' <a + href="group_creation.php?'.api_get_cidreq().'&category_id='.$categoryId.'">'. + Display::getMdiIcon(ActionIcon::SUBSCRIBE_GROUP_USERS_TO_RESOURCE, 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Create new group(s)')).'</a>'; + // Delete $actions .= Display::url( Display::getMdiIcon(ActionIcon::DELETE, count($categories) == 1 ? 'ch-tool-icon-disabled' : 'ch-tool-icon', null, ICON_SIZE_SMALL, get_lang('Delete')), diff --git a/public/main/group/group_category.php b/public/main/group/group_category.php index 9a2fe4d70b6..0fb889c2eb3 100644 --- a/public/main/group/group_category.php +++ b/public/main/group/group_category.php @@ -75,7 +75,7 @@ function check_groups_per_user($value) 'announcements_state' => GroupManager::TOOL_PRIVATE, 'forum_state' => GroupManager::TOOL_PRIVATE, 'max_student' => 0, - 'document_access' => 0, + 'document_access' => 0 ]; } @@ -452,6 +452,12 @@ function check_groups_per_user($value) $defaults['max_member_no_limit'] = 1; $defaults['max_member'] = $defaults['max_student']; } +/* +if (api_get_setting('allow_group_categories')) { + $defaults['id'] = $_GET['id']; +} +*/ + $form->setDefaults($defaults); $form->display(); diff --git a/public/main/group/group_creation.php b/public/main/group/group_creation.php index 4f57327fa74..8b67539b0d6 100644 --- a/public/main/group/group_creation.php +++ b/public/main/group/group_creation.php @@ -77,7 +77,18 @@ break; case 'create_class_groups': - GroupManager::create_class_groups($_POST['group_category']); + $classIds = []; + foreach (array_keys($_POST) as $key) { + if (strpos($key, 'checkbox_class_id_') !== false) { + $classId = str_replace('checkbox_class_id_', '', $key); + $classIds[] = (int)$classId; + } + } + if (isset($_POST['is_consistent_link'])) { + GroupManager::create_usergroup_consistent_groups($_POST['group_category'], $classIds); + } else { + GroupManager::create_class_groups($_POST['group_category'], $classIds); + } Display::addFlash(Display::return_message(get_lang('group(s) has (have) been added'))); header('Location: '.$currentUrl); exit; @@ -181,13 +192,17 @@ function copy_value(key) { $group_el = []; $group_el[] = $form->createElement('static', null, null, ' '); if ($allowGroupCategories) { - $group_el[] = $form->createElement( - 'checkbox', - 'same_category', - null, - get_lang('same for all'), - ['onclick' => "javascript: switch_state('category');"] - ); + if (!isset($_GET['category_id'])) { + $group_el[] = $form->createElement( + 'checkbox', + 'same_category', + null, + get_lang('same for all'), + ['onclick' => "javascript: switch_state('category');"] + ); + } else { + $group_el[] = $form->createElement('static', null, null, ' '); + } } $group_el[] = $form->createElement( 'checkbox', @@ -203,13 +218,29 @@ function copy_value(key) { $group_el = []; $group_el[] = $form->createElement('text', 'group_'.$group_number.'_name'); if ($allowGroupCategories) { - $group_el[] = $form->createElement( - 'select', - 'group_'.$group_number.'_category', - null, - $categories, - ['id' => 'category_'.$group_number] - ); + if(isset($_GET['category_id'])) { + $group_el[] = $form->createElement( + 'select', + 'group_' . $group_number . '_category', + null, + $categories, + [ + 'id' => 'category_' . $group_number, + 'disabled' => 'true', + 'style' => 'background-color: #f0f0f0;' + ] + ); + $group_el[] = $form->createElement('hidden', 'group_'.$group_number.'_category', $_GET['category_id']); + $defaults['group_'.$group_number.'_category'] = $_GET['category_id']; + } else { + $group_el[] = $form->createElement( + 'select', + 'group_' . $group_number . '_category', + null, + $categories, + ['id' => 'category_' . $group_number] + ); + } } else { $group_el[] = $form->createElement('hidden', 'group_'.$group_number.'_category', 0); @@ -247,7 +278,7 @@ function copy_value(key) { /* * Show form to generate new groups */ - $create_groups_form = new FormValidator('create_groups', 'post', api_get_self().'?'.api_get_cidreq()); + $create_groups_form = new FormValidator('create_groups', 'post', api_get_self().'?'.api_get_cidreq().(isset($_GET['category_id']) ? '&category_id='.$_GET['category_id'] : '')); $create_groups_form->addElement('header', $nameTools); $create_groups_form->addText('number_of_groups', get_lang('Number of groups to create'), null, ['value' => '1']); $create_groups_form->addButton('submit', get_lang('Proceed to create group(s)'), 'plus', 'primary'); @@ -306,16 +337,7 @@ function copy_value(key) { $obj = new UserGroupModel(); $classes = $obj->getUserGroupInCourse($options); if (count($classes) > 0) { - $description = '<p>'.get_lang('Using this option, you can create groups based on the classes subscribed to your course.').'</p>'; - $description .= '<ul>'; - foreach ($classes as $index => $class) { - $number_of_users = count($obj->get_users_by_usergroup($class['id'])); - $description .= '<li>'; - $description .= $class['name']; - $description .= ' ('.$number_of_users.' '.get_lang('Users').')'; - $description .= '</li>'; - } - $description .= '</ul>'; + $description = '<p>'.get_lang('Using this option, you can create groups based on the classes subscribed to your course.').'</p><br>'; $classForm = new FormValidator( 'create_class_groups_form', @@ -325,14 +347,42 @@ function copy_value(key) { $classForm->addHeader(get_lang('Groups from classes')); $classForm->addHtml($description); + + $classGroup = []; + + foreach ($classes as $index => $class) { + $number_of_users = count($obj->get_users_by_usergroup($class['id'])); + // $classForm->addCheckBox('checkbox_class_id_'.$class['id'], $class['title'] . ' ('.$number_of_users.' '.get_lang('Users').')'); + $classGroup[] = $classForm->createElement('checkbox', 'checkbox_class_id_'.$class['id'], null, $class['title'] . ' ('.$number_of_users.' '.get_lang('Users').')'); + } + + $classForm->addGroup( + $classGroup, + '', + null, + null, + false + ); + $classForm->addElement('hidden', 'action'); if ($allowGroupCategories) { - $classForm->addSelect('group_category', null, $categories); + if (isset($_GET['category_id'])) { + $classForm->addElement('hidden', 'group_category', $_GET['category_id']); + } else { + $classForm->addSelect('group_category', null, $categories); + } } else { $classForm->addElement('hidden', 'group_category'); } + + $classForm->addHtml('<div style="height: 1px; width: 100%; background-color: #e6e6e6; border-radius: 8px;" /><br>'); + + $classForm->addCheckBox('is_consistent_link', null, get_lang('Link classes to created groups ?'), + ['title' => get_lang('Info message about deactivation of consistent link')] + ); + $classForm->addHtml('<p class="alert alert-info">'.get_lang('Info message about deactivation of consistent link').'</p>'); + $classForm->addButtonSave(get_lang('Validate')); - $defaults['group_category'] = GroupManager::DEFAULT_GROUP_CATEGORY; $defaults['action'] = 'create_class_groups'; $classForm->setDefaults($defaults); $classForm->display(); diff --git a/public/main/group/group_space.php b/public/main/group/group_space.php index d069f328ab3..05ace2cc822 100644 --- a/public/main/group/group_space.php +++ b/public/main/group/group_space.php @@ -141,6 +141,14 @@ class="btn btn--plain" href="'.api_get_self().'?selfUnReg=1" } } + // add edit tool + if (true) { + $actions_array[] = [ + 'url' => 'settings.php?'.api_get_cidreq(true, false).'&gid='.$group_id, + 'content' => Display::getMdiIcon(ActionIcon::EDIT, 'ch-tool-icon', null, ICON_SIZE_MEDIUM, get_lang('Edit')), + ]; + } + if (GroupManager::TOOL_NOT_AVAILABLE != $groupEntity->getDocState()) { $params = [ 'toolName' => 'document', diff --git a/public/main/group/member_settings.php b/public/main/group/member_settings.php index c916ef8ef18..c35135535a0 100644 --- a/public/main/group/member_settings.php +++ b/public/main/group/member_settings.php @@ -3,6 +3,9 @@ /* For licensing terms, see /license.txt */ require_once __DIR__.'/../inc/global.inc.php'; + +use Chamilo\CoreBundle\Framework\Container; + $this_section = SECTION_COURSES; $current_course_tool = TOOL_GROUP; @@ -14,7 +17,7 @@ $groupEntity = api_get_group_entity($group_id); $nameTools = get_lang('Edit this group'); -$interbreadcrumb[] = ['url' => 'group.php', 'name' => get_lang('Groups')]; +$interbreadcrumb[] = ['url' => 'group.php?'.api_get_cidreq(), 'name' => get_lang('Groups')]; $interbreadcrumb[] = ['url' => 'group_space.php?'.api_get_cidreq(), 'name' => $groupEntity->getTitle()]; $is_group_member = GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity); @@ -227,6 +230,25 @@ function check_group_members($value) $form->setDefaults($defaults); echo GroupManager::getSettingBar('member'); -$form->display(); + +// check if group has a CGroupRelUsergroup +$courseInfo = api_get_course_info_by_id(api_get_course_int_id()); + +if (GroupManager::is_group_linked_to_usergroup($groupEntity)) { + + echo '<div class="alert alert-info">Ce groupe est lié à la classe ' .$courseInfo['title'].'. La liste de ses membres dépend des membres de la classe et ne peut-être modifiée. + Allez dans les paramètres du groupe pour rompre ce lien si vous souhaitez ajouter ou ôter des membres de la classe. + </div>'; + + echo '<h3>Membres du groupe</h3>'; + $memberInfos = GroupManager::get_subscribed_users($groupEntity); + echo '<ul>'; + foreach ($memberInfos as $memberInfo) { + echo '<li>'.$memberInfo['firstname'].' '.$memberInfo['lastname'].' ('.$memberInfo['username'].')'.'</li>'; + } + echo '</ul>'; +} else { + $form->display(); +} Display::display_footer(); diff --git a/public/main/group/settings.php b/public/main/group/settings.php index 8ca77e2660f..78264db0929 100644 --- a/public/main/group/settings.php +++ b/public/main/group/settings.php @@ -25,6 +25,13 @@ $groupRepo = Container::getGroupRepository(); /** @var CGroup $groupEntity */ $groupEntity = $groupRepo->find($group_id); +$linkedCategory = GroupManager::get_category_from_group($group_id); + +if (isset($_GET['remove_consistent_link'])) { + GroupManager::remove_group_consistent_link($groupEntity); + Display::addFlash(Display::return_message(get_lang('Group is no longer linked to the course'), 'normal')); + header('Location: group.php?'.api_get_cidreq(true, false)); +} if (null === $groupEntity) { api_not_allowed(true); @@ -35,9 +42,7 @@ $interbreadcrumb[] = ['url' => 'group_space.php?'.api_get_cidreq(), 'name' => $groupEntity->getTitle()]; $groupMember = GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity); -if (!$groupMember && !api_is_allowed_to_edit(false, true)) { - api_not_allowed(true); -} +$courseInfo = api_get_course_info_by_id(api_get_course_int_id()); // Build form $form = new FormValidator('group_edit', 'post', api_get_self().'?'.api_get_cidreq()); @@ -55,6 +60,17 @@ // Group name $form->addElement('text', 'name', get_lang('Group name')); +if (!$groupMember && !api_is_allowed_to_edit(false, true)) { + api_not_allowed(true); +} + +// Message for group rel usergroup +if (GroupManager::is_group_linked_to_usergroup($groupEntity)) { + $form->addHtml('<div class="alert alert-info">'.get_lang('Warning message to warn that the user cannot modify members of linked group').'<br> + <a href="settings.php?'.api_get_cidreq().'&remove_consistent_link=true" class="btn p-button-sm p-button p-mr-2 mt-2 pointer">'.get_lang('Remove the group link with the class'). + '</a></div>'); +} + if ('true' === api_get_setting('allow_group_categories')) { $groupCategories = GroupManager::get_categories(); $categoryList = []; diff --git a/public/main/inc/lib/groupmanager.lib.php b/public/main/inc/lib/groupmanager.lib.php index 4c9f42c94f8..14370e05bde 100644 --- a/public/main/inc/lib/groupmanager.lib.php +++ b/public/main/inc/lib/groupmanager.lib.php @@ -11,6 +11,9 @@ use Doctrine\Common\Collections\Criteria; use Chamilo\CoreBundle\Component\Utils\ActionIcon; use Chamilo\CoreBundle\Component\Utils\ToolIcon; +use Chamilo\CourseBundle\Entity\CGroupRelUsergroup; +use Chamilo\CoreBundle\Entity\Usergroup; +use Chamilo\CoreBundle\Entity\Session; /** * This library contains some functions for group-management. @@ -386,11 +389,14 @@ public static function create_subgroups($group_id, $number_of_groups) /** * Create a group for every class subscribed to the current course. * + * @author Esteban Ristich <esteban.ristich@protonmail.com> + * * @param int $categoryId The category in which the groups should be created + * @param array $classIds The ids of the classes to be created * * @return array */ - public static function create_class_groups($categoryId) + public static function create_class_groups(int $categoryId, array $classIds = []): array { $options['where'] = [' usergroup.course_id = ? ' => api_get_course_int_id()]; $obj = new UserGroupModel(); @@ -398,23 +404,196 @@ public static function create_class_groups($categoryId) $group_ids = []; foreach ($classes as $class) { - $userList = $obj->get_users_by_usergroup($class['id']); + if (in_array((int)$class['id'], $classIds)) { + $userList = $obj->get_users_by_usergroup($class['id']); + $groupId = self::create_group( + $class['title'], + $categoryId, + 0, + null + ); + + if ($groupId) { + self::subscribeUsers($userList, api_get_group_entity($groupId)); + $group_ids[] = $groupId; + } + } + } + + return $group_ids; + } + + /** + * Create a group for every class subscribed to the current course + * + * @todo: move part of doctrine query in repository for future + * + * @author Esteban Ristich <esteban.ristich@protonmail.com> + * + * @param int $category_id The category in which the groups should be created + * @param array $classIds The ids of the classes to be created + * + * @return array + * @throws \Doctrine\DBAL\DBALException + */ + public static function create_usergroup_consistent_groups(int $category_id = 0, array $classIds = []): array + { + // check if group is not duplicated in same category + /** @var \Chamilo\CourseBundle\Repository\CGroupRelUsergroupRepository $relRepository */ + $relRepository = Database::getManager()->getRepository(CGroupRelUsergroup::class); + $filteredClassIds = $classIds; + + foreach ($classIds as $k => $classId) { + // get count of duclicated groups in same category + $qb = $relRepository->createQueryBuilder('gru'); + $qb = $qb->select('count(gru.id)'); + $qb = $qb->innerJoin('gru.group', 'g', \Doctrine\ORM\Query\Expr\Join::WITH, 'g.category = :categoryId'); + $qb->setParameter('categoryId', $category_id); + $qb->where($qb->expr()->eq('gru.usergroup', ':usergroupId')); + $qb->setParameter('usergroupId', $classId); + // $rawSQL = $qb->getQuery()->getSql(); + $groupNb = $qb->getQuery()->getSingleScalarResult(); + $isDuplicate = $groupNb !== 0; + if ($isDuplicate) { + unset($filteredClassIds[$k]); + } + } + + // check if a category has been done, create one otherwise + $categorieGroupe = self::get_category($category_id); + if (count($categorieGroupe) == 0) { + $category_id = self::create_category( + get_lang('DefaultGroupCategory'), + '', + 1, + 1, + 1, + 1, + 1, + 1 + ); + } + + if ($category_id == 0) { + return []; + } + + // BEGIN TEST + $courseId = api_get_course_int_id(); + $sessionId = api_get_session_id(); + $group_ids = []; + $session = Database::getManager()->getRepository(Session::class)->find($sessionId); + $course = Database::getManager()->getRepository(Course::class)->find($courseId); + + foreach ($filteredClassIds as $classId) { + $usergroup = Database::getManager()->getRepository(Usergroup::class)->find($classId); + $groupId = self::create_group( - $class['name'], - $categoryId, + $usergroup->getTitle(), // name of class (usergroup) + $category_id, // category_id 0, null ); + $group = Database::getManager()->getRepository(CGroup::class)->find($groupId); + + // fill the group from usergroup + $obj = new UserGroupModel(); + $userList = $obj->get_users_by_usergroup($classId); if ($groupId) { self::subscribeUsers($userList, api_get_group_entity($groupId)); - $group_ids[] = $groupId; } - } + $groupRelUsergroup = (new CGroupRelUsergroup()) + ->setGroup($group) + ->setUsergroup($usergroup) + ->setSession($session) + ->setCourse($course) + ->setReadyAutogroup(0) + ; + + $em = Database::getManager(); + $em->persist($groupRelUsergroup); + $em->flush(); + + $group_ids[] = $groupRelUsergroup->getId(); + } return $group_ids; } + /** + * Get the usergroup (class) linked to the group if it exists. + * + * @author Esteban Ristich <esteban.ristich@protonmail.com> + * + * @param CGroup $group + * + * @return Usergroup|null + */ + public static function get_usergroup_link(CGroup $group): ?Usergroup + { + $em = Database::getManager(); + $repo = $em->getRepository(CGroupRelUsergroup::class); + $criteria = [ + 'group' => $group, + ]; + + $rel = $repo->findOneBy($criteria); + if ($rel instanceof CGroupRelUsergroup) { + return $rel->getUsergroup(); + } else { + return null; + } + } + + /** + * Check if a group has a consistent link to an usergroup. + * + * @author Esteban Ristich <esteban.ristich@protonmail.com> + * + * @param CGroup $group + * + * @return bool + */ + public static function is_group_linked_to_usergroup(CGroup $group): bool + { + $em = Database::getManager(); + $repo = $em->getRepository(CGroupRelUsergroup::class); + $criteria = [ + 'group' => $group, + ]; + + $rel = $repo->findOneBy($criteria); + return $rel instanceof CGroupRelUsergroup; + } + + /** + * Remove the consistent link between usergroup and group. + * + * @author Esteban Ristich <esteban.ristich@protonmail.com> + * + * @param CGroup $group + * + * @return bool + */ + public static function remove_group_consistent_link(CGroup $group): bool + { + $em = Database::getManager(); + $repo = Database::getManager()->getRepository(CGroupRelUsergroup::class); + $criteria = [ + 'group' => $group, + ]; + + $rel = $repo->findOneBy($criteria); + if ($rel instanceof CGroupRelUsergroup) { + $em->remove($rel); + $em->flush(); + return true; + } else { + return false; + } + } + /** * Deletes groups and their data. * @@ -2236,6 +2415,12 @@ class = "btn btn--plain" } } + // linked class + if (api_get_setting('allow_group_categories') === 'true') { + $usergroup = GroupManager::get_usergroup_link($group); + isset($usergroup) ? $row[] = $usergroup->getTitle() : $row[] = '-'; + } + // @todo fix group session access. $groupSessionId = null; @@ -2317,6 +2502,9 @@ class = "btn btn--plain" $table->set_header($column++, get_lang('Groups')); $table->set_header($column++, get_lang('Group tutor')); $table->set_header($column++, get_lang('Registered'), false); + if (api_get_setting('allow_group_categories') === 'true') { + $table->set_header($column++, get_lang('Classe liée'), false); + } if (!api_is_allowed_to_edit(false, true)) { // If self-registration allowed diff --git a/src/CoreBundle/Framework/Container.php b/src/CoreBundle/Framework/Container.php index 82cd9649b1b..2bdffe14bcc 100644 --- a/src/CoreBundle/Framework/Container.php +++ b/src/CoreBundle/Framework/Container.php @@ -62,6 +62,7 @@ use Chamilo\CourseBundle\Repository\CForumThreadRepository; use Chamilo\CourseBundle\Repository\CGlossaryRepository; use Chamilo\CourseBundle\Repository\CGroupCategoryRepository; +use Chamilo\CourseBundle\Repository\CGroupRelUsergroupRepository; use Chamilo\CourseBundle\Repository\CGroupRepository; use Chamilo\CourseBundle\Repository\CLinkCategoryRepository; use Chamilo\CourseBundle\Repository\CLinkRepository; @@ -672,6 +673,11 @@ public static function getThemeHelper(): ThemeHelper return self::$container->get(ThemeHelper::class); } + public static function getGroupRelUsergroupRepository(): CGroupRelUsergroupRepository + { + return self::$container->get(CGroupRelUsergroupRepository::class); + } + public static function getAccessUrlHelper(): AccessUrlHelper { /** @var AccessUrlHelper $helper */ diff --git a/src/CourseBundle/Entity/CGroupRelUsergroup.php b/src/CourseBundle/Entity/CGroupRelUsergroup.php index 01505164551..45e98c6af2a 100644 --- a/src/CourseBundle/Entity/CGroupRelUsergroup.php +++ b/src/CourseBundle/Entity/CGroupRelUsergroup.php @@ -10,12 +10,13 @@ use Chamilo\CoreBundle\Entity\Session; use Chamilo\CoreBundle\Entity\Usergroup; use Doctrine\ORM\Mapping as ORM; +use Chamilo\CourseBundle\Repository\CGroupRelUsergroupRepository; /** * CGroupRelUsergroup. */ #[ORM\Table(name: 'c_group_rel_usergroup')] -#[ORM\Entity] +#[ORM\Entity(repositoryClass: CGroupRelUsergroupRepository::class)] class CGroupRelUsergroup { #[ORM\Id] @@ -55,7 +56,6 @@ public function getGroup(): CGroup public function setGroup(CGroup $group): self { $this->group = $group; - return $this; } @@ -67,7 +67,6 @@ public function getUsergroup(): Usergroup public function setUsergroup(Usergroup $usergroup): self { $this->usergroup = $usergroup; - return $this; } @@ -79,7 +78,6 @@ public function getSession(): ?Session public function setSession(?Session $session): self { $this->session = $session; - return $this; } @@ -91,7 +89,6 @@ public function getCourse(): ?Course public function setCourse(?Course $course): self { $this->course = $course; - return $this; } @@ -103,7 +100,6 @@ public function isReadyAutogroup(): bool public function setReadyAutogroup(bool $readyAutogroup): self { $this->readyAutogroup = $readyAutogroup; - return $this; } } diff --git a/src/CourseBundle/Repository/CGroupRelUsergroupRepository.php b/src/CourseBundle/Repository/CGroupRelUsergroupRepository.php new file mode 100644 index 00000000000..fb6aec2b0a3 --- /dev/null +++ b/src/CourseBundle/Repository/CGroupRelUsergroupRepository.php @@ -0,0 +1,15 @@ +<?php + +namespace Chamilo\CourseBundle\Repository; + +use Chamilo\CourseBundle\Entity\CGroupRelUsergroup; +use Doctrine\Persistence\ManagerRegistry; +use Chamilo\CoreBundle\Repository\ResourceRepository; + +class CGroupRelUsergroupRepository extends ResourceRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, CGroupRelUsergroup::class); + } +} diff --git a/translations/messages.en.po b/translations/messages.en.po index cd2c4b0315c..c46e2ad36cc 100644 --- a/translations/messages.en.po +++ b/translations/messages.en.po @@ -27830,6 +27830,21 @@ msgstr "Autolaunch settings" msgid "Auto-launch" msgstr "Auto-launch" +msgid "Link classes to created groups ?" +msgstr "Link classes to created groups ?" + +msgid "Info message about deactivation of consistent link" +msgstr "If desactivated, the classes linked to this group are simply a copy of the users of the selected class. But, if it is enabled, the selected class is linked to the group, and modifications to the class are reflected in the group (this mode prevents modification of the group)." + +msgid "Warning message to warn that the user cannot modify members of linked group" +msgstr "This group is linked to a class. Any additions or deletions of members to the class will be push the group. You cannot add or remove members to a group linked to a class. However you can break this link by clicking on the button below" + +msgid "Remove the group link with the class" +msgstr "Remove the group link with the class" + +msgid "Group is no longer linked to the course" +msgstr "Group is no longer linked to the course" + msgid "User registrations by month" msgstr "User registrations by month" diff --git a/translations/messages.fr.po b/translations/messages.fr.po index 34dc0758dda..5aee48475e7 100644 --- a/translations/messages.fr.po +++ b/translations/messages.fr.po @@ -29613,6 +29613,21 @@ msgstr "Paramètres d'auto démarrage" msgid "Auto-launch" msgstr "Auto-démarrage" +msgid "Link classes to created groups ?" +msgstr "Lier les classes aux groupes crées ?" + +msgid "Info message about deactivation of consistent link" +msgstr "Si elle est désactivé les classes lié à ce groupe sont simplement une copie des utilisateurs de la classe séléctionnée. A contrario si elle est activé, la classe séléctionnée est lié au groupe et les modifications de la classe sont répercuté sur le groupe (ce mode empêche la modification du groupe)" + +msgid "Warning message to warn that the user cannot modify members of linked group" +msgstr "Ce groupe est lié à la une classe. Les ajouts ou suppression de membres à la classe seront reportés sur le groupe. Vous ne pouvez pas ajouter ou ôter des membres à un groupe lié une classe. Vous pouvez cependant rompre ce lien en cliquant sur le bouton ci-dessous" + +msgid "Remove the group link with the class" +msgstr "Rompre le lien du groupe avec la classe" + +msgid "Group is no longer linked to the course" +msgstr "Le groupe n'esp plus lié au cours" + msgid "Reminders" msgstr "Notifications" diff --git a/translations/messages.pot b/translations/messages.pot index 317f66f5fd1..75419867534 100644 --- a/translations/messages.pot +++ b/translations/messages.pot @@ -27810,6 +27810,21 @@ msgstr "" msgid "Auto-launch" msgstr "" +msgid "Link classes to created groups ?" +msgstr "" + +msgid "Info message about deactivation of consistent link" +msgstr "" + +msgid "Warning message to warn that the user cannot modify members of linked group" +msgstr "" + +msgid "Remove the group link with the class" +msgstr "" + +msgid "Group is no longer linked to the course" +msgstr "" + msgid "User registrations by month" msgstr ""