You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
327 lines
11 KiB
327 lines
11 KiB
<?php
|
|
/* For licensing terms, see /license.txt */
|
|
|
|
/**
|
|
* Script.
|
|
*
|
|
* @package chamilo.gradebook
|
|
*/
|
|
require_once __DIR__.'/../inc/global.inc.php';
|
|
$current_course_tool = TOOL_GRADEBOOK;
|
|
|
|
if (!api_is_student_boss()) {
|
|
api_protect_course_script(true);
|
|
}
|
|
|
|
api_set_more_memory_and_time_limits();
|
|
|
|
//extra javascript functions for in html head:
|
|
$htmlHeadXtra[] = "<script>
|
|
function confirmation() {
|
|
if (confirm(\" ".trim(get_lang('AreYouSureToDelete'))." ?\")) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
</script>";
|
|
|
|
api_block_anonymous_users();
|
|
|
|
if (!api_is_allowed_to_edit() && !api_is_student_boss()) {
|
|
api_not_allowed(true);
|
|
}
|
|
|
|
$categoryId = isset($_GET['cat_id']) ? (int) $_GET['cat_id'] : 0;
|
|
$action = isset($_GET['action']) && $_GET['action'] ? $_GET['action'] : null;
|
|
$filterOfficialCode = isset($_POST['filter']) ? Security::remove_XSS($_POST['filter']) : null;
|
|
$filterOfficialCodeGet = isset($_GET['filter']) ? Security::remove_XSS($_GET['filter']) : null;
|
|
|
|
$url = api_get_self().'?'.api_get_cidreq().'&cat_id='.$categoryId.'&filter='.$filterOfficialCode;
|
|
$courseInfo = api_get_course_info();
|
|
|
|
$filter = api_get_setting('certificate_filter_by_official_code');
|
|
$userList = [];
|
|
$filterForm = null;
|
|
$certificate_list = [];
|
|
if ($filter === 'true') {
|
|
$options = UserManager::getOfficialCodeGrouped();
|
|
$options = array_merge(['all' => get_lang('All')], $options);
|
|
$form = new FormValidator(
|
|
'official_code_filter',
|
|
'POST',
|
|
api_get_self().'?'.api_get_cidreq().'&cat_id='.$categoryId
|
|
);
|
|
$form->addElement('select', 'filter', get_lang('OfficialCode'), $options);
|
|
$form->addButton('submit', get_lang('Submit'));
|
|
$filterForm = '<br />'.$form->returnForm();
|
|
|
|
if ($form->validate()) {
|
|
$officialCode = $form->getSubmitValue('filter');
|
|
if ($officialCode == 'all') {
|
|
$certificate_list = GradebookUtils::get_list_users_certificates($categoryId);
|
|
} else {
|
|
$userList = UserManager::getUsersByOfficialCode($officialCode);
|
|
if (!empty($userList)) {
|
|
$certificate_list = GradebookUtils::get_list_users_certificates(
|
|
$categoryId,
|
|
$userList
|
|
);
|
|
}
|
|
}
|
|
} else {
|
|
$certificate_list = GradebookUtils::get_list_users_certificates($categoryId);
|
|
}
|
|
} else {
|
|
$certificate_list = GradebookUtils::get_list_users_certificates($categoryId);
|
|
}
|
|
|
|
$content = '';
|
|
|
|
$tags = Certificate::notificationTags();
|
|
|
|
switch ($action) {
|
|
case 'send_notifications':
|
|
$currentUserInfo = api_get_user_info();
|
|
$message = isset($_POST['message']) ? $_POST['message'] : '';
|
|
$subject = get_lang('NotificationCertificateSubject');
|
|
if (!empty($message)) {
|
|
foreach ($certificate_list as $index => $value) {
|
|
$userInfo = api_get_user_info($value['user_id']);
|
|
if (empty($userInfo)) {
|
|
continue;
|
|
}
|
|
$list = GradebookUtils::get_list_gradebook_certificates_by_user_id(
|
|
$value['user_id'],
|
|
$categoryId
|
|
);
|
|
|
|
foreach ($list as $valueCertificate) {
|
|
Certificate::sendNotification(
|
|
$subject,
|
|
$message,
|
|
$userInfo,
|
|
$courseInfo,
|
|
$valueCertificate
|
|
);
|
|
}
|
|
}
|
|
Display::addFlash(Display::return_message(get_lang('Sent')));
|
|
}
|
|
|
|
header('Location: '.$url);
|
|
exit;
|
|
break;
|
|
case 'show_notification_form':
|
|
$form = new FormValidator('notification', 'post', $url.'&action=send_notifications');
|
|
$form->addHeader(get_lang('SendNotification'));
|
|
$form->addHtmlEditor('message', get_lang('Message'));
|
|
$form->addLabel(
|
|
get_lang('Tags'),
|
|
Display::return_message(implode('<br />', $tags), 'normal', false)
|
|
);
|
|
$form->addButtonSend(get_lang('Send'));
|
|
$form->setDefaults(
|
|
['message' => nl2br(get_lang('NotificationCertificateTemplate'))]
|
|
);
|
|
$content = $form->returnForm();
|
|
break;
|
|
case 'export_all_certificates':
|
|
$courseCode = api_get_course_id();
|
|
if (api_get_plugin_setting('customcertificate', 'enable_plugin_customcertificate') == 'true' &&
|
|
api_get_course_setting('customcertificate_course_enable', $courseCode) == 1
|
|
) {
|
|
$url = api_get_path(WEB_PLUGIN_PATH).'customcertificate/src/print_certificate.php?export_all=1';
|
|
} else {
|
|
if (api_is_student_boss()) {
|
|
$userGroup = new UserGroup();
|
|
$userList = $userGroup->getGroupUsersByUser(api_get_user_id());
|
|
} else {
|
|
$userList = [];
|
|
if (!empty($filterOfficialCodeGet)) {
|
|
$userList = UserManager::getUsersByOfficialCode($filterOfficialCodeGet);
|
|
}
|
|
}
|
|
|
|
Category::exportAllCertificates($categoryId, $userList);
|
|
}
|
|
header('Location: '.$url);
|
|
exit;
|
|
break;
|
|
case 'generate_all_certificates':
|
|
$userList = CourseManager::get_user_list_from_course_code(
|
|
api_get_course_id(),
|
|
api_get_session_id()
|
|
);
|
|
|
|
if (!empty($userList)) {
|
|
foreach ($userList as $userInfo) {
|
|
if ($userInfo['status'] == INVITEE) {
|
|
continue;
|
|
}
|
|
Category::generateUserCertificate($categoryId, $userInfo['user_id']);
|
|
}
|
|
}
|
|
header('Location: '.$url);
|
|
exit;
|
|
break;
|
|
case 'delete_all_certificates':
|
|
Category::deleteAllCertificates($categoryId);
|
|
Display::addFlash(Display::return_message(get_lang('Deleted')));
|
|
header('Location: '.$url);
|
|
exit;
|
|
break;
|
|
}
|
|
|
|
$interbreadcrumb[] = [
|
|
'url' => Category::getUrl(),
|
|
'name' => get_lang('Gradebook'),
|
|
];
|
|
$interbreadcrumb[] = ['url' => '#', 'name' => get_lang('GradebookListOfStudentsCertificates')];
|
|
|
|
$this_section = SECTION_COURSES;
|
|
Display::display_header('');
|
|
|
|
if (isset($_GET['action']) && $_GET['action'] == 'delete') {
|
|
$check = Security::check_token('get');
|
|
if ($check) {
|
|
$certificate = new Certificate($_GET['certificate_id']);
|
|
$result = $certificate->delete(true);
|
|
Security::clear_token();
|
|
if ($result == true) {
|
|
echo Display::return_message(get_lang('CertificateRemoved'), 'confirmation');
|
|
} else {
|
|
echo Display::return_message(get_lang('CertificateNotRemoved'), 'error');
|
|
}
|
|
}
|
|
}
|
|
|
|
$token = Security::get_token();
|
|
echo Display::page_header(get_lang('GradebookListOfStudentsCertificates'));
|
|
|
|
if (!empty($content)) {
|
|
echo $content;
|
|
}
|
|
|
|
//@todo replace all this code with something like get_total_weight()
|
|
$cats = Category::load($categoryId, null, null, null, null, null, false);
|
|
|
|
if (!empty($cats)) {
|
|
//with this fix the teacher only can view 1 gradebook
|
|
if (api_is_platform_admin()) {
|
|
$stud_id = (api_is_allowed_to_edit() ? null : api_get_user_id());
|
|
} else {
|
|
$stud_id = api_get_user_id();
|
|
}
|
|
|
|
$total_weight = $cats[0]->get_weight();
|
|
$allcat = $cats[0]->get_subcategories(
|
|
$stud_id,
|
|
api_get_course_id(),
|
|
api_get_session_id()
|
|
);
|
|
$alleval = $cats[0]->get_evaluations($stud_id);
|
|
$alllink = $cats[0]->get_links($stud_id);
|
|
|
|
$datagen = new GradebookDataGenerator($allcat, $alleval, $alllink);
|
|
|
|
$total_resource_weight = 0;
|
|
if (!empty($datagen)) {
|
|
$data_array = $datagen->get_data(
|
|
0,
|
|
0,
|
|
null,
|
|
true
|
|
);
|
|
|
|
if (!empty($data_array)) {
|
|
$newarray = [];
|
|
foreach ($data_array as $data) {
|
|
$newarray[] = array_slice($data, 1);
|
|
}
|
|
|
|
foreach ($newarray as $item) {
|
|
$total_resource_weight = $total_resource_weight + $item['2'];
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($total_resource_weight != $total_weight) {
|
|
echo Display::return_message(
|
|
get_lang('SumOfActivitiesWeightMustBeEqualToTotalWeight'),
|
|
'warning'
|
|
);
|
|
}
|
|
}
|
|
|
|
echo '<div class="btn-group">';
|
|
|
|
echo Display::url(
|
|
get_lang('GenerateCertificates'),
|
|
$url.'&action=generate_all_certificates',
|
|
['class' => 'btn btn-default']
|
|
);
|
|
|
|
echo Display::url(
|
|
get_lang('DeleteAllCertificates'),
|
|
$url.'&action=delete_all_certificates',
|
|
['class' => 'btn btn-default']
|
|
);
|
|
|
|
$hideCertificateExport = api_get_setting('hide_certificate_export_link');
|
|
if (count($certificate_list) > 0 && $hideCertificateExport !== 'true') {
|
|
echo Display::url(
|
|
get_lang('ExportAllCertificatesToPDF'),
|
|
$url.'&action=export_all_certificates',
|
|
['class' => 'btn btn-default']
|
|
);
|
|
|
|
echo Display::url(
|
|
get_lang('SendCertificateNotifications'),
|
|
$url.'&action=show_notification_form',
|
|
['class' => 'btn btn-default']
|
|
);
|
|
}
|
|
|
|
echo '</div>';
|
|
|
|
echo $filterForm;
|
|
|
|
if (count($certificate_list) == 0) {
|
|
echo Display::return_message(get_lang('NoResultsAvailable'), 'warning');
|
|
} else {
|
|
echo '<br /><br /><table class="data_table">';
|
|
foreach ($certificate_list as $index => $value) {
|
|
echo '<tr>
|
|
<td width="100%" class="actions">'.get_lang('Student').' : '.api_get_person_name($value['firstname'], $value['lastname']).' ('.$value['username'].')</td>';
|
|
echo '</tr>';
|
|
echo '<tr><td>
|
|
<table class="data_table">';
|
|
|
|
$list = GradebookUtils::get_list_gradebook_certificates_by_user_id(
|
|
$value['user_id'],
|
|
$categoryId
|
|
);
|
|
foreach ($list as $valueCertificate) {
|
|
echo '<tr>';
|
|
echo '<td width="50%">'.get_lang('Score').' : '.$valueCertificate['score_certificate'].'</td>';
|
|
echo '<td width="30%">'.get_lang('Date').' : '.api_convert_and_format_date($valueCertificate['created_at']).'</td>';
|
|
echo '<td width="20%">';
|
|
$url = api_get_path(WEB_PATH).'certificates/index.php?id='.$valueCertificate['id'];
|
|
$certificates = Display::url(
|
|
get_lang('Certificate'),
|
|
$url,
|
|
['target' => '_blank', 'class' => 'btn btn-default']
|
|
);
|
|
echo $certificates;
|
|
echo '<a onclick="return confirmation();" href="gradebook_display_certificate.php?sec_token='.$token.'&'.api_get_cidreq().'&action=delete&cat_id='.$categoryId.'&certificate_id='.$valueCertificate['id'].'">
|
|
'.Display::return_icon('delete.png', get_lang('Delete')).'
|
|
</a>';
|
|
echo '</td></tr>';
|
|
}
|
|
echo '</table>';
|
|
echo '</td></tr>';
|
|
}
|
|
echo '</table>';
|
|
}
|
|
Display::display_footer();
|
|
|