* @package chamilo.learnpath */ $_in_course = true; require_once __DIR__ . '/../inc/global.inc.php'; $current_course_tool = TOOL_GRADEBOOK; // Make sure no anonymous user gets here without permission api_protect_course_script(true); // Get environment variables $courseCode = api_get_course_id(); $courseId = api_get_course_int_id(); $userId = api_get_user_id(); $sessionId = api_get_session_id(); $id = isset($_GET['id']) ? intval($_GET['id']) : 0; $lpId = isset($_GET['lp_id']) ? intval($_GET['lp_id']) : 0; // This page can only be shown from inside a learning path if (!$id && !$lpId) { Display::return_message(get_lang('FileNotFound'), 'warning'); exit; } // Certificate and Skills Premium with Service check $plugin = BuyCoursesPlugin::create(); $checker = $plugin->isEnabled() && $plugin->get('include_services'); if ($checker) { $userServiceSale = $plugin->getServiceSale( null, $userId, BuyCoursesPlugin::SERVICE_STATUS_COMPLETED, BuyCoursesPlugin::SERVICE_TYPE_LP_FINAL_ITEM, $lpId ); if (empty($userServiceSale)) { // Instance a new template : No page tittle, No header, No footer $tpl = new Template(null, false, false); $content = sprintf( Display::return_message( $plugin->get_lang('IfYouWantToGetTheCertificateAndOrSkillsAsociatedToThisCourseYouNeedToBuyTheCertificateServiceYouCanGoToServiceCatalogClickingHere'), 'normal', false ), api_get_path(WEB_PLUGIN_PATH) . 'buycourses/src/service_catalog.php' ); $tpl->assign('content', $content); $tpl->display_blank_template(); exit; } } // Initialize variables required for the template $downloadCertificateLink = ''; $viewCertificateLink = ''; $badgeLink = ''; $finalItemTemplate = ''; // Check prerequisites and total completion of the learning path $lp = new Learnpath($courseCode, $lpId, $userId); $count = $lp->getTotalItemsCountWithoutDirs(); $completed = $lp->get_complete_items_count(true); $currentItemId = $lp->get_current_item_id(); $currentItem = $lp->items[$currentItemId]; $currentItemStatus = $currentItem->get_status(); $accessGranted = false; if ( ($count - $completed == 0) || ($count - $completed == 1 && ($currentItemStatus == 'incomplete') || ($currentItemStatus == 'not attempted')) ) { if ($lp->prerequisites_match($currentItemId)) { $accessGranted = true; } } // Update the progress in DB from the items completed $lp->save_last(); // unset the (heavy) lp object to free memory - we don't need it anymore unset($lp); unset($currentItem); // If for some reason we consider the requirements haven't been completed yet, // show a prerequisites warning if ($accessGranted == false) { Display::display_warning_message(get_lang('LearnpathPrereqNotCompleted')); $finalItemTemplate = ''; } else { $catLoad = Category::load(null, null, $courseCode, null, null, $sessionId, 'ORDER By id'); // If not gradebook has been defined if (empty($catLoad)) { $finalItemTemplate = generateLPFinalItemTemplate( $id, $courseCode, $sessionId, $downloadCertificateLink, $badgeLink ); // TODO: Missing validation of learning path completion } else { // A gradebook was found, proceed... $categoryId = $catLoad[0]->get_id(); $link = LinkFactory::load(null, null, $lpId, null, $courseCode, $categoryId); if ($link) { $cat = new Category(); $catCourseCode = CourseManager::get_course_by_category($categoryId); $show_message = $cat->show_message_resource_delete($catCourseCode); if ($show_message == '') { if (!api_is_allowed_to_edit() && !api_is_excluded_user_type()) { $certificate = Category::register_user_certificate($categoryId, $userId); if (!empty($certificate['pdf_url']) || !empty($certificate['badge_link'])) { if (is_array($certificate) && isset($certificate['pdf_url'])) { $downloadCertificateLink = generateLPFinalItemTemplateCertificateLinks($certificate); } if (is_array($certificate) && isset($certificate['badge_link'])) { $courseId = api_get_course_int_id(); $badgeLink = generateLPFinalItemTemplateBadgeLinks($userId, $courseId, $sessionId); } } $currentScore = Category::getCurrentScore($userId, $categoryId, $courseCode, $sessionId, true); Category::registerCurrentScore($currentScore, $userId, $categoryId); } } } $finalItemTemplate = generateLPFinalItemTemplate($id, $courseCode, $sessionId, $downloadCertificateLink, $badgeLink); if (!$finalItemTemplate) { Display::display_warning_message(get_lang('FileNotFound')); } } } // Instance a new template : No page tittle, No header, No footer $tpl = new Template(null, false, false); $tpl->assign('content', $finalItemTemplate); $tpl->display_blank_template(); // A few functions used only here... /** * Return a HTML string to show as final document in learning path * @param int $lpItemId * @param string $courseCode * @param int $sessionId * @param string $downloadCertificateLink * @param string $badgeLink * @return mixed|string */ function generateLPFinalItemTemplate($lpItemId, $courseCode, $sessionId = 0, $downloadCertificateLink = '', $badgeLink = '') { $documentInfo = DocumentManager::get_document_data_by_id( $lpItemId, $courseCode, true, $sessionId ); $finalItemTemplate = file_get_contents($documentInfo['absolute_path']); $finalItemTemplate = str_replace('((certificate))', $downloadCertificateLink, $finalItemTemplate); $finalItemTemplate = str_replace('((skill))', $badgeLink, $finalItemTemplate); return $finalItemTemplate; } /** * Return HTML string with badges list * @param int $userId * @param int $courseId * @param int $sessionId * @return string HTML string for badges */ function generateLPFinalItemTemplateBadgeLinks($userId, $courseId, $sessionId = 0) { $em = Database::getManager(); $skillRelUser = new SkillRelUser(); $userSkills = $skillRelUser->get_user_skills($userId, $courseId, $sessionId); $skillList = ''; $badgeLink = ''; if ($userSkills) { foreach ($userSkills as $userSkill) { $skill = $em->find('ChamiloCoreBundle:Skill', $userSkill['skill_id']); $skillList .= "
" . $skill->getName() . "
" . $skill->getDescription() . "
" . get_lang('ShareWithYourFriends') . "
getName() . '"', api_get_setting('siteName')) . ' - ' . api_get_path(WEB_PATH) . 'badge/' . $skill->getId() . '/user/' . $userId . "' target='_new'>
"; } $badgeLink .= "

" . get_lang('AdditionallyYouHaveObtainedTheFollowingSkills') . "

$skillList
"; } return $badgeLink; } /** * Return HTML string with certificate links * @param array $certificate * @return string HTML string for certificates */ function generateLPFinalItemTemplateCertificateLinks($certificate) { $downloadCertificateLink = Display::url( Display::returnFontAwesomeIcon('file-pdf-o') . get_lang('DownloadCertificatePdf'), $certificate['pdf_url'], ['class' => 'btn btn-default'] ); $viewCertificateLink = $certificate['certificate_link']; $downloadCertificateLink = "

" . get_lang('NowDownloadYourCertificateClickHere') . "

$downloadCertificateLink $viewCertificateLink
"; return $downloadCertificateLink; }