From e6e6096287d988819b231478799f2c82bcedfe0f Mon Sep 17 00:00:00 2001 From: Myriam Delaruelle <myriam.delaruelle@univ-lorraine.fr> Date: Thu, 8 Feb 2024 09:42:27 +0100 Subject: [PATCH] Tests interface option --- classes/form/edittable_form.php | 87 +++++++--- .../course_format_iena_table_option.php | 135 ++++++++++------ suivi_edit.php | 53 +++++-- suivi_unit.php | 2 +- templates/suivi.mustache | 2 +- tests/my_test.php | 150 ++++++++++++------ 6 files changed, 301 insertions(+), 128 deletions(-) diff --git a/classes/form/edittable_form.php b/classes/form/edittable_form.php index 9464849..bc4274f 100644 --- a/classes/form/edittable_form.php +++ b/classes/form/edittable_form.php @@ -19,7 +19,11 @@ class edittable_form extends moodleform { function definition() { $mform = $this->_form; - //$course = $this->_customdata['course']; + $courseid = $this->_customdata['courseid']; + $display_groups = $this->_customdata['display_groups']; + $display_status = $this->_customdata['display_status']; + $display_details = $this->_customdata['display_details']; + $display_custom = $this->_customdata['display_custom']; //$sectioninfo = $this->_customdata['cs']; @@ -42,52 +46,87 @@ class edittable_form extends moodleform { $mform->addHelpButton('display_details', 'summary');*/ $radioarray = array(); - $radioarray[] = $mform->createElement('checkbox', 'display_groups', 'Activer'); + $radioarray[] = $mform->createElement('advcheckbox', 'display_groups', 'Activer'); $mform->addGroup($radioarray, 'groups', 'Afficher les groupes', array(' '), false); $mform->addHelpButton('groups', 'modalite', 'format_iena'); + $mform->setDefault('display_groups', $display_groups['value']); + $radioarray = array(); - $radioarray[] = $mform->createElement('checkbox', 'display_custom', 'Activer'); + $radioarray[] = $mform->createElement('advcheckbox', 'display_custom', 'Activer'); $mform->addGroup($radioarray, 'custom', 'Activer la personnalisation', array(' '), false); $mform->addHelpButton('custom', 'modalite', 'format_iena'); + $mform->setDefault('display_custom', $display_custom['value']); + $radioarray = array(); - $radioarray[] = $mform->createElement('checkbox', 'display_status', 'Activer'); + $radioarray[] = $mform->createElement('advcheckbox', 'display_status', 'Activer'); $mform->addGroup($radioarray, 'status', 'Afficher les groupes', array(' '), false); $mform->addHelpButton('status', 'modalite', 'format_iena'); + $mform->setDefault('display_status', $display_status['value']); + $radioarray = array(); - $radioarray[] = $mform->createElement('checkbox', 'display_details', 'Activer'); + $radioarray[] = $mform->createElement('advcheckbox', 'display_details', 'Activer'); $mform->addGroup($radioarray, 'details', 'Afficher les groupes', array(' '), false); $mform->addHelpButton('details', 'modalite', 'format_iena'); + $mform->setDefault('display_details', $display_details['value']); - /*$mform->addElement('hidden', 'id'); - $mform->setType('id', PARAM_INT);*/ - - $this->add_action_buttons(); + + $this->add_action_buttons(true, "Enregistrer"); //$mform->_registerCancelButton('cancel'); + // + /* $buttonarray=array(); + $buttonarray[] = $mform->createElement('submit', 'submitbutton', get_string('savechanges')); + $buttonarray[] = $mform->createElement('cancel'); + $mform->addGroup($buttonarray, 'buttonar', '', ' ', false); + + + */ + $mform->addElement('hidden', 'courseid', $courseid); + $mform->setType('courseid', PARAM_INT); + + $this->set_data($courseid); } - /** - * Load in existing data as form defaults - * - * @param stdClass|array $default_values object or array of default values - */ - function set_data($default_values) { - if (!is_object($default_values)) { - // we need object for file_prepare_standard_editor - $default_values = (object)$default_values; + + + /*function is_cancelled(){ + $mform =& $this->_form; + error_log("on passe par là monsieur"); + error_log($mform->isSubmitted()); + error_log(" bla bla"); + if ($mform->isSubmitted()){ + error_log("submitted"); + foreach ($mform->_cancelButtons as $cancelbutton){ + if ($this->optional_param($cancelbutton, 0, PARAM_RAW)) { + error_log("on va par là"); + return true; + } + } } - $editoroptions = $this->_customdata['editoroptions']; - $default_values = file_prepare_standard_editor($default_values, 'summary', $editoroptions, - $editoroptions['context'], 'course', 'section', $default_values->id); - if (strval($default_values->name) === '') { - $default_values->name = false; + return false; + }*/ + + function get_data() { + $mform =& $this->_form; + + if (!$this->is_cancelled() and $this->is_submitted() and $this->is_validated()) { + $data = $mform->exportValues(); + unset($data['sesskey']); // we do not need to return sesskey + unset($data['_qf__'.$this->_formname]); // we do not need the submission marker too + if (empty($data)) { + return NULL; + } else { + return (object)$data; + } + } else { + return NULL; } - parent::set_data($default_values); } + } diff --git a/classes/output/course_format_iena_table_option.php b/classes/output/course_format_iena_table_option.php index 227ed14..41dd240 100644 --- a/classes/output/course_format_iena_table_option.php +++ b/classes/output/course_format_iena_table_option.php @@ -35,6 +35,12 @@ class course_format_iena_table_option { public $optionvalue; public $courseid; public $userid; + public $listoptions=array( + "display_groups"=>array("value"=>0), + "display_custom"=>array("value"=>0), + "display_details"=>array("value"=>0), + "display_status"=>array("value"=>0) + ); /** @@ -75,60 +81,101 @@ class course_format_iena_table_option { return $arrayoptions; } - public function get_array_options(){ + public function get_request_options(){ global $DB; - $arrayoptions = $DB->get_record('format_iena_options', ['id' => "1"]); - return $arrayoptions; + + $arrayoptions = $DB->get_records('format_iena_options', ['courseid' => $this->courseid]); + return $this->get_array_options(array_values($arrayoptions)); + } + + /** + * formate le résultat de la requête qui récupère les options existantes + * @param [array] $requestoptions [le tableau de résultat de la requête] + * @return [array] [un tableau d'objet qui contient nomoption => ["value" => value, "id"=>idoption]] + */ + private function get_array_options($requestoptions){ + + if(is_object($requestoptions)){ + $this->listoptions[$requestoptions->optionname]['value']=$requestoptions['optionvalue']; + $this->listoptions[$requestoptions->optionname]['id']=$requestoptions['id']; + } + else{ + for($i=0; $i<count($requestoptions); $i++){ + $this->listoptions[$requestoptions[$i]->optionname]['value']=$requestoptions[$i]->optionvalue; + $this->listoptions[$requestoptions[$i]->optionname]['id']=$requestoptions[$i]->id; + } + } + + return $this->listoptions; } public function toArray() { $vars = []; foreach ($this as $varname => $varvalue) { + $vars[$varname] = $varvalue; } return $vars; } + public function get_list_options(){ + return $this->listoptions; + } + public function save_property($property, $value, $existingoption =false){ + global $DB; + $this->setOptionname($property); + $this->setOptionvalue($value); + if($existingoption){ + $this->timemodified=time(); + $this->id=$existingoption; + return $result=$DB->update_record("format_iena_options", $this, true); + } + else{ + $this->timecreated=time(); + $this->timemodified=null; + return $result=$DB->insert_record("format_iena_options", $this, true); + } + + + } + + public function check_option_checked($optionfromDB, $arrayfrominput){ - /** - * @return mixed - */ - public function getDisplaygroups() - { - return $this->displaygroups; } - /** - * @param mixed $displaygroups - * - * @return self - */ - public function setDisplaygroups($displaygroups) - { - $this->displaygroups = $displaygroups; + public function check_option_unchecked(){ - return $this; } + public function check_options_state($arrayfrominput){ + foreach($arrayfrominput as $optionname=>$optionvalue){ + if(in_array($optionname, array_keys($this->listoptions))){ + + } + } + } + + + /** * @return mixed */ - public function getDisplaycustom() + public function getOptionname() { - return $this->displaycustom; + return $this->optionname; } /** - * @param mixed $displaycustom + * @param mixed $optionname * * @return self */ - public function setDisplaycustom($displaycustom) + public function setOptionname($optionname) { - $this->displaycustom = $displaycustom; + $this->optionname = $optionname; return $this; } @@ -136,19 +183,19 @@ class course_format_iena_table_option { /** * @return mixed */ - public function getDisplaydetails() + public function getOptionvalue() { - return $this->displaydetails; + return $this->optionvalue; } /** - * @param mixed $displaydetails + * @param mixed $optionvalue * * @return self */ - public function setDisplaydetails($displaydetails) + public function setOptionvalue($optionvalue) { - $this->displaydetails = $displaydetails; + $this->optionvalue = $optionvalue; return $this; } @@ -156,19 +203,19 @@ class course_format_iena_table_option { /** * @return mixed */ - public function getDisplaystatus() + public function getCourseid() { - return $this->displaystatus; + return $this->courseid; } /** - * @param mixed $displaystatus + * @param mixed $courseid * * @return self */ - public function setDisplaystatus($displaystatus) + public function setCourseid($courseid) { - $this->displaystatus = $displaystatus; + $this->courseid = $courseid; return $this; } @@ -176,19 +223,19 @@ class course_format_iena_table_option { /** * @return mixed */ - public function getIdcourse() + public function getUserid() { - return $this->idcourse; + return $this->userid; } /** - * @param mixed $idcourse + * @param mixed $userid * * @return self */ - public function setIdcourse($idcourse) + public function setUserid($userid) { - $this->idcourse = $idcourse; + $this->userid = $userid; return $this; } @@ -196,22 +243,20 @@ class course_format_iena_table_option { /** * @return mixed */ - public function getIduser() + public function getListoptions() { - return $this->iduser; + return $this->listoptions; } /** - * @param mixed $iduser + * @param mixed $listoptions * * @return self */ - public function setIduser($iduser) + public function setListoptions($listoptions) { - $this->iduser = $iduser; + $this->listoptions = $listoptions; return $this; } - - } diff --git a/suivi_edit.php b/suivi_edit.php index 6e762c5..8f3cb72 100644 --- a/suivi_edit.php +++ b/suivi_edit.php @@ -70,15 +70,16 @@ function create_options_form(){ } -$courseid = required_param('course', PARAM_INT); +$courseid = required_param('courseid', PARAM_INT); // Define the url of the view. $url = new moodle_url('/course/format/iena/suivi_edit.php', array('courseid' => $courseid)); $PAGE->set_url($url); +$returnurl=new moodle_url('/course/format/iena/suivi_unit.php', array('courseid' => $courseid)); $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST); require_login($course); -$completion = new completion_info($course); + $context = context_course::instance($COURSE->id); if (!has_capability('course/iena:suivi', $context = context_course::instance($courseid), $USER->id)) { @@ -90,22 +91,50 @@ if (!has_capability('course/iena:suivi', $context = context_course::instance($co -// If a post is sent trought the page. -if (isset($_POST['action']) && !empty($_POST['action'])) { - // Si on change les filtres. - $data = []; - $data = set_data($data); - echo json_encode($data); -} else { + init_page($course, $PAGE); echo $OUTPUT->header(); $data = []; $obj=new \format_iena\output\course_format_iena_table_option(); - $array=$obj->get_array_options(); + $obj->setCourseid($courseid); + $obj->setUserid($USER->id); + $arrayoptions=$obj->get_request_options(); + $listoptions=$obj->get_list_options(); + $arraycustomform=$arrayoptions; + $arraycustomform["courseid"]=$courseid; + $mform= new edittable_form(null, $arraycustomform); + // Form processing and displaying is done here. + + if ($mform->is_cancelled()) { + redirect($returnurl); + } else if ($fromform = $mform->get_data()) { + var_dump($fromform); + var_dump($listoptions); + foreach($listoptions as $property => $arrayvalue){ + //fromform : récupère l'input de l'utilisateur + //Attention : si on décoche une option elle n'est plus dans dans fromform + //Si l'id existe dans arraycustom form et qu'il n'y a plus dans from form alors on va changer + //Si la propriété est bien dans fromform : on vient de cocher l'option + if(isset($fromform->$property)){ + if(isset($arraycustomform[$property]['id'])){ + $request=$obj->save_property($property, $fromform->$property, $arraycustomform[$property]['id']); + } + else{ + $request=$obj->save_property($property, $fromform->$property); + } + + } + //si elle n'est pas dans fromform MAIS qu'il y a un id dans arraycustom alors ça veut dire qu'elle a été décochée + + } + + //on stocke en BDD les nouvelles données + //redirect($returnurl); + } + - $mform= new edittable_form(); $data["form"]=$mform->render(); $renderer = $PAGE->get_renderer('format_iena'); $renderer->display_edit_page($data); echo $OUTPUT->footer(); -} + diff --git a/suivi_unit.php b/suivi_unit.php index 5d70ec3..e26ee94 100644 --- a/suivi_unit.php +++ b/suivi_unit.php @@ -229,7 +229,7 @@ function set_data($data, $modules, $progress, $groups, $activegroupid, $activese } $data['link_classicview'] = $CFG->wwwroot . "/report/progress/index.php?course=" . $COURSE->id; - $data['link_editview']=$CFG->wwwroot . "/course/format/iena/suivi_edit.php?course=" . $COURSE->id; + $data['link_editview']=$CFG->wwwroot . "/course/format/iena/suivi_edit.php?courseid=" . $COURSE->id; // Pour le téléchargement du tableau ? if (!isset($data['data'])) { diff --git a/templates/suivi.mustache b/templates/suivi.mustache index 487e1d5..8096663 100644 --- a/templates/suivi.mustache +++ b/templates/suivi.mustache @@ -20,7 +20,7 @@ <a href="{{link_classicview}}" class="" role="menuitem"><i class="icon fa fa-pencil fa-fw " aria-hidden="true"></i>Vue classique</a> </div> <div class="dropdown-item"> - <a href="{{link_editview}}" class="" role="menuitem"><i class="icon fa fa-pencil fa-fw " aria-hidden="true"></i>Vue classique</a> + <a href="{{link_editview}}" class="" role="menuitem"><i class="icon fa fa-pencil fa-fw " aria-hidden="true"></i>Paramètres du tableau</a> </div> </div> </div> diff --git a/tests/my_test.php b/tests/my_test.php index e9f1656..c39d7df 100644 --- a/tests/my_test.php +++ b/tests/my_test.php @@ -1,7 +1,8 @@ <?php -namespace format_iena; +global $CFG; +require_once($CFG->dirroot. '\course\format\iena\classes\form\edittable_form.php'); @@ -65,34 +66,6 @@ class my_test extends \advanced_testcase { global $DB, $CFG; $this->resetAfterTest(true); - /*$generator = $this->getDataGenerator(); - $cat1 = $generator->create_category(); - $cat2 = $generator->create_category(); - $sub1 = $generator->create_category(array('parent' => $cat1->id)); - $sub2 = $generator->create_category(array('parent' => $cat1->id)); - $course1 = $generator->create_course(array('category' => $cat1->id)); - $course2 = $generator->create_course(array('category' => $sub1->id)); - $course3 = $generator->create_course(array('category' => $sub1->id)); - $course4 = $generator->create_course(array('category' => $cat2->id)); - - $syscontext = \context_system::instance(); - - list($user, $roleid) = $this->get_user_objects($generator, $syscontext->id); - - course_capability_assignment::allow(array(self::CATEGORY_MANAGE, self::CATEGORY_VIEWHIDDEN), $roleid, $syscontext->id); - - // Check they are where we think they are. - $this->assertEquals(1, $cat1->get_courses_count()); - $this->assertEquals(1, $cat2->get_courses_count()); - $this->assertEquals(2, $sub1->get_courses_count()); - $this->assertEquals(0, $sub2->get_courses_count()); - - // Move the courses in sub category 1 to sub category 2. - $this->assertTrue( - \core_course\management\helper::move_courses_into_category($sub2->id, array($course2->id, $course3->id)) - ); - */ - $olddebug = $CFG->debug; $CFG->debug = 0; @@ -118,35 +91,122 @@ class my_test extends \advanced_testcase { $this->assertEquals($data["courseid"], $arrayoptions->courseid); $this->assertEquals($data["userid"], $arrayoptions->userid); - // Check the settings. - /* $settings = $DB->get_records('adminpresets_it', ['adminpresetid' => $presetid]); - $this->assertCount(4, $settings); - // These are the settings created in the generator. Check the results match them. - $expectedsettings = [ - 'enablebadges' => 0, - 'allowemojipicker' => 1, - 'mediawidth' => 900, - 'maxanswers' => 2, + + $CFG->debug = $olddebug; + } + + public function test_update_option(){ + + global $DB, $CFG; + $this->resetAfterTest(true); + + $olddebug = $CFG->debug; + $CFG->debug = 0; + $data=[ + "option"=>"display_groups", + "value"=>"1", + "courseid"=>"1", + "userid"=>"1", ]; - foreach ($settings as $setting) { - $this->assertArrayHasKey($setting->name, $expectedsettings); - $this->assertEquals($expectedsettings[$setting->name], $setting->value); - }*/ + // Create a set of options for the table. + $obj=new \format_iena\output\course_format_iena_table_option(); + + $obj->setCourseId($data["courseid"]); + $obj->setUserId($data["userid"]); + $arrayoptionsid=$obj->save_property($data["option"], $data["value"]); + // Check the preset data. + + $arrayoptions = $DB->get_record('format_iena_options', ['id' => $arrayoptionsid]); + $this->assertEquals($data["option"], $arrayoptions->optionname); + $this->assertEquals($data["value"], $arrayoptions->optionvalue); + $this->assertEquals($data["courseid"], $arrayoptions->courseid); + $this->assertEquals($data["userid"], $arrayoptions->userid); + + $this->assertNull($arrayoptions->timemodified); + + $arrayoptionsid2=$obj->save_property($data["option"], 0, $arrayoptionsid); + // fwrite(STDERR, print_r($arrayoptionsid2, TRUE)); + $arrayoptionsupdated = $DB->get_record('format_iena_options', ['id' => $arrayoptionsid]); + + $this->assertEquals($data["option"], $arrayoptionsupdated->optionname); + $this->assertEquals(0, $arrayoptionsupdated->optionvalue); + $this->assertEquals($data["courseid"], $arrayoptionsupdated->courseid); + $this->assertEquals($data["userid"], $arrayoptionsupdated->userid); + + $this->assertEquals($arrayoptions->timecreated, $arrayoptionsupdated->timecreated); + $this->assertNotNull($arrayoptionsupdated->timemodified); $CFG->debug = $olddebug; + } - /* public function test_get_options_by_id_course(){ + public function test_uncheck_option(){ global $DB, $CFG; $this->resetAfterTest(true); + $olddebug = $CFG->debug; + $CFG->debug = 0; + $data=[ + "option"=>"display_groups", + "value"=>"1", + "courseid"=>"1", + "userid"=>"1", + ]; + $data2=[ + "option"=>"display_custom", + "value"=>"1", + "courseid"=>"1", + "userid"=>"1", + ]; + // Create a set of options for the table. + $obj=new \format_iena\output\course_format_iena_table_option(); + + $obj->setCourseId($data["courseid"]); + $obj->setUserId($data["userid"]); + $idoptiongroup=$obj->save_property($data["option"], $data["value"]); + // Check the preset data. + + $idoptioncustom=$obj->save_property($data2["option"], $data2["value"]); + // fwrite(STDERR, print_r($arrayoptionsid2, TRUE)); + $arrayrequest=$DB->get_records('format_iena_options',["courseid"=>1]); + $arrayoptions=$obj->get_request_options(); + + + $this->assertCount(2, $arrayrequest); + $this->assertEquals($arrayoptions["display_groups"]["id"], $idoptiongroup); + $this->assertEquals($arrayoptions["display_custom"]["id"], $idoptioncustom); + $listoptions=$obj->get_list_options(); + $arraycustomform=$arrayoptions; + $arraycustomform["courseid"]=1; + + // Instantiate a form to submit. + $values=[ + "display_groups"=>1, + "display_custom"=>0 + ]; + + // Fetch the data and then mock the submission of that data. + + edittable_form::mock_submit($values); + + $mform= new edittable_form(null, $arraycustomform); + $this->assertTrue($mform->is_validated()); + // The `get_data()` function will return the validated data, plus any defaults. + $actualfromform = $mform->get_data(); + $obj->check_options_state($actualfromform); + $arrayrequest=$DB->get_records('format_iena_options',["courseid"=>1, "optionvalue"=>1]); + + fwrite(STDERR, print_r($arrayrequest, TRUE)); + $this->assertCount(1, $arrayrequest); + $this->assertEquals($arrayrequest[$idoptiongroup]->optionname, "display_groups"); + //fwrite(STDERR, print_r($actualfromform, TRUE)); $CFG->debug = $olddebug; - - }*/ + + } /*public function create_options_provider(): array { return [ -- GitLab