diff --git a/public/main/inc/lib/attendance.lib.php b/public/main/inc/lib/attendance.lib.php index b88f65aaab..211972a4a2 100644 --- a/public/main/inc/lib/attendance.lib.php +++ b/public/main/inc/lib/attendance.lib.php @@ -2226,6 +2226,210 @@ class Attendance $pdf->html_to_pdf_with_template($tableToString); } + /** + * Return all course for a student between dates and order by key date (Y-m-d). + * + * @param int $studentId + * @param \DateTime $startDate + * @param \DateTime $endDate + * @param bool $orderDesc + * + * @return array + */ + public function getCoursesWithAttendance( + $studentId = 0, + DateTime $startDate = null, + DateTime $endDate = null, + $orderDesc = false + ) { + // Lang variables + $presentString = get_lang('Present'); + //$absentString = get_lang('Absent'); + $absentString = '-'; + // Lang variables + $attendanceLib = new Attendance(); + $data = []; + /* + $specialCourses = CourseManager::returnSpecialCourses( + $studentId, false, false + ); + */ + $courses = CourseManager::returnCourses( + $studentId, + false, + false + ); + /* Get course with (in_category) and without (not_category) category */ + foreach ($courses as $coursesKey => $courseData) { + /* + * $coursesKey can be in_category or not_category for courses + * */ + $totalCoursesNoCategory = count($courseData); + for ($i = 0; $i < $totalCoursesNoCategory; $i++) { + $courseItem = $courseData[$i]; + $courseId = $courseItem['course_id']; + + /* Get all attendance by courses*/ + $attenances = $attendanceLib->get_attendances_list($courseId); + $temp = []; + $sheetsProccessed = []; + $tempDate = []; + foreach ($attenances as $attendanceData) { + $attendanceId = $attendanceData['id']; + $sheets = $attendanceLib->get_users_attendance_sheet( + $attendanceId, + $studentId, + 0, + $courseId, + $startDate, + $endDate + ); + + $sheetsProccessed[] = []; + foreach ($sheets as $sheetData) { + $totalb = count($sheetData); + $tempDate = []; + for ($ii = 0; $ii < $totalb; $ii++) { + $attendancesProccess = $sheetData[$ii]; + if (!empty($attendancesProccess)) { + $dateTemp = $attendancesProccess['0']; + $attendancesProccess[0] = $attendancesProccess[1]; + $attendancesProccess[1] = $dateTemp; + + $attendancesProccess[2] = $courseItem['title']; + $attendancesProccess['courseTitle'] = $courseItem['title']; + + $attendancesProccess[3] = $courseItem['real_id']; + $attendancesProccess['courseId'] = $courseItem['real_id']; + + $attendancesProccess[4] = $attendanceData['name']; + $attendancesProccess['attendanceName'] = $attendanceData['name']; + $attendancesProccess['courseCode'] = $courseItem['course_code']; + + $attendancesProccess[5] = $attendanceData['id']; + $attendancesProccess['attendanceId'] = $attendanceData['id']; + if ($attendancesProccess['presence'] == 1) { + $attendancesProccess['presence'] = $presentString; + $attendancesProccess[0] = 1; + } else { + $attendancesProccess['presence'] = $absentString; + $attendancesProccess[0] = 0; + } + $attendancesProccess['session'] = 0; + $attendancesProccess['sessionName'] = ''; + $tempDate[] = $attendancesProccess; + $dateKey = new DateTime($dateTemp); + /* + $attendancesProccess['teacher'] = ''; + if(isset($courseItem['teachers']) and isset($courseItem['teachers'][0])){ + $attendancesProccess['teacher'] = $courseItem['teachers'][0]['fullname']; + } + */ + $data[$dateKey->format('Y-m-d')][] = $attendancesProccess; + } + } + } + $sheetsProccessed[] = $tempDate; + $temp[] = $sheetsProccessed; + } + $courses['not_category'][$i]['attendanceSheet'] = $temp; + } + } + + /* Sessions */ + $studentId = (int) $studentId; + $sql = " + SELECT + session_id, + c_id + FROM + session_rel_course_rel_user + WHERE + user_id = $studentId"; + + $rs = Database::query($sql); + // get info from sessions + while ($row = Database::fetch_array($rs, 'ASSOC')) { + $courseId = $row['c_id']; + $sessionId = $row['session_id']; + $courseItem = api_get_course_info_by_id($courseId); + + $attenances = $attendanceLib->get_attendances_list( + $courseId, + $sessionId + ); + $temp = []; + $sheetsProccessed = []; + $tempDate = []; + foreach ($attenances as $attendanceData) { + $attendanceId = $attendanceData['id']; + $sheets = $attendanceLib->get_users_attendance_sheet( + $attendanceId, + $studentId, + 0, + $courseId, + $startDate, + $endDate + ); + + $sheetsProccessed[] = []; + foreach ($sheets as $sheetData) { + $totalb = count($sheetData); + $tempDate = []; + for ($ii = 0; $ii < $totalb; $ii++) { + $work = $sheetData[$ii]; + $attendancesProccess = $work; + if (!empty($attendancesProccess)) { + $dateTemp = $attendancesProccess['0']; + $attendancesProccess[0] = $attendancesProccess[1]; + $attendancesProccess[1] = $dateTemp; + $attendancesProccess[2] = $courseItem['title']; + $attendancesProccess['courseTitle'] = $courseItem['title']; + $attendancesProccess[3] = $courseItem['real_id']; + $attendancesProccess['courseId'] = $courseItem['real_id']; + $attendancesProccess[4] = $attendanceData['name']; + $attendancesProccess['attendanceName'] = $attendanceData['name']; + $attendancesProccess[5] = $attendanceData['id']; + $attendancesProccess['attendanceId'] = $attendanceData['id']; + $attendancesProccess['courseCode'] = $courseItem['official_code']; + if ($attendancesProccess['presence'] == 1) { + $attendancesProccess['presence'] = $presentString; + $attendancesProccess[0] = 1; + } else { + $attendancesProccess['presence'] = $absentString; + $attendancesProccess[0] = 0; + } + $attendancesProccess['session'] = $sessionId; + $attendancesProccess['sessionName'] = api_get_session_name($sessionId); + + $tempDate[] = $attendancesProccess; + $dateKey = new DateTime($dateTemp); + /* + $attendancesProccess['teacher'] = ''; + if(isset($courseItem['tutor_name']) ){ + $attendancesProccess['teacher'] = $courseItem['tutor_name']; + } + */ + $data[$dateKey->format('Y-m-d')][] = $attendancesProccess; + } + } + } + $sheetsProccessed[] = $tempDate; + $temp[] = $sheetsProccessed; + } + $courses['session'][$i]['attendanceSheet'] = $temp; + } + + /* Order desc by date, by default */ + if ($orderDesc == true) { + ksort($data); + } else { + krsort($data); + } + + return $data; + } + public function setAttendanceForm(FormValidator $form, CAttendance $attendance = null) { $skillList = []; diff --git a/public/main/inc/lib/pear/HTML/Table.php b/public/main/inc/lib/pear/HTML/Table.php index 4eb8481b82..c2c29d9b41 100644 --- a/public/main/inc/lib/pear/HTML/Table.php +++ b/public/main/inc/lib/pear/HTML/Table.php @@ -660,6 +660,27 @@ class HTML_Table extends HTML_Common $this->_tbodies[$body]->setHeaderContents($row, $col, $contents, $attributes); } + public function setHeaders($headers) + { + $column = 0; + foreach ($headers as $header) { + $this->setHeaderContents(0, $column, $header); + $column++; + } + } + + public function setData($data) + { + $row = 1; + foreach ($data as $line) { + $column = 0; + foreach ($line as $content) { + $this->setCellContents($row, $column, $content); + $column++; + } + $row++; + } + } /** * Adds a table row and returns the row identifier * @param array $contents (optional) Must be a indexed array of diff --git a/public/main/inc/lib/pear/Text/CAPTCHA.php b/public/main/inc/lib/pear/Text/CAPTCHA.php index 00778dc9c3..deec21d66b 100644 --- a/public/main/inc/lib/pear/Text/CAPTCHA.php +++ b/public/main/inc/lib/pear/Text/CAPTCHA.php @@ -11,13 +11,6 @@ * @license http://www.opensource.org/licenses/bsd-license.php BSD License * @link http://pear.php.net/package/Text_CAPTCHA */ -/** - * Require Exception class for error handling. - */ -//require_once 'Text/CAPTCHA/Exception.php'; -/** - * Require Text_Password class for generating the phrase. - */ //require_once 'Text/Password.php'; /** diff --git a/public/main/mySpace/access_details_session.php b/public/main/mySpace/access_details_session.php index d85ab25b9a..09a9a5fd5c 100644 --- a/public/main/mySpace/access_details_session.php +++ b/public/main/mySpace/access_details_session.php @@ -356,7 +356,7 @@ if ($form->validate()) { $tpl = new Template('', false, false, false, true, false, false); $tpl->assign('title', get_lang('Certificate of achievement')); $tpl->assign('student', $userInfo['complete_name']); - $tpl->assign('table_progress', $totalTable.$totalCourseSessionTable.''.$courseSessionTable); + $tpl->assign('table_progress', $title.$first.$totalCourseSessionTable.''.$courseSessionTable); $content = $tpl->fetch($tpl->get_template('my_space/pdf_export_student.tpl')); @@ -424,72 +424,81 @@ if ($formByDay->validate()) { $list = Tracking::get_time_spent_on_the_platform($userId, 'wide', $from, $to, true); $newList = []; - foreach ($list as $item) { - $key = substr($item['login_date'], 0, 10); - - $dateLogout = substr($item['logout_date'], 0, 10); - if ($dateLogout > $key) { - $itemLogoutOriginal = $item['logout_date']; - $fromItemObject = DateTime::createFromFormat('Y-m-d H:i:s', $item['login_date'], new DateTimeZone('UTC')); - $toItemObject = DateTime::createFromFormat('Y-m-d H:i:s', $item['logout_date'], new DateTimeZone('UTC')); - $item['logout_date'] = api_get_utc_datetime($key.' 23:59:59'); - - $period = new DatePeriod( - $fromItemObject, - new DateInterval('P1D'), - $toItemObject - ); - - $counter = 1; - $itemKey = null; - foreach ($period as $value) { - $dateToCheck = api_get_utc_datetime($value->format('Y-m-d').' 00:00:01'); - $end = api_get_utc_datetime($value->format('Y-m-d').' 23:59:59'); - if (1 === $counter) { - $dateToCheck = $item['login_date']; - } - $itemKey = substr($value->format('Y-m-d'), 0, 10); + if (!empty($list)) { + foreach ($list as $item) { + $key = substr($item['login_date'], 0, 10); + + $dateLogout = substr($item['logout_date'], 0, 10); + if ($dateLogout > $key) { + $itemLogoutOriginal = $item['logout_date']; + $fromItemObject = DateTime::createFromFormat( + 'Y-m-d H:i:s', + $item['login_date'], + new DateTimeZone('UTC') + ); + $toItemObject = DateTime::createFromFormat( + 'Y-m-d H:i:s', + $item['logout_date'], + new DateTimeZone('UTC') + ); + $item['logout_date'] = api_get_utc_datetime($key.' 23:59:59'); - if (isset($newList[$itemKey])) { - if ($newList[$itemKey]['login_date']) { - $dateToCheck = $newList[$itemKey]['login_date']; + $period = new DatePeriod( + $fromItemObject, + new DateInterval('P1D'), + $toItemObject + ); + + $counter = 1; + $itemKey = null; + foreach ($period as $value) { + $dateToCheck = api_get_utc_datetime($value->format('Y-m-d').' 00:00:01'); + $end = api_get_utc_datetime($value->format('Y-m-d').' 23:59:59'); + if (1 === $counter) { + $dateToCheck = $item['login_date']; } - } + $itemKey = substr($value->format('Y-m-d'), 0, 10); - $newList[$itemKey] = [ - 'login_date' => $dateToCheck, - 'logout_date' => $end, - 'diff' => 0, - ]; + if (isset($newList[$itemKey])) { + if ($newList[$itemKey]['login_date']) { + $dateToCheck = $newList[$itemKey]['login_date']; + } + } - $counter++; - } + $newList[$itemKey] = [ + 'login_date' => $dateToCheck, + 'logout_date' => $end, + 'diff' => 0, + ]; - if (!empty($itemKey) && isset($newList[$itemKey])) { - if ( - substr(api_get_local_time($newList[$itemKey]['login_date']), 0, 10) === - substr(api_get_local_time($itemLogoutOriginal), 0, 10) - ) { - $newList[$itemKey]['logout_date'] = $itemLogoutOriginal; + $counter++; + } + + if (!empty($itemKey) && isset($newList[$itemKey])) { + if ( + substr(api_get_local_time($newList[$itemKey]['login_date']), 0, 10) === + substr(api_get_local_time($itemLogoutOriginal), 0, 10) + ) { + $newList[$itemKey]['logout_date'] = $itemLogoutOriginal; + } } } - } - if (!isset($newList[$key])) { - $newList[$key] = [ - 'login_date' => $item['login_date'], - 'logout_date' => $item['logout_date'], - 'diff' => 0, - ]; - } else { - $newList[$key] = [ - 'login_date' => $newList[$key]['login_date'], - 'logout_date' => $item['logout_date'], - 'diff' => 0, - ]; + if (!isset($newList[$key])) { + $newList[$key] = [ + 'login_date' => $item['login_date'], + 'logout_date' => $item['logout_date'], + 'diff' => 0, + ]; + } else { + $newList[$key] = [ + 'login_date' => $newList[$key]['login_date'], + 'logout_date' => $item['logout_date'], + 'diff' => 0, + ]; + } } } - if (!empty($newList)) { foreach ($newList as &$item) { $item['diff'] = api_strtotime($item['logout_date']) - api_strtotime($item['login_date']); diff --git a/public/main/mySpace/admin.php b/public/main/mySpace/admin.php index bd209883d4..a49c34822e 100644 --- a/public/main/mySpace/admin.php +++ b/public/main/mySpace/admin.php @@ -1,4 +1,5 @@ "index.php", "name" => get_lang('Reporting')]; -Display :: display_header($nameTools); - +Display::display_header($nameTools); +$data = []; api_display_tool_title($nameTools); // Database Table Definitions @@ -39,12 +39,16 @@ $result_admins = Database::query($sql); if (api_is_western_name_order()) { echo ' - - '; + + + + '; } else { echo '
'.get_lang('First name').''.get_lang('Last name').''.get_lang('e-mail').'
'.get_lang('FirstName').''.get_lang('LastName').''.get_lang('Email').'
- - '; + + + + '; } if (api_is_western_name_order(PERSON_NAME_DATA_EXPORT)) { @@ -100,7 +104,7 @@ if (Database::num_rows($result_admins) > 0) { echo '
'.get_lang('Last name').''.get_lang('First name').''.get_lang('e-mail').'
'.get_lang('LastName').''.get_lang('FirstName').''.get_lang('Email').'
'; if (isset($_POST['export'])) { - export_csv($header, $data, 'administrators.csv'); + Export::arrayToCsv($header + $data, 'administrators.csv'); } echo " diff --git a/public/main/mySpace/coaches.php b/public/main/mySpace/coaches.php index fad3e483bb..400cbf0ca8 100644 --- a/public/main/mySpace/coaches.php +++ b/public/main/mySpace/coaches.php @@ -18,10 +18,10 @@ if (isset($_GET["id_student"])) { $interbreadcrumb[] = ["url" => "student.php", "name" => get_lang('Learners')]; } -Display :: display_header($nameTools); +Display::display_header($nameTools); api_display_tool_title($nameTools); - +$data = []; $tbl_course = Database::get_main_table(TABLE_MAIN_COURSE); $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); $tbl_user = Database::get_main_table(TABLE_MAIN_USER); @@ -31,9 +31,6 @@ $tbl_session_rel_course_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_C $tbl_session_rel_user = Database::get_main_table(TABLE_MAIN_SESSION_USER); $tbl_track_login = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LOGIN); -/** - * MAIN PART. - */ if (isset($_POST['export'])) { $order_clause = api_is_western_name_order(PERSON_NAME_DATA_EXPORT) ? ' ORDER BY firstname, lastname' : ' ORDER BY lastname, firstname'; } else { @@ -57,7 +54,7 @@ if (isset($_GET["id_student"])) { $sql_coachs = "SELECT DISTINCT user_id as id_coach, user.id as user_id, lastname, firstname FROM $tbl_user as user, - $tbl_session_rel_course_user as srcu, + $tbl_session_rel_course_rel_user as srcu, $tbl_course_user as course_rel_user, $tbl_course as c WHERE @@ -74,7 +71,7 @@ if (isset($_GET["id_student"])) { $result_coachs = Database::query($sql_coachs); if (api_is_western_name_order()) { - echo ' + echo '
@@ -83,7 +80,7 @@ if (api_is_western_name_order()) { '; } else { - echo '
'.get_lang('First name').' '.get_lang('Last name').''.get_lang('Learners').'
+ echo '
@@ -209,7 +206,7 @@ if (Database::num_rows($result_coachs) > 0) { echo '
'.get_lang('Last name').' '.get_lang('First name').'
'; if (isset($_POST['export'])) { - export_csv($header, $data, 'coaches.csv'); + Export::arrayToCsv($header + $data, 'coaches.csv'); } echo "

"; diff --git a/public/main/mySpace/lp_tracking.php b/public/main/mySpace/lp_tracking.php index d58394460d..3a12f7ed4b 100644 --- a/public/main/mySpace/lp_tracking.php +++ b/public/main/mySpace/lp_tracking.php @@ -90,7 +90,7 @@ switch ($action) { $itemViewId = isset($_REQUEST['extend_attempt_id']) ? $_REQUEST['extend_attempt_id'] : 0; $em = Database::getManager(); - $repo = $em->getRepository('ChamiloCourseBundle:CLpItemView'); + $repo = $em->getRepository(CLpItemView::class); /** @var CLpItemView $itemView */ $itemView = $repo->find($itemViewId); @@ -98,8 +98,8 @@ switch ($action) { api_not_allowed(); } - $view = $em->getRepository('ChamiloCourseBundle:CLpView')->find($itemView->getLpViewId()); - $lp = $em->getRepository('ChamiloCourseBundle:CLp')->find($view->getLpId()); + $view = $em->getRepository(\Chamilo\CourseBundle\Entity\CLpView::class)->find($itemView->getLpViewId()); + $lp = $em->getRepository(\Chamilo\CourseBundle\Entity\CLp::class)->find($view->getLpId()); $duration = learnpathItem::getScormTimeFromParameter('js', $itemView->getTotalTime()); $endTime = $itemView->getStartTime() + $itemView->getTotalTime(); diff --git a/public/main/mySpace/myStudents.php b/public/main/mySpace/myStudents.php index 82bc3d8fac..c0cc3ec21d 100644 --- a/public/main/mySpace/myStudents.php +++ b/public/main/mySpace/myStudents.php @@ -17,7 +17,7 @@ require_once '../work/work.lib.php'; api_block_anonymous_users(); //$htmlHeadXtra[] = ''; - +$htmlHeadXtra[] = null; $export = isset($_GET['export']) ? $_GET['export'] : false; $sessionId = isset($_GET['sid']) ? (int) $_GET['sid'] : 0; $origin = api_get_origin(); @@ -49,7 +49,8 @@ $allowedToTrackUser = api_is_drh() || api_is_student_boss() || api_is_course_admin() || - api_is_teacher(); + api_is_teacher() +; if (false === $allowedToTrackUser && !empty($courseInfo)) { if (empty($sessionId)) { @@ -427,7 +428,7 @@ switch ($action) { true, false ); - } catch (MpdfException $e) { + } catch (\Mpdf\MpdfException $e) { error_log($e); } exit; @@ -1915,7 +1916,7 @@ if (empty($details)) { /*$hookContents = $hookQuizTracking ? $hookQuizTracking->notifyTrackingContent($exercise_id, $studentId) : [];*/ - $hookContents = ''; + $hookContents = []; if (!isset($score_percentage) && $count_attempts > 0) { $scores_lp = Tracking::get_avg_student_exercise_score( $studentId,