diff --git a/documentation/installation_guide.html b/documentation/installation_guide.html index 1ee945240a..14119569f8 100755 --- a/documentation/installation_guide.html +++ b/documentation/installation_guide.html @@ -687,6 +687,12 @@ If you have issues with files taking a long time to download, make sure you reco break; } + location / { + rewrite ^/courses/([^/]+)/$ /main/course_home/course_home.php?cDir=$1 last; + rewrite ^/courses/([^/]+)/index.php$ main/course_home/course_home.php?cDir=$1 last; + try_files $uri @rewrite; + } + location ~ \.php$ { client_max_body_size 20M; try_files $uri /index.php$is_args$args; diff --git a/documentation/installation_guide_es_ES.html b/documentation/installation_guide_es_ES.html index a724258031..da366df8fd 100755 --- a/documentation/installation_guide_es_ES.html +++ b/documentation/installation_guide_es_ES.html @@ -688,6 +688,12 @@ por ejemplo. El efecto debería ser inmediato. break; } + location / { + rewrite ^/courses/([^/]+)/$ /main/course_home/course_home.php?cDir=$1 last; + rewrite ^/courses/([^/]+)/index.php$ main/course_home/course_home.php?cDir=$1 last; + try_files $uri @rewrite; + } + location ~ \.php$ { client_max_body_size 20M; try_files $uri /index.php$is_args$args; diff --git a/documentation/installation_guide_fr_FR.html b/documentation/installation_guide_fr_FR.html index eebfbad7ad..733673b43e 100644 --- a/documentation/installation_guide_fr_FR.html +++ b/documentation/installation_guide_fr_FR.html @@ -754,6 +754,12 @@ Ce sont uniquement les redirections à placer dans un bloc server{}, comme les a break; } + location / { + rewrite ^/courses/([^/]+)/$ /main/course_home/course_home.php?cDir=$1 last; + rewrite ^/courses/([^/]+)/index.php$ main/course_home/course_home.php?cDir=$1 last; + try_files $uri @rewrite; + } + location ~ \.php$ { client_max_body_size 20M; try_files $uri /index.php$is_args$args; diff --git a/main/exercice/admin.php b/main/exercice/admin.php index a2f74259ac..df6672e7bb 100755 --- a/main/exercice/admin.php +++ b/main/exercice/admin.php @@ -344,6 +344,8 @@ $template = new Template(); $htmlHeadXtra[] = $template->fetch('default/exercise/submit.js.tpl'); $htmlHeadXtra[] = api_get_js('d3/jquery.xcolor.js'); +$htmlHeadXtra[] = ''; + $htmlHeadXtra[] = " + + + "; // } } } @@ -4143,7 +4142,7 @@ class Exercise Event::saveQuestionAttempt($questionScore, $answer, $quesId, $exeId, 0, $this->id); if (isset($exerciseResultCoordinates[$questionId]) && !empty($exerciseResultCoordinates[$questionId])) { foreach ($exerciseResultCoordinates[$questionId] as $idx => $val) { - Event::saveExerciseAttemptHotspot($exeId, $quesId, $idx, $choice[$idx], $val, $this->id); + Event::saveExerciseAttemptHotspot($exeId, $quesId, $idx, $choice[$idx], $val, false, $this->id); } } } else { diff --git a/main/exercice/exercise_result.php b/main/exercice/exercise_result.php index 40e9d333d8..b18ab12d02 100755 --- a/main/exercice/exercise_result.php +++ b/main/exercice/exercise_result.php @@ -75,6 +75,8 @@ $interbreadcrumb[] = array( "name" => get_lang('Exercises'), ); +$htmlHeadXtra[] = ''; + if ($origin != 'learnpath') { // So we are not in learnpath tool Display::display_header($nameTools, get_lang('Exercise')); diff --git a/main/exercice/exercise_show.php b/main/exercice/exercise_show.php index 60ac94d3d2..ff259cb812 100755 --- a/main/exercice/exercise_show.php +++ b/main/exercice/exercise_show.php @@ -120,6 +120,8 @@ $interbreadcrumb[]= array("url" => "#","name" => get_lang('Result')); $this_section = SECTION_COURSES; +$htmlHeadXtra[] = ''; + if ($origin != 'learnpath') { Display::display_header(''); } else { @@ -367,14 +369,25 @@ foreach ($questionList as $questionId) { if ($show_results) { echo ''; - echo ' - '. - ' - - - - -
'; + + echo " + + +
+ + + + +
+ "; } } else if($answerType == HOT_SPOT_DELINEATION) { @@ -497,14 +510,24 @@ foreach ($questionList as $questionId) { $questionScore= Database::result($resfree,0,"marks"); $totalScore+=$questionScore; echo ''; - echo ' - - - - - - - '; + + echo " + + +
+ + + + + "; } } diff --git a/main/exercice/exercise_submit.php b/main/exercice/exercise_submit.php index 7da3dc9e23..316b6f18d3 100755 --- a/main/exercice/exercise_submit.php +++ b/main/exercice/exercise_submit.php @@ -60,6 +60,7 @@ $htmlHeadXtra[] = api_get_css(api_get_path(WEB_LIBRARY_PATH).'javascript/epicloc $htmlHeadXtra[] = api_get_js('epiclock/javascript/jquery.dateformat.min.js'); $htmlHeadXtra[] = api_get_js('epiclock/javascript/jquery.epiclock.min.js'); $htmlHeadXtra[] = api_get_js('epiclock/renderers/minute/epiclock.minute.js'); +$htmlHeadXtra[] = ''; $template = new Template(); diff --git a/main/exercice/hotspot_actionscript.as.php b/main/exercice/hotspot_actionscript.as.php index 30751fdd99..5dcc9bd582 100755 --- a/main/exercice/hotspot_actionscript.as.php +++ b/main/exercice/hotspot_actionscript.as.php @@ -24,11 +24,6 @@ $pictureSize = getimagesize($picturePath.'/'.$objQuestion->selectPicture()); $pictureWidth = $pictureSize[0]; $pictureHeight = $pictureSize[1]; -$courseLang = $_course['language']; -$courseCode = $_course['sysCode']; -$coursePath = $_course['path']; - - $course_id = api_get_course_int_id(); // Query db for answers @@ -40,39 +35,63 @@ if ($answer_type==HOT_SPOT_DELINEATION) { WHERE c_id = $course_id AND question_id = ".intval($questionId)." ORDER BY id"; } $result = Database::query($sql); -// Init -$output = "hotspot_lang=$courseLang&hotspot_image=$pictureName&hotspot_image_width=$pictureWidth&hotspot_image_height=$pictureHeight&courseCode=$coursePath"; -$i = 0; + +$data = []; +$data['lang'] = [ + 'Square' => get_lang('Square'), + 'Circle' => get_lang('Circle'), + 'Poly' => get_lang('Poly'), + 'HotspotStatus1' => get_lang('HotspotStatus1'), + 'HotspotStatus2Polygon' => get_lang('HotspotStatus2Polygon'), + 'HotspotStatus2Other' => get_lang('HotspotStatus2Other'), + 'HotspotStatus3' => get_lang('HotspotStatus3'), + 'HotspotShowUserPoints' => get_lang('HotspotShowUserPoints'), + 'ShowHotspots' => get_lang('ShowHotspots'), + 'Triesleft' => get_lang('Triesleft'), + 'HotspotExerciseFinished' => get_lang('HotspotExerciseFinished'), + 'NextAnswer' => get_lang('NextAnswer'), + 'Delineation' => get_lang('Delineation'), + 'CloseDelineation' => get_lang('CloseDelineation'), + 'Oar' => get_lang('oar') +]; +$data['image'] = $objQuestion->selectPicturePath(); +$data['image_width'] = $pictureWidth; +$data['image_height'] = $pictureHeight; +$data['courseCode'] = $_course['path']; +$data['hotspots'] = []; + $nmbrTries = 0; while ($hotspot = Database::fetch_assoc($result)) { - $output .= "&hotspot_".$hotspot['id']."=true"; - $output .= "&hotspot_".$hotspot['id']."_answer=".str_replace('&','{amp}',$hotspot['answer']); + $hotSpot = []; + $hotSpot['id'] = $hotspot['id']; + $hotSpot['answer'] = $hotspot['answer']; + // Square or rectancle if ($hotspot['hotspot_type'] == 'square' ) { - $output .= "&hotspot_".$hotspot['id']."_type=square"; + $hotSpot['type'] = 'square'; } // Circle or ovale if ($hotspot['hotspot_type'] == 'circle') { - $output .= "&hotspot_".$hotspot['id']."_type=circle"; + $hotSpot['type'] = 'circle'; } // Polygon if ($hotspot['hotspot_type'] == 'poly') { - $output .= "&hotspot_".$hotspot['id']."_type=poly"; + $hotSpot['type'] = 'poly'; } // Delineation if ($hotspot['hotspot_type'] == 'delineation') { - $output .= "&hotspot_".$hotspot['id']."_type=delineation"; + $hotSpot['type'] = 'delineation'; } // No error if ($hotspot['hotspot_type'] == 'noerror') { - $output .= "&hotspot_".$hotspot['id']."_type=noerror"; + $hotSpot['type'] = 'noerror'; } // This is a good answer, count + 1 for nmbr of clicks @@ -80,14 +99,15 @@ while ($hotspot = Database::fetch_assoc($result)) { $nmbrTries++; } - $output .= "&hotspot_".$hotspot['id']."_coord=".$hotspot['hotspot_coordinates'].""; - $i++; -} -// Generate empty -$i++; -for ($i; $i <= 12; $i++) { - $output .= "&hotspot_".$i."=false"; + $hotSpot['coord'] = $hotspot['hotspot_coordinates']; + + $data['hotspots'][] = $hotSpot; } -// Output -echo $output."&nmbrTries=".$nmbrTries."&done=done"; + +$data['nmbrTries'] = $nmbrTries; +$data['done'] = 'done'; + +header('Content-Type: application/json'); + +echo json_encode($data); diff --git a/main/exercice/hotspot_actionscript_admin.as.php b/main/exercice/hotspot_actionscript_admin.as.php index e712f45137..9e70c88854 100755 --- a/main/exercice/hotspot_actionscript_admin.as.php +++ b/main/exercice/hotspot_actionscript_admin.as.php @@ -21,12 +21,15 @@ $pictureSize = getimagesize($picturePath.'/'.$objQuestion->selectPicture()); $pictureWidth = $pictureSize[0]; $pictureHeight = $pictureSize[1]; -$courseLang = $_course['language']; -$courseCode = $_course['code']; -$coursePath = $_course['path']; +$data = []; +$data['hotspot_lang'] = $_course['language']; +$data['hotspot_image'] = $pictureName; +$data['hotspot_image_width'] = $pictureWidth; +$data['hotspot_image_height'] = $pictureHeight; +$data['courseCode'] = $_course['path']; +$data['hotspots'] = []; // Init -$output = "hotspot_lang=$courseLang&hotspot_image=$pictureName&hotspot_image_width=$pictureWidth&hotspot_image_height=$pictureHeight&courseCode=$coursePath"; $i = 0; $nmbrTries = 0; $answer_type = $objQuestion->type; @@ -35,28 +38,29 @@ $answers = $_SESSION['tmp_answers']; $nbrAnswers = count($answers['answer']); for ($i=1;$i <= $nbrAnswers; $i++) { - $output .= "&hotspot_".$i."=true"; - $output .= "&hotspot_".$i."_answer=".$answers['answer'][$i]; + $hotSpot = []; + $hotSpot['answer']= $answers['answer'][$i]; if ($answer_type == HOT_SPOT_DELINEATION) { if ($i==1) { - $output .= "&hotspot_".$i."_type=delineation"; - } else - {$output .= "&hotspot_".$i."_type=oar";} + $hotSpot['type'] = 'delineation'; + } else { + $hotSpot['type'] = 'oar'; + } } else { // Square or rectancle if ($answers['hotspot_type'][$i] == 'square') { - $output .= "&hotspot_".$i."_type=square"; + $hotSpot['type'] = 'square'; } // Circle or ovale if ($answers['hotspot_type'][$i] == 'circle') { - $output .= "&hotspot_".$i."_type=circle"; + $hotSpot['type'] = 'circle'; } // Polygon if ($answers['hotspot_type'][$i] == 'poly') { - $output .= "&hotspot_".$i."_type=poly"; + $hotSpot['type'] = 'poly'; } /*// Delineation if ($answers['hotspot_type'][$i] == 'delineation') @@ -70,14 +74,14 @@ for ($i=1;$i <= $nbrAnswers; $i++) { $nmbrTries++; } - $output .= "&hotspot_".$i."_coord=".$answers['hotspot_coordinates'][$i].""; -} - -// Generate empty -$i++; -for ($i; $i <= 12; $i++) { - $output .= "&hotspot_".$i."=false"; + $hotSpot['coord'] = $answers['hotspot_coordinates'][$i]; + $data['hotspots'][] = $hotSpot; } // Output -echo $output."&nmbrTries=".$nmbrTries."&done=done"; +$data['nmbrTries'] = $nmbrTries; +$data['done'] = 'done'; + +header('Content-Type: application/json'); + +echo json_encode($data); diff --git a/main/exercice/hotspot_admin.inc.php b/main/exercice/hotspot_admin.inc.php index 1e09ab4798..70eea77e73 100755 --- a/main/exercice/hotspot_admin.inc.php +++ b/main/exercice/hotspot_admin.inc.php @@ -585,12 +585,11 @@ if ($modifyAnswers) { - - - - - - - -
- - + + +
+ @@ -614,6 +613,8 @@ if ($modifyAnswers) { + + "> 'TestProposedAnswer' + 'ToolbarSet' => 'TestProposedAnswer', + 'cols-size' => [0, 12, 0] ); $form->addHtmlEditor('comment[' . $i . ']', null, false, false, $config); $renderer = $form->defaultRenderer(); @@ -886,8 +888,7 @@ if ($modifyAnswers) { $form->setDefaults(array('comment[' . $i . ']' => $commentValue)); $return = $form->return_form(); ?> - - + +
  * *
- + @@ -864,15 +865,16 @@ if ($modifyAnswers) { ?>
-
+
- +   - + - + @@ -1004,38 +1005,31 @@ if ($modifyAnswers) {
-
- -
+
+
+ + +
+ + + 0) { echo str_repeat(' ', 0) . '$modifyAnswers was set - end' . "
\n"; diff --git a/main/exercice/hotspot_answers.as.php b/main/exercice/hotspot_answers.as.php index 3c39a09c4a..6e704b67d8 100755 --- a/main/exercice/hotspot_answers.as.php +++ b/main/exercice/hotspot_answers.as.php @@ -13,7 +13,6 @@ include('../inc/global.inc.php'); // Set vars $questionId = intval($_GET['modifyAnswers']); $exe_id = intval($_GET['exe_id']); -$from_db = isset($_GET['from_db']) ? $_GET['from_db'] : 0; $objQuestion = Question :: read($questionId); $TBL_ANSWERS = Database::get_course_table(TABLE_QUIZ_ANSWER); $documentPath = api_get_path(SYS_COURSE_PATH).$_course['path'].'/document'; @@ -24,10 +23,6 @@ $pictureSize = getimagesize($picturePath.'/'.$objQuestion->selectPicture()); $pictureWidth = $pictureSize[0]; $pictureHeight = $pictureSize[1]; -$courseLang = $_course['language']; -$course_code = Database::escape_string($_course['id']); - -$coursePath = $_course['path']; $answer_type = $objQuestion->selectType(); $course_id = api_get_course_int_id(); @@ -42,64 +37,79 @@ if ($answer_type == HOT_SPOT_DELINEATION) { } $result = Database::query($sql); // Init -$output = "hotspot_lang=$courseLang&hotspot_image=$pictureName&hotspot_image_width=$pictureWidth&hotspot_image_height=$pictureHeight&courseCode=$coursePath"; -$i = 0; +$data['lang'] = [ + 'Square' => get_lang('Square'), + 'Circle' => get_lang('Circle'), + 'Poly' => get_lang('Poly'), + 'HotspotStatus1' => get_lang('HotspotStatus1'), + 'HotspotStatus2Polygon' => get_lang('HotspotStatus2Polygon'), + 'HotspotStatus2Other' => get_lang('HotspotStatus2Other'), + 'HotspotStatus3' => get_lang('HotspotStatus3'), + 'HotspotShowUserPoints' => get_lang('HotspotShowUserPoints'), + 'ShowHotspots' => get_lang('ShowHotspots'), + 'Triesleft' => get_lang('Triesleft'), + 'HotspotExerciseFinished' => get_lang('HotspotExerciseFinished'), + 'NextAnswer' => get_lang('NextAnswer'), + 'Delineation' => get_lang('Delineation'), + 'CloseDelineation' => get_lang('CloseDelineation'), + 'Oar' => get_lang('oar') +]; +$data['image'] = $objQuestion->selectPicturePath(); +$data['image_width'] = $pictureWidth; +$data['image_height'] = $pictureHeight; +$data['courseCode'] = $_course['path']; +$data['hotspots'] = []; while ($hotspot = Database::fetch_array($result)) { - $output .= "&hotspot_".$hotspot['id']."=true"; + $hotSpot = []; + $hotSpot['id'] = $hotspot['id']; + // Square or rectancle if ($hotspot['hotspot_type'] == 'square' ) { - $output .= "&hotspot_".$hotspot['id']."_type=square"; + $hotSpot['type'] = 'square'; } // Circle or ovale if ($hotspot['hotspot_type'] == 'circle') { - $output .= "&hotspot_".$hotspot['id']."_type=circle"; + $hotSpot['type'] = 'circle'; } // Polygon if ($hotspot['hotspot_type'] == 'poly') { - $output .= "&hotspot_".$hotspot['id']."_type=poly"; + $hotSpot['type'] = 'poly'; } // Delineation if ($hotspot['hotspot_type'] == 'delineation') { - $output .= "&hotspot_".$hotspot['id']."_type=delineation"; + $hotSpot['type'] = 'delineation'; } // oar if ($hotspot['hotspot_type'] == 'oar') { - $output .= "&hotspot_".$hotspot['id']."_type=delineation"; + $hotSpot['type'] = 'delineation'; } - $output .= "&hotspot_".$hotspot['id']."_coord=".$hotspot['hotspot_coordinates'].""; - $i++; -} -// Generate empty (the maximum number of points is 12 - it is said so in the user interface) -$i++; -for ($i; $i <= 12; $i++) { - $output .= "&hotspot_".$i."=false"; + $hotSpot['coord'] = $hotspot['hotspot_coordinates']; + + $data['hotspots'][] = $hotSpot; } +$data['answers'] = []; -// Get clicks -if(isset($_SESSION['exerciseResultCoordinates']) && $from_db==0) { - foreach ($_SESSION['exerciseResultCoordinates'][$questionId] as $coordinate) { - $output2 .= $coordinate."|"; - } -} else { - // get it from db - $tbl_track_e_hotspot = Database::get_main_table(TABLE_STATISTIC_TRACK_E_HOTSPOT); - $sql = "SELECT hotspot_coordinate - FROM $tbl_track_e_hotspot - WHERE hotspot_question_id = $questionId AND - c_id = $course_id AND - hotspot_exe_id = $exe_id - ORDER by hotspot_id"; - $rs = @Database::query($sql); // don't output error because we are in Flash execution. - while($row = Database :: fetch_array($rs)) { - $output2 .= $row['hotspot_coordinate']."|"; - } +$tbl_track_e_hotspot = Database::get_main_table(TABLE_STATISTIC_TRACK_E_HOTSPOT); +$sql = "SELECT hotspot_coordinate + FROM $tbl_track_e_hotspot + WHERE hotspot_question_id = $questionId AND + c_id = $course_id AND + hotspot_exe_id = $exe_id + ORDER by hotspot_id"; +$rs = Database::query($sql); // don't output error because we are in Flash execution. + +while($row = Database :: fetch_array($rs, 'ASSOC')) { + $data['answers'][] = $row['hotspot_coordinate']; } -$output .= "&p_hotspot_answers=".api_substr($output2,0,-1)."&done=done"; -$explode = explode('&', $output); -echo $output; + +$data['done'] = 'done'; + +header('Content-Type: application/json'); + +echo json_encode($data); diff --git a/main/exercice/question.class.php b/main/exercice/question.class.php index f229a8af62..b56631a39d 100755 --- a/main/exercice/question.class.php +++ b/main/exercice/question.class.php @@ -908,7 +908,7 @@ abstract class Question ]; $id = Database::insert($TBL_ANSWERS, $params); if ($id) { - $sql = "UPDATE $TBL_ANSWERS SET id = id_auto WHERE id_auto = $id"; + $sql = "UPDATE $TBL_ANSWERS SET id = iid, id_auto = iid WHERE iid = $id"; Database::query($sql); } } @@ -931,7 +931,7 @@ abstract class Question $id = Database::insert($TBL_ANSWERS, $params); if ($id) { - $sql = "UPDATE $TBL_ANSWERS SET id = id_auto WHERE id_auto = $id"; + $sql = "UPDATE $TBL_ANSWERS SET id = iid, id_auto = iid WHERE iid = $id"; Database::query($sql); } } diff --git a/main/exercice/result.php b/main/exercice/result.php index 95471191ff..351e5054a0 100755 --- a/main/exercice/result.php +++ b/main/exercice/result.php @@ -53,6 +53,8 @@ if (!$is_allowedToEdit) { } } +$htmlHeadXtra[] = ''; + if ($show_headers) { $interbreadcrumb[] = array( "url" => "exercise.php?".api_get_cidreq(), diff --git a/main/inc/lib/events.lib.php b/main/inc/lib/events.lib.php index ea1c2f1d09..d68f21da6c 100644 --- a/main/inc/lib/events.lib.php +++ b/main/inc/lib/events.lib.php @@ -613,17 +613,19 @@ class Event ))); } else { - $sql = "INSERT INTO $tbl_track_e_hotspot (hotspot_course_code, hotspot_user_id, c_id, hotspot_exe_id, hotspot_question_id, hotspot_answer_id, hotspot_correct, hotspot_coordinate) - VALUES ( - '".api_get_course_id()."', - ".api_get_user_id()."',". - " ".api_get_course_int_id().", ". - " '".Database :: escape_string($exe_id)."', ". - " '".Database :: escape_string($question_id)."',". - " '".Database :: escape_string($answer_id)."',". - " '".Database :: escape_string($correct)."',". - " '".Database :: escape_string($coords)."')"; - return $result = Database::query($sql); + return Database::insert( + $tbl_track_e_hotspot, + [ + 'hotspot_course_code' => api_get_course_id(), + 'hotspot_user_id' => api_get_user_id(), + 'c_id' => api_get_course_int_id(), + 'hotspot_exe_id' => $exe_id, + 'hotspot_question_id' => $question_id, + 'hotspot_answer_id' => $answer_id, + 'hotspot_correct' => $correct, + 'hotspot_coordinate' => $coords + ] + ); } } diff --git a/main/inc/lib/exercise.lib.php b/main/inc/lib/exercise.lib.php index e860fbf23c..e8c27b286d 100644 --- a/main/inc/lib/exercise.lib.php +++ b/main/inc/lib/exercise.lib.php @@ -1129,25 +1129,31 @@ HTML; ); } - // display answers of hotpost order by id - $answer_list = '
' . get_lang( - 'HotspotZones' - ) . '
'; - if (!empty($answers_hotspot)) { - ksort($answers_hotspot); - foreach ($answers_hotspot as $key => $value) { - $answer_list .= '
' . $key . '.- ' . $value . '

'; + $answerList = ''; + + if ($answerType != HOT_SPOT_DELINEATION) { + $answerList = ' +
+ +
    + '; + + if (!empty($answers_hotspot)) { + ksort($answers_hotspot); + + $countAnswers = 1; + + foreach ($answers_hotspot as $value) { + $answerList .= "
  1. {$countAnswers} - {$value}

  2. "; + + $countAnswers++; + } } - } - $answer_list .= '
'; - if ($answerType == HOT_SPOT_DELINEATION) { - $answer_list = ''; - $swf_file = 'hotspot_delineation_user'; - $swf_height = 405; - } else { - $swf_file = 'hotspot_user'; - $swf_height = 436; + $answerList .= ' + + + '; } if (!$only_questions) { @@ -1156,153 +1162,37 @@ HTML; echo '
' . $current_item . '. ' . $questionName . '
'; } //@todo I need to the get the feedback type - echo ''; - echo ' - - '; + echo << +
+ $questionDescription +
+HOTSPOT; } $canClick = isset($_GET['editQuestion']) ? '0' : (isset($_GET['modifyAnswers']) ? '0' : '1'); - $s .= ' - - - - - '; - $s .= '
'; - echo $s; - echo '
'; - echo $questionDescription; - echo '
- -
- - ' . $answer_list . '
-
'; + $s .= << +
+ + +
+ $answerList +
+HOTSPOT; + echo << + +HOTSPOT; } return $nbrAnswers; } diff --git a/main/inc/lib/exercise_show_functions.lib.php b/main/inc/lib/exercise_show_functions.lib.php index 6c32d83959..ae6a16da32 100755 --- a/main/inc/lib/exercise_show_functions.lib.php +++ b/main/inc/lib/exercise_show_functions.lib.php @@ -184,16 +184,13 @@ class ExerciseShowFunctions ?> - + - - - + \n\ + \n\ + \n\ + \n\ + \n\ + \n\ + '; + + $(this.el).find('select').val(this.selectedValue); + + var selectShapeEvent = function (e) { + switch (this.value) { + case 'square': + //no break + case 'ellipse': + //no break + case 'polygon': + currentShapeType = this.value; + currentHotSpotIndex = self.hotSpotIndex; + break; + + default: + break; + } + }; + + $(this.el).on('click', selectShapeEvent); + $(this.el).find('select').on('change', selectShapeEvent); + + return this.el; + }; + + var colors = [ + '66, 113, 181', + '254, 142, 22', + '69, 199, 240', + '188, 214, 49', + '214, 49, 115', + '215, 215, 215', + '144, 175, 221', + '174, 134, 64', + '79, 146, 66', + '244, 235, 36', + '237, 32, 36', + '59, 59, 59', + '247, 189, 226' + ]; + + var getPointOnImage = function (x, y) { + var pointerPosition = { + left: x + window.scrollX, + top: y + window.scrollY + }, + canvasOffset = { + x: canvas.getBoundingClientRect().x + window.scrollX, + y: canvas.getBoundingClientRect().y + window.scrollY + }; + + return { + x: Math.round(pointerPosition.left - canvasOffset.x), + y: Math.round(pointerPosition.top - canvasOffset.y) + }; + }; + + var startCanvas = function () { + var newHotSpotEl = null, + pressingShift = false; + + document.addEventListener('keydown', function (e) { + if (e.keyCode === 16) { + pressingShift = true; + } + }, false); + document.addEventListener('keyup', function (e) { + if (e.keyCode === 16) { + pressingShift = false; + } + }, false); + + canvas.addEventListener('click', function (e) { + e.preventDefault(); + }, false); + + container.addEventListener('dragstart', function (e) { + e.preventDefault(); + }, false); + container.addEventListener('click', function (e) { + if (shapes.length >= colors.length) { + return; + } + + newHotSpotEl = draw(newHotSpotEl, e.clientX, e.clientY, pressingShift); + + if (!newHotSpotEl) { + updateValues(); + } + }, false); + }; + + var draw = function (hotSpotEl, x, y, isPressingShift) { + var pointerPosition = getPointOnImage(x, y), + hotSpot = null; + + if (!hotSpotEl) { + switch (currentShapeType) { + case 'square': + //no break + case 'ellipse': + if (currentShapeType === 'ellipse') { + hotSpot = new HotSpotEllipse(); + hotSpotEl = new EllipseEl(hotSpot, colors[currentHotSpotIndex]); + } else { + hotSpot = new HotSpotSquare(); + hotSpotEl = new SquareEl(hotSpot, colors[currentHotSpotIndex]); + } + + hotSpot.setStartPoint(pointerPosition.x, pointerPosition.y); + break; + + case 'polygon': + hotSpot = new HotSpotPolygon(); + hotSpotEl = new PolygonEl(hotSpot, colors[currentHotSpotIndex]); + + hotSpot.addPoint(pointerPosition.x, pointerPosition.y); + break; + } + + shapes[currentHotSpotIndex].remove(); + shapes.splice(currentHotSpotIndex, 1, hotSpotEl); + + canvas.appendChild(hotSpotEl.render()); + + return hotSpotEl; + } + + switch (currentShapeType) { + case 'square': + //no break + case 'ellipse': + hotSpotEl.hotspot.setEndPoint(pointerPosition.x, pointerPosition.y); + hotSpotEl.render(); + + hotSpotEl = null; + break; + + case 'polygon': + $(container).find('#hotspot-alert').text('Keed pressed the SHIFT key and click the image to close the polygon'); + + hotSpotEl.hotspot.addPoint(pointerPosition.x, pointerPosition.y); + hotSpotEl.render(); + + if (isPressingShift) { + hotSpotEl = null; + $(container).find('#hotspot-alert').text(''); + } + break; + } + + return hotSpotEl; + }; + + var updateValues = function () { + var currentHotSpotEl = shapes[currentHotSpotIndex]; + + if (currentHotSpotIndex === undefined) { + return; + } + + if (currentHotSpotEl.hotspot instanceof HotSpotSquare) { + $('[name="hotspot_type[' + (currentHotSpotIndex + 1) + ']"]').val('square'); + } else if (currentHotSpotEl.hotspot instanceof HotSpotEllipse) { + $('[name="hotspot_type[' + (currentHotSpotIndex + 1) + ']"]').val('circle'); + } else if (currentHotSpotEl.hotspot instanceof HotSpotPolygon) { + $('[name="hotspot_type[' + (currentHotSpotIndex + 1) + ']"]').val('poly'); + } + + $('[name="hotspot_coordinates[' + (currentHotSpotIndex + 1) + ']"]').val( + currentHotSpotEl.hotspot.encode() + ); + }; + + var loadHotSpots = function (hotSpotList) { + hotSpotList.forEach(function (hotSpotData, index) { + var hotSpot = null, + hotSpotEl = null, + color = colors[shapes.length]; + + switch (hotSpotData.type) { + case 'square': + hotSpot = new HotSpotSquare(); + hotSpotEl = new SquareEl(hotSpot, color); + + var coords = hotSpotData.coord.split('|'), + position = coords[0].split(';'), + x = parseInt(position[0]), + y = parseInt(position[1]), + width = parseInt(coords[1]), + height = parseInt(coords[2]); + + hotSpot.setStartPoint(x, y); + hotSpot.setEndPoint(x + width, y + height); + break; + case 'circle': + hotSpot = new HotSpotEllipse(); + hotSpotEl = new EllipseEl(hotSpot, color); + + var coords = hotSpotData.coord.split('|'), + position = coords[0].split(';'), + x = parseInt(position[0] - coords[1]), + y = parseInt(position[1] - coords[2]), + width = parseInt(coords[1]) * 2, + height = parseInt(coords[2]) * 2; + + hotSpot.setStartPoint(x, y); + hotSpot.setEndPoint(x + width, y + height); + break; + + case 'poly': + hotSpot = new HotSpotPolygon(); + hotSpotEl = new PolygonEl(hotSpot, color); + + hotSpotData.coord.split('|').forEach(function (point) { + var exis = point.split(';'); + + hotSpot.addPoint(exis[0], exis[1]); + }); + break; + } + + if (hotSpotEl) { + var hotSpotSelector = new HotSpotSelectorEl(color, index, hotSpotData.type); + + selectors.appendChild(hotSpotSelector.render()); + canvas.appendChild(hotSpotEl.render()); + shapes.push(hotSpotEl); + } + }); + }; + + var container, canvas, selectors, currentShapeType, currentHotSpotIndex, shapes = []; + + return { + init: function (questionId, imageSrc) { + if (!questionId || !imageSrc) { + return; + } + + selectors = document.querySelector('#hotspot-selectors'); + container = document.querySelector('#hotspot-container'); + canvas = document.querySelector('#hotspot-container svg'); + currentShapeType = 'square'; + + var xhrImage = new $.Deferred(); + + var image = new Image(); + image.onload = function () { + xhrImage.resolve(this); + }; + image.onerror = function () { + xhrImage.reject(); + }; + image.src = imageSrc; + + var xhrHotSpots = $.get('/main/exercice/hotspot_actionscript_admin.as.php', { + modifyAnswers: parseInt(questionId) + }); + + $.when.apply($, [xhrImage, xhrHotSpots]).done(function (imageRequest, hotSpotsRequest) { + var imageSvg = document.createElementNS('http://www.w3.org/2000/svg', 'image'); + imageSvg.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', imageRequest.src); + imageSvg.setAttribute('width', imageRequest.width); + imageSvg.setAttribute('height', imageRequest.height); + + container.style.width = imageRequest.width + 'px'; + canvas.setAttribute('viewBox', '0 0 ' + imageRequest.width + ' ' + imageRequest.height); + canvas.appendChild(imageSvg); + + loadHotSpots(hotSpotsRequest[0].hotspots); + startCanvas(); + }); + } + }; +})(); diff --git a/main/plugin/hotspot2/js/hotspot_solution.js b/main/plugin/hotspot2/js/hotspot_solution.js new file mode 100755 index 0000000000..fd3a657053 --- /dev/null +++ b/main/plugin/hotspot2/js/hotspot_solution.js @@ -0,0 +1,231 @@ +var HotSpotSolution = (function () { + var Answer = function () { + this.x = 0; + this.y = 0; + }; + + var HotSpot = function () { + this.id = 0; + this.name = ''; + }; + + var Square = function () { + HotSpot.call(this); + + this.x = 0, + this.y = 0, + this.width = 0, + this.height = 0; + }; + Square.prototype = Object.create(HotSpot.prototype); + + var Ellipse = function () { + HotSpot.call(this); + + this.centerX = 0; + this.centerY = 0; + this.radiusX = 0; + this.radiusY = 0; + }; + Ellipse.prototype = Object.create(HotSpot.prototype); + + var Polygon = function () { + HotSpot.call(this); + + this.points = []; + }; + Polygon.prototype = Object.create(HotSpot.prototype); + + var config, lang, hotSpots = [], answers = []; + + var CanvasSVG = function (image) { + var imageSvg = document.createElementNS('http://www.w3.org/2000/svg', 'image'); + imageSvg.setAttributeNS('http://www.w3.org/1999/xlink', 'href', image.src); + imageSvg.setAttribute('width', image.width); + imageSvg.setAttribute('height', image.height); + + this.el = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + this.el.setAttribute('version', '1.1'); + this.el.setAttribute('viewBox', '0 0 ' + image.width + ' ' + image.height); + this.el.appendChild(imageSvg); + }; + CanvasSVG.prototype.addHotSpot = function (hotSpot) { + var hotSpotSVG = null; + + if (hotSpot instanceof Square) { + hotSpotSVG = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); + hotSpotSVG.setAttribute('x', hotSpot.x); + hotSpotSVG.setAttribute('y', hotSpot.y); + hotSpotSVG.setAttribute('width', hotSpot.width); + hotSpotSVG.setAttribute('height', hotSpot.height); + } else if (hotSpot instanceof Ellipse) { + hotSpotSVG = document.createElementNS('http://www.w3.org/2000/svg', 'ellipse'); + hotSpotSVG.setAttribute('cx', hotSpot.centerX); + hotSpotSVG.setAttribute('cy', hotSpot.centerY); + hotSpotSVG.setAttribute('rx', hotSpot.radiusX); + hotSpotSVG.setAttribute('ry', hotSpot.radiusY); + } else if (hotSpot instanceof Polygon) { + var pointsPaired = []; + + hotSpot.points.forEach(function (point) { + pointsPaired.push(point.join(',')); + }); + + hotSpotSVG = document.createElementNS('http://www.w3.org/2000/svg', 'polygon'); + hotSpotSVG.setAttribute( + 'points', + pointsPaired.join(' ') + ); + } + + if (!hotSpotSVG) { + return; + } + + var color = colors[hotSpots.length - 1]; + + hotSpotSVG.setAttribute('stroke-width', 2); + hotSpotSVG.setAttribute('stroke', 'rgb(' + color + ')'); + hotSpotSVG.setAttribute('fill', 'rgba(' + color + ', 0.75)'); + + this.el.appendChild(hotSpotSVG); + }; + CanvasSVG.prototype.addAnswer = function (answer) { + var pointSVG = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); + pointSVG.setAttribute('cx', answer.x); + pointSVG.setAttribute('cy', answer.y); + pointSVG.setAttribute('r', 15); + pointSVG.setAttribute('fill', '#00677C'); + + var textSVG = document.createElementNS('http://www.w3.org/2000/svg', 'text'); + textSVG.setAttribute('x', answer.x); + textSVG.setAttribute('y', answer.y); + textSVG.setAttribute('dy', 5); + textSVG.setAttribute('font-family', 'sans-serif'); + textSVG.setAttribute('text-anchor', 'middle'); + textSVG.setAttribute('fill', 'white'); + textSVG.textContent = answers.length; + + this.el.appendChild(pointSVG); + this.el.appendChild(textSVG); + }; + + var decodeHotSpot = function (hotSpotInfo) { + var hotSpot = null, + coords = hotSpotInfo.coord.split('|'); + + switch (hotSpotInfo.type) { + case 'square': + var position = coords[0].split(';'); + + hotSpot = new Square(); + hotSpot.x = parseInt(position[0]); + hotSpot.y = parseInt(position[1]); + hotSpot.width = parseInt(coords[1]); + hotSpot.height = parseInt(coords[2]); + break; + case 'circle': + var center = coords[0].split(';'); + + hotSpot = new Ellipse(); + hotSpot.centerX = parseInt(center[0]); + hotSpot.centerY = parseInt(center[1]); + hotSpot.radiusX = parseInt(coords[1]); + hotSpot.radiusY = parseInt(coords[2]); + break; + case 'poly': + hotSpot = new Polygon(); + + coords.forEach(function (pairedCoord) { + var coord = pairedCoord.split(';'); + + hotSpot.points.push([ + parseInt(coord[0]), + parseInt(coord[1]) + ]); + }); + break; + } + + return hotSpot; + }; + + var decodeAnswer = function (answerInfo) { + var answer = null, + coords = answerInfo.split(';'); + + answer = new Answer(); + answer.x = coords[0]; + answer.y = coords[1]; + + return answer; + }; + + var colors = [ + '66, 113, 181', + '254, 142, 22', + '69, 199, 240', + '188, 214, 49', + '214, 49, 115', + '215, 215, 215', + '144, 175, 221', + '174, 134, 64', + '79, 146, 66', + '244, 235, 36', + '237, 32, 36', + '59, 59, 59' + ]; + + var startAnswer = function (hotSpotAnswerInfo) { + var image = new Image(); + image.onload = function () { + var canvasSVG = new CanvasSVG(this); + + hotSpotAnswerInfo.hotspots.forEach(function (hotSpotInfo) { + var hotSpot = decodeHotSpot(hotSpotInfo); + + if (!hotSpot) { + return; + } + + hotSpots.push(hotSpot); + canvasSVG.addHotSpot(hotSpot); + }); + + hotSpotAnswerInfo.answers.forEach(function (answerInfo) { + var answer = decodeAnswer(answerInfo); + + answers.push(answer); + canvasSVG.addAnswer(answer); + }); + + $(config.selector) + .css('width', this.width) + .append(canvasSVG.el); + }; + image.src = hotSpotAnswerInfo.image; + + lang = hotSpotAnswerInfo.lang; + }; + + return { + init: function (settings) { + config = $.extend({ + questionId: 0, + exerciseId: 0, + selector: '' + }, settings); + + if (!config.questionId || !config.selector) { + return; + } + + var xhrHotSpotAnswers = $.getJSON('/main/exercice/hotspot_answers.as.php', { + modifyAnswers: parseInt(config.questionId), + exe_id: parseInt(config.exerciseId) + }); + + $.when(xhrHotSpotAnswers).done(startAnswer); + } + }; +})(); \ No newline at end of file diff --git a/main/plugin/hotspot2/js/hotspot_user.js b/main/plugin/hotspot2/js/hotspot_user.js new file mode 100755 index 0000000000..1f1072b112 --- /dev/null +++ b/main/plugin/hotspot2/js/hotspot_user.js @@ -0,0 +1,270 @@ +var HotSpotUser = (function () { + var Answer = function () { + this.x = 0; + this.y = 0; + }; + + var HotSpot = function () { + this.id = 0; + this.name = ''; + }; + HotSpot.prototype.checkPoint = function (x, y) { + return false; + }; + + var Square = function () { + HotSpot.call(this); + + this.x = 0, + this.y = 0, + this.width = 0, + this.height = 0; + }; + Square.prototype = Object.create(HotSpot.prototype); + Square.prototype.checkPoint = function (x, y) { + var left = this.x, + right = this.x + this.width, + top = this.y, + bottom = this.y + this.height; + + var xIsValid = x >= left && x <= right, + yIsValid = y >= top && y <= bottom; + + return xIsValid && yIsValid; + }; + + var Ellipse = function () { + HotSpot.call(this); + + this.centerX = 0; + this.centerY = 0; + this.radiusX = 0; + this.radiusY = 0; + }; + Ellipse.prototype = Object.create(HotSpot.prototype); + Ellipse.prototype.checkPoint = function (x, y) { + var dX = x - this.centerX, + dY = y - this.centerY; + + return Math.pow(dX, 2) / Math.pow(this.radiusX, 2) + Math.pow(dY, 2) / Math.pow(this.radiusY, 2) <= 1; + }; + + var Polygon = function () { + HotSpot.call(this); + + this.points = []; + }; + Polygon.prototype = Object.create(HotSpot.prototype); + Polygon.prototype.checkPoint = function (x, y) { + var isInside = false; + + for (var i = 0, j = this.points.length - 1; i < this.points.length; j = i++) { + var xi = this.points[i][0], + yi = this.points[i][1], + xj = this.points[j][0], + yj = this.points[j][1]; + + var intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if (intersect) { + isInside = !isInside; + } + } + + return isInside; + }; + + var CanvasSVG = function (image) { + var imageSvg = document.createElementNS('http://www.w3.org/2000/svg', 'image'); + imageSvg.setAttributeNS('http://www.w3.org/1999/xlink', 'href', image.src); + imageSvg.setAttribute('width', image.width); + imageSvg.setAttribute('height', image.height); + + this.el = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); + this.el.setAttribute('version', '1.1'); + this.el.setAttribute('viewBox', '0 0 ' + image.width + ' ' + image.height); + this.el.appendChild(imageSvg); + + this.messagesEl = document.createElement('div'); + }; + CanvasSVG.prototype.setEvents = function () { + var self = this; + + var getPointOnImage = function (x, y) { + var pointerPosition = { + left: x + window.scrollX, + top: y + window.scrollY + }, + canvasOffset = { + x: self.el.getBoundingClientRect().x + window.scrollX, + y: self.el.getBoundingClientRect().y + window.scrollY + }; + + return { + x: Math.round(pointerPosition.left - canvasOffset.x), + y: Math.round(pointerPosition.top - canvasOffset.y) + }; + }; + + this.el.addEventListener('dragstart', function (e) { + e.preventDefault(); + }, false); + this.el.addEventListener('click', function (e) { + e.preventDefault(); + + if (answers.length >= hotSpots.length) { + return; + } + + var point = getPointOnImage(e.clientX, e.clientY); + + var answer = new Answer(); + answer.x = point.x; + answer.y = point.y; + + answers.push(answer); + self.addAnswer(answer); + + if (answers.length === hotSpots.length) { + console.log(lang); + self.messagesEl.textContent = lang.HotspotExerciseFinished; + + return; + } + + self.messagesEl.textContent = lang.NextAnswer + ' ' + hotSpots[answers.length].name; + }); + }; + CanvasSVG.prototype.addAnswer = function (answer) { + var pointSVG = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); + pointSVG.setAttribute('cx', answer.x); + pointSVG.setAttribute('cy', answer.y); + pointSVG.setAttribute('r', 15); + pointSVG.setAttribute('fill', '#00677C'); + + var textSVG = document.createElementNS('http://www.w3.org/2000/svg', 'text'); + textSVG.setAttribute('x', answer.x); + textSVG.setAttribute('y', answer.y); + textSVG.setAttribute('dy', 5); + textSVG.setAttribute('font-family', 'sans-serif'); + textSVG.setAttribute('text-anchor', 'middle'); + textSVG.setAttribute('fill', 'white'); + textSVG.textContent = answers.length; + + this.el.appendChild(pointSVG); + this.el.appendChild(textSVG); + + var hotSpot = hotSpots[answers.length - 1]; + + var hotspotTxt = document.createElement('input'); + hotspotTxt.type = 'hidden'; + hotspotTxt.name = 'hotspot[' + config.questionId + '][' + hotSpot.id + ']'; + hotspotTxt.value = [answer.x, answer.y].join(';'); + + var choiceTxt = document.createElement('input'); + choiceTxt.type = 'hidden'; + choiceTxt.name = 'choice[' + config.questionId + '][' + hotSpot.id + ']'; + choiceTxt.value = hotSpot.checkPoint(answer.x, answer.y) ? 1 : 0; + + this.el.parentNode.appendChild(hotspotTxt); + this.el.parentNode.appendChild(choiceTxt); + }; + CanvasSVG.prototype.startMessagesPanel = function () { + this.messagesEl.textContent = lang.NextAnswer + ' ' + hotSpots[0].name; + + this.el.parentNode.parentNode.appendChild(this.messagesEl); + }; + + var decodeHotSpot = function (hotSpotInfo) { + var hotSpot = null, + coords = hotSpotInfo.coord.split('|'); + + switch (hotSpotInfo.type) { + case 'square': + var position = coords[0].split(';'); + + hotSpot = new Square(); + hotSpot.x = parseInt(position[0]); + hotSpot.y = parseInt(position[1]); + hotSpot.width = parseInt(coords[1]); + hotSpot.height = parseInt(coords[2]); + break; + case 'circle': + var center = coords[0].split(';'); + + hotSpot = new Ellipse(); + hotSpot.centerX = parseInt(center[0]); + hotSpot.centerY = parseInt(center[1]); + hotSpot.radiusX = parseInt(coords[1]); + hotSpot.radiusY = parseInt(coords[2]); + break; + case 'poly': + hotSpot = new Polygon(); + + coords.forEach(function (pairedCoord) { + var coord = pairedCoord.split(';'); + + hotSpot.points.push([ + parseInt(coord[0]), + parseInt(coord[1]) + ]); + }); + break; + } + + if (hotSpot) { + hotSpot.id = parseInt(hotSpotInfo.id); + hotSpot.name = hotSpotInfo.answer; + } + + return hotSpot; + }; + + var config, lang, hotSpots = [], answers = []; + + var startQuestion = function (hotSpotQuestionInfo) { + var image = new Image(); + image.onload = function () { + var canvasSVG = new CanvasSVG(this); + + hotSpotQuestionInfo.hotspots.forEach(function (hotSpotInfo) { + var hotSpot = decodeHotSpot(hotSpotInfo); + + if (!hotSpot) { + return; + } + + hotSpots.push(hotSpot); + }); + + $(config.selector) + .css('width', this.width) + .append(canvasSVG.el); + + canvasSVG.setEvents(); + canvasSVG.startMessagesPanel(); + }; + image.src = hotSpotQuestionInfo.image; + + lang = hotSpotQuestionInfo.lang; + }; + + return { + init: function (settings) { + config = $.extend({ + questionId: 0, + selector: '' + }, settings); + + if (!config.questionId || !config.selector) { + return; + } + + var xhrHotSpotQuestion = $.getJSON('/main/exercice/hotspot_actionscript.as.php', { + modifyAnswers: parseInt(config.questionId) + }); + + $.when(xhrHotSpotQuestion).done(startQuestion); + } + }; +})(); diff --git a/src/Chamilo/CoreBundle/Component/Editor/CkEditor/Toolbar/TestProposedAnswer.php b/src/Chamilo/CoreBundle/Component/Editor/CkEditor/Toolbar/TestProposedAnswer.php index eeae353bc2..d0c4a9c0d1 100644 --- a/src/Chamilo/CoreBundle/Component/Editor/CkEditor/Toolbar/TestProposedAnswer.php +++ b/src/Chamilo/CoreBundle/Component/Editor/CkEditor/Toolbar/TestProposedAnswer.php @@ -16,32 +16,8 @@ class TestProposedAnswer extends Basic */ public function getConfig() { - $config['toolbarGroups'] = array( - array('name' => 'document'), - array( - 'name' => 'clipboard', - 'groups' => array('clipboard', 'undo',) - ), - array( - 'name' => 'basicstyles', - 'groups' => array('basicstyles', 'cleanup',) - ), - array( - 'name' => 'paragraph', - 'groups' => array('list', 'indent', 'blocks', 'align') - ), - array('name' => 'links'), - array('name' => 'insert'), - '/', - array('name' => 'styles'), - array('name' => 'colors'), - array('name' => 'mode'), - array('name' => 'others') - ); - $config['toolbarCanCollapse'] = true; $config['toolbarStartupExpanded'] = false; - $config['extraPlugins'] = $this->getPluginsToString(); //$config['width'] = '100'; //$config['height'] = '200'; if (api_get_setting('more_buttons_maximized_mode') != 'true') { @@ -54,54 +30,13 @@ class TestProposedAnswer extends Basic return $config; } - /** - * @return array - */ - public function getConditionalPlugins() - { - $plugins = array(); - if (api_get_setting('show_glossary_in_documents') == 'ismanual') { - $plugins[] = 'glossary'; - } - - return $plugins; - } - /** * Get the toolbar configuration when CKEditor is maximized * @return array */ protected function getMaximizedToolbar() { - return [ - ['NewPage', 'Templates', '-', 'Preview', 'Print'], - ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord'], - ['Undo', 'Redo', '-', 'SelectAll', 'Find', '-', 'RemoveFormat'], - ['Link', 'Unlink', 'Anchor', 'Glossary'], - [ - 'Image', - 'Mapping', - 'Video', - 'Flash', - 'Youtube', - 'Oembed', - 'Audio', - 'leaflet', - 'Smiley', - 'SpecialChar', - 'Asciimath', - 'Asciisvg' - ], - '/', - ['Table', '-', 'CreateDiv'], - ['BulletedList', 'NumberedList', 'HorizontalRule', '-', 'Outdent', 'Indent', 'Blockquote'], - ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'], - ['Bold', 'Italic', 'Underline', 'Strike', '-', 'Subscript', 'Superscript', '-', 'TextColor', 'BGColor'], - [api_get_setting('allow_spellcheck') == 'true' ? 'Scayt' : ''], - ['Styles', 'Format', 'Font', 'FontSize'], - ['PageBreak', 'ShowBlocks', 'Source'], - ['Toolbarswitch'], - ]; + return $this->getNormalToolbar(); } /** @@ -111,18 +46,9 @@ class TestProposedAnswer extends Basic protected function getNormalToolbar() { return [ - [ - 'Maximize', - 'Bold', - 'Image', - 'Link', - 'PasteFromWord', - 'Audio', - 'Table', - 'Subscript', - 'Superscript', - 'Source' - ] + ['Bold', 'Subscript', 'Superscript'], + ['Image', 'Link', 'Audio', 'Table', 'PasteFromWord'], + ['Maximize', 'Source'], ]; } @@ -132,14 +58,6 @@ class TestProposedAnswer extends Basic */ protected function getMinimizedToolbar() { - return [ - ['Templates'], - ['PasteFromWord'], - ['Link'], - ['Image', 'Video', 'Flash', 'Audio', 'Asciimath', 'Asciisvg'], - ['Table'], - ['Bold'], - ['Source', 'Toolbarswitch'] - ]; + return $this->getNormalToolbar(); } }
-
-
-
- -
-
-
+
+ + + + + '.nl2br($answerComment).''; @@ -210,7 +207,7 @@ class ExerciseShowFunctions ?>