Upgrade from 1.11.x pass entities in function

pull/3768/head
Julio 5 years ago
parent d3ab1d46aa
commit 4c2bc1a4ef
  1. 4
      public/main/announcements/announcements.php
  2. 8
      public/main/calendar/agenda_js.php
  3. 7
      public/main/cron/import_csv.php
  4. 10
      public/main/forum/editpost.php
  5. 16
      public/main/forum/forumfunction.inc.php
  6. 13
      public/main/forum/viewforum.php
  7. 26
      public/main/forum/viewthread.php
  8. 36
      public/main/group/group.php
  9. 92
      public/main/group/group_space.php
  10. 26
      public/main/group/member_settings.php
  11. 9
      public/main/group/settings.php
  12. 24
      public/main/group/tutor_settings.php
  13. 14
      public/main/inc/ajax/announcement.ajax.php
  14. 6
      public/main/inc/ajax/document.ajax.php
  15. 4
      public/main/inc/ajax/forum.ajax.php
  16. 4
      public/main/inc/lib/AnnouncementManager.php
  17. 22
      public/main/inc/lib/agenda.lib.php
  18. 4
      public/main/inc/lib/document.lib.php
  19. 414
      public/main/inc/lib/groupmanager.lib.php
  20. 18
      public/main/inc/lib/pdf.lib.php
  21. 20
      public/main/inc/lib/sessionmanager.lib.php
  22. 42
      public/main/wiki/wiki.inc.php
  23. 5
      public/main/work/work.php
  24. 6
      public/plugin/bbb/listing.php
  25. 3
      public/plugin/zoom/lib/ZoomPlugin.php
  26. 7
      src/CoreBundle/Security/Authorization/Voter/GroupVoter.php

@ -4,6 +4,7 @@
use Chamilo\CoreBundle\Framework\Container; use Chamilo\CoreBundle\Framework\Container;
use Chamilo\CourseBundle\Entity\CAnnouncement; use Chamilo\CourseBundle\Entity\CAnnouncement;
use Chamilo\CourseBundle\Entity\CGroup;
/** /**
* @author Frederik Vermeire <frederik.vermeire@pandora.be>, UGent Internship * @author Frederik Vermeire <frederik.vermeire@pandora.be>, UGent Internship
@ -49,6 +50,7 @@ $tbl_item_property = Database::get_course_table(TABLE_ITEM_PROPERTY);
$isTutor = false; $isTutor = false;
if (!empty($group_id)) { if (!empty($group_id)) {
$groupEntity = api_get_group_entity($group_id);
$groupProperties = GroupManager::get_group_properties($group_id); $groupProperties = GroupManager::get_group_properties($group_id);
$interbreadcrumb[] = [ $interbreadcrumb[] = [
'url' => api_get_path(WEB_CODE_PATH).'group/group.php?'.api_get_cidreq(), 'url' => api_get_path(WEB_CODE_PATH).'group/group.php?'.api_get_cidreq(),
@ -61,7 +63,7 @@ if (!empty($group_id)) {
if (false === $allowToEdit) { if (false === $allowToEdit) {
// Check if user is tutor group // Check if user is tutor group
$isTutor = GroupManager::is_tutor_of_group(api_get_user_id(), $groupProperties, $courseId); $isTutor = $groupEntity->userIsTutor(api_get_user_entity());
if ($isTutor) { if ($isTutor) {
$allowToEdit = true; $allowToEdit = true;
} }

@ -40,18 +40,12 @@ api_protect_course_group(GroupManager::GROUP_TOOL_CALENDAR);
$agenda = new Agenda($type); $agenda = new Agenda($type);
$is_group_tutor = false;
$session_id = api_get_session_id(); $session_id = api_get_session_id();
$group_id = api_get_group_id(); $group_id = api_get_group_id();
$courseId = api_get_course_int_id(); $courseId = api_get_course_int_id();
if (!empty($group_id)) { if (!empty($group_id)) {
$group_properties = GroupManager::get_group_properties($group_id); $group_properties = GroupManager::get_group_properties($group_id);
$is_group_tutor = GroupManager::is_tutor_of_group(
api_get_user_id(),
$group_properties,
$courseId
);
$interbreadcrumb[] = [ $interbreadcrumb[] = [
"url" => api_get_path(WEB_CODE_PATH)."group/group.php?".api_get_cidreq(), "url" => api_get_path(WEB_CODE_PATH)."group/group.php?".api_get_cidreq(),
"name" => get_lang('Groups'), "name" => get_lang('Groups'),
@ -108,7 +102,7 @@ switch ($type) {
$tpl->assign('js_format_date', 'll'); $tpl->assign('js_format_date', 'll');
$region_value = api_get_language_isocode(); $region_value = api_get_language_isocode();
if ('en' == $region_value) { if ('en' === $region_value) {
$region_value = 'en-GB'; $region_value = 'en-GB';
} }
$tpl->assign('region_value', $region_value); $tpl->assign('region_value', $region_value);

@ -1805,7 +1805,7 @@ class ImportCsv
) { ) {
foreach ($groupBackup['tutor'][$teacherId][$courseInfo['code']] as $data) { foreach ($groupBackup['tutor'][$teacherId][$courseInfo['code']] as $data) {
$groupInfo = GroupManager::get_group_properties($data['group_id']); $groupInfo = GroupManager::get_group_properties($data['group_id']);
GroupManager::subscribe_tutors( GroupManager::subscribeTutors(
[$teacherId], [$teacherId],
$groupInfo, $groupInfo,
$data['c_id'] $data['c_id']
@ -1818,10 +1818,9 @@ class ImportCsv
!empty($groupBackup['user'][$teacherId][$courseInfo['code']]) !empty($groupBackup['user'][$teacherId][$courseInfo['code']])
) { ) {
foreach ($groupBackup['user'][$teacherId][$courseInfo['code']] as $data) { foreach ($groupBackup['user'][$teacherId][$courseInfo['code']] as $data) {
$groupInfo = GroupManager::get_group_properties($data['group_id']); GroupManager::subscribeUsers(
GroupManager::subscribe_users(
[$teacherId], [$teacherId],
$groupInfo, api_get_group_entity($data['group_id']),
$data['c_id'] $data['c_id']
); );
} }

@ -90,9 +90,11 @@ if (api_is_in_gradebook()) {
'name' => get_lang('Assessments'), 'name' => get_lang('Assessments'),
]; ];
} }
$group_id = api_get_group_id();
$groupEntity = null;
if ('group' === $origin && $group_id) {
$groupEntity = api_get_group_entity($group_id);
$group_properties = GroupManager::get_group_properties(api_get_group_id());
if ('group' === $origin) {
$_clean['toolgroup'] = api_get_group_id(); $_clean['toolgroup'] = api_get_group_id();
$interbreadcrumb[] = [ $interbreadcrumb[] = [
'url' => api_get_path(WEB_CODE_PATH).'group/group.php?'.api_get_cidreq(), 'url' => api_get_path(WEB_CODE_PATH).'group/group.php?'.api_get_cidreq(),
@ -100,7 +102,7 @@ if ('group' === $origin) {
]; ];
$interbreadcrumb[] = [ $interbreadcrumb[] = [
'url' => api_get_path(WEB_CODE_PATH).'group/group_space.php?'.api_get_cidreq(), 'url' => api_get_path(WEB_CODE_PATH).'group/group_space.php?'.api_get_cidreq(),
'name' => get_lang('Group area').' '.$group_properties['name'], 'name' => get_lang('Group area').' '.$groupEntity->getName(),
]; ];
$interbreadcrumb[] = [ $interbreadcrumb[] = [
'url' => api_get_path(WEB_CODE_PATH).'forum/viewforum.php?'.api_get_cidreq().'&forum='.$forumId, 'url' => api_get_path(WEB_CODE_PATH).'forum/viewforum.php?'.api_get_cidreq().'&forum='.$forumId,
@ -181,7 +183,7 @@ $group_id = api_get_group_id();
if (!api_is_allowed_to_edit(null, true) && if (!api_is_allowed_to_edit(null, true) &&
0 == $forum->getAllowEdit() && 0 == $forum->getAllowEdit() &&
!GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties) !GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity)
) { ) {
api_not_allowed(true); api_not_allowed(true);
} }

@ -12,6 +12,7 @@ use Chamilo\CourseBundle\Entity\CForumNotification;
use Chamilo\CourseBundle\Entity\CForumPost; use Chamilo\CourseBundle\Entity\CForumPost;
use Chamilo\CourseBundle\Entity\CForumThread; use Chamilo\CourseBundle\Entity\CForumThread;
use Chamilo\CoreBundle\Entity\Course; use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CourseBundle\Entity\CGroup;
use ChamiloSession as Session; use ChamiloSession as Session;
use Doctrine\Common\Collections\Criteria; use Doctrine\Common\Collections\Criteria;
use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\File\UploadedFile;
@ -1883,7 +1884,6 @@ function getPosts(
; ;
$groupId = api_get_group_id(); $groupId = api_get_group_id();
$groupInfo = GroupManager::get_group_properties($groupId);
$filterModerated = true; $filterModerated = true;
if (empty($groupId)) { if (empty($groupId)) {
@ -1891,7 +1891,8 @@ function getPosts(
$filterModerated = false; $filterModerated = false;
} }
} else { } else {
if (GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo) || $groupEntity = api_get_group_entity($groupId);
if (GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity) ||
api_is_allowed_to_edit(false, true) api_is_allowed_to_edit(false, true)
) { ) {
$filterModerated = false; $filterModerated = false;
@ -3831,13 +3832,11 @@ function displayUserLink(User $user)
function displayUserImage(User $user) function displayUserImage(User $user)
{ {
$url = Container::getIllustrationRepository()->getIllustrationUrl($user, null, ICON_SIZE_BIG); $url = Container::getIllustrationRepository()->getIllustrationUrl($user, '', ICON_SIZE_BIG);
return '<div class="thumbnail"><img src="'.$url.'?w=100"/></div>'; return '<div class="thumbnail"><img src="'.$url.'?w=100"/></div>';
} }
/** /**
* The thread view counter gets increased every time someone looks at the thread. * The thread view counter gets increased every time someone looks at the thread.
* *
@ -5059,16 +5058,11 @@ function delete_attachment($postId, $attachmentId)
* *
* @todo this is basically the same code as the get_forums function. Consider merging the two. * @todo this is basically the same code as the get_forums function. Consider merging the two.
*/ */
function get_forums_of_group($groupInfo) function get_forums_of_group(CGroup $group)
{ {
$groupId = (int) $groupInfo['id'];
$group = api_get_group_entity($groupId);
$course = api_get_course_entity(); $course = api_get_course_entity();
$session = api_get_session_entity(); $session = api_get_session_entity();
$repo = Container::getForumRepository(); $repo = Container::getForumRepository();
$qb = $repo->getResourcesByCourse($course, $session, $group); $qb = $repo->getResourcesByCourse($course, $session, $group);
return $qb->getQuery()->getResult(); return $qb->getQuery()->getResult();

@ -22,8 +22,8 @@ $userId = api_get_user_id();
$sessionId = api_get_session_id(); $sessionId = api_get_session_id();
$groupId = api_get_group_id(); $groupId = api_get_group_id();
$courseId = api_get_course_int_id(); $courseId = api_get_course_int_id();
$groupInfo = GroupManager::get_group_properties($groupId); //$groupInfo = GroupManager::get_group_properties($groupId);
$isTutor = GroupManager::is_tutor_of_group($userId, $groupInfo, $courseId); //$isTutor = GroupManager::is_tutor_of_group($userId, $groupInfo, $courseId);
$isAllowedToEdit = api_is_allowed_to_edit(false, true) && api_is_allowed_to_session_edit(false, true); $isAllowedToEdit = api_is_allowed_to_edit(false, true) && api_is_allowed_to_session_edit(false, true);
$repo = Container::getForumRepository(); $repo = Container::getForumRepository();
@ -46,11 +46,10 @@ $category = $forumEntity->getForumCategory();
$is_group_tutor = false; $is_group_tutor = false;
if (!empty($groupId)) { if (!empty($groupId)) {
//Group info & group category info $groupEntity = api_get_group_entity($groupId);
$group_properties = GroupManager::get_group_properties($groupId); $is_group_tutor = GroupManager::isTutorOfGroup(
$is_group_tutor = GroupManager::is_tutor_of_group(
api_get_user_id(), api_get_user_id(),
$group_properties $groupEntity
); );
// Course // Course
@ -102,7 +101,7 @@ if (!empty($groupId)) {
]; ];
$interbreadcrumb[] = [ $interbreadcrumb[] = [
'url' => api_get_path(WEB_CODE_PATH).'group/group_space.php?'.api_get_cidreq(), 'url' => api_get_path(WEB_CODE_PATH).'group/group_space.php?'.api_get_cidreq(),
'name' => get_lang('Group area').' '.$group_properties['name'], 'name' => get_lang('Group area').' '.$groupEntity->getName(),
]; ];
$interbreadcrumb[] = [ $interbreadcrumb[] = [
'url' => '#', 'url' => '#',

@ -62,7 +62,11 @@ if (api_is_in_gradebook()) {
} }
$groupId = api_get_group_id(); $groupId = api_get_group_id();
$group_properties = GroupManager::get_group_properties($groupId); $groupEntity = null;
if (!empty($groupId)) {
$groupEntity = api_get_group_entity($groupId);
}
$sessionId = api_get_session_id(); $sessionId = api_get_session_id();
$ajaxURL = api_get_path(WEB_AJAX_PATH).'forum.ajax.php?'.api_get_cidreq().'&a=change_post_status'; $ajaxURL = api_get_path(WEB_AJAX_PATH).'forum.ajax.php?'.api_get_cidreq().'&a=change_post_status';
@ -109,7 +113,7 @@ switch ($my_action) {
isset($_GET['content']) && isset($_GET['content']) &&
isset($_GET['id']) && isset($_GET['id']) &&
(api_is_allowed_to_edit(false, true) || (api_is_allowed_to_edit(false, true) ||
(isset($group_properties['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties))) ($groupEntity && GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity)))
) { ) {
/** @var CForumPost $postEntity */ /** @var CForumPost $postEntity */
$postEntity = $repoPost->find($_GET['id']); $postEntity = $repoPost->find($_GET['id']);
@ -123,7 +127,7 @@ switch ($my_action) {
case 'visible': case 'visible':
if (isset($_GET['id']) && if (isset($_GET['id']) &&
(api_is_allowed_to_edit(false, true) || (api_is_allowed_to_edit(false, true) ||
(isset($group_properties['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties))) ($groupEntity && GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity)))
) { ) {
/** @var CForumPost $postEntity */ /** @var CForumPost $postEntity */
$postEntity = $repoPost->find($_GET['id']); $postEntity = $repoPost->find($_GET['id']);
@ -179,7 +183,7 @@ if (!empty($groupId)) {
]; ];
$interbreadcrumb[] = [ $interbreadcrumb[] = [
'url' => api_get_path(WEB_CODE_PATH).'group/group_space.php?'.api_get_cidreq(), 'url' => api_get_path(WEB_CODE_PATH).'group/group_space.php?'.api_get_cidreq(),
'name' => get_lang('Group area').' '.$group_properties['name'], 'name' => get_lang('Group area').' '.$groupEntity->getName(),
]; ];
$interbreadcrumb[] = [ $interbreadcrumb[] = [
'url' => api_get_path(WEB_CODE_PATH).'forum/viewforum.php?forum='.$forumId.'&'.api_get_cidreq().'&search='.Security::remove_XSS(urlencode($my_search)), 'url' => api_get_path(WEB_CODE_PATH).'forum/viewforum.php?forum='.$forumId.'&'.api_get_cidreq().'&search='.Security::remove_XSS(urlencode($my_search)),
@ -312,14 +316,18 @@ $group_id = api_get_group_id();
$locked = api_resource_is_locked_by_gradebook($threadId, LINK_FORUM_THREAD); $locked = api_resource_is_locked_by_gradebook($threadId, LINK_FORUM_THREAD);
$sessionId = api_get_session_id(); $sessionId = api_get_session_id();
$userId = api_get_user_id(); $userId = api_get_user_id();
$groupInfo = GroupManager::get_group_properties($group_id);
$postCount = 1; $postCount = 1;
$allowUserImageForum = api_get_course_setting('allow_user_image_forum'); $allowUserImageForum = api_get_course_setting('allow_user_image_forum');
$tutorGroup = false;
$groupEntity = null;
if (!empty($group_id)) {
$groupEntity = api_get_group_entity($group_id);
// The user who posted it can edit his thread only if the course admin allowed this in the properties // The user who posted it can edit his thread only if the course admin allowed this in the properties
// of the forum // of the forum
// The course admin him/herself can do this off course always // The course admin him/herself can do this off course always
$tutorGroup = GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo); $tutorGroup = GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity);
}
$postList = []; $postList = [];
foreach ($posts as $post) { foreach ($posts as $post) {
@ -393,7 +401,7 @@ foreach ($posts as $post) {
$editButton = ''; $editButton = '';
$askForRevision = ''; $askForRevision = '';
if ((isset($groupInfo['iid']) && $tutorGroup) || if (($groupEntity && $tutorGroup) ||
(1 == $forumEntity->getAllowEdit() && $posterId == $userId) || (1 == $forumEntity->getAllowEdit() && $posterId == $userId) ||
(api_is_allowed_to_edit(false, true) && (api_is_allowed_to_edit(false, true) &&
!(api_is_session_general_coach() && $forumEntity->getSessionId() != $sessionId)) !(api_is_session_general_coach() && $forumEntity->getSessionId() != $sessionId))
@ -414,7 +422,7 @@ foreach ($posts as $post) {
} }
} }
if ((isset($groupInfo['iid']) && $tutorGroup) || if (($groupEntity && $tutorGroup) ||
api_is_allowed_to_edit(false, true) && api_is_allowed_to_edit(false, true) &&
!(api_is_session_general_coach() && $forumEntity->getSessionId() != $sessionId) !(api_is_session_general_coach() && $forumEntity->getSessionId() != $sessionId)
) { ) {

@ -81,8 +81,8 @@ if (isset($_GET['action']) && $is_allowed_in_course) {
break; break;
case 'self_reg': case 'self_reg':
if (GroupManager::is_self_registration_allowed($userId, $groupInfo)) { if (GroupManager::is_self_registration_allowed($userId, $groupEntity)) {
GroupManager::subscribe_users($userId, $groupInfo); GroupManager::subscribeUsers($userId, $groupEntity);
Display::addFlash(Display::return_message(get_lang('You are now a member of this group.'))); Display::addFlash(Display::return_message(get_lang('You are now a member of this group.')));
header("Location: $currentUrl"); header("Location: $currentUrl");
exit; exit;
@ -94,8 +94,8 @@ if (isset($_GET['action']) && $is_allowed_in_course) {
break; break;
case 'self_unreg': case 'self_unreg':
if (GroupManager::is_self_unregistration_allowed($userId, $groupInfo)) { if (GroupManager::is_self_unregistration_allowed($userId, $groupEntity)) {
GroupManager::unsubscribe_users($userId, $groupInfo); GroupManager::subscribeUsers($userId, $groupEntity);
Display::addFlash(Display::return_message(get_lang('You\'re now unsubscribed.'))); Display::addFlash(Display::return_message(get_lang('You\'re now unsubscribed.')));
header("Location: $currentUrl"); header("Location: $currentUrl");
exit; exit;
@ -128,7 +128,7 @@ if (api_is_allowed_to_edit(false, true)) {
case 'empty_selected': case 'empty_selected':
if (is_array($_POST['group'])) { if (is_array($_POST['group'])) {
foreach ($_POST['group'] as $myGroupId) { foreach ($_POST['group'] as $myGroupId) {
GroupManager::unsubscribe_all_users($myGroupId); GroupManager::unsubscribeAllUsers($myGroupId);
} }
Display::addFlash(Display::return_message(get_lang('All selected groups are now empty'))); Display::addFlash(Display::return_message(get_lang('All selected groups are now empty')));
@ -241,18 +241,24 @@ if ('true' === api_get_setting('allow_group_categories')) {
foreach ($categories as $index => $category) { foreach ($categories as $index => $category) {
$categoryId = $category['iid']; $categoryId = $category['iid'];
$group_list = GroupManager::get_group_list($categoryId); $groupList = GroupManager::get_group_list($categoryId, [],
$groupToShow = GroupManager::process_groups($group_list, $categoryId); null,
null,
false,
null,
true
);
$groupToShow = GroupManager::processGroups($groupList, $categoryId);
if (empty($groupToShow)) { if (empty($groupToShow)) {
continue; continue;
} }
if (empty($categoryId) && empty($group_list)) { if (empty($categoryId) && empty($groupList)) {
continue; continue;
} }
$label = Display::label(count($group_list).' '.get_lang('Groups'), 'info'); $label = Display::label(count($groupList).' '.get_lang('Groups'), 'info');
$actions = null; $actions = null;
if (api_is_allowed_to_edit(false, true) && !empty($categoryId) && empty($sessionId)) { if (api_is_allowed_to_edit(false, true) && !empty($categoryId) && empty($sessionId)) {
// Edit // Edit
@ -292,7 +298,17 @@ if ('true' === api_get_setting('allow_group_categories')) {
echo $groupToShow; echo $groupToShow;
} }
} else { } else {
echo GroupManager::process_groups(GroupManager::get_group_list()); echo GroupManager::processGroups(
GroupManager::get_group_list(
null,
null,
null,
null,
false,
null,
true
)
);
} }
if (!isset($_GET['origin']) || 'learnpath' !== $_GET['origin']) { if (!isset($_GET['origin']) || 'learnpath' !== $_GET['origin']) {

@ -21,9 +21,13 @@ require_once api_get_path(SYS_CODE_PATH).'forum/forumfunction.inc.php';
$group_id = api_get_group_id(); $group_id = api_get_group_id();
$user_id = api_get_user_id(); $user_id = api_get_user_id();
$current_group = GroupManager::get_group_properties($group_id); $groupEntity = null;
$group_id = $current_group['iid']; if (!empty($group_id)) {
if (empty($current_group)) { $groupEntity = api_get_group_entity($group_id);
}
$group_id = $groupEntity->getIid();
if (empty($groupEntity)) {
api_not_allowed(true); api_not_allowed(true);
} }
@ -35,8 +39,8 @@ $interbreadcrumb[] = [
]; ];
/* Ensure all private groups // Juan Carlos Raña Trabado */ /* Ensure all private groups // Juan Carlos Raña Trabado */
$forums = get_forums_of_group($current_group); $forums = get_forums_of_group($groupEntity);
if (!GroupManager::userHasAccessToBrowse($user_id, $current_group, api_get_session_id())) { if (!GroupManager::userHasAccessToBrowse($user_id, $groupEntity, api_get_session_id())) {
api_not_allowed(true); api_not_allowed(true);
} }
@ -44,9 +48,9 @@ if (!GroupManager::userHasAccessToBrowse($user_id, $current_group, api_get_sessi
* User wants to register in this group * User wants to register in this group
*/ */
if (!empty($_GET['selfReg']) && if (!empty($_GET['selfReg']) &&
GroupManager::is_self_registration_allowed($user_id, $current_group) GroupManager::is_self_registration_allowed($user_id, $groupEntity)
) { ) {
GroupManager::subscribe_users($user_id, $current_group); GroupManager::subscribeUsers($user_id, $groupEntity);
Display::addFlash(Display::return_message(get_lang('You are now a member of this group.'))); Display::addFlash(Display::return_message(get_lang('You are now a member of this group.')));
} }
@ -54,16 +58,16 @@ if (!empty($_GET['selfReg']) &&
* User wants to unregister from this group * User wants to unregister from this group
*/ */
if (!empty($_GET['selfUnReg']) && if (!empty($_GET['selfUnReg']) &&
GroupManager::is_self_unregistration_allowed($user_id, $current_group) GroupManager::is_self_unregistration_allowed($user_id, $groupEntity)
) { ) {
GroupManager::unsubscribe_users($user_id, $current_group); GroupManager::unsubscribeUsers($user_id, $groupEntity);
Display::addFlash( Display::addFlash(
Display::return_message(get_lang('You\'re now unsubscribed.'), 'normal') Display::return_message(get_lang('You\'re now unsubscribed.'), 'normal')
); );
} }
Display::display_header( Display::display_header(
$nameTools.' '.Security::remove_XSS($current_group['name']), $nameTools.' '.Security::remove_XSS($groupEntity->getName()),
'Group' 'Group'
); );
@ -84,10 +88,10 @@ $confirmationMessage = addslashes(api_htmlentities(get_lang('Please confirm your
// Register to group. // Register to group.
$subscribe_group = ''; $subscribe_group = '';
if (GroupManager::is_self_registration_allowed($user_id, $current_group)) { if (GroupManager::is_self_registration_allowed($user_id, $groupEntity)) {
$subscribe_group = '<a $subscribe_group = '<a
class="btn btn-default" class="btn btn-default"
href="'.api_get_self().'?selfReg=1&group_id='.$current_group['id'].'" href="'.api_get_self().'?selfReg=1&group_id='.$group_id.'"
onclick="javascript: if(!confirm('."'".$confirmationMessage."'".')) return false;">'. onclick="javascript: if(!confirm('."'".$confirmationMessage."'".')) return false;">'.
get_lang('Add me to this group'). get_lang('Add me to this group').
'</a>'; '</a>';
@ -95,7 +99,7 @@ if (GroupManager::is_self_registration_allowed($user_id, $current_group)) {
// Unregister from group. // Unregister from group.
$unsubscribe_group = ''; $unsubscribe_group = '';
if (GroupManager :: is_self_unregistration_allowed($user_id, $current_group)) { if (GroupManager::is_self_unregistration_allowed($user_id, $groupEntity)) {
$unsubscribe_group = '<a $unsubscribe_group = '<a
class="btn btn-default" href="'.api_get_self().'?selfUnReg=1" class="btn btn-default" href="'.api_get_self().'?selfUnReg=1"
onclick="javascript: if(!confirm('."'".$confirmationMessage."'".')) return false;">'. onclick="javascript: if(!confirm('."'".$confirmationMessage."'".')) return false;">'.
@ -105,7 +109,7 @@ echo '&nbsp;</div>';
$edit_url = ''; $edit_url = '';
if (api_is_allowed_to_edit(false, true) || if (api_is_allowed_to_edit(false, true) ||
GroupManager::is_tutor_of_group($user_id, $current_group) GroupManager::isTutorOfGroup($user_id, $groupEntity)
) { ) {
$edit_url = '<a $edit_url = '<a
href="'.api_get_path(WEB_CODE_PATH).'group/settings.php?'.api_get_cidreq().'">'. href="'.api_get_path(WEB_CODE_PATH).'group/settings.php?'.api_get_cidreq().'">'.
@ -114,20 +118,19 @@ if (api_is_allowed_to_edit(false, true) ||
} }
echo Display::page_header( echo Display::page_header(
Security::remove_XSS($current_group['name']).' '.$edit_url.' '.$subscribe_group.' '.$unsubscribe_group Security::remove_XSS($groupEntity->getName()).' '.$edit_url.' '.$subscribe_group.' '.$unsubscribe_group
); );
if (!empty($current_group['description'])) { if (!empty($groupEntity->getDescription())) {
echo '<p>'.Security::remove_XSS($current_group['description']).'</p>'; echo '<p>'.Security::remove_XSS($groupEntity->getDescription()).'</p>';
} }
//if (GroupManager::userHasAccessToBrowse($user_id, $this_group, $session_id)) {
if (api_is_allowed_to_edit(false, true) || if (api_is_allowed_to_edit(false, true) ||
GroupManager::userHasAccessToBrowse($user_id, $current_group, api_get_session_id()) GroupManager::userHasAccessToBrowse($user_id, $groupEntity, api_get_session_id())
) { ) {
$actions_array = []; $actions_array = [];
if (is_array($forums)) { if (is_array($forums)) {
if (GroupManager::TOOL_NOT_AVAILABLE != $current_group['forum_state']) { if (GroupManager::TOOL_NOT_AVAILABLE != $groupEntity->getForumState()) {
foreach ($forums as $forum) { foreach ($forums as $forum) {
if ('public' === $forum->getForumGroupPublicPrivate() || if ('public' === $forum->getForumGroupPublicPrivate() ||
('private' === $forum->getForumGroupPublicPrivate()) || ('private' === $forum->getForumGroupPublicPrivate()) ||
@ -149,7 +152,7 @@ if (api_is_allowed_to_edit(false, true) ||
} }
} }
if (GroupManager::TOOL_NOT_AVAILABLE != $current_group['doc_state']) { if (GroupManager::TOOL_NOT_AVAILABLE != $groupEntity->getDocState()) {
// Link to the documents area of this group // Link to the documents area of this group
$actions_array[] = [ $actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH).'document/document.php?'.api_get_cidreq(), 'url' => api_get_path(WEB_CODE_PATH).'document/document.php?'.api_get_cidreq(),
@ -157,7 +160,7 @@ if (api_is_allowed_to_edit(false, true) ||
]; ];
} }
if (GroupManager::TOOL_NOT_AVAILABLE != $current_group['calendar_state']) { if (GroupManager::TOOL_NOT_AVAILABLE != $groupEntity->getCalendarState()) {
$groupFilter = ''; $groupFilter = '';
if (!empty($group_id)) { if (!empty($group_id)) {
$groupFilter = "&type=course&user_id=GROUP:$group_id"; $groupFilter = "&type=course&user_id=GROUP:$group_id";
@ -169,14 +172,14 @@ if (api_is_allowed_to_edit(false, true) ||
]; ];
} }
if (GroupManager::TOOL_NOT_AVAILABLE != $current_group['work_state']) { if (GroupManager::TOOL_NOT_AVAILABLE != $groupEntity->getWorkState()) {
// Link to the works area of this group // Link to the works area of this group
$actions_array[] = [ $actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH).'work/work.php?'.api_get_cidreq(), 'url' => api_get_path(WEB_CODE_PATH).'work/work.php?'.api_get_cidreq(),
'content' => Display::return_icon('work.png', get_lang('Assignments'), [], 32), 'content' => Display::return_icon('work.png', get_lang('Assignments'), [], 32),
]; ];
} }
if (GroupManager::TOOL_NOT_AVAILABLE != $current_group['announcements_state']) { if (GroupManager::TOOL_NOT_AVAILABLE != $groupEntity->getAnnouncementsState()) {
// Link to a group-specific part of announcements // Link to a group-specific part of announcements
$actions_array[] = [ $actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH).'announcements/announcements.php?'.api_get_cidreq(), 'url' => api_get_path(WEB_CODE_PATH).'announcements/announcements.php?'.api_get_cidreq(),
@ -184,28 +187,28 @@ if (api_is_allowed_to_edit(false, true) ||
]; ];
} }
if (GroupManager::TOOL_NOT_AVAILABLE != $current_group['wiki_state']) { if (GroupManager::TOOL_NOT_AVAILABLE != $groupEntity->getWikiState()) {
// Link to the wiki area of this group // Link to the wiki area of this group
$actions_array[] = [ $actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH). 'url' => api_get_path(WEB_CODE_PATH).
'wiki/index.php?'.api_get_cidreq().'&action=show&title=index&sid='.api_get_session_id().'&group_id='.$current_group['id'], 'wiki/index.php?'.api_get_cidreq().'&action=show&title=index&sid='.api_get_session_id().'&group_id='.$groupEntity->getIid(),
'content' => Display::return_icon('wiki.png', get_lang('Wiki'), [], 32), 'content' => Display::return_icon('wiki.png', get_lang('Wiki'), [], 32),
]; ];
} }
if (GroupManager::TOOL_NOT_AVAILABLE != $current_group['chat_state']) { if (GroupManager::TOOL_NOT_AVAILABLE != $groupEntity->getChatState()) {
// Link to the chat area of this group // Link to the chat area of this group
if (api_get_course_setting('allow_open_chat_window')) { if (api_get_course_setting('allow_open_chat_window')) {
$actions_array[] = [ $actions_array[] = [
'url' => 'javascript: void(0);', 'url' => 'javascript: void(0);',
'content' => Display::return_icon('chat.png', get_lang('Chat'), [], 32), 'content' => Display::return_icon('chat.png', get_lang('Chat'), [], 32),
'url_attributes' => [ 'url_attributes' => [
'onclick' => " window.open('../chat/chat.php?".api_get_cidreq().'&toolgroup='.$current_group['id']."','window_chat_group_".api_get_course_id().'_'.api_get_group_id()."','height=380, width=625, left=2, top=2, toolbar=no, menubar=no, scrollbars=yes, resizable=yes, location=no, directories=no, status=no')", 'onclick' => " window.open('../chat/chat.php?".api_get_cidreq().'&toolgroup='.$groupEntity->getIid()."','window_chat_group_".api_get_course_id().'_'.api_get_group_id()."','height=380, width=625, left=2, top=2, toolbar=no, menubar=no, scrollbars=yes, resizable=yes, location=no, directories=no, status=no')",
], ],
]; ];
} else { } else {
$actions_array[] = [ $actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH).'chat/chat.php?'.api_get_cidreq().'&gid='.$current_group['id'], 'url' => api_get_path(WEB_CODE_PATH).'chat/chat.php?'.api_get_cidreq().'&gid='.$groupEntity->getIid(),
'content' => Display::return_icon('chat.png', get_lang('Chat'), [], 32), 'content' => Display::return_icon('chat.png', get_lang('Chat'), [], 32),
]; ];
} }
@ -236,12 +239,13 @@ if (api_is_allowed_to_edit(false, true) ||
} else { } else {
$actions_array = []; $actions_array = [];
if (is_array($forums)) { if (is_array($forums)) {
if (GroupManager::TOOL_PUBLIC == $current_group['forum_state']) { if (GroupManager::TOOL_PUBLIC == $groupEntity->getForumState()) {
foreach ($forums as $forum) { foreach ($forums as $forum) {
if ('public' === $forum->getForumGroupPublicPrivate()) { if ('public' === $forum->getForumGroupPublicPrivate()) {
$actions_array[] = [ $actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH). 'url' => api_get_path(WEB_CODE_PATH).
'forum/viewforum.php?cid='.api_get_course_int_id().'&forum='.$forum->getIid().'&gid='.$current_group['id'].'&origin=group', 'forum/viewforum.php?cid='.api_get_course_int_id().
'&forum='.$forum->getIid().'&gid='.$groupEntity->getIid().'&origin=group',
'content' => Display::return_icon( 'content' => Display::return_icon(
'forum.png', 'forum.png',
get_lang('Group Forum'), get_lang('Group Forum'),
@ -254,7 +258,7 @@ if (api_is_allowed_to_edit(false, true) ||
} }
} }
if (GroupManager::TOOL_PUBLIC == $current_group['doc_state']) { if (GroupManager::TOOL_PUBLIC == $groupEntity->getDocState()) {
// Link to the documents area of this group // Link to the documents area of this group
$actions_array[] = [ $actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH).'document/document.php?'.api_get_cidreq(), 'url' => api_get_path(WEB_CODE_PATH).'document/document.php?'.api_get_cidreq(),
@ -262,7 +266,7 @@ if (api_is_allowed_to_edit(false, true) ||
]; ];
} }
if (GroupManager::TOOL_PUBLIC == $current_group['calendar_state']) { if (GroupManager::TOOL_PUBLIC == $groupEntity->getCalendarState()) {
$groupFilter = ''; $groupFilter = '';
if (!empty($group_id)) { if (!empty($group_id)) {
$groupFilter = "&type=course&user_id=GROUP:$group_id"; $groupFilter = "&type=course&user_id=GROUP:$group_id";
@ -274,7 +278,7 @@ if (api_is_allowed_to_edit(false, true) ||
]; ];
} }
if (GroupManager::TOOL_PUBLIC == $current_group['work_state']) { if (GroupManager::TOOL_PUBLIC == $groupEntity->getWorkState()) {
// Link to the works area of this group // Link to the works area of this group
$actions_array[] = [ $actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH).'work/work.php?'.api_get_cidreq(), 'url' => api_get_path(WEB_CODE_PATH).'work/work.php?'.api_get_cidreq(),
@ -282,7 +286,7 @@ if (api_is_allowed_to_edit(false, true) ||
]; ];
} }
if (GroupManager::TOOL_PUBLIC == $current_group['announcements_state']) { if (GroupManager::TOOL_PUBLIC == $groupEntity->getAnnouncementsState()) {
// Link to a group-specific part of announcements // Link to a group-specific part of announcements
$actions_array[] = [ $actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH).'announcements/announcements.php?'.api_get_cidreq(), 'url' => api_get_path(WEB_CODE_PATH).'announcements/announcements.php?'.api_get_cidreq(),
@ -290,24 +294,25 @@ if (api_is_allowed_to_edit(false, true) ||
]; ];
} }
if (GroupManager::TOOL_PUBLIC == $current_group['wiki_state']) { if (GroupManager::TOOL_PUBLIC == $groupEntity->getWikiState()) {
// Link to the wiki area of this group // Link to the wiki area of this group
$actions_array[] = [ $actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH).'wiki/index.php?'.api_get_cidreq().'&action=show&title=index&sid='.api_get_session_id().'&gid='.$current_group['id'], 'url' => api_get_path(WEB_CODE_PATH).'wiki/index.php?'.
api_get_cidreq().'&action=show&title=index&sid='.api_get_session_id().'&gid='.$group_id,
'content' => Display::return_icon('wiki.png', get_lang('Wiki'), [], 32), 'content' => Display::return_icon('wiki.png', get_lang('Wiki'), [], 32),
]; ];
} }
if (GroupManager::TOOL_PUBLIC == $current_group['chat_state']) { if (GroupManager::TOOL_PUBLIC == $groupEntity->getChatState()) {
// Link to the chat area of this group // Link to the chat area of this group
if (api_get_course_setting('allow_open_chat_window')) { if (api_get_course_setting('allow_open_chat_window')) {
$actions_array[] = [ $actions_array[] = [
'url' => "javascript: void(0);\" onclick=\"window.open('../chat/chat.php?".api_get_cidreq().'&toolgroup='.$current_group['id']."','window_chat_group_".api_get_course_id().'_'.api_get_group_id()."','height=380, width=625, left=2, top=2, toolbar=no, menubar=no, scrollbars=yes, resizable=yes, location=no, directories=no, status=no') \"", 'url' => "javascript: void(0);\" onclick=\"window.open('../chat/chat.php?".api_get_cidreq().'&toolgroup='.$group_id."','window_chat_group_".api_get_course_id().'_'.api_get_group_id()."','height=380, width=625, left=2, top=2, toolbar=no, menubar=no, scrollbars=yes, resizable=yes, location=no, directories=no, status=no') \"",
'content' => Display::return_icon('chat.png', get_lang('Chat'), [], 32), 'content' => Display::return_icon('chat.png', get_lang('Chat'), [], 32),
]; ];
} else { } else {
$actions_array[] = [ $actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH).'chat/chat.php?'.api_get_cidreq().'&toolgroup='.$current_group['id'], 'url' => api_get_path(WEB_CODE_PATH).'chat/chat.php?'.api_get_cidreq().'&toolgroup='.$group_id,
'content' => Display::return_icon('chat.png', get_lang('Chat'), [], 32), 'content' => Display::return_icon('chat.png', get_lang('Chat'), [], 32),
]; ];
} }
@ -321,16 +326,15 @@ if (api_is_allowed_to_edit(false, true) ||
/* /*
* List all the tutors of the current group * List all the tutors of the current group
*/ */
$tutors = GroupManager::get_subscribed_tutors($current_group); $tutors = $groupEntity->getTutors();
$userRepo = Container::getUserRepository(); $userRepo = Container::getUserRepository();
$tutor_info = ''; $tutor_info = '';
if (0 == count($tutors)) { if (0 == count($tutors)) {
$tutor_info = get_lang('(none)'); $tutor_info = get_lang('(none)');
} else { } else {
$tutor_info .= '<ul class="thumbnails">'; $tutor_info .= '<ul class="thumbnails">';
foreach ($tutors as $index => $tutor) { foreach ($tutors as $tutor) {
/** @var User $user */ $user = $tutor->getUser();
$user = $userRepo->find($tutor['user_id']);
$username = api_htmlentities(sprintf(get_lang('Login: %s'), $user->getUsername()), ENT_QUOTES); $username = api_htmlentities(sprintf(get_lang('Login: %s'), $user->getUsername()), ENT_QUOTES);
$completeName = UserManager::formatUserFullName($user); $completeName = UserManager::formatUserFullName($user);
$avatar = Container::getIllustrationRepository()->getIllustrationUrl($user); $avatar = Container::getIllustrationRepository()->getIllustrationUrl($user);

@ -2,15 +2,8 @@
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
/** use Chamilo\CoreBundle\Framework\Container;
* This script displays an area where teachers can edit the group properties and member list.
* Groups are also often called "teams" in the Dokeos code.
*
* @author various contributors
* @author Roan Embrechts (VUB), partial code cleanup, initial virtual course support
*
* @todo course admin functionality to create groups based on who is in which course (or class).
*/
require_once __DIR__.'/../inc/global.inc.php'; require_once __DIR__.'/../inc/global.inc.php';
$this_section = SECTION_COURSES; $this_section = SECTION_COURSES;
$current_course_tool = TOOL_GROUP; $current_course_tool = TOOL_GROUP;
@ -20,12 +13,13 @@ api_protect_course_script(true);
$group_id = api_get_group_id(); $group_id = api_get_group_id();
$current_group = GroupManager::get_group_properties($group_id); $current_group = GroupManager::get_group_properties($group_id);
$groupEntity = api_get_group_entity($group_id);
$nameTools = get_lang('Edit this group'); $nameTools = get_lang('Edit this group');
$interbreadcrumb[] = ['url' => 'group.php', 'name' => get_lang('Groups')]; $interbreadcrumb[] = ['url' => 'group.php', 'name' => get_lang('Groups')];
$interbreadcrumb[] = ['url' => 'group_space.php?'.api_get_cidreq(), 'name' => $current_group['name']]; $interbreadcrumb[] = ['url' => 'group_space.php?'.api_get_cidreq(), 'name' => $groupEntity->getName()];
$is_group_member = GroupManager::is_tutor_of_group(api_get_user_id(), $current_group); $is_group_member = GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity);
if (!api_is_allowed_to_edit(false, true) && !$is_group_member) { if (!api_is_allowed_to_edit(false, true) && !$is_group_member) {
api_not_allowed(true); api_not_allowed(true);
@ -112,7 +106,7 @@ $form = new FormValidator(
api_get_self().'?'.api_get_cidreq() api_get_self().'?'.api_get_cidreq()
); );
$form->addElement('hidden', 'action'); $form->addElement('hidden', 'action');
$form->addElement('hidden', 'max_student', $current_group['max_student']); $form->addElement('hidden', 'max_student', $groupEntity->getMaxStudent());
$complete_user_list = CourseManager::get_user_list_from_course_code( $complete_user_list = CourseManager::get_user_list_from_course_code(
api_get_course_id(), api_get_course_id(),
@ -182,11 +176,11 @@ if ($form->validate()) {
$values = $form->exportValues(); $values = $form->exportValues();
// Storing the users (we first remove all users and then add only those who were selected) // Storing the users (we first remove all users and then add only those who were selected)
GroupManager::unsubscribe_all_users($current_group); GroupManager::unsubscribeAllUsers($groupEntity->getIid());
if (isset($_POST['group_members']) && count($_POST['group_members']) > 0) { if (isset($_POST['group_members']) && count($_POST['group_members']) > 0) {
GroupManager::subscribe_users( GroupManager::subscribeUsers(
$values['group_members'], $values['group_members'],
$current_group $groupEntity
); );
} }
@ -215,7 +209,7 @@ $action = isset($_GET['action']) ? $_GET['action'] : null;
switch ($action) { switch ($action) {
case 'empty': case 'empty':
if (api_is_allowed_to_edit(false, true)) { if (api_is_allowed_to_edit(false, true)) {
GroupManager:: unsubscribe_all_users($current_group); GroupManager::unsubscribeAllUsers($group_id);
echo Display::return_message(get_lang('The group is now empty'), 'confirm'); echo Display::return_message(get_lang('The group is now empty'), 'confirm');
} }

@ -18,15 +18,18 @@ api_protect_course_script(true);
$group_id = api_get_group_id(); $group_id = api_get_group_id();
$current_group = GroupManager::get_group_properties($group_id); $current_group = GroupManager::get_group_properties($group_id);
$groupRepo = \Chamilo\CoreBundle\Framework\Container::getGroupRepository();
/** @var \Chamilo\CourseBundle\Entity\CGroup $groupEntity */
$groupEntity = $groupRepo->find($group_id);
if (empty($current_group)) { if (empty($groupEntity)) {
api_not_allowed(true); api_not_allowed(true);
} }
$nameTools = get_lang('Edit this group'); $nameTools = get_lang('Edit this group');
$interbreadcrumb[] = ['url' => 'group.php?'.api_get_cidreq(), 'name' => get_lang('Groups')]; $interbreadcrumb[] = ['url' => 'group.php?'.api_get_cidreq(), 'name' => get_lang('Groups')];
$interbreadcrumb[] = ['url' => 'group_space.php?'.api_get_cidreq(), 'name' => $current_group['name']]; $interbreadcrumb[] = ['url' => 'group_space.php?'.api_get_cidreq(), 'name' => $groupEntity->getName()];
$groupMember = GroupManager::is_tutor_of_group(api_get_user_id(), $current_group); $groupMember = GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity);
if (!$groupMember && !api_is_allowed_to_edit(false, true)) { if (!$groupMember && !api_is_allowed_to_edit(false, true)) {
api_not_allowed(true); api_not_allowed(true);

@ -2,15 +2,6 @@
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
/**
* This script displays an area where teachers can edit the group properties and member list.
* Groups are also often called "teams" in the Dokeos code.
*
* @author various contributors
* @author Roan Embrechts (VUB), partial code cleanup, initial virtual course support
*
* @todo course admin functionality to create groups based on who is in which course (or class).
*/
require_once __DIR__.'/../inc/global.inc.php'; require_once __DIR__.'/../inc/global.inc.php';
$this_section = SECTION_COURSES; $this_section = SECTION_COURSES;
$current_course_tool = TOOL_GROUP; $current_course_tool = TOOL_GROUP;
@ -19,13 +10,16 @@ $current_course_tool = TOOL_GROUP;
api_protect_course_script(true); api_protect_course_script(true);
$group_id = api_get_group_id(); $group_id = api_get_group_id();
$groupRepo = \Chamilo\CoreBundle\Framework\Container::getGroupRepository();
/** @var \Chamilo\CourseBundle\Entity\CGroup $groupEntity */
$groupEntity = $groupRepo->find($group_id);
$current_group = GroupManager::get_group_properties($group_id); $current_group = GroupManager::get_group_properties($group_id);
$nameTools = get_lang('Edit this group'); $nameTools = get_lang('Edit this group');
$interbreadcrumb[] = ['url' => 'group.php?'.api_get_cidreq(), 'name' => get_lang('Groups')]; $interbreadcrumb[] = ['url' => 'group.php?'.api_get_cidreq(), 'name' => get_lang('Groups')];
$interbreadcrumb[] = ['url' => 'group_space.php?'.api_get_cidreq(), 'name' => $current_group['name']]; $interbreadcrumb[] = ['url' => 'group_space.php?'.api_get_cidreq(), 'name' => $groupEntity->getName()];
$is_group_member = GroupManager::is_tutor_of_group(api_get_user_id(), $current_group); $is_group_member = GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity);
if (!api_is_allowed_to_edit(false, true) && !$is_group_member) { if (!api_is_allowed_to_edit(false, true) && !$is_group_member) {
api_not_allowed(true); api_not_allowed(true);
@ -92,11 +86,11 @@ $form = new FormValidator('group_edit', 'post', api_get_self().'?'.api_get_cidre
$form->addElement('hidden', 'action'); $form->addElement('hidden', 'action');
// Group tutors // Group tutors
$group_tutor_list = GroupManager::get_subscribed_tutors($current_group); $group_tutor_list = $groupEntity->getTutors();
$selected_tutors = []; $selected_tutors = [];
foreach ($group_tutor_list as $index => $user) { foreach ($group_tutor_list as $user) {
$selected_tutors[] = $user['user_id']; $selected_tutors[] = $user->getUser()->getId();
} }
$complete_user_list = CourseManager::get_user_list_from_course_code( $complete_user_list = CourseManager::get_user_list_from_course_code(
@ -166,7 +160,7 @@ if ($form->validate()) {
// Storing the tutors (we first remove all the tutors and then add only those who were selected) // Storing the tutors (we first remove all the tutors and then add only those who were selected)
GroupManager::unsubscribe_all_tutors($current_group['iid']); GroupManager::unsubscribe_all_tutors($current_group['iid']);
if (isset($_POST['group_tutors']) && count($_POST['group_tutors']) > 0) { if (isset($_POST['group_tutors']) && count($_POST['group_tutors']) > 0) {
GroupManager::subscribe_tutors($values['group_tutors'], $current_group); GroupManager::subscribeTutors($values['group_tutors'], $groupEntity);
} }
// Returning to the group area (note: this is inconsistent with the rest of chamilo) // Returning to the group area (note: this is inconsistent with the rest of chamilo)

@ -1,4 +1,5 @@
<?php <?php
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Framework\Container; use Chamilo\CoreBundle\Framework\Container;
@ -16,7 +17,10 @@ $sessionId = api_get_session_id();
$isTutor = false; $isTutor = false;
if (!empty($groupId)) { if (!empty($groupId)) {
$groupInfo = GroupManager::get_group_properties($groupId); $groupInfo = GroupManager::get_group_properties($groupId);
$isTutor = GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo); $groupRepo = \Chamilo\CoreBundle\Framework\Container::getGroupRepository();
/** @var \Chamilo\CourseBundle\Entity\CGroup $groupEntity */
$groupEntity = $groupRepo->find($groupId);
$isTutor = GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity);
if ($isTutor) { if ($isTutor) {
$isAllowedToEdit = true; $isAllowedToEdit = true;
} }
@ -35,15 +39,17 @@ switch ($action) {
} }
if (false === $allowToEdit && !empty($groupId)) { if (false === $allowToEdit && !empty($groupId)) {
$groupProperties = GroupManager::get_group_properties($groupId); $groupRepo = \Chamilo\CoreBundle\Framework\Container::getGroupRepository();
/** @var \Chamilo\CourseBundle\Entity\CGroup $groupEntity */
$groupEntity = $groupRepo->find($groupId);
// Check if user is tutor group // Check if user is tutor group
$isTutor = GroupManager::is_tutor_of_group(api_get_user_id(), $groupProperties, $courseId); $isTutor = GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity);
if ($isTutor) { if ($isTutor) {
$allowToEdit = true; $allowToEdit = true;
} }
// Last chance ... students can send announcements. // Last chance ... students can send announcements.
if (GroupManager::TOOL_PRIVATE_BETWEEN_USERS == $groupProperties['announcements_state']) { if (GroupManager::TOOL_PRIVATE_BETWEEN_USERS == $groupEntity->getAnnouncementsState()) {
$allowToEdit = true; $allowToEdit = true;
} }
} }

@ -49,10 +49,10 @@ switch ($action) {
// This needs cleaning! // This needs cleaning!
if (api_get_group_id()) { if (api_get_group_id()) {
$groupInfo = GroupManager::get_group_properties(api_get_group_id()); $group = api_get_group_entity(api_get_group_id());
// Only course admin or group members allowed // Only course admin or group members allowed
if ($is_allowed_to_edit || GroupManager::is_user_in_group(api_get_user_id(), $groupInfo)) { if ($is_allowed_to_edit || GroupManager::isUserInGroup(api_get_user_id(), $group)) {
if (!GroupManager::allowUploadEditDocument(api_get_user_id(), api_get_course_int_id(), $groupInfo)) { if (!GroupManager::allowUploadEditDocument(api_get_user_id(), api_get_course_int_id(), $group)) {
exit; exit;
} }
} else { } else {

@ -133,10 +133,10 @@ if (!empty($action)) {
break; break;
} }
$group_id = api_get_group_id(); $group_id = api_get_group_id();
$groupInfo = GroupManager::get_group_properties($group_id); $groupEntity = api_get_group_entity();
if (!api_is_allowed_to_edit(null, true) && if (!api_is_allowed_to_edit(null, true) &&
0 == $current_forum['allow_edit'] && 0 == $current_forum['allow_edit'] &&
($group_id && !GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo)) ($group_id && !GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity))
) { ) {
$json['errorMessage'] = '4. if editing of replies is not allowed'; $json['errorMessage'] = '4. if editing of replies is not allowed';
break; break;

@ -1691,7 +1691,7 @@ class AnnouncementManager
ICON_SIZE_SMALL ICON_SIZE_SMALL
); );
$isTutor = false; /*$isTutor = false;
if (!empty($group_id)) { if (!empty($group_id)) {
$groupInfo = GroupManager::get_group_properties(api_get_group_id()); $groupInfo = GroupManager::get_group_properties(api_get_group_id());
//User has access in the group? //User has access in the group?
@ -1699,7 +1699,7 @@ class AnnouncementManager
api_get_user_id(), api_get_user_id(),
$groupInfo $groupInfo
); );
} }*/
$results = []; $results = [];
/** @var CAnnouncement $announcement */ /** @var CAnnouncement $announcement */

@ -79,17 +79,16 @@ class Agenda
$isAllowToEdit = true; $isAllowToEdit = true;
} }
$groupId = api_get_group_id(); $group = api_get_group_entity();
if (!empty($groupId)) { if (!empty($group)) {
$groupInfo = GroupManager::get_group_properties($groupId);
$userHasAccess = GroupManager::user_has_access( $userHasAccess = GroupManager::user_has_access(
api_get_user_id(), api_get_user_id(),
$groupInfo['iid'], $group->getIid(),
GroupManager::GROUP_TOOL_CALENDAR GroupManager::GROUP_TOOL_CALENDAR
); );
$isTutor = GroupManager::is_tutor_of_group( $isTutor = GroupManager::isTutorOfGroup(
api_get_user_id(), api_get_user_id(),
$groupInfo $group
); );
$isGroupAccess = $userHasAccess || $isTutor; $isGroupAccess = $userHasAccess || $isTutor;
@ -2545,9 +2544,8 @@ class Agenda
*/ */
public function displayActions($view, $filter = 0) public function displayActions($view, $filter = 0)
{ {
$groupInfo = GroupManager::get_group_properties(api_get_group_id()); $group = api_get_group_entity();
$groupIid = isset($groupInfo['iid']) ? $groupInfo['iid'] : 0; $groupIid = null === $group ? 0 : $group->getIid();
$codePath = api_get_path(WEB_CODE_PATH); $codePath = api_get_path(WEB_CODE_PATH);
$currentUserId = api_get_user_id(); $currentUserId = api_get_user_id();
@ -2569,7 +2567,7 @@ class Agenda
api_is_allowed_to_session_edit(false, true) api_is_allowed_to_session_edit(false, true)
|| ( || (
GroupManager::user_has_access($currentUserId, $groupIid, GroupManager::GROUP_TOOL_CALENDAR) GroupManager::user_has_access($currentUserId, $groupIid, GroupManager::GROUP_TOOL_CALENDAR)
&& GroupManager::is_tutor_of_group($currentUserId, $groupInfo) && GroupManager::isTutorOfGroup($currentUserId, $group)
) )
) { ) {
$actionsLeft .= Display::url( $actionsLeft .= Display::url(
@ -2603,7 +2601,7 @@ class Agenda
} }
} }
if ('personal' == $this->type && !api_is_anonymous()) { if ('personal' === $this->type && !api_is_anonymous()) {
$actionsLeft .= Display::url( $actionsLeft .= Display::url(
Display::return_icon('1day.png', get_lang('Sessions plan calendar'), [], ICON_SIZE_MEDIUM), Display::return_icon('1day.png', get_lang('Sessions plan calendar'), [], ICON_SIZE_MEDIUM),
$codePath."calendar/planification.php" $codePath."calendar/planification.php"
@ -2624,7 +2622,7 @@ class Agenda
api_is_session_admin() || api_is_session_admin() ||
api_is_coach() api_is_coach()
) { ) {
if ('personal' == $this->type) { if ('personal' === $this->type) {
$form = null; $form = null;
if (!isset($_GET['action'])) { if (!isset($_GET['action'])) {
$form = new FormValidator( $form = new FormValidator(

@ -6347,7 +6347,7 @@ This folder contains all sessions that have been opened in the chat. Although th
} }
$courseId = $courseInfo['real_id']; $courseId = $courseInfo['real_id'];
$group_properties = GroupManager::get_group_properties($groupId); $group = api_get_group_entity($groupId);
$sortable_data = []; $sortable_data = [];
foreach ($documentAndFolders as $key => $document_data) { foreach ($documentAndFolders as $key => $document_data) {
@ -6462,7 +6462,7 @@ This folder contains all sessions that have been opened in the chat. Although th
$groupMemberWithEditRightsCheckDocument = GroupManager::allowUploadEditDocument( $groupMemberWithEditRightsCheckDocument = GroupManager::allowUploadEditDocument(
$userId, $userId,
$courseId, $courseId,
$group_properties, $group,
$document_data $document_data
); );

@ -109,7 +109,8 @@ class GroupManager
$status = null, $status = null,
$sessionId = 0, $sessionId = 0,
$getCount = false, $getCount = false,
$filterByKeyword = '' $filterByKeyword = '',
$returnEntityList = false
) { ) {
$course_info = empty($course_info) ? api_get_course_info() : $course_info; $course_info = empty($course_info) ? api_get_course_info() : $course_info;
@ -147,6 +148,10 @@ class GroupManager
return $qb->getQuery()->getSingleScalarResult(); return $qb->getQuery()->getSingleScalarResult();
} }
if ($returnEntityList) {
return $qb->getQuery()->getResult();
}
return $qb->getQuery()->getArrayResult(); return $qb->getQuery()->getArrayResult();
$table_group = Database::get_course_table(TABLE_GROUP); $table_group = Database::get_course_table(TABLE_GROUP);
@ -409,10 +414,9 @@ class GroupManager
$members = []; $members = [];
foreach ($users as $index => $user_id) { foreach ($users as $index => $user_id) {
$groupId = $group_ids[$index % $number_of_groups]; $groupId = $group_ids[$index % $number_of_groups];
$groupInfo = self::get_group_properties($groupId); self::subscribeUsers(
self::subscribe_users(
$user_id, $user_id,
$groupInfo api_get_group_entity($groupId)
); );
$members[$group_ids[$groupId]]++; $members[$group_ids[$groupId]]++;
} }
@ -448,8 +452,7 @@ class GroupManager
); );
if ($groupId) { if ($groupId) {
$groupInfo = self::get_group_properties($groupId); self::subscribeUsers($userList, api_get_group_entity($groupId));
self::subscribe_users($userList, $groupInfo);
$group_ids[] = $groupId; $group_ids[] = $groupId;
} }
} }
@ -482,60 +485,20 @@ class GroupManager
$groupIid = $group->getIid(); $groupIid = $group->getIid();
// Unsubscribe all users // Unsubscribe all users
self::unsubscribe_all_users($groupIid); self::unsubscribeAllUsers($groupIid);
self::unsubscribe_all_tutors($groupIid); self::unsubscribe_all_tutors($groupIid);
if (!empty($groupInfo['secret_directory'])) {
/*
$directory = $groupInfo['secret_directory'];
// move group-documents to garbage
$source_directory = api_get_path(SYS_COURSE_PATH).$course_info['path']."/document".$directory;
// File to renamed
$destination_dir = api_get_path(SYS_COURSE_PATH).$course_info['path']."/document".$directory.'_DELETED_'.$groupInfo['id'];
//Deleting from document tool
DocumentManager::delete_document(
$course_info,
$directory,
$source_directory
);
if (file_exists($source_directory)) {
if ('true' === api_get_setting('permanently_remove_deleted_files')) {
// Delete
my_delete($source_directory);
} else {
// Rename
rename($source_directory, $destination_dir);
}
}*/
}
$em $em
->createQuery( ->createQuery(
'DELETE FROM ChamiloCourseBundle:CForumForum f WHERE f.forumOfGroup = :group' 'DELETE FROM ChamiloCourseBundle:CForumForum f WHERE f.forumOfGroup = :group'
) )
->execute(['group' => $groupIid]); ->execute(['group' => $groupIid]);
// Delete item properties of this group.
// to_group_id is related to c_group_info.iid
/*$em
->createQuery(
'DELETE FROM ChamiloCourseBundle:CItemProperty ci WHERE ci.course = :course AND ci.group = :group'
)
->execute(['course' => $course_id, 'group' => $groupId]);
*/
// delete the groups // delete the groups
$repo = Container::getGroupRepository(); $repo = Container::getGroupRepository();
$em->remove($group); $em->remove($group);
$em->flush(); $em->flush();
/*$em
->createQuery(
'DELETE FROM ChamiloCourseBundle:CGroup g WHERE g.course = :course AND g.iid = :id'
)
->execute(['course' => $course_id, 'id' => $groupIid]);*/
return true; return true;
} }
@ -627,10 +590,11 @@ class GroupManager
$result['count_users'] = count( $result['count_users'] = count(
self::get_subscribed_users($result) self::get_subscribed_users($result)
); );
$result['count_tutor'] = count( /*$result['count_tutor'] = count(
self::get_subscribed_tutors($result) self::get_subscribed_tutors($result)
); );*/
$result['count_all'] = $result['count_users'] + $result['count_tutor']; //$result['count_all'] = $result['count_users'] + $result['count_tutor'];
$result['count_all'] = null;
$result['document_access'] = isset($db_object->document_access) ? $db_object->document_access : self::DOCUMENT_MODE_SHARE; $result['document_access'] = isset($db_object->document_access) ? $db_object->document_access : self::DOCUMENT_MODE_SHARE;
} }
@ -1382,6 +1346,7 @@ class GroupManager
$activeCondition = $filterOnlyActive ? 'AND u.active = 1' : ''; $activeCondition = $filterOnlyActive ? 'AND u.active = 1' : '';
$em = Database::getManager(); $em = Database::getManager();
return $em return $em
->createQuery(" ->createQuery("
SELECT COUNT(u.id) FROM ChamiloCoreBundle:User u SELECT COUNT(u.id) FROM ChamiloCoreBundle:User u
@ -1478,7 +1443,7 @@ class GroupManager
$usersToAdd = []; $usersToAdd = [];
foreach ($complete_user_list as $userInfo) { foreach ($complete_user_list as $userInfo) {
$isSubscribed = self::is_subscribed($userInfo['user_id'], $groupInfo); $isSubscribed = self::is_subscribed($userInfo['user_id'], $group);
if ($isSubscribed) { if ($isSubscribed) {
continue; continue;
} }
@ -1495,7 +1460,7 @@ class GroupManager
} }
foreach ($usersToAdd as $userId) { foreach ($usersToAdd as $userId) {
self::subscribe_users($userId, $groupInfo); self::subscribeUsers($userId, $group);
} }
} }
@ -1586,31 +1551,21 @@ class GroupManager
* Is sef-registration allowed? * Is sef-registration allowed?
* *
* @param int $user_id * @param int $user_id
* @param array $groupInfo
* *
* @return bool TRUE if self-registration is allowed in the given group * @return bool TRUE if self-registration is allowed in the given group
*/ */
public static function is_self_registration_allowed($user_id, $groupInfo) public static function is_self_registration_allowed($user_id, CGroup $group)
{ {
$course_id = api_get_course_int_id();
if (empty($user_id)) { if (empty($user_id)) {
return false; return false;
} }
$groupIid = $groupInfo['iid']; if ($group) {
$table = Database::get_course_table(TABLE_GROUP); if (0 == $group->getStatus() || 1 != $group->getSelfRegistrationAllowed()) {
if (isset($groupIid)) {
$sql = "SELECT status, self_registration_allowed
FROM $table
WHERE iid = $groupIid";
$result = Database::query($sql);
$group = Database::fetch_object($result);
if (0 == $group->status || 1 != $group->self_registration_allowed) {
return false; return false;
} }
return self::canUserSubscribe($user_id, $groupInfo); return self::canUserSubscribe($user_id, $group);
} }
return false; return false;
@ -1620,49 +1575,37 @@ class GroupManager
* Is sef-unregistration allowed? * Is sef-unregistration allowed?
* *
* @param int $user_id * @param int $user_id
* @param array $groupInfo
* *
* @return bool TRUE if self-unregistration is allowed in the given group * @return bool TRUE if self-unregistration is allowed in the given group
*/ */
public static function is_self_unregistration_allowed($user_id, $groupInfo) public static function is_self_unregistration_allowed($user_id, CGroup $group)
{ {
if (empty($user_id) || empty($groupInfo)) { if (empty($user_id) || empty($group)) {
return false; return false;
} }
$groupIid = $groupInfo['iid']; if (0 == $group->getStatus() || 1 != $group->getSelfUnregistrationAllowed()) {
$table = Database::get_course_table(TABLE_GROUP);
$course_id = api_get_course_int_id();
$sql = "SELECT status, self_unregistration_allowed
FROM $table
WHERE iid = $groupIid";
$result = Database::query($sql);
$group = Database::fetch_object($result);
if (0 == $group->status || 1 != $group->self_unregistration_allowed) {
return false; return false;
} }
return self::is_subscribed($user_id, $groupInfo); return self::is_subscribed($user_id, $group);
} }
/** /**
* Is user subscribed in group? * Is user subscribed in group?
* *
* @param int $user_id * @param int $user_id
* @param array $groupInfo
* *
* @return bool TRUE if given user is subscribed in given group * @return bool TRUE if given user is subscribed in given group
*/ */
public static function is_subscribed($user_id, $groupInfo) public static function is_subscribed($user_id, CGroup $group)
{ {
$course_id = api_get_course_int_id(); $course_id = api_get_course_int_id();
if (empty($user_id) || empty($groupInfo) || empty($course_id)) { if (empty($user_id) || empty($group) || empty($course_id)) {
return false; return false;
} }
$table = Database::get_course_table(TABLE_GROUP_USER); $table = Database::get_course_table(TABLE_GROUP_USER);
$group_id = intval($groupInfo['iid']); $group_id = $group->getIid();
$user_id = intval($user_id); $user_id = (int) $user_id;
$sql = "SELECT 1 FROM $table $sql = "SELECT 1 FROM $table
WHERE WHERE
@ -1678,19 +1621,18 @@ class GroupManager
* Can a user subscribe to a specified group in a course. * Can a user subscribe to a specified group in a course.
* *
* @param int $user_id * @param int $user_id
* @param array $groupInfo
* @param bool $checkMaxNumberStudents * @param bool $checkMaxNumberStudents
* *
* @return bool TRUE if given user can be subscribed in given group * @return bool true if success
*/ */
public static function canUserSubscribe( public static function canUserSubscribe(
$user_id, $user_id,
$groupInfo, CGroup $group,
$checkMaxNumberStudents = true $checkMaxNumberStudents = true
) { ) {
$groupIid = $groupInfo['iid']; $groupIid = $group->getIid();
if ($checkMaxNumberStudents) { if ($checkMaxNumberStudents) {
$category = self::get_category_from_group($groupIid); $category = self::get_category_from_group($group->getIid());
if ($category) { if ($category) {
if (self::GROUP_PER_MEMBER_NO_LIMIT == $category['groups_per_user']) { if (self::GROUP_PER_MEMBER_NO_LIMIT == $category['groups_per_user']) {
$category['groups_per_user'] = self::INFINITE; $category['groups_per_user'] = self::INFINITE;
@ -1708,13 +1650,13 @@ class GroupManager
} }
} }
$result = self::is_tutor_of_group($user_id, $groupInfo); $result = self::isTutorOfGroup($user_id, $group);
if ($result) { if ($result) {
return false; return false;
} }
$result = self::is_subscribed($user_id, $groupInfo); $result = self::is_subscribed($user_id, $group);
if ($result) { if ($result) {
return false; return false;
@ -1782,77 +1724,28 @@ class GroupManager
return $users; return $users;
} }
/**
* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
* Get all subscribed tutors of a group
*
* @param array $groupInfo
*
* @return array An array with information of all users from the given group.
* (user_id, firstname, lastname, email)
*/
public static function get_subscribed_tutors($groupInfo, $id_only = false)
{
if (empty($groupInfo)) {
return [];
}
$table_user = Database::get_main_table(TABLE_MAIN_USER);
$table_group_tutor = Database::get_course_table(TABLE_GROUP_TUTOR);
$order_clause = api_sort_by_first_name() ? ' ORDER BY u.firstname, u.lastname' : ' ORDER BY u.lastname, u.firstname';
$orderListByOfficialCode = api_get_setting('order_user_list_by_official_code');
if ('true' === $orderListByOfficialCode) {
$order_clause = ' ORDER BY u.official_code, u.firstname, u.lastname';
}
$group_id = (int) $groupInfo['iid'];
$course_id = api_get_course_int_id();
$sql = "SELECT u.id, u.lastname, u.firstname, u.email
FROM $table_user u
INNER JOIN $table_group_tutor tg
ON (tg.user_id = u.id)
WHERE
tg.group_id = $group_id
$order_clause
";
$db_result = Database::query($sql);
$users = [];
while ($user = Database::fetch_object($db_result)) {
if (!$id_only) {
$member['user_id'] = $user->id;
$member['firstname'] = $user->firstname;
$member['lastname'] = $user->lastname;
$member['email'] = $user->email;
$users[] = $member;
} else {
$users[] = $user->id;
}
}
return $users;
}
/** /**
* Subscribe user(s) to a specified group in current course (as a student). * Subscribe user(s) to a specified group in current course (as a student).
* *
* @param mixed $user_ids Can be an array with user-id's or a single user-id * @param mixed $userList Can be an array with user-id's or a single user-id
* @param array $groupInfo * @param CGroup $group
* @param int $course_id * @param int $course_id
* *
* @return bool TRUE if successful * @return bool
*/ */
public static function subscribe_users($user_ids, $groupInfo, $course_id = null) public static function subscribeUsers($userList, CGroup $group = null, $course_id = null)
{ {
$user_ids = is_array($user_ids) ? $user_ids : [$user_ids]; if (empty($group)) {
return false;
}
$userList = is_array($userList) ? $userList : [$userList];
$course_id = empty($course_id) ? api_get_course_int_id() : (int) $course_id; $course_id = empty($course_id) ? api_get_course_int_id() : (int) $course_id;
$group_id = $groupInfo['iid']; $group_id = $group->getIid();
if (!empty($user_ids)) { if (!empty($userList)) {
$table = Database::get_course_table(TABLE_GROUP_USER); $table = Database::get_course_table(TABLE_GROUP_USER);
foreach ($user_ids as $user_id) { foreach ($userList as $user_id) {
if (self::canUserSubscribe($user_id, $groupInfo)) { if (self::canUserSubscribe($user_id, $group)) {
$user_id = (int) $user_id; $user_id = (int) $user_id;
$sql = "INSERT INTO $table (c_id, user_id, group_id, status, role) $sql = "INSERT INTO $table (c_id, user_id, group_id, status, role)
VALUES ('$course_id', '".$user_id."', '".$group_id."', 0, '')"; VALUES ('$course_id', '".$user_id."', '".$group_id."', 0, '')";
@ -1867,27 +1760,24 @@ class GroupManager
/** /**
* Subscribe tutor(s) to a specified group in current course. * Subscribe tutor(s) to a specified group in current course.
* *
* @param mixed $user_ids Can be an array with user-id's or a single user-id * @param mixed $userList Can be an array with user-id's or a single user-id
* @param array $groupInfo * @param array $groupInfo
* @param int $course_id * @param int $course_id
*
* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
*
* @see subscribe_users. This function is almost an exact copy of that function.
*
* @return bool TRUE if successful
*/ */
public static function subscribe_tutors($user_ids, $groupInfo, $course_id = 0) public static function subscribeTutors($userList, CGroup $group = null, $course_id = 0)
{ {
$user_ids = is_array($user_ids) ? $user_ids : [$user_ids]; if (empty($group)) {
return false;
}
$userList = is_array($userList) ? $userList : [$userList];
$result = true; $result = true;
$course_id = isset($course_id) && !empty($course_id) ? intval($course_id) : api_get_course_int_id(); $course_id = isset($course_id) && !empty($course_id) ? intval($course_id) : api_get_course_int_id();
$table_group_tutor = Database::get_course_table(TABLE_GROUP_TUTOR); $table_group_tutor = Database::get_course_table(TABLE_GROUP_TUTOR);
$groupId = (int) $groupInfo['iid']; $groupId = (int) $group->getIid();
foreach ($user_ids as $user_id) { foreach ($userList as $user_id) {
$user_id = intval($user_id); $user_id = intval($user_id);
if (self::canUserSubscribe($user_id, $groupInfo, false)) { if (self::canUserSubscribe($user_id, $group, false)) {
$sql = 'INSERT INTO '.$table_group_tutor." (c_id, user_id, group_id) $sql = 'INSERT INTO '.$table_group_tutor." (c_id, user_id, group_id)
VALUES ('$course_id', '".$user_id."', '".$groupId."')"; VALUES ('$course_id', '".$user_id."', '".$groupId."')";
$result = Database::query($sql); $result = Database::query($sql);
@ -1900,21 +1790,23 @@ class GroupManager
/** /**
* Unsubscribe user(s) from a specified group in current course. * Unsubscribe user(s) from a specified group in current course.
* *
* @param mixed $user_ids Can be an array with user-id's or a single user-id * @param mixed $userList Can be an array with user-id's or a single user-id
* @param array $groupInfo
* *
* @return bool TRUE if successful * @return bool
*/ */
public static function unsubscribe_users($user_ids, $groupInfo) public static function unsubscribeUsers($userList, CGroup $group = null)
{ {
$user_ids = is_array($user_ids) ? $user_ids : [$user_ids]; if (empty($group)) {
return false;
}
$userList = is_array($userList) ? $userList : [$userList];
$table_group_user = Database::get_course_table(TABLE_GROUP_USER); $table_group_user = Database::get_course_table(TABLE_GROUP_USER);
$group_id = intval($groupInfo['iid']); $group_id = $group->getIid();
$course_id = api_get_course_int_id(); $course_id = api_get_course_int_id();
$sql = 'DELETE FROM '.$table_group_user.' $sql = 'DELETE FROM '.$table_group_user.'
WHERE WHERE
group_id = '.$group_id.' AND group_id = '.$group_id.' AND
user_id IN ('.implode(',', $user_ids).') user_id IN ('.implode(',', $userList).')
'; ';
Database::query($sql); Database::query($sql);
} }
@ -1924,9 +1816,9 @@ class GroupManager
* *
* @param int $groupId * @param int $groupId
* *
* @return bool TRUE if successful * @return bool
*/ */
public static function unsubscribe_all_users($groupId) public static function unsubscribeAllUsers($groupId)
{ {
$groupId = (int) $groupId; $groupId = (int) $groupId;
if (empty($groupId)) { if (empty($groupId)) {
@ -1965,9 +1857,7 @@ class GroupManager
$table_group_tutor = Database::get_course_table(TABLE_GROUP_TUTOR); $table_group_tutor = Database::get_course_table(TABLE_GROUP_TUTOR);
$sql = "DELETE FROM $table_group_tutor $sql = "DELETE FROM $table_group_tutor
WHERE group_id = $groupId "; WHERE group_id = $groupId ";
$result = Database::query($sql); Database::query($sql);
return $result;
} }
return true; return true;
@ -1975,43 +1865,26 @@ class GroupManager
/** /**
* Is the user a tutor of this group? * Is the user a tutor of this group?
* * @todo replace this function with $group->isUserTutor
* @param int $user_id the id of the user
* @param array $groupInfo
* @param int $courseId
*
* @return bool true/false
*
* @todo use the function user_has_access that includes this function
*
* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
*/ */
public static function is_tutor_of_group($user_id, $groupInfo, $courseId = 0) public static function isTutorOfGroup($userId, CGroup $group = null)
{ {
if (empty($groupInfo)) { if (empty($group)) {
return false;
}
$courseId = empty($courseId) ? api_get_course_int_id() : (int) $courseId;
if (empty($courseId)) {
return false; return false;
} }
$user_id = (int) $user_id; $userId = (int) $userId;
$group_id = (int) $groupInfo['iid']; $group_id = (int) $group->getIid();
$table = Database::get_course_table(TABLE_GROUP_TUTOR); $table = Database::get_course_table(TABLE_GROUP_TUTOR);
$sql = "SELECT * FROM $table $sql = "SELECT * FROM $table
WHERE WHERE
user_id = $user_id AND user_id = $userId AND
group_id = $group_id"; group_id = $group_id";
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result) > 0) {
return true;
}
return false; return Database::num_rows($result) > 0;
} }
/** /**
@ -2021,22 +1894,15 @@ class GroupManager
* before you had to check if the user was * before you had to check if the user was
* 1. a member of the group OR * 1. a member of the group OR
* 2. a tutor of the group. This function combines both. * 2. a tutor of the group. This function combines both.
*
* @param int $user_id the id of the user
* @param array $groupInfo
*
* @return bool true/false
*
* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
*/ */
public static function is_user_in_group($user_id, $groupInfo) public static function isUserInGroup($user_id, CGroup $group)
{ {
$member = self::is_subscribed($user_id, $groupInfo); $member = self::is_subscribed($user_id, $group);
if ($member) { if ($member) {
return true; return true;
} }
$tutor = self::is_tutor_of_group($user_id, $groupInfo); $tutor = self::isTutorOfGroup($user_id, $group);
if ($tutor) { if ($tutor) {
return true; return true;
} }
@ -2162,14 +2028,14 @@ class GroupManager
return true; return true;
break; break;
case self::TOOL_PRIVATE: case self::TOOL_PRIVATE:
$userIsInGroup = self::is_user_in_group($user_id, $groupInfo); $userIsInGroup = self::isUserInGroup($user_id, $groupInfo);
if ($userIsInGroup) { if ($userIsInGroup) {
return true; return true;
} }
break; break;
case self::TOOL_PRIVATE_BETWEEN_USERS: case self::TOOL_PRIVATE_BETWEEN_USERS:
// Only works for announcements for now // Only works for announcements for now
$userIsInGroup = self::is_user_in_group($user_id, $groupInfo); $userIsInGroup = self::isUserInGroup($user_id, $groupInfo);
if ($userIsInGroup && self::GROUP_TOOL_ANNOUNCEMENT == $tool) { if ($userIsInGroup && self::GROUP_TOOL_ANNOUNCEMENT == $tool) {
return true; return true;
} }
@ -2181,14 +2047,14 @@ class GroupManager
/** /**
* @param int $userId * @param int $userId
* @param array $groupInfo * @param CGroup $group
* @param int $sessionId * @param int $sessionId
* *
* @return bool * @return bool
*/ */
public static function userHasAccessToBrowse($userId, $groupInfo, $sessionId = 0) public static function userHasAccessToBrowse($userId, CGroup $group, $sessionId = 0)
{ {
if (empty($groupInfo)) { if (empty($group)) {
return false; return false;
} }
@ -2212,14 +2078,14 @@ class GroupManager
} }
} }
$groupId = $groupInfo['iid']; if (self::isTutorOfGroup($userId, $group)) {
if (self::is_tutor_of_group($userId, $groupInfo)) {
return true; return true;
} }
if (0 == $groupInfo['status']) { if (0 == $group->getStatus()) {
return false; return false;
} }
$groupId = $group->getIid();
if (self::user_has_access($userId, $groupId, self::GROUP_TOOL_FORUM) || if (self::user_has_access($userId, $groupId, self::GROUP_TOOL_FORUM) ||
self::user_has_access($userId, $groupId, self::GROUP_TOOL_DOCUMENTS) || self::user_has_access($userId, $groupId, self::GROUP_TOOL_DOCUMENTS) ||
@ -2231,8 +2097,10 @@ class GroupManager
) { ) {
return true; return true;
} }
//@todo check group session id
$groupSessionId = null;
if (api_is_session_general_coach() && $groupInfo['session_id'] == $sessionId) { if (api_is_session_general_coach() && $groupSessionId == $sessionId) {
return true; return true;
} }
@ -2308,12 +2176,12 @@ class GroupManager
} }
/** /**
* @param array $group_list * @param CGroup[] $groupList
* @param int $category_id * @param int $category_id
* *
* @return string * @return string
*/ */
public static function process_groups($group_list, $category_id = 0) public static function processGroups($groupList, $category_id = 0)
{ {
$charset = 'UTF-8'; $charset = 'UTF-8';
$category_id = (int) $category_id; $category_id = (int) $category_id;
@ -2327,75 +2195,78 @@ class GroupManager
$surveyGroupExists = $extraField->get_handler_field_info_by_field_variable('group_id') ? true : false; $surveyGroupExists = $extraField->get_handler_field_info_by_field_variable('group_id') ? true : false;
$url = api_get_path(WEB_CODE_PATH).'group/'; $url = api_get_path(WEB_CODE_PATH).'group/';
foreach ($group_list as $this_group) { foreach ($groupList as $group) {
$groupId = $this_group['iid']; $groupId = $group->getIid();
// Validation when belongs to a session // Validation when belongs to a session
$session_img = ''; $session_img = '';
//$session_img = api_get_session_image($this_group['session_id'], $user_info['status']); //$session_img = api_get_session_image($group['session_id'], $user_info['status']);
// All the tutors of this group // All the tutors of this group
$tutors = self::get_subscribed_tutors($this_group, true); $tutors = $group->getTutors();
$isMember = self::is_subscribed($user_id, $this_group); $isMember = self::is_subscribed($user_id, $group);
// Create a new table-row // Create a new table-row
$row = []; $row = [];
// Checkbox // Checkbox
if (api_is_allowed_to_edit(false, true) && count($group_list) > 1) { if (api_is_allowed_to_edit(false, true) && count($groupList) > 1) {
$row[] = $this_group['iid']; $row[] = $groupId;
} }
if (self::userHasAccessToBrowse($user_id, $this_group, $session_id)) { if (self::userHasAccessToBrowse($user_id, $group, $session_id)) {
// Group name // Group name
$groupNameClass = null; $groupNameClass = null;
if (0 == $this_group['status']) { if (0 == $group->getStatus()) {
$groupNameClass = 'muted'; $groupNameClass = 'muted';
} }
$group_name = '<a $group_name = '<a
class="'.$groupNameClass.'" class="'.$groupNameClass.'"
href="group_space.php?'.api_get_cidreq(true, false).'&gid='.$groupId.'">'. href="group_space.php?'.api_get_cidreq(true, false).'&gid='.$groupId.'">'.
Security::remove_XSS($this_group['name']).'</a> '; Security::remove_XSS($group->getName()).'</a> ';
$group_name2 = ''; $group_name2 = '';
if (api_get_configuration_value('extra')) { if (api_get_configuration_value('extra')) {
$group_name2 = '<a $group_name2 = '<a
href="group_space_tracking.php?cid='.api_get_course_int_id().'&gid='.$groupId.'">'. href="group_space_tracking.php?cid='.api_get_course_int_id().'&gid='.$groupId.'">'.
get_lang('suivi_de').''.stripslashes($this_group['name']).'</a>'; get_lang('suivi_de').''.stripslashes($group->getName()).'</a>';
} }
/*
if (!empty($user_id) && !empty($this_group['id_tutor']) && $user_id == $this_group['id_tutor']) { if (!empty($user_id) && !empty($this_group['id_tutor']) && $user_id == $this_group['id_tutor']) {
$group_name .= Display::label(get_lang('my supervision'), 'success'); $group_name .= Display::label(get_lang('my supervision'), 'success');
} elseif ($isMember) { } elseif ($isMember) {
$group_name .= Display::label(get_lang('my group'), 'success'); $group_name .= Display::label(get_lang('my group'), 'success');
} }*/
if (api_is_allowed_to_edit() && !empty($this_group['session_name'])) { /*if (api_is_allowed_to_edit() && !empty($this_group['session_name'])) {
$group_name .= ' ('.$this_group['session_name'].')'; $group_name .= ' ('.$this_group['session_name'].')';
} }
$group_name .= $session_img; $group_name .= $session_img;*/
$row[] = $group_name.$group_name2.'<br />'.stripslashes(trim($this_group['description']));
$row[] = $group_name.$group_name2.'<br />'.stripslashes(trim($group->getDescription()));
} else { } else {
if ('true' === $hideGroup) { if ('true' === $hideGroup) {
continue; continue;
} }
$row[] = $this_group['name'].'<br />'.stripslashes(trim($this_group['description'])); $row[] = $group->getName().'<br />'.stripslashes(trim($group->getDescription()));
} }
// Tutor name // Tutor name
$tutor_info = ''; $tutor_info = '';
if (count($tutors) > 0) { if (count($tutors) > 0) {
foreach ($tutors as $tutor_id) { foreach ($tutors as $tutorGroup) {
$tutor = api_get_user_info($tutor_id); $tutor = $tutorGroup->getUser();
$username = api_htmlentities( $username = api_htmlentities(
sprintf(get_lang('Login: %s'), $tutor['username']), sprintf(get_lang('Login: %s'), $tutor->getUsername()),
ENT_QUOTES ENT_QUOTES
); );
if ('true' === api_get_setting('show_email_addresses')) { if ('true' === api_get_setting('show_email_addresses')) {
$tutor_info .= Display::tag( $tutor_info .= Display::tag(
'span', 'span',
Display::encrypted_mailto_link( Display::encrypted_mailto_link(
$tutor['mail'], $tutor->getEmail(),
$tutor['complete_name'] UserManager::formatUserFullName($tutor)
), ),
['title' => $username] ['title' => $username]
).', '; ).', ';
@ -2404,15 +2275,15 @@ class GroupManager
$tutor_info .= Display::tag( $tutor_info .= Display::tag(
'span', 'span',
Display::encrypted_mailto_link( Display::encrypted_mailto_link(
$tutor['mail'], $tutor->getEmail(),
$tutor['complete_name_with_username'] UserManager::formatUserFullName($tutor)
), ),
['title' => $username] ['title' => $username]
).', '; ).', ';
} else { } else {
$tutor_info .= Display::tag( $tutor_info .= Display::tag(
'span', 'span',
$tutor['complete_name'], UserManager::formatUserFullName($tutor),
['title' => $username] ['title' => $username]
).', '; ).', ';
} }
@ -2428,19 +2299,21 @@ class GroupManager
$row[] = $tutor_info; $row[] = $tutor_info;
// Max number of members in group // Max number of members in group
$max_members = self::MEMBER_PER_GROUP_NO_LIMIT == $this_group['maxStudent'] ? ' ' : ' / '.$this_group['maxStudent']; $max_members = self::MEMBER_PER_GROUP_NO_LIMIT == $group->getMaxStudent() ? ' ' : ' / '.$group->getMaxStudent();
$registeredUsers = self::getStudentsCount($groupId); $registeredUsers = self::getStudentsCount($groupId);
// Number of members in group // Number of members in group
$row[] = $registeredUsers.$max_members; $row[] = $registeredUsers.$max_members;
$confirmMessage = addslashes(api_htmlentities(get_lang('Please confirm your choice'), ENT_QUOTES, $charset)); $confirmMessage = addslashes(
api_htmlentities(get_lang('Please confirm your choice'), ENT_QUOTES, $charset)
);
// Self-registration / unregistration // Self-registration / unregistration
if (!api_is_allowed_to_edit(false, true)) { if (!api_is_allowed_to_edit(false, true)) {
if (self::is_self_registration_allowed($user_id, $this_group)) { if (self::is_self_registration_allowed($user_id, $group)) {
$row[] = '<a $row[] = '<a
class = "btn btn-default" class = "btn btn-default"
href="group.php?'.api_get_cidreq().'&category='.$category_id.'&action=self_reg&group_id='.$groupId.'" href="group.php?'.api_get_cidreq().'&category='.$category_id.'&action=self_reg&group_id='.$groupId.'"
onclick="javascript:if(!confirm('."'".$confirmMessage."'".')) return false;">'.get_lang('register').'</a>'; onclick="javascript:if(!confirm('."'".$confirmMessage."'".')) return false;">'.get_lang('register').'</a>';
} elseif (self::is_self_unregistration_allowed($user_id, $this_group)) { } elseif (self::is_self_unregistration_allowed($user_id, $group)) {
$row[] = '<a $row[] = '<a
class = "btn btn-default" class = "btn btn-default"
href="group.php?'.api_get_cidreq().'&category='.$category_id.'&action=self_unreg&group_id='.$groupId.'" href="group.php?'.api_get_cidreq().'&category='.$category_id.'&action=self_unreg&group_id='.$groupId.'"
@ -2450,9 +2323,12 @@ class GroupManager
} }
} }
// @todo fix group session access.
$groupSessionId = null;
// Edit-links // Edit-links
if (api_is_allowed_to_edit(false, true) && if (api_is_allowed_to_edit(false, true) &&
!(api_is_session_general_coach() && intval($this_group['session_id']) != $session_id) !(api_is_session_general_coach() && $groupSessionId != $session_id)
) { ) {
$edit_actions = '<a $edit_actions = '<a
href="'.$url.'settings.php?'.api_get_cidreq(true, false).'&gid='.$groupId.'" href="'.$url.'settings.php?'.api_get_cidreq(true, false).'&gid='.$groupId.'"
@ -2460,7 +2336,7 @@ class GroupManager
Display::return_icon('edit.png', get_lang('Edit this group'), '', ICON_SIZE_SMALL). Display::return_icon('edit.png', get_lang('Edit this group'), '', ICON_SIZE_SMALL).
'</a>&nbsp;'; '</a>&nbsp;';
if (1 == $this_group['status']) { if (1 == $group->getStatus()) {
$edit_actions .= '<a $edit_actions .= '<a
href="'.api_get_self().'?'.api_get_cidreq(true, false).'&category='.$category_id.'&action=set_invisible&group_id='.$groupId.'" href="'.api_get_self().'?'.api_get_cidreq(true, false).'&category='.$category_id.'&action=set_invisible&group_id='.$groupId.'"
title="'.get_lang('Hide').'">'. title="'.get_lang('Hide').'">'.
@ -2500,9 +2376,10 @@ class GroupManager
$row[] = $edit_actions; $row[] = $edit_actions;
} }
if (!empty($this_group['nbMember'])) {
/*if (!empty($this_group['nbMember'])) {
$totalRegistered = $totalRegistered + $this_group['nbMember']; $totalRegistered = $totalRegistered + $this_group['nbMember'];
} }*/
$group_data[] = $row; $group_data[] = $row;
} }
@ -2521,7 +2398,7 @@ class GroupManager
); );
$table->set_additional_parameters(['category' => $category_id]); $table->set_additional_parameters(['category' => $category_id]);
$column = 0; $column = 0;
if (api_is_allowed_to_edit(false, true) and count($group_list) > 1) { if (api_is_allowed_to_edit(false, true) && count($groupList) > 1) {
$table->set_header($column++, '', false); $table->set_header($column++, '', false);
} }
$table->set_header($column++, get_lang('Groups')); $table->set_header($column++, get_lang('Groups'));
@ -2540,7 +2417,7 @@ class GroupManager
$form_actions['fill_selected'] = get_lang('Fill the group randomly with course students'); $form_actions['fill_selected'] = get_lang('Fill the group randomly with course students');
$form_actions['empty_selected'] = get_lang('unsubscribe all users'); $form_actions['empty_selected'] = get_lang('unsubscribe all users');
$form_actions['delete_selected'] = get_lang('Delete'); $form_actions['delete_selected'] = get_lang('Delete');
if (count($group_list) > 1) { if (count($groupList) > 1) {
$table->set_form_actions($form_actions, 'group'); $table->set_form_actions($form_actions, 'group');
} }
} }
@ -2725,7 +2602,7 @@ class GroupManager
$studentUserIdList[] = $userInfo['user_id']; $studentUserIdList[] = $userInfo['user_id'];
} }
self::subscribe_users($studentUserIdList, $groupInfo); self::subscribeUsers($studentUserIdList, api_get_group_entity($groupInfo['iid']));
} }
$tutors = isset($data['tutors']) ? explode(',', $data['tutors']) : []; $tutors = isset($data['tutors']) ? explode(',', $data['tutors']) : [];
@ -2757,7 +2634,7 @@ class GroupManager
$tutorIdList[] = $userInfo['user_id']; $tutorIdList[] = $userInfo['user_id'];
} }
self::subscribe_tutors($tutorIdList, $groupInfo); self::subscribeTutors($tutorIdList, api_get_group_entity($groupInfo['iid']));
} }
$elementsFound['groups'][] = $groupId; $elementsFound['groups'][] = $groupId;
@ -3002,6 +2879,7 @@ class GroupManager
return $content; return $content;
} }
/** /**
* @param array $courseInfo * @param array $courseInfo
* @param string $keyword * @param string $keyword
@ -3090,7 +2968,7 @@ class GroupManager
/** /**
* @param int $userId * @param int $userId
* @param int $courseId * @param int $courseId
* @param array $groupInfo * @param CGroup $group
* @param array $documentInfoToBeCheck * @param array $documentInfoToBeCheck
* @param bool $blockPage * @param bool $blockPage
* *
@ -3099,7 +2977,7 @@ class GroupManager
public static function allowUploadEditDocument( public static function allowUploadEditDocument(
$userId, $userId,
$courseId, $courseId,
$groupInfo, CGroup $group,
$documentInfoToBeCheck = null, $documentInfoToBeCheck = null,
$blockPage = false $blockPage = false
) { ) {
@ -3108,7 +2986,7 @@ class GroupManager
return true; return true;
} }
if (empty($groupInfo) || !isset($groupInfo['iid'])) { if (empty($group)) {
if ($blockPage) { if ($blockPage) {
api_not_allowed(true); api_not_allowed(true);
} }
@ -3117,14 +2995,14 @@ class GroupManager
} }
// Tutor can also make any change // Tutor can also make any change
$isTutor = self::is_tutor_of_group($userId, $groupInfo, $courseId); $isTutor = self::isTutorOfGroup($userId, $group);
if ($isTutor) { if ($isTutor) {
return true; return true;
} }
// Just in case also check if document in group is available // Just in case also check if document in group is available
if (0 == $groupInfo['doc_state']) { if (0 == $group->getDocState()) {
if ($blockPage) { if ($blockPage) {
api_not_allowed(true); api_not_allowed(true);
} }
@ -3147,9 +3025,7 @@ class GroupManager
// Check group document access // Check group document access
$allow = api_get_configuration_value('group_document_access'); $allow = api_get_configuration_value('group_document_access');
if ($allow) { if ($allow) {
if (isset($groupInfo['document_access'])) { $documentAccess = (int) $group->getDocumentAccess();
$documentAccess = (int) $groupInfo['document_access'];
}
} }
// Check access for students // Check access for students
@ -3158,7 +3034,7 @@ class GroupManager
case self::DOCUMENT_MODE_SHARE: case self::DOCUMENT_MODE_SHARE:
// Default chamilo behaviour // Default chamilo behaviour
// Student can upload his own content, cannot modify another content. // Student can upload his own content, cannot modify another content.
$isMember = self::is_subscribed($userId, $groupInfo); $isMember = self::is_subscribed($userId, $group);
if ($isMember) { if ($isMember) {
// No document to check, allow access to document feature. // No document to check, allow access to document feature.
if (empty($documentInfoToBeCheck)) { if (empty($documentInfoToBeCheck)) {
@ -3202,7 +3078,7 @@ class GroupManager
break; break;
case self::DOCUMENT_MODE_COLLABORATION: case self::DOCUMENT_MODE_COLLABORATION:
// Student can upload content, can modify another content. // Student can upload content, can modify another content.
$isMember = self::is_subscribed($userId, $groupInfo); $isMember = self::is_subscribed($userId, $group);
if ($isMember) { if ($isMember) {
$result = true; $result = true;
} }

@ -1,4 +1,5 @@
<?php <?php
/* See license terms in /license.txt */ /* See license terms in /license.txt */
use Chamilo\CoreBundle\Component\Utils\ChamiloApi; use Chamilo\CoreBundle\Component\Utils\ChamiloApi;
@ -273,7 +274,6 @@ class PDF
} }
if (!file_exists($file)) { if (!file_exists($file)) {
// the file doesn't exist, skip
continue; continue;
} }
@ -326,7 +326,6 @@ class PDF
$title = api_get_title_html($documentHtml, 'UTF-8', 'UTF-8'); $title = api_get_title_html($documentHtml, 'UTF-8', 'UTF-8');
// $_GET[] too, as it is done with file name. // $_GET[] too, as it is done with file name.
// At the moment the title is retrieved from the html document itself. // At the moment the title is retrieved from the html document itself.
//echo $documentHtml;exit;
if (empty($title)) { if (empty($title)) {
$title = $filename; // Here file name is expected to contain ASCII symbols only. $title = $filename; // Here file name is expected to contain ASCII symbols only.
} }
@ -644,6 +643,20 @@ class PDF
$this->pdf->SetHTMLFooter($footerHTML, 'O'); //Odd pages $this->pdf->SetHTMLFooter($footerHTML, 'O'); //Odd pages
} }
public function setCertificateFooter()
{
$this->pdf->defaultfooterfontsize = 12; // in pts
$this->pdf->defaultfooterfontstyle = 'B'; // blank, B, I, or BI
$this->pdf->defaultfooterline = 1; // 1 to include line below header/above footer
$view = new Template('', false, false, false, true, false, false);
$template = $view->get_template('export/pdf_certificate_footer.tpl');
$footerHTML = $view->fetch($template);
$this->pdf->SetHTMLFooter($footerHTML, 'E'); //Even pages
$this->pdf->SetHTMLFooter($footerHTML, 'O'); //Odd pages
}
/** /**
* Sets the PDF header. * Sets the PDF header.
* *
@ -678,7 +691,6 @@ class PDF
$visualTheme = api_get_visual_theme(); $visualTheme = api_get_visual_theme();
$img = api_get_path(SYS_CSS_PATH).'themes/'.$visualTheme.'/images/pdf_logo_header.png'; $img = api_get_path(SYS_CSS_PATH).'themes/'.$visualTheme.'/images/pdf_logo_header.png';
if (file_exists($img)) { if (file_exists($img)) {
//$img = api_get_path(WEB_CSS_PATH).'themes/'.$visualTheme.'/images/pdf_logo_header.png';
$organization = "<img src='$img'>"; $organization = "<img src='$img'>";
} }
} }

@ -5689,10 +5689,9 @@ class SessionManager
!empty($groupBackup['user'][$teacherToAdd][$course_code]) !empty($groupBackup['user'][$teacherToAdd][$course_code])
) { ) {
foreach ($groupBackup['user'][$teacherToAdd][$course_code] as $data) { foreach ($groupBackup['user'][$teacherToAdd][$course_code] as $data) {
$groupInfo = GroupManager::get_group_properties($data['group_id']); GroupManager::subscribeUsers(
GroupManager::subscribe_users(
$teacherToAdd, $teacherToAdd,
$groupInfo, api_get_group_entity($data['group_id']),
$data['c_id'] $data['c_id']
); );
} }
@ -5703,10 +5702,9 @@ class SessionManager
!empty($groupBackup['tutor'][$teacherToAdd][$course_code]) !empty($groupBackup['tutor'][$teacherToAdd][$course_code])
) { ) {
foreach ($groupBackup['tutor'][$teacherToAdd][$course_code] as $data) { foreach ($groupBackup['tutor'][$teacherToAdd][$course_code] as $data) {
$groupInfo = GroupManager::get_group_properties($data['group_id']); GroupManager::subscribeTutors(
GroupManager::subscribe_tutors(
$teacherToAdd, $teacherToAdd,
$groupInfo, api_get_group_entity($data['group_id']),
$data['c_id'] $data['c_id']
); );
} }
@ -5812,10 +5810,9 @@ class SessionManager
!empty($groupBackup['user'][$teacherId][$course_code]) !empty($groupBackup['user'][$teacherId][$course_code])
) { ) {
foreach ($groupBackup['user'][$teacherId][$course_code] as $data) { foreach ($groupBackup['user'][$teacherId][$course_code] as $data) {
$groupInfo = GroupManager::get_group_properties($data['group_id']); GroupManager::subscribeUsers(
GroupManager::subscribe_users(
$teacherId, $teacherId,
$groupInfo, api_get_group_entity($data['group_id']),
$data['c_id'] $data['c_id']
); );
} }
@ -5826,10 +5823,9 @@ class SessionManager
!empty($groupBackup['tutor'][$teacherId][$course_code]) !empty($groupBackup['tutor'][$teacherId][$course_code])
) { ) {
foreach ($groupBackup['tutor'][$teacherId][$course_code] as $data) { foreach ($groupBackup['tutor'][$teacherId][$course_code] as $data) {
$groupInfo = GroupManager::get_group_properties($data['group_id']); GroupManager::subscribeTutors(
GroupManager::subscribe_tutors(
$teacherId, $teacherId,
$groupInfo, api_get_group_entity($data['group_id']),
$data['c_id'] $data['c_id']
); );
} }

@ -1074,7 +1074,7 @@ class Wiki
if ($row && '' == $row['content'] && '' == $row['title'] && 'index' === $page) { if ($row && '' == $row['content'] && '' == $row['title'] && 'index' === $page) {
if (api_is_allowed_to_edit(false, true) || if (api_is_allowed_to_edit(false, true) ||
api_is_platform_admin() || api_is_platform_admin() ||
GroupManager::is_user_in_group(api_get_user_id(), $groupInfo) || GroupManager::isUserInGroup(api_get_user_id(), api_get_group_entity()) ||
api_is_allowed_in_course() api_is_allowed_in_course()
) { ) {
//Table structure for better export to pdf //Table structure for better export to pdf
@ -1157,9 +1157,9 @@ class Wiki
$actionsLeft .= $editLink; $actionsLeft .= $editLink;
} else { } else {
if ((api_is_allowed_in_course() || if ((api_is_allowed_in_course() ||
GroupManager::is_user_in_group( GroupManager::isUserInGroup(
api_get_user_id(), api_get_user_id(),
$groupInfo api_get_group_entity()
)) ))
) { ) {
$actionsLeft .= $editLink; $actionsLeft .= $editLink;
@ -1255,9 +1255,9 @@ class Wiki
if ($row['id']) { if ($row['id']) {
if (api_is_allowed_to_session_edit(false, true) && if (api_is_allowed_to_session_edit(false, true) &&
api_is_allowed_to_edit() || api_is_allowed_to_edit() ||
GroupManager::is_user_in_group( GroupManager::isUserInGroup(
api_get_user_id(), api_get_user_id(),
$groupInfo api_get_group_entity()
) )
) { ) {
// menu discuss page // menu discuss page
@ -2553,6 +2553,8 @@ class Wiki
$session_id = $this->session_id; $session_id = $this->session_id;
$groupId = api_get_group_id(); $groupId = api_get_group_id();
$groupInfo = GroupManager::get_group_properties($groupId); $groupInfo = GroupManager::get_group_properties($groupId);
$group = api_get_group_entity($groupId);
if (0 == $groupId) { if (0 == $groupId) {
//extract course members //extract course members
if (!empty($session_id)) { if (!empty($session_id)) {
@ -2569,9 +2571,11 @@ class Wiki
} else { } else {
//extract group members //extract group members
$subscribed_users = GroupManager::get_subscribed_users($groupInfo); $subscribed_users = GroupManager::get_subscribed_users($groupInfo);
$subscribed_tutors = GroupManager::get_subscribed_tutors( $tutors = $group->getTutors();
$groupInfo $subscribed_tutors = [];
); foreach ($tutors as $tutor) {
$subscribed_tutors[] =$tutor->getUser()->getId();
}
$a_users_to_add_with_duplicates = array_merge( $a_users_to_add_with_duplicates = array_merge(
$subscribed_users, $subscribed_users,
$subscribed_tutors $subscribed_tutors
@ -2637,15 +2641,15 @@ class Wiki
)." . ".$username; )." . ".$username;
$photo = '<img src="'.$userPicture.'" alt="'.$name.'" width="40" height="50" align="bottom" title="'.$name.'" />'; $photo = '<img src="'.$userPicture.'" alt="'.$name.'" width="40" height="50" align="bottom" title="'.$name.'" />';
$is_tutor_of_group = GroupManager::is_tutor_of_group( $is_tutor_of_group = GroupManager::isTutorOfGroup(
$assig_user_id, $assig_user_id,
$groupInfo $group
); //student is tutor ); //student is tutor
$is_tutor_and_member = GroupManager::is_tutor_of_group( $is_tutor_and_member = GroupManager::isTutorOfGroup(
$assig_user_id, $assig_user_id,
$groupInfo $group
) && ) &&
GroupManager::is_subscribed($assig_user_id, $groupInfo); GroupManager::is_subscribed($assig_user_id, $group);
// student is tutor and member // student is tutor and member
if ($is_tutor_and_member) { if ($is_tutor_and_member) {
$status_in_group = get_lang('Coach and group member'); $status_in_group = get_lang('Coach and group member');
@ -5358,7 +5362,7 @@ class Wiki
//Only teacher, platform admin and group members can edit a wiki group //Only teacher, platform admin and group members can edit a wiki group
if (api_is_allowed_to_edit(false, true) || if (api_is_allowed_to_edit(false, true) ||
api_is_platform_admin() || api_is_platform_admin() ||
GroupManager::is_user_in_group($userId, $groupInfo) || GroupManager::isUserInGroup($userId, api_get_group_entity($this->group_id)) ||
api_is_allowed_in_course() api_is_allowed_in_course()
) { ) {
$PassEdit = true; $PassEdit = true;
@ -6248,7 +6252,7 @@ class Wiki
//Only teacher, platform admin and group members can edit a wiki group //Only teacher, platform admin and group members can edit a wiki group
if (api_is_allowed_to_edit(false, true) || if (api_is_allowed_to_edit(false, true) ||
api_is_platform_admin() || api_is_platform_admin() ||
GroupManager::is_user_in_group($userId, $groupInfo) GroupManager::isUserInGroup($userId, api_get_group_entity($groupId))
) { ) {
$PassEdit = true; $PassEdit = true;
} else { } else {
@ -7084,9 +7088,9 @@ class Wiki
if (self::checktitle('index')) { if (self::checktitle('index')) {
if (api_is_allowed_to_edit(false, true) || if (api_is_allowed_to_edit(false, true) ||
api_is_platform_admin() || api_is_platform_admin() ||
GroupManager::is_user_in_group( GroupManager::isUserInGroup(
api_get_user_id(), api_get_user_id(),
$groupInfo api_get_group_entity()
) || ) ||
api_is_allowed_in_course() api_is_allowed_in_course()
) { ) {
@ -7124,9 +7128,9 @@ class Wiki
); );
if (api_is_allowed_to_edit(false, true) || if (api_is_allowed_to_edit(false, true) ||
api_is_platform_admin() || api_is_platform_admin() ||
GroupManager::is_user_in_group( GroupManager::isUserInGroup(
api_get_user_id(), api_get_user_id(),
$groupInfo api_get_group_entity
) || ) ||
0 == $_GET['group_id'] 0 == $_GET['group_id']
) { ) {

@ -123,10 +123,9 @@ Event::registerLog($logInfo);
$groupId = api_get_group_id(); $groupId = api_get_group_id();
$isTutor = false; $isTutor = false;
if (!empty($groupId)) { if (!empty($groupId)) {
$groupInfo = GroupManager::get_group_properties($groupId); $isTutor = GroupManager::isTutorOfGroup(
$isTutor = GroupManager::is_tutor_of_group(
api_get_user_id(), api_get_user_id(),
$groupInfo api_get_group_entity()
); );
} }

@ -379,9 +379,9 @@ if (false === $bbb->isGlobalConference() &&
$groups = GroupManager::get_groups(); $groups = GroupManager::get_groups();
} else { } else {
if (!empty($groupId)) { if (!empty($groupId)) {
$groupInfo = GroupManager::get_group_properties($groupId); $group = api_get_group_entity($groupId);
if ($groupInfo) { if ($group) {
$isSubscribed = GroupManager::is_user_in_group(api_get_user_id(), $groupInfo); $isSubscribed = GroupManager::isUserInGroup(api_get_user_id(), $group);
if (false === $isSubscribed) { if (false === $isSubscribed) {
api_not_allowed(true); api_not_allowed(true);
} }

@ -968,8 +968,7 @@ class ZoomPlugin extends Plugin
if ($isSubscribed) { if ($isSubscribed) {
if ($meeting->isCourseGroupMeeting()) { if ($meeting->isCourseGroupMeeting()) {
$groupInfo = GroupManager::get_group_properties($meeting->getGroup()->getIid(), true); $isInGroup = GroupManager::isUserInGroup($userId, $meeting->getGroup());
$isInGroup = GroupManager::is_user_in_group($userId, $groupInfo);
if (false === $isInGroup) { if (false === $isInGroup) {
throw new Exception($this->get_lang('YouAreNotRegisteredToThisMeeting')); throw new Exception($this->get_lang('YouAreNotRegisteredToThisMeeting'));
} }

@ -79,14 +79,9 @@ class GroupVoter extends Voter
} }
/** @var CGroup $group */ /** @var CGroup $group */
$group = $subject; $group = $subject;
$groupInfo = [
'iid' => $group->getIid(),
'session_id' => 0,
'status' => $group->getStatus(),
];
// Legacy // Legacy
return \GroupManager::userHasAccessToBrowse($user->getId(), $groupInfo); return \GroupManager::userHasAccessToBrowse($user->getId(), $group);
switch ($attribute) { switch ($attribute) {
case self::VIEW: case self::VIEW:

Loading…
Cancel
Save