Gitlab CSE Unil

Commit fb969cff authored by M. Chardon's avatar M. Chardon
Browse files

ajout fonctionnalité pour ne pas écraser les modif des étudiants

parent e000eadd
......@@ -4,11 +4,11 @@ This plugin is a fork of assignfeedback_editpdf, and is developed and maintained
Author: Marion Chardon, <marion.chardon@unil.ch>
Compatible with Moodle versions: 3.3, 3.5, 3.7
Compatible with Moodle versions: 3.3, 3.5, 3.6, 3.7
Note:
- for 3.3, please check tag "3.3", not master version.
- for 3.5, please check branch "mdl_3.5", not master version.
- for 3.5/3.6, please check branch "mdl_3.5", not master version.
## Description
......
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
......@@ -92,13 +93,19 @@ class annotation {
/** @var string pdfdisplay */
public $pdfdisplay = "footnote";
/** @var int draft */
public $draft = 1;
/** @var int draft_id */
public $draft_id = null;
/**
* Convert a compatible stdClass into an instance of this class.
* @param stdClass $record
*/
public function __construct(\stdClass $record = null) {
if ($record) {
$intcols = array('endx', 'endy', 'x', 'y');
$intcols = array('endx', 'endy', 'x', 'y', 'draft_id');
foreach ($this as $key => $value) {
if (isset($record->$key)) {
if (in_array($key, $intcols)) {
......@@ -120,4 +127,23 @@ class annotation {
return $this->textannot && !$this->parent_annot;
}
public function clone_teacher_annotation($annotationRef) {
$this->x = $annotationRef->x;
$this->endx = $annotationRef->endx;
$this->y = $annotationRef->y;
$this->endy = $annotationRef->endy;
$this->cartridgex = $annotationRef->cartridgex;
$this->cartridgey = $annotationRef->cartridgey;
$this->path = $annotationRef->path;
$this->toolid = $annotationRef->toolid;
$this->textannot = $annotationRef->textannot;
$this->colour = $annotationRef->colour;
$this->displaylock = $annotationRef->displaylock;
$this->displayrotation = $annotationRef->displayrotation;
$this->borderstyle = $annotationRef->borderstyle;
$this->parent_annot = $annotationRef->parent_annot;
$this->answerrequested = $annotationRef->answerrequested;
$this->pdfdisplay = $annotationRef->pdfdisplay;
}
}
......@@ -250,39 +250,85 @@ class page_editor {
* @return int - the number of annotations.
*/
public static function set_annotations($gradeid, $pageno, $annotations) {
global $DB;
global $CFG, $DB;
$annotationsRelease = $DB->get_records(self::BDDTABLEANNOTATION, array(self::GRADEID => $gradeid, self::DRAFLIB => 1));
$DB->delete_records(self::BDDTABLEANNOTATION, array(self::GRADEID => $gradeid, 'pageno' => $pageno, self::DRAFLIB => 1));
$added = 0;
$annotationdiv = array();
foreach ($annotations as $record) {
$currentdiv = $record->divcartridge;
if ($record->parent_annot_div != '') {
//on est dans le cas d'une annotation liee
$idparent = $annotationdiv[$record->parent_annot_div];
$record->parent_annot = intval($idparent);
}
// Force these.
if (!($record instanceof annotation)) {
$annotation = new annotation($record);
} else {
$annotation = $record;
if (!$annotationsRelease || sizeof($annotationsRelease) == 0 || $CFG->preserve_student_on_update == 0) {
$DB->delete_records(self::BDDTABLEANNOTATION, array(self::GRADEID => $gradeid, 'pageno' => $pageno, self::DRAFLIB => 1));
$annotationdiv = array();
foreach ($annotations as $record) {
$currentdiv = $record->divcartridge;
$newid = self::create_annotation_for_draft($record, $annotationdiv, $gradeid, $pageno);
if ($newid) {
if ($currentdiv != '') {
$annotationdiv[$currentdiv] = $newid;
}
$added++;
}
}
$annotation->gradeid = $gradeid;
$annotation->pageno = $pageno;
$annotation->draft = 1;
$newid = self::add_annotation($annotation);
if ($newid) {
if ($currentdiv != '') {
$annotationdiv[$currentdiv] = $newid;
} else {
$draftid = [];
foreach ($annotations as $record) {
if (!$record->id) {
$currentdiv = $record->divcartridge;
$newid = self::create_annotation_for_draft($record, $annotationdiv, $gradeid, $pageno);
if ($newid) {
if ($currentdiv != '') {
$annotationdiv[$currentdiv] = $newid;
}
$added++;
}
continue;
}
$annotationDraft = self::get_annotation($record->id);
//maj annotation
$annotationDraft->clone_teacher_annotation($record);
$DB->update_record(self::BDDTABLEANNOTATION, $annotationDraft);
$added++;
$draftid[] = $annotationDraft->id;
}
foreach ($annotationsRelease as $annotation) {
if (in_array($annotation->id, $draftid)) {
continue;
}
//need to be deleted
self::remove_annotation($annotation->id);
}
}
return $added;
}
/**
* create an annotation for a draft
* @param annotation|record $annotationRecord annotation to create
* @param array $annotationdiv array with parent's annotation's id
* @param type $gradeid grade id
* @param type $pageno page no
* @return int new annotation id
*/
private static function create_annotation_for_draft($annotationRecord, $annotationdiv, $gradeid, $pageno) {
if ($annotationRecord->parent_annot_div != '') {
//on est dans le cas d'une annotation liee
$idparent = $annotationdiv[$annotationRecord->parent_annot_div];
$annotationRecord->parent_annot = intval($idparent);
}
// Force these.
if (!($annotationRecord instanceof annotation)) {
$annotation = new annotation($annotationRecord);
} else {
$annotation = $annotationRecord;
}
$annotation->gradeid = $gradeid;
$annotation->pageno = $pageno;
$annotation->draft = 1;
return self::add_annotation($annotation);
}
/**
* Update a set of annotations to database
* @global $DB
......@@ -328,7 +374,7 @@ class page_editor {
public static function unrelease_drafts($gradeid) {
global $DB;
// Delete the non-draft annotations and comments.
// Delete the non-draft annotations.
return $DB->delete_records(self::BDDTABLEANNOTATION, array(self::GRADEID => $gradeid, self::DRAFLIB => 0));
}
......@@ -338,29 +384,79 @@ class page_editor {
* @return bool
*/
public static function release_drafts($gradeid) {
global $DB;
// Delete the previous non-draft annotations and comments.
$DB->delete_records(self::BDDTABLEANNOTATION, array(self::GRADEID => $gradeid, self::DRAFLIB => 0));
global $CFG, $DB;
// Copy all the draft annotations and comments to non-drafts.
$annotationsRelease = $DB->get_records(self::BDDTABLEANNOTATION, array(self::GRADEID => $gradeid, self::DRAFLIB => 0));
$parentlink = [];
$records = $DB->get_records(self::BDDTABLEANNOTATION, array(self::GRADEID => $gradeid, self::DRAFLIB => 1));
foreach ($records as $record) {
$oldid = $record->id;
unset($record->id);
$record->draft = 0;
$oldparentrecord = $record->parent_annot;
if ($record->parent_annot > 0) {
$record->parent_annot = $parentlink[$record->parent_annot];
if (!$annotationsRelease || sizeof($annotationsRelease) == 0 || $CFG->preserve_student_on_update == 0) {
// Delete the previous non-draft annotations.
$DB->delete_records(self::BDDTABLEANNOTATION, array(self::GRADEID => $gradeid, self::DRAFLIB => 0));
// Copy all the draft annotations to non-drafts.
$records = $DB->get_records(self::BDDTABLEANNOTATION, array(self::GRADEID => $gradeid, self::DRAFLIB => 1));
foreach ($records as $record) {
$newid = $this->create_annotation_for_release($record, $parentlink);
$parentlink[$oldid] = $newid;
}
} else {
$records = $DB->get_records(self::BDDTABLEANNOTATION, array(self::GRADEID => $gradeid, self::DRAFLIB => 1));
$draftid = [];
// update existing annotations
foreach ($annotationsRelease as $annotation) {
$annotationDraft = self::get_annotation($annotation->draft_id);
//if no result, annotation has been deleted
if (!$annotationDraft) {
self::remove_annotation($annotation->id);
continue;
}
//maj annotation
$annotation = new annotation($annotation);
$annotation->clone_teacher_annotation($annotationDraft);
$DB->update_record(self::BDDTABLEANNOTATION, $annotation);
$parentlink[$annotation->draft_id] = $annotation->id;
$draftid[] = $annotation->draft_id;
}
//create only new annotations
foreach ($records as $record) {
if (in_array($record->id, $draftid)) {
continue;
}
//need to be created
$newid = self::create_annotation_for_release($record, $parentlink);
$parentlink[$oldid] = $newid;
}
$newid = $DB->insert_record(self::BDDTABLEANNOTATION, $record);
$parentlink[$oldid] = $newid;
}
return true;
}
/**
* create an annotation for a release draft
* @param annotation|record $annotationRecord annotation to create
* @param array $parentlink array with parent's annotation's id
* @return int new annotation id
*/
private static function create_annotation_for_release($annotationRecord, $parentlink) {
$oldid = $annotationRecord->id;
unset($annotationRecord->id);
$annotationRecord->draft = 0;
$annotationRecord->draft_id = $oldid;
if ($annotationRecord->parent_annot > 0) {
$annotationRecord->parent_annot = $parentlink[$annotationRecord->parent_annot];
}
// Force these.
if (!($annotationRecord instanceof annotation)) {
$annotation = new annotation($annotationRecord);
} else {
$annotation = $annotationRecord;
}
return self::add_annotation($annotation);
}
/**
* Has annotations or comments.
* @param int $gradeid
......
......@@ -28,6 +28,7 @@
<FIELD NAME="borderstyle" TYPE="char" LENGTH="20" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="parent_annot" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="pdfdisplay" TYPE="char" LENGTH="20" NOTNULL="false"/>
<FIELD NAME="draft_id" TYPE="int" LENGTH="10" NOTNULL="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
......
......@@ -370,5 +370,17 @@ function xmldb_assignfeedback_editpdfplus_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2019061201, 'assignfeedback', 'editpdfplus');
}
if ($oldversion < 2019070100) {
/* annotation table */
$table = new xmldb_table('assignfeedback_editpp_annot');
$field = new xmldb_field('draft_id', XMLDB_TYPE_INTEGER, '10', null, false);
if (!$dbman->field_exists($table, $field)) {
$dbman->add_field($table, $field);
}
// Editpdfplus savepoint reached.
upgrade_plugin_savepoint(true, 2019070100, 'assignfeedback', 'editpdfplus');
}
return true;
}
......@@ -205,3 +205,7 @@ $string['delete_model_question'] = 'Do you want to delete this model?';
$string['feedback_configuration'] = 'Feedback: configuration';
$string['axis_label'] = 'Name';
$string['axis_add'] = 'Add a new axis';
$string['erase_student_annotation'] = 'Student\'s modifications';
$string['erase_student_annotation_desc'] = 'Student\'s modifications on annotations update';
$string['erase_student_on_update'] = 'Preserve student\'s modifications on annotations update';
$string['erase_student_on_update_desc'] = 'Preserve student\'s modifications on annotations update, default false';
\ No newline at end of file
......@@ -204,3 +204,5 @@ $string['delete_model_question'] = 'Êtes-vous sûr de vouloir supprimer ce mode
$string['feedback_configuration'] = 'Feedback : configuration';
$string['axis_label'] = 'Nom';
$string['axis_add'] = 'Add a new axis';
$string['erase_student_on_update'] = 'Erase student\'s modifications on annotations update';
$string['erase_student_on_update_desc'] = 'Erase student\'s modifications on annotations update, default true';
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
......@@ -22,13 +23,12 @@
* The code is based on mod/assign/feedback/editpdf/settings.php by Davo Smith.
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
// Enabled by default.
$settings->add(new admin_setting_configcheckbox('assignfeedback_editpdfplus/default',
new lang_string('default', 'assignfeedback_editpdfplus'),
new lang_string('default_help', 'assignfeedback_editpdfplus'), 0));
new lang_string('default', 'assignfeedback_editpdfplus'),
new lang_string('default_help', 'assignfeedback_editpdfplus'), 0));
// Base palette (contextid = 1) link.
$basepaletteurl = $CFG->wwwroot . '/mod/assign/feedback/editpdfplus/view_admin.php?id=' . \context_system::instance()->id;
......@@ -38,47 +38,50 @@ $settings->add(new admin_setting_heading('basepalette', get_string('basepalette'
$systempathslink = new moodle_url('/admin/settings.php', array('section' => 'systempaths'));
$systempathlink = html_writer::link($systempathslink, get_string('systempaths', 'admin'));
$settings->add(new admin_setting_heading('pathtogs', get_string('pathtogs', 'admin'),
get_string('pathtogspathdesc', 'assignfeedback_editpdfplus', $systempathlink)));
get_string('pathtogspathdesc', 'assignfeedback_editpdfplus', $systempathlink)));
$url = new moodle_url('/mod/assign/feedback/editpdfplus/testgs.php');
$link = html_writer::link($url, get_string('testgs', 'assignfeedback_editpdfplus'));
$settings->add(new admin_setting_heading('testgs', '', $link));
$settings->add(new admin_setting_heading('erase_student_annotation', get_string('erase_student_annotation', 'assignfeedback_editpdfplus'), get_string('erase_student_annotation_desc', 'assignfeedback_editpdfplus')));
$settings->add(new admin_setting_configcheckbox('preserve_student_on_update', get_string('erase_student_on_update', 'assignfeedback_editpdfplus'), get_string('erase_student_on_update_desc', 'assignfeedback_editpdfplus'), 0));
//$settings->add(new admin_setting_configtext("unsetting", "le nom ici", "description", 50, PARAM_INT, 20));
$settings->add(new admin_setting_heading('highlightplus',get_string('typetool_highlightplus','assignfeedback_editpdfplus'),get_string('typetool_highlightplus_desc','assignfeedback_editpdfplus')));
$settings->add(new admin_setting_heading('highlightplus', get_string('typetool_highlightplus', 'assignfeedback_editpdfplus'), get_string('typetool_highlightplus_desc', 'assignfeedback_editpdfplus')));
//$settings->add(new admin_setting_configcheckbox('highlightplus_configurable',get_string('is_not_configurable','assignfeedback_editpdfplus'),get_string('is_not_configurable_desc','assignfeedback_editpdfplus'),0));
$settings->add(new admin_setting_configcolourpicker('highlightplus_color',get_string('adminplugin_color','assignfeedback_editpdfplus'),get_string('adminplugin_color_desc','assignfeedback_editpdfplus'),'#FFFF40'));
$settings->add(new admin_setting_configcolourpicker('highlightplus_cartridge_color',get_string('adminplugin_cartridge_color','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_color_desc','assignfeedback_editpdfplus'),'#FF6F40'));
$settings->add(new admin_setting_configtext('highlightplus_cartridge_x',get_string('adminplugin_cartridge_x','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_x_desc','assignfeedback_editpdfplus'),0));
$settings->add(new admin_setting_configtext('highlightplus_cartridge_y',get_string('adminplugin_cartridge_y','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_y_desc','assignfeedback_editpdfplus'),-24));
$settings->add(new admin_setting_configcolourpicker('highlightplus_color', get_string('adminplugin_color', 'assignfeedback_editpdfplus'), get_string('adminplugin_color_desc', 'assignfeedback_editpdfplus'), '#FFFF40'));
$settings->add(new admin_setting_configcolourpicker('highlightplus_cartridge_color', get_string('adminplugin_cartridge_color', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_color_desc', 'assignfeedback_editpdfplus'), '#FF6F40'));
$settings->add(new admin_setting_configtext('highlightplus_cartridge_x', get_string('adminplugin_cartridge_x', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_x_desc', 'assignfeedback_editpdfplus'), 0));
$settings->add(new admin_setting_configtext('highlightplus_cartridge_y', get_string('adminplugin_cartridge_y', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_y_desc', 'assignfeedback_editpdfplus'), -24));
$settings->add(new admin_setting_heading('stampplus',get_string('typetool_stampplus','assignfeedback_editpdfplus'),get_string('typetool_stampplus_desc','assignfeedback_editpdfplus')));
$settings->add(new admin_setting_heading('stampplus', get_string('typetool_stampplus', 'assignfeedback_editpdfplus'), get_string('typetool_stampplus_desc', 'assignfeedback_editpdfplus')));
//$settings->add(new admin_setting_configcheckbox('stampplus_configurable',get_string('is_not_configurable','assignfeedback_editpdfplus'),get_string('is_not_configurable_desc','assignfeedback_editpdfplus'),0));
$settings->add(new admin_setting_configcolourpicker('stampplus_color',get_string('adminplugin_color','assignfeedback_editpdfplus'),get_string('adminplugin_color_desc','assignfeedback_editpdfplus'),'#FF0000'));
$settings->add(new admin_setting_configcolourpicker('stampplus_color', get_string('adminplugin_color', 'assignfeedback_editpdfplus'), get_string('adminplugin_color_desc', 'assignfeedback_editpdfplus'), '#FF0000'));
$settings->add(new admin_setting_heading('frame',get_string('typetool_frame','assignfeedback_editpdfplus'),get_string('typetool_frame_desc','assignfeedback_editpdfplus')));
$settings->add(new admin_setting_heading('frame', get_string('typetool_frame', 'assignfeedback_editpdfplus'), get_string('typetool_frame_desc', 'assignfeedback_editpdfplus')));
//$settings->add(new admin_setting_configcheckbox('frame_configurable',get_string('is_not_configurable','assignfeedback_editpdfplus'),get_string('is_not_configurable_desc','assignfeedback_editpdfplus'),0));
$settings->add(new admin_setting_configtext('frame_cartridge_x',get_string('adminplugin_cartridge_x','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_x_desc','assignfeedback_editpdfplus'),5));
$settings->add(new admin_setting_configtext('frame_cartridge_y',get_string('adminplugin_cartridge_y','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_y_desc','assignfeedback_editpdfplus'),-8));
$settings->add(new admin_setting_configtext('frame_cartridge_x', get_string('adminplugin_cartridge_x', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_x_desc', 'assignfeedback_editpdfplus'), 5));
$settings->add(new admin_setting_configtext('frame_cartridge_y', get_string('adminplugin_cartridge_y', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_y_desc', 'assignfeedback_editpdfplus'), -8));
$settings->add(new admin_setting_heading('verticalline',get_string('typetool_verticalline','assignfeedback_editpdfplus'),get_string('typetool_verticalline_desc','assignfeedback_editpdfplus')));
$settings->add(new admin_setting_heading('verticalline', get_string('typetool_verticalline', 'assignfeedback_editpdfplus'), get_string('typetool_verticalline_desc', 'assignfeedback_editpdfplus')));
//$settings->add(new admin_setting_configcheckbox('verticalline_configurable',get_string('is_not_configurable','assignfeedback_editpdfplus'),get_string('is_not_configurable_desc','assignfeedback_editpdfplus'),0));
$settings->add(new admin_setting_configcolourpicker('verticalline_color',get_string('adminplugin_color','assignfeedback_editpdfplus'),get_string('adminplugin_color_desc','assignfeedback_editpdfplus'),'#0000FF'));
$settings->add(new admin_setting_configcolourpicker('verticalline_cartridge_color',get_string('adminplugin_cartridge_color','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_color_desc','assignfeedback_editpdfplus'),'#0000FF'));
$settings->add(new admin_setting_configtext('verticalline_cartridge_x',get_string('adminplugin_cartridge_x','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_x_desc','assignfeedback_editpdfplus'),5));
$settings->add(new admin_setting_configtext('verticalline_cartridge_y',get_string('adminplugin_cartridge_y','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_y_desc','assignfeedback_editpdfplus'),0));
$settings->add(new admin_setting_configcolourpicker('verticalline_color', get_string('adminplugin_color', 'assignfeedback_editpdfplus'), get_string('adminplugin_color_desc', 'assignfeedback_editpdfplus'), '#0000FF'));
$settings->add(new admin_setting_configcolourpicker('verticalline_cartridge_color', get_string('adminplugin_cartridge_color', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_color_desc', 'assignfeedback_editpdfplus'), '#0000FF'));
$settings->add(new admin_setting_configtext('verticalline_cartridge_x', get_string('adminplugin_cartridge_x', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_x_desc', 'assignfeedback_editpdfplus'), 5));
$settings->add(new admin_setting_configtext('verticalline_cartridge_y', get_string('adminplugin_cartridge_y', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_y_desc', 'assignfeedback_editpdfplus'), 0));
$settings->add(new admin_setting_heading('stampcomment',get_string('typetool_stampcomment','assignfeedback_editpdfplus'),get_string('typetool_stampcomment_desc','assignfeedback_editpdfplus')));
$settings->add(new admin_setting_heading('stampcomment', get_string('typetool_stampcomment', 'assignfeedback_editpdfplus'), get_string('typetool_stampcomment_desc', 'assignfeedback_editpdfplus')));
//$settings->add(new admin_setting_configcheckbox('stampcomment_configurable',get_string('is_not_configurable','assignfeedback_editpdfplus'),get_string('is_not_configurable_desc','assignfeedback_editpdfplus'),0));
//$settings->add(new admin_setting_configcolourpicker('stampcomment_color',get_string('adminplugin_color','assignfeedback_editpdfplus'),get_string('adminplugin_color_desc','assignfeedback_editpdfplus'),'#000099'));
$settings->add(new admin_setting_configcolourpicker('stampcomment_cartridge_color',get_string('adminplugin_cartridge_color','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_color_desc','assignfeedback_editpdfplus'),'#000099'));
$settings->add(new admin_setting_configtext('stampcomment_cartridge_x',get_string('adminplugin_cartridge_x','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_x_desc','assignfeedback_editpdfplus'),35));
$settings->add(new admin_setting_configtext('stampcomment_cartridge_y',get_string('adminplugin_cartridge_y','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_y_desc','assignfeedback_editpdfplus'),6));
$settings->add(new admin_setting_configcolourpicker('stampcomment_cartridge_color', get_string('adminplugin_cartridge_color', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_color_desc', 'assignfeedback_editpdfplus'), '#000099'));
$settings->add(new admin_setting_configtext('stampcomment_cartridge_x', get_string('adminplugin_cartridge_x', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_x_desc', 'assignfeedback_editpdfplus'), 35));
$settings->add(new admin_setting_configtext('stampcomment_cartridge_y', get_string('adminplugin_cartridge_y', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_y_desc', 'assignfeedback_editpdfplus'), 6));
$settings->add(new admin_setting_heading('commentplus',get_string('typetool_commentplus','assignfeedback_editpdfplus'),get_string('typetool_commentplus_desc','assignfeedback_editpdfplus')));
$settings->add(new admin_setting_heading('commentplus', get_string('typetool_commentplus', 'assignfeedback_editpdfplus'), get_string('typetool_commentplus_desc', 'assignfeedback_editpdfplus')));
//$settings->add(new admin_setting_configcheckbox('commentplus_configurable',get_string('is_not_configurable','assignfeedback_editpdfplus'),get_string('is_not_configurable_desc','assignfeedback_editpdfplus'),0));
$settings->add(new admin_setting_configcolourpicker('commentplus_cartridge_color',get_string('adminplugin_cartridge_color','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_color_desc','assignfeedback_editpdfplus'),'#000000'));
$settings->add(new admin_setting_configtext('commentplus_cartridge_x',get_string('adminplugin_cartridge_x','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_x_desc','assignfeedback_editpdfplus'),35));
$settings->add(new admin_setting_configtext('commentplus_cartridge_y',get_string('adminplugin_cartridge_y','assignfeedback_editpdfplus'),get_string('adminplugin_cartridge_y_desc','assignfeedback_editpdfplus'),6));
$settings->add(new admin_setting_configcolourpicker('commentplus_cartridge_color', get_string('adminplugin_cartridge_color', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_color_desc', 'assignfeedback_editpdfplus'), '#000000'));
$settings->add(new admin_setting_configtext('commentplus_cartridge_x', get_string('adminplugin_cartridge_x', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_x_desc', 'assignfeedback_editpdfplus'), 35));
$settings->add(new admin_setting_configtext('commentplus_cartridge_y', get_string('adminplugin_cartridge_y', 'assignfeedback_editpdfplus'), get_string('adminplugin_cartridge_y_desc', 'assignfeedback_editpdfplus'), 6));
//get_config("ass:::", "unsetting")
......@@ -25,9 +25,9 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2019061203;
$plugin->version = 2019070100;
$plugin->requires = 2019051100; // Moodle 3.7
$plugin->maturity = MATURITY_STABLE;
$plugin->release = "2.3.2 (Build: 2019061203)";
$plugin->release = "2.3.3 (Build: 2019070100)";
$plugin->component = 'assignfeedback_editpdfplus';
......@@ -834,6 +834,7 @@ Y.extend(ANNOTATION, Y.Base, {
clean: function () {
if (this.parent_annot_element) {
return {
id: this.id,
gradeid: this.gradeid,
x: parseInt(this.x, 10),
y: parseInt(this.y, 10),
......@@ -856,6 +857,7 @@ Y.extend(ANNOTATION, Y.Base, {
};
}
return {
id: this.id,
gradeid: this.gradeid,
x: parseInt(this.x, 10),
y: parseInt(this.y, 10),
......
YUI.add("moodle-assignfeedback_editpdfplus-editor",function(e,t){var n=M.cfg.wwwroot+"/mod/assign/feedback/editpdfplus/ajax.php",r=M.cfg.wwwroot+"/mod/assign/feedback/editpdfplus/ajax_progress.php",i={DIALOGUE:"assignfeedback_editpdfplus_widget"},s={PREVIOUSBUTTON:".navigate-previous-button",NEXTBUTTON:" .navigate-next-button",PAGESELECT:".navigate-page-select",LOADINGICON:".loading",PROGRESSBARCONTAINER:".progress-info.progress-striped",DRAWINGREGION:".drawingregion",DRAWINGREGIONCLASS:"drawingregion",DRAWINGCANVAS:".drawingcanvas",DRAWINGTOOLBAR:"drawingtoolbar",SAVE:".savebutton",ANNOTATIONCOLOURBUTTON:".annotationcolourbutton",DELETEANNOTATIONBUTTON:".deleteannotationbutton",WARNINGMESSAGECONTAINER:".warningmessages",ICONMESSAGECONTAINER:".infoicon",UNSAVEDCHANGESDIV:".assignfeedback_editpdf_warningmessages",UNSAVEDCHANGESINPUT:'input[name="assignfeedback_editpdfplus_haschanges"]',UNSAVEDCHANGESDIVEDIT:".assignfeedback_editpdfplus_unsavedchanges_edit",HELPMESSAGETITLE:"#afppHelpmessageTitle",HELPMESSAGE:"#afppHelpmessageBody",USERINFOREGION:'[data-region="user-info"]',ROTATELEFTBUTTON:".rotateleftbutton",ROTATERIGHTBUTTON:".rotaterightbutton",DIALOGUE:"."+i.DIALOGUE,CUSTOMTOOLBARID:"#toolbaraxis",CUSTOMTOOLBARS:".customtoolbar",AXISCUSTOMTOOLBAR:".menuaxisselection",CUSTOMTOOLBARBUTTONS:".costumtoolbarbutton",GENERICTOOLBARBUTTONS:".generictoolbarbutton",HELPBTNCLASS:".helpmessage",STATUTSELECTOR:"#menustatutselection",QUESTIONSELECTOR:"#menuquestionselection",STUDENTVALIDATION:"#student_valide_button"},o="rgba(200, 200, 255, 0.9)",u="rgba(200, 200, 255, 0.5)",a={white:"rgb(255,255,255)",yellowlemon:"rgb(255,255,0)",yellow:"rgb(255,207,53)",red:"rgb(239,69,64)",green:"rgb(152,202,62)",blue:"rgb(0,0,255)",black:"rgb(51,51,51)"},f=300,l={select:".selectbutton",drag:".dragbutton",resize:".resizebutton"},c={HIGHLIGHTPLUS:1,LINEPLUS:2,STAMPPLUS:3,FRAME:4,VERTICALLINE:5,STAMPCOMMENT:6,COMMENTPLUS:7,PEN:8,LINE:9,RECTANGLE:10,OVAL:11,HIGHLIGHT:12},h={HIGHLIGHTPLUS:"highlightplus",LINEPLUS:"lineplus",STAMPPLUS:"stampplus",FRAME:"frame",VERTICALLINE:"verticalline",STAMPCOMMENT:"stampcomment",COMMENTPLUS:"commentplus",PEN:"pen",LINE:"line",RECTANGLE:"rectangle",OVAL:"oval",HIGHLIGHT:"highlight"},p=2,d=function(e,t){this.x=parseInt(e,10),this.y=parseInt(t,10),this.clip=function(e){return this.x<e.x&&(this.x=e.x),this.x>e.x+e.width&&(this.x=e.x+e.width),this.y<e.y&&(this.y=e.y),this.y>e.y+e.height&&(this.y=e.y+e.height),this}};M.assignfeedback_editpdfplus=M.assignfeedback_editpdfplus||{},M.assignfeedback_editpdfplus.point=d;var v=function(e,t,n,r){this.x=e,this.y=t,this.width=n,this.height=r,this.bound=function(e){var t=0,n=0,r=0,i=0,s=0,o;for(s=0;s<e.length;s++){o=e[s];if(o.x<t||s===0)t=o.x;if(o.x>n||s===0)n=o.x;if(o.y<r||s===0)r=o.y;if(o.y>i||s===0)i=o.y}return this.x=t,this.y=r,this.width=n-t,this.height=i-r,this},this.has_min_width=function(){return this.width>=5},this.has_min_height=function(){return this.height>=5},this.set_min_width=function(){this.width=5},this.set_min_height=function(){this.height=5}};M.assignfeedback_editpdfplus=M.assignfeedback_editpdfplus||{},M.assignfeedback_editpdfplus.rect=v;var m=function(){this.start=!1,this.end=!1,this.starttime=0,this.annotationstart=!1,this.tool="drag",this.commentcolour="yellow",this.annotationcolour="red",this.path=[]};M.assignfeedback_editpdfplus=M.assignfeedback_editpdfplus||{},M.assignfeedback_editpdfplus.edit=m;var g=function(e){this.editor=e,this.shapes=[],this.nodes=[],this.erase=function(){if(this.shapes)while(this.shapes.length>0)this.editor.graphic.removeShape(this.shapes.pop());if(this.nodes)while(this.nodes.length>0)this.nodes.pop().remove()},this.scroll_update=function(e,t){var n,r,i;for(n=0;n<this.nodes.length;n++)r=this.nodes[n].getData("x"),i=this.nodes[n].getData("y"),r!==undefined&&i!==undefined&&(this.nodes[n].setX(parseInt(r,10)-e),this.nodes[n].setY(parseInt(i,10)-t))},this.store_position=function(e,t,n){var r,i,o;r=this.editor.get_dialogue_element(s.DRAWINGREGION),i=parseInt(r.get("scrollLeft"),10),o=parseInt(r.get("scrollTop"),10),e.setData("x",t+i),e.setData("y",n+o)}};M.assignfeedback_editpdfplus=M.assignfeedback_editpdfplus||{},M.assignfeedback_editpdfplus.drawable=g;var y=function(e){y.superclass.constructor.apply(this,[e])};y.NAME="annotation",y.ATTRS={},e.extend(y,e.Base,{editor:null,gradeid:0,pageno:0,x:0,y:0,endx:0,endy:0,path:"",toolid:0,colour:"red",drawable:!1,resizeAreas:[],tooltype:null,tooltypefamille:null,divcartridge:"",textannot:"",displaylock:1,displayrotation:0,borderstyle:"",parent_annot:0,parent_annot_element:null,id:0,shape_id:"",cartridgex:0,cartridgey:0,answerrequested:0,studentstatus:0,studentanswer:"",pdfdisplay:"footnote",minresizewidth:20,initializer:function(e){e.parent_annot_element?(this.editor=e.parent_annot_element.editor||null,this.gradeid=parseInt(e.parent_annot_element.gradeid,10)||0,this.pageno=parseInt(e.parent_annot_element.pageno,10)||0,this.cartridgex=parseInt(e.parent_annot_element.cartridgex,10)||0,this.cartridgey=parseInt(e.parent_annot_element.cartridgey,10)||0,this.colour=e.parent_annot_element.colour||"red",this.tooltype=e.tooltype,this.textannot=e.parent_annot_element.textannot,this.displaylock=parseInt(e.parent_annot_element.displaylock,10),this.displayrotation=e.parent_annot_element.displayrotation,this.borderstyle=e.parent_annot_element.borderstyle||"solid",this.parent_annot=parseInt(e.parent_annot_element.id,10),this.answerrequested=parseInt(e.parent_annot_element.answerrequested,10)||0,this.studentstatus=parseInt(e.parent_annot_element.studentstatus,10)||0,this.parent_annot_element=e.parent_annot_element):(this.editor=e.editor||null,this.gradeid=parseInt(e.gradeid,10)||0,this.pageno=parseInt(e.pageno,10)||0,this.cartridgex=parseInt(e.cartridgex,10)||0,this.cartridgey=parseInt(e.cartridgey,10)||0,this.colour=e.colour||"red",this.tooltype=e.tooltype,this.textannot=e.textannot,this.displaylock=parseInt(e.displaylock,10),this.displayrotation=e.displayrotation,this.borderstyle=
e.borderstyle||"solid",this.parent_annot=parseInt(e.parent_annot,10),this.answerrequested=parseInt(e.answerrequested,10)||0,this.studentstatus=parseInt(e.studentstatus,10)||0,this.studentanswer=e.studentanswer),this.id=e.id,this.x=parseInt(e.x,10)||0,this.y=parseInt(e.y,10)||0,this.endx=parseInt(e.endx,10)||0,this.endy=parseInt(e.endy,10)||0,this.path=e.path||"",this.toolid=e.toolid||this.editor.get_dialogue_element(c.RECTANGLE),this.drawable=!1,this.resizeAreas=[],this.pdfdisplay=e.pdfdisplay,this.tooltypefamille=this.editor.typetools[this.tooltype.type]},clean:function(){return this.parent_annot_element?{gradeid:this.gradeid,x:parseInt(this.x,10),y:parseInt(this.y,10),endx:parseInt(this.endx,10),endy:parseInt(this.endy,10),cartridgex:parseInt(this.cartridgex,10),cartridgey:parseInt(this.cartridgey,10),toolid:this.toolid,path:this.path,pageno:this.pageno,colour:this.colour,textannot:this.textannot,displaylock:parseInt(this.displaylock,10),displayrotation:parseInt(this.displayrotation,10),borderstyle:this.borderstyle,parent_annot:parseInt(this.parent_annot,10),divcartridge:this.divcartridge,parent_annot_div:this.parent_annot_element.divcartridge,pdfdisplay:this.pdfdisplay}:{gradeid:this.gradeid,x:parseInt(this.x,10),y:parseInt(this.y,10),endx:parseInt(this.endx,10),endy:parseInt(this.endy,10),cartridgex:parseInt(this.cartridgex,10),cartridgey:parseInt(this.cartridgey,10),toolid:this.toolid,path:this.path,pageno:this.pageno,colour:this.colour,textannot:this.textannot,displaylock:parseInt(this.displaylock,10),displayrotation:parseInt(this.displayrotation,10),borderstyle:this.borderstyle,parent_annot:parseInt(this.parent_annot,10),divcartridge:this.divcartridge,parent_annot_div:"",answerrequested:parseInt(this.answerrequested,10),studentstatus:parseInt(this.studentstatus,10),pdfdisplay:this.pdfdisplay}},light_clean:function(){return{id:this.id,studentstatus:parseInt(this.studentstatus,10),studentanswer:this.studentanswer}},draw_highlight:function(){var t,n=this.editor.get_dialogue_element(s.DRAWINGREGION),r=this.editor.get_dialogue_element(s.DRAWINGCANVAS).getXY(),i;if(this.editor.currentannotation===this){t=new M.assignfeedback_editpdfplus.rect,t.bound([new M.assignfeedback_editpdfplus.point(this.x-10,this.y-10),new M.assignfeedback_editpdfplus.point(this.endx+10,this.endy+10)]),i=this.editor.graphic.addShape({type:e.Rect,width:t.width,height:t.height,stroke:{weight:p,color:o},fill:{color:u},x:t.x,y:t.y}),this.drawable.shapes.push(i),i.editor=this.editor,i.on("clickoutside",e.rbind(this.editor.redraw_annotation,this.editor));var a=e.Node.create('<i class="fa fa-trash" aria-hidden="true"></i>'),f=e.Node.create('<a href="#" role="button"></a>');a.setAttrs({alt:M.util.get_string("deleteannotation","assignfeedback_editpdfplus")}),a.setStyles({backgroundColor:"white"}),f.addClass("deleteannotationbutton"),f.append(a),n.append(f),f.setData("annotation",this),f.setStyle("zIndex","200"),f.on("click",this.remove,this),f.on("key",this.remove,"space,enter",this),f.setX(r[0]+t.x+t.width-18),f.setY(r[1]+t.y+t.height-18),this.drawable.nodes.push(f)}return this.drawable},draw:function(){return this.draw_highlight(),this.drawable},get_color:function(){var e=a[this.colour];return e?(e=e.replace("rgb","rgba"),e=e.replace(")",",0.5)")):e=this.colour,e},get_color_cartridge:function(){var e=a[this.tooltype.cartridge_color];return e?(e=e.replace("rgb","rgba"),e=e.replace(")",",0.5)")):e=this.tooltype.cartridge_color,e===""?this.tooltypefamille.cartridge_color:e},init_div_cartridge_id:function(){var e=(new Date).toJSON().replace(/:/g,"").replace(/\./g,"");this.divcartridge="ct_"+this.tooltype.id+"_"+e},init_shape_id:function(e){if(!this.shape_id){var t=new Date,n=t.getTime();this.shape_id="ct_"+e+"_"+n}return this.shape_id},get_div_cartridge:function(t){var n="<div ";n+="id='"+this.divcartridge+"' ",n+="class='assignfeedback_editpdfplus_cartridge' ",n+="style='border-color: "+t+";'> ",n+="</div>";var r=e.Node.create(n);return this.editor.get("readonly")&&r.on("click",this.view_annot,this),r},get_div_cartridge_label:function(t,n){var r="<div ";r+="id='"+this.divcartridge+"_cartridge' ",r+="class='assignfeedback_editpdfplus_"+this.tooltypefamille.label+"_cartridge' ",this.editor.get("readonly")&&this.get_valref()===""?r+="style='border-right:none;padding-right:0px;color:"+t+";' ":r+="style='border-right-color: "+t+";color:"+t+";' ",r+="> ",r+=this.tooltype.cartridge,r+="</div>";var i=e.Node.create(r);return n&&!this.editor.get("readonly")?(i.on("mousedown",this.move_cartridge_begin,this),i):i},get_div_input:function(t){var n="<div ";n+="id='"+this.divcartridge+"_display' ",n+="style='color:"+t+"; ",this.editor.get("readonly")&&this.get_valref()===""&&(n+="padding:0px;"),n+="'></div>";var r=e.Node.create(n);return this.editor.get("readonly")||r.on("click",this.edit_annot,this),r},get_div_edition:function(){var t="<div ";t+="id='"+this.divcartridge+"_edit' ",t+="class='assignfeedback_editpdfplus_"+this.tooltypefamille.label+"_edition' ",t+="style='display:none;'> ",t+="<textarea id='"+this.divcartridge+"_editinput' type='text' value=\""+this.get_valref()+"\" class='form-control' style='margin-bottom:5px;' >"+this.get_valref()+"</textarea>",t+="</div>";var n=e.Node.create(t),r=this.tooltype.texts;if(r&&r.length>0){var i="<div class='btn-group-vertical aepp-toolbar-vertical'></div>",s=e.Node.create(i),o=r.split('","');for(var u=0;u<o.length;u++){var a="<button class='btn btn-outline-dark' type='button'>"+o[u].replace('"',"")+"</button>",f=e.Node.create(a);f.on("click",this.fill_input_edition,this,o[u].replace('"',"")),s.append(f),s.append("<br/>")}n.append(s)}return n},get_div_visu:function(t){var n="<div ";n+="id='"+this.divcartridge+"_visu' ",n+="class='assignfeedback_editpdfplus_"+this.tooltypefamille.label+"_visu' ",n+="style='display:none;color:"+t+";'> ",n+=this.get_valref().replace(/\n/g,"<br/>"),n+="</div>";var r=e.Node.create(n);if(this.answerrequested===1){var i=e.Node.create("<div></div>"),s=e.Node.create("<hr style='margin-bottom:0px;'/>"
),o=e.Node.create("<label style='display:inline;'>"+M.util.get_string("student_answer_lib","assignfeedback_editpdfplus")+"</label>"),u="";this.studentanswer&&this.studentanswer!=="0"&&this.studentanswer!=="1"&&(u=this.studentanswer);var a=e.Node.create("<br/><textarea id='"+this.divcartridge+"_studentanswer' type='text' value=\""+u+"\" class='form-control'>"+u+"</textarea>");u=this.studentanswer;var f="<button id='"+this.divcartridge+"_buttonsavestudentanswer' style='margin-left:110px;' class='btn' type='button'>"+"<i class='fa fa-floppy-o' aria-hidden='true'></i>"+"</button>",l=e.Node.create(f);l.on("click",this.save_studentanswer,this,null),i.append(s),i.append(o),i.append(l),i.append(a),r.append(i)}return r},get_div_container:function(t){var n="<div ";n+="class='assignfeedback_editpdfplus_"+this.tooltypefamille.label+"_conteneur' >",n+="</div>";var r=e.Node.create(n),i=this.get_div_input(t);i.addClass("assignfeedback_editpdfplus_"+this.tooltypefamille.label+"_input");var s=1;if(this.displaylock||this.displaylock>=0)s=this.displaylock;var o=e.Node.create("<input type='hidden' id='"+this.divcartridge+"_onof' value="+s+" />"),u=this.editor.get("readonly");return u||i.on("click",this.edit_annot,this),r.append(i),r.append(o),r.append(this.get_input_question()),r.append(this.get_input_pdfdisplay()),r},get_toolbar:function(){var t="<div id='"+this.divcartridge+"_toolbar' class='btn-group btn-group-sm aepp-toolbar'></div>",n=e.Node.create(t),r=this.editor.get("readonly");return r?n.append(this.get_button_student_status()):(n.append(this.get_button_visibility_left()),n.append(this.get_button_visibility_right()),n.append(this.get_button_save()),n.append(this.get_button_cancel()),this.tooltype.reply===1&&n.append(this.get_button_question()),n.append(this.get_button_pdfdisplay()),n.append(this.get_button_remove())),n},get_button_student_status:function(){var t='<label style="padding-left:20px;" class="radio-inline"><input type="radio" name="'+this.divcartridge+'_status" value=0 >'+M.util.get_string("student_statut_nc","assignfeedback_editpdfplus")+"</label>",n='<label class="radio-inline"><input type="radio" name="'+this.divcartridge+'_status" value=1 >'+'<i style="color:green;" class="fa fa-check" aria-hidden="true"></i>'+"</label>",r='<label class="radio-inline"><input type="radio" name="'+this.divcartridge+'_status" value=2 >'+'<i style="color:red;" class="fa fa-times" aria-hidden="true"></i>'+"</label> ",i=e.Node.create(t),s=e.Node.create(n),o=e.Node.create(r);i.on("click",this.change_status,this,0),s.on("click",this.change_status,this,1),o.on("click",this.change_status,this,2);var u=e.Node.create("<div id='"+this.divcartridge+"_radioContainer' style='display:inline;'></div>");return u.append(i),u.append(s),u.append(o),u},get_button_visibility_right:function(){var t="<button id='"+this.divcartridge+"_buttonedit_right' class='btn btn-sm btn-outline-dark' type='button'>";t+="<i class='fa fa-arrow-right' aria-hidden='true'></i>",t+="</button>";var n=e.Node.create(t);return n.on("click",this.change_visibility_annot,this,"r"),n},get_button_visibility_left:function(){var t="<button id='"+this.divcartridge+"_buttonedit_left' class='btn btn-sm btn-outline-dark' type='button'>";t+="<i class='fa fa-arrow-left' aria-hidden='true'></i>",t+="</button>";var n=e.Node.create(t);return n.on("click",this.change_visibility_annot,this,"l"),n},get_button_save:function(){var t="<button id='"+this.divcartridge+"_buttonsave' style='display:none;margin-left:110px;' class='btn btn-sm btn-outline-dark' type='button'>"+"<i class='fa fa-check' aria-hidden='true'></i>"+"</button>",n=e.Node.create(t);return n.on("click",this.save_annot,this,null),n},get_button_cancel:function(){var t="<button id='"+this.divcartridge+"_buttoncancel' style='display:none;' class='btn btn-sm btn-outline-dark' type='button'>"+"<i class='fa fa-undo' aria-hidden='true'></i>"+"</button>",n=e.Node.create(t);return n.on("click",this.cancel_edit,this),n},get_button_question:function(){var t="<button id='"+this.divcartridge+"_buttonquestion' style='display:none;margin-left:10px;' class='btn btn-sm btn-outline-dark' type='button'>"+'<span class="fa-stack fa-lg" style="line-height: 1em;width: 1em;">'+'<i class="fa fa-question-circle-o fa-stack-1x"></i>'+'<i class="fa fa-ban fa-stack-1x text-danger"></i>'+"</span>"+"</button>",n=e.Node.create(t);return n.on("click",this.change_question_status,this),n},get_button_remove:function(){var t="<button id='"+this.divcartridge+"_buttonremove' style='display:none;margin-left:10px;' class='btn btn-sm btn-outline-dark' type='button'>"+"<i class='fa fa-trash' aria-hidden='true'></i>"+"</button>",n=e.Node.create(t);return n.on("click",this.remove_by_trash,this),n},get_button_pdfdisplay:function(){var t="<button id='"+this.divcartridge+"_buttonpdfdisplay' style='display:none;margin-left:10px;' class='btn btn-sm btn-outline-dark' type='button'>"+"<i class='fa fa-file-pdf-o' aria-hidden='true'></i>&nbsp;"+"<i class='fa fa-arrow-circle-o-down' aria-hidden='true'></i>"+"</button>",n=e.Node.create(t);return n.on("click",this.change_pdf_display,this),n},get_input_question:function(){var t=0;return this.answerrequested&&this.answerrequested===1&&(t=1),e.Node.create("<input type='hidden' id='"+this.divcartridge+"_question' value='"+t+"'/>")},get_input_pdfdisplay:function(){return e.Node.create("<input type='hidden' id='"+this.divcartridge+"_pdfdisplay' value='"+this.pdfdisplay+"'/>")},get_valref:function(){return this.textannot&&this.textannot.length>0&&typeof this.textannot=="string"?this.textannot:""},get_input_valref:function(){return e.Node.create("<input type='hidden' id='"+this.divcartridge+"_valref' value=\""+this.get_valref()+'"/>')},apply_visibility_annot:function(){var e=this.editor.get_dialogue_element("#"+this.divcartridge+"_display"),t=this.editor.get_dialogue_element("#"+this.divcartridge+"_onof"),n=this.editor.get_dialogue_element("#"+this.divcartridge+"_buttonedit_right"),r=this.editor.get_dialogue_element("#"+this
.divcartridge+"_buttonedit_left"),i=this.editor.get_dialogue_element("#"+this.divcartridge+"_radioContainer");t&&(t.get("value")==="1"?(n&&n.show(),r&&r.show()):t.get("value")==="0"?(n&&n.show(),r&&r.hide()):(n&&n.hide(),r&&r.show())),e&&e.setContent(this.get_text_to_diplay_in_cartridge()),this.tooltypefamille.label==="frame"&&n&&(n.hide(),r.hide()),i&&i.hide(),this.apply_question_status(),this.apply_pdfdisplay()},get_text_to_diplay_in_cartridge:function(){var e=this.get_valref(),t=this.editor.get_dialogue_element("#"+this.divcartridge+"_onof"),n="";return e===""&&!this.editor.get("readonly")&&(n="&nbsp;&nbsp;&nbsp;&nbsp"),t.get("value")==="1"&&e!==""?n=e.substr(0,20):t.get("value")==="0"&&e!==""?n="...":e!==""&&(n=e),this.answerrequested===1&&(n+='&nbsp;<span style="color:red;">[?]</span>'),n},change_visibility_annot:function(e,t){var n=this.editor.get_dialogue_element("#"+this.divcartridge+"_onof"),r=parseInt(n.get("value"),10);t==="r"?r+=1:r-=1,n.set("value",r),this.displaylock=r,this.apply_visibility_annot(),this.editor.save_current_page()},change_pdf_display:function(){var e=this.editor.get_dialogue_element("#"+this.divcartridge+"_pdfdisplay"),t=e.get("value");t==="footnote"?(e.set("value","inline"),this.pdfdisplay="inline"):(e.set("value","footnote"),this.pdfdisplay="footnote"),this.apply_pdfdisplay(),this.editor.save_current_page()},change_question_status:function(){var e=this.editor.get_dialogue_element("#"+this.divcartridge+"_question"),t=parseInt(e.get("value"),10),n=0;t===0&&(n=1),e.set("value",n),this.answerrequested=n,this.apply_question_status(),this.editor.save_current_page()},change_status:function(e,t){this.studentstatus=t;var n=this.editor.get_dialogue_element("#"+this.divcartridge+"_studentanswer");n&&(this.studentanswer=n.get("value"));var r=this.editor.annotationsparent[this.id];if(r)for(var i=0;i<r.length;i++)r[i].studentstatus=t;this.editor.save_current_page_edited(),this.hide_edit()},apply_question_status:function(){var e=this.editor.get_dialogue_element("#"+this.divcartridge+"_buttonquestion"),t=this.editor.get_dialogue_element("#"+this.divcartridge+"_question"),n=0;t&&(n=parseInt(t.get("value"),10)),e&&(n===1?e.setHTML('<i class="fa fa-question-circle-o"></i>'):e.setHTML('<span class="fa-stack fa-lg" style="line-height: 1em;width: 1em;"><i class="fa fa-question-circle-o fa-stack-1x"></i><i class="fa fa-ban fa-stack-1x text-danger"></i></span>'));return},apply_pdfdisplay:function(){var e=this.editor.get_dialogue_element("#"+this.divcartridge+"_buttonpdfdisplay"),t=this.editor.get_dialogue_element("#"+this.divcartridge+"_pdfdisplay"),n=t.get("value");e&&(n==="footnote"?e.setHTML("<i class='fa fa-file-pdf-o' aria-hidden='true'></i>&nbsp;<i class='fa fa-arrow-circle-o-down' aria-hidden='true'></i>"):e.setHTML("<i class='fa fa-file-pdf-o' aria-hidden='true'></i>&nbsp;<i class='fa fa-arrow-circle-o-right' aria-hidden='true'></i>"));return},move_cartridge_begin:function(e){e.preventDefault();var t=this.editor.get_dialogue_element(s.DRAWINGCANVAS),n=new M.assignfeedback_editpdfplus.point(e.clientX+t.get("docScrollX"),e.clientY+t.get("docScrollY")),r=this.editor.get_canvas_coordinates(n);this.oldx=r.x,this.oldy=r.y,t.on("mousemove",this.move_cartridge_continue,this),t.on("mouseup",this.move_cartridge_stop,this)},move_cartridge_continue:function(e){e.preventDefault();var t=this.editor.get_dialogue_element(s.DRAWINGCANVAS),n=new M.assignfeedback_editpdfplus.point(e.clientX+t.get("docScrollX"),e.clientY+t.get("docScrollY")),r=this.editor.get_canvas_coordinates(n),i=this.editor.get_dialogue_element(s.DRAWINGCANVAS).getXY(),o=r.x-this.oldx,u=r.y-this.oldy,a=this.editor.get_dialogue_element("#"+this.divcartridge);a.setX(i[0]+this.x+this.cartridgex+o),a.setY(i[1]+this.y+this.cartridgey+u)},move_cartridge_stop:function(e){e.preventDefault();var t=this.editor.get_dialogue_element(s.DRAWINGCANVAS);t.detach("mousemove",this.move_cartridge_continue,this),t.detach("mouseup",this.move_cartridge_stop,this);var n=new M.assignfeedback_editpdfplus.point(e.clientX+t.get("docScrollX"),e.clientY+t.get("docScrollY")),r=this.editor.get_canvas_coordinates(n),i=this.editor.get_dialogue_element(s.DRAWINGCANVAS).getXY(),o=r.x-this.oldx,u=r.y-this.oldy;this.cartridgex+=o,this.cartridgey+=u;var a=this.editor.get_dialogue_element("#"+this.divcartridge);a.setX(i[0]+this.x+this.cartridgex),a.setY(i[1]+this.y+this.cartridgey),this.editor.save_current_page()},draw_catridge:function(){return!0},replacement_cartridge:function(){return!0},draw_resizeAreas:function(){return!0},get_div_resizearea:function(t,n,r){var i="horizontal";if(t==="up"||t==="down")i="vertical";var s="<div id='"+this.divcartridge+"_resize_"+t+"' "+"class='assignfeedback_editpdfplus_resize assignfeedback_editpdfplus_resize_"+i+"' ";if(i==="horizontal"){var o=Math.max(this.endy-this.y,7);r&&(o=r),s+="style='min-width:7px;min-height:"+o+"px;' "}else{var u=Math.max(this.endx-this.x,7);n&&(u=n),s+="style='min-height:7px;min-width:"+u+"px;' "}return s+="data-direction='"+t+"' "+"> "+"</div>",e.Node.create(s)},remove_resizearea:function(){var t=e.all(".assignfeedback_editpdfplus_resize");t.remove()},push_div_resizearea:function(e,t,n,r,i){var o=this.editor.get_dialogue_element(s.DRAWINGCANVAS),u=this.editor.get_dialogue_element("#"+this.divcartridge+"_resize_"+e);if(u)return;var a=this.get_div_resizearea(e,r,i);if(!a)return;a.setX(t),a.setY(n),o.append(a),this.resizeAreas.push(a)},mousemoveResize:function(){return!0},mouseupResize:function(e,t){var n=this.editor.get_dialogue_element(s.DRAWINGCANVAS),r=n.getXY(),i=t.getData("direction");i==="right"?this.endx=e.clientX+n.get("docScrollX")-r[0]:i==="left"?this.x=e.clientX+n.get("docScrollX")-r[0]:i==="up"?this.y=e.clientY+n.get("docScrollY")-r[1]:i==="down"&&(this.endy=e.clientY+n.get("docScrollY")-r[1]),this.replacement_cartridge()},view_annot:function(t,n){if(!n||n!=="click"||this.editor.currentannotationreview!==this){this.editor.currentannotationreview=this;if(this.tooltype.type<=c.COMMENTPLUS&&!
this.parent_annot_element){var r=this.editor.get_dialogue_element("#"+this.divcartridge),i=this.editor.get_dialogue_element("#"+this.divcartridge+"_display"),s=this.editor.get_dialogue_element("#"+this.divcartridge+"_visu"),o=this.editor.get_dialogue_element("#"+this.divcartridge+"_radioContainer"),u=e.all("[name="+this.divcartridge+"_status]");i.hide(),s.show();if(this.answerrequested===1){var a=this.editor.get_dialogue_element("#"+this.divcartridge+"_studentanswer");a&&a.set(this.studentanswer)}for(var f=0;f<u.size();f++){var l=u.item(f);parseInt(l.get("value"),10)===this.studentstatus?l.set("checked",!0):l.set("checked",!1)}o.show(),o.set("style","display:inline;color:"+this.get_color_cartridge()+";"),r.setStyle("z-index",1e3),this.disabled_canvas_event(),r.detach(),r.on("clickoutside",this.hide_edit,this,"clickoutside")}}else this.editor.currentannotationreview=null},edit_annot:function(){if(this.tooltype.type<=c.COMMENTPLUS&&!this.parent_annot_element){var e=this.editor.get_dialogue_element("#"+this.divcartridge),t=this.editor.get_dialogue_element("#"+this.divcartridge+"_display");if(!t)return;var n=this.editor.get_dialogue_element("#"+this.divcartridge+"_edit"),r=this.editor.get_dialogue_element("#"+this.divcartridge+"_buttonedit_right"),i=this.editor.get_dialogue_element("#"+this.divcartridge+"_buttonedit_left"),s=this.editor.get_dialogue_element("#"+this.divcartridge+"_buttonsave"),o=this.editor.get_dialogue_element("#"+this.divcartridge+"_buttoncancel"),u=this.editor.get_dialogue_element("#"+this.divcartridge+"_buttonquestion"),a=this.editor.get_dialogue_element("#"+this.divcartridge+"_buttonrotation"),f=this.editor.get_dialogue_element("#"+this.divcartridge+"_buttonpdfdisplay"),l=this.editor.get_dialogue_element("#"+this.divcartridge+"_buttonremove"),h=this.editor.get_dialogue_element("#"+this.divcartridge+"_editinput");t.hide(),r&&r.hide(),i&&i.hide(),a&&a.hide(),n.show(),s.show(),o.show(),u&&u.show(),f.show(),l.show(),e.setStyle("z-index",1e3),h&&h.set("focus","on"),this.disabled_canvas_event(),e.on("clickoutside",this.save_annot_clickout,this,"clickoutside")}},fill_input_edition:function(e,t){var n=this.editor.get_dialogue_element("#"+this.divcartridge+"_editinput");n&&n.set("value",t),this.save_annot(t)},save_annot_clickout:function(e,t){(t!=="clickoutside"||this.editor.currentannotation!==this)&&this.save_annot(null);return},save_annot:function(e){if(typeof e!="string"){var t=this.editor.get_dialogue_element("#"+this.divcartridge+"_editinput");t&&(e=t.get("value"))}this.textannot=e,this.editor.save_current_page(),e.length===0&&(e="&nbsp;&nbsp;"),this.hide_edit(),this.apply_visibility_annot()},save_studentanswer:function(){var e=this.editor.get_dialogue_element("