Adding certificate shortcut link see #3630 + some fixes in the certification tool

skala
Julio Montoya 14 years ago
parent fd523dec65
commit 23c77f64b4
  1. 25
      certificates/index.php
  2. 2
      main/document/create_document.php
  3. 2
      main/document/edit_document.php
  4. 5
      main/gradebook/gradebook_display_certificate.php
  5. 19
      main/gradebook/index.php
  6. 2
      main/gradebook/lib/be/evaluation.class.php
  7. 8
      main/gradebook/lib/fe/displaygradebook.php
  8. 9
      main/gradebook/lib/gradebook_functions.inc.php
  9. 151
      main/inc/lib/certificate.lib.php
  10. 9
      main/inc/lib/document.lib.php
  11. 15
      main/inc/lib/usermanager.lib.php

@ -0,0 +1,25 @@
<?php
/* For licensing terms, see /license.txt */
/**
* Show specified user certificate
* @package chamilo.certificate
*/
/**
* Initialization
*/
$language_file= 'gradebook';
require_once '../main/inc/global.inc.php';
require_once api_get_path(LIBRARY_PATH).'certificate.lib.php';
/**
* Retrieve certificate
*/
$certificate = new Certificate($_GET['id']);
/**
* Show results
*/
$certificate->show();

@ -637,7 +637,7 @@ if ($form->validate()) {
//api_display_tool_title($nameTools);
// actions
if ($is_certificate_mode) {
$all_information_by_create_certificate = DocumentManager::get_all_info_to_certificate(api_get_user_id());
$all_information_by_create_certificate = DocumentManager::get_all_info_to_certificate(api_get_user_id(), api_get_course_id());
$str_info = '';
foreach ($all_information_by_create_certificate[0] as $info_value) {

@ -493,7 +493,7 @@ if ($owner_id == api_get_user_id() || api_is_platform_admin() || $is_allowed_to_
$form->addElement('html', '<div id="frmModel" style="display:block; height:525px; width:240px; position:absolute; top:115px; left:1px;"></div>');
*/
if (isset($_REQUEST['curdirpath']) && $dir =='/certificates') {
$all_information_by_create_certificate=DocumentManager::get_all_info_to_certificate(api_get_user_id());
$all_information_by_create_certificate=DocumentManager::get_all_info_to_certificate(api_get_user_id(), api_get_course_id());
$str_info='';
foreach ($all_information_by_create_certificate[0] as $info_value) {
$str_info.=$info_value.'<br/>';

@ -111,8 +111,8 @@ echo Display::tag('h3', get_lang('GradebookListOfStudentsCertificates'));
<td>
<table class="data_table" width="100%" >
<?php
$list_certificate = get_list_gradebook_certificates_by_user_id ($value['user_id'],$cat_id);
foreach ($list_certificate as $index_certificate=>$value_certificate) {
$list_certificate = get_list_gradebook_certificates_by_user_id ($value['user_id'], $cat_id);
foreach ($list_certificate as $index_certificate => $value_certificate) {
?>
<tr >
<td width="50%"><?php echo get_lang('Score').' : '.$value_certificate['score_certificate'] ?></td>
@ -120,6 +120,7 @@ echo Display::tag('h3', get_lang('GradebookListOfStudentsCertificates'));
<td width="20%">
<?php
$url = "index.php?export_certificate=yes&cat_id=".$cat_id."&user=".$value['user_id'];
//$url = api_get_path(WEB_PATH).'certificates/?id=';
$certificates = Display::url(Display::return_icon('certificate.png', get_lang('Certificates'), array(), 22), $url, array('target'=>'_blank'));
echo $certificates;
?>

@ -608,6 +608,7 @@ if (isset ($_GET['studentoverview'])) {
if (empty($user_id)) {
api_not_allowed();
}
$my_category = Category :: load($category); //hack replace $category = Category :: load ($_GET['cat_id']); to get de course name in certificates
global $charset;
@ -626,7 +627,7 @@ if (isset ($_GET['studentoverview'])) {
echo @file_get_contents($user_certificate);
}
} else {
$new_content_html = get_user_certificate_content($user_id, true);
$new_content_html = get_user_certificate_content($user_id, api_get_course_id(), true);
if (empty($new_content_html)) {
Display :: display_reduced_header();
Display :: display_warning_message(get_lang('NoCertificateAvailable'));
@ -675,7 +676,7 @@ if (isset ($_GET['studentoverview'])) {
$name = $data['path_certificate'];
if (!empty($data)) {
$new_content_html = get_user_certificate_content($user_id, false);
$new_content_html = get_user_certificate_content($user_id, api_get_course_id(), false);
if ($cat_id = strval(intval($cat_id))) {
$my_path_certificate = $path_directory_user_certificate.$name;
@ -847,12 +848,16 @@ if ($category != '0') {
//$score_compare = ($scoretotal[0] / $scoretotal[1]) * 100; //build the total percentage obtained in order to compare it to the minimum certification percentage
if (isset($certificate_min_score) && $item_value >= $certificate_min_score) {
$url = api_get_path(WEB_CODE_PATH) .'gradebook/'.Security::remove_XSS($_SESSION['gradebook_dest']).'?export_certificate=yes&cat_id='.$cats[0]->get_id();
$certificates = Display::url(Display::return_icon('certificate.png', get_lang('Certificates'), array(), 48), $url, array('target'=>'_blank'));
echo '<div class="actions" align="right">';
echo $certificates;
echo '</div>';
$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/?id='.$my_certificate['id'];
$certificates = Display::url(Display::return_icon('certificate.png', get_lang('Certificates'), array(), 48), $url, array('target'=>'_blank'));
echo '<div class="actions" align="right">';
echo $certificates;
echo '<br />'.Display::url($url, $url, array('_blank'));
echo '</div>';
}
}
} //end hack

@ -177,7 +177,7 @@ class Evaluation implements GradebookItem
else $sql .= ' WHERE';
$sql .= ' visible = '.intval($locked);
$paramcount ++;
}
}
$result = Database::query($sql);
$alleval = Evaluation::create_evaluation_objects_from_sql_result($result);
return $alleval;

@ -332,13 +332,17 @@ class DisplayGradebook
}
if (!$message_resource) {
$myname=$catobj->shows_all_information_an_category($catobj->get_id());
$myname = $catobj->shows_all_information_an_category($catobj->get_id());
$my_course_id=api_get_course_id();
$my_file= substr($_SESSION['gradebook_dest'],0,5);
$header .= '<td style="vertical-align: top;"><a href="gradebook_flatview.php?'.$my_api_cidreq.'&selectcat=' . $catobj->get_id() . '">'.Display::return_icon('stats.png', get_lang('FlatView'),'','32').'</a>';
$header .= '<td style="vertical-align: top;"><a href="../document/document.php?curdirpath=/certificates&'.$my_api_cidreq.'&origin=gradebook&selectcat=' . $catobj->get_id() . '">'.Display::return_icon('certificate.png', get_lang('AttachCertificate'),'','32').'</a>';
$header .= '<td style="vertical-align: top;"><a href="../document/document.php?curdirpath=/certificates&'.$my_api_cidreq.'&origin=gradebook&selectcat=' . $catobj->get_id() . '">'.
Display::return_icon('certificate.png', get_lang('AttachCertificate'),'','32').
'</a>';
$header .= '<td style="vertical-align: top;"><a href="gradebook_display_certificate.php?'.$my_api_cidreq.'&amp;cat_id='.(int)$_GET['selectcat'].'">'.Display::return_icon('certificate_list.png', get_lang('GradebookSeeListOfStudentsCertificates'),'','32').'</a>';
$visibility_icon = ($catobj->is_visible() == 0) ? 'invisible' : 'visible';

@ -598,14 +598,13 @@ function delete_certificate($cat_id, $user_id) {
}
}
function get_user_certificate_content($user_id, $is_preview = false) {
//generate document HTML
$course_id = api_get_course_id();
$content_html = DocumentManager::replace_user_info_into_html($user_id, $course_id, $is_preview);
function get_user_certificate_content($user_id, $course_code, $is_preview = false) {
//generate document HTML
$content_html = DocumentManager::replace_user_info_into_html($user_id, $course_code, $is_preview);
$new_content = explode('</head>', $content_html);
$new_content_html = $new_content[1];
$path_image = api_get_path(WEB_COURSE_PATH).api_get_course_path().'/document/images/gallery';
$path_image = api_get_path(WEB_COURSE_PATH).api_get_course_path($course_code).'/document/images/gallery';
$new_content_html = str_replace('../images/gallery',$path_image,$new_content_html);
$path_image_in_default_course = api_get_path(WEB_CODE_PATH).'default_course_document';

@ -0,0 +1,151 @@
<?php
/**
* @package chamilo.library
*/
class Certificate extends Model {
var $table;
var $columns = array('id','cat_id','score_certificate','created_at','path_certificate');
var $certificate_data;
var $certification_user_path;
var $user_id;
public function __construct($certificate_id = null) {
$this->table = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CERTIFICATE);
$this->certificate_data = null;
if (isset($certificate_id)) {
$this->certificate_data = $this->get($certificate_id);
$this->user_id = $this->certificate_data['user_id'];
} else {
//Try with the current user
$this->user_id = api_get_user_id();
}
if ($this->user_id) {
//Need to be called before any operation
$this->check_certificate_path();
if (isset($this->certificate_data) && $this->certificate_data) {
if (empty($this->certificate_data['path_certificate'])) {
$this->generate();
}
}
}
}
/**
* Show an HTML file
*/
public function show() {
//Read file or preview file
if (!empty($this->certificate_data['path_certificate'])) {
$user_certificate = $this->certification_user_path.basename($this->certificate_data['path_certificate']);
if (file_exists($user_certificate)) {
header('Content-Type: text/html; charset='. api_get_system_encoding());
echo @file_get_contents($user_certificate);
}
} else {
Display :: display_reduced_header();
Display :: display_warning_message(get_lang('NoCertificateAvailable'));
}
exit;
}
/**
* Checks the certificate user path directories
* Enter description here ...
*/
public function check_certificate_path() {
$this->certification_user_path = null;
//Setting certification path
$path_info = UserManager::get_user_picture_path_by_id($this->user_id, 'system', true);
if (isset($path_info['dir']) && !empty($path_info)) {
$this->certification_user_path = $path_info['dir'].'certificate/';
if (!is_dir($path_info['dir'])) {
mkdir($path_info['dir'],0777);
}
if (!is_dir($this->certification_user_path)) {
mkdir($this->certification_user_path, 0777);
}
}
}
/**
* Generates a certificate
* */
public function generate() {
if (empty($this->certification_user_path)) {
return false;
}
require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/be.inc.php';
require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/gradebook_functions.inc.php';
require_once api_get_path(SYS_CODE_PATH).'gradebook/lib/scoredisplay.class.php';
$my_category = Category :: load($this->certificate_data['cat_id']);
if ($my_category[0]->is_certificate_available($this->user_id)) {
$user = api_get_user_info($this->user_id);
$scoredisplay = ScoreDisplay :: instance();
$scorecourse = $my_category[0]->calc_score($this->user_id);
$scorecourse_display = (isset($scorecourse) ? $scoredisplay->display_score($scorecourse,SCORE_AVERAGE) : get_lang('NoResultsAvailable'));
$cattotal = Category :: load($this->certificate_data['cat_id']);
$scoretotal= $cattotal[0]->calc_score($this->user_id);
$scoretotal_display = (isset($scoretotal) ? $scoredisplay->display_score($scoretotal,SCORE_PERCENT) : get_lang('NoResultsAvailable'));
//Prepare all necessary variables:
$organization_name = api_get_setting('Institution');
$portal_name = api_get_setting('siteName');
$stud_fn = $user['firstname'];
$stud_ln = $user['lastname'];
//@todo this code is not needed
$certif_text = sprintf(get_lang('CertificateWCertifiesStudentXFinishedCourseYWithGradeZ'), $organization_name, $stud_fn.' '.$stud_ln, $my_category[0]->get_name(), $scorecourse_display);
$certif_text = str_replace("\\n","\n", $certif_text);
$date = date('d/m/Y', time());
if (is_dir($this->certification_user_path)) {
$name = $this->certificate_data['path_certificate'];
if (!empty($this->certificate_data)) {
$new_content_html = get_user_certificate_content($this->user_id, $my_category[0]->get_course_code(), false);
if ($cat_id = strval(intval($this->certificate_data['cat_id']))) {
$my_path_certificate = $this->certification_user_path.$name;
if (file_exists($my_path_certificate) && !empty($name)&& !is_dir($my_path_certificate) ) {
//header('Content-Type: text/html; charset='. $charset);
//echo $new_content_html;
//Seems that the file was already generated
return true;
} else {
$my_new_content_html = $new_content_html;
$my_new_content_html = mb_convert_encoding($my_new_content_html,'UTF-8', api_get_system_encoding());
//Creating new name
$name = md5($this->user_id.$this->certificate_data['cat_id']).'.html';
$my_path_certificate = $this->certification_user_path.$name;
$result = @file_put_contents($my_path_certificate, $my_new_content_html);
$path_certificate='/'.$name;
//@todo move function in this class
update_user_info_about_certificate($this->certificate_data['cat_id'], $this->user_id, $path_certificate);
$this->certificate_data['path_certificate'] = $path_certificate;
return $result;
}
}
}
}
}
return false;
}
}

@ -1346,12 +1346,12 @@ return 'application/octet-stream';
$new_content = '';
if (Database::num_rows($rs)) {
$row=Database::fetch_array($rs);
$filepath = api_get_path(SYS_COURSE_PATH).$course_info['path'].'/document'.$row['path'];
$filepath = api_get_path(SYS_COURSE_PATH).$course_info['path'].'/document'.$row['path'];
if (is_file($filepath)) {
$my_content_html=file_get_contents($filepath);
}
$all_user_info = self::get_all_info_to_certificate($user_id, $is_preview);
$all_user_info = self::get_all_info_to_certificate($user_id, $course_id, $is_preview);
$info_to_be_replaced_in_content_html=$all_user_info[0];
$info_to_replace_in_content_html=$all_user_info[1];
$new_content=str_replace($info_to_be_replaced_in_content_html,$info_to_replace_in_content_html, $my_content_html);
@ -1362,11 +1362,10 @@ return 'application/octet-stream';
/**
* return all content to replace and all content to be replace
*/
function get_all_info_to_certificate($user_id, $is_preview = false) {
function get_all_info_to_certificate($user_id, $course_id, $is_preview = false) {
$info_list = array();
$user_id = intval($user_id);
$course_id = api_get_course_id();
$course_info = api_get_course_info($course_id);
//info portal

@ -3250,15 +3250,16 @@ class UserManager {
$rs = Database::query($sql);
if (Database::num_rows($rs) > 0) {
$row = Database::fetch_array($rs,'ASSOC');
$score = $row['score_certificate'];
$score = $row['score_certificate'];
$category_id = $row['cat_id'];
$eval = Evaluation::load(null, null, $course_code, $category_id);
$cat = Category::load($category_id);
$displayscore = ScoreDisplay::instance();
$grade = '';
if (isset($eval) && $displayscore->is_custom()) {
$grade = $displayscore->display_score(array($score, $eval[0]->get_max()), SCORE_DIV_PERCENT_WITH_CUSTOM);
}
$grade = '';
if (isset($cat) && $displayscore->is_custom()) {
$grade = $displayscore->display_score(array($score, $cat[0]->get_weight()), SCORE_DIV_PERCENT_WITH_CUSTOM);
} else {
$grade = $displayscore->display_score(array($score, $cat[0]->get_weight()));
}
$row['grade'] = $grade;
return $row;
}

Loading…
Cancel
Save