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. 30
      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. 26
      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\CourseBundle\Entity\CAnnouncement;
use Chamilo\CourseBundle\Entity\CGroup;
/**
* @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;
if (!empty($group_id)) {
$groupEntity = api_get_group_entity($group_id);
$groupProperties = GroupManager::get_group_properties($group_id);
$interbreadcrumb[] = [
'url' => api_get_path(WEB_CODE_PATH).'group/group.php?'.api_get_cidreq(),
@ -61,7 +63,7 @@ if (!empty($group_id)) {
if (false === $allowToEdit) {
// 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) {
$allowToEdit = true;
}

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

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

@ -90,9 +90,11 @@ if (api_is_in_gradebook()) {
'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();
$interbreadcrumb[] = [
'url' => api_get_path(WEB_CODE_PATH).'group/group.php?'.api_get_cidreq(),
@ -100,7 +102,7 @@ if ('group' === $origin) {
];
$interbreadcrumb[] = [
'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[] = [
'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) &&
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);
}

@ -12,6 +12,7 @@ use Chamilo\CourseBundle\Entity\CForumNotification;
use Chamilo\CourseBundle\Entity\CForumPost;
use Chamilo\CourseBundle\Entity\CForumThread;
use Chamilo\CoreBundle\Entity\Course;
use Chamilo\CourseBundle\Entity\CGroup;
use ChamiloSession as Session;
use Doctrine\Common\Collections\Criteria;
use Symfony\Component\HttpFoundation\File\UploadedFile;
@ -1883,7 +1884,6 @@ function getPosts(
;
$groupId = api_get_group_id();
$groupInfo = GroupManager::get_group_properties($groupId);
$filterModerated = true;
if (empty($groupId)) {
@ -1891,7 +1891,8 @@ function getPosts(
$filterModerated = false;
}
} 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)
) {
$filterModerated = false;
@ -3831,13 +3832,11 @@ function displayUserLink(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>';
}
/**
* 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.
*/
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();
$session = api_get_session_entity();
$repo = Container::getForumRepository();
$qb = $repo->getResourcesByCourse($course, $session, $group);
return $qb->getQuery()->getResult();

@ -22,8 +22,8 @@ $userId = api_get_user_id();
$sessionId = api_get_session_id();
$groupId = api_get_group_id();
$courseId = api_get_course_int_id();
$groupInfo = GroupManager::get_group_properties($groupId);
$isTutor = GroupManager::is_tutor_of_group($userId, $groupInfo, $courseId);
//$groupInfo = GroupManager::get_group_properties($groupId);
//$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);
$repo = Container::getForumRepository();
@ -46,11 +46,10 @@ $category = $forumEntity->getForumCategory();
$is_group_tutor = false;
if (!empty($groupId)) {
//Group info & group category info
$group_properties = GroupManager::get_group_properties($groupId);
$is_group_tutor = GroupManager::is_tutor_of_group(
$groupEntity = api_get_group_entity($groupId);
$is_group_tutor = GroupManager::isTutorOfGroup(
api_get_user_id(),
$group_properties
$groupEntity
);
// Course
@ -102,7 +101,7 @@ if (!empty($groupId)) {
];
$interbreadcrumb[] = [
'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[] = [
'url' => '#',

@ -62,7 +62,11 @@ if (api_is_in_gradebook()) {
}
$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();
$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['id']) &&
(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 */
$postEntity = $repoPost->find($_GET['id']);
@ -123,7 +127,7 @@ switch ($my_action) {
case 'visible':
if (isset($_GET['id']) &&
(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 */
$postEntity = $repoPost->find($_GET['id']);
@ -179,7 +183,7 @@ if (!empty($groupId)) {
];
$interbreadcrumb[] = [
'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[] = [
'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);
$sessionId = api_get_session_id();
$userId = api_get_user_id();
$groupInfo = GroupManager::get_group_properties($group_id);
$postCount = 1;
$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
// of the forum
// The course admin him/herself can do this off course always
$tutorGroup = GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity);
}
// The user who posted it can edit his thread only if the course admin allowed this in the properties
// of the forum
// The course admin him/herself can do this off course always
$tutorGroup = GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo);
$postList = [];
foreach ($posts as $post) {
@ -393,7 +401,7 @@ foreach ($posts as $post) {
$editButton = '';
$askForRevision = '';
if ((isset($groupInfo['iid']) && $tutorGroup) ||
if (($groupEntity && $tutorGroup) ||
(1 == $forumEntity->getAllowEdit() && $posterId == $userId) ||
(api_is_allowed_to_edit(false, true) &&
!(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_session_general_coach() && $forumEntity->getSessionId() != $sessionId)
) {

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

@ -21,9 +21,13 @@ require_once api_get_path(SYS_CODE_PATH).'forum/forumfunction.inc.php';
$group_id = api_get_group_id();
$user_id = api_get_user_id();
$current_group = GroupManager::get_group_properties($group_id);
$group_id = $current_group['iid'];
if (empty($current_group)) {
$groupEntity = null;
if (!empty($group_id)) {
$groupEntity = api_get_group_entity($group_id);
}
$group_id = $groupEntity->getIid();
if (empty($groupEntity)) {
api_not_allowed(true);
}
@ -35,8 +39,8 @@ $interbreadcrumb[] = [
];
/* Ensure all private groups // Juan Carlos Raña Trabado */
$forums = get_forums_of_group($current_group);
if (!GroupManager::userHasAccessToBrowse($user_id, $current_group, api_get_session_id())) {
$forums = get_forums_of_group($groupEntity);
if (!GroupManager::userHasAccessToBrowse($user_id, $groupEntity, api_get_session_id())) {
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
*/
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.')));
}
@ -54,16 +58,16 @@ if (!empty($_GET['selfReg']) &&
* User wants to unregister from this group
*/
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::return_message(get_lang('You\'re now unsubscribed.'), 'normal')
);
}
Display::display_header(
$nameTools.' '.Security::remove_XSS($current_group['name']),
$nameTools.' '.Security::remove_XSS($groupEntity->getName()),
'Group'
);
@ -84,10 +88,10 @@ $confirmationMessage = addslashes(api_htmlentities(get_lang('Please confirm your
// Register to 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
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;">'.
get_lang('Add me to this group').
'</a>';
@ -95,7 +99,7 @@ if (GroupManager::is_self_registration_allowed($user_id, $current_group)) {
// Unregister from 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
class="btn btn-default" href="'.api_get_self().'?selfUnReg=1"
onclick="javascript: if(!confirm('."'".$confirmationMessage."'".')) return false;">'.
@ -105,7 +109,7 @@ echo '&nbsp;</div>';
$edit_url = '';
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
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(
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'])) {
echo '<p>'.Security::remove_XSS($current_group['description']).'</p>';
if (!empty($groupEntity->getDescription())) {
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) ||
GroupManager::userHasAccessToBrowse($user_id, $current_group, api_get_session_id())
GroupManager::userHasAccessToBrowse($user_id, $groupEntity, api_get_session_id())
) {
$actions_array = [];
if (is_array($forums)) {
if (GroupManager::TOOL_NOT_AVAILABLE != $current_group['forum_state']) {
if (GroupManager::TOOL_NOT_AVAILABLE != $groupEntity->getForumState()) {
foreach ($forums as $forum) {
if ('public' === $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
$actions_array[] = [
'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 = '';
if (!empty($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
$actions_array[] = [
'url' => api_get_path(WEB_CODE_PATH).'work/work.php?'.api_get_cidreq(),
'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
$actions_array[] = [
'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
$actions_array[] = [
'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),
];
}
if (GroupManager::TOOL_NOT_AVAILABLE != $current_group['chat_state']) {
if (GroupManager::TOOL_NOT_AVAILABLE != $groupEntity->getChatState()) {
// Link to the chat area of this group
if (api_get_course_setting('allow_open_chat_window')) {
$actions_array[] = [
'url' => 'javascript: void(0);',
'content' => Display::return_icon('chat.png', get_lang('Chat'), [], 32),
'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 {
$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),
];
}
@ -236,12 +239,13 @@ if (api_is_allowed_to_edit(false, true) ||
} else {
$actions_array = [];
if (is_array($forums)) {
if (GroupManager::TOOL_PUBLIC == $current_group['forum_state']) {
if (GroupManager::TOOL_PUBLIC == $groupEntity->getForumState()) {
foreach ($forums as $forum) {
if ('public' === $forum->getForumGroupPublicPrivate()) {
$actions_array[] = [
'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(
'forum.png',
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
$actions_array[] = [
'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 = '';
if (!empty($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
$actions_array[] = [
'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
$actions_array[] = [
'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
$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),
];
}
if (GroupManager::TOOL_PUBLIC == $current_group['chat_state']) {
if (GroupManager::TOOL_PUBLIC == $groupEntity->getChatState()) {
// Link to the chat area of this group
if (api_get_course_setting('allow_open_chat_window')) {
$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),
];
} else {
$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),
];
}
@ -321,16 +326,15 @@ if (api_is_allowed_to_edit(false, true) ||
/*
* List all the tutors of the current group
*/
$tutors = GroupManager::get_subscribed_tutors($current_group);
$tutors = $groupEntity->getTutors();
$userRepo = Container::getUserRepository();
$tutor_info = '';
if (0 == count($tutors)) {
$tutor_info = get_lang('(none)');
} else {
$tutor_info .= '<ul class="thumbnails">';
foreach ($tutors as $index => $tutor) {
/** @var User $user */
$user = $userRepo->find($tutor['user_id']);
foreach ($tutors as $tutor) {
$user = $tutor->getUser();
$username = api_htmlentities(sprintf(get_lang('Login: %s'), $user->getUsername()), ENT_QUOTES);
$completeName = UserManager::formatUserFullName($user);
$avatar = Container::getIllustrationRepository()->getIllustrationUrl($user);

@ -2,15 +2,8 @@
/* 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).
*/
use Chamilo\CoreBundle\Framework\Container;
require_once __DIR__.'/../inc/global.inc.php';
$this_section = SECTION_COURSES;
$current_course_tool = TOOL_GROUP;
@ -20,12 +13,13 @@ api_protect_course_script(true);
$group_id = api_get_group_id();
$current_group = GroupManager::get_group_properties($group_id);
$groupEntity = api_get_group_entity($group_id);
$nameTools = get_lang('Edit this group');
$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) {
api_not_allowed(true);
@ -112,7 +106,7 @@ $form = new FormValidator(
api_get_self().'?'.api_get_cidreq()
);
$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(
api_get_course_id(),
@ -182,11 +176,11 @@ if ($form->validate()) {
$values = $form->exportValues();
// 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) {
GroupManager::subscribe_users(
GroupManager::subscribeUsers(
$values['group_members'],
$current_group
$groupEntity
);
}
@ -215,7 +209,7 @@ $action = isset($_GET['action']) ? $_GET['action'] : null;
switch ($action) {
case 'empty':
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');
}

@ -18,15 +18,18 @@ api_protect_course_script(true);
$group_id = api_get_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);
}
$nameTools = get_lang('Edit this group');
$interbreadcrumb[] = ['url' => 'group.php?'.api_get_cidreq(), 'name' => get_lang('Groups')];
$interbreadcrumb[] = ['url' => 'group_space.php?'.api_get_cidreq(), 'name' => $current_group['name']];
$groupMember = GroupManager::is_tutor_of_group(api_get_user_id(), $current_group);
$interbreadcrumb[] = ['url' => 'group_space.php?'.api_get_cidreq(), 'name' => $groupEntity->getName()];
$groupMember = GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity);
if (!$groupMember && !api_is_allowed_to_edit(false, true)) {
api_not_allowed(true);

@ -2,15 +2,6 @@
/* 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';
$this_section = SECTION_COURSES;
$current_course_tool = TOOL_GROUP;
@ -19,13 +10,16 @@ $current_course_tool = TOOL_GROUP;
api_protect_course_script(true);
$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);
$nameTools = get_lang('Edit this group');
$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) {
api_not_allowed(true);
@ -92,11 +86,11 @@ $form = new FormValidator('group_edit', 'post', api_get_self().'?'.api_get_cidre
$form->addElement('hidden', 'action');
// Group tutors
$group_tutor_list = GroupManager::get_subscribed_tutors($current_group);
$group_tutor_list = $groupEntity->getTutors();
$selected_tutors = [];
foreach ($group_tutor_list as $index => $user) {
$selected_tutors[] = $user['user_id'];
foreach ($group_tutor_list as $user) {
$selected_tutors[] = $user->getUser()->getId();
}
$complete_user_list = CourseManager::get_user_list_from_course_code(
@ -164,9 +158,9 @@ if ($form->validate()) {
$values = $form->exportValues();
// 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) {
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)

@ -1,4 +1,5 @@
<?php
/* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Framework\Container;
@ -16,7 +17,10 @@ $sessionId = api_get_session_id();
$isTutor = false;
if (!empty($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) {
$isAllowedToEdit = true;
}
@ -35,15 +39,17 @@ switch ($action) {
}
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
$isTutor = GroupManager::is_tutor_of_group(api_get_user_id(), $groupProperties, $courseId);
$isTutor = GroupManager::isTutorOfGroup(api_get_user_id(), $groupEntity);
if ($isTutor) {
$allowToEdit = true;
}
// 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;
}
}

@ -49,10 +49,10 @@ switch ($action) {
// This needs cleaning!
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
if ($is_allowed_to_edit || GroupManager::is_user_in_group(api_get_user_id(), $groupInfo)) {
if (!GroupManager::allowUploadEditDocument(api_get_user_id(), api_get_course_int_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(), $group)) {
exit;
}
} else {

@ -133,10 +133,10 @@ if (!empty($action)) {
break;
}
$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) &&
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';
break;

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

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

@ -109,7 +109,8 @@ class GroupManager
$status = null,
$sessionId = 0,
$getCount = false,
$filterByKeyword = ''
$filterByKeyword = '',
$returnEntityList = false
) {
$course_info = empty($course_info) ? api_get_course_info() : $course_info;
@ -147,6 +148,10 @@ class GroupManager
return $qb->getQuery()->getSingleScalarResult();
}
if ($returnEntityList) {
return $qb->getQuery()->getResult();
}
return $qb->getQuery()->getArrayResult();
$table_group = Database::get_course_table(TABLE_GROUP);
@ -409,10 +414,9 @@ class GroupManager
$members = [];
foreach ($users as $index => $user_id) {
$groupId = $group_ids[$index % $number_of_groups];
$groupInfo = self::get_group_properties($groupId);
self::subscribe_users(
self::subscribeUsers(
$user_id,
$groupInfo
api_get_group_entity($groupId)
);
$members[$group_ids[$groupId]]++;
}
@ -448,8 +452,7 @@ class GroupManager
);
if ($groupId) {
$groupInfo = self::get_group_properties($groupId);
self::subscribe_users($userList, $groupInfo);
self::subscribeUsers($userList, api_get_group_entity($groupId));
$group_ids[] = $groupId;
}
}
@ -482,60 +485,20 @@ class GroupManager
$groupIid = $group->getIid();
// Unsubscribe all users
self::unsubscribe_all_users($groupIid);
self::unsubscribeAllUsers($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
->createQuery(
'DELETE FROM ChamiloCourseBundle:CForumForum f WHERE f.forumOfGroup = :group'
)
->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
$repo = Container::getGroupRepository();
$em->remove($group);
$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;
}
@ -627,10 +590,11 @@ class GroupManager
$result['count_users'] = count(
self::get_subscribed_users($result)
);
$result['count_tutor'] = count(
/*$result['count_tutor'] = count(
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;
}
@ -1382,6 +1346,7 @@ class GroupManager
$activeCondition = $filterOnlyActive ? 'AND u.active = 1' : '';
$em = Database::getManager();
return $em
->createQuery("
SELECT COUNT(u.id) FROM ChamiloCoreBundle:User u
@ -1478,7 +1443,7 @@ class GroupManager
$usersToAdd = [];
foreach ($complete_user_list as $userInfo) {
$isSubscribed = self::is_subscribed($userInfo['user_id'], $groupInfo);
$isSubscribed = self::is_subscribed($userInfo['user_id'], $group);
if ($isSubscribed) {
continue;
}
@ -1495,7 +1460,7 @@ class GroupManager
}
foreach ($usersToAdd as $userId) {
self::subscribe_users($userId, $groupInfo);
self::subscribeUsers($userId, $group);
}
}
@ -1586,31 +1551,21 @@ class GroupManager
* Is sef-registration allowed?
*
* @param int $user_id
* @param array $groupInfo
*
* @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)) {
return false;
}
$groupIid = $groupInfo['iid'];
$table = Database::get_course_table(TABLE_GROUP);
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) {
if ($group) {
if (0 == $group->getStatus() || 1 != $group->getSelfRegistrationAllowed()) {
return false;
}
return self::canUserSubscribe($user_id, $groupInfo);
return self::canUserSubscribe($user_id, $group);
}
return false;
@ -1620,49 +1575,37 @@ class GroupManager
* Is sef-unregistration allowed?
*
* @param int $user_id
* @param array $groupInfo
*
* @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;
}
$groupIid = $groupInfo['iid'];
$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) {
if (0 == $group->getStatus() || 1 != $group->getSelfUnregistrationAllowed()) {
return false;
}
return self::is_subscribed($user_id, $groupInfo);
return self::is_subscribed($user_id, $group);
}
/**
* Is user subscribed in group?
*
* @param int $user_id
* @param array $groupInfo
*
* @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();
if (empty($user_id) || empty($groupInfo) || empty($course_id)) {
if (empty($user_id) || empty($group) || empty($course_id)) {
return false;
}
$table = Database::get_course_table(TABLE_GROUP_USER);
$group_id = intval($groupInfo['iid']);
$user_id = intval($user_id);
$group_id = $group->getIid();
$user_id = (int) $user_id;
$sql = "SELECT 1 FROM $table
WHERE
@ -1678,19 +1621,18 @@ class GroupManager
* Can a user subscribe to a specified group in a course.
*
* @param int $user_id
* @param array $groupInfo
* @param bool $checkMaxNumberStudents
*
* @return bool TRUE if given user can be subscribed in given group
* @return bool true if success
*/
public static function canUserSubscribe(
$user_id,
$groupInfo,
CGroup $group,
$checkMaxNumberStudents = true
) {
$groupIid = $groupInfo['iid'];
$groupIid = $group->getIid();
if ($checkMaxNumberStudents) {
$category = self::get_category_from_group($groupIid);
$category = self::get_category_from_group($group->getIid());
if ($category) {
if (self::GROUP_PER_MEMBER_NO_LIMIT == $category['groups_per_user']) {
$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) {
return false;
}
$result = self::is_subscribed($user_id, $groupInfo);
$result = self::is_subscribed($user_id, $group);
if ($result) {
return false;
@ -1782,77 +1724,28 @@ class GroupManager
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).
*
* @param mixed $user_ids Can be an array with user-id's or a single user-id
* @param array $groupInfo
* @param mixed $userList Can be an array with user-id's or a single user-id
* @param CGroup $group
* @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;
$group_id = $groupInfo['iid'];
$group_id = $group->getIid();
if (!empty($user_ids)) {
if (!empty($userList)) {
$table = Database::get_course_table(TABLE_GROUP_USER);
foreach ($user_ids as $user_id) {
if (self::canUserSubscribe($user_id, $groupInfo)) {
foreach ($userList as $user_id) {
if (self::canUserSubscribe($user_id, $group)) {
$user_id = (int) $user_id;
$sql = "INSERT INTO $table (c_id, user_id, group_id, status, role)
VALUES ('$course_id', '".$user_id."', '".$group_id."', 0, '')";
@ -1867,27 +1760,24 @@ class GroupManager
/**
* 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 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;
$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);
$groupId = (int) $groupInfo['iid'];
$groupId = (int) $group->getIid();
foreach ($user_ids as $user_id) {
foreach ($userList as $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)
VALUES ('$course_id', '".$user_id."', '".$groupId."')";
$result = Database::query($sql);
@ -1900,21 +1790,23 @@ class GroupManager
/**
* 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 array $groupInfo
* @param mixed $userList Can be an array with user-id's or a single user-id
*
* @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);
$group_id = intval($groupInfo['iid']);
$group_id = $group->getIid();
$course_id = api_get_course_int_id();
$sql = 'DELETE FROM '.$table_group_user.'
WHERE
group_id = '.$group_id.' AND
user_id IN ('.implode(',', $user_ids).')
user_id IN ('.implode(',', $userList).')
';
Database::query($sql);
}
@ -1924,9 +1816,9 @@ class GroupManager
*
* @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;
if (empty($groupId)) {
@ -1965,9 +1857,7 @@ class GroupManager
$table_group_tutor = Database::get_course_table(TABLE_GROUP_TUTOR);
$sql = "DELETE FROM $table_group_tutor
WHERE group_id = $groupId ";
$result = Database::query($sql);
return $result;
Database::query($sql);
}
return true;
@ -1975,43 +1865,26 @@ class GroupManager
/**
* Is the user a tutor of this group?
*
* @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
* @todo replace this function with $group->isUserTutor
*/
public static function is_tutor_of_group($user_id, $groupInfo, $courseId = 0)
public static function isTutorOfGroup($userId, CGroup $group = null)
{
if (empty($groupInfo)) {
return false;
}
$courseId = empty($courseId) ? api_get_course_int_id() : (int) $courseId;
if (empty($courseId)) {
if (empty($group)) {
return false;
}
$user_id = (int) $user_id;
$group_id = (int) $groupInfo['iid'];
$userId = (int) $userId;
$group_id = (int) $group->getIid();
$table = Database::get_course_table(TABLE_GROUP_TUTOR);
$sql = "SELECT * FROM $table
WHERE
user_id = $user_id AND
user_id = $userId AND
group_id = $group_id";
$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
* 1. a member of the group OR
* 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) {
return true;
}
$tutor = self::is_tutor_of_group($user_id, $groupInfo);
$tutor = self::isTutorOfGroup($user_id, $group);
if ($tutor) {
return true;
}
@ -2162,14 +2028,14 @@ class GroupManager
return true;
break;
case self::TOOL_PRIVATE:
$userIsInGroup = self::is_user_in_group($user_id, $groupInfo);
$userIsInGroup = self::isUserInGroup($user_id, $groupInfo);
if ($userIsInGroup) {
return true;
}
break;
case self::TOOL_PRIVATE_BETWEEN_USERS:
// 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) {
return true;
}
@ -2181,14 +2047,14 @@ class GroupManager
/**
* @param int $userId
* @param array $groupInfo
* @param CGroup $group
* @param int $sessionId
*
* @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;
}
@ -2212,14 +2078,14 @@ class GroupManager
}
}
$groupId = $groupInfo['iid'];
if (self::is_tutor_of_group($userId, $groupInfo)) {
if (self::isTutorOfGroup($userId, $group)) {
return true;
}
if (0 == $groupInfo['status']) {
if (0 == $group->getStatus()) {
return false;
}
$groupId = $group->getIid();
if (self::user_has_access($userId, $groupId, self::GROUP_TOOL_FORUM) ||
self::user_has_access($userId, $groupId, self::GROUP_TOOL_DOCUMENTS) ||
@ -2231,8 +2097,10 @@ class GroupManager
) {
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;
}
@ -2308,12 +2176,12 @@ class GroupManager
}
/**
* @param array $group_list
* @param CGroup[] $groupList
* @param int $category_id
*
* @return string
*/
public static function process_groups($group_list, $category_id = 0)
public static function processGroups($groupList, $category_id = 0)
{
$charset = 'UTF-8';
$category_id = (int) $category_id;
@ -2327,75 +2195,78 @@ class GroupManager
$surveyGroupExists = $extraField->get_handler_field_info_by_field_variable('group_id') ? true : false;
$url = api_get_path(WEB_CODE_PATH).'group/';
foreach ($group_list as $this_group) {
$groupId = $this_group['iid'];
foreach ($groupList as $group) {
$groupId = $group->getIid();
// Validation when belongs to a session
$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
$tutors = self::get_subscribed_tutors($this_group, true);
$isMember = self::is_subscribed($user_id, $this_group);
$tutors = $group->getTutors();
$isMember = self::is_subscribed($user_id, $group);
// Create a new table-row
$row = [];
// Checkbox
if (api_is_allowed_to_edit(false, true) && count($group_list) > 1) {
$row[] = $this_group['iid'];
if (api_is_allowed_to_edit(false, true) && count($groupList) > 1) {
$row[] = $groupId;
}
if (self::userHasAccessToBrowse($user_id, $this_group, $session_id)) {
if (self::userHasAccessToBrowse($user_id, $group, $session_id)) {
// Group name
$groupNameClass = null;
if (0 == $this_group['status']) {
if (0 == $group->getStatus()) {
$groupNameClass = 'muted';
}
$group_name = '<a
class="'.$groupNameClass.'"
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 = '';
if (api_get_configuration_value('extra')) {
$group_name2 = '<a
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']) {
$group_name .= Display::label(get_lang('my supervision'), 'success');
} elseif ($isMember) {
$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 .= $session_img;
$row[] = $group_name.$group_name2.'<br />'.stripslashes(trim($this_group['description']));
$group_name .= $session_img;*/
$row[] = $group_name.$group_name2.'<br />'.stripslashes(trim($group->getDescription()));
} else {
if ('true' === $hideGroup) {
continue;
}
$row[] = $this_group['name'].'<br />'.stripslashes(trim($this_group['description']));
$row[] = $group->getName().'<br />'.stripslashes(trim($group->getDescription()));
}
// Tutor name
$tutor_info = '';
if (count($tutors) > 0) {
foreach ($tutors as $tutor_id) {
$tutor = api_get_user_info($tutor_id);
foreach ($tutors as $tutorGroup) {
$tutor = $tutorGroup->getUser();
$username = api_htmlentities(
sprintf(get_lang('Login: %s'), $tutor['username']),
sprintf(get_lang('Login: %s'), $tutor->getUsername()),
ENT_QUOTES
);
if ('true' === api_get_setting('show_email_addresses')) {
$tutor_info .= Display::tag(
'span',
Display::encrypted_mailto_link(
$tutor['mail'],
$tutor['complete_name']
$tutor->getEmail(),
UserManager::formatUserFullName($tutor)
),
['title' => $username]
).', ';
@ -2404,15 +2275,15 @@ class GroupManager
$tutor_info .= Display::tag(
'span',
Display::encrypted_mailto_link(
$tutor['mail'],
$tutor['complete_name_with_username']
$tutor->getEmail(),
UserManager::formatUserFullName($tutor)
),
['title' => $username]
).', ';
} else {
$tutor_info .= Display::tag(
'span',
$tutor['complete_name'],
UserManager::formatUserFullName($tutor),
['title' => $username]
).', ';
}
@ -2428,19 +2299,21 @@ class GroupManager
$row[] = $tutor_info;
// 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);
// Number of members in group
$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
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
class = "btn btn-default"
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>';
} elseif (self::is_self_unregistration_allowed($user_id, $this_group)) {
} elseif (self::is_self_unregistration_allowed($user_id, $group)) {
$row[] = '<a
class = "btn btn-default"
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
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
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).
'</a>&nbsp;';
if (1 == $this_group['status']) {
if (1 == $group->getStatus()) {
$edit_actions .= '<a
href="'.api_get_self().'?'.api_get_cidreq(true, false).'&category='.$category_id.'&action=set_invisible&group_id='.$groupId.'"
title="'.get_lang('Hide').'">'.
@ -2500,9 +2376,10 @@ class GroupManager
$row[] = $edit_actions;
}
if (!empty($this_group['nbMember'])) {
/*if (!empty($this_group['nbMember'])) {
$totalRegistered = $totalRegistered + $this_group['nbMember'];
}
}*/
$group_data[] = $row;
}
@ -2521,7 +2398,7 @@ class GroupManager
);
$table->set_additional_parameters(['category' => $category_id]);
$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++, get_lang('Groups'));
@ -2540,7 +2417,7 @@ class GroupManager
$form_actions['fill_selected'] = get_lang('Fill the group randomly with course students');
$form_actions['empty_selected'] = get_lang('unsubscribe all users');
$form_actions['delete_selected'] = get_lang('Delete');
if (count($group_list) > 1) {
if (count($groupList) > 1) {
$table->set_form_actions($form_actions, 'group');
}
}
@ -2725,7 +2602,7 @@ class GroupManager
$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']) : [];
@ -2757,7 +2634,7 @@ class GroupManager
$tutorIdList[] = $userInfo['user_id'];
}
self::subscribe_tutors($tutorIdList, $groupInfo);
self::subscribeTutors($tutorIdList, api_get_group_entity($groupInfo['iid']));
}
$elementsFound['groups'][] = $groupId;
@ -3002,6 +2879,7 @@ class GroupManager
return $content;
}
/**
* @param array $courseInfo
* @param string $keyword
@ -3090,7 +2968,7 @@ class GroupManager
/**
* @param int $userId
* @param int $courseId
* @param array $groupInfo
* @param CGroup $group
* @param array $documentInfoToBeCheck
* @param bool $blockPage
*
@ -3099,7 +2977,7 @@ class GroupManager
public static function allowUploadEditDocument(
$userId,
$courseId,
$groupInfo,
CGroup $group,
$documentInfoToBeCheck = null,
$blockPage = false
) {
@ -3108,7 +2986,7 @@ class GroupManager
return true;
}
if (empty($groupInfo) || !isset($groupInfo['iid'])) {
if (empty($group)) {
if ($blockPage) {
api_not_allowed(true);
}
@ -3117,14 +2995,14 @@ class GroupManager
}
// Tutor can also make any change
$isTutor = self::is_tutor_of_group($userId, $groupInfo, $courseId);
$isTutor = self::isTutorOfGroup($userId, $group);
if ($isTutor) {
return true;
}
// Just in case also check if document in group is available
if (0 == $groupInfo['doc_state']) {
if (0 == $group->getDocState()) {
if ($blockPage) {
api_not_allowed(true);
}
@ -3147,9 +3025,7 @@ class GroupManager
// Check group document access
$allow = api_get_configuration_value('group_document_access');
if ($allow) {
if (isset($groupInfo['document_access'])) {
$documentAccess = (int) $groupInfo['document_access'];
}
$documentAccess = (int) $group->getDocumentAccess();
}
// Check access for students
@ -3158,7 +3034,7 @@ class GroupManager
case self::DOCUMENT_MODE_SHARE:
// Default chamilo behaviour
// Student can upload his own content, cannot modify another content.
$isMember = self::is_subscribed($userId, $groupInfo);
$isMember = self::is_subscribed($userId, $group);
if ($isMember) {
// No document to check, allow access to document feature.
if (empty($documentInfoToBeCheck)) {
@ -3202,7 +3078,7 @@ class GroupManager
break;
case self::DOCUMENT_MODE_COLLABORATION:
// Student can upload content, can modify another content.
$isMember = self::is_subscribed($userId, $groupInfo);
$isMember = self::is_subscribed($userId, $group);
if ($isMember) {
$result = true;
}

@ -1,4 +1,5 @@
<?php
/* See license terms in /license.txt */
use Chamilo\CoreBundle\Component\Utils\ChamiloApi;
@ -273,7 +274,6 @@ class PDF
}
if (!file_exists($file)) {
// the file doesn't exist, skip
continue;
}
@ -326,7 +326,6 @@ class PDF
$title = api_get_title_html($documentHtml, 'UTF-8', 'UTF-8');
// $_GET[] too, as it is done with file name.
// At the moment the title is retrieved from the html document itself.
//echo $documentHtml;exit;
if (empty($title)) {
$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
}
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.
*
@ -678,7 +691,6 @@ class PDF
$visualTheme = api_get_visual_theme();
$img = api_get_path(SYS_CSS_PATH).'themes/'.$visualTheme.'/images/pdf_logo_header.png';
if (file_exists($img)) {
//$img = api_get_path(WEB_CSS_PATH).'themes/'.$visualTheme.'/images/pdf_logo_header.png';
$organization = "<img src='$img'>";
}
}

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

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

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

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

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

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

Loading…
Cancel
Save