From 8d46e50aa6b17bbb098ce92af3c421ffea0cbd74 Mon Sep 17 00:00:00 2001 From: Myriam Delaruelle <myriam.delaruelle@univ-lorraine.fr> Date: Mon, 16 May 2022 15:01:10 +0200 Subject: [PATCH] added linked activities to evaluation modal --- competency_iena_competencies_2.php | 231 ++++++++++++---------- js/dropdown.js | 20 +- renderer.php | 4 + styles.css | 10 +- templates/dashboard_competencies.mustache | 11 +- templates/dashboard_students.mustache | 10 +- templates/linked_activities.mustache | 6 + 7 files changed, 184 insertions(+), 108 deletions(-) create mode 100644 templates/linked_activities.mustache diff --git a/competency_iena_competencies_2.php b/competency_iena_competencies_2.php index 1695256..0462696 100644 --- a/competency_iena_competencies_2.php +++ b/competency_iena_competencies_2.php @@ -15,58 +15,87 @@ $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST); require_login($course, false, NULL); $PAGE->set_title(get_string('title_plugin', 'block_competency_iena')); + $is_student = false; if (!has_capability('moodle/course:update', $context = context_course::instance($course->id), $USER->id)) { - $is_student = true; - if ( $studentid != $USER->id ) { - //Si on est un étudiant on ne peux consulter que son propre dashboard ? - $link = $CFG->wwwroot . '/blocks/competency_iena/competency_iena_competencies_2.php?courseid=' . $courseid . '&studentid=' . $USER->id; - header("Location: {$link}"); - exit; - } + $is_student = true; + if ( $studentid != $USER->id ) { + //Si on est un étudiant on ne peux consulter que son propre dashboard ? + $link = $CFG->wwwroot . '/blocks/competency_iena/competency_iena_competencies_2.php?courseid=' . $courseid . '&studentid=' . $USER->id; + header("Location: {$link}"); + exit; + } } - +if(isset($_GET["action"]) && $_GET['action']=="get_links"){ + $competencyid=$_GET["competencyid"]; + $courseid=$_GET["courseid"]; + $cm_ids = \core_competency\api::list_course_modules_using_competency($competencyid, $courseid); + $data=array(); + if ( count($cm_ids) !== 0 ) { + $modules=array(); + $modinfo = get_fast_modinfo($courseid); + + foreach ($cm_ids as $cm_id) { + $module=new StdClass(); + $module->url = $modinfo->cms[$cm_id]->url->out(); + + $module->link_icon=$CFG->wwwroot."/theme/image.php/boost/".$modinfo->cms[$cm_id]->modname."/1/icon"; + $module->name=$modinfo->cms[$cm_id]->name; + array_push($modules, $module); + } + $data["modules"]=$modules; + $renderer = $PAGE->get_renderer('block_competency_iena'); + + echo $renderer->get_linked_activities($data); + + //echo json_encode($html); + return; + + } + echo "false"; + return; +} //Si on a fait une évaluation if(isset($_POST) && !empty($_POST)){ - $courseid = required_param('courseid', PARAM_INT); - $studentid = required_param('studentid', PARAM_INT); - $competencyid = required_param('competencyid', PARAM_INT); + $courseid = required_param('courseid', PARAM_INT); + $studentid = required_param('studentid', PARAM_INT); + $competencyid = required_param('competencyid', PARAM_INT); - $sql_rev = "SELECT * FROM {competency_usercomp} WHERE userid = ? AND competencyid = ? AND status = ?"; - $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]); - $review_asked = count($reviews_data) > 0 ? true : false; + $sql_rev = "SELECT * FROM {competency_usercomp} WHERE userid = ? AND competencyid = ? AND status = ?"; + $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]); + $review_asked = count($reviews_data) > 0 ? true : false; - /* <<< POST >>> */ + /* <<< POST >>> */ - /* POST EVALUATION */ + /* POST EVALUATION */ - if ( isset($_POST['grade']) ) { - $note = $_POST['note']; - \core_competency\api::grade_competency_in_course($courseid, $studentid, $competencyid, $_POST['grade'], $note); - if ( $review_asked ) { - \core_competency\api::user_competency_start_review($studentid, $competencyid); - \core_competency\api::user_competency_stop_review($studentid, $competencyid); - /* Refresh review data */ - $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]); - $review_asked = count($reviews_data) > 0 ? true : false; - } - } + if ( isset($_POST['grade']) ) { + $note = $_POST['note']; + \core_competency\api::grade_competency_in_course($courseid, $studentid, $competencyid, $_POST['grade'], $note); + if ( $review_asked ) { + \core_competency\api::user_competency_start_review($studentid, $competencyid); + \core_competency\api::user_competency_stop_review($studentid, $competencyid); + /* Refresh review data */ + $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]); + $review_asked = count($reviews_data) > 0 ? true : false; + } + } - /* POST REVIEW */ + /* POST REVIEW */ - if ( isset($_POST['review']) ) { - if ( $_POST['review'] == 'request' ) { - \core_competency\api::user_competency_request_review($studentid, $competencyid); - } elseif ( $_POST['review'] == 'cancel' ) { - \core_competency\api::user_competency_cancel_review_request($studentid, $competencyid); - } - /* Refresh review data */ - $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]); - $review_asked = count($reviews_data) > 0 ? true : false; - } + if ( isset($_POST['review']) ) { + if ( $_POST['review'] == 'request' ) { + \core_competency\api::user_competency_request_review($studentid, $competencyid); + } elseif ( $_POST['review'] == 'cancel' ) { + \core_competency\api::user_competency_cancel_review_request($studentid, $competencyid); + } + /* Refresh review data */ + $reviews_data = $DB->get_records_sql($sql_rev, [$studentid, $competencyid, 1]); + $review_asked = count($reviews_data) > 0 ? true : false; + } } @@ -101,21 +130,21 @@ $PAGE->requires->css("/blocks/competency_iena/styles.css"); echo $OUTPUT->header(); $sql = "SELECT * FROM {competency_usercomp} - WHERE userid = ? AND status = ?"; - $params_rev = array(); - $params_rev[] = $student->studentid; - $params_rev[] = 1; - $reviews_data = $DB->get_records_sql($sql, $params_rev); - $reviews_count = count($reviews_data); - - /* <<< DASHBORD >>> */ - - $count_proficients = 0; - foreach ($user_course_competencies as $u_c_cpt) { - if ( $u_c_cpt->get('proficiency') == 1 ) { - $count_proficients++; - } - } + WHERE userid = ? AND status = ?"; + $params_rev = array(); + $params_rev[] = $student->studentid; + $params_rev[] = 1; + $reviews_data = $DB->get_records_sql($sql, $params_rev); + $reviews_count = count($reviews_data); + + /* <<< DASHBORD >>> */ + + $count_proficients = 0; + foreach ($user_course_competencies as $u_c_cpt) { + if ( $u_c_cpt->get('proficiency') == 1 ) { + $count_proficients++; + } + } $chart = new \core\chart_pie(); $proficiency_serie = new core\chart_series(get_string('competencies', 'core_competency'), [$count_proficients, $count_course_cpts - $count_proficients]); @@ -131,52 +160,52 @@ $array_frameworks=array(); foreach ($user_course_competencies as $user_course_competency) { - - // Crée un obj cpt à partir de l'ID. Attention, id de compétence et course_competency sont différents. - $cpt = new \core_competency\competency($user_course_competency->get('competencyid')); - /* Visuel indentation to reflect levels in cpt framework */ - $cpt_level_in_framework = substr_count($cpt->get('path'), '/') - 1; /* start at 1 */ - - $user_course_competency->level_indentation = $cpt_level_in_framework * 1.5; - $user_course_competency->cpt_level_in_framework=$cpt_level_in_framework; - $framework_id=$cpt->get('competencyframeworkid'); - if(!in_array($framework_id,array_keys($array_frameworks))){ - $framework = new \core_competency\competency_framework($cpt->get('competencyframeworkid')); - $array_frameworks[$framework_id]=array(); - $array_frameworks[$framework_id]['taxonomy']=$framework->get('taxonomies'); - } - $user_course_competency->taxonomy=get_string("taxonomy_".$array_frameworks[$framework_id]["taxonomy"][$cpt_level_in_framework], 'core_competency'); - - // Récupère les chaines de caractère de l'échelle d'évaluation - $cpt_scale = $cpt->get_scale()->scale_items; - $user_course_competency->eval = "-"; - if ( $user_course_competency->get('grade') != null ) { - $user_course_competency->eval = $cpt_scale[$user_course_competency->get('grade') - 1]; - } - $user_course_competency->id=$user_course_competency->get('competencyid'); - - $user_course_competency->scale=array(); - for($i=0; $i<count($cpt_scale); $i++){ - $user_course_competency->scale[$i]=array('title'=>$cpt_scale[$i], 'value'=>$i+1); - if($cpt_scale[$i]==$user_course_competency->eval){ - $user_course_competency->scale[$i]['selected']='selected'; - } - - } - - $user_course_competency->proficient_class = $user_course_competency->get('proficiency') == 1 ? " list-group-item-success" : ""; - $user_course_competency->proficient_str = $user_course_competency->get('proficiency') == 1 ? "Oui" : "Non"; - $user_course_competency->shortname=$cpt->get('shortname'); - $user_course_competency->link=$CFG->wwwroot."/blocks/competency_iena/course_competency.php?courseid=".$COURSE->id."&studentid=".$student->studentid."&competencyid=".$cpt->get('id')."&from=students"; - foreach ($reviews_data as $review) { - if ( $review->competencyid == $cpt->get('id') ) { - $user_course_competency->review_asked=true; - break; - } - } - - //$user_course_competency->reviews_data=array_values($reviews_data); - + + // Crée un obj cpt à partir de l'ID. Attention, id de compétence et course_competency sont différents. + $cpt = new \core_competency\competency($user_course_competency->get('competencyid')); + /* Visuel indentation to reflect levels in cpt framework */ + $cpt_level_in_framework = substr_count($cpt->get('path'), '/') - 1; /* start at 1 */ + + $user_course_competency->level_indentation = $cpt_level_in_framework * 1.5; + $user_course_competency->cpt_level_in_framework=$cpt_level_in_framework; + $framework_id=$cpt->get('competencyframeworkid'); + if(!in_array($framework_id,array_keys($array_frameworks))){ + $framework = new \core_competency\competency_framework($cpt->get('competencyframeworkid')); + $array_frameworks[$framework_id]=array(); + $array_frameworks[$framework_id]['taxonomy']=$framework->get('taxonomies'); + } + $user_course_competency->taxonomy=get_string("taxonomy_".$array_frameworks[$framework_id]["taxonomy"][$cpt_level_in_framework], 'core_competency'); + + // Récupère les chaines de caractère de l'échelle d'évaluation + $cpt_scale = $cpt->get_scale()->scale_items; + $user_course_competency->eval = "-"; + if ( $user_course_competency->get('grade') != null ) { + $user_course_competency->eval = $cpt_scale[$user_course_competency->get('grade') - 1]; + } + $user_course_competency->id=$user_course_competency->get('competencyid'); + + $user_course_competency->scale=array(); + for($i=0; $i<count($cpt_scale); $i++){ + $user_course_competency->scale[$i]=array('title'=>$cpt_scale[$i], 'value'=>$i+1); + if($cpt_scale[$i]==$user_course_competency->eval){ + $user_course_competency->scale[$i]['selected']='selected'; + } + + } + + $user_course_competency->proficient_class = $user_course_competency->get('proficiency') == 1 ? " list-group-item-success" : ""; + $user_course_competency->proficient_str = $user_course_competency->get('proficiency') == 1 ? "Oui" : "Non"; + $user_course_competency->shortname=$cpt->get('shortname'); + $user_course_competency->link=$CFG->wwwroot."/blocks/competency_iena/course_competency.php?courseid=".$COURSE->id."&studentid=".$student->studentid."&competencyid=".$cpt->get('id')."&from=students"; + foreach ($reviews_data as $review) { + if ( $review->competencyid == $cpt->get('id') ) { + $user_course_competency->review_asked=true; + break; + } + } + + //$user_course_competency->reviews_data=array_values($reviews_data); + } $data=array(); @@ -197,8 +226,8 @@ $data['link_dashboard']=$CFG->wwwroot."/blocks/competency_iena/competency_iena_c $renderer = $PAGE->get_renderer('block_competency_iena'); $renderer->get_dashboard_students($data); - - + + echo $OUTPUT->footer(); ?> \ No newline at end of file diff --git a/js/dropdown.js b/js/dropdown.js index 2d6675a..bb719d7 100644 --- a/js/dropdown.js +++ b/js/dropdown.js @@ -1,4 +1,4 @@ -(function() { + function filter (e) { let filter = e.target.value.toUpperCase(); let a = e.target.parentNode.querySelectorAll('a'); @@ -175,6 +175,22 @@ + }); -})() \ No newline at end of file + function loadLinkedActivities(courseid, competencyid){ + $.ajax({ + url: window.location.href, + type: 'GET', + data: {competencyid:competencyid, courseid:courseid, action:"get_links"}, + success: function(html) { + if(html=='false'){ + html="<p><i>Il n'y a aucune activité liée</i></p>" + } + $("#modal-assess-"+competencyid+" #linked-activities").html(html); + + } + }); + } + + diff --git a/renderer.php b/renderer.php index d0c65cc..19a8c54 100644 --- a/renderer.php +++ b/renderer.php @@ -87,4 +87,8 @@ class block_competency_iena_renderer extends plugin_renderer_base { function get_dashboard_competency_student($data){ echo $this->render_from_template('block_competency_iena/dashboard_competency_student', $data); } + + function get_linked_activities($data){ + echo $this->render_from_template('block_competency_iena/linked_activities', $data); + } } diff --git a/styles.css b/styles.css index c02c381..3998a5b 100644 --- a/styles.css +++ b/styles.css @@ -416,4 +416,12 @@ table.dataTable{ /*.chart-table-data{ display: block !important; -}*/ \ No newline at end of file +}*/ + +.linked{ + margin-bottom: 10px; +} + +.linked .list-group-item{ + padding: 0.5rem 0.5rem; +} \ No newline at end of file diff --git a/templates/dashboard_competencies.mustache b/templates/dashboard_competencies.mustache index 794034e..9b6a5b6 100644 --- a/templates/dashboard_competencies.mustache +++ b/templates/dashboard_competencies.mustache @@ -81,7 +81,7 @@ <div><small class='review-badge'>Évaluation demandée</small></div> {{/review_asked}} <div class="user-competency-actions"> - <a href="#" data-toggle='modal' data-target='#modal-assess-{{id}}' class="action-icon" title="Evaluer" aria-label="Evaluation"><i class="icon fa fa-file-text-o fa-fw " aria-hidden="true"></i></a> + <a href="#" data-toggle='modal' data-target='#modal-assess-{{id}}' class="action-icon" title="Evaluer" aria-label="Evaluation" onclick="loadLinkedActivities({{courseid}},{{id}})"><i class="icon fa fa-file-text-o fa-fw " aria-hidden="true"></i></a> <a href="{{link_cpt}}" class="action-icon" title="Détails" aria-label="{{#str}} eval, block_competency_iena {{/str}}"><i class="icon fa fa-search-plus fa-fw " aria-hidden="true"></i></a> </div> @@ -102,7 +102,7 @@ <div class='modal-body'> <form method='post' action='{{link_assess}}'> <div class='form-group'><div class='form-group'> - <label>Évaluation</label> + <select name='grade' class='form-control'> {{#scale}} <option value='{{value}}'{{selected}}>{{title}}</option> @@ -112,6 +112,12 @@ <div class='form-group'> <textarea name='note' class='form-control' placeholder="Commentaire d'évaluation"></textarea> </div> + <div class="linked"> + <h5>Activités liées</h5> + <div id="linked-activities"> + + </div> + </div> <button type='submit' class='btn btn-primary'>Évaluer</button> </form> @@ -128,6 +134,7 @@ </div> </div> </div> + {{/count_course_cpts}} {{^count_course_cpts}} <p class='alert alert-warning'>Pour le moment, aucune compétence n'a été liée à ce cours. Pour lier des compétences au cours et les associer à des activités, rendez-vous dans la page <a href='{$CFG->wwwroot}/blocks/competency_iena/competency_iena_competencies_mgmt.php?courseid={$courseid}'>Gestion des compétences</a>. </p> diff --git a/templates/dashboard_students.mustache b/templates/dashboard_students.mustache index 7191db1..62775d4 100644 --- a/templates/dashboard_students.mustache +++ b/templates/dashboard_students.mustache @@ -52,7 +52,7 @@ <div><small class='review-badge'>Évaluation demandée</small></div> {{/review_asked}} <div class="user-competency-actions"> - {{#is_not_student}}<a href="#" data-toggle='modal' data-target='#modal-assess-{{id}}' class="action-icon" title="Evaluer" aria-label="Evaluation"><i class="icon fa fa-file-text-o fa-fw " aria-hidden="true"></i></a> + {{#is_not_student}}<a href="#" data-toggle='modal' data-target='#modal-assess-{{id}}' class="action-icon" title="Evaluer" aria-label="Evaluation" onclick="loadLinkedActivities({{courseid}},{{id}})"><i class="icon fa fa-file-text-o fa-fw " aria-hidden="true"></i></a> {{/is_not_student}} <a href="{{link}}" class="action-icon" title="Détails" aria-label="{{#str}} eval, block_competency_iena {{/str}}"><i class="icon fa fa-search-plus fa-fw " aria-hidden="true"></i></a> </div> @@ -74,7 +74,7 @@ <div class='modal-body'> <form method='post' action='{{link_dashboard}}?courseid={{courseid}}&studentid={{student.studentid}}&competencyid={{id}}'> <div class='form-group'><div class='form-group'> - <label>Évaluation</label> + <select name='grade' class='form-control'> {{#scale}} <option value='{{value}}'{{selected}}>{{title}}</option> @@ -84,6 +84,12 @@ <div class='form-group'> <textarea name='note' class='form-control' placeholder="Commentaire d'évaluation"></textarea> </div> + <div class="linked"> + <h5>Activités liées</h5> + <div id="linked-activities"> + + </div> + </div> <button type='submit' class='btn btn-primary'>Évaluer</button> </form> diff --git a/templates/linked_activities.mustache b/templates/linked_activities.mustache new file mode 100644 index 0000000..c6b1d2d --- /dev/null +++ b/templates/linked_activities.mustache @@ -0,0 +1,6 @@ +<div> + {{#modules}} + <a href='{{url}}' target='_blank' class='list-group-item list-group-item-action'><img src='{{link_icon}}' style='height: 1.3rem;'><span class='align-middle'> {{name}}</span></a> + {{/modules}} +</div> + -- GitLab