parent
44cd7956f5
commit
93f3f199db
@ -1,400 +0,0 @@ |
|||||||
<?php |
|
||||||
/* For licensing terms, see /license.txt */ |
|
||||||
|
|
||||||
use Chamilo\CourseBundle\Entity\CToolIntro; |
|
||||||
|
|
||||||
/** |
|
||||||
* @deprecated |
|
||||||
* The INTRODUCTION MICRO MODULE is used to insert and edit |
|
||||||
* an introduction section on a Chamilo module or on the course homepage. |
|
||||||
* It can be inserted on any Chamilo module, provided the corresponding setting |
|
||||||
* is enabled in the administration section. |
|
||||||
* |
|
||||||
* The introduction content are stored in a table called "tool_intro" |
|
||||||
* in the course Database. Each module introduction has an Id stored in |
|
||||||
* the table, which matches a specific module. |
|
||||||
* |
|
||||||
* '(c_)tool_intro' table description |
|
||||||
* c_id: int |
|
||||||
* id : int |
|
||||||
* intro_text :text |
|
||||||
* session_id: int |
|
||||||
* |
|
||||||
* usage : |
|
||||||
* |
|
||||||
* $moduleId = 'XX'; // specifying the module tool (string value) |
|
||||||
* include(introductionSection.inc.php); |
|
||||||
* |
|
||||||
* This script is also used since Chamilo 1.9 to show course progress (from the |
|
||||||
* course_progress module) |
|
||||||
*/ |
|
||||||
$em = Database::getManager(); |
|
||||||
$intro_editAllowed = $is_allowed_to_edit = api_is_allowed_to_edit(); |
|
||||||
$session_id = api_get_session_id(); |
|
||||||
$blogParam = isset($_GET['blog_id']) ? ('&blog_id='.(int) $_GET['blog_id']) : ''; |
|
||||||
|
|
||||||
$introduction_section = ''; |
|
||||||
|
|
||||||
global $charset; |
|
||||||
$intro_cmdEdit = empty($_GET['intro_cmdEdit']) ? '' : $_GET['intro_cmdEdit']; |
|
||||||
$intro_cmdUpdate = isset($_POST['intro_cmdUpdate']); |
|
||||||
$intro_cmdDel = empty($_GET['intro_cmdDel']) ? '' : $_GET['intro_cmdDel']; |
|
||||||
$intro_cmdAdd = empty($_GET['intro_cmdAdd']) ? '' : $_GET['intro_cmdAdd']; |
|
||||||
$courseId = api_get_course_id(); |
|
||||||
|
|
||||||
if (!empty($courseId)) { |
|
||||||
$form = new FormValidator( |
|
||||||
'introduction_text', |
|
||||||
'post', |
|
||||||
api_get_self().'?'.api_get_cidreq().$blogParam |
|
||||||
); |
|
||||||
} else { |
|
||||||
$form = new FormValidator('introduction_text'); |
|
||||||
} |
|
||||||
|
|
||||||
$config = [ |
|
||||||
'ToolbarSet' => '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 = [ |
|
||||||
'<link href="'.$cssEditor.'" rel="stylesheet" type="text/css" />', |
|
||||||
'<link href="'.$cssEditor.'" media="screen" rel="stylesheet" type="text/css" />', |
|
||||||
]; |
|
||||||
$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($course, $session); |
|
||||||
$thematicAdvance = $thematic->getThematicAdvance($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); |
|
||||||
$thematicAdvance = $thematic->getThematicAdvance($last_done_advance); |
|
||||||
$thematicAdvance2 = $thematic->getThematicAdvance($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($course, $session); |
|
||||||
$next_advance_not_done = $thematic->get_next_thematic_advance_not_done(); |
|
||||||
$thematicAdvance = $thematic->getThematicAdvance($last_done_advance); |
|
||||||
$thematicAdvance2 = $thematic->getThematicAdvance($next_advance_not_done); |
|
||||||
$subTitle1 = get_lang('Current topic'); |
|
||||||
$subTitle2 = get_lang('Next topic'); |
|
||||||
$class1 = ' current'; |
|
||||||
} |
|
||||||
|
|
||||||
if (!empty($thematicAdvance)) { |
|
||||||
$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(); |
|
||||||
$thematic_info = $thematicAdvance->getThematic(); |
|
||||||
$startDate = $thematicAdvance->getStartDate(); |
|
||||||
|
|
||||||
//$thematicAdvance['start_date'] = api_get_local_time($startDate); |
|
||||||
//$thematicAdvance['start_date'] = api_format_date($startDate, DATE_TIME_FORMAT_LONG); |
|
||||||
$userInfo = api_get_user_info(); |
|
||||||
$courseInfo = api_get_course_info(); |
|
||||||
$titleThematic = $thematic_advance.' : '.$courseInfo['name'].' <b>( '.$thematicScore.' )</b>'; |
|
||||||
|
|
||||||
$infoUser = '<div class="thematic-avatar"><img src="'.$userInfo['avatar'].'" class="img-circle img-responsive"></div>'; |
|
||||||
$infoUser .= '<div class="progress"> |
|
||||||
<div class="progress-bar progress-bar-primary" role="progressbar" style="width: '.$thematicScore.';"> |
|
||||||
'.$thematicScore.' |
|
||||||
</div> |
|
||||||
</div>'; |
|
||||||
|
|
||||||
$thematicItemOne = ' |
|
||||||
<div class="col-md-6 items-progress"> |
|
||||||
<div class="thematic-cont '.$class1.'"> |
|
||||||
<div class="topics">'.$subTitle1.'</div> |
|
||||||
<h4 class="title-topics">'. |
|
||||||
Display::returnFontAwesomeIcon('book').strip_tags($thematic_info->getTitle()).'</h4> |
|
||||||
<p class="date">'. |
|
||||||
Display::returnFontAwesomeIcon('calendar-o').$thematicAdvance['start_date'].'</p> |
|
||||||
<div class="views">'. |
|
||||||
Display::returnFontAwesomeIcon('file-text-o').strip_tags($thematicAdvance->getContent()).'</div> |
|
||||||
<p class="time">'. |
|
||||||
Display::returnFontAwesomeIcon('clock-o').get_lang('Duration in hours').' : '.$thematicAdvance->getDuration().' - |
|
||||||
<a href="'.$thematicUrl.'">'.get_lang('See detail').'</a></p> |
|
||||||
</div> |
|
||||||
</div>'; |
|
||||||
|
|
||||||
if (!empty($thematicAdvance2)) { |
|
||||||
$thematic_info2 = $thematicAdvance2->getThematic(); |
|
||||||
//$thematicAdvance2['start_date'] = api_get_local_time($thematicAdvance2['start_date']); |
|
||||||
//$thematicAdvance2['start_date'] = api_format_date($thematicAdvance2['start_date'], DATE_TIME_FORMAT_LONG); |
|
||||||
|
|
||||||
$thematicItemTwo = ' |
|
||||||
<div class="col-md-6 items-progress"> |
|
||||||
<div class="thematic-cont"> |
|
||||||
<div class="topics">'.$subTitle2.'</div> |
|
||||||
<h4 class="title-topics">'. |
|
||||||
Display::returnFontAwesomeIcon('book').api_get_local_time($thematic_info2->getStartDate()).'</h4> |
|
||||||
<p class="date">'. |
|
||||||
Display::returnFontAwesomeIcon('calendar-o').api_get_local_time($thematicAdvance2->getStartDate()).'</p> |
|
||||||
<div class="views">'. |
|
||||||
Display::returnFontAwesomeIcon('file-text-o').strip_tags($thematicAdvance2->getContent()).'</div> |
|
||||||
<p class="time">'. |
|
||||||
Display::returnFontAwesomeIcon('clock-o').get_lang('Duration in hours').' : '.$thematicAdvance2->getDuration().' - |
|
||||||
<a href="'.$thematicUrl.'">'.get_lang('See detail').'</a></p> |
|
||||||
</div> |
|
||||||
</div>'; |
|
||||||
} |
|
||||||
$thematicPanel = '<div class="row">'; |
|
||||||
$thematicPanel .= '<div class="col-md-2">'.$infoUser.'</div>'; |
|
||||||
$thematicPanel .= '<div class="col-md-10"><div class="row">'.$thematicItemOne.$thematicItemTwo.'</div></div>'; |
|
||||||
$thematicPanel .= '</div>'; |
|
||||||
$thematicPanel .= '<div class="separate"> |
|
||||||
<a href="'.$thematicUrl.'" class="btn btn-default btn-block">'.get_lang('Show course planning').'</a> |
|
||||||
</div>'; |
|
||||||
|
|
||||||
$thematicProgress = Display::panelCollapse( |
|
||||||
$titleThematic, |
|
||||||
$thematicPanel, |
|
||||||
'thematic', |
|
||||||
null, |
|
||||||
'accordion-thematic', |
|
||||||
'collapse-thematic', |
|
||||||
false |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$thematicSection = ''; |
|
||||||
if (!empty($thematicAdvance)) { |
|
||||||
$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, '<iframe') && 'Chrome' == $browser['name']) { |
|
||||||
header('X-XSS-Protection: 0'); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
$nameSection = get_lang('Add an introduction to the course'); |
|
||||||
$helpSection = get_lang('This course is already created! Now you can add a presentation or welcome text to your course in this section, ideal for your students.'); |
|
||||||
if ('course_homepage' != $moduleId) { |
|
||||||
$nameSection = get_lang('Add an introduction to the tool'); |
|
||||||
$helpSection = get_lang('Add Custom Tools Intro'); |
|
||||||
} |
|
||||||
|
|
||||||
$textContent = []; |
|
||||||
if ($intro_dispDefault) { |
|
||||||
if (!empty($intro_content)) { |
|
||||||
$textContent = [ |
|
||||||
'id' => '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, '<iframe') && 'Chrome' == $browser['name']) { |
|
||||||
header("X-XSS-Protection: 0"); |
|
||||||
} |
|
||||||
$data = null; |
|
||||||
$tpl = new Template(null); |
|
||||||
$tpl->assign('thematic', $thematicSection); |
|
||||||
$tpl->assign('intro', $textContent); |
|
||||||
$tpl->assign('toolbar', $toolbar); |
|
||||||
$introduction_section .= $tpl->fetch($tpl->get_template('auth/introduction_section.html.twig')); |
|
||||||
Loading…
Reference in new issue