function mycertificate(&$url) { checkPerm('view'); require_once _lms_ . '/lib/lib.course.php'; require_once _base_ . '/lib/lib.table.php'; $lang =& DoceboLanguage::createInstance('profile', 'framework'); $lang =& DoceboLanguage::createInstance('course', 'lms'); $lang =& DoceboLanguage::createInstance('certificate', 'lms'); $admin_level = Docebo::user()->getUserLevelId(); $show_preview = true; //($admin_level == ADMIN_GROUP_ADMIN || $admin_level == ADMIN_GROUP_GODADMIN); $title = $lang->def('_MY_CERTIFICATE', 'certificate'); $html = getTitleArea($title, 'mycertificate') . '<div class="std_block">'; //--- draw time periods dropdown --------------------------------------------- $period_start = ''; $period_end = ''; //extract checking period $p_model = new TimeperiodsAlms(); $year = date("Y"); $p_list = array("0" => $lang->def('_ALL')); $p_selected = Get::req('selected_period', DOTY_INT, 0); $p_data = $p_model->getTimePeriods('', true); if (count($p_data) > 0) { foreach ($p_data as $obj) { $p_list[$obj->id_period] = Format::date($obj->start_date, 'date') . ' - ' . Format::date($obj->end_date, 'date'); if ($p_selected == $obj->id_period) { $period_start = $obj->start_date; $period_end = $obj->end_date; } } } if (!array_key_exists($p_selected, $p_list)) { $p_selected = 0; $period_start = ''; $period_end = ''; } //date dropdown $onchange = ' onchange="javascript:this.form.submit();"'; $html_filter_cert = '' . Form::openForm('selected_period_form_cert', $url->getUrl()) . Form::openElementSpace() . Form::getDropdown(Lang::t('_TIME_PERIODS', 'menu'), 'selected_period_cert', 'selected_period', $p_list, $p_selected, '', '', $onchange) . Form::closeElementSpace() . Form::getHidden('current_tab_cert', 'current_tab', Get::req('current_tab', DOTY_STRING, 'cert')) . Form::getHidden('is_filtering_cert', 'is_filtering_cert', 1) . Form::closeForm(); $html_filter_meta = '' . Form::openForm('selected_period_form_meta', $url->getUrl()) . Form::openElementSpace() . Form::getDropdown(Lang::t('_TIME_PERIODS', 'menu'), 'selected_period_meta', 'selected_period', $p_list, $p_selected, '', '', $onchange) . Form::closeElementSpace() . Form::getHidden('current_tab_meta', 'current_tab', Get::req('current_tab', DOTY_STRING, 'meta')) . Form::getHidden('is_filtering_meta', 'is_filtering_meta', 1) . Form::closeForm(); //---------------------------------------------------------------------------- $cert = new Certificate(); /* * Print certificates tables, subdivided by year and course type */ $html_cert = ''; $tb_cert = new Table(0); $cont_h = array($lang->def('_YEAR', 'standard'), $lang->def('_COURSE_CODE', 'course'), $lang->def('_COURSE', 'course'), $lang->def('_CERTIFICATE_NAME', 'course'), $lang->def('_DATE_END', 'course')); //if ($show_preview) $cont_h[] = '<img src="'.getPathImage('lms').'certificate/preview.gif" alt="'.$lang->def('_PREVIEW').'" />'; //$cont_h[] = '<img src="'.getPathImage('lms').'certificate/certificate.gif" alt="'.$lang->def('_ALT_TAKE_A_COPY').'" />'; if ($show_preview) { $cont_h[] = '<span class="ico-sprite subs_view"><span>' . $lang->def('_PREVIEW') . '"</span></span>'; } $cont_h[] = '<span class="ico-sprite subs_pdf"><span>' . $lang->def('_ALT_TAKE_A_COPY') . '</span></span>'; $type_h = array('img-cell', '', '', 'align-center', 'align-center', 'img-cell', 'img-cell'); if ($show_preview) { $type_h[] = 'nowarp'; } $type_h[] = 'nowarp'; $tb_cert->setColsStyle($type_h); $tb_cert->addHead($cont_h); $available_cert = $cert->certificateForCourses(false, false); $released = $cert->certificateReleased(Docebo::user()->getIdST()); $query_courses = "" . " SELECT c.idCourse, c.code, c.name, u.status AS user_status, c.course_type, c.permCloseLO " . " FROM %lms_course AS c JOIN %lms_courseuser AS u ON (c.idCourse = u.idCourse) " . " WHERE u.idUser = '******' " . ($period_start != '' ? " AND u.date_complete >= '" . $period_start . "' " : "") . ($period_end != '' ? " AND u.date_complete <= '" . $period_end . "' " : "") . " ORDER BY u.date_complete DESC, u.status DESC "; $course_list = sql_query($query_courses); $arr_courses = array(); $arr_courses_ids = array(); while ($obj = sql_fetch_object($course_list)) { $arr_courses[$obj->course_type][] = array($obj->idCourse, $obj->code, $obj->name, $obj->user_status, $obj->permCloseLO); $arr_courses_ids[] = $obj->idCourse; } $arr_course_types = getCourseTypes(); $table_displayed = false; //extract certificates details and availability by courses ids $arr_courses_ids = array_unique($arr_courses_ids); $arr_certificates_availability = array(); $arr_certificates_details = array(); if (count($arr_courses_ids) > 0) { $query = "SELECT id_certificate, id_course, available_for_status " . " FROM " . $GLOBALS['prefix_lms'] . "_certificate_course" . " WHERE id_course IN (" . implode(",", $arr_courses_ids) . ")"; //." WHERE id_certificate = '".$id_cert."'" //." AND id_course IN (".implode(",", $arr_courses_ids).")"; $res = sql_query($query); while (list($id_certificate, $id_course, $available_for_status) = sql_fetch_row($res)) { $arr_certificates_availability[$id_course][$id_certificate] = $available_for_status; } $cont = array(); $query = "SELECT idCourse, date_inscr, date_first_access, date_complete, status" . " FROM %lms_courseuser WHERE idUser = '******'" . " AND idCourse IN (" . implode(",", $arr_courses_ids) . ") " . ($period_start != '' ? " AND date_complete >= '" . $period_start . "' " : "") . ($period_end != '' ? " AND date_complete <= '" . $period_end . "' " : ""); $res = sql_query($query); while (list($id_course, $date_inscr, $date_begin, $date_end, $status) = sql_fetch_row($res)) { $arr_certificate_details[$id_course] = array($date_inscr, $date_begin, $date_end, $status); } } //order arr_courses by key ksort($arr_courses); $years = array(); foreach ($arr_courses as $course_type => $course_data) { if (in_array($course_type, array_keys($arr_course_types))) { //$html .= ''; $tb = new Table(0); $tb->setColsStyle($type_h); $tb->addHead($cont_h); //filter and organize data to display $display_data = array(); foreach ($course_data as $k => $value) { list($id_course, $code, $name, $user_status, $perm_close_lo) = $value; if (isset($available_cert[$id_course])) { $can_rel_exceptional = false; while (list($id_cert, $certificate) = each($available_cert[$id_course])) { if ($cert->certificateAvailableForUser($id_cert, $id_course, getLogUserId())) { if ($certificate[CERT_AV_POINT_REQUIRED] > 0) { $course_score_final = false; if ($perm_close_lo == 0) { require_once $GLOBALS['where_lms'] . '/lib/lib.orgchart.php'; $org_man = new OrganizationManagement(false); $score_final = $org_man->getFinalObjectScore(array(getLogUserId()), array($id_course)); if (isset($score_final[$id_course][getLogUserId()]) && $score_final[$id_course][getLogUserId()]['max_score']) { $course_score_final = $score_final[$id_course][getLogUserId()]['score']; $course_score_final_max = $score_final[$id_course][getLogUserId()]['max_score']; } } else { require_once $GLOBALS['where_lms'] . '/lib/lib.coursereport.php'; $rep_man = new CourseReportManager(); $score_course = $rep_man->getUserFinalScore(array(getLogUserId()), array($id_course)); if (!empty($score_course)) { $course_score_final = isset($score_course[getLogUserId()][$id_course]) ? $score_course[getLogUserId()][$id_course]['score'] : false; $course_score_final_max = isset($score_course[getLogUserId()][$id_course]) ? $score_course[getLogUserId()][$id_course]['max_score'] : false; } } if ($course_score_final >= $certificate[CERT_AV_POINT_REQUIRED]) { $can_rel_exceptional = true; } } } } reset($available_cert[$id_course]); //count years for rowspans while (list($id_cert, $certificate) = each($available_cert[$id_course])) { //(aggiunto if prima dell'or) if ($cert->certificateAvailableForUser($id_cert, $id_course, getLogUserId())) { //$value[4] = $id_cert; list($available_for_status) = $arr_certificates_availability[$id_course][$id_cert]; list($date_inscr, $date_begin, $date_end, $status) = $arr_certificate_details[$id_course]; if ($available_for_status == 3 && $status == 2 || $available_for_status == 2 && $status == 1 || $available_for_status == 1) { //$year = substr($date_end, 0, 4); switch ($available_for_status) { case 3: $cur_year = substr($date_end, 0, 4); break; case 2: $cur_year = substr($date_begin, 0, 4); break; case 1: $cur_year = substr($date_inscr, 0, 4); break; default: $cur_year = '-'; } // (mi ricreo l'array value perchè manca di date_* BUG FIX) $value = array($id_course, $code, $name, $date_begin, $date_end, $user_status, $perm_close_lo); $value[6] = $id_cert; $query = "SELECT name " . " FROM " . $GLOBALS['prefix_lms'] . "_certificate" . " WHERE id_certificate = " . $id_cert; $res = sql_query($query); list($cname) = sql_fetch_row($res); $value[7] = $cname; if ($can_rel_exceptional && $certificate[CERT_AV_POINT_REQUIRED] > 0) { if (isset($years[$course_type][$cur_year])) { $years[$course_type][$cur_year]++; } else { $years[$course_type][$cur_year] = 1; } $display_data[$cur_year][] = $value; } elseif (!$can_rel_exceptional && $certificate[CERT_AV_POINT_REQUIRED] == 0) { if (isset($years[$course_type][$cur_year])) { $years[$course_type][$cur_year]++; } else { $years[$course_type][$cur_year] = 1; } $display_data[$cur_year][] = $value; } } } } } } if (count($display_data) > 0) { krsort($display_data); } $av_cert = 0; $prev_year = false; $rowspan_counter = 0; require_once $GLOBALS['where_lms'] . '/lib/lib.orgchart.php'; $org_man = new OrganizationManagement(false); foreach ($display_data as $year => $rows) { $first = true; foreach ($rows as $row) { // list($id_course, $code, $name, $user_status, $id_cert) = $row; list($id_course, $code, $name, $date_begin, $date_end, $user_status, $id_cert, $cname) = $row; $cont = array(); if ($first) { $cont[] = array('rowspan' => isset($years[$course_type][$year]) ? $years[$course_type][$year] : 1, 'value' => $year, 'style' => $type_h[0] . ' mycertificate_rowspan' . ($rowspan_counter % 2 > 0 ? '_odd' : '')); $rowspan_counter++; $first = false; } // 2 - the code of the course $cont[] = array('value' => $code, 'style' => $type_h[1]); // 3 - the name of the course $cont[] = array('value' => $name, 'style' => $type_h[2]); // sostituito date_begin con certificate name // 4 - starting date // $cont[] = array( // 'value' => Format::date($date_begin, 'datetime'), // 'style' => $type_h[3] // ); $cont[] = array('value' => $cname, 'style' => $type_h[3]); // 5 - complete date $cont[] = array('value' => Format::date($date_end, 'datetime'), 'style' => $type_h[4]); //-- scores -- $score_start = $org_man->getStartObjectScore(array(Docebo::user()->getIdST()), array($id_course)); $score_final = $org_man->getFinalObjectScore(array(Docebo::user()->getIdST()), array($id_course)); $_value1 = isset($score_start[$id_course][Docebo::user()->getIdST()]) && $score_start[$id_course][Docebo::user()->getIdST()]['max_score'] ? $score_start[$id_course][Docebo::user()->getIdST()]['score'] . ' / ' . $score_start[$id_course][Docebo::user()->getIdST()]['max_score'] : ''; $_value2 = isset($score_final[$id_course][Docebo::user()->getIdST()]) && $score_final[$id_course][Docebo::user()->getIdST()]['max_score'] ? $score_final[$id_course][Docebo::user()->getIdST()]['score'] . ' / ' . $score_final[$id_course][Docebo::user()->getIdST()]['max_score'] : ''; /* hide course scores - remove comment to show // 6 - init score $cont[] = array( 'value' => $_value1, 'style' => $type_h[5] ); // 7 - end score $cont[] = array( 'value' => $_value2, 'style' => $type_h[6] ); */ if (isset($released[$id_course][$id_cert])) { $av_cert++; if ($show_preview) { $cont[] = array('value' => '', 'style' => $type_h[7]); } $_value = '<a class="ico-wt-sprite subs_pdf" href="' . $url->getUrl('op=release_cert&id_certificate=' . $id_cert . '&id_course=' . $id_course) . '" ' . ' title="' . $lang->def('_TAKE_A_COPY') . '"><span>' . $lang->def('_TAKE_A_COPY') . '</span></a>'; $cont[] = array('value' => $_value, 'style' => $type_h[$show_preview ? 8 : 7]); } else { $av_cert++; if ($show_preview) { $_value = '<a class="ico-wt-sprite subs_view" href="' . $url->getUrl('op=preview_cert&id_certificate=' . $id_cert . '&id_course=' . $id_course) . '" ' . ' title="' . $lang->def('_PREVIEW') . '"><span>' . $lang->def('_PREVIEW') . '</span></a>'; $cont[] = array('value' => $_value, 'style' => $type_h[7]); } $_value = '<a class="ico-wt-sprite subs_pdf" href="' . $url->getUrl('op=release_cert&id_certificate=' . $id_cert . '&id_course=' . $id_course) . '" ' . ' title="' . $lang->def('_NEW_CERTIFICATE') . '"><span>' . $lang->def('_NEW_CERTIFICATE') . '</span></a>'; $cont[] = array('value' => $_value, 'style' => $type_h[$show_preview ? 8 : 7]); } $tb->addBody($cont); } } if ($av_cert > 0) { $table_displayed = true; $html_cert .= '<h2 class="mycertificate_title">' . $arr_course_types[$course_type] . '</h2>'; $html_cert .= $tb->getTable(); } } } //end course_type foreach if (!$table_displayed) { $is_filtering = Get::req('is_filtering_cert', DOTY_INT, 0); $html_cert .= '<p>' . ($is_filtering ? $html_filter_cert : '') . $lang->def('_NO_CONTENT') . '</p>'; } else { $html_cert = $html_filter_cert . $html_cert; } //------------------------------------------------------------------------------------------- /* * Print meta-certificates table */ $html_meta = ''; $tb_meta_cert = new Table(0); $cont_h = array(); $cont_h[] = $lang->def('_CODE'); $cont_h[] = $lang->def('_NAME'); $cont_h[] = $lang->def('_COURSE_LIST'); //if ($show_preview) $cont_h[] = '<img src="'.getPathImage('lms').'certificate/preview.gif" alt="'.$lang->def('_PREVIEW').'" />'; //$cont_h[] = '<img src="'.getPathImage('lms').'certificate/certificate.gif" alt="'.$lang->def('_ALT_TAKE_A_COPY').'" />'; if ($show_preview) { $cont_h[] = '<span class="ico-sprite subs_view"><span>' . $lang->def('_PREVIEW') . '"</span></span>'; } $cont_h[] = '<span class="ico-sprite subs_pdf"><span>' . $lang->def('_ALT_TAKE_A_COPY') . '</span></span>'; $type_h = array(); $type_h[] = ''; $type_h[] = ''; $type_h[] = ''; if ($show_preview) { $type_h[] = 'img-cell'; } //'nowrap'; $type_h[] = 'img-cell'; //'nowrap'; $tb_meta_cert->setColsStyle($type_h); $tb_meta_cert->addHead($cont_h); $query = "SELECT c.idMetaCertificate, m.title, m.description, m.idCertificate" . " FROM %lms_certificate_meta_course as c" . " JOIN %lms_certificate_meta as m ON c.idMetaCertificate = m.idMetaCertificate" . " WHERE c.idUser = '******'" . " GROUP BY c.idMetaCertificate" . " ORDER BY m.title, m.description"; $result = sql_query($query); $av_meta_cert = sql_num_rows($result); $cert_meta_html = ''; while (list($id_meta, $name, $description, $id_certificate) = sql_fetch_row($result)) { $cont = array(); $query = "SELECT code, name" . " FROM %lms_certificate" . " WHERE id_certificate = " . " (" . " SELECT idCertificate" . " FROM %lms_certificate_meta" . " WHERE idMetaCertificate = '" . $id_meta . "'" . " )"; list($code, $name) = sql_fetch_row(sql_query($query)); $cont[] = $code; $cont[] = $name; $query_released = "SELECT on_date" . " FROM %lms_certificate_meta_assign" . " WHERE idUser = '******'" . " AND idMetaCertificate = '" . $id_meta . "'"; $result_released = sql_query($query_released); $query = "SELECT user_release" . " FROM %lms_certificate" . " WHERE id_certificate = '" . $id_certificate . "'"; list($user_release) = sql_fetch_row(sql_query($query)); if (sql_num_rows($result_released)) { $course_list = ''; $first = true; $query_course = "SELECT code, name" . " FROM %lms_course" . " WHERE idCourse IN " . "(" . "SELECT idCourse" . " FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idUser = '******'" . " AND idMetaCertificate = '" . $id_meta . "'" . ")"; $result_course = sql_query($query_course); while (list($code, $name) = sql_fetch_row($result_course)) { if ($first) { $first = false; } else { $course_list .= '<br/>'; } $course_list .= '(' . $code . ') - ' . $name; } $cont[] = $course_list; if ($show_preview) { $cont[] = ''; } list($date) = sql_fetch_row($result_released); $cont[] = '<a class="ico-wt-sprite subs_pdf" href="' . $url->getUrl('op=release_cert&id_certificate=' . $id_certificate . '&idmeta=' . $id_meta) . '" ' . ' title="' . $lang->def('_TAKE_A_COPY') . '"><span>' . $lang->def('_TAKE_A_COPY') . '</span></a>'; $tb_meta_cert->addBody($cont); } elseif ($user_release == 0) { $av_meta_cert--; } else { $query = "SELECT idCourse" . " FROM %lms_certificate_meta_course" . " WHERE idUser = '******'" . " AND idMetaCertificate = '" . $id_meta . "'"; $result_int = sql_query($query); $control = true; while (list($id_course) = sql_fetch_row($result_int)) { $query = "SELECT COUNT(*)" . " FROM %lms_courseuser" . " WHERE idCourse = '" . $id_course . "'" . " AND idUser = '******'" . " AND status = '" . _CUS_END . "'"; list($number) = sql_fetch_row(sql_query($query)); if (!$number) { $control = false; } } if ($control) { $course_list = ''; $first = true; $query_course = "SELECT code, name" . " FROM %lms_course" . " WHERE idCourse IN " . "(" . "SELECT idCourse" . " FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idUser = '******'" . " AND idMetaCertificate = '" . $id_meta . "'" . ")"; $result_course = sql_query($query_course); while (list($code, $name) = sql_fetch_row($result_course)) { if ($first) { $first = false; } else { $course_list .= '<br/>'; } $course_list .= '(' . $code . ') - ' . $name; } $cont[] = $course_list; if ($show_preview) { $cont[] = '<a class="ico-wt-sprite subs_view" href="' . $url->getUrl('op=preview_cert&id_certificate=' . $id_certificate . '&idmeta=' . $id_meta) . '" ' . ' title="' . $lang->def('_PREVIEW') . '"><span>' . $lang->def('_PREVIEW') . '</span></a>'; } $cont[] = '<a class="ico-wt-sprite subs_pdf" href="' . $url->getUrl('op=release_cert&id_certificate=' . $id_certificate . '&idmeta=' . $id_meta) . '" ' . ' title="' . $lang->def('_NEW_CERTIFICATE') . '"><span>' . $lang->def('_NEW_CERTIFICATE') . '</span></a>'; $tb_meta_cert->addBody($cont); } else { $av_meta_cert--; } } } if ($av_meta_cert) { $html_meta .= $tb_meta_cert->getTable() . '<br/><br/>'; } else { //$is_filtering = Get::req('is_filtering_meta', DOTY_INT, 0); //$html_meta .= '<p>'.($is_filtering>0 ? $html_filter_meta : '').$lang->def('_NO_CONTENT').'</p>'; $html_meta .= '<p>' . $lang->def('_NO_CONTENT') . '</p>'; } //----------------------------------------------------------------------------- $selected_tab = Get::req('current_tab', DOTY_STRING, 'cert'); $html .= '<div id="mycertificate_tabs" class="yui-navset"> <ul class="yui-nav"> <li' . ($selected_tab == 'cert' ? ' class="selected"' : '') . '><a href="#cert"><em>' . Lang::t('_CERTIFICATE', 'menu') . '</em></a></li> <li' . ($selected_tab == 'meta' ? ' class="selected"' : '') . '><a href="#meta"><em>' . Lang::t('_TITLE_META_CERTIFICATE', 'certificate') . '</em></a></li> </ul> <div class="yui-content"> <div>' . $html_cert . '</div> <div>' . $html_meta . '</div> </div> </div>'; $html .= '</div>'; //close std_block div cout($html, 'content'); YuiLib::load('tabs'); cout('<script type="text/javascript">var myTabs = new YAHOO.widget.TabView("mycertificate_tabs");</script>', 'scripts'); }
/** * Return the output in the selected format for the report with the filters given * @param string $type output type * @param array $report_data a properly formatted list of rule to follow * @param string $other * @return string the properly formated report */ function _get_courses_query($type = 'html', $report_data = NULL, $other = '') { require_once $GLOBALS['where_lms'] . '/lib/lib.course.php'; $output = ''; $jump_url = ''; $org_chart_subdivision = 0; // not implemented $elem_selected = array(); $lang =& DoceboLanguage::createInstance('report', 'framework'); $acl_man = new DoceboACLManager(); $acl_man->include_suspended = TRUE; $course_man = new Man_Course(); // read form _SESSION (XXX: change this) the report setting $filter_userselection = !$report_data && isset($_SESSION['report_tempdata']['rows_filter']['users']) ? $_SESSION['report_tempdata']['rows_filter']['users'] : $report_data['rows_filter']['users']; $filter_columns = !$report_data && $_SESSION['report_tempdata']['columns_filter'] ? $_SESSION['report_tempdata']['columns_filter'] : $report_data['columns_filter']; if (!$report_data && isset($_SESSION['report_tempdata']['rows_filter']['all_users'])) { $alluser = $_SESSION['report_tempdata']['rows_filter']['all_users'] ? 1 : 0; } else { $alluser = $report_data['rows_filter']['all_users'] ? 1 : 0; } // break filters into a more usable format $filter_allcourses = $filter_columns['all_courses']; $filter_courseselection =& $filter_columns['selected_courses']; $order_by = isset($filter_columns['order_by']) ? $filter_columns['order_by'] : "userid"; $order_dir = isset($filter_columns['order_dir']) ? $filter_columns['order_dir'] : "asc"; $show_suspended = 'active_only'; if (isset($filter_columns['show_suspended']) && $filter_columns['show_suspended']) { $show_suspended = 'all'; } // retrive the user selected if ($alluser > 0) { // all the user selected (we can avoid this ? no we need to hide the suspended users) $user_selected =& $acl_man->getAllUsersIdst(); } else { // resolve the user selection $user_selected =& $acl_man->getAllUsersFromSelection($filter_userselection); } //apply sub admin filters, if needed $userlevelid = Docebo::user()->getUserLevelId(); if ($userlevelid != ADMIN_GROUP_GODADMIN && !Docebo::user()->isAnonymous()) { //filter users $alluser = false; require_once _base_ . '/lib/lib.preference.php'; $adminManager = new AdminPreference(); $admin_users = $adminManager->getAdminUsers(Docebo::user()->getIdST()); $admin_users = $acl_man->getAllUsersFromSelection($admin_users); $user_selected = array_intersect($user_selected, $admin_users); unset($admin_users); //filter courses $admin_allcourses = false; $admin_courses = $adminManager->getAdminCourse(Docebo::user()->getIdST()); if (!$filter_allcourses) { $rs = sql_query("SELECT idCourse FROM %lms_course"); $course_selected = array(); while (list($id_course) = sql_fetch_row($rs)) { $course_selected[] = $id_course; } } if (isset($admin_courses['course'][0])) { //No filter $admin_allcourses = true; } elseif (isset($admin_courses['course'][-1])) { require_once _lms_ . '/lib/lib.catalogue.php'; $cat_man = new Catalogue_Manager(); $user_catalogue = $cat_man->getUserAllCatalogueId(Docebo::user()->getIdSt()); if (count($user_catalogue) > 0) { $courses = array(0); foreach ($user_catalogue as $id_cat) { $catalogue_course =& $cat_man->getCatalogueCourse($id_cat, true); $courses = array_merge($courses, $catalogue_course); } foreach ($courses as $id_course) { if ($id_course != 0) { $admin_courses['course'][$id_course] = $id_course; } } } elseif (Get::sett('on_catalogue_empty', 'off') == 'on') { //No filter } if (!empty($admin_courses['course'])) { $rs = sql_query("SELECT idCourse FROM %lms_course"); $course_selected = array(); while (list($id_course) = sql_fetch_row($rs)) { $course_selected[] = $id_course; } $_clist = array_values($admin_courses['course']); $course_selected = array_intersect($course_selected, $_clist); } else { $course_selected = array(); } } else { $array_courses = array(); $array_courses = array_merge($array_courses, $admin_courses['course']); if (!empty($admin_courses['coursepath'])) { require_once _lms_ . '/lib/lib.coursepath.php'; $path_man = new Catalogue_Manager(); $coursepath_course =& $path_man->getAllCourses($admin_courses['coursepath']); $array_courses = array_merge($array_courses, $coursepath_course); } if (!empty($admin_courses['catalogue'])) { require_once _lms_ . '/lib/lib.catalogue.php'; $cat_man = new Catalogue_Manager(); foreach ($admin_courses['catalogue'] as $id_cat) { $catalogue_course =& $cat_man->getCatalogueCourse($id_cat, true); $array_courses = array_merge($array_courses, $catalogue_course); } } $admin_courses['course'] = array_merge($admin_courses['course'], $array_courses); if (!empty($admin_courses['course'])) { $rs = sql_query("SELECT idCourse FROM %lms_course"); $course_selected = array(); while (list($id_course) = sql_fetch_row($rs)) { $course_selected[] = $id_course; } $_clist = array_values($admin_courses['course']); $course_selected = array_intersect($course_selected, $_clist); } else { $course_selected = array(); } } unset($admin_courses); if (!$filter_allcourses) { $filter_courseselection = array_intersect($filter_courseselection, $course_selected); } else { $filter_courseselection = $course_selected; } if ($filter_allcourses && $admin_allcourses) { $filter_allcourses = true; } else { $filter_allcourses = false; } } $show_classrooms_editions = isset($filter_columns['show_classrooms_editions']) ? (bool) $filter_columns['show_classrooms_editions'] : false; $classrooms_editions_info = array(); if ($show_classrooms_editions) { //retrieve classrooms info $query = "SELECT d.*, MIN(dd.date_begin) AS date_1, MAX(dd.date_end) AS date_2 " . " FROM %lms_course_date AS d JOIN %lms_course_date_day AS dd ON (d.id_date = dd.id_date) " . (!$filter_allcourses ? " AND d.id_course IN (" . implode(',', $filter_courseselection) . ") " : "") . " GROUP BY dd.id_date"; $res = sql_query($query); while ($obj = sql_fetch_object($res)) { $classrooms_editions_info['classrooms'][$obj->id_date] = $obj; } //retrieve editions info //TO DO ... } // if we must subdived the users into the org_chart folders we must retrive some extra info if ($org_chart_subdivision == 1) { require_once $GLOBALS['where_framework'] . '/lib/lib.orgchart.php'; $org_man = new OrgChartManager(); if ($alluser == 1) { $elem_selected = $org_man->getAllGroupIdFolder(); } else { $elem_selected = $user_selected; } $org_name = $org_man->getFolderFormIdst($elem_selected); if ($userlevelid != ADMIN_GROUP_GODADMIN && !Docebo::user()->isAnonymous()) { require_once _base_ . '/lib/lib.preference.php'; $adminManager = new AdminPreference(); $admin_tree = $adminManager->getAdminTree(Docebo::user()->getIdST()); $org_name_temp = $org_name; $org_name = array(); foreach ($org_name_temp as $id => $value) { if (isset($admin_tree[$id])) { $org_name[$id] = $value; } } } } if (empty($user_selected)) { cout($lang->def('_NULL_SELECTION'), 'content'); return; } // Retrive all the course $id_courses = $course_man->getAllCourses(); if (empty($id_courses)) { return $lang->def('_NULL_COURSE_SELECTION'); } $re_category = sql_query("\r\n\t\tSELECT idCategory, path\r\n\t\tFROM " . $GLOBALS['prefix_lms'] . "_category"); $category_list = array(0 => $lang->def('_NONE')); $category_path_list = array(0 => '/'); while (list($id_cat, $name_cat) = sql_fetch_row($re_category)) { $category_list[$id_cat] = substr($name_cat, strrpos($name_cat, '/') + 1); $category_path_list[$id_cat] = substr($name_cat, 5, strlen($name_cat) - 5); //eliminates "/root" } $time_list = array(); $session_list = array(); $lastaccess_list = array(); $query = "\r\n\t\tSELECT idUser, idCourse, COUNT(*), SUM(UNIX_TIMESTAMP(lastTime) - UNIX_TIMESTAMP(enterTime)), MAX(lastTime)\r\n\t\tFROM " . $GLOBALS['prefix_lms'] . "_tracksession\r\n\t\tWHERE 1 " . ($alluser > 0 ? "" : "AND idUser IN ( " . implode(',', $user_selected) . " ) ") . ($filter_allcourses ? "" : "AND idCourse IN (" . implode(',', $filter_courseselection) . ") "); //if($start_time != '') $query .= " AND enterTime >= '".$start_time."' "; //if($end_time != '') $query .= " AND lastTime <= '".$end_time."' "; $query .= "GROUP BY idUser, idCourse "; $re_time = sql_query($query); while (list($id_u, $id_c, $session_num, $time_num, $last_num) = sql_fetch_row($re_time)) { $session_list[$id_u . '_' . $id_c] = $session_num; $time_list[$id_u . '_' . $id_c] = $time_num; $lastaccess_list[$id_u . '_' . $id_c] = $last_num; } //recover start and final score require_once $GLOBALS['where_lms'] . '/lib/lib.orgchart.php'; $org_man = new OrganizationManagement(false); $score_start = $org_man->getStartObjectScore($user_selected, array_keys($id_courses)); $score_final = $org_man->getFinalObjectScore($user_selected, array_keys($id_courses)); require_once $GLOBALS['where_lms'] . '/lib/lib.coursereport.php'; $rep_man = new CourseReportManager(); $score_course = $rep_man->getUserFinalScore($user_selected, array_keys($id_courses)); //set query suspended users condition $query_show_suspended = "u.valid = 1"; //default condition switch ($show_suspended) { case "all": $query_show_suspended = "1"; break; case "suspended_only": $query_show_suspended = "u.valid = 0"; break; case "active_only": $query_show_suspended = "u.valid = 1"; break; } //set query order by param $_dir = "ASC"; switch ($order_dir) { case "desc": $_dir = "DESC"; break; } $query_order_by = "u.userid, c.code"; switch ($order_by) { case 'firstname': $query_order_by = "u.firstname " . $_dir . ", u.userid " . $_dir . ", c.code " . $_dir . ""; break; case 'lastname': $query_order_by = "u.lastname " . $_dir . ", u.userid " . $_dir . ", c.code " . $_dir . ""; break; case 'email': $query_order_by = "u.email " . $_dir . ", u.userid " . $_dir . ", c.code " . $_dir . ""; break; case 'course_code': $query_order_by = "c.code " . $_dir . ", u.userid " . $_dir . ""; break; case 'course_name': $query_order_by = "c.name " . $_dir . ", c.code " . $_dir . ", u.userid " . $_dir . ""; break; case 'status': $query_order_by = "cu.status " . $_dir . ", u.userid " . $_dir . ", c.code " . $_dir . ""; break; case 'level': $query_order_by = "cu.level " . $_dir . ", u.userid " . $_dir . ", c.code " . $_dir . ""; break; case 'date_subscription': $query_order_by = "cu.date_inscr " . $_dir . ", u.userid " . $_dir . ", c.code " . $_dir . ""; break; case 'date_first_access': $query_order_by = "cu.date_first_access " . $_dir . ", u.userid " . $_dir . ", c.code " . $_dir . ""; break; case 'date_last_access': $query_order_by = "cu.date_last_access " . $_dir . ", u.userid " . $_dir . ", c.code " . $_dir . ""; break; case 'date_complete': $query_order_by = "cu.date_complete " . $_dir . ", u.userid " . $_dir . ", c.code " . $_dir . ""; break; } if ($org_chart_subdivision == 0) { // find some information if ($show_classrooms_editions) { $query_course_user = "******" . " cu.status, cu.date_inscr, cu.date_first_access, cu.date_complete, c.mediumTime, c.course_type, c.credits, " . " u.userid, u.firstname, u.lastname, u.email, u.register_date, u.valid, " . " d.id_date, du.date_subscription AS classroom_date_subscription, du.date_complete AS classroom_date_complete " . " FROM ( %lms_courseuser AS cu JOIN %lms_course AS c JOIN %adm_user as u " . " ON (cu.idCourse = c.idCourse AND cu.idUser = u.idst) ) " . " LEFT JOIN (%lms_course_date AS d JOIN %lms_course_date_user AS du ON (d.id_date = du.id_date)) " . " ON (d.id_course = cu.idCourse AND du.id_user = cu.idUser) " . " WHERE " . $query_show_suspended . " " . ($alluser > 0 ? "" : "AND cu.idUser IN ( " . implode(',', $user_selected) . " ) ") . ($filter_allcourses ? "" : "AND c.idCourse IN (" . implode(',', $filter_courseselection) . ") ") . " ORDER BY " . $query_order_by; } else { $query_course_user = "******" . " cu.status, cu.date_inscr, cu.date_first_access, cu.date_complete, c.mediumTime, c.course_type, c.credits, " . " u.userid, u.firstname, u.lastname, u.email, u.register_date, u.valid " . " FROM %lms_courseuser AS cu JOIN %lms_course AS c JOIN %adm_user as u " . " ON (cu.idCourse = c.idCourse AND cu.idUser = u.idst) " . " WHERE " . $query_show_suspended . " = 1 " . ($alluser > 0 ? "" : "AND cu.idUser IN ( " . implode(',', $user_selected) . " ) ") . ($filter_allcourses ? "" : "AND c.idCourse IN (" . implode(',', $filter_courseselection) . ") ") . " ORDER BY " . $query_order_by; } $output .= $this->_printTable_courses($type, $query_course_user, $category_list, $category_path_list, $session_list, $lastaccess_list, $time_list, $score_start, $score_final, $score_course, $user_selected, $filter_columns, $show_classrooms_editions, $classrooms_editions_info); } else { $date_now = Format::date(date("Y-m-d H:i:s")); reset($org_name); while (list($idst_group, $folder_name) = each($org_name)) { if ($type == 'html') { cout('<div class="datasummary">' . '<b>' . $lang->def('_FOLDER_NAME') . ' :</b> ' . $folder_name['name'] . ($folder_name['type_of_folder'] == ORG_CHART_WITH_DESCENDANTS ? ' (' . $lang->def('_WITH_DESCENDANTS') . ')' : '') . '<br />', 'content'); cout('<b>' . $lang->def('_CREATION_DATE') . ' :</b> ' . $date_now . '<br /></div>', 'content'); } $group_user = $acl_man->getGroupAllUser($idst_group); // find some information if ($show_classrooms_editions) { $query_course_user = "******" . " cu.status, cu.date_inscr, cu.date_first_access, cu.date_complete, c.mediumTime, c.course_type, c.credits, " . " u.userid, u.firstname, u.lastname, u.email, u.register_date, u.valid, " . " d.id_date, du.date_subscription AS classroom_date_subscription, du.date_complete AS classroom_date_complete " . " FROM ( %lms_courseuser AS cu JOIN %lms_course AS c JOIN %adm_user as u " . " ON (cu.idCourse = c.idCourse AND cu.idUser = u.idst) ) " . " LEFT JOIN (%lms_course_date AS d JOIN %lms_course_date_user AS du ON (d.id_date = du.id_date)) " . " ON (d.id_course = cu.idCourse AND du.id_user = cu.idUser) " . " WHERE " . $query_show_suspended . " " . (!empty($group_user) ? " AND cu.idUser IN ( " . implode(',', $group_user) . " ) " : " AND 0 ") . ($filter_allcourses ? "" : "AND c.idCourse IN (" . implode(',', $filter_courseselection) . ") ") . " ORDER BY " . $query_order_by; } else { $query_course_user = "******" . " cu.status, cu.date_inscr, cu.date_first_access, cu.date_complete, c.mediumTime, c.course_type, c.credits, " . " u.userid, u.firstname, u.lastname, u.email, u.register_date, u.valid " . " FROM %lms_courseuser AS cu JOIN %lms_course AS c JOIN %adm_user as u " . " ON (cu.idCourse = c.idCourse AND cu.idUser = u.idst) " . " WHERE " . $query_show_suspended . " = 1 " . (!empty($group_user) ? " AND cu.idUser IN ( " . implode(',', $group_user) . " ) " : " AND 0 ") . ($filter_allcourses ? "" : "AND c.idCourse IN (" . implode(',', $filter_courseselection) . ") ") . " ORDER BY " . $query_order_by; } $output .= $this->_printTable_courses($type, $query_course_user, $category_list, $category_path_list, $session_list, $lastaccess_list, $time_list, $score_start, $score_final, $score_course, $filter_userselection, $filter_columns, $show_classrooms_editions, $classrooms_editions_info); } } return $output; }
/** * retrive the user statistic in the lms */ function getUserCourseStat($id_user) { require_once $GLOBALS['where_lms'] . '/lib/lib.course.php'; $stats = array(); $c_lang =& DoceboLanguage::CreateInstance('course', 'lms'); $lang =& DoceboLanguage::createInstance('course', 'lms'); $id_courses = array(); $query_course_user = "******" . $GLOBALS['prefix_lms'] . "_courseuser AS cu\r\n\t\t\tJOIN " . $GLOBALS['prefix_lms'] . "_course AS c\r\n\t\tWHERE cu.idCourse = c.idCourse\r\n\t\t\tAND cu.idUser = '******'"; $re_course_user = sql_query($query_course_user); while (list($id_c, $code, $name, $status, $status_user, $date_inscr, $date_first_access, $date_complete) = sql_fetch_row($re_course_user)) { $id_courses[] = $id_c; $stats[$id_c]['course_name'] = $name; $stats[$id_c]['course_code'] = $code; $course_status = array(CST_PREPARATION => $c_lang->def('_CST_PREPARATION', 'course', 'lms'), CST_AVAILABLE => $c_lang->def('_CST_AVAILABLE', 'course', 'lms'), CST_EFFECTIVE => $c_lang->def('_CST_CONFIRMED', 'course', 'lms'), CST_CONCLUDED => $c_lang->def('_CST_CONCLUDED', 'course', 'lms'), CST_CANCELLED => $c_lang->def('_CST_CANCELLED', 'course', 'lms')); $stats[$id_c]['course_status'] = $course_status[$status]; $cman = new CourseSubscribe_Manager(); $arr_status = $cman->getUserStatus(); $stats[$id_c]['user_status'] = isset($arr_status[$status_user]) ? $arr_status[$status_user] : ""; $stats[$id_c]['date_inscr'] = $date_inscr; $stats[$id_c]['date_first_access'] = $date_first_access; $stats[$id_c]['date_complete'] = $date_complete; $stats[$id_c]['score_init'] = ''; $stats[$id_c]['score_final'] = ''; $stats[$id_c]['access_count'] = ''; $stats[$id_c]['access_time'] = ''; $stats[$id_c]['access_last'] = ''; $stats[$id_c]['point_do'] = ''; } //recover start and final score require_once $GLOBALS['where_lms'] . '/lib/lib.orgchart.php'; $org_man = new OrganizationManagement(false); require_once $GLOBALS['where_lms'] . '/lib/lib.coursereport.php'; $rep_man = new CourseReportManager(); $score_course = $rep_man->getUserFinalScore(array($id_user)); $score_start = $org_man->getStartObjectScore(array($id_user), $id_courses); $score_final = $org_man->getFinalObjectScore(array($id_user), $id_courses); while (list(, $id_c) = each($id_courses)) { if (isset($stats[$id_c])) { $stats[$id_c]['score_init'] = isset($score_start[$id_c][$id_user]) && $score_start[$id_c][$id_user]['max_score'] ? $score_start[$id_c][$id_user]['score'] . ' / ' . $score_start[$id_c][$id_user]['max_score'] : ''; $stats[$id_c]['score_final'] = isset($score_final[$id_c][$id_user]) && $score_final[$id_c][$id_user]['max_score'] ? $score_final[$id_c][$id_user]['score'] . ' / ' . $score_final[$id_c][$id_user]['max_score'] : ''; } $point_do = isset($score_course[$id_user][$id_c]) ? $score_course[$id_user][$id_c]['score'] : ''; $point_max = isset($score_course[$id_user][$id_c]) ? $score_course[$id_user][$id_c]['max_score'] : ''; $stats[$id_c]['point_do'] = $point_do !== '' ? number_format($point_do, 2) . ' / ' . number_format($point_max, 2) : ''; } $query = "\r\n\t\tSELECT idCourse, COUNT(*), SUM(UNIX_TIMESTAMP(lastTime) - UNIX_TIMESTAMP(enterTime)), MAX(lastTime)\r\n\t\tFROM " . $GLOBALS['prefix_lms'] . "_tracksession\r\n\t\tWHERE idUser = '******'\r\n\t\tGROUP BY idCourse "; $re_time = sql_query($query); while (list($id_c, $session_num, $time_num, $last_num) = sql_fetch_row($re_time)) { if (isset($stats[$id_c])) { $stats[$id_c]['access_count'] = $session_num; $stats[$id_c]['access_time'] = $time_num; $stats[$id_c]['access_last'] = $last_num; } } return $stats; }
function coursereport() { global $nquest; global $course_score, $course_score_max; global $test_title; checkPerm('view'); require_once $GLOBALS['where_lms'] . '/lib/lib.test.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.coursereport.php'; require_once _base_ . '/lib/lib.table.php'; $lang =& DoceboLanguage::createInstance('gradebook', 'lms'); $out =& $GLOBALS['page']; $out->setWorkingZone('content'); $test_man = new GroupTestManagement(); $report_man = new CourseReportManager(); // XXX: update if needed $org_tests =& $report_man->getTest(); $tests_info =& $test_man->getTestInfo($org_tests); $i_test = array(); $i_test_report_id = array(); // XXX: Info for updates $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)) { $i_test[$id_t] = $id_t; $i_test_report_id[$id_r] = $id_r; } // XXX: Update if needed if ($tot_report == 0) { $report_man->initializeCourseReport($org_tests); } else { if (is_array($i_test)) { $test_to_add = array_diff($org_tests, $i_test); } else { $test_to_add = $org_tests; } if (is_array($i_test)) { $test_to_del = array_diff($i_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); $reports = array(); $id_test = array(); $id_report = array(); $tests = array(); // XXX: retrive all report info $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'] . "' AND show_to_user = '******'\r\n\tORDER BY sequence "; $re_report = sql_query($query_report); while ($info_report = mysql_fetch_assoc($re_report)) { switch ($info_report['source_of']) { case "test": $id_test[] = $info_report['id_source']; break; } } $id_user = getLogUserId(); if (count($id_test)) { $title = $GLOBALS['course_descriptor']->getValue('name'); $username = Docebo::user()->getUserName(); $GLOBALS['page']->add(getTitleArea($lang->def('_GRADEBOOK_AREATITLE'), 'gradebook') . '<div class="std_block">' . '<div class="print">' . '<a href="#" onclick="window.print(); return false;">' . '<img src="' . getPathImage() . 'standard/print.gif" alt="' . $lang->def('_PRINT') . '" /> ' . $lang->def('_PRINT') . '</a>' . '</div>' . getBackUi('index.php?modname=gradebook&op=showgrade', $lang->def('_BACK')) . '<div class="title coursereport-title">' . $username . '</div><div class="title coursereport-title">' . $title . '</div>', 'content'); $GLOBALS['page']->add('<div class="coursereport-div"><table class="coursereport-table">' . '<tr><td><strong>' . $lang->def('_TEST_N') . '</strong></td><td><strong>' . $lang->def('_QUESTION') . '</strong></td><td align="right"><strong>' . $lang->def('_SCORE') . '</strong></td></tr>', 'content'); $nquest = 0; $course_score = 0; $course_score_max = 0; $j = 0; for ($i = 0; $i < count($id_test); $i++) { $test_title = $tests_info[$id_test[$i]]['title']; $GLOBALS['page']->add('<tr><td colspan="3"><br /><strong>' . $test_title . '</strong></td></tr>', 'content'); $query_track = "SELECT idTrack FROM " . $GLOBALS['prefix_lms'] . "_testtrack " . "WHERE idTest =" . $id_test[$i] . " AND idUser="******"3" align="right"><strong>' . $lang->def('_TOTAL') . ': ' . $course_score . ' ' . $lang->def('_ON') . ' ' . $course_score_max . ' (' . $perc_course_score . '%)</strong> </td></tr>', 'content'); $GLOBALS['page']->add('</table>', 'content'); /* if ($perc_course_score<75) { $msg_feedback=$lang->def('_COURSE_NOT_OK').' '.$lang->def('_COURSE_CHECK_GRAPH'); } else { $msg_feedback=$lang->def('_COURSE_OK'); } $GLOBALS['page']->add('<p><strong>'.$msg_feedback.'</strong>', 'content'); */ $GLOBALS['page']->add('</div>', 'content'); draw_bar($tests); $GLOBALS['page']->add('</div>', 'content'); } }
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); }
public function delCourse($id_course) { if ((int) $id_course <= 0) { return false; } require_once _lms_ . '/lib/lib.course.php'; require_once _base_ . '/lib/lib.upload.php'; $course_man = new Man_Course(); //remove course subscribed------------------------------------------ $levels =& $course_man->getCourseIdstGroupLevel($id_course); foreach ($levels as $lv => $idst) { Docebo::aclm()->deleteGroup($idst); } $alluser = getIDGroupAlluser($id_course); Docebo::aclm()->deleteGroup($alluser); $course_man->removeCourseRole($id_course); $course_man->removeCourseMenu($id_course); $query = "DELETE FROM %lms_courseuser WHERE idCourse = '" . (int) $id_course . "'"; $qres = sql_query($query); if (!$qres) { return false; } //--- remove course data --------------------------------------------------- $query_course = "SELECT imgSponsor, img_course, img_material, img_othermaterial, course_demo, course_type, has_editions\n\t\t\tFROM %lms_course\n\t\t\tWHERE idCourse = '" . (int) $id_course . "'"; $qres = sql_query($query_course); list($file_sponsor, $file_logo, $file_material, $file_othermaterial, $file_demo, $course_type, $course_edition) = sql_fetch_row($qres); require_once _base_ . '/lib/lib.upload.php'; $path = '/appLms/' . Get::sett('pathcourse'); if (substr($path, -1) != '/' && substr($path, -1) != '\\') { $path .= '/'; } sl_open_fileoperations(); if ($file_sponsor != '') { sl_unlink($path . $file_sponsor); } if ($file_logo != '') { sl_unlink($path . $file_logo); } if ($file_material != '') { sl_unlink($path . $file_material); } if ($file_othermaterial != '') { sl_unlink($path . $file_othermaterial); } if ($file_demo != '') { sl_unlink($path . $file_demo); } sl_close_fileoperations(); //if the scs exist delete course rooms if ($GLOBALS['where_scs'] !== false) { require_once _scs_ . '/lib/lib.room.php'; $re = deleteRoom(false, 'course', $id_course); } //--- delete classroom or editions ----------------------------------------- if ($course_type == 'classroom') { require_once _lms_ . '/admin/model/ClassroomAlms.php'; $classroom_model = new ClassroomAlms($id_course); $classroom = $classroom_model->classroom_man->getDateIdForCourse($id_course); foreach ($classroom as $id_date) { if (!$classroom_model->classroom_man->delDate($id_date)) { return false; } } } elseif ($course_edition == 1) { require_once _lms_ . '/admin/model/EditionAlms.php'; $edition_model = new EditionAlms($id_course); $editions = $edition_model->classroom_man->getEditionIdFromCourse($id_course); foreach ($editions as $id_edition) { if (!$edition_model->edition_man->delEdition($id_edition)) { return false; } } } //--- end classrooms or editions ------------------------------------------- //--- clear LOs ------------------------------------------------------------ require_once _lms_ . '/lib/lib.module.php'; require_once _lms_ . '/lib/lib.param.php'; require_once _lms_ . '/class.module/track.object.php'; $arr_lo_param = array(); $arr_lo_track = array(); $arr_org_access = array(); $query = "SELECT * FROM %lms_organization WHERE idCourse = " . (int) $id_course; $ores = sql_query($query); while ($obj = sql_fetch_object($ores)) { $deleted = true; if ($obj->idResource != 0 && $obj->objectType != "") { $lo = createLO($obj->objectType); $deleted = $lo->del($obj->idResource); //delete learning object } if ($deleted) { $arr_lo_track[] = $obj->idOrg; $arr_org_access[] = $obj->idOrg; //collect org access ids $arr_lo_param[] = $obj->idParam; //collect idParams ids } } //delete all organizations references for the course $query = "DELETE FROM %lms_organization WHERE idCourse = " . (int) $id_course; $res = sql_query($query); //delete LOs trackings if (!empty($arr_lo_track)) { $track_object = new Track_Object(false, 'course_lo'); $track_object->delIdTrackFromCommon($arr_lo_track); } //delete org accesses if (!empty($arr_org_access)) { $query = "DELETE FROM %lms_organization_access\n\t\t\t\tWHERE idOrgAccess IN (" . implode(",", $arr_org_access) . ")"; $res = sql_query($query); } //delete lo params if (!empty($arr_lo_param)) { $query = "DELETE FROM %lms_lo_param\n\t\t\t\tWHERE idParam IN (" . implode(",", $arr_lo_param) . ")"; } //--- end LOs -------------------------------------------------------------- //--- clear coursepath references ------------------------------------------ require_once _lms_ . '/lib/lib.coursepath.php'; $cman = new CoursePath_Manager(); $cman->deleteCourseFromCoursePaths($id_course); //--- end coursepath references -------------------------------------------- //--- clear certificates assignments --------------------------------------- require_once _lms_ . '/lib/lib.certificate.php'; $cman = new Certificate(); $cman->deleteCourseCertificateAssignments($id_course); //--- end certificates assignments ----------------------------------------- //--- clear labels --------------------------------------------------------- $lmodel = new LabelAlms(); $lmodel->clearCourseLabel($id_course); //--- end labels ----------------------------------------------------------- //--- clear advices -------------------------------------------------------- require_once _lms_ . '/lib/lib.advice.php'; $aman = new Man_Advice(); $aman->deleteAllCourseAdvices($id_course); //--- end advices ---------------------------------------------------------- //--- clear coursereports -------------------------------------------------- require_once _lms_ . '/lib/lib.coursereport.php'; $cman = new CourseReportManager(); $cman->deleteAllReports($id_course); //--- end coursereports ---------------------------------------------------- //--- clear competences ---------------------------------------------------- $cmodel = new CompetencesAdm(); $cmodel->deleteAllCourseCompetences($id_course); //--- end competences ------------------------------------------------------ //--- finally delete course from courses table ----------------------------- if (!sql_query("DELETE FROM %lms_course WHERE idCourse = '" . $id_course . "'")) { return false; } return true; }
function getSubstitution() { $subs = array(); $lang =& DoceboLanguage::createInstance('course', 'lms'); $lang =& DoceboLanguage::createInstance('certificate', 'lms'); if ($this->id_meta != 0) { require_once $GLOBALS['where_lms'] . '/lib/lib.course.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.coursereport.php'; $acl_man =& $GLOBALS['current_user']->getAclManager(); $courses = array(); $array_coursetype = array('elearning' => $lang->def('_COURSE_TYPE_ELEARNING', 'course', 'lms'), 'classroom' => $lang->def('_CLASSROOM', 'course', 'lms'), 'web_seminar' => $lang->def('Web seminar')); $course_time = 0; $blended_time = 0; $query = "SELECT DISTINCT idCourse" . " FROM " . $GLOBALS['prefix_lms'] . "_certificate_meta_course" . " WHERE idMetaCertificate = '" . $this->id_meta . "'" . " AND idUser = '******'"; $result = sql_query($query); $table_course = '<table width="100%" cellspacing="1" cellpadding="1" border="1" align="" summary="Corsi frequentati">' . '<thead>' . '<tr>' . '<td>' . $lang->def('_COURSE_NAME') . '</td>' . '<td>' . $lang->def('_COURSE_TYPE') . '</td>' . '<td align="right">' . $lang->def('_COURSE_TIME') . '</td>' . '</tr>' . '</thead>' . '</tbody>'; $table_blended = '<table width="100%" cellspacing="1" cellpadding="1" border="1" align="" summary="Corsi frequentati">' . '<thead>' . '<tr>' . '<td>' . $lang->def('_COURSE_NAME') . '</td>' . '<td>' . $lang->def('_COURSE_PROF') . '</td>' . '<td>' . $lang->def('_COURSE_TYPE') . '</td>' . '<td align="right">' . $lang->def('_COURSE_TIME') . '</td>' . '</thead>' . '</tbody>'; $course_count = 0; $blended_count = 0; $array_meta_complete = array(); $array_meta_inscr = array(); $array_meta_access = array(); while (list($id_course) = sql_fetch_row($result)) { $query = "SELECT date_complete, date_inscr, date_first_access" . " FROM " . $GLOBALS['prefix_lms'] . "_courseuser" . " WHERE idCourse = '" . $id_course . "'" . " AND idUser = '******'"; list($date_complete_meta, $date_inscr_meta, $date_access_meta) = sql_fetch_row(sql_query($query)); $array_meta_complete[] = $date_complete_meta; $array_meta_inscr[] = $date_inscr_meta; $array_meta_access[] = $date_access_meta; $man_course = new Man_Course(); $course_info = $man_course->getCourseInfo($id_course); $rep_man = new CourseReportManager(); $score_course = $rep_man->getUserFinalScore(array($this->id_user), array($this->id_course)); if ($course_info['course_type'] === 'blended') { $teacher_array = getSubscribed($id_course, false, 6, true); $first = true; if (is_array($teacher_array) && !empty($teacher_array)) { while (list(, $id_teach) = each($teacher_array)) { $teacher_info = $acl_man->getUser($id_teach); if ($first) { $teacher = $teacher_info[ACL_INFO_FIRSTNAME] . ' ' . $teacher_info[ACL_INFO_LASTNAME]; $first = false; } else { $teacher = '<br/>' . $teacher_info[ACL_INFO_FIRSTNAME] . ' ' . $teacher_info[ACL_INFO_LASTNAME]; } } } else { $teacher = ' '; } $table_blended .= '<tr>' . '<td>' . $course_info['name'] . '</td>' . '<td>' . $teacher . '</td>' . '<td>' . $array_coursetype[$course_info['course_type']] . '</td>' . '<td align="right">' . $course_info['mediumTime'] . '</td>' . '</tr>'; $blended_time += $course_info['mediumTime']; $blended_count++; } else { $table_course .= '<tr>' . '<td>' . $course_info['name'] . '</td>' . '<td>' . $array_coursetype[$course_info['course_type']] . '</td>' . '<td align="right">' . $course_info['mediumTime'] . '</td>' . '</tr>'; $course_time += $course_info['mediumTime']; $course_count++; } } $table_course .= '<tr>' . '<td align="right" colspan="2">' . $lang->def('_TOTAL_HOURS') . '</td>' . '<td align="right">' . $course_time . '</td>' . '</tr>' . '</tbody>' . '</table>'; $table_blended .= '<tr>' . '<td align="right" colspan="2">' . $lang->def('_TOTAL_HOURS') . '</td>' . '<td align="right">' . $blended_time . '</td>' . '</tr>' . '</tbody>' . '</table>'; rsort($array_meta_complete); sort($array_meta_inscr); sort($array_meta_access); $subs['[meta_complete]'] = $array_meta_complete[0]; $subs['[meta_inscr]'] = $array_meta_inscr[0]; $subs['[meta_access]'] = $array_meta_access[0]; $subs['[table_course]'] = $course_count ? $table_course : ''; $subs['[table_blended]'] = $blended_count ? $table_blended : ''; } else { require_once $GLOBALS['where_lms'] . '/lib/lib.course.php'; $courseuser = new Man_CourseUser(); $course_stat =& $courseuser->getUserCourses($this->id_user, false, false, false, array($this->id_course)); if (isset($course_stat[$this->id_course])) { $subs['[date_enroll]'] = Format::date($course_stat[$this->id_course]['date_inscr'], 'date'); $subs['[date_first_access]'] = Format::date($course_stat[$this->id_course]['date_first_access'], 'date'); $subs['[date_complete]'] = Format::date($course_stat[$this->id_course]['date_complete'], 'date'); $subs['[date_complete_year]'] = substr($course_stat[$this->id_course]['date_complete'], 0, 4); } else { $subs['[date_enroll]'] = ''; $subs['[date_first_access]'] = ''; $subs['[date_complete]'] = ''; $subs['[date_complete_year]'] = ''; } require_once $GLOBALS['where_lms'] . '/lib/lib.orgchart.php'; $org_man = new OrganizationManagement($this->id_course); $score_start = $org_man->getStartObjectScore(array($this->id_user), array($this->id_course)); $score_final = $org_man->getFinalObjectScore(array($this->id_user), array($this->id_course)); require_once $GLOBALS['where_lms'] . '/lib/lib.coursereport.php'; $rep_man = new CourseReportManager(); $score_course = $rep_man->getUserFinalScore(array($this->id_user), array($this->id_course)); $subs['[test_score_start]'] = isset($score_start[$this->id_course][$this->id_user]) ? $score_start[$this->id_course][$this->id_user]['score'] : ''; $subs['[test_score_start_max]'] = isset($score_start[$this->id_course][$this->id_user]) ? $score_start[$this->id_course][$this->id_user]['max_score'] : ''; $subs['[test_score_final]'] = isset($score_final[$this->id_course][$this->id_user]) ? $score_final[$this->id_course][$this->id_user]['score'] : ''; $subs['[test_score_final_max]'] = !empty($score_final[$this->id_course][$this->id_user]['max_score']) ? $score_final[$this->id_course][$this->id_user]['max_score'] : '100'; $subs['[course_score_final]'] = isset($score_course[$this->id_user][$this->id_course]) ? $score_course[$this->id_user][$this->id_course]['score'] : ''; $subs['[course_score_final_max]'] = isset($score_course[$this->id_user][$this->id_course]) ? $score_course[$this->id_user][$this->id_course]['max_score'] : ''; require_once $GLOBALS['where_lms'] . '/lib/lib.track_user.php'; $time_in = TrackUser::getUserTotalCourseTime($this->id_user, $this->id_course); $hours = (int) ($time_in / 3600); $minutes = (int) ($time_in % 3600 / 60); $seconds = (int) ($time_in % 60); if ($minutes < 10) { $minutes = '0' . $minutes; } if ($seconds < 10) { $seconds = '0' . $seconds; } $subs['[total_time]'] = $hours . 'h ' . $minutes . 'm ' . $seconds . 's'; $subs['[total_time_hour]'] = $hours; $subs['[total_time_minute]'] = $minutes; $subs['[total_time_second]'] = $seconds; } return $subs; }
function displayCoursePathList(&$url, $selected_tab) { require_once _base_ . '/lib/lib.form.php'; require_once _base_ . '/lib/lib.user_profile.php'; require_once _base_ . '/lib/lib.navbar.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.preassessment.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.catalogue.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.coursepath.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.course.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.preassessment.php'; require_once $GLOBALS['where_lms'] . '/lib/lib.coursereport.php'; $lang =& DoceboLanguage::createInstance('catalogue'); $lang_c =& DoceboLanguage::createInstance('course'); $nav_bar = new NavBar('ini', Get::sett('visuItem'), 0); $nav_bar->setLink($url->getUrl()); $ini = $nav_bar->getSelectedElement(); $course_man = new Man_Course(); $path_man = new CoursePath_Manager(); $cat_man = new Catalogue_Manager(); $man_courseuser = new Man_CourseUser(); $profile = new UserProfile(getLogUserId()); $profile->init('profile', 'framework', '', 'ap'); $profile->addStyleSheet('lms'); $catalogues =& $cat_man->getUserAllCatalogueId(getLogUserId()); if (!empty($catalogues)) { // at least one catalogue is assigned to this user $cat_path =& $cat_man->getAllCoursepathOfUser(getLogUserId()); if (!empty($cat_path)) { $path_man->filterInPath($cat_path); } } elseif (Get::sett('on_catalogue_empty') == 'off') { $path_man->filterInPath(array(0)); } if (!Docebo::user()->isAnonymous()) { if (!isset($_SESSION['cp_assessment_effect'])) { $pa_man = new AssessmentList(); $arr_assessment = $pa_man->getUserAssessmentSubsription(Docebo::user()->getArrSt()); $report = new CourseReportManager(); $user_result = $report->getAllUserFinalScore(getLogUserId(), $arr_assessment['course_list']); $rule_man = new AssessmentRule(); $ass_elem = $rule_man->getCompleteEffectListForAssessmentWithUserResult($arr_assessment['course_list'], $user_result); $_SESSION['cp_assessment_effect'] = urlencode(serialize($ass_elem)); } else { $ass_elem = unserialize(urldecode($_SESSION['cp_assessment_effect'])); } if (!empty($ass_elem['parsed']['coursepath'])) { $path_man->filterOrInPath($ass_elem['parsed']['coursepath']); } } // retrive all the classroorm // search for the coursepath ------------------------------------------------------ $coursepath = $path_man->getCoursepathList($ini, Get::sett('visuItem')); if (empty($coursepath)) { // no path found for the criteria --------------------------------------------- $GLOBALS['page']->add('<p class="no_course_found">' . $lang->def('_NO_COURSE_FOUND') . '</p></div>', 'content'); return; } // find structures of the course path --------------------------------------------- $courses = $path_man->getPathStructure(array_keys($coursepath)); $path_slot = $path_man->getPathSlot(array_keys($coursepath)); // fin user subscription needed --------------------------------------------------- $user_paths =& $path_man->getUserSubscriptionsInfo(getLogUserId(), false); $usercourses =& $man_courseuser->getUserSubscriptionsInfo(getLogUserId(), false); // find course basilar information ------------------------------------------------ $course_info = $course_man->getAllCourses(false, false, $courses['all_items'], true); $GLOBALS['page']->add($nav_bar->getNavBar($ini), 'content'); while (list($id_path, $path) = each($coursepath)) { $html = '<div class="coursepath_container">'; $in_h = ' <span class="coursepath_subscribe">'; $can_subs = true; if (isset($ass_elem['parsed']['coursepath'])) { if (isset($ass_elem['not_done']['coursepath']) && in_array($id_path, $ass_elem['not_done']['coursepath'])) { // the assosiacted preassessment is not done $in_h .= ''; //$lang->def('_MUST_DO_PREASSESSMENT'); $can_subs = false; } elseif (isset($ass_elem['to_apply']['coursepath']) && in_array($id_path, $ass_elem['to_apply']['coursepath'])) { // the assosiacted preassessment suggest this coursepath $in_h .= $lang->def('_PREASSESSMENT_SUGGESTION'); } } else { switch ($path[COURSEPATH_METHOD]) { case METHOD_WAIT: $in_h .= $lang->def('_METHOD_WAIT'); break; case METHOD_AUTO: $in_h .= $lang->def('_METHOD_AUTO'); break; case METHOD_MANUAL: default: $in_h .= $lang->def('_METHOD_MANUAL'); $can_subs = false; break; } } $in_h .= '</span>'; $in_h .= ' <span class="coursepath_status">'; if (isset($usercourses[$id_path])) { // user is alredy subscribed to this coursepath if ($usercourses[$id_path]['waiting']) { $in_h .= $lang->def('_COURSEPATH_WAITING'); } else { $in_h .= $lang->def('_USER_STATUS_SUBS'); } } $in_h .= '</span>'; // ------------------------------------------------------------- $html .= '<div class="coursepath_info_container">'; $html .= '<h2 class="pathtitle">' . $in_h . ($path[COURSEPATH_CODE] != '' ? '[' . $path[COURSEPATH_CODE] . '] ' : '') . $path[COURSEPATH_NAME] . '</h2>' . '<p class="course_support_info">' . str_replace('[enrolled]', $path[CP_ENROLLED], $lang->def('_COURSEPATH_INTRO')) . '</p>'; if (!isset($courses[$id_path]) || empty($courses[$id_path])) { $html .= $lang->def('_NO_COURSE_ASSIGNED_TO_COURSEPATH') . '<br />'; } else { // display the slots foreach ($path_slot[$id_path] as $id_slot => $slot_info) { if ($id_slot == 0) { $html .= '<h4>' . $lang->def('_MANDATORY') . '</h4>'; if (!empty($courses[$id_path][$id_slot])) { $html .= '<ul class="coursepath_mainslot">'; } } else { if ($slot_info['min_selection'] > 0 && $slot_info['max_selection'] > 0) { $title = str_replace(array('[min_selection]', '[max_selection]'), array($slot_info['min_selection'], $slot_info['max_selection']), $lang->def('_COURSE_PATH_SLOT_MIN_MAX')); } elseif ($slot_info['max_selection'] > 0) { $title = str_replace('[max_selection]', $slot_info['max_selection'], $lang->def('_COURSE_PATH_SLOT_MAX')); } else { $title = $lang->def('_COURSE_PATH_SLOT'); } $html .= '<h4>' . $title . '</h4>'; if (!empty($courses[$id_path][$id_slot])) { $html .= '<ul class="coursepath_otherslot">'; } } $i = 0; while (list($id) = each($courses[$id_path][$id_slot])) { $html .= '<li class="path_course ' . ($i % 2 ? 'path_odd' : '') . '">' . '<a class="show_details_more" href="javascript:;" onclick="course_dash(this, \'' . $id . '\',\'info_' . $id_path . '_' . $id . '\', \'' . $can_subs . '\');">' . $lang->def('_DETAILS') . '</a>' . ($course_info[$id]['code'] != '' ? ' [' . $course_info[$id]['code'] . '] ' : '') . $course_info[$id]['name'] . '<div id="info_' . $id_path . '_' . $id . '"></div>' . '</li>'; $i++; } if (!empty($courses[$id_path][$id_slot])) { $html .= '</ul>'; } } } $html .= '</div>'; $html .= '</div>'; $GLOBALS['page']->add($html, 'content'); } $GLOBALS['page']->add($nav_bar->getNavBar($ini), 'content'); }