From 83ee45581b059a4cb84e53291afce3b08fc8df3d Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Wed, 17 Oct 2012 19:02:12 +0200 Subject: [PATCH] Adding new actions to the certificate page, generate certificate, delete all certificates, download certificates as PDF + a fix in the certificate min score see #3708 --- .../gradebook_display_certificate.php | 90 +++++++++++++++---- main/gradebook/index.php | 80 ++--------------- main/gradebook/lib/be/category.class.php | 78 +++++++++++++++- main/gradebook/lib/fe/displaygradebook.php | 11 +-- .../gradebook/lib/gradebook_functions.inc.php | 8 +- main/inc/lib/certificate.lib.php | 24 ++--- main/inc/lib/pdf.lib.php | 19 ++-- 7 files changed, 187 insertions(+), 123 deletions(-) diff --git a/main/gradebook/gradebook_display_certificate.php b/main/gradebook/gradebook_display_certificate.php index 26a8060072..c409160bc2 100644 --- a/main/gradebook/gradebook_display_certificate.php +++ b/main/gradebook/gradebook_display_certificate.php @@ -35,20 +35,69 @@ if (!api_is_allowed_to_edit()) { api_not_allowed(true); } +$cat_id = isset($_GET['cat_id']) ? (int)$_GET['cat_id'] : null; +$action = isset($_GET['action']) && $_GET['action'] ? $_GET['action'] : null; +switch ($action) { + case 'export_all_certificates': + $params['orientation'] = 'landscape'; + $page_format = $params['orientation'] == 'landscape' ? 'A4-L' : 'A4'; + $pdf = new PDF($page_format, $params['orientation'], $params); + + $certificate_list = get_list_users_certificates($cat_id); + $certificate_path_list = array(); + + if (!empty($certificate_list)) { + foreach ($certificate_list as $index=>$value) { + $list_certificate = get_list_gradebook_certificates_by_user_id($value['user_id'], $cat_id); + foreach ($list_certificate as $value_certificate) { + $certificate_obj = new Certificate($value_certificate['id']); + $certificate_obj->generate(array('hide_print_button' => true)); + if ($certificate_obj->html_file_is_generated()) { + $certificate_path_list[]= $certificate_obj->html_file; + } + } + } + } + if (!empty($certificate_path_list)) { + $pdf->html_to_pdf($certificate_path_list, get_lang('Certificates')); + } + break; + case 'generate_all_certificates': + $user_list = Coursemanager::get_user_list_from_course_code(api_get_course_id(), api_get_session_id()); + if (!empty($user_list)) { + foreach ($user_list as $user_info) { + Category::register_user_certificate($cat_id, $user_info['user_id']); + } + } + break; + case 'delete_all_certificates': + $certificate_list = get_list_users_certificates($cat_id); + if (!empty($certificate_list)) { + foreach ($certificate_list as $index=>$value) { + $list_certificate = get_list_gradebook_certificates_by_user_id($value['user_id'], $cat_id); + foreach ($list_certificate as $value_certificate) { + $certificate_obj = new Certificate($value_certificate['id']); + $certificate_obj->delete(true); + } + } + } + break; +} - $course_code = api_get_course_id(); $interbreadcrumb[] = array ('url' => Security::remove_XSS($_SESSION['gradebook_dest']).'?', 'name' => get_lang('Gradebook')); $interbreadcrumb[] = array ('url' => '#','name' => get_lang('GradebookListOfStudentsCertificates')); + $this_section = SECTION_COURSES; + Display::display_header(''); if ($_GET['action'] == 'delete') { $check = Security::check_token('get'); if ($check) { $certificate = new Certificate($_GET['certificate_id']); - $result = $certificate->delete(); + $result = $certificate->delete(true); Security::clear_token(); if ($result ==true) { Display::display_confirmation_message(get_lang('CertificateRemoved')); @@ -61,10 +110,9 @@ if ($_GET['action'] == 'delete') { $token = Security::get_token(); echo Display::page_header(get_lang('GradebookListOfStudentsCertificates')); -$cat_id = isset($_GET['cat_id']) ? (int)$_GET['cat_id'] : null; //@todo replace all this code with something like get_total_weight() -$cats = Category :: load ($cat_id, null, null, null, null, null, false); +$cats = Category :: load($cat_id, null, null, null, null, null, false); if (!empty($cats)) { @@ -104,33 +152,43 @@ if (!empty($cats)) { } } -$certificate_list = get_list_users_certificates($cat_id); +$certificate_list = get_list_users_certificates($cat_id); + +echo '
'; +$url = api_get_self().'?action=generate_all_certificates'.'&'.api_get_cidReq().'&cat_id='.$cat_id; +echo Display::url(get_lang('GenerateCertificates'), $url, array('class' => 'btn')); + +$url = api_get_self().'?action=delete_all_certificates'.'&'.api_get_cidReq().'&cat_id='.$cat_id; +echo Display::url(get_lang('DeleteAllCertificates'), $url, array('class' => 'btn')); + +if (count($certificate_list) > 0) { + $url = api_get_self().'?action=export_all_certificates'.'&'.api_get_cidReq().'&cat_id='.$cat_id; + echo Display::url(get_lang('ExportAllCertificatesToPDF'), $url, array('class' => 'btn')); +} +echo '
'; if (count($certificate_list)==0) { - echo Display::display_warning_message(get_lang('NoResultsAvailable')); + echo Display::display_warning_message(get_lang('NoResultsAvailable')); } else { - echo ''; + + echo '

'; foreach ($certificate_list as $index=>$value) { echo ' - '; + '; echo ''; echo '
'.get_lang('Student').' : '.api_get_person_name($value['firstname'], $value['lastname']).' ( '.$value['username'].')'.get_lang('Student').' : '.api_get_person_name($value['firstname'], $value['lastname']).' ('.$value['username'].')
'; - $list_certificate = get_list_gradebook_certificates_by_user_id ($value['user_id'], $cat_id); + $list_certificate = get_list_gradebook_certificates_by_user_id($value['user_id'], $cat_id); foreach ($list_certificate as $value_certificate) { echo ''; echo ''; echo ''; - echo '
'.get_lang('Score').' : '.$value_certificate['score_certificate'].''.get_lang('Date').' : '.api_convert_and_format_date($value_certificate['created_at']).''; - - //$url = "index.php?export_certificate=yes&cat_id=".$cat_id."&user=".$value['user_id']; + echo ''; $url = api_get_path(WEB_PATH).'certificates/index.php?id='.$value_certificate['id']; - $certificates = Display::url(get_lang('Certificate'), $url, array('target'=>'_blank', 'class' => 'btn')); - - echo $certificates; - + $certificates = Display::url(get_lang('Certificate'), $url, array('target'=>'_blank', 'class' => 'btn')); + echo $certificates; echo ' '.Display::return_icon('delete.png',get_lang('Delete')).' '; diff --git a/main/gradebook/index.php b/main/gradebook/index.php index bdd255dab8..d748972153 100644 --- a/main/gradebook/index.php +++ b/main/gradebook/index.php @@ -617,7 +617,7 @@ if (empty ($_GET['selectcat'])) { } $simple_search_form=''; -if (isset ($_GET['studentoverview'])) { +if (isset($_GET['studentoverview'])) { //@todo this code also seems to be deprecated ... $cats= Category :: load($category); $stud_id= (api_is_allowed_to_edit() ? null : $stud_id); @@ -732,81 +732,13 @@ if ($category != '0') { $course_id = Database::get_course_by_category($category_id); $show_message = $cat->show_message_resource_delete($course_id); - if ($show_message=='') { - + if ($show_message == '') { //student if (!api_is_allowed_to_edit()) { - - // generating the total score for a course - $cats_course = Category :: load ($category_id, null, null, null, null, null, false); - - $alleval_course = $cats_course[0]->get_evaluations($stud_id,true); - $alllink_course = $cats_course[0]->get_links($stud_id,true); - - $evals_links = array_merge($alleval_course, $alllink_course); - $item_value = 0; - $item_total = 0; - - //@todo move these in a function - $sum_categories_weight_array = array(); - if (isset($cats_course) && !empty($cats_course)) { - $categories = Category::load(null, null, null, $category_id); - if (!empty($categories)) { - foreach($categories as $category) { - $sum_categories_weight_array[$category->get_id()] = $category->get_weight(); - } - } else { - $sum_categories_weight_array[$category_id] = $cats_course[0]->get_weight(); - } - } - - $item_total_value = 0; - $item_value = 0; - - for ($count=0; $count < count($evals_links); $count++) { - $item = $evals_links[$count]; - $score = $item->calc_score($stud_id); - - $score_denom = ($score[1]==0) ? 1 : $score[1]; - $item_value = $score[0]/$score_denom*$item->get_weight(); - - $item_total += $item->get_weight(); - $item_total_value += $item_value; - } - - $item_total_value = (float)$item_total_value; - - $cattotal = Category :: load($category_id); - - $scoretotal= $cattotal[0]->calc_score(api_get_user_id()); - - //Do not remove this the gradebook/lib/fe/gradebooktable.class.php file load this variable as a global - $scoredisplay = ScoreDisplay :: instance(); - - //$my_score_in_gradebook = round($scoretotal[0],2); - $my_score_in_gradebook = $scoredisplay->display_score($scoretotal, SCORE_SIMPLE); - - //Show certificate - $certificate_min_score = $cats[0]->get_certificate_min_score(); - - $scoretotal_display = $scoredisplay->display_score($scoretotal, SCORE_DIV_PERCENT); //a student always sees only the teacher's repartition - //var_dump($certificate_min_score, $item_total_value); - if (isset($certificate_min_score) && $item_total_value >= $certificate_min_score) { - $my_certificate = get_certificate_by_user_id($cats[0]->get_id(), api_get_user_id()); - if (empty($my_certificate)) { - register_user_info_about_certificate($category_id, api_get_user_id(), $my_score_in_gradebook, api_get_utc_datetime()); - $my_certificate = get_certificate_by_user_id($cats[0]->get_id(), api_get_user_id()); - } - - if (!empty($my_certificate)) { - $url = api_get_path(WEB_PATH) .'certificates/index.php?id='.$my_certificate['id']; - $certificates = Display::url(Display::return_icon('certificate.png', get_lang('Certificates'), array(), 32), $url, array('target'=>'_blank')); - echo '
'; - echo Display::url($url, $url, array('target'=>'_blank')); - echo $certificates; - echo '
'; - } - } + $certificate_html = Category::register_user_certificate($category_id, $stud_id); + if ($certificate_html) { + echo $certificate_html; + } } //end hack } } diff --git a/main/gradebook/lib/be/category.class.php b/main/gradebook/lib/be/category.class.php index 7121ef4bc4..df26d29a09 100644 --- a/main/gradebook/lib/be/category.class.php +++ b/main/gradebook/lib/be/category.class.php @@ -1360,5 +1360,81 @@ class Category implements GradebookItem } event_system($event_type, LOG_GRADEBOOK_ID, $this->id); } - } + } + + static function register_user_certificate($category_id, $user_id) { + // generating the total score for a course + $cats_course = Category :: load($category_id, null, null, null, null, null, false); + + $alleval_course = $cats_course[0]->get_evaluations($user_id, true); + $alllink_course = $cats_course[0]->get_links($user_id, true); + + $evals_links = array_merge($alleval_course, $alllink_course); + + $item_total = 0; + + //@todo move these in a function + $sum_categories_weight_array = array(); + if (isset($cats_course) && !empty($cats_course)) { + $categories = Category::load(null, null, null, $category_id); + if (!empty($categories)) { + foreach($categories as $category) { + $sum_categories_weight_array[$category->get_id()] = $category->get_weight(); + } + } else { + $sum_categories_weight_array[$category_id] = $cats_course[0]->get_weight(); + } + } + + $main_weight = $cats_course[0]->get_weight(); + + $item_total_value = 0; + $item_value = 0; + + for ($count=0; $count < count($evals_links); $count++) { + $item = $evals_links[$count]; + $score = $item->calc_score($user_id); + $divide = ( ($score[1])==0 ) ? 1 : $score[1]; + $sub_cat_percentage = $sum_categories_weight_array[$item->get_category_id()]; + $item_value = $score[0]/$divide*$item->get_weight()*$sub_cat_percentage/$main_weight; + $item_total_value += $item_value; + } + $item_total_value = (float)$item_total_value; + + $cattotal = Category :: load($category_id); + + $scoretotal= $cattotal[0]->calc_score($user_id); + + //Do not remove this the gradebook/lib/fe/gradebooktable.class.php file load this variable as a global + $scoredisplay = ScoreDisplay :: instance(); + + $my_score_in_gradebook = $scoredisplay->display_score($scoretotal, SCORE_SIMPLE); + + //Show certificate + $certificate_min_score = $cats_course[0]->get_certificate_min_score(); + + $scoretotal_display = $scoredisplay->display_score($scoretotal, SCORE_DIV_PERCENT); //a student always sees only the teacher's repartition + + if (isset($certificate_min_score) && $item_total_value >= $certificate_min_score) { + $my_certificate = get_certificate_by_user_id($cats_course[0]->get_id(), $user_id); + if (empty($my_certificate)) { + register_user_info_about_certificate($category_id, $user_id, $my_score_in_gradebook, api_get_utc_datetime()); + $my_certificate = get_certificate_by_user_id($cats_course[0]->get_id(), $user_id); + } + + if (!empty($my_certificate)) { + $certificate_obj = new Certificate($my_certificate['id']); + + $url = api_get_path(WEB_PATH) .'certificates/index.php?id='.$my_certificate['id']; + $certificates = Display::url(Display::return_icon('certificate.png', get_lang('Certificates'), array(), 32), $url, array('target'=>'_blank')); + $html = '
'; + $html .= Display::url($url, $url, array('target'=>'_blank')); + $html .= $certificates; + $html .= '
'; + return $html; + } + } else { + return false; + } + } } diff --git a/main/gradebook/lib/fe/displaygradebook.php b/main/gradebook/lib/fe/displaygradebook.php index 1ad1b1a265..ebbe327e86 100644 --- a/main/gradebook/lib/fe/displaygradebook.php +++ b/main/gradebook/lib/fe/displaygradebook.php @@ -392,22 +392,19 @@ class DisplayGradebook $item_value =0; $item_total = 0; $item_total_value = 0; - //var_dump($sum_categories_weight_array); for ($count=0; $count < count($evals_links); $count++) { $item = $evals_links[$count]; $score = $item->calc_score($user_id); $divide = ( ($score[1])==0 ) ? 1 : $score[1]; - $sub_cat_percentage = $sum_categories_weight_array[$item->get_category_id()]; - - $item_value = $score[0]/$divide; - //$item_value = $item_value*$item->get_weight(); + $sub_cat_percentage = $sum_categories_weight_array[$item->get_category_id()]; + //$item_value = $score[0]/$divide; $item_value = $score[0]/$divide*$item->get_weight()*$sub_cat_percentage/$main_weight; - //var_dump($score[0].' '.$divide.' '.$item->get_weight().' - '.$item_value.' '.$sub_cat_percentage); $item_value_total +=$item_value; } $item_total = $main_weight; + $total_score = array($item_value_total, $item_total); $scorecourse_display = $scoredisplay->display_score($total_score, SCORE_DIV_PERCENT); @@ -422,7 +419,7 @@ class DisplayGradebook $header = '
'; $header .= ''; if (!$selectcat == '0') { - $header .= ''; + $header .= ''; } $header .= '' . '
'.Display::return_icon('back.png',get_lang('BackTo').' '.get_lang('RootCat'),'',ICON_SIZE_MEDIUM).''.Display::return_icon('back.png',get_lang('BackTo').' '.get_lang('RootCat'),'',ICON_SIZE_MEDIUM).'' . get_lang('CurrentCategory') . '