Add jquery.elevatezoom.js to exercises

pull/3090/head
Nosolored 6 years ago
parent 8cdc3da0a1
commit 059f6aa866
  1. 73
      main/exercise/UniqueAnswerImage.php
  2. 32
      main/exercise/exercise_submit.php
  3. 62
      main/exercise/question.class.php
  4. 4
      main/inc/lib/exercise.lib.php
  5. 1790
      main/inc/lib/javascript/jquery.elevatezoom.js
  6. 26
      main/lp/lp_view.php

@ -59,6 +59,64 @@ class UniqueAnswerImage extends UniqueAnswer
$html = '<div class="alert alert-success" role="alert">'.
get_lang('UniqueAnswerImagePreferredSize200x150').'</div>';
$zoomOptions = api_get_configuration_value('zoom_images_quiz');
if (isset($zoomOptions['options'])) {
$finderFolder = api_get_path(WEB_PATH).'vendor/studio-42/elfinder/';
$html .= '<!-- elFinder CSS (REQUIRED) -->';
$html .= '<link rel="stylesheet" type="text/css" media="screen" href="'.$finderFolder.'css/elfinder.full.css">';
$html .= '<link rel="stylesheet" type="text/css" media="screen" href="'.$finderFolder.'css/theme.css">';
$html .= '<!-- elFinder JS (REQUIRED) -->';
$html .= '<script type="text/javascript" src="'.$finderFolder.'js/elfinder.full.js"></script>';
$html .= '<!-- elFinder translation (OPTIONAL) -->';
$language = 'en';
$platformLanguage = api_get_interface_language();
$iso = api_get_language_isocode($platformLanguage);
$filePart = "vendor/studio-42/elfinder/js/i18n/elfinder.$iso.js";
$file = api_get_path(SYS_PATH).$filePart;
$includeFile = '';
if (file_exists($file)) {
$includeFile = '<script type="text/javascript" src="'.api_get_path(WEB_PATH).$filePart.'"></script>';
$language = $iso;
}
$html .= $includeFile;
$html .= '<script type="text/javascript" charset="utf-8">
$(document).ready(function () {
$(".add_img_link").on("click", function(e){
e.preventDefault();
e.stopPropagation();
var name = $(this).prop("name");
var id = parseInt(name.match(/[0-9]+/));
$([document.documentElement, document.body]).animate({
scrollTop: $("#elfinder").offset().top
}, 1000);
var elf = $("#elfinder").elfinder({
url : "'.api_get_path(WEB_LIBRARY_PATH).'elfinder/connectorAction.php?'.api_get_cidreq().'",
getFileCallback: function(file) {
var filePath = file; //file contains the relative url.
var imageZoom = filePath.url;
var iname = "answer["+id+"]";
CKEDITOR.instances[iname].insertHtml(\'<img id="zoom_picture" class="zoom_picture" src="\'+imageZoom+\'" data-zoom-image="\'+imageZoom+\'" width="200px" height="150px" />\');
$("#elfinder").elfinder("destroy"); //close the window after image is selected
},
startPathHash: "l2_Lw", // Sets the course driver as default
resizable: false,
lang: "'.$language.'"
}).elfinder("instance"+id);
});
});
</script>';
$html .= '<div id="elfinder"></div>';
}
$html .= '<table class="table table-striped table-hover">
<thead>
<tr style="text-align: center;">
@ -180,7 +238,15 @@ class UniqueAnswerImage extends UniqueAnswer
'counter['.$i.']'
);
$renderer->setElementTemplate(
'<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}</td>',
'<td><!-- BEGIN error --><span class="form_error">{error}</span><!-- END error --><br/>{element}'.
(isset($zoomOptions['options']) ?
'<br><div class="form-group ">
<label for="question_admin_form_btn_add_img['.$i.']" class="col-sm-2 control-label"></label>
<div class="col-sm-8">
<button class="add_img_link btn btn-info btn-sm" name="btn_add_img['.$i.']" type="submit" id="question_admin_form_btn_add_img['.$i.']"><em class="fa fa-plus"></em> Agregar imagen con zoom</button>
</div>
<div class="col-sm-2"></div>
</div>' : '').'</td>',
'answer['.$i.']'
);
$renderer->setElementTemplate(
@ -196,14 +262,15 @@ class UniqueAnswerImage extends UniqueAnswer
$answerNumber->freeze();
$form->addElement('radio', 'correct', null, null, $i, 'class="checkbox"');
$form->addHtmlEditor('answer['.$i.']', null, null, false, $editorConfig);
$form->addRule('answer['.$i.']', get_lang('ThisFieldIsRequired'), 'required');
switch ($objExercise->getFeedbackType()) {
case EXERCISE_FEEDBACK_TYPE_DIRECT:
$this->setDirectOptions($i, $form, $renderer, $selectLpId, $selectQuestion);
break;
//$this->setDirectOptions($i, $form, $renderer, $selectLpId, $selectQuestion);
//break;
case EXERCISE_FEEDBACK_TYPE_POPUP:
default:
$form->addHtmlEditor('comment['.$i.']', null, null, false, $editorConfig);

@ -79,6 +79,38 @@ if (api_get_setting('enable_record_audio') === 'true') {
$htmlHeadXtra[] = api_get_js('record_audio/record_audio.js');
}
$zoomOptions = api_get_configuration_value('zoom_images_quiz');
if (isset($zoomOptions['options']) && !in_array($origin, ['embeddable', 'noheader'])) {
$options = $zoomOptions['options'];
$htmlHeadXtra[] = '<script src="'.api_get_path(WEB_LIBRARY_JS_PATH).'jquery.elevatezoom.js"></script>';
$htmlHeadXtra[] = '<script>
$(document).ready(function() {
$("img").each(function() {
var attr = $(this).attr("data-zoom-image");
// For some browsers, `attr` is undefined; for others,
// `attr` is false. Check for both.
if (typeof attr !== typeof undefined && attr !== false) {
$(this).elevateZoom({
scrollZoom : true,
cursor: "crosshair",
tint:true,
tintColour:\'#CCC\',
tintOpacity:0.5,
zoomWindowWidth:'.$options['zoomWindowWidth'].',
zoomWindowHeight:'.$options['zoomWindowHeight'].',
zoomWindowPosition: 7
});
}
});
$(document).contextmenu(function() {
return false;
})
});
</script>';
}
$template = new Template();
// General parameters passed via POST/GET

@ -1608,6 +1608,60 @@ abstract class Question
.media { display:none;}
</style>';
$zoomOptions = api_get_configuration_value('zoom_images_quiz');
if (isset($zoomOptions['options'])) {
$finderFolder = api_get_path(WEB_PATH).'vendor/studio-42/elfinder/';
echo '<!-- elFinder CSS (REQUIRED) -->';
echo '<link rel="stylesheet" type="text/css" media="screen" href="'.$finderFolder.'css/elfinder.full.css">';
echo '<link rel="stylesheet" type="text/css" media="screen" href="'.$finderFolder.'css/theme.css">';
echo '<!-- elFinder JS (REQUIRED) -->';
echo '<script type="text/javascript" src="'.$finderFolder.'js/elfinder.full.js"></script>';
echo '<!-- elFinder translation (OPTIONAL) -->';
$language = 'en';
$platformLanguage = api_get_interface_language();
$iso = api_get_language_isocode($platformLanguage);
$filePart = "vendor/studio-42/elfinder/js/i18n/elfinder.$iso.js";
$file = api_get_path(SYS_PATH).$filePart;
$includeFile = '';
if (file_exists($file)) {
$includeFile = '<script type="text/javascript" src="'.api_get_path(WEB_PATH).$filePart.'"></script>';
$language = $iso;
}
echo $includeFile;
echo '<script type="text/javascript" charset="utf-8">
$(document).ready(function () {
$(".create_img_link").click(function(e){
e.preventDefault();
e.stopPropagation();
var imageZoom = $("input[name=\'imageZoom\']").val();
var imageWidth = $("input[name=\'imageWidth\']").val();
CKEDITOR.instances.questionDescription.insertHtml(\'<img id="zoom_picture" class="zoom_picture" src="\'+imageZoom+\'" data-zoom-image="\'+imageZoom+\'" width="\'+imageWidth+\'px"/>\');
});
$("input[name=\'imageZoom\']").on("click", function(){
console.log("click en campo");
var elf = $("#elfinder").elfinder({
url : "'.api_get_path(WEB_LIBRARY_PATH).'elfinder/connectorAction.php?'.api_get_cidreq().'",
getFileCallback: function(file) {
var filePath = file; //file contains the relative url.
console.log(filePath);
var imgPath = "<img src = \'"+filePath+"\'/>";
$("input[name=\'imageZoom\']").val(filePath.url);
$("#elfinder").remove(); //close the window after image is selected
},
startPathHash: "l2_Lw", // Sets the course driver as default
resizable: false,
lang: "'.$language.'"
}).elfinder("instance");
});
});
</script>';
echo '<div id="elfinder"></div>';
}
// question name
if (api_get_configuration_value('save_titles_as_html')) {
$editorConfig = ['ToolbarSet' => 'TitleAsHtml'];
@ -1644,6 +1698,14 @@ abstract class Question
$form->addButtonAdvancedSettings('advanced_params');
$form->addElement('html', '<div id="advanced_params_options" style="display:none">');
if (isset($zoomOptions['options'])) {
$form->addElement('text', 'imageZoom', 'URL imagen');
$form->addElement('text', 'imageWidth', 'Ancho en px');
$form->addButton('btn_create_img','Añadir al editor', 'plus', 'info', 'small', 'create_img_link');
}
$form->addHtmlEditor(
'questionDescription',
get_lang('QuestionDescription'),

@ -523,7 +523,9 @@ class ExerciseLib
}
}
$answer = Security::remove_XSS($answer, STUDENT);
if ($answerType != UNIQUE_ANSWER_IMAGE) {
$answer = Security::remove_XSS($answer, STUDENT);
}
$s .= Display::input(
'hidden',
'choice2['.$questionId.']',

File diff suppressed because it is too large Load Diff

@ -132,6 +132,32 @@ $(function() {
var chamilo_xajax_handler = window.oxajax;
</script>';
$zoomOptions = api_get_configuration_value('zoom_images_quiz');
if (isset($zoomOptions['options']) && !in_array($origin, ['embeddable', 'noheader'])) {
$options = $zoomOptions['options'];
$htmlHeadXtra[] = '<script src="'.api_get_path(WEB_LIBRARY_JS_PATH).'jquery.elevatezoom.js"></script>';
$htmlHeadXtra[] = '<script>
$(document).ready(function() {
$("img").each(function() {
var attr = $(this).attr("data-zoom-image");
// For some browsers, `attr` is undefined; for others,
// `attr` is false. Check for both.
if (typeof attr !== typeof undefined && attr !== false) {
$(this).elevateZoom({
scrollZoom : true,
cursor: "crosshair",
tint:true,
tintColour:\'#CCC\',
tintOpacity:0.5,
zoomWindowWidth:'.$options['zoomWindowWidth'].',
zoomWindowHeight:'.$options['zoomWindowHeight'].'
});
}
});
});
</script>';
}
$allowLpItemTip = api_get_configuration_value('hide_accessibility_label_on_lp_item') === false;
if ($allowLpItemTip) {
$htmlHeadXtra[] = '<script>

Loading…
Cancel
Save