/** * 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 * @package chamilo.group * @todo course admin functionality to create groups based on who is in which course (or class). */ //require_once '../inc/global.inc.php'; $this_section = SECTION_COURSES; $current_course_tool = TOOL_GROUP; // Notice for unauthorized people. api_protect_course_script(true); $group_id = api_get_group_id(); $current_group = GroupManager::get_group_properties($group_id); $nameTools = get_lang('EditGroup'); $interbreadcrumb[] = array('url' => 'group.php', 'name' => get_lang('Groups')); $interbreadcrumb[] = array('url' => 'group_space.php?' . api_get_cidReq(), 'name' => $current_group['name']); $is_group_member = GroupManager::is_tutor_of_group(api_get_user_id(), $group_id); if (!api_is_allowed_to_edit(false, true) && !$is_group_member) { api_not_allowed(true); } /** * List all users registered to the course */ function search_members_keyword($firstname, $lastname, $username, $official_code, $keyword) { if (api_strripos($firstname, $keyword) !== false || api_strripos($lastname, $keyword) !== false || api_strripos($username, $keyword) !== false || api_strripos($official_code, $keyword) !== false) { return true; } else {
} if ($dir[strlen($dir) - 1] != '/') { $dir .= '/'; } if ($is_certificate_mode) { $document_id = DocumentManager::get_document_id(api_get_course_info(), '/certificates'); $document_data = DocumentManager::get_document_data_by_id($document_id, api_get_course_id(), true); $folder_id = $document_data['id']; $dir = '/certificates/'; } // Configuration for the FCKEDITOR $doc_tree = explode('/', $dir); $count_dir = count($doc_tree) - 2; // "2" because at the begin and end there are 2 "/" if (api_is_in_group()) { $group_properties = GroupManager::get_group_properties($groupId); // Level correction for group documents. if (!empty($group_properties['directory'])) { $count_dir = $count_dir > 0 ? $count_dir - 1 : 0; } } $relative_url = ''; for ($i = 0; $i < $count_dir; $i++) { $relative_url .= '../'; } // We do this in order to avoid the condition in html_editor.php ==> if ($this -> fck_editor->Config['CreateDocumentWebDir']=='' || $this -> fck_editor->Config['CreateDocumentDir']== '') if ($relative_url == '') { $relative_url = '/'; } $is_allowed_to_edit = api_is_allowed_to_edit(null, true); $html_editor_config = array('ToolbarSet' => $is_allowed_to_edit ? 'Documents' : 'DocumentsStudent', 'Width' => '100%', 'Height' => '500', 'FullPage' => true, 'InDocument' => true, 'CreateDocumentDir' => $relative_url, 'CreateDocumentWebDir' => empty($group_properties['directory']) ? api_get_path(WEB_COURSE_PATH) . $_course['path'] . '/document/' : api_get_path(WEB_COURSE_PATH) . api_get_course_path() . '/document' . $group_properties['directory'] . '/', 'BaseHref' => api_get_path(WEB_COURSE_PATH) . $_course['path'] . '/document' . $dir);
/** * Export all categories/group from a course to an array. * This function works only in a context of a course. * @return array */ public static function exportCategoriesAndGroupsToArray() { $data = array(); $data[] = array('category', 'group', 'description', 'announcements_state', 'calendar_state', 'chat_state', 'doc_state', 'forum_state', 'work_state', 'wiki_state', 'max_student', 'self_reg_allowed', 'self_unreg_allowed', 'groups_per_user'); $categories = GroupManager::get_categories(); foreach ($categories as $categoryInfo) { $data[] = array($categoryInfo['title'], null, $categoryInfo['description'], $categoryInfo['announcements_state'], $categoryInfo['calendar_state'], $categoryInfo['chat_state'], $categoryInfo['doc_state'], $categoryInfo['forum_state'], $categoryInfo['work_state'], $categoryInfo['wiki_state'], $categoryInfo['max_student'], $categoryInfo['self_reg_allowed'], $categoryInfo['self_unreg_allowed'], $categoryInfo['groups_per_user']); } $groups = GroupManager::get_group_list(); foreach ($groups as $groupInfo) { $categoryTitle = null; $categoryInfo = GroupManager::get_category($groupInfo['category_id']); $groupSettings = GroupManager::get_group_properties($groupInfo['id']); if (!empty($categoryInfo)) { $categoryTitle = $categoryInfo['title']; } $data[] = array($categoryTitle, $groupSettings['name'], $groupSettings['description'], $groupSettings['announcements_state'], $groupSettings['calendar_state'], $groupSettings['chat_state'], $groupSettings['doc_state'], $groupSettings['forum_state'], $groupSettings['work_state'], $groupSettings['wiki_state'], $groupSettings['maximum_number_of_students'], $groupSettings['self_registration_allowed'], $groupSettings['self_unregistration_allowed']); } return $data; }
} if ($dir[strlen($dir) - 1] != '/') { $dir .= '/'; } if ($is_certificate_mode) { $document_id = DocumentManager::get_document_id(api_get_course_info(), '/certificates'); $document_data = DocumentManager::get_document_data_by_id($document_id, api_get_course_id(), true); $folder_id = $document_data['id']; $dir = '/certificates/'; } // Configuration for the FCKEDITOR $doc_tree = explode('/', $dir); $count_dir = count($doc_tree) - 2; // "2" because at the begin and end there are 2 "/" if (api_is_in_group()) { $group_properties = GroupManager::get_group_properties(api_get_group_id()); // Level correction for group documents. if (!empty($group_properties['directory'])) { $count_dir = $count_dir > 0 ? $count_dir - 1 : 0; } } $relative_url = ''; for ($i = 0; $i < $count_dir; $i++) { $relative_url .= '../'; } /* We do this in order to avoid the condition in html_editor.php ==> if ($this -> fck_editor->Config['CreateDocumentWebDir']=='' || $this -> fck_editor->Config['CreateDocumentDir']== '')* */ if ($relative_url == '') { $relative_url = '/'; }
/** * Export all categories/group from a course to an array. * This function works only in a context of a course. * @param int $groupId * @param bool $loadUsers * @return array */ public static function exportCategoriesAndGroupsToArray($groupId = null, $loadUsers = false) { $data = array(); $data[] = array('category', 'group', 'description', 'announcements_state', 'calendar_state', 'chat_state', 'doc_state', 'forum_state', 'work_state', 'wiki_state', 'max_student', 'self_reg_allowed', 'self_unreg_allowed', 'groups_per_user'); $count = 1; if ($loadUsers) { $data[0][] = 'students'; $data[0][] = 'tutors'; } if ($loadUsers == false) { $categories = GroupManager::get_categories(); foreach ($categories as $categoryInfo) { $data[$count] = array($categoryInfo['title'], null, $categoryInfo['description'], $categoryInfo['announcements_state'], $categoryInfo['calendar_state'], $categoryInfo['chat_state'], $categoryInfo['doc_state'], $categoryInfo['forum_state'], $categoryInfo['work_state'], $categoryInfo['wiki_state'], $categoryInfo['max_student'], $categoryInfo['self_reg_allowed'], $categoryInfo['self_unreg_allowed'], $categoryInfo['groups_per_user']); $count++; } } $groups = GroupManager::get_group_list(); foreach ($groups as $groupInfo) { $categoryTitle = null; $categoryInfo = GroupManager::get_category($groupInfo['category_id']); $groupSettings = GroupManager::get_group_properties($groupInfo['id']); if (!empty($categoryInfo)) { $categoryTitle = $categoryInfo['title']; } $users = GroupManager::getStudents($groupInfo['id']); $userList = array(); foreach ($users as $user) { $user = api_get_user_info($user['user_id']); $userList[] = $user['username']; } $tutors = GroupManager::getTutors($groupInfo['id']); $tutorList = array(); foreach ($tutors as $user) { $user = api_get_user_info($user['user_id']); $tutorList[] = $user['username']; } $userListToString = null; if (!empty($userList)) { $userListToString = implode(',', $userList); } $tutorListToString = null; if (!empty($tutorList)) { $tutorListToString = implode(',', $tutorList); } $data[$count] = array($categoryTitle, $groupSettings['name'], $groupSettings['description'], $groupSettings['announcements_state'], $groupSettings['calendar_state'], $groupSettings['chat_state'], $groupSettings['doc_state'], $groupSettings['forum_state'], $groupSettings['work_state'], $groupSettings['wiki_state'], $groupSettings['maximum_number_of_students'], $groupSettings['self_registration_allowed'], $groupSettings['self_unregistration_allowed'], null); if ($loadUsers) { $data[$count][] = $userListToString; $data[$count][] = $tutorListToString; } if (!empty($groupId)) { if ($groupId == $groupInfo['id']) { break; } } $count++; } return $data; }
} if ($dir[strlen($dir) - 1] != '/') { $dir .= '/'; } $filepath = api_get_path(SYS_COURSE_PATH) . $_course['path'] . '/document' . $dir; if (!is_dir($filepath)) { $filepath = api_get_path(SYS_COURSE_PATH) . $_course['path'] . '/document/'; $dir = '/'; } //groups //TODO: clean if (isset($_SESSION['_gid']) && $_SESSION['_gid'] != 0) { $req_gid = '&gidReq=' . $_SESSION['_gid']; $interbreadcrumb[] = array("url" => "../group/group_space.php?gidReq=" . $_SESSION['_gid'], "name" => get_lang('GroupSpace')); $noPHP_SELF = true; $to_group_id = $_SESSION['_gid']; $group = GroupManager::get_group_properties($to_group_id); $path = explode('/', $dir); if ('/' . $path[1] != $group['directory']) { api_not_allowed(true); } } $interbreadcrumb[] = array("url" => "./document.php?curdirpath=" . urlencode($dir) . $req_gid, "name" => get_lang('Documents')); if (!$is_allowed_in_course) { api_not_allowed(true); } if (!($is_allowed_to_edit || GroupManager::groupMemberWithUploadRights() || is_my_shared_folder($_user['user_id'], Security::remove_XSS($dir), api_get_session_id()))) { api_not_allowed(true); } /* Header */ Event::event_access_tool(TOOL_DOCUMENT); $display_dir = $dir;
<head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo api_get_system_encoding(); ?> " /> <?php echo '<title>' . get_lang('Chat') . ' - ' . $mycourseid . ' - ' . api_get_setting('siteName') . '</title>'; // If it is a group chat then the breadcrumbs. if ($_SESSION['_gid'] or $_GET['group_id']) { if (isset($_SESSION['_gid'])) { $_clean['group_id'] = (int) $_SESSION['_gid']; } if (isset($_GET['group_id'])) { $_clean['group_id'] = (int) Database::escape_string($_GET['group_id']); } $group_properties = GroupManager::get_group_properties($_clean['group_id']); $interbreadcrumb[] = array('url' => '../group/group.php', 'name' => get_lang('Groups')); $interbreadcrumb[] = array('url' => '../group/group_space.php?gidReq=' . api_get_group_id(), 'name' => get_lang('GroupSpace') . ' ' . $group_properties['name']); $noPHP_SELF = true; $shortBanner = false; $add_group_to_title = ' (' . $group_properties['name'] . ')'; $groupfilter = 'group_id="' . $_clean['group_id'] . '"'; // Ensure this tool in groups whe it's private or deactivated /*if ($group_properties['chat_state'] == 0) { echo api_not_allowed(); } elseif ($group_properties['chat_state'] == 2) { if (!api_is_allowed_to_edit(false,true) and !GroupManager :: is_user_in_group($_user['user_id'], $_SESSION['_gid'])) { echo api_not_allowed(); } }*/ } else {
// Note: This has to be validated that it is an existing thread. $current_forum = get_forum_information($_GET['forum']); // Note: This has to be validated that it is an existing forum. $current_forum_category = get_forumcategory_information($current_forum['forum_category']); $current_post = get_post_information($_GET['post']); api_block_course_item_locked_by_gradebook($_GET['thread'], LINK_FORUM_THREAD); /* Header and Breadcrumbs */ if (isset($_SESSION['gradebook'])) { $gradebook = $_SESSION['gradebook']; } if (!empty($gradebook) && $gradebook == 'view') { $interbreadcrumb[] = array('url' => '../gradebook/' . $_SESSION['gradebook_dest'], 'name' => get_lang('ToolGradebook')); } if ($origin == 'group') { $_clean['toolgroup'] = (int) $_SESSION['toolgroup']; $group_properties = GroupManager::get_group_properties($_clean['toolgroup']); $interbreadcrumb[] = array('url' => '../group/group.php', 'name' => get_lang('Groups')); $interbreadcrumb[] = array('url' => '../group/group_space.php?gidReq=' . $_SESSION['toolgroup'], 'name' => get_lang('GroupSpace') . ' ' . $group_properties['name']); $interbreadcrumb[] = array('url' => 'viewforum.php?origin=' . $origin . '&gidReq=' . $_SESSION['toolgroup'] . '&forum=' . Security::remove_XSS($_GET['forum']), 'name' => prepare4display($current_forum['forum_title'])); $interbreadcrumb[] = array('url' => 'javascript: void (0);', 'name' => get_lang('EditPost')); } else { $interbreadcrumb[] = array('url' => 'index.php?gradebook=' . $gradebook, 'name' => $nameTools); $interbreadcrumb[] = array('url' => 'viewforumcategory.php?forumcategory=' . $current_forum_category['cat_id'], 'name' => prepare4display($current_forum_category['cat_title'])); $interbreadcrumb[] = array('url' => 'viewforum.php?origin=' . $origin . '&forum=' . Security::remove_XSS($_GET['forum']), 'name' => prepare4display($current_forum['forum_title'])); $interbreadcrumb[] = array('url' => 'viewthread.php?gradebook=' . $gradebook . '&origin=' . $origin . '&forum=' . Security::remove_XSS($_GET['forum']) . '&thread=' . Security::remove_XSS($_GET['thread']), 'name' => prepare4display($current_thread['thread_title'])); $interbreadcrumb[] = array('url' => 'javascript: void (0);', 'name' => get_lang('EditPost')); } /* Resource Linker */ if (isset($_POST['add_resources']) and $_POST['add_resources'] == get_lang('Resources')) { $_SESSION['formelements'] = $_POST; $_SESSION['origin'] = $_SERVER['REQUEST_URI'];
} // 4. anonymous posts are not allowed and the user is not logged in if (!$_user['user_id'] and $current_forum['allow_anonymous'] != 1) { api_not_allowed(); } // 5. Check user access if ($current_forum['forum_of_group'] != 0) { $show_forum = GroupManager::user_has_access(api_get_user_id(), $current_forum['forum_of_group'], GroupManager::GROUP_TOOL_FORUM); if (!$show_forum) { api_not_allowed(); } } $session_toolgroup = 0; if ($origin == 'group') { $session_toolgroup = intval($_SESSION['toolgroup']); $group_properties = GroupManager::get_group_properties($session_toolgroup); $interbreadcrumb[] = array('url' => '../group/group.php', 'name' => get_lang('Groups')); $interbreadcrumb[] = array('url' => '../group/group_space.php?gidReq=' . $session_toolgroup, 'name' => get_lang('GroupSpace') . ' ' . $group_properties['name']); $interbreadcrumb[] = array('url' => 'viewforum.php?origin=' . $origin . '&gidReq=' . $session_toolgroup . '&forum=' . Security::remove_XSS($_GET['forum']), 'name' => $current_forum['forum_title']); $interbreadcrumb[] = array('url' => 'newthread.php?origin=' . $origin . '&forum=' . Security::remove_XSS($_GET['forum']), 'name' => get_lang('NewTopic')); } else { $interbreadcrumb[] = array('url' => 'index.php?gradebook=' . $gradebook, 'name' => $nameTools); $interbreadcrumb[] = array('url' => 'viewforumcategory.php?forumcategory=' . $current_forum_category['cat_id'], 'name' => $current_forum_category['cat_title']); $interbreadcrumb[] = array('url' => 'viewforum.php?origin=' . $origin . '&forum=' . Security::remove_XSS($_GET['forum']), 'name' => $current_forum['forum_title']); $interbreadcrumb[] = array('url' => '#', 'name' => get_lang('NewTopic')); } /* Resource Linker */ if (isset($_POST['add_resources']) and $_POST['add_resources'] == get_lang('Resources')) { $_SESSION['formelements'] = $_POST; $_SESSION['origin'] = $_SERVER['REQUEST_URI']; $_SESSION['breadcrumbs'] = $interbreadcrumb;
$group_id = api_get_group_id(); $session_id = api_get_session_id(); $session_condition = api_get_session_condition($session_id); $group_condition = " AND to_group_id = '{$group_id}'"; $extra_condition = ''; if (!empty($group_id)) { $extra_condition = $group_condition; } else { $extra_condition = $session_condition; } $extra_condition .= " AND c_id = {$course_id}"; // get chat path $chat_path = ''; $document_path = api_get_path(SYS_COURSE_PATH) . $_course['path'] . '/document'; if (!empty($group_id)) { $group_info = GroupManager::get_group_properties($group_id); $chat_path = $document_path . $group_info['directory'] . '/chat_files/'; } else { $chat_path = $document_path . '/chat_files/'; } // get chat file $basename_chat = ''; if (!empty($group_id)) { $basename_chat = 'messages-' . $date_now . '_gid-' . $group_id; } elseif (!empty($session_id)) { $basename_chat = 'messages-' . $date_now . '_sid-' . $session_id; } else { $basename_chat = 'messages-' . $date_now; } $chat_size_old = isset($_POST['chat_size_old']) ? intval($_POST['chat_size_old']) : null; $file = $chat_path . $basename_chat . '.log.html';
/** * @param string $message * @param array $_course * @param int $group_id * @param int $session_id * @param bool $preview */ function saveMessage($message, $userId, $_course, $session_id, $group_id, $preview = true) { $userInfo = api_get_user_info($userId); $fullName = $userInfo['complete_name']; $isMaster = (bool) api_is_course_admin(); $document_path = api_get_path(SYS_COURSE_PATH) . $_course['path'] . '/document'; if (!empty($group_id)) { $group_info = GroupManager::get_group_properties($group_id); $basepath_chat = $group_info['directory'] . '/chat_files'; } else { $basepath_chat = '/chat_files'; } $chat_path = $document_path . $basepath_chat . '/'; if (!is_dir($chat_path)) { if (is_file($chat_path)) { @unlink($chat_path); } } $date_now = date('Y-m-d'); $message = trim($message); $timeNow = date('d/m/y H:i:s'); if (!empty($group_id)) { $basename_chat = 'messages-' . $date_now . '_gid-' . $group_id; } elseif (!empty($session_id)) { $basename_chat = 'messages-' . $date_now . '_sid-' . $session_id; } else { $basename_chat = 'messages-' . $date_now; } if (!api_is_anonymous()) { if (!empty($message)) { Emojione\Emojione::$imagePathPNG = api_get_path(WEB_LIBRARY_PATH) . 'javascript/emojione/png/'; Emojione\Emojione::$ascii = true; // Parsing emojis $message = Emojione\Emojione::toImage($message); // Parsing text to understand markdown (code highlight) $message = MarkdownExtra::defaultTransform($message); // Security XSS $message = Security::remove_XSS($message); if ($preview == true) { return $message; } if (!file_exists($chat_path . $basename_chat . '.log.html')) { $doc_id = add_document($_course, $basepath_chat . '/' . $basename_chat . '.log.html', 'file', 0, $basename_chat . '.log.html'); api_item_property_update($_course, TOOL_DOCUMENT, $doc_id, 'DocumentAdded', $userId, $group_id, null, null, null, $session_id); api_item_property_update($_course, TOOL_DOCUMENT, $doc_id, 'invisible', $userId, $group_id, null, null, null, $session_id); item_property_update_on_folder($_course, $basepath_chat, $userId); } else { $doc_id = DocumentManager::get_document_id($_course, $basepath_chat . '/' . $basename_chat . '.log.html'); } $fp = fopen($chat_path . $basename_chat . '.log.html', 'a'); $userPhoto = Usermanager::getUserPicture($userId, USER_IMAGE_SIZE_MEDIUM); $filePhoto = '<img class="chat-image" src="' . $userPhoto . '"/>'; if ($isMaster) { fputs($fp, '<div class="message-teacher"><div class="content-message"><div class="chat-message-block-name">' . $fullName . '</div><div class="chat-message-block-content">' . $message . '</div><div class="message-date">' . $timeNow . '</div></div><div class="icon-message"></div>' . $filePhoto . '</div>' . "\n"); } else { fputs($fp, '<div class="message-student">' . $filePhoto . '<div class="icon-message"></div><div class="content-message"><div class="chat-message-block-name">' . $fullName . '</div><div class="chat-message-block-content">' . $message . '</div><div class="message-date">' . $timeNow . '</div></div></div>' . "\n"); } fclose($fp); $chat_size = filesize($chat_path . $basename_chat . '.log.html'); update_existing_document($_course, $doc_id, $chat_size); item_property_update_on_folder($_course, $basepath_chat, $userId); } } }
/** * Function export last wiki page version to document area * @param int $doc_id wiki page id * * @author Juan Carlos Raña <*****@*****.**> */ public function export2doc($doc_id) { $_course = $this->courseInfo; $groupId = api_get_group_id(); $data = self::get_wiki_data($doc_id); if (empty($data)) { return false; } $wikiTitle = $data['title']; $wikiContents = $data['content']; $template = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{LANGUAGE}" lang="{LANGUAGE}"> <head> <title>{TITLE}</title> <meta http-equiv="Content-Type" content="text/html; charset={ENCODING}" /> <style type="text/css" media="screen, projection"> /*<![CDATA[*/ {CSS} /*]]>*/ </style> {ASCIIMATHML_SCRIPT}</head> <body dir="{TEXT_DIRECTION}"> {CONTENT} </body> </html>'; $css_file = api_get_path(TO_SYS, WEB_CSS_PATH) . api_get_setting('stylesheets') . '/default.css'; if (file_exists($css_file)) { $css = @file_get_contents($css_file); } else { $css = ''; } // Fixing some bugs in css files. $root_rel = api_get_path(REL_PATH); $css_path = 'main/css/'; $theme = api_get_setting('stylesheets') . '/'; $css = str_replace('behavior:url("/main/css/csshover3.htc");', '', $css); $css = str_replace('main/', $root_rel . 'main/', $css); $css = str_replace('images/', $root_rel . $css_path . $theme . 'images/', $css); $css = str_replace('../../img/', $root_rel . 'main/img/', $css); $asciimathmal_script = api_contains_asciimathml($wikiContents) || api_contains_asciisvg($wikiContents) ? '<script src="' . api_get_path(TO_REL, SCRIPT_ASCIIMATHML) . '" type="text/javascript"></script>' . "\n" : ''; $template = str_replace(array('{LANGUAGE}', '{ENCODING}', '{TEXT_DIRECTION}', '{TITLE}', '{CSS}', '{ASCIIMATHML_SCRIPT}'), array(api_get_language_isocode(), api_get_system_encoding(), api_get_text_direction(), $wikiTitle, $css, $asciimathmal_script), $template); if (0 != $groupId) { $groupPart = '_group' . $groupId; // and add groupId to put the same document title in different groups $group_properties = GroupManager::get_group_properties($groupId); $groupPath = $group_properties['directory']; } else { $groupPart = ''; $groupPath = ''; } $exportDir = api_get_path(SYS_COURSE_PATH) . api_get_course_path() . '/document' . $groupPath; $exportFile = api_replace_dangerous_char($wikiTitle) . $groupPart; $wikiContents = trim(preg_replace("/\\[[\\[]?([^\\]|]*)[|]?([^|\\]]*)\\][\\]]?/", "\$1", $wikiContents)); //TODO: put link instead of title $wikiContents = str_replace('{CONTENT}', $wikiContents, $template); // replace relative path by absolute path for courses, so you can see items into this page wiki (images, mp3, etc..) exported in documents if (api_strpos($wikiContents, '../../courses/') !== false) { $web_course_path = api_get_path(WEB_COURSE_PATH); $wikiContents = str_replace('../../courses/', $web_course_path, $wikiContents); } $i = 1; //only export last version, but in new export new version in document area while (file_exists($exportDir . '/' . $exportFile . '_' . $i . '.html')) { $i++; } $wikiFileName = $exportFile . '_' . $i . '.html'; $exportPath = $exportDir . '/' . $wikiFileName; file_put_contents($exportPath, $wikiContents); $doc_id = add_document($_course, $groupPath . '/' . $wikiFileName, 'file', filesize($exportPath), $wikiTitle); api_item_property_update($_course, TOOL_DOCUMENT, $doc_id, 'DocumentAdded', api_get_user_id(), $groupId); return $doc_id; }
/** * Recursively travese the directories to get a list * of accessable directories. * @param string $base the full path to the current directory * @param string $path the relative path name * @return array of accessiable sub-directories * <code>array('path name' => 'full directory path', ...)</code> */ function _dirs($base, $path) { $base = Files::fixPath($base); $dirs = array(); if (!$this->isValidBase()) { return $dirs; } $d = @dir($base); $in_group = api_is_in_group(); if ($in_group) { $group_properties = GroupManager::get_group_properties($_SESSION['_gid']); $group_directory = explode('/', $group_properties['directory']); $group_directory = $group_directory[count($group_directory) - 1]; } $user_id = api_get_user_id(); while (false !== ($entry = $d->read())) { //If it is a directory, and it doesn't start with // a dot, and if is it not the thumbnail directory if (is_dir($base . $entry) && substr($entry, 0, 1) != '.' && strpos($entry, '_DELETED_') === false && strpos($entry, 'chat_files') === false && strpos($entry, 'css') === false && strpos($entry, 'HotPotatoes_files') === false && ($in_group || !$in_group && strpos($entry, '_groupdocs') === false) && !$this->isThumbDir($entry)) { $relative = Files::fixPath($path . $entry); $fullpath = Files::fixPath($base . $entry); if ($in_group && strpos($fullpath, '_groupdocs') !== false && strpos($fullpath, $group_directory) === false) { continue; } global $_course; if (!empty($_course)) { $base_dir = substr($fullpath, 0, strpos($fullpath, '/document/') + 9); // $new_dir = substr($fullpath, strlen($base_dir), -1); // $doc_id = DocumentManager::get_document_id($_course, $new_dir); $visible_status = api_get_item_visibility($_course, TOOL_DOCUMENT, $doc_id); } //Teachers can access to hidden files and directories as they can in the tool documents /* if ($visible_status=='0' || $visible_status=='-1') { continue; } */ /* if (strpos($fullpath, '/shared_folder/') !== false) { if (!preg_match('/.*\/shared_folder\/$/', $fullpath)) { //all students can see the shared_folder if (strpos($fullpath, '/shared_folder/sf_user_'.$user_id.'/') !== false) { continue; } } } */ $dirs[$relative] = $fullpath; $dirs = array_merge($dirs, $this->_dirs($fullpath, $relative)); } } $d->close(); return $dirs; }
/** * This function displays a dropdown list that allows the course administrator do view the calendar items of one specific group * @author: Patrick Cool <*****@*****.**>, Ghent University */ function show_user_group_filter_form() { echo "<select name=\"select\" onchange=\"javascript: MM_jumpMenu('parent',this,0)\">"; echo "<option value=\"agenda.php?user=none&action=view\">" . get_lang("ShowAll") . "</option>"; // Groups $group_list = get_course_groups(); $group_available_to_access = array(); $option = ''; if (!empty($group_list)) { $option = "<optgroup label=\"" . get_lang("Groups") . "\">"; foreach ($group_list as $this_group) { // echo "<option value=\"agenda.php?isStudentView=true&group=".$this_group['id']."\">".$this_group['name']."</option>"; $has_access = GroupManager::user_has_access(api_get_user_id(), $this_group['id'], GroupManager::GROUP_TOOL_CALENDAR); $result = GroupManager::get_group_properties($this_group['id']); if ($result['calendar_state'] != '0') { $group_available_to_access[] = $this_group['id']; } // lastedit if ($has_access || $result['calendar_state'] == '1') { $option .= "<option value=\"agenda.php?action=view&group=" . $this_group['id'] . "\" "; $option .= $this_group['id'] == $_SESSION['group'] ? " selected" : ""; $option .= ">" . $this_group['name'] . "</option>"; } } $option .= "</optgroup>"; } echo $option; // Users $user_list = get_course_users(); if (!empty($user_list)) { echo "<optgroup label=\"" . get_lang("Users") . "\">"; foreach ($user_list as $this_user) { echo "<option value=\"agenda.php?action=view&user="******"\" "; echo isset($_SESSION['user']) && $this_user['uid'] == $_SESSION['user'] ? " selected" : ""; echo ">" . api_get_person_name($this_user['firstName'], $this_user['lastName']) . "</option>"; } echo "</optgroup>"; } echo "</select>"; }
static function transform_user_group_array($user_list, $group_list, $get_names = false, $remove_users_from_group = false) { $complete_list = array(); if (!empty($user_list)) { foreach ($user_list as $user_item) { if ($get_names) { $user_item = api_get_user_info($user_item); } $complete_list["USER:"******"GROUP:" . $group_info['id']] = $group_info['name'] . " [" . $group_info['count_users'] . " " . get_lang('Users') . "]"; if ($remove_users_from_group) { $users = GroupManager::get_users($group_info['id']); foreach ($users as $user_id) { if (isset($complete_list["USER:"******"USER:" . $user_id]); } } } } } return $complete_list; }