From cc87b80bdf38a4e94711b053b31313b29729d03f Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Thu, 26 Feb 2015 16:24:28 -0500 Subject: [PATCH 1/4] Certificates report and downloads - refs BT#9442 --- main/gradebook/certificate_report.php | 150 ++++++++++++++++++ main/mySpace/index.php | 6 +- .../default/gradebook/certificate_report.tpl | 117 ++++++++++++++ 3 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 main/gradebook/certificate_report.php create mode 100644 main/template/default/gradebook/certificate_report.tpl diff --git a/main/gradebook/certificate_report.php b/main/gradebook/certificate_report.php new file mode 100644 index 0000000000..04e0a2072e --- /dev/null +++ b/main/gradebook/certificate_report.php @@ -0,0 +1,150 @@ + + * @package chamilo.gradebook + */ +$language_file = array('gradebook', 'exercice'); +$cidReset = true; + +require_once '../inc/global.inc.php'; + +$this_section = SECTION_TRACKING; + +api_block_anonymous_users(); + +$interbreadcrumb[] = array( + "url" => api_get_path(WEB_CODE_PATH) . "mySpace/index.php", + "name" => get_lang("MySpace") +); + +$selectedSession = isset($_POST['session']) && !empty($_POST['session']) ? intval($_POST['session']) : 0; +$selectedCourse = isset($_POST['course']) && !empty($_POST['course']) ? intval($_POST['course']) : 0; +$selectedMonth = isset($_POST['month']) && !empty($_POST['month']) ? intval($_POST['month']) : 0; +$selectedYear = isset($_POST['year']) && !empty($_POST['year']) ? $_POST['year'] : null; + +$userId = api_get_user_id(); +$sessions = SessionManager::getSessionsCoachedByUser($userId); + +if ($selectedSession > 0) { + $courses = SessionManager::get_course_list_by_session_id($selectedSession); + + if (is_array($courses)) { + foreach ($courses as &$course) { + $course['real_id'] = $course['id']; + } + } +} else { + $courses = CourseManager::get_courses_list_by_user_id($userId); + + if (is_array($courses)) { + foreach ($courses as &$course) { + $courseInfo = api_get_course_info_by_id($course['real_id']); + + $course = array_merge($course, $courseInfo); + } + } +} + +$months = array(); + +for ($key = 1; $key <= 12; $key++) { + $months[] = array( + 'key' => $key, + 'name' => sprintf("%02d", $key) + ); +} + +$exportAllLink = null; +$certificateStudents = array(); + +$searchSessionAndCourse = $selectedSession > 0 && $selectedCourse > 0; +$searchCourseOnly = $selectedSession <= 0 && $selectedCourse > 0; + +if ($searchSessionAndCourse || $searchCourseOnly) { + $selectedCourseInfo = api_get_course_info_by_id($selectedCourse); + + $gradebookCategories = Category::load(null, null, $selectedCourseInfo['code'], null, false, $selectedSession); + + $gradebook = current($gradebookCategories); + + $exportAllLink = api_get_path(WEB_CODE_PATH) . "gradebook/gradebook_display_certificate.php?"; + $exportAllLink .= http_build_query(array( + "action" => "export_all_certificates", + "cidReq" => $selectedCourseInfo['code'], + "id_session" => 0, + "gidReq" => 0, + "cat_id" => $gradebook->get_id() + )); + + $studentList = GradebookUtils::get_list_users_certificates($gradebook->get_id()); + + $certificateStudents = array(); + + if (is_array($studentList)) { + foreach ($studentList as $student) { + $certificateStudent = array( + 'fullName' => api_get_person_name($student['firstname'], $student['lastname']), + 'certificates' => array() + ); + + $studentCertificates = GradebookUtils::get_list_gradebook_certificates_by_user_id( + $student['user_id'], + $gradebook->get_id() + ); + + if (!is_array($studentCertificates)) { + continue; + } + + foreach ($studentCertificates as $certificate) { + $creationDate = new DateTime($certificate['created_at']); + $creationMonth = $creationDate->format('m'); + $creationYear = $creationDate->format('Y'); + $creationMonthYear = $creationDate->format('m Y'); + + if ($selectedMonth > 0 && empty($selectedYear)) { + if ($creationMonth != $selectedMonth) { + continue; + } + } elseif ($selectedMonth <= 0 && !empty($selectedYear)) { + if ($creationYear != $selectedYear) { + continue; + } + } elseif ($selectedMonth > 0 && !empty($selectedYear)) { + if ($creationMonthYear != sprintf("%d %s", $selectedMonth, $selectedYear)) { + continue; + } + } + + $certificateStudent['certificates'][] = array( + 'createdAt' => api_convert_and_format_date($certificate['created_at']), + 'id' => $certificate['id'] + ); + } + + if (count($certificateStudent['certificates']) > 0) { + $certificateStudents[] = $certificateStudent; + } + } + } +} + +/* View */ +$template = new Template(get_lang('GradebookListOfStudentsCertificates')); + +$template->assign('selectedSession', $selectedSession); +$template->assign('selectedCourse', $selectedCourse); +$template->assign('selectedMonth', $selectedMonth); +$template->assign('selectedYear', $selectedYear); +$template->assign('sessions', $sessions); +$template->assign('courses', $courses); +$template->assign('months', $months); +$template->assign('exportAllLink', $exportAllLink); +$template->assign('certificateStudents', $certificateStudents); +$content = $template->fetch("default/gradebook/certificate_report.tpl"); + +$template->assign('content', $content); + +$template->display_one_col_template(); diff --git a/main/mySpace/index.php b/main/mySpace/index.php index ede696a7ff..9e0ee77ce8 100755 --- a/main/mySpace/index.php +++ b/main/mySpace/index.php @@ -6,7 +6,7 @@ * @package chamilo.reporting */ -$language_file = array('registration', 'index', 'tracking', 'admin', 'exercice'); +$language_file = array('registration', 'index', 'tracking', 'admin', 'exercice', 'gradebook'); // resetting the course id $cidReset = true; @@ -150,6 +150,10 @@ if (!empty($session_id) && Display::return_icon('stats.png', get_lang('MyStats'),'',ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH)."auth/my_progress.php" ); + echo Display::url( + Display::return_icon("certificate_list.png", get_lang("GradebookSeeListOfStudentsCertificates"), array(), ICON_SIZE_MEDIUM), + api_get_path(WEB_CODE_PATH) . "gradebook/certificate_report.php" + ); } // Actions menu diff --git a/main/template/default/gradebook/certificate_report.tpl b/main/template/default/gradebook/certificate_report.tpl new file mode 100644 index 0000000000..e09245f3cd --- /dev/null +++ b/main/template/default/gradebook/certificate_report.tpl @@ -0,0 +1,117 @@ + + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+
+ +
+
+
+ +

{{ 'GradebookListOfStudentsCertificates' | get_lang }}

+ +{% if not certificateStudents is empty %} +

+ {{ 'ExportAllCertificatesToPDF' | get_lang }} +

+ + + + + + + + + + + + + + + + + + {% for student in certificateStudents %} + + + + + + {% endfor %} + +
{{ 'Student' | get_lang }}{{ 'Date' | get_lang }}{{ 'Certificate' | get_lang }}
{{ 'Student' | get_lang }}{{ 'Date' | get_lang }}{{ 'Certificate' | get_lang }}
{{ student.fullName }} + {% for certificate in student.certificates %} +

{{ certificate.createdAt }}

+ {% endfor %} +
+ {% for certificate in student.certificates %} + {{ 'Certificate' | get_lang }} + {% endfor %} +
+{% else %} +

{{ 'NoResults' | get_lang }}

+{% endif %} From 6c11970acef14a67f58e4ad51200f002f746ead7 Mon Sep 17 00:00:00 2001 From: Yannick Warnier Date: Mon, 2 Mar 2015 23:02:20 -0500 Subject: [PATCH 2/4] Fix issue with removal of Database::get_course_by_category() (triggered by 2626fb4) - refs BT#9442 --- main/gradebook/lib/fe/gradebooktable.class.php | 4 ++-- tests/main/inc/lib/database.lib.test.php | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/main/gradebook/lib/fe/gradebooktable.class.php b/main/gradebook/lib/fe/gradebooktable.class.php index 280c15cc28..e52fa44e31 100755 --- a/main/gradebook/lib/fe/gradebooktable.class.php +++ b/main/gradebook/lib/fe/gradebooktable.class.php @@ -551,7 +551,7 @@ class GradebookTable extends SortableTable // evaluation case 'E' : $cat = new Category(); - $course_id = Database::get_course_by_category($_GET['selectcat']); + $course_id = CourseManager::get_course_by_category($_GET['selectcat']); $show_message = $cat->show_message_resource_delete($course_id); @@ -588,7 +588,7 @@ class GradebookTable extends SortableTable // link case 'L' : $cat = new Category(); - $course_id = Database::get_course_by_category($_GET['selectcat']); + $course_id = CourseManager::get_course_by_category($_GET['selectcat']); $show_message = $cat->show_message_resource_delete($course_id); $url = $item->get_link(); diff --git a/tests/main/inc/lib/database.lib.test.php b/tests/main/inc/lib/database.lib.test.php index 973772eccf..0c7407d08b 100755 --- a/tests/main/inc/lib/database.lib.test.php +++ b/tests/main/inc/lib/database.lib.test.php @@ -98,12 +98,6 @@ class TestDatabase extends UnitTestCase { } */ - function get_course_by_category() { - $category_id='1'; - $res=$this->dbase->get_course_by_category($category_id); - $this->assertTrue(is_string($res)); - } - function testGetCourseInfo() { $course_code='AYDD'; $res=$this->dbase->get_course_info($course_code); From 571885f3a7b82e0363d0fe109f8206ae55452508 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Tue, 3 Mar 2015 10:13:53 -0500 Subject: [PATCH 4/4] Validate form data - refs BT#9442 --- main/gradebook/certificate_report.php | 128 +++++++++++------- .../default/gradebook/certificate_report.tpl | 4 + 2 files changed, 82 insertions(+), 50 deletions(-) diff --git a/main/gradebook/certificate_report.php b/main/gradebook/certificate_report.php index 04e0a2072e..a1cc91dbf0 100644 --- a/main/gradebook/certificate_report.php +++ b/main/gradebook/certificate_report.php @@ -5,6 +5,8 @@ * @author Angel Fernando Quiroz Campos * @package chamilo.gradebook */ +use \ChamiloSession as Session; + $language_file = array('gradebook', 'exercice'); $cidReset = true; @@ -28,6 +30,13 @@ $userId = api_get_user_id(); $sessions = SessionManager::getSessionsCoachedByUser($userId); if ($selectedSession > 0) { + if (!SessionManager::isValidId($selectedSession)) { + Session::write('reportErrorMessage', get_lang('NoSession')); + + header("Location: $selfUrl"); + exit; + } + $courses = SessionManager::get_course_list_by_session_id($selectedSession); if (is_array($courses)) { @@ -65,67 +74,80 @@ $searchCourseOnly = $selectedSession <= 0 && $selectedCourse > 0; if ($searchSessionAndCourse || $searchCourseOnly) { $selectedCourseInfo = api_get_course_info_by_id($selectedCourse); - $gradebookCategories = Category::load(null, null, $selectedCourseInfo['code'], null, false, $selectedSession); - - $gradebook = current($gradebookCategories); + if (empty($selectedCourseInfo)) { + Session::write('reportErrorMessage', get_lang('NoCourse')); - $exportAllLink = api_get_path(WEB_CODE_PATH) . "gradebook/gradebook_display_certificate.php?"; - $exportAllLink .= http_build_query(array( - "action" => "export_all_certificates", - "cidReq" => $selectedCourseInfo['code'], - "id_session" => 0, - "gidReq" => 0, - "cat_id" => $gradebook->get_id() - )); + header("Location: $selfUrl"); + exit; + } - $studentList = GradebookUtils::get_list_users_certificates($gradebook->get_id()); + $gradebookCategories = Category::load(null, null, $selectedCourseInfo['code'], null, false, $selectedSession); - $certificateStudents = array(); + $gradebook = null; - if (is_array($studentList)) { - foreach ($studentList as $student) { - $certificateStudent = array( - 'fullName' => api_get_person_name($student['firstname'], $student['lastname']), - 'certificates' => array() - ); + if (!empty($gradebookCategories)) { + $gradebook = current($gradebookCategories); + } - $studentCertificates = GradebookUtils::get_list_gradebook_certificates_by_user_id( - $student['user_id'], - $gradebook->get_id() - ); + if (!is_null($gradebook)) { + $exportAllLink = api_get_path(WEB_CODE_PATH) . "gradebook/gradebook_display_certificate.php?"; + $exportAllLink .= http_build_query(array( + "action" => "export_all_certificates", + "cidReq" => $selectedCourseInfo['code'], + "id_session" => 0, + "gidReq" => 0, + "cat_id" => $gradebook->get_id() + )); + + $studentList = GradebookUtils::get_list_users_certificates($gradebook->get_id()); + + $certificateStudents = array(); + + if (is_array($studentList) && !empty($studentList)) { + foreach ($studentList as $student) { + $certificateStudent = array( + 'fullName' => api_get_person_name($student['firstname'], $student['lastname']), + 'certificates' => array() + ); - if (!is_array($studentCertificates)) { - continue; - } + $studentCertificates = GradebookUtils::get_list_gradebook_certificates_by_user_id( + $student['user_id'], + $gradebook->get_id() + ); - foreach ($studentCertificates as $certificate) { - $creationDate = new DateTime($certificate['created_at']); - $creationMonth = $creationDate->format('m'); - $creationYear = $creationDate->format('Y'); - $creationMonthYear = $creationDate->format('m Y'); + if (!is_array($studentCertificates) || empty($studentCertificates)) { + continue; + } - if ($selectedMonth > 0 && empty($selectedYear)) { - if ($creationMonth != $selectedMonth) { - continue; - } - } elseif ($selectedMonth <= 0 && !empty($selectedYear)) { - if ($creationYear != $selectedYear) { - continue; - } - } elseif ($selectedMonth > 0 && !empty($selectedYear)) { - if ($creationMonthYear != sprintf("%d %s", $selectedMonth, $selectedYear)) { - continue; + foreach ($studentCertificates as $certificate) { + $creationDate = new DateTime($certificate['created_at']); + $creationMonth = $creationDate->format('m'); + $creationYear = $creationDate->format('Y'); + $creationMonthYear = $creationDate->format('m Y'); + + if ($selectedMonth > 0 && empty($selectedYear)) { + if ($creationMonth != $selectedMonth) { + continue; + } + } elseif ($selectedMonth <= 0 && !empty($selectedYear)) { + if ($creationYear != $selectedYear) { + continue; + } + } elseif ($selectedMonth > 0 && !empty($selectedYear)) { + if ($creationMonthYear != sprintf("%d %s", $selectedMonth, $selectedYear)) { + continue; + } } - } - $certificateStudent['certificates'][] = array( - 'createdAt' => api_convert_and_format_date($certificate['created_at']), - 'id' => $certificate['id'] - ); - } + $certificateStudent['certificates'][] = array( + 'createdAt' => api_convert_and_format_date($certificate['created_at']), + 'id' => $certificate['id'] + ); + } - if (count($certificateStudent['certificates']) > 0) { - $certificateStudents[] = $certificateStudent; + if (count($certificateStudent['certificates']) > 0) { + $certificateStudents[] = $certificateStudent; + } } } } @@ -134,6 +156,10 @@ if ($searchSessionAndCourse || $searchCourseOnly) { /* View */ $template = new Template(get_lang('GradebookListOfStudentsCertificates')); +if (Session::has('reportErrorMessage')) { + $template->assign('errorMessage', Session::read('reportErrorMessage')); +} + $template->assign('selectedSession', $selectedSession); $template->assign('selectedCourse', $selectedCourse); $template->assign('selectedMonth', $selectedMonth); @@ -148,3 +174,5 @@ $content = $template->fetch("default/gradebook/certificate_report.tpl"); $template->assign('content', $content); $template->display_one_col_template(); + +Session::erase('reportErrorMessage'); diff --git a/main/template/default/gradebook/certificate_report.tpl b/main/template/default/gradebook/certificate_report.tpl index e09245f3cd..67f3fdc953 100644 --- a/main/template/default/gradebook/certificate_report.tpl +++ b/main/template/default/gradebook/certificate_report.tpl @@ -74,6 +74,10 @@

{{ 'GradebookListOfStudentsCertificates' | get_lang }}

+{% if errorMessage is defined %} +
{{ errorMessage }}
+{% endif %} + {% if not certificateStudents is empty %}

{{ 'ExportAllCertificatesToPDF' | get_lang }}