commit
9106d63f3b
@ -0,0 +1,178 @@ |
||||
<?php |
||||
/* For licensing terms, see /license.txt */ |
||||
/** |
||||
* List all certificates filtered by session/course and month/year |
||||
* @author Angel Fernando Quiroz Campos <angel.quiroz@beeznest.com> |
||||
* @package chamilo.gradebook |
||||
*/ |
||||
use \ChamiloSession as Session; |
||||
|
||||
$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) { |
||||
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)) { |
||||
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); |
||||
|
||||
if (empty($selectedCourseInfo)) { |
||||
Session::write('reportErrorMessage', get_lang('NoCourse')); |
||||
|
||||
header("Location: $selfUrl"); |
||||
exit; |
||||
} |
||||
|
||||
$gradebookCategories = Category::load(null, null, $selectedCourseInfo['code'], null, false, $selectedSession); |
||||
|
||||
$gradebook = null; |
||||
|
||||
if (!empty($gradebookCategories)) { |
||||
$gradebook = current($gradebookCategories); |
||||
} |
||||
|
||||
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() |
||||
); |
||||
|
||||
$studentCertificates = GradebookUtils::get_list_gradebook_certificates_by_user_id( |
||||
$student['user_id'], |
||||
$gradebook->get_id() |
||||
); |
||||
|
||||
if (!is_array($studentCertificates) || empty($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')); |
||||
|
||||
if (Session::has('reportErrorMessage')) { |
||||
$template->assign('errorMessage', Session::read('reportErrorMessage')); |
||||
} |
||||
|
||||
$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(); |
||||
|
||||
Session::erase('reportErrorMessage'); |
@ -0,0 +1,121 @@ |
||||
<script> |
||||
$(document).on('ready', function () { |
||||
$('select#session').on('change', function () { |
||||
var sessionId = parseInt(this.value, 10), |
||||
$selectCourse = $('select#course'); |
||||
|
||||
$selectCourse.empty(); |
||||
|
||||
$.get('{{ _p.web_main }}inc/ajax/course.ajax.php', { |
||||
a: 'display_sessions_courses', |
||||
session: sessionId |
||||
}, function (courseList) { |
||||
var $option = null; |
||||
|
||||
$('<option>', { |
||||
value: 0, |
||||
text: "{{ 'Select' | get_lang }}" |
||||
}).appendTo($selectCourse); |
||||
|
||||
if (courseList.length > 0) { |
||||
$.each(courseList, function (index, course) { |
||||
$('<option>', { |
||||
value: course.id, |
||||
text: course.name |
||||
}).appendTo($selectCourse); |
||||
}); |
||||
} |
||||
}, 'json'); |
||||
}); |
||||
}); |
||||
</script> |
||||
|
||||
<form action="{{ _p.web_main }}gradebook/certificate_report.php" method="post" class="form-horizontal"> |
||||
<div class="control-group"> |
||||
<label class="control-label" for="session">{{ 'Sessions' | get_lang }}</label> |
||||
<div class="controls"> |
||||
<select name="session" id="session"> |
||||
<option value="0">{{ 'Select' | get_lang }}</option> |
||||
{% for session in sessions %} |
||||
<option value="{{ session.id }}" {{ selectedSession == session.id ? 'selected' : '' }}>{{ session.name }}</option> |
||||
{% endfor %} |
||||
</select> |
||||
</div> |
||||
</div> |
||||
<div class="control-group"> |
||||
<label class="control-label" for="course">{{ 'Courses' | get_lang }}</label> |
||||
<div class="controls"> |
||||
<select name="course" id="course"> |
||||
<option value="0">{{ 'Select' | get_lang }}</option> |
||||
{% for course in courses %} |
||||
<option value="{{ course.real_id }}" {{ selectedCourse == course.real_id ? 'selected' : ''}}>{{ course.title }}</option> |
||||
{% endfor %} |
||||
</select> |
||||
</div> |
||||
</div> |
||||
<div class="control-group"> |
||||
<label class="control-label" for="month">{{ 'Date' | get_lang }}</label> |
||||
<div class="controls"> |
||||
<select name="month" id="month"> |
||||
<option value="0">{{ 'Select' | get_lang }}</option> |
||||
{% for month in months %} |
||||
<option value="{{ month.key }}" {{ selectedMonth == month.key ? 'selected' : ''}}>{{ month.name }}</option> |
||||
{% endfor %} |
||||
</select> |
||||
<input type="text" name="year" id="year" class="input-mini" value="{{ selectedYear }}"> |
||||
</div> |
||||
</div> |
||||
<div class="control-group"> |
||||
<div class="controls"> |
||||
<button type="submit" class="btn btn-primary">{{ 'Search' | get_lang }}</button> |
||||
</div> |
||||
</div> |
||||
</form> |
||||
|
||||
<h1 class="page-header">{{ 'GradebookListOfStudentsCertificates' | get_lang }}</h1> |
||||
|
||||
{% if errorMessage is defined %} |
||||
<div class="alert alert-error">{{ errorMessage }}</div> |
||||
{% endif %} |
||||
|
||||
{% if not certificateStudents is empty %} |
||||
<p> |
||||
<a href="{{ exportAllLink }}" class="btn btn-info">{{ 'ExportAllCertificatesToPDF' | get_lang }}</a> |
||||
</p> |
||||
|
||||
<table class="table table-striped"> |
||||
<thead> |
||||
<tr> |
||||
<th>{{ 'Student' | get_lang }}</th> |
||||
<th>{{ 'Date' | get_lang }}</th> |
||||
<th>{{ 'Certificate' | get_lang }}</th> |
||||
</tr> |
||||
</thead> |
||||
<tfoot> |
||||
<tr> |
||||
<th>{{ 'Student' | get_lang }}</th> |
||||
<th>{{ 'Date' | get_lang }}</th> |
||||
<th>{{ 'Certificate' | get_lang }}</th> |
||||
</tr> |
||||
</tfoot> |
||||
<tbody> |
||||
{% for student in certificateStudents %} |
||||
<tr> |
||||
<td>{{ student.fullName }}</td> |
||||
<td> |
||||
{% for certificate in student.certificates %} |
||||
<p>{{ certificate.createdAt }}</p> |
||||
{% endfor %} |
||||
</td> |
||||
<td> |
||||
{% for certificate in student.certificates %} |
||||
<a href="{{ _p.web }}certificates/index.php?id={{ certificate.id }}" class="btn">{{ 'Certificate' | get_lang }}</a> |
||||
{% endfor %} |
||||
</td> |
||||
</tr> |
||||
{% endfor %} |
||||
</tbody> |
||||
</table> |
||||
{% else %} |
||||
<p class="alert alert-info">{{ 'NoResults' | get_lang }}</p> |
||||
{% endif %} |
Loading…
Reference in new issue