/** * Print statistic on one item * **/ function statitem() { require_once _lms_ . '/class.module/track.object.php'; require_once _base_ . '/lib/lib.form.php'; require_once _base_ . '/lib/lib.table.php'; require_once _lms_ . '/lib/lib.subscribe.php'; $cs = new CourseSubscribe_Manager(); $lang =& DoceboLanguage::createInstance('stats', 'lms'); $out =& $GLOBALS['page']; $form = new Form(); $aclManager =& Docebo::user()->getACLManager(); $acl =& Docebo::user()->getACL(); $idItem = (int) $_GET['idItem']; $group_filter = Get::req('group_filter', DOTY_INT, -1); $status_filter = Get::req('status_filter', DOTY_INT, -1); $user_filter = Get::req('user_filter', DOTY_MIXED, ''); $tabStat = new Table(Get::sett('visuItem'), $lang->def('_STATSITEM') . $titleLO, $lang->def('_STATSITEM') . $titleLO); $tabStat->initNavBar('ini', 'button'); $limit = $tabStat->getSelectedElement(); list($titleLO, $objectType) = sql_fetch_row(sql_query("SELECT title, objectType FROM " . $GLOBALS['prefix_lms'] . "_organization" . " WHERE idOrg='" . $idItem . "'")); $lev = false; $group_all_members = false; if ($group_filter != '-1') { $group_all_members = $aclManager->getGroupAllUser($group_filter); } $students = getSubscribedInfo((int) $_SESSION['idCourse'], false, $lev, true, $status_filter != -1 ? $status_filter : false, $editions_filter != -1 ? $editions_filter : false, true, $user_filter, $group_all_members, $limit); $query = "SELECT COUNT(*)" . " FROM %lms_courseuser AS cu" . ($user_filter !== '' ? " JOIN " . $GLOBALS['prefix_fw'] . "_user AS u ON u.idst = cu.idUser" : '') . " WHERE cu.idCourse = " . (int) $_SESSION['idCourse'] . ($status_filter != -1 ? " AND cu.status = '" . $status_filter . "'" : '') . ($user_filter !== '' ? " AND (u.firstname LIKE '%" . $user_filter . "%' OR u.lastname LIKE '%" . $user_filter . "%' OR u.userid LIKE '%" . $user_filter . "%')" : '') . ($group_all_members !== false ? " AND c.idUser IN (" . implode(',', $group_all_members) . ")" : ''); list($total_user) = sql_fetch_row(sql_query($query)); // get idst of the access in item $query = "SELECT value FROM " . $GLOBALS['prefix_lms'] . "_organization_access" . " WHERE idOrgAccess = '" . $idItem . "'"; if (($rs = sql_query($query)) === FALSE) { UiFeedback::error("Error on query to load item access"); return; } $arr_access = array(); while (list($value) = sql_fetch_row($rs)) { $arr_access[] = $value; } $out->setWorkingZone('content'); $out->add(getTitleArea($lang->def('_STATSITEM') . $titleLO, 'stats')); $out->add('<div class="std_block">' . getBackUi('index.php?modname=stats&op=statcourse', $lang->def('_BACK'))); $out->add($form->openForm('orgshow', 'index.php?modname=stats&op=statitem&idItem=' . $idItem)); if (isset($_POST['view_open_quest'])) { $query_resource = "SELECT idResource" . " FROM " . $GLOBALS['prefix_lms'] . "_organization" . " WHERE idOrg = '" . $idItem . "'"; list($id_poll) = sql_fetch_row(sql_query($query_resource)); $query_quest = "SELECT id_quest, title_quest" . " FROM " . $GLOBALS['prefix_lms'] . "_pollquest" . " WHERE id_poll = '" . $id_poll . "'" . " AND type_quest = 'extended_text'"; $result_quest = sql_query($query_quest); $type_h = array(''); $cont_h = array($lang->def('_ANSWER')); while (list($id_quest, $title_quest) = sql_fetch_row($result_quest)) { $tb = new Table(400, $title_quest); $tb->setColsStyle($type_h); $tb->addHead($cont_h); $query_answer = "SELECT more_info" . " FROM " . $GLOBALS['prefix_lms'] . "_polltrack_answer" . " WHERE id_quest = '" . $id_quest . "'"; $result_answer = sql_query($query_answer); while (list($answer) = sql_fetch_row($result_answer)) { $cont = array(); $cont[] = $answer; $tb->addBody($cont); } $out->add($tb->getTable() . '<br/>'); } $out->add($form->openButtonSpace() . $form->getButton('back', 'back', $lang->def('_BACK')) . $form->closeButtonSpace()); } else { $arr_idst = $aclManager->getBasePathGroupST('/lms/course/' . (int) $_SESSION['idCourse'] . '/group'); $arr_result_groups = $aclManager->getGroups($arr_idst); $std_content = $aclManager->getContext(); $aclManager->setContext('/lms/course/' . (int) $_SESSION['idCourse'] . '/group'); $arr_groups = array(-1 => $lang->def('_ALL')); foreach ($arr_result_groups as $idst_group => $info_group) { if (!$info_group[ACL_INFO_GROUPHIDDEN]) { $arr_groups[$idst_group] = $aclManager->relativeId($info_group[ACL_INFO_GROUPID]); } } $aclManager->setContext($std_content); $out->add(Form::getTextField(Lang::t('_FULLNAME', 'standard'), 'user_filter', 'user_filter', 255, $user_filter)); $out->add($form->getDropdown($lang->def('_GROUPS'), 'group_filter', 'group_filter', $arr_groups, $group_filter)); // ------ Filter on status $arr_status = array(-1 => $lang->def('_FILTERSTATUSSELECTONEOPTION'), _CUS_SUBSCRIBED => $lang->def('_USER_STATUS_SUBS'), _CUS_BEGIN => $lang->def('_USER_STATUS_BEGIN'), _CUS_END => $lang->def('_END'), _CUS_SUSPEND => $lang->def('_SUSPENDED')); $out->add($form->getDropdown($lang->def('_STATUS'), 'status_filter', 'status_filter', $arr_status, $status_filter)); $out->add($form->getButton('gofilter', 'gofilter', $lang->def('_SEARCH'))); //----------------------------------------- $content_h = array($lang->def('_USERNAME'), $lang->def('_STATS_FULLNAME'), $lang->def('_STATUS'), $lang->def('_PROGRESS')); $type_h = array('', '', 'image', 'image', ''); $tabStat->setColsStyle($type_h); $tabStat->addHead($content_h); //----------------------------------------- foreach ($students as $idst => $user_course_info) { $user_info = $aclManager->getUser($idst, FALSE); if ($user_info != false) { $arr_allst = $acl->getUserAllST($user_info[ACL_INFO_USERID]); if (count($arr_access) === 0 || count(array_intersect($arr_access, $arr_allst)) > 0) { $status = Track_Object::getStatusFromId($idItem, $idst); // NOTE: How to get stat_status for users? $stat_status = $cs->getUserStatusTr($user_course_info['status']); $tabStat->addBody(array('<a href="index.php?modname=stats&op=statoneuseroneitem&idUser='******'&idItem=' . $idItem . '" >' . $aclManager->relativeId($user_info[ACL_INFO_USERID]) . '</a>', $user_info[ACL_INFO_LASTNAME] . ' ' . $user_info[ACL_INFO_FIRSTNAME], $stat_status, printReport($status, TRUE))); } } } $out->add($tabStat->getTable()); $out->add($tabStat->getNavBar($limit, $total_user)); $query = "SELECT idResource" . " FROM " . $GLOBALS['prefix_lms'] . "_organization" . " WHERE idOrg = '" . $idItem . "'"; list($id_poll) = sql_fetch_row(sql_query($query)); $query = "SELECT id_quest" . " FROM " . $GLOBALS['prefix_lms'] . "_pollquest" . " WHERE id_poll = '" . $id_poll . "'" . " AND type_quest = 'extended_text'"; $result = sql_query($query); if (sql_num_rows($result) && $objectType == 'poll') { $out->add($form->openButtonSpace() . '<br/>' . $form->getButton('view_open_quest', 'view_open_quest', $lang->def('_VIEW_OPEN_QUEST')) . $form->closeButtonSpace()); } } $out->add($form->closeForm()); $out->add('</div>' . "\n"); }
function export() { checkPerm('view'); require_once $GLOBALS['where_lms'] . '/lib/lib.coursereport.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.test.php'; require_once _base_ . '/lib/lib.form.php'; require_once _base_ . '/lib/lib.table.php'; $lang =& DoceboLanguage::createInstance('coursereport', 'lms'); $out =& $GLOBALS['page']; $out->setWorkingZone('content'); $included_test = array(); $mod_perm = checkPerm('mod', true); $csv = ''; $acl_man = Docebo::user()->getAclManager(); $test_man = new GroupTestManagement(); $report_man = new CourseReportManager(); $org_tests =& $report_man->getTest(); $tests_info = $test_man->getTestInfo($org_tests); $id_students =& $report_man->getStudentId(); $students_info =& $acl_man->getUsers($id_students); $lang2 =& DoceboLanguage::createInstance('levels', 'lms'); if (isset($_POST['type_filter'])) { $type_filter = $_POST['type_filter']; } else { $type_filter = false; } if ($type_filter == "false") { $type_filter = false; } $lev = $type_filter; $students = getSubscribedInfo((int) $_SESSION['idCourse'], FALSE, $lev, TRUE, false, false, true); $i = 0; $students_info = array(); foreach ($students as $idst => $user_course_info) { $students_info[$idst] =& $acl_man->getUser($idst, FALSE); } $query_tot_report = "\r\n\tSELECT COUNT(*)\r\n\tFROM " . $GLOBALS['prefix_lms'] . "_coursereport\r\n\tWHERE id_course = '" . $_SESSION['idCourse'] . "'"; list($tot_report) = sql_fetch_row(sql_query($query_tot_report)); $query_tests = "\r\n\tSELECT id_report, id_source\r\n\tFROM " . $GLOBALS['prefix_lms'] . "_coursereport\r\n\tWHERE id_course = '" . $_SESSION['idCourse'] . "' AND source_of = 'test'"; $re_tests = sql_query($query_tests); while (list($id_r, $id_t) = sql_fetch_row($re_tests)) { $included_test[$id_t] = $id_t; $included_test_report_id[$id_r] = $id_r; } if ($tot_report == 0) { $report_man->initializeCourseReport($org_tests); } else { if (is_array($included_test)) { $test_to_add = array_diff($org_tests, $included_test); } else { $test_to_add = $org_tests; } if (is_array($included_test)) { $test_to_del = array_diff($included_test, $org_tests); } else { $test_to_del = $org_tests; } if (!empty($test_to_add) || !empty($test_to_del)) { $report_man->addTestToReport($test_to_add, 1); $report_man->delTestToReport($test_to_del); $included_test = $org_tests; } } $report_man->updateTestReport($org_tests); $img_mod = '<img src="' . getPathImage() . 'standard/edit.png" alt="' . $lang->def('_MOD') . '" />'; $cont_h[] = $lang->def('_DETAILS'); $csv .= '"' . $lang->def('_DETAILS') . '"'; $a_line_1 = array(''); $a_line_2 = array(''); $colums['max_score'] = array($lang->def('_MAX_SCORE')); $colums['required_score'] = array($lang->def('_REQUIRED_SCORE')); $colums['weight'] = array($lang->def('_WEIGHT')); $colums['show_to_user'] = array($lang->def('_SHOW_TO_USER')); $colums['use_for_final'] = array($lang->def('_USE_FOR_FINAL')); $query_report = "\r\n\tSELECT id_report, title, max_score, required_score, weight, show_to_user, use_for_final, source_of, id_source\r\n\tFROM " . $GLOBALS['prefix_lms'] . "_coursereport\r\n\tWHERE id_course = '" . $_SESSION['idCourse'] . "'\r\n\tORDER BY sequence "; $re_report = sql_query($query_report); $total_weight = 0; $i = 1; while ($info_report = sql_fetch_assoc($re_report)) { $id = $info_report['id_source']; $reports[$info_report['id_report']] = $info_report; $reports_id[] = $info_report['id_report']; // XXX: set action colums switch ($info_report['source_of']) { case "test": $title = strip_tags($tests_info[$info_report['id_source']]['title']); break; case "scoitem": $title = strip_tags($info_report['title']); break; case "activity": $title = strip_tags($info_report['title']); break; case "final_vote": $title = strip_tags($lang->def('_FINAL_SCORE')); break; } $top = $title; $cont_h[] = $top; $csv .= ';"' . $top . '"'; $i++; //set info colums $colums['max_score'][] = $info_report['max_score']; $colums['required_score'][] = $info_report['required_score']; $colums['weight'][] = $info_report['weight']; $colums['show_to_user'][] = $info_report['show_to_user'] == 'true' ? $lang->def('_YES') : $lang->def('_NO'); $colums['use_for_final'][] = $info_report['use_for_final'] == 'true' ? $lang->def('_YES') : $lang->def('_NO'); if ($info_report['use_for_final'] == 'true') { $total_weight += $info_report['weight']; } } $csv .= "\n"; $first = true; foreach ($colums['max_score'] as $content) { if ($first) { $first = false; $csv .= '"' . $content . '"'; } else { $csv .= ';"' . $content . '"'; } } $csv .= "\n"; $first = true; foreach ($colums['required_score'] as $content) { if ($first) { $first = false; $csv .= '"' . $content . '"'; } else { $csv .= ';"' . $content . '"'; } } $csv .= "\n"; $first = true; foreach ($colums['weight'] as $content) { if ($first) { $first = false; $csv .= '"' . $content . '"'; } else { $csv .= ';"' . $content . '"'; } } $csv .= "\n"; $first = true; foreach ($colums['show_to_user'] as $content) { if ($first) { $first = false; $csv .= '"' . $content . '"'; } else { $csv .= ';"' . $content . '"'; } } $csv .= "\n"; $first = true; foreach ($colums['use_for_final'] as $content) { if ($first) { $first = false; $csv .= '"' . $content . '"'; } else { $csv .= ';"' . $content . '"'; } } $csv .= "\n\n\n"; $first = true; foreach ($cont_h as $content) { if ($first) { $first = false; $csv .= '"' . $content . '"'; } else { $csv .= ';"' . $content . '"'; } } $csv .= "\n"; $tests_score =& $test_man->getTestsScores($included_test, $id_students); $test_details = array(); if (is_array($included_test)) { while (list($id_test, $users_result) = each($tests_score)) { while (list($id_user, $single_test) = each($users_result)) { if ($single_test['score_status'] == 'valid') { if (!isset($test_details[$id_test]['max_score'])) { $test_details[$id_test]['max_score'] = $single_test['score']; } elseif ($single_test['score'] > $test_details[$id_test]['max_score']) { $test_details[$id_test]['max_score'] = $single_test['score']; } if (!isset($test_details[$id_test]['min_score'])) { $test_details[$id_test]['min_score'] = $single_test['score']; } elseif ($single_test['score'] < $test_details[$id_test]['min_score']) { $test_details[$id_test]['min_score'] = $single_test['score']; } if (!isset($test_details[$id_test]['num_result'])) { $test_details[$id_test]['num_result'] = 1; } else { $test_details[$id_test]['num_result']++; } if (!isset($test_details[$id_test]['averange'])) { $test_details[$id_test]['averange'] = $single_test['score']; } else { $test_details[$id_test]['averange'] += $single_test['score']; } } } } while (list($id_test, $single_detail) = each($test_details)) { if (isset($single_detail['num_result'])) { $test_details[$id_test]['averange'] /= $test_details[$id_test]['num_result']; } } reset($test_details); } $reports_score =& $report_man->getReportsScores(isset($included_test_report_id) && is_array($included_test_report_id) ? array_diff($reports_id, $included_test_report_id) : $reports_id); $report_details = array(); while (list($id_report, $users_result) = each($reports_score)) { while (list($id_user, $single_report) = each($users_result)) { if ($single_report['score_status'] == 'valid') { if (!isset($report_details[$id_report]['max_score'])) { $report_details[$id_report]['max_score'] = $single_report['score']; } elseif ($single_report['score'] > $report_details[$id_report]['max_score']) { $report_details[$id_report]['max_score'] = $single_report['score']; } if (!isset($report_details[$id_report]['min_score'])) { $report_details[$id_report]['min_score'] = $single_report['score']; } elseif ($single_report['score'] < $report_details[$id_report]['min_score']) { $report_details[$id_report]['min_score'] = $single_report['score']; } if (!isset($report_details[$id_report]['num_result'])) { $report_details[$id_report]['num_result'] = 1; } else { $report_details[$id_report]['num_result']++; } if (!isset($report_details[$id_report]['averange'])) { $report_details[$id_report]['averange'] = $single_report['score']; } else { $report_details[$id_report]['averange'] += $single_report['score']; } } } } while (list($id_report, $single_detail) = each($report_details)) { if (isset($single_detail['num_result'])) { $report_details[$id_report]['averange'] /= $report_details[$id_report]['num_result']; } } reset($report_details); if (!empty($students_info)) { while (list($idst_user, $user_info) = each($students_info)) { $user_name = $user_info[ACL_INFO_LASTNAME] . $user_info[ACL_INFO_FIRSTNAME] ? $user_info[ACL_INFO_LASTNAME] . ' ' . $user_info[ACL_INFO_FIRSTNAME] : $acl_man->relativeId($user_info[ACL_INFO_USERID]); $csv .= '"' . $user_name . '"'; foreach ($reports as $id_report => $info_report) { switch ($info_report['source_of']) { case "test": $id_test = $info_report['id_source']; if (isset($tests_score[$id_test][$idst_user])) { switch ($tests_score[$id_test][$idst_user]['score_status']) { case "not_complete": $csv .= ';"-"'; break; case "not_checked": $csv .= ';"' . $lang->def('_NOT_CHECKED') . '"'; if (!isset($test_details[$id_test]['not_checked'])) { $test_details[$id_test]['not_checked'] = 1; } else { $test_details[$id_test]['not_checked']++; } break; case "passed": $csv .= ';"' . $lang->def('_PASSED') . '"'; if (!isset($test_details[$id_test]['passed'])) { $test_details[$id_test]['passed'] = 1; } else { $test_details[$id_test]['passed']++; } break; case "not_passed": $csv .= ';"' . $lang->def('_NOT_PASSED') . '"'; if (!isset($test_details[$id_test]['not_passed'])) { $test_details[$id_test]['not_passed'] = 1; } else { $test_details[$id_test]['not_passed']++; } break; case "valid": $score = $tests_score[$id_test][$idst_user]['score']; if ($score >= $info_report['required_score']) { if ($score == $test_details[$id_test]['max_score']) { $csv .= ';"' . $score . " " . $tt . '"'; } else { $csv .= ';"' . " " . $tt . '"'; } if (!isset($test_details[$id_test]['passed'])) { $test_details[$id_test]['passed'] = 1; } else { $test_details[$id_test]['passed']++; } } else { if ($score == $test_details[$id_test]['max_score']) { $csv .= ';"' . $score . " " . $tt . '"'; } else { $csv .= ';"' . $score . " " . $tt . '"'; } if (!isset($test_details[$id_test]['not_passed'])) { $test_details[$id_test]['not_passed'] = 1; } else { $test_details[$id_test]['not_passed']++; } } if (isset($test_details[$id_test]['varianza']) && isset($test_details[$id_test]['averange'])) { $test_details[$id_test]['varianza'] += pow($tests_score[$id_test][$idst_user]['score'] - $test_details[$id_test]['averange'], 2); } else { $test_details[$id_test]['varianza'] = pow($tests_score[$id_test][$idst_user]['score'] - $test_details[$id_test]['averange'], 2); } break; default: $csv .= ';"-"'; } } else { $csv .= ';"-"'; } break; case "scoitem": $query_report = "\r\n\t\t\t\t\t\tSELECT *\r\n\t\t\t\t\t\tFROM " . $GLOBALS['prefix_lms'] . "_scorm_tracking\r\n\t\t\t\t\t\tWHERE idscorm_item = '" . $info_report['id_source'] . "' AND idUser = '******'\r\n\t\t\t\t\t\t"; $report = sql_fetch_assoc(sql_query($query_report)); if ($report['score_raw'] == NULL) { $report['score_raw'] = "-"; } $id_track = isset($report['idscorm_tracking']) ? $report['idscorm_tracking'] : 0; $query_report = "\r\n\t\t\t\t\t\tSELECT *\r\n\t\t\t\t\t\tFROM " . $GLOBALS['prefix_lms'] . "_scorm_tracking_history\r\n\t\t\t\t\t\tWHERE idscorm_tracking = '" . $id_track . "'\r\n\t\t\t\t\t\t"; $query = sql_query($query_report); $num = sql_num_rows($query); $csv .= ';"' . $report['score_raw'] . '"'; break; case "activity": case "final_vote": $id_report = $info_report['id_report']; if (isset($reports_score[$id_report][$idst_user])) { switch ($reports_score[$id_report][$idst_user]['score_status']) { case "not_complete": $csv .= ';"-"'; break; case "valid": if ($reports_score[$id_report][$idst_user]['score'] >= $info_report['required_score']) { if ($reports_score[$id_report][$idst_user]['score'] == $info_report['max_score']) { $csv .= ';"' . $reports_score[$id_report][$idst_user]['score'] . '"'; } else { $csv .= ';"' . $reports_score[$id_report][$idst_user]['score'] . '"'; } // Count passed if (!isset($report_details[$id_report]['passed'])) { $report_details[$id_report]['passed'] = 1; } else { $report_details[$id_report]['passed']++; } } else { $csv .= ';"' . $reports_score[$id_report][$idst_user]['score'] . '"'; // Count not passed if (!isset($report_details[$id_report]['not_passed'])) { $report_details[$id_report]['not_passed'] = 1; } else { $report_details[$id_report]['not_passed']++; } } if (isset($report_details[$id_report]['varianza']) && isset($report_details[$id_report]['averange'])) { $report_details[$id_report]['varianza'] += round(pow($reports_score[$id_report][$idst_user]['score'] - $report_details[$id_report]['averange'], 2), 2); } else { $report_details[$id_report]['varianza'] = round(pow($reports_score[$id_report][$idst_user]['score'] - $report_details[$id_report]['averange'], 2), 2); } break; } } else { $csv .= ';"-"'; } break; } } $csv .= "\n"; } } $file_name = date('YmdHis') . '_report_export.csv'; require_once _base_ . '/lib/lib.download.php'; sendStrAsFile($csv, $file_name); }
function subscribemod() { checkPerm('subscribe', false, 'course'); require_once $GLOBALS['where_lms'] . '/lib/lib.course.php'; require_once _base_ . '/lib/lib.form.php'; require_once $GLOBALS['where_framework'] . '/lib/lib.field.php'; require_once _base_ . '/lib/lib.table.php'; $id_course = importVar('id_course', true, 0); $course_info = Man_Course::getCourseInfo($id_course); $edition_id = getCourseEditionId(); $fman = new FieldList(); //addScriptaculousJs(); YuiLib::load(array('json' => 'json-min.js')); $GLOBALS['page']->add('<script type="text/javascript">' . ' function reloadInfo() { var $ = YAHOO.util.Dom.get; var selection = $("extra_info").value; var id_course = $("id_course").value; var data = "op=get_info&id_course="+id_course+"&id_field=" + selection; var objAjax = YAHOO.util.Connect.asyncRequest("POST", "' . $GLOBALS['where_lms_relative'] . '/ajax.adm_server.php?mn=subscribe", {onSuccess: callback_change}, data ); $("extra_info").disabled = true; } ' . ' function callback_change(o) { var result = YAHOO.lang.JSON.parse(o.responseText); var table = $("subscribed_list"); for(var i= 0;i < table.rows.length;i++) { var ind = table.rows[i].id.indexOf("user_"); if(ind >= 0) { var id_user = table.rows[i].id.substr(5); table.rows[i].cells[1].innerHTML = result[id_user]; } } $("extra_info").disabled = false; }' . '</script>', 'page_head'); $out =& $GLOBALS['page']; $lang =& DoceboLanguage::CreateInstance('subscribe', 'lms'); $acl_man =& Docebo::user()->getAclManager(); $levels = CourseLevel::getLevels(); $arr_absent = array(0 => $lang->def('_NO'), 1 => $lang->def('_JUSTIFIED'), 2 => $lang->def('_NOT_JUSTIFIED')); $arr_status = array(_CUS_CONFIRMED => $lang->def('_USER_STATUS_CONFIRMED'), _CUS_SUBSCRIBED => $lang->def('_USER_STATUS_SUBS'), _CUS_BEGIN => $lang->def('_USER_STATUS_BEGIN'), _CUS_END => $lang->def('_USER_STATUS_END'), _CUS_SUSPEND => $lang->def('_USER_STATUS_SUSPEND'), _CUS_CANCELLED => $lang->def('_USER_STATUS_CANCELLED')); $field = $fman->getFlatAllFields(); $field = array('name' => $lang->def('_FULLNAME'), 'email' => $lang->def('_EMAIL')) + $field; // Retrive info about the selected user $user_alredy_subscribed = getSubscribed($id_course, false, false, true, $edition_id); $user_levels = getSubscribedInfo($id_course, false, false, false, false, $edition_id); require_once $GLOBALS['where_framework'] . '/lib/lib.adminmanager.php'; $adminManager = new AdminManager(); $acl_manager = new DoceboACLManager(); $idst_associated = $adminManager->getAdminTree(getLogUserId()); $array_user_associated =& $acl_manager->getAllUsersFromIdst($idst_associated); $user_level = Docebo::user()->getUserLevelId(); if ($user_level != ADMIN_GROUP_GODADMIN) { $user_alredy_subscribed = array_intersect($user_alredy_subscribed, $array_user_associated); } $user_selected_info =& $acl_man->getUsers($user_alredy_subscribed); $page_title = array('index.php?modname=course&op=course_list' => $lang->def('_COURSES'), $course_info['name'], $lang->def('_SUBSCRIBE')); $GLOBALS['page']->add(getTitleArea($page_title, 'subscribe') . '<div class="std_block">' . Form::openForm('levelselection', 'index.php?modname=subscribe&op=subscribeupdate') . Form::getHidden('id_course', 'id_course', $id_course) . Form::getHidden('edition_id', 'edition_id', $edition_id), 'content'); $tb = new Table(0, $lang->def('_CAPTION_SELECT_LEVELS'), $lang->def('_SUMMARY_SELECT_LEVEL')); $tb->setTableId('subscribed_list'); $type_h = array('', ''); $content_h = array($lang->def('_USERNAME'), Form::getInputDropdown('dropdown_nowh', 'extra_info', 'extra_info', $field, 0, ' onchange="reloadInfo();"')); foreach ($levels as $lv => $lv_name) { $type_h[] = 'image'; $content_h[] = '<a href="javascript:SelAll(\'' . $lv . '\');">' . $lv_name . '</a>'; } $type_h[] = 'image'; $content_h[] = $lang->def('_STATUS'); if ($course_info['course_type'] != 'elearning') { $type_h[] = 'image'; $content_h[] = $lang->def('_ABSENT'); } $tb->addHead($content_h, $type_h); $num_user_sel = 0; if (is_array($user_selected_info)) { reset($user_selected_info); $jsArr = "var elementi = new Array("; $i = 0; while (list($id_user, $user_info) = each($user_selected_info)) { if ($i != 0) { $jsArr .= ","; } $i++; $jsArr .= "'" . $id_user . "'"; // if the user isn't alredy subscribed to the course $content = array(substr($user_info[ACL_INFO_USERID], 1), $user_info[ACL_INFO_LASTNAME] . ' ' . $user_info[ACL_INFO_FIRSTNAME]); foreach ($levels as $lv => $lv_name) { $content[] = Form::getInputRadio('user_level_sel_' . $id_user . '_' . $lv, 'user_level_sel[' . $id_user . ']', $lv, $lv == $user_levels[$id_user]['level'], '') . '<label class="access-only" for="user_level_sel_' . $id_user . '_' . $lv . '">' . $lv_name . '</label>'; } $content[] = Form::getInputDropdown('dropdown', 'user_status_sel_' . $id_user . '', 'user_status_sel[' . $id_user . ']', $arr_status, $user_levels[$id_user]['status'], '') . '<label class="access-only" for="user_status_sel_' . $id_user . '">' . $lang->def('_STATUS') . '</label>'; if ($course_info['course_type'] != 'elearning') { $content[] = Form::getInputDropdown('dropdown_nowh', 'user_absent' . $id_user . '', 'user_absent[' . $id_user . ']', $arr_absent, $user_levels[$id_user]['absent'], '') . '<label class="access-only" for="user_absent_' . $id_user . '">' . $lang->def('_ABSENT') . '</label>'; } $tb->addBody($content, false, false, 'user_' . $id_user); } $GLOBALS['page']->add($tb->getTable(), 'content'); } $GLOBALS['page']->add(Form::openButtonSpace() . '<br />' . Form::getButton('subscribe', 'subscribe', $lang->def('_MOD')) . Form::getButton('cancelselector', 'cancelselector', $lang->def('_UNDO')) . Form::closeButtonSpace() . Form::closeForm(), 'content'); $GLOBALS['page']->add('</div>', 'content'); $GLOBALS['page']->add(' <script> ' . $jsArr . '); function SelAll (lvl) { var nb; ne = elementi.length; mod = document.getElementById(\'levelselection\'); for (var i=0;i<ne;i++) { elem = \'user_level_sel_\'+elementi[i]+\'_\'+lvl; var e = document.getElementById(elem); e.checked = 1; } } </script>'); }