Chamilo is a learning management system focused on ease of use and accessibility
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.
chamilo-lms/public/main/gradebook/index.php

1059 lines
37 KiB

15 years ago
<?php
/* For licensing terms, see /license.txt */
// $cidReset : This is the main difference with gradebook.php, here we say,
// basically, that we are inside a course, and many things depend from that
$_in_course = true;
require_once __DIR__.'/../inc/global.inc.php';
$current_course_tool = TOOL_GRADEBOOK;
api_block_anonymous_users();
11 years ago
api_protect_course_script(true);
$course_code = api_get_course_id();
$stud_id = api_get_user_id();
$session_id = api_get_session_id();
$course_id = api_get_course_int_id();
$courseInfo = api_get_course_info();
$action = isset($_GET['action']) ? $_GET['action'] : null;
$itemId = isset($_GET['itemId']) ? $_GET['itemId'] : 0;
switch ($action) {
case 'generate_eval_stats':
if (!empty($itemId)) {
Evaluation::generateStats($itemId);
Display::addFlash(Display::return_message(get_lang('Update successful')));
}
header('Location: '.api_get_self().'?'.api_get_cidreq());
exit;
break;
case 'generate_link_stats':
if (!empty($itemId)) {
$link = LinkFactory::create(LINK_EXERCISE);
$links = $link::load($itemId);
$exercise = new Exercise(api_get_course_int_id());
/** @var ExerciseLink $link */
foreach ($links as $link) {
$exerciseId = $link->get_ref_id();
$data = $link->get_exercise_data();
if (empty($data)) {
continue;
}
$exerciseId = $data['id'];
$result = $exercise->read($exerciseId);
if ($result) {
$exercise->generateStats($exerciseId, api_get_course_info(), api_get_session_id());
}
}
Display::addFlash(Display::return_message(get_lang('Update successful')));
}
header('Location: '.api_get_self().'?'.api_get_cidreq());
exit;
break;
case 'lock':
$category_to_lock = Category::load($_GET['category_id']);
$category_to_lock[0]->lockAllItems(1);
$confirmation_message = get_lang('This assessment has been locked. You cannot unlock it. If you really need to unlock it, please contact the platform administrator, explaining the reason why you would need to do that (it might otherwise be considered as fraud attempt).');
break;
case 'unlock':
if (api_is_platform_admin()) {
$category_to_lock = Category::load($_GET['category_id']);
$category_to_lock[0]->lockAllItems(0);
$confirmation_message = get_lang('Evaluation has been unlocked');
}
break;
case 'export_table':
$hidePdfReport = api_get_configuration_value('gradebook_hide_pdf_report_button');
if ($hidePdfReport) {
api_not_allowed(true);
}
if (isset($_GET['category_id'])) {
$cats = Category::load($_GET['category_id'], null, null, null, null, null, false);
GradebookUtils::generateTable($courseInfo, api_get_user_id(), $cats);
exit;
}
break;
}
ob_start();
// Make sure the destination for scripts is index.php instead of gradebook.php
Category::setUrl('index.php');
$this_section = SECTION_COURSES;
$htmlHeadXtra[] = '<script>
var show_icon = "'.Display::returnIconPath('view_more_stats.gif').'";
var hide_icon = "'.Display::returnIconPath('view_less_stats.gif').'";
function confirmation() {
if (confirm("'.get_lang('Delete all').'?")) {
return true;
} else {
return false;
}
}
$(function() {
$("body").on("click", ".view_children", function() {
var id = $(this).attr("data-cat-id");
$(".hidden_"+id).removeClass("hidden");
$(this).removeClass("view_children");
$(this).find("img").attr("src", hide_icon);
$(this).attr("class", "hide_children");
});
$("body").on("click", ".hide_children", function(event) {
var id = $(this).attr("data-cat-id");
$(".hidden_"+id).addClass("hidden");
$(this).removeClass("hide_children");
$(this).addClass("view_children");
$(this).find("img").attr("src", show_icon);
});
for (i=0;i<$(".actions").length;i++) {
if ($(".actions:eq("+i+")").html()=="<table border=\"0\"></table>" || $(".actions:eq("+i+")").html()=="" || $(".actions:eq("+i+")").html()==null || $(".actions:eq("+i+")").html().split("<TBODY></TBODY>").length==2) {
$(".actions:eq("+i+")").hide();
}
}
15 years ago
});
</script>';
$list_actions = [];
$list_values = [];
if (isset($_GET['movecat'])) {
$list_actions[] = 'movecat';
$list_values[] = $_GET['movecat'];
}
if (isset($_GET['moveeval'])) {
$list_actions[] = 'moveeval';
$list_values[] = $_GET['moveeval'];
}
if (isset($_GET['movelink'])) {
$list_actions[] = 'movelink';
$list_values[] = $_GET['movelink'];
}
if (isset($_GET['visiblecat'])) {
$list_actions[] = 'visiblecat';
$list_values[] = $_GET['visiblecat'];
}
if (isset($_GET['deletecat'])) {
$list_actions[] = 'deletecat';
$list_values[] = $_GET['deletecat'];
}
if (isset($_GET['visibleeval'])) {
$list_actions[] = 'visibleeval';
$list_values[] = $_GET['visibleeval'];
}
if (isset($_GET['lockedeval'])) {
$list_actions[] = 'lockedeval';
$list_values[] = $_GET['lockedeval'];
}
if (isset($_GET['deleteeval'])) {
$list_actions[] = 'deleteeval';
$list_values[] = $_GET['deleteeval'];
}
if (isset($_GET['visiblelink'])) {
$list_actions[] = 'visiblelink';
$list_values[] = $_GET['visiblelink'];
}
if (isset($_GET['deletelink'])) {
$list_actions[] = 'deletelink';
$list_values[] = $_GET['deletelink'];
}
if (isset($_GET['action'])) {
$list_actions[] = $_GET['action'];
}
$my_actions = implode(';', $list_actions);
$my_actions_values = implode(';', $list_values);
$logInfo = [
'tool' => TOOL_GRADEBOOK,
'action' => $my_actions,
'action_details' => $my_actions_values,
];
Event::registerLog($logInfo);
$tbl_forum_thread = Database::get_course_table(TABLE_FORUM_THREAD);
$tbl_attendance = Database::get_course_table(TABLE_ATTENDANCE);
$tbl_grade_links = Database::get_main_table(TABLE_MAIN_GRADEBOOK_LINK);
$filter_confirm_msg = true;
$filter_warning_msg = true;
$courseInfo = api_get_course_info();
$cats = Category::load(
null,
null,
$course_code,
null,
null,
$session_id,
'ORDER By id'
);
$first_time = null;
if (empty($cats)) {
// first time
$cats = Category::load(
0,
null,
$course_code,
null,
null,
$session_id,
'ORDER By id'
);
12 years ago
$first_time = 1;
}
$selectCat = (int) $cats[0]->get_id();
$_GET['selectcat'] = $selectCat;
$isStudentView = api_is_student_view_active();
if ($selectCat > 0 && $isStudentView) {
$interbreadcrumb[] = [
'url' => 'index.php?selectcat=0&isStudentView=true',
'name' => get_lang('Assessments'),
];
}
// ACTIONS
//this is called when there is no data for the course admin
if (isset($_GET['createallcategories'])) {
GradebookUtils::block_students();
$coursecat = Category::get_not_created_course_categories($stud_id);
if (0 == !count($coursecat)) {
11 years ago
foreach ($coursecat as $row) {
$cat = new Category();
11 years ago
$cat->set_name($row[1]);
$cat->set_course_code($row[0]);
$cat->set_description(null);
$cat->set_user_id($stud_id);
$cat->set_parent_id(0);
$cat->set_weight(0);
$cat->set_visible(0);
$cat->add();
unset($cat);
11 years ago
}
}
header('Location: '.Category::getUrl().'addallcat=&selectcat=0');
11 years ago
exit;
}
//show logs evaluations
if (isset($_GET['visiblelog'])) {
header('Location: '.api_get_self().'/gradebook_showlog_eval.php');
11 years ago
exit;
}
//move a category
if (isset($_GET['movecat'])) {
GradebookUtils::block_students();
$moveCategoryId = isset($_GET['movecat']) ? (int) $_GET['movecat'] : 0;
$cats = Category::load($moveCategoryId);
if (!isset($_GET['targetcat'])) {
$move_form = new CatForm(
CatForm::TYPE_MOVE,
11 years ago
$cats[0],
'move_cat_form',
null,
api_get_self().'?movecat='.$moveCategoryId.'&selectcat='.$selectCat
);
11 years ago
if ($move_form->validate()) {
header('Location: '.api_get_self().'?selectcat='.$selectCat
.'&movecat='.$moveCategoryId.'&targetcat='.$move_form->exportValue('move_cat'));
11 years ago
exit;
}
} else {
$targetcat = Category::load($_GET['targetcat']);
$course_to_crsind = (null != $cats[0]->get_course_code() && null == $targetcat[0]->get_course_code());
11 years ago
if (!($course_to_crsind && !isset($_GET['confirm']))) {
$cats[0]->move_to_cat($targetcat[0]);
header('Location: '.api_get_self().'?categorymoved=&selectcat='.$selectCat);
11 years ago
exit;
}
unset($targetcat);
11 years ago
}
unset($cats);
}
//move an evaluation
if (isset($_GET['moveeval'])) {
GradebookUtils::block_students();
$evals = Evaluation::load($_GET['moveeval']);
if (!isset($_GET['targetcat'])) {
$move_form = new EvalForm(
EvalForm::TYPE_MOVE,
11 years ago
$evals[0],
null,
'move_eval_form',
null,
api_get_self().'?moveeval='.Security::remove_XSS($_GET['moveeval']).'&selectcat='.$selectCat
);
11 years ago
if ($move_form->validate()) {
header('Location: '.api_get_self().'?selectcat='.$selectCat
.'&moveeval='.Security::remove_XSS($_GET['moveeval'])
.'&targetcat='.$move_form->exportValue('move_cat'));
11 years ago
exit;
}
} else {
$targetcat = Category::load($_GET['targetcat']);
$course_to_crsind = null != $evals[0]->get_course_code() && null == $targetcat[0]->get_course_code();
11 years ago
if (!($course_to_crsind && !isset($_GET['confirm']))) {
$evals[0]->move_to_cat($targetcat[0]);
header('Location: '.api_get_self().'?evaluationmoved=&selectcat='.$selectCat);
11 years ago
exit;
}
unset($targetcat);
11 years ago
}
unset($evals);
}
//move a link
if (isset($_GET['movelink'])) {
$moveLink = (int) $_GET['movelink'];
GradebookUtils::block_students();
$link = LinkFactory::load($moveLink);
11 years ago
$move_form = new LinkForm(
LinkForm::TYPE_MOVE,
11 years ago
null,
$link[0],
'move_link_form',
null,
api_get_self().'?movelink='.$moveLink.'&selectcat='.$selectCat.'&'.api_get_cidreq()
11 years ago
);
if ($move_form->validate()) {
$targetcat = Category::load($move_form->exportValue('move_cat'));
11 years ago
$link[0]->move_to_cat($targetcat[0]);
header('Location: '.api_get_self().'?linkmoved=&selectcat='.$selectCat.'&'.api_get_cidreq());
11 years ago
exit;
}
}
// Parameters for categories.
if (isset($_GET['visiblecat'])) {
GradebookUtils::block_students();
$visibility_command = 0;
10 years ago
if (isset($_GET['set_visible'])) {
$visibility_command = 1;
11 years ago
}
$cats = Category::load($_GET['visiblecat']);
11 years ago
$cats[0]->set_visible($visibility_command);
$cats[0]->save();
$cats[0]->apply_visibility_to_children();
unset($cats);
11 years ago
if ($visibility_command) {
$confirmation_message = get_lang('Visibility modified');
11 years ago
$filter_confirm_msg = false;
} else {
$confirmation_message = get_lang('InVisibility modified');
11 years ago
$filter_confirm_msg = false;
}
}
if (isset($_GET['deletecat'])) {
GradebookUtils::block_students();
$cats = Category::load($_GET['deletecat']);
if (isset($cats[0])) {
// Delete all categories,subcategories and results
if (null != $cats[0]) {
if (0 != $cats[0]->get_id()) {
11 years ago
// better don't try to delete the root...
$cats[0]->delete_all();
}
}
}
$confirmation_message = get_lang('The category has been deleted.');
11 years ago
$filter_confirm_msg = false;
}
// Parameters for evaluations.
if (isset($_GET['visibleeval'])) {
GradebookUtils::block_students();
$visibility_command = 0;
if (isset($_GET['set_visible'])) {
$visibility_command = 1;
11 years ago
}
$eval = Evaluation::load($_GET['visibleeval']);
11 years ago
$eval[0]->set_visible($visibility_command);
$eval[0]->save();
unset($eval);
11 years ago
if ($visibility_command) {
$confirmation_message = get_lang('Visibility modified');
11 years ago
$filter_confirm_msg = false;
} else {
$confirmation_message = get_lang('InVisibility modified');
11 years ago
$filter_confirm_msg = false;
}
}
// Parameters for evaluations.
if (isset($_GET['lockedeval'])) {
GradebookUtils::block_students();
$locked = (int) $_GET['lockedeval'];
$type_locked = 1;
$confirmation_message = get_lang('Evaluation has been locked');
if (isset($_GET['typelocked']) && api_is_platform_admin()) {
11 years ago
$type_locked = 0;
$confirmation_message = get_lang('Evaluation has been unlocked');
11 years ago
}
$eval = Evaluation::load($locked);
if (null != $eval[0]) {
11 years ago
$eval[0]->lock($type_locked);
}
11 years ago
$filter_confirm_msg = false;
}
if (isset($_GET['deleteeval'])) {
GradebookUtils::block_students();
$eval = Evaluation::load($_GET['deleteeval']);
if (null != $eval[0]) {
11 years ago
$eval[0]->delete_with_results();
}
$confirmation_message = get_lang('Assessment deleted');
11 years ago
$filter_confirm_msg = false;
}
// Parameters for links.
if (isset($_GET['visiblelink'])) {
GradebookUtils::block_students();
$visibility_command = 0;
if (isset($_GET['set_visible'])) {
$visibility_command = 1;
11 years ago
}
$link = LinkFactory::load($_GET['visiblelink']);
11 years ago
if (isset($link) && isset($link[0])) {
$link[0]->set_visible($visibility_command);
$link[0]->save();
}
unset($link);
11 years ago
if ($visibility_command) {
$confirmation_message = get_lang('Visibility modified');
11 years ago
$filter_confirm_msg = false;
} else {
$confirmation_message = get_lang('InVisibility modified');
11 years ago
$filter_confirm_msg = false;
}
}
if (isset($_GET['deletelink'])) {
GradebookUtils::block_students();
$get_delete_link = (int) $_GET['deletelink'];
11 years ago
//fixing #5229
if (!empty($get_delete_link)) {
$link = LinkFactory::load($get_delete_link);
if (null != $link[0]) {
// Clean forum qualify
$sql = 'UPDATE '.$tbl_forum_thread.' SET
thread_qualify_max = 0,
thread_weight = 0,
thread_title_qualify = ""
WHERE c_id = '.$course_id.' AND iid = (
11 years ago
SELECT ref_id FROM '.$tbl_grade_links.'
WHERE id='.$get_delete_link.' AND type = '.LINK_FORUM_THREAD.'
)';
Database::query($sql);
// clean attendance
$sql = 'UPDATE '.$tbl_attendance.' SET
attendance_weight = 0,
attendance_qualify_title = ""
WHERE iid = (
11 years ago
SELECT ref_id FROM '.$tbl_grade_links.'
WHERE id='.$get_delete_link.' AND type = '.LINK_ATTENDANCE.'
)';
Database::query($sql);
$link[0]->delete();
}
unset($link);
$confirmation_message = get_lang('The link has been deleted');
11 years ago
$filter_confirm_msg = false;
}
}
if (!empty($course_to_crsind) && !isset($_GET['confirm'])) {
GradebookUtils::block_students();
11 years ago
if (!isset($_GET['movecat']) && !isset($_GET['moveeval'])) {
5 years ago
exit('Error: movecat or moveeval not defined');
11 years ago
}
$button = '<form name="confirm" method="post" action="'.api_get_self().'?confirm='
.(isset($_GET['movecat']) ? '&movecat='.$moveCategoryId
: '&moveeval='.intval($_GET['moveeval'])).'&selectcat='.$selectCat.'&targetcat='.intval($_GET['targetcat']).'">
<input type="submit" value="'.get_lang('Validate').'">
</form>';
$warning_message = get_lang('Warning: moving gradebook elements can be dangerous for the data inside your gradebook.').'<br><br>'.$button;
11 years ago
$filter_warning_msg = false;
}
// Actions on the sortabletable.
if (isset($_POST['action'])) {
GradebookUtils::block_students();
$number_of_selected_items = count($_POST['id']);
if (0 == $number_of_selected_items) {
$warning_message = get_lang('No resource selected');
11 years ago
$filter_warning_msg = false;
} else {
switch ($_POST['action']) {
case 'deleted':
$number_of_deleted_categories = 0;
$number_of_deleted_evaluations = 0;
$number_of_deleted_links = 0;
11 years ago
foreach ($_POST['id'] as $indexstr) {
if ('CATE' == substr($indexstr, 0, 4)) {
$cats = Category::load(substr($indexstr, 4));
if (null != $cats[0]) {
11 years ago
$cats[0]->delete_all();
}
$number_of_deleted_categories++;
}
if ('EVAL' == substr($indexstr, 0, 4)) {
$eval = Evaluation::load(substr($indexstr, 4));
if (null != $eval[0]) {
11 years ago
$eval[0]->delete_with_results();
}
$number_of_deleted_evaluations++;
}
if ('LINK' == substr($indexstr, 0, 4)) {
11 years ago
//fixing #5229
$id = substr($indexstr, 4);
if (!empty($id)) {
$link = LinkFactory::load($id);
if (null != $link[0]) {
11 years ago
$link[0]->delete();
}
$number_of_deleted_links++;
}
}
}
$confirmation_message =
get_lang('Deleted categories').' : <b>'.$number_of_deleted_categories.'</b><br />'.
get_lang('Deleted evaluations').' : <b>'.$number_of_deleted_evaluations.'</b><br />'.
get_lang('Deleted links').' : <b>'.$number_of_deleted_links.'</b><br /><br />'.
get_lang('Total resources').' : <b>'.$number_of_selected_items.'</b>';
11 years ago
$filter_confirm_msg = false;
break;
case 'setvisible':
11 years ago
foreach ($_POST['id'] as $indexstr) {
if ('CATE' == substr($indexstr, 0, 4)) {
$cats = Category::load(substr($indexstr, 4));
11 years ago
$cats[0]->set_visible(1);
$cats[0]->save();
$cats[0]->apply_visibility_to_children();
}
if ('EVAL' == substr($indexstr, 0, 4)) {
$eval = Evaluation::load(substr($indexstr, 4));
11 years ago
$eval[0]->set_visible(1);
$eval[0]->save();
}
if ('LINK' == substr($indexstr, 0, 4)) {
$link = LinkFactory::load(substr($indexstr, 4));
11 years ago
$link[0]->set_visible(1);
$link[0]->save();
}
}
$confirmation_message = get_lang('The resources became visible');
11 years ago
$filter_confirm_msg = false;
break;
case 'setinvisible':
11 years ago
foreach ($_POST['id'] as $indexstr) {
if ('CATE' == substr($indexstr, 0, 4)) {
$cats = Category::load(substr($indexstr, 4));
11 years ago
$cats[0]->set_visible(0);
$cats[0]->save();
$cats[0]->apply_visibility_to_children();
}
if ('EVAL' == substr($indexstr, 0, 4)) {
$eval = Evaluation::load(substr($indexstr, 4));
11 years ago
$eval[0]->set_visible(0);
$eval[0]->save();
}
if ('LINK' == substr($indexstr, 0, 4)) {
$link = LinkFactory::load(substr($indexstr, 4));
11 years ago
$link[0]->set_visible(0);
$link[0]->save();
}
}
$confirmation_message = get_lang('The resources became invisible');
11 years ago
$filter_confirm_msg = false;
break;
}
}
}
if (isset($_POST['submit']) && isset($_POST['keyword'])) {
header('Location: '.api_get_self().'?selectcat='.$selectCat.'&search='.Security::remove_XSS($_POST['keyword']));
11 years ago
exit;
}
if (isset($_GET['categorymoved'])) {
Display::addFlash(Display::return_message(get_lang('The gradebook has been moved.'), 'confirmation', false));
}
if (isset($_GET['evaluationmoved'])) {
Display::addFlash(Display::return_message(get_lang('The gradebook component has been moved.'), 'confirmation', false));
}
if (isset($_GET['linkmoved'])) {
Display::addFlash(Display::return_message(get_lang('The link has been moved'), 'confirmation', false));
}
if (isset($_GET['addcat'])) {
Display::addFlash(Display::return_message(get_lang('Category added'), 'confirmation', false));
}
if (isset($_GET['linkadded'])) {
Display::addFlash(Display::return_message(get_lang('The link has been added.'), 'confirmation', false));
}
if (isset($_GET['addresult'])) {
Display::addFlash(Display::return_message(get_lang('Result added'), 'confirmation', false));
}
if (isset($_GET['editcat'])) {
Display::addFlash(Display::return_message(get_lang('Category updated'), 'confirmation', false));
}
if (isset($_GET['editeval'])) {
Display::addFlash(Display::return_message(get_lang('The evaluation has been succesfully edited'), 'confirmation', false));
}
if (isset($_GET['linkedited'])) {
Display::addFlash(Display::return_message(get_lang('Assessment edited'), 'confirmation', false));
}
if (isset($_GET['nolinkitems'])) {
Display::addFlash(Display::return_message(get_lang('There are not linked components.'), 'warning', false));
}
if (isset($_GET['addallcat'])) {
Display::addFlash(Display::return_message(get_lang('Added all categories'), 'normal', false));
}
if (isset($confirmation_message)) {
Display::addFlash(Display::return_message($confirmation_message, 'confirmation', $filter_confirm_msg));
}
if (isset($warning_message)) {
Display::addFlash(Display::return_message($warning_message, 'warning', $filter_warning_msg));
}
if (isset($move_form)) {
Display::addFlash(Display::return_message($move_form->toHtml(), 'normal', false));
}
$viewTitle = '';
// DISPLAY HEADERS AND MESSAGES
if (!isset($_GET['exportpdf'])) {
if (isset($_GET['studentoverview'])) {
$interbreadcrumb[] = [
'url' => Category::getUrl().'selectcat='.$selectCat,
'name' => get_lang('Assessments'),
];
$viewTitle = get_lang('List View');
} elseif (isset($_GET['search'])) {
$interbreadcrumb[] = [
'url' => Category::getUrl().'selectcat='.$selectCat,
'name' => get_lang('Assessments'),
];
$viewTitle = get_lang('Search results');
} elseif (!empty($selectCat)) {
$interbreadcrumb[] = [
'url' => '#',
'name' => get_lang('Assessments'),
];
} else {
$viewTitle = get_lang('Assessments');
}
}
// LOAD DATA & DISPLAY TABLE
$is_platform_admin = api_is_platform_admin();
$is_course_admin = api_is_allowed_to_edit(null, true);
$simple_search_form = '';
if (isset($_GET['studentoverview'])) {
//@todo this code also seems to be deprecated ...
$cats = Category::load($selectCat);
$stud_id = api_is_allowed_to_edit() ? null : $stud_id;
$allcat = $cats[0]->get_subcategories($stud_id, $course_code, $session_id);
$alleval = $cats[0]->get_evaluations($stud_id, true);
$alllink = $cats[0]->get_links($stud_id, true);
if (isset($_GET['exportpdf'])) {
$datagen = new GradebookDataGenerator($allcat, $alleval, $alllink);
$header_names = [
get_lang('Name'),
get_lang('Description'),
get_lang('Weight'),
get_lang('Date'),
get_lang('Results and feedback'),
];
$data_array = $datagen->get_data(
GradebookDataGenerator::GDG_SORT_NAME,
0,
null,
true
);
$newarray = [];
11 years ago
foreach ($data_array as $data) {
$newarray[] = array_slice($data, 1);
}
// @todo use pdf.lib.php
/*$pdf = new Cezpdf();
11 years ago
$pdf->selectFont(api_get_path(LIBRARY_PATH).'ezpdf/fonts/Courier.afm');
$pdf->ezSetMargins(30, 30, 50, 30);
$pdf->ezSetY(810);
$pdf->ezText(
get_lang('List View').' ('.api_convert_and_format_date(
null,
DATE_FORMAT_SHORT
).' '.api_convert_and_format_date(null, TIME_NO_SEC_FORMAT).')',
12,
['justification' => 'center']
);
$pdf->line(50, 790, 550, 790);
$pdf->line(50, 40, 550, 40);
11 years ago
$pdf->ezSetY(750);
$pdf->ezTable(
$newarray,
$header_names,
'',
[
'showHeadings' => 1,
'shaded' => 1,
'showLines' => 1,
'rowGap' => 3,
'width' => 500,
]
);
11 years ago
$pdf->ezStream();
exit;*/
15 years ago
}
} else {
// Student view
// In any other case (no search, no pdf), print the available gradebooks
// Important note: loading a category will actually load the *contents* of
// this category. This means that, to show the categories of a course,
// we have to show the root category and show its subcategories that
// are inside this course. This is done at the time of calling
// $cats[0]->get_subcategories(), not at the time of doing Category::load()
// $category comes from GET['selectcat']
// if $category = 0 (which happens when GET['selectcat'] is undefined)
// then Category::load() will create a new 'root' category with empty
// course and session fields in memory (Category::create_root_category())
$cats = Category:: load(
null,
null,
$course_code,
null,
null,
$session_id,
false
);
if (empty($cats)) {
// There is no category for this course+session, so create one
$cat = new Category();
if (!empty($session_id)) {
$sessionName = api_get_session_name($session_id);
$cat->set_name($course_code.' - '.get_lang('Session').' '.$sessionName);
$cat->set_session_id($session_id);
} else {
$cat->set_name($course_code);
$cat->setIsRequirement(1);
}
$cat->set_course_code($course_code);
$cat->set_description(null);
$cat->set_user_id($stud_id);
$cat->set_parent_id(0);
$cat->set_weight(100);
$cat->set_visible(0);
$cat->set_certificate_min_score(75);
$can_edit = api_is_allowed_to_edit(true, true);
if ($can_edit) {
$cat->add();
}
unset($cat);
}
$cats = Category::load($selectCat, null, null, null, null, null, false);
// 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();
}
$allcat = $cats[0]->get_subcategories($stud_id, $course_code, $session_id);
11 years ago
$alleval = $cats[0]->get_evaluations($stud_id);
$alllink = $cats[0]->get_links($stud_id);
}
// add params to the future links (in the table shown)
$addparams = ['selectcat' => $selectCat];
if (isset($_GET['studentoverview'])) {
11 years ago
$addparams['studentoverview'] = '';
}
$addparams['cid'] = api_get_course_int_id();
$no_qualification = false;
// Show certificate link.
$certificate = [];
$actionsLeft = '';
$hideCertificateExport = api_get_setting('hide_certificate_export_link');
if (!empty($selectCat)) {
11 years ago
$cat = new Category();
$course_id = CourseManager::get_course_by_category($selectCat);
$show_message = $cat->show_message_resource_delete($course_id);
if ('' == $show_message) {
11 years ago
// Student
if (!api_is_allowed_to_edit() && !api_is_excluded_user_type()) {
$certificate = Category::generateUserCertificate(
$selectCat,
$stud_id
);
if ('true' !== $hideCertificateExport && isset($certificate['pdf_url'])) {
$actionsLeft .= Display::url(
Display::returnFontAwesomeIcon('file-pdf-o').get_lang('Download certificate in PDF'),
$certificate['pdf_url'],
['class' => 'btn btn-default']
);
}
$currentScore = Category::getCurrentScore(
$stud_id,
$cats[0],
true
);
Category::registerCurrentScore($currentScore, $stud_id, $selectCat);
11 years ago
}
}
}
11 years ago
if (!api_is_allowed_to_edit(null, true)) {
$allowButton = false === api_get_configuration_value('gradebook_hide_pdf_report_button');
if ($allowButton) {
$actionsLeft .= Display::url(
Display::returnFontAwesomeIcon('file-pdf-o').get_lang('Download report in PDF'),
api_get_self().'?action=export_table&'.api_get_cidreq().'&category_id='.$selectCat,
['class' => 'btn btn-default']
);
}
11 years ago
}
if (isset($first_time) && 1 == $first_time && api_is_allowed_to_edit(null, true)) {
echo '<meta http-equiv="refresh" content="0;url='.api_get_self().'?'.api_get_cidreq().'" />';
} else {
Display::display_introduction_section(
TOOL_GRADEBOOK,
['ToolbarSet' => 'AssessmentsIntroduction']
);
if (!empty($actionsLeft)) {
echo $toolbar = Display::toolbarAction(
'gradebook-student-actions',
[$actionsLeft]
);
}
$cats = Category::load(
null,
null,
$course_code,
null,
null,
$session_id,
false
);
11 years ago
if (!empty($cats)) {
if (('true' === api_get_setting('gradebook_enable_grade_model')) &&
(
api_is_platform_admin() || (
api_is_allowed_to_edit(null, true) &&
'true' === api_get_setting('teachers_can_change_grade_model_settings')
)
)
) {
// Getting grade models.
$obj = new GradeModel();
$grade_models = $obj->get_all();
$grade_model_id = $cats[0]->get_grade_model_id();
// No children.
if ((1 == count($cats) && empty($grade_model_id)) ||
(1 == count($cats) && -1 != $grade_model_id)
) {
if (!empty($grade_models)) {
$form_grade = new FormValidator('grade_model_settings');
$obj->fill_grade_model_select_in_form($form_grade, 'grade_model_id', $grade_model_id);
$form_grade->addButtonSave(get_lang('Save'));
if ($form_grade->validate()) {
13 years ago
$value = $form_grade->exportValue('grade_model_id');
$gradebook = new Gradebook();
$gradebook->update(['id' => $cats[0]->get_id(), 'grade_model_id' => $value], true);
//do something
$obj = new GradeModel();
$components = $obj->get_components($value);
foreach ($components as $component) {
$gradebook = new Gradebook();
$params = [];
$params['name'] = $component['acronym'];
$params['description'] = $component['title'];
$params['user_id'] = api_get_user_id();
$params['parent_id'] = $cats[0]->get_id();
$params['weight'] = $component['percentage'];
$params['session_id'] = api_get_session_id();
$params['course_code'] = api_get_course_id();
$params['grade_model_id'] = api_get_session_id();
$gradebook->save($params);
}
// Reloading cats
$cats = Category:: load(
null,
null,
$course_code,
null,
null,
$session_id,
false
);
} else {
$form_grade->display();
}
}
}
}
12 years ago
$i = 0;
$allcat = [];
$model = ExerciseLib::getCourseScoreModel();
$allowGraph = false === api_get_configuration_value('gradebook_hide_graph');
$isAllow = api_is_allowed_to_edit(null, true);
$settings = api_get_configuration_value('gradebook_pdf_export_settings');
$showFeedBack = true;
if (isset($settings['hide_feedback_textarea']) && $settings['hide_feedback_textarea']) {
$showFeedBack = false;
}
/** @var Category $cat */
foreach ($cats as $cat) {
$allcat = $cat->get_subcategories($stud_id, $course_code, $session_id);
$alleval = $cat->get_evaluations($stud_id, false, $course_code, $session_id);
$alllink = $cat->get_links($stud_id, true, $course_code, $session_id);
if (0 != $cat->get_parent_id()) {
12 years ago
$i++;
} else {
// This is the father
// Create gradebook/add gradebook links.
DisplayGradebook::header(
$cat,
0,
$cat->get_id(),
$is_course_admin,
$is_platform_admin,
$simple_search_form,
false,
true,
$certificate
);
if ($isAllow && 'true' === api_get_setting('gradebook_enable_grade_model')) {
// Showing the grading system
11 years ago
if (!empty($grade_models[$grade_model_id])) {
echo Display::return_message(
get_lang('Grading model').': '.$grade_models[$grade_model_id]['name']
);
}
11 years ago
}
$exportToPdf = false;
if ('export_table' === $action) {
$exportToPdf = true;
}
$loadStats = [];
if (!$isAllow) {
if ('true' === api_get_setting('gradebook_detailed_admin_view')) {
$loadStats = [1, 2, 3];
} else {
if (false !== api_get_configuration_value('gradebook_enable_best_score')) {
$loadStats = [2];
}
}
}
$gradebookTable = new GradebookTable(
$cat,
$allcat,
$alleval,
$alllink,
$addparams,
$exportToPdf,
null,
null,
[],
$loadStats
);
if ($isAllow) {
$gradebookTable->td_attributes = [
4 => 'class="text-center"',
];
}
$table = $gradebookTable->return_table();
$graph = '';
if ($allowGraph && empty($model)) {
$graph = $gradebookTable->getGraph();
}
if ('export_table' === $action) {
ob_clean();
$params = [
'pdf_title' => sprintf(get_lang('Grades from course: %s'), $courseInfo['name']),
'course_code' => api_get_course_id(),
'session_info' => '',
'course_info' => '',
'pdf_date' => '',
'student_info' => api_get_user_info(),
'show_grade_generated_date' => true,
'show_real_course_teachers' => false,
'show_teacher_as_myself' => false,
'orientation' => 'P',
];
$feedback = '';
if ($showFeedBack) {
$feedback = '<br />'.get_lang('Feedback').'<br />
<textarea rows="5" cols="100" >&nbsp;</textarea>';
}
$pdf = new PDF('A4', $params['orientation'], $params);
$pdf->html_to_pdf_with_template($table.$graph.$feedback);
} else {
echo $table;
echo $graph;
}
11 years ago
}
}
}
}
api_set_in_gradebook();
$contents = ob_get_contents();
ob_end_clean();
$view = new Template($viewTitle);
$view->assign('content', $contents);
$view->display_one_col_template();