'IntroductionSection', 'Width' => '100%', 'Height' => '300', ]; $form->addHtmlEditor('intro_content', null, false, false, $config, ['data-block' => true]); $form->addButtonSave(get_lang('Save introductory text'), 'intro_cmdUpdate', false, ['data-block' => true]); /* INTRODUCTION MICRO MODULE - COMMANDS SECTION (IF ALLOWED) */ $course_id = api_get_course_int_id(); if ($intro_editAllowed) { /** @var CToolIntro $toolIntro */ $toolIntro = $em ->getRepository('ChamiloCourseBundle:CToolIntro') ->findOneBy(['cId' => $course_id, 'id' => $moduleId, 'sessionId' => $session_id]); /* Replace command */ if ($intro_cmdUpdate) { if ($form->validate()) { $form_values = $form->exportValues(); $intro_content = $form_values['intro_content']; if (!empty($intro_content)) { if (!$toolIntro) { $toolIntro = new CToolIntro(); $toolIntro ->setSessionId($session_id) ->setCId($course_id) ->setId($moduleId); } $toolIntro->setIntroText($intro_content); $em->persist($toolIntro); $em->flush(); Display::addFlash(Display::return_message(get_lang('Intro was updated'), 'confirmation', false)); } else { // got to the delete command $intro_cmdDel = true; } } else { $intro_cmdEdit = true; } } /* Delete Command */ if ($intro_cmdDel && $toolIntro) { $em->remove($toolIntro); $em->flush(); Display::addFlash(Display::return_message(get_lang('Intro was deleted'), 'confirmation')); } } /* INTRODUCTION MICRO MODULE - DISPLAY SECTION */ /* Retrieves the module introduction text, if exist */ // Getting course intro /** @var CToolIntro $toolIntro */ $toolIntro = $em ->getRepository('ChamiloCourseBundle:CToolIntro') ->findOneBy(['cId' => $course_id, 'id' => $moduleId, 'sessionId' => 0]); $intro_content = $toolIntro ? $toolIntro->getIntroText() : ''; if ($session_id) { /** @var CToolIntro $toolIntro */ $toolIntro = $em ->getRepository('ChamiloCourseBundle:CToolIntro') ->findOneBy(['cId' => $course_id, 'id' => $moduleId, 'sessionId' => $session_id]); $introSessionContent = $toolIntro && $toolIntro->getIntroText() ? $toolIntro->getIntroText() : ''; $intro_content = $introSessionContent ?: $intro_content; } // Default behaviour show iframes. $userStatus = COURSEMANAGERLOWSECURITY; // Allows to do a remove_XSS in course introduction with user status COURSEMANAGERLOWSECURITY // Block embed type videos (like vimeo, wistia, etc) - see BT#12244 BT#12556 if (api_get_configuration_value('course_introduction_html_strict_filtering')) { $userStatus = COURSEMANAGER; } // Ignore editor.css $cssEditor = api_get_path(WEB_CSS_PATH).'editor.css'; $linkToReplace = [ '', '', ]; $intro_content = str_replace($linkToReplace, '', $intro_content); $intro_content = Security::remove_XSS($intro_content, $userStatus); /* Determines the correct display */ if ($intro_cmdEdit || $intro_cmdAdd) { $intro_dispDefault = false; $intro_dispForm = true; $intro_dispCommand = false; } else { $intro_dispDefault = true; $intro_dispForm = false; if ($intro_editAllowed) { $intro_dispCommand = true; } else { $intro_dispCommand = false; } } /* Executes the display */ // display thematic advance inside a postit if ($intro_dispForm) { $default['intro_content'] = $intro_content; $form->setDefaults($default); $introduction_section .= $form->returnForm(); } $thematic_description_html = ''; $thematicItemTwo = ''; if (TOOL_COURSE_HOMEPAGE == $tool && !isset($_GET['intro_cmdEdit'])) { // Only show this if we're on the course homepage and we're not currently editing $thematic = new Thematic(); $displayMode = api_get_course_setting('display_info_advance_inside_homecourse'); $class1 = ''; if ('1' === $displayMode) { // Show only the current course progress step $last_done_advance = $thematic->get_last_done_thematic_advance(); $thematic_advance_info = $thematic->get_thematic_advance_list($last_done_advance); $subTitle1 = get_lang('Current topic'); $class1 = ' current'; } elseif ('2' === $displayMode) { // Show only the two next course progress steps $last_done_advance = $thematic->get_next_thematic_advance_not_done(); $next_advance_not_done = $thematic->get_next_thematic_advance_not_done(2); $thematic_advance_info = $thematic->get_thematic_advance_list($last_done_advance); $thematic_advance_info2 = $thematic->get_thematic_advance_list($next_advance_not_done); $subTitle1 = $subTitle2 = get_lang('Next topic'); } elseif ('3' === $displayMode) { // Show the current and next course progress steps $last_done_advance = $thematic->get_last_done_thematic_advance(); $next_advance_not_done = $thematic->get_next_thematic_advance_not_done(); $thematic_advance_info = $thematic->get_thematic_advance_list($last_done_advance); $thematic_advance_info2 = $thematic->get_thematic_advance_list($next_advance_not_done); $subTitle1 = get_lang('Current topic'); $subTitle2 = get_lang('Next topic'); $class1 = ' current'; } if (!empty($thematic_advance_info)) { $thematic_advance = get_lang('Course progress'); $thematicScore = $thematic->get_total_average_of_thematic_advances().'%'; $thematicUrl = api_get_path(WEB_CODE_PATH).'course_progress/index.php?action=thematic_details&'.api_get_cidreq(); $repo = \Chamilo\CoreBundle\Framework\Container::getThematicRepository(); /** @var \Chamilo\CourseBundle\Entity\CThematic $thematic_info */ $thematic_info = $repo->find($thematic_advance_info['thematic_id']); $thematic_advance_info['start_date'] = api_get_local_time($thematic_advance_info['start_date']); $thematic_advance_info['start_date'] = api_format_date( $thematic_advance_info['start_date'], DATE_TIME_FORMAT_LONG ); $userInfo = api_get_user_info(); $courseInfo = api_get_course_info(); $titleThematic = $thematic_advance.' : '.$courseInfo['name'].' ( '.$thematicScore.' )'; $infoUser = '
'; $infoUser .= '
'.$thematicScore.'
'; $thematicItemOne = '
'.$subTitle1.'

'.Display::returnFontAwesomeIcon('book').strip_tags($thematic_info->getTitle()).'

'.Display::returnFontAwesomeIcon('calendar-o').$thematic_advance_info['start_date'].'

'.Display::returnFontAwesomeIcon('file-text-o').strip_tags($thematic_advance_info['content']).'

'.Display::returnFontAwesomeIcon('clock-o').get_lang('Duration in hours').' : '.$thematic_advance_info['duration'].' - '.get_lang('See detail').'

'; if (!empty($thematic_advance_info2)) { $thematic_info2 = $repo->find($thematic_advance_info2['thematic_id']); $thematic_advance_info2['start_date'] = api_get_local_time($thematic_advance_info2['start_date']); $thematic_advance_info2['start_date'] = api_format_date($thematic_advance_info2['start_date'], DATE_TIME_FORMAT_LONG); $thematicItemTwo = '
'.$subTitle2.'

'.Display::returnFontAwesomeIcon('book').api_get_local_time($thematic_info2->getStartDate()).'

'.Display::returnFontAwesomeIcon('calendar-o').$thematic_advance_info2['start_date'].'

'.Display::returnFontAwesomeIcon('file-text-o').strip_tags($thematic_advance_info2['content']).'

'.Display::returnFontAwesomeIcon('clock-o').get_lang('Duration in hours').' : '.$thematic_advance_info2['duration'].' - '.get_lang('See detail').'

'; } $thematicPanel = '
'; $thematicPanel .= '
'.$infoUser.'
'; $thematicPanel .= '
'.$thematicItemOne.$thematicItemTwo.'
'; $thematicPanel .= '
'; $thematicPanel .= '
'.get_lang('Show course planning').'
'; $thematicProgress = Display::panelCollapse( $titleThematic, $thematicPanel, 'thematic', null, 'accordion-thematic', 'collapse-thematic', false ); } } $thematicSection = ''; if (!empty($thematic_advance_info)) { $thematicSection = $thematic_description_html; $thematicSection .= $thematicProgress; } $toolbar = []; /*if (api_is_allowed_to_edit() && empty($session_id)) { $tool = [ 'name' => get_lang('Customize icons'), 'url' => api_get_path(WEB_CODE_PATH).'course_info/tools.php?'.api_get_cidreq(), 'icon' => 'fas fa-cog', ]; $toolbar[] = $tool; }*/ if ($intro_dispCommand) { if (empty($intro_content)) { // Displays "Add intro" commands if (!empty($courseId)) { $tool = [ 'name' => addslashes(get_lang('Add Intro')), 'url' => api_get_self().'?'.api_get_cidreq().$blogParam.'&intro_cmdAdd=1', 'icon' => 'fas fa-pencil-alt', ]; $toolbar[] = $tool; } else { $tool = [ 'name' => get_lang('Add Intro'), 'url' => api_get_self().'?intro_cmdAdd=1', 'icon' => 'fas fa-pencil-alt', ]; $toolbar[] = $tool; } } else { // Displays "edit intro && delete intro" commands if (!empty($courseId)) { $tool = [ 'name' => get_lang('Edit'), 'url' => api_get_self().'?'.api_get_cidreq().$blogParam.'&intro_cmdEdit=1', 'icon' => 'fas fa-pencil-alt', ]; $toolbar[] = $tool; $tool = [ 'name' => addslashes(api_htmlentities(get_lang('Please confirm your choice'))), 'url' => api_get_self()."?".api_get_cidreq().$blogParam."&intro_cmdDel=1", 'icon' => 'fas fa-trash-alt', 'class' => 'delete-swal', ]; $toolbar[] = $tool; } else { $tool = [ 'name' => get_lang('Edit'), 'url' => api_get_self().'?intro_cmdEdit=1', 'icon' => 'fas fa-pencil-alt', ]; $toolbar[] = $tool; $tool = [ 'name' => addslashes(api_htmlentities(get_lang('Please confirm your choice'))), 'url' => api_get_self()."?".api_get_cidreq()."&intro_cmdDel=1", 'icon' => 'fas fa-trash-alt', 'class' => 'delete-swal', ]; $toolbar[] = $tool; } // Fix for chrome XSS filter for videos in iframes - BT#7930 $browser = api_get_navigator(); if (false !== strpos($introduction_section, ' 'introduction-tool', 'name' => $nameSection, 'help' => $helpSection, 'text' => $intro_content, ]; } else { if (api_is_allowed_to_edit()) { $textContent = [ 'id' => 'introduction-course', 'name' => $nameSection, 'help' => $helpSection, 'text' => $intro_content, ]; } } } $browser = api_get_navigator(); if (false !== strpos($introduction_section, 'assign('thematic', $thematicSection); $tpl->assign('intro', $textContent); $tpl->assign('toolbar', $toolbar); $introduction_section .= $tpl->fetch($tpl->get_template('auth/introduction_section.html.twig'));