function _get_time_query($type = 'html', $report_data = NULL, $other = '')
 {
     require_once $GLOBALS['where_lms'] . '/lib/lib.course.php';
     require_once dirname(__FILE__) . '/report_tableprinter.php';
     if ($report_data == NULL) {
         $ref =& $_SESSION['report_tempdata'];
     } else {
         $ref =& $report_data;
     }
     $fw = $GLOBALS['prefix_fw'];
     $lms = $GLOBALS['prefix_lms'];
     $sel_all = $ref['rows_filter']['select_all'];
     $sel_type = $ref['rows_filter']['selection_type'];
     $selection = $ref['rows_filter']['selection'];
     $timetype = $ref['columns_filter']['timetype'];
     $years =& $ref['columns_filter']['years'];
     $months =& $ref['columns_filter']['months'];
     if (!$sel_all && count($selection) <= 0) {
         cout('<p>' . $this->lang->def('_EMPTY_SELECTION') . '</p>');
         return;
     }
     $acl = new DoceboACLManager();
     $acl->include_suspended = true;
     //admin users filter
     $userlevelid = Docebo::user()->getUserLevelId();
     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());
         $admin_users = $acl_man->getAllUsersFromIdst($admin_tree);
         $admin_users = array_unique($admin_users);
     }
     $html = '';
     $times = array();
     switch ($timetype) {
         case 'years':
             $now = date('Y');
             for ($i = $now - $years + 1; $i <= $now; $i++) {
                 $times[] = $i;
             }
             break;
         case 'months':
             //...
             break;
     }
     switch ($sel_type) {
         case 'users':
             $data = array();
             $users_list = $sel_all ? $acl->getAllUsersIdst() : $acl->getAllUsersFromIdst($selection);
             $users_list = array_unique($users_list);
             if ($userlevelid != ADMIN_GROUP_GODADMIN && !Docebo::user()->isAnonymous()) {
                 $users_list = array_intersect($users_list, $admin_users);
             }
             $query = "SELECT idUser, YEAR(date_complete) as yearComplete " . " FROM " . $lms . "_courseuser " . " WHERE status=2 " . ($userlevelid != ADMIN_GROUP_GODADMIN && !Docebo::user()->isAnonymous() ? " AND idUser IN (" . implode(",", $users_list) . ") " : "");
             $res = sql_query($query);
             while ($row = mysql_fetch_assoc($res)) {
                 //$data[ $row['idUser'] ][ $row['yearComplete'] ] = $row['complete'];
                 $idUser = $row['idUser'];
                 $year = $row['yearComplete'];
                 if (!isset($data[$idUser][$year])) {
                     $data[$idUser][$year] = 0;
                 }
                 $data[$idUser][$year]++;
             }
             $usernames = array();
             $query = "SELECT idst, userid FROM " . $fw . "_user WHERE idst IN (" . implode(",", $users_list) . ")";
             $res = sql_query($query);
             while ($row = mysql_fetch_assoc($res)) {
                 $usernames[$row['idst']] = $acl->relativeId($row['userid']);
             }
             //draw table
             $buffer = new ReportTablePrinter($type, true);
             $buffer->openTable('', '');
             $head = array($this->lang->def('_USER'));
             foreach ($times as $time) {
                 $head[] = $time;
             }
             $head[] = $this->lang->def('_TOTAL');
             $buffer->openHeader();
             $buffer->addHeader($head);
             $buffer->closeHeader();
             $tot_total = 0;
             $buffer->openBody();
             foreach ($users_list as $user) {
                 if (!isset($usernames[$user])) {
                     break;
                 }
                 $line = array();
                 $line_total = 0;
                 $line[] = $usernames[$user];
                 foreach ($times as $time) {
                     //years or months
                     switch ($timetype) {
                         case 'years':
                             if (isset($data[$user][$time])) {
                                 $line[] = $data[$user][$time];
                                 $line_total += $data[$user][$time];
                             } else {
                                 $line[] = '0';
                             }
                             break;
                         case 'months':
                             //$year = ...
                             //$month = ...
                             //$line[] = (isset($data[$group][$year][$month]) ? $data[$group][$year][$month] : '0'); break;
                     }
                 }
                 $line[] = $line_total;
                 $tot_total += $line_total;
                 $buffer->addLine($line);
             }
             $buffer->closeBody();
             //totals
             $foot = array('');
             foreach ($times as $time) {
                 $temp = 0;
                 foreach ($users_list as $user) {
                     if (isset($data[$user][$time])) {
                         $temp += $data[$user][$time];
                     }
                 }
                 $foot[] = $temp;
             }
             $foot[] = $tot_total;
             $buffer->setFoot($foot);
             $buffer->closeTable();
             $html .= $buffer->get();
             break;
             //--------------------
         //--------------------
         case 'groups':
             //retrieve all labels
             $orgchart_labels = array();
             $query = "SELECT * FROM " . $fw . "_org_chart WHERE lang_code='" . getLanguage() . "'";
             $res = sql_query($query);
             while ($row = mysql_fetch_assoc($res)) {
                 $orgchart_labels[$row['id_dir']] = $row['translation'];
             }
             $labels = array();
             //$query = "SELECT * FROM ".$fw."_group WHERE (hidden='false' OR groupid LIKE '/oc_%' OR groupid LIKE '/ocd_%') AND type='free'";
             $query = "SELECT * FROM " . $fw . "_group WHERE groupid LIKE '/oc\\_%' OR groupid LIKE '/ocd\\_%' OR hidden = 'false' ";
             $res = sql_query($query);
             while ($row = mysql_fetch_assoc($res)) {
                 if ($row['hidden'] == 'false') {
                     $labels[$row['idst']] = $acl->relativeId($row['groupid']);
                 } else {
                     $temp = explode("_", $row['groupid']);
                     //echo '<div>'.print_r($temp,true).'</div>';
                     if ($temp[0] == '/oc') {
                         $labels[$row['idst']] = $temp[1] != 0 ? $orgchart_labels[$temp[1]] : '';
                     } elseif ($temp[0] == '/ocd') {
                         $labels[$row['idst']] = $temp[1] != 0 ? $orgchart_labels[$temp[1]] : '';
                     }
                 }
             }
             //solve groups user
             $solved_groups = array();
             $subgroups_list = array();
             foreach ($selection as $group) {
                 $temp = $acl->getGroupGDescendants($group);
                 $temp[] = $group;
                 foreach ($temp as $idst_subgroup) {
                     $solved_groups[$idst_subgroup] = $group;
                 }
                 $subgroups_list = array_merge($subgroups_list, $temp);
             }
             $query = "SELECT gm.idst as idGroup, YEAR(cu.date_complete) as yearComplete, MONTH(cu.date_complete) as monthComplete " . " FROM " . $lms . "_courseuser as cu JOIN " . $fw . "_group_members as gm ON (cu.idUser=gm.idstMember) " . " WHERE status=2 AND gm.idst IN (" . implode(",", $subgroups_list) . ")";
             $data = array();
             $res = sql_query($query);
             while ($row = mysql_fetch_assoc($res)) {
                 $idGroup = $solved_groups[$row['idGroup']];
                 $year = $row['yearComplete'];
                 $month = $row['monthComplete'];
                 switch ($timetype) {
                     case 'years':
                         if (!isset($data[$idGroup][$year])) {
                             $data[$idGroup][$year] = 0;
                         }
                         $data[$idGroup][$year]++;
                         break;
                     case 'months':
                         if (!isset($data[$idGroup][$year][$month])) {
                             $data[$idGroup][$year][$month] = 0;
                         }
                         $data[$idGroup][$year][$month]++;
                         break;
                 }
                 //end switch
             }
             //draw table
             $buffer = new ReportTablePrinter($type, true);
             $buffer->openTable('', '');
             $head = array($this->lang->def('_GROUPS'), $this->lang->def('_USERS'));
             foreach ($times as $time) {
                 $head[] = $time;
             }
             $head[] = $this->lang->def('_TOTAL');
             $buffer->openHeader();
             $buffer->addHeader($head);
             $buffer->closeHeader();
             $tot_users = 0;
             $tot_total = 0;
             $buffer->openBody();
             foreach ($selection as $group) {
                 $group_users = $acl->getGroupAllUser($group);
                 if ($userlevelid != ADMIN_GROUP_GODADMIN && !Docebo::user()->isAnonymous()) {
                     $group_users = array_intersect($group_users, $admin_users);
                 }
                 $users_num = count($group_users);
                 $line = array();
                 $line_total = 0;
                 $line[] = $labels[$group];
                 $line[] = $users_num;
                 foreach ($times as $time) {
                     //years or months
                     switch ($timetype) {
                         case 'years':
                             if (isset($data[$group][$time])) {
                                 $line[] = $data[$group][$time];
                                 $line_total += $data[$group][$time];
                             } else {
                                 $line[] = '0';
                             }
                             break;
                         case 'months':
                             //$year = ...
                             //$month = ...
                             //$line[] = (isset($data[$group][$year][$month]) ? $data[$group][$year][$month] : '0'); break;
                     }
                 }
                 $line[] = $line_total;
                 $tot_users += $users_num;
                 $tot_total += $line_total;
                 $buffer->addLine($line);
             }
             $buffer->closeBody();
             //totals
             $foot = array('', $tot_users);
             foreach ($times as $time) {
                 $temp = 0;
                 foreach ($selection as $group) {
                     if (isset($data[$group][$time])) {
                         $temp += $data[$group][$time];
                     }
                 }
                 $foot[] = $temp;
             }
             $foot[] = $tot_total;
             $buffer->setFoot($foot);
             $buffer->closeTable();
             $html .= $buffer->get();
             break;
     }
     //end switch
     cout($html);
 }
Ejemplo n.º 2
0
 function _printTable_users($type, &$acl_man, &$id_courses, &$num_iscr, &$num_nobegin, &$num_itinere, &$num_end, &$time_in_course, $filter_cols, $show_percent, $show_classrooms_editions, &$classrooms_editions_info)
 {
     require_once _lms_ . '/admin/modules/report/report_tableprinter.php';
     $buffer = new ReportTablePrinter($type);
     $output = '';
     require_once $GLOBALS['where_lms'] . '/lib/lib.course.php';
     $lang =& DoceboLanguage::createInstance('course', 'lms');
     $course_lang =& DoceboLanguage::createInstance('course', 'lms');
     $rg_lang =& DoceboLanguage::createInstance('report', 'framework');
     $colspan_course = 0;
     if (in_array('_CODE_COURSE', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_NAME_COURSE', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_COURSE_CATEGORY', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_COURSESTATUS', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_COURSECATALOGUE', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_PUBLICATION_DATE', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_LANGUAGE', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_DIFFICULT', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_DATE_BEGIN', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_DATE_END', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_TIME_BEGIN', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_TIME_END', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_MAX_NUM_SUBSCRIBED', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_MIN_NUM_SUBSCRIBED', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_CREDITS', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_PRICE', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_ADVANCE', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_COURSE_TYPE', $filter_cols)) {
         $colspan_course++;
     }
     if (in_array('_AUTOREGISTRATION_CODE', $filter_cols)) {
         $colspan_course++;
     }
     $colspan_classrooms_editions = 0;
     if ($show_classrooms_editions) {
         if (in_array('_TH_CLASSROOM_CODE', $filter_cols)) {
             $colspan_classrooms_editions++;
         }
         if (in_array('_TH_CLASSROOM_NAME', $filter_cols)) {
             $colspan_classrooms_editions++;
         }
         if (in_array('_TH_CLASSROOM_MIN_DATE', $filter_cols)) {
             $colspan_classrooms_editions++;
         }
         if (in_array('_TH_CLASSROOM_MAX_DATE', $filter_cols)) {
             $colspan_classrooms_editions++;
         }
     }
     $colspan_stats = 0;
     if (in_array('_INSCR', $filter_cols)) {
         $colspan_stats++;
     }
     if (in_array('_MUSTBEGIN', $filter_cols)) {
         $colspan_stats += $show_percent ? 2 : 1;
     }
     if (in_array('_USER_STATUS_BEGIN', $filter_cols)) {
         $colspan_stats += $show_percent ? 2 : 1;
     }
     if (in_array('_COMPLETECOURSE', $filter_cols)) {
         $colspan_stats += $show_percent ? 2 : 1;
     }
     $buffer->openTable();
     $th1 = array(array('colspan' => $colspan_course + $colspan_classrooms_editions, 'style' => 'align-center', 'value' => $lang->def('_COURSE')), array('colspan' => $colspan_stats, 'style' => 'align-center', 'value' => $rg_lang->def('_USERS')));
     $th2 = array();
     $th2[] = array('colspan' => $colspan_course, 'value' => '');
     if ($show_classrooms_editions) {
         $th2[] = array('colspan' => $colspan_classrooms_editions, 'style' => 'align-center', 'value' => Lang::t('_CLASSROOM', 'classroom'));
     }
     if (in_array('_INSCR', $filter_cols)) {
         $th2[] = array('style' => 'align-center', 'value' => $rg_lang->def('_USER_STATUS_SUBS'));
     }
     if (in_array('_MUSTBEGIN', $filter_cols)) {
         $th2[] = array('colspan' => $show_percent ? 2 : 1, 'style' => 'align-center', 'value' => $rg_lang->def('_MUSTBEGIN'));
     }
     if (in_array('_USER_STATUS_BEGIN', $filter_cols)) {
         $th2[] = array('colspan' => $show_percent ? 2 : 1, 'style' => 'align-center', 'value' => $rg_lang->def('_USER_STATUS_BEGIN'));
     }
     if (in_array('_COMPLETECOURSE', $filter_cols)) {
         $th2[] = array('colspan' => $show_percent ? 2 : 1, 'style' => 'align-center', 'value' => $rg_lang->def('_COMPLETED'));
     }
     $th3 = array();
     if (in_array('_CODE_COURSE', $filter_cols)) {
         $th3[] = $lang->def('_COURSE_CODE');
     }
     if (in_array('_NAME_COURSE', $filter_cols)) {
         $th3[] = $lang->def('_COURSE_NAME');
     }
     if (in_array('_COURSE_CATEGORY', $filter_cols)) {
         $th3[] = $lang->def('_CATEGORY');
     }
     if (in_array('_COURSESTATUS', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $lang->def('_STATUS'));
     }
     if (in_array('_COURSECATALOGUE', $filter_cols)) {
         $th3[] = $lang->def('_CATALOGUE');
     }
     if (in_array('_PUBLICATION_DATE', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $lang->def('_CREATION_DATE'));
     }
     if (in_array('_LANGUAGE', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $lang->def('_COURSE_LANG_METHOD'));
     }
     if (in_array('_DIFFICULT', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $lang->def('_DIFFICULTY'));
     }
     if (in_array('_DATE_BEGIN', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $lang->def('_DATE_BEGIN'));
     }
     if (in_array('_DATE_END', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $lang->def('_DATE_END'));
     }
     if (in_array('_TIME_BEGIN', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $lang->def('_HOUR_BEGIN'));
     }
     if (in_array('_TIME_END', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $lang->def('_HOUR_END'));
     }
     if (in_array('_MAX_NUM_SUBSCRIBED', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $lang->def('_MAX_NUM_SUBSCRIBE'));
     }
     if (in_array('_MIN_NUM_SUBSCRIBED', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $lang->def('_MIN_NUM_SUBSCRIBE'));
     }
     if (in_array('_CREDITS', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => Lang::t('_CREDITS', 'standard'));
     }
     if (in_array('_PRICE', $filter_cols)) {
         $th3[] = $lang->def('_COURSE_PRIZE');
     }
     if (in_array('_ADVANCE', $filter_cols)) {
         $th3[] = $lang->def('_COURSE_ADVANCE');
     }
     if (in_array('_COURSE_TYPE', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $lang->def('_COURSE_TYPE'));
     }
     if (in_array('_AUTOREGISTRATION_CODE', $filter_cols)) {
         $th3[] = $lang->def('_AUTOREGISTRATION_CODE');
     }
     if ($show_classrooms_editions) {
         if (in_array('_TH_CLASSROOM_CODE', $filter_cols)) {
             $th3[] = Lang::t('_NAME', 'standard');
         }
         if (in_array('_TH_CLASSROOM_NAME', $filter_cols)) {
             $th3[] = Lang::t('_CODE', 'standard');
         }
         if (in_array('_TH_CLASSROOM_MIN_DATE', $filter_cols)) {
             $th3[] = array('style' => 'align-center', 'value' => Lang::t('_DATE_BEGIN', 'standard'));
         }
         if (in_array('_TH_CLASSROOM_MAX_DATE', $filter_cols)) {
             $th3[] = array('style' => 'align-center', 'value' => Lang::t('_DATE_END', 'standard'));
         }
     }
     if (in_array('_INSCR', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $rg_lang->def('_NUM'));
     }
     if (in_array('_MUSTBEGIN', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $rg_lang->def('_NUM', 'report'));
         if ($show_percent) {
             $th3[] = array('style' => 'align-center', 'value' => $rg_lang->def('_PERC'));
         }
     }
     if (in_array('_USER_STATUS_BEGIN', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $rg_lang->def('_NUM', 'report'));
         if ($show_percent) {
             $th3[] = array('style' => 'align-center', 'value' => $rg_lang->def('_PERC'));
         }
     }
     if (in_array('_COMPLETECOURSE', $filter_cols)) {
         $th3[] = array('style' => 'align-center', 'value' => $rg_lang->def('_NUM', 'report'));
         if ($show_percent) {
             $th3[] = array('style' => 'align-center', 'value' => $rg_lang->def('_PERC'));
         }
     }
     if (in_array('_TOTAL_SESSION', $filter_cols)) {
         $th1[] = array('style' => 'align-center', 'value' => $rg_lang->def('_TOTAL_SESSION'));
         $th2[] = '';
         $th3[] = '';
     }
     $buffer->openHeader();
     $buffer->addHeader($th1);
     $buffer->addHeader($th2);
     $buffer->addHeader($th3);
     $buffer->closeHeader();
     $i = 0;
     $tot_iscr = $tot_itinere = $tot_nobegin = $tot_comple = '';
     $tot_perc_itinere = $tot_perc_nobegin = $tot_perc_comple = '';
     $total_time = 0;
     $array_status = array(CST_PREPARATION => $lang->def('_CST_PREPARATION', 'course', 'lms'), CST_AVAILABLE => $lang->def('_CST_AVAILABLE', 'course', 'lms'), CST_EFFECTIVE => $lang->def('_CST_CONFIRMED', 'course', 'lms'), CST_CONCLUDED => $lang->def('_CST_CONCLUDED', 'course', 'lms'), CST_CANCELLED => $lang->def('_CST_CANCELLED', 'course', 'lms'));
     //extract course categories
     $query = "SELECT idCategory, path" . " FROM " . $GLOBALS['prefix_lms'] . "_category";
     $result = sql_query($query);
     $array_category = array(0 => $lang->def('_NONE'));
     while (list($id_cat, $name_cat) = sql_fetch_row($result)) {
         $array_category[$id_cat] = substr($name_cat, 5, strlen($name_cat) - 5);
     }
     //strrpos($name_cat, '/') + 1 );
     //extract course catalogues and relations
     $query = "SELECT idCatalogue, name" . " FROM " . $GLOBALS['prefix_lms'] . "_catalogue";
     $result = sql_query($query);
     $array_catalogue = array();
     while (list($id_cat, $name_cat) = sql_fetch_row($result)) {
         $array_catalogue[$id_cat] = $name_cat;
     }
     //strrpos($name_cat, '/') + 1 );
     $catalogue_entries = array();
     $query = "select * FROM " . $GLOBALS['prefix_lms'] . "_catalogue_entry ";
     //where idst_member in (...)
     $result = sql_query($query);
     while (list($idcat, $entry, $type) = sql_fetch_row($result)) {
         switch ($type) {
             case 'course':
                 if (!isset($catalogue_entries[$entry])) {
                     $catalogue_entries[$entry] = array();
                 }
                 $catalogue_entries[$entry][] = $idcat;
                 break;
             case 'coursepath':
                 //...
                 break;
         }
         //end switch
     }
     $difficult_trans = array('veryeasy' => Lang::t('_DIFFICULT_VERYEASY', 'standard'), 'easy' => Lang::t('_DIFFICULT_EASY', 'standard'), 'medium' => Lang::t('_DIFFICULT_MEDIUM', 'standard'), 'difficult' => Lang::t('_DIFFICULT_DIFFICULT', 'standard'), 'verydifficult' => Lang::t('_DIFFICULT_VERYDIFFICULT', 'standard'));
     $course_man = new Man_Course();
     $buffer->openBody();
     while (list($index, $course_info) = each($id_courses)) {
         $idc = $id_date = 0;
         if ($show_classrooms_editions) {
             if (isset($course_info['course_type']) && $course_info['course_type'] == 'classroom') {
                 list($idc, $id_date) = explode('_', $index);
             } else {
                 $idc = $index;
             }
         } else {
             $idc = $index;
         }
         $info_course = $course_man->getCourseInfo($idc);
         $code_c = $course_info['code'];
         $name_c = $course_info['name'];
         $_date_create = $info_course['create_date'] != '0000-00-00 00:00:00' && $info_course['create_date'] != "" ? Format::date($info_course['create_date'], 'datetime') : "";
         $_date_begin = $info_course['date_begin'] != '0000-00-00 00:00:00' && $info_course['date_begin'] != "" ? Format::date($info_course['date_begin'], 'datetime') : "";
         $_date_end = $info_course['date_end'] != '0000-00-00 00:00:00' && $info_course['date_end'] != "" ? Format::date($info_course['date_end'], 'datetime') : "";
         $trow = array();
         if (in_array('_CODE_COURSE', $filter_cols)) {
             $trow[] = addslashes($code_c);
         }
         if (in_array('_NAME_COURSE', $filter_cols)) {
             $trow[] = addslashes($name_c);
         }
         if (in_array('_COURSE_CATEGORY', $filter_cols)) {
             $trow[] = $array_category[$info_course['idCategory']];
         }
         if (in_array('_COURSESTATUS', $filter_cols)) {
             $trow[] = isset($array_status[$info_course['status']]) ? $array_status[$info_course['status']] : '';
         }
         if (in_array('_COURSECATALOGUE', $filter_cols)) {
             $temp = array();
             if (isset($catalogue_entries[$info_course['idCourse']])) {
                 foreach ($catalogue_entries[$info_course['idCourse']] as $idcat) {
                     $temp[] = $array_catalogue[$idcat];
                 }
             }
             $trow[] = implode(', ', $temp);
         }
         if (in_array('_PUBLICATION_DATE', $filter_cols)) {
             $trow[] = array('style' => 'align-center', 'value' => $_date_create);
         }
         if (in_array('_LANGUAGE', $filter_cols)) {
             $trow[] = $info_course['lang_code'];
         }
         if (in_array('_DIFFICULT', $filter_cols)) {
             $trow[] = isset($difficult_trans[$info_course['difficult']]) ? $difficult_trans[$info_course['difficult']] : "";
         }
         if (in_array('_DATE_BEGIN', $filter_cols)) {
             $trow[] = array('style' => 'align-center', 'value' => $_date_begin);
         }
         if (in_array('_DATE_END', $filter_cols)) {
             $trow[] = array('style' => 'align-center', 'value' => $_date_end);
         }
         if (in_array('_TIME_BEGIN', $filter_cols)) {
             $trow[] = $info_course['hour_begin'] < 0 ? '' : $info_course['hour_begin'];
         }
         if (in_array('_TIME_END', $filter_cols)) {
             $trow[] = $info_course['hour_end'] < 0 ? '' : $info_course['hour_end'];
         }
         if (in_array('_MAX_NUM_SUBSCRIBED', $filter_cols)) {
             $trow[] = $info_course['max_num_subscribe'] ? $info_course['max_num_subscribe'] : '';
         }
         if (in_array('_MIN_NUM_SUBSCRIBED', $filter_cols)) {
             $trow[] = $info_course['min_num_subscribe'] ? $info_course['min_num_subscribe'] : '';
         }
         if (in_array('_CREDITS', $filter_cols)) {
             $trow[] = isset($info_course['credits']) ? $info_course['credits'] : '';
         }
         if (in_array('_PRICE', $filter_cols)) {
             $trow[] = $info_course['prize'] != '' ? $info_course['prize'] : '0';
         }
         if (in_array('_ADVANCE', $filter_cols)) {
             $trow[] = $info_course['advance'] != '' ? $info_course['advance'] : '0';
         }
         if (in_array('_COURSE_TYPE', $filter_cols)) {
             $trow[] = array('style' => 'align-center', 'value' => $this->_translateCourseType($info_course['course_type']));
         }
         if (in_array('_AUTOREGISTRATION_CODE', $filter_cols)) {
             $trow[] = $info_course['autoregistration_code'];
         }
         if ($show_classrooms_editions) {
             $e_code = $e_name = $date_1 = $date_2 = '';
             if ($id_date > 0 && isset($classrooms_editions_info['classrooms'][$id_date])) {
                 $e_code = $classrooms_editions_info['classrooms'][$id_date]->code;
                 $e_name = $classrooms_editions_info['classrooms'][$id_date]->name;
                 $date_1 = Format::date($classrooms_editions_info['classrooms'][$id_date]->date_1, 'datetime');
                 $date_2 = Format::date($classrooms_editions_info['classrooms'][$id_date]->date_2, 'datetime');
             }
             if (in_array('_TH_CLASSROOM_CODE', $filter_cols)) {
                 $trow[] = $e_code;
             }
             if (in_array('_TH_CLASSROOM_NAME', $filter_cols)) {
                 $trow[] = $e_name;
             }
             if (in_array('_TH_CLASSROOM_MIN_DATE', $filter_cols)) {
                 $trow[] = array('style' => 'align-center', 'value' => $date_1);
             }
             if (in_array('_TH_CLASSROOM_MAX_DATE', $filter_cols)) {
                 $trow[] = array('style' => 'align-center', 'value' => $date_2);
             }
         }
         if (isset($num_iscr[$index])) {
             if (in_array('_INSCR', $filter_cols)) {
                 $trow[] = array('style' => 'img-cell', 'value' => $num_iscr[$index]);
             }
             $tot_iscr += $num_iscr[$index];
             //no begin course
             if (in_array('_MUSTBEGIN', $filter_cols)) {
                 if (isset($num_nobegin[$index])) {
                     $perc = $num_nobegin[$index] / $num_iscr[$index] * 100;
                     $tot_nobegin += $num_nobegin[$index];
                     $tot_perc_nobegin += $perc;
                     $trow[] = array('style' => 'img-cell', 'value' => $num_nobegin[$index]);
                     if ($show_percent) {
                         $trow[] = array('style' => 'img-cell', 'value' => number_format($perc, 2, '.', '') . '%');
                     }
                 } else {
                     $trow[] = '';
                     if ($show_percent) {
                         $trow[] = '';
                     }
                 }
             }
             //begin
             if (in_array('_USER_STATUS_BEGIN', $filter_cols)) {
                 if (isset($num_itinere[$index])) {
                     $perc = $num_itinere[$index] / $num_iscr[$index] * 100;
                     $tot_itinere += $num_itinere[$index];
                     $tot_perc_itinere += $perc;
                     $trow[] = array('style' => 'img-cell', 'value' => $num_itinere[$index]);
                     if ($show_percent) {
                         $trow[] = array('style' => 'img-cell', 'value' => number_format($perc, 2, '.', '') . '%');
                     }
                 } else {
                     $trow[] = array('style' => 'img-cell', 'value' => '');
                     if ($show_percent) {
                         $trow[] = array('style' => 'img-cell', 'value' => '');
                     }
                 }
             }
             //end course
             if (in_array('_COMPLETECOURSE', $filter_cols)) {
                 if (isset($num_end[$index])) {
                     $perc = $num_end[$index] / $num_iscr[$index] * 100;
                     $tot_comple += $num_end[$index];
                     $tot_perc_comple += $perc;
                     $trow[] = array('style' => 'img-cell', 'value' => $num_end[$index]);
                     if ($show_percent) {
                         $trow[] = array('style' => 'img-cell', 'value' => number_format($perc, 2, '.', '') . '%');
                     }
                 } else {
                     $trow[] = array('style' => 'img-cell', 'value' => '');
                     if ($show_percent) {
                         $trow[] = array('style' => 'img-cell', 'value' => '');
                     }
                 }
             }
             // time in
             if (in_array('_TOTAL_SESSION', $filter_cols)) {
                 if (isset($time_in_course[$idc])) {
                     $total_time += $time_in_course[$idc];
                     $trow[] = array('style' => 'img-cell', 'value' => (int) ($time_in_course[$idc] / 3600) . 'h ' . substr('0' . (int) ($time_in_course[$idc] % 3600 / 60), -2) . 'm ' . substr('0' . (int) ($time_in_course[$idc] % 60), -2) . 's ');
                 } else {
                     $trow[] = array('style' => 'img-cell', 'value' => '');
                 }
             }
         } else {
             if (in_array('_INSCR', $filter_cols)) {
                 $trow[] = '';
             }
             //no begin course
             if (in_array('_MUSTBEGIN', $filter_cols)) {
                 $trow[] = '';
                 if ($show_percent) {
                     $trow[] = '';
                 }
             }
             //begin
             if (in_array('_USER_STATUS_BEGIN', $filter_cols)) {
                 $trow[] = '';
                 if ($show_percent) {
                     $trow[] = '';
                 }
             }
             //end course
             if (in_array('_COMPLETECOURSE', $filter_cols)) {
                 $trow[] = '';
                 if ($show_percent) {
                     $trow[] = '';
                 }
             }
             // time in
             if (in_array('_TOTAL_SESSION', $filter_cols)) {
                 $trow[] = '';
             }
         }
         //print row
         if (isset($num_iscr[$index]) && $num_iscr[$index]) {
             $buffer->addLine($trow);
         } else {
             $i--;
         }
     }
     $buffer->closeBody();
     $tfoot = array(array('colspan' => $colspan_course + $colspan_classrooms_editions, 'value' => $lang->def('_TOTAL')));
     if (in_array('_INSCR', $filter_cols)) {
         $tfoot[] = $tot_iscr;
     }
     if (in_array('_MUSTBEGIN', $filter_cols)) {
         $tfoot[] = $tot_nobegin;
         if ($show_percent) {
             $tfoot[] = $tot_nobegin ? number_format($tot_nobegin / $tot_iscr * 100, 2, '.', '') . '%' : 'n.d.';
         }
     }
     if (in_array('_USER_STATUS_BEGIN', $filter_cols)) {
         $tfoot[] = $tot_itinere;
         if ($show_percent) {
             $tfoot[] = $tot_itinere ? number_format($tot_itinere / $tot_iscr * 100, 2, '.', '') . '%' : 'n.d.';
         }
     }
     if (in_array('_COMPLETECOURSE', $filter_cols)) {
         $tfoot[] = $tot_comple;
         if ($show_percent) {
             $tfoot[] = $tot_comple ? number_format($tot_comple / $tot_iscr * 100, 2, '.', '') . '%' : 'n.d.';
         }
     }
     if (in_array('_TOTAL_SESSION', $filter_cols)) {
         $tfoot[] = (int) ($total_time / 3600) . 'h ' . substr('0' . (int) ($total_time / 60), -2) . 'm ' . substr('0' . (int) $total_time, -2) . 's ';
     }
     $buffer->setFoot($tfoot);
     $buffer->closeTable();
     //return $output;
     return $buffer->get();
 }