Adding certificate shortcut link see #3630 + some fixes in the certification tool
	
		
	
				
					
				
			
							parent
							
								
									fd523dec65
								
							
						
					
					
						commit
						23c77f64b4
					
				@ -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(); | 
				
			||||
@ -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; | 
				
			||||
	} | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue