Skip to content
Snippets Groups Projects
Commit 0d1bfe99 authored by Thomas Fradet's avatar Thomas Fradet
Browse files

first push

parents
Branches
Tags
No related merge requests found
Showing
with 1666 additions and 0 deletions
# Competency
This Moodle plugin define the competency management block.
*Authors :*
- Vrignaud Camille *(cvrignaud@softia.fr)*
- Lebeau Michaël *(mlebeau@softia.fr)*
*To install it:*
- Trough the Moodle Administration section "Plugin" -> Add plugin
- Add block in edit mode
## Functionalities :
- My Competencies
- Table of students that have, or not, completed a competency/evaluation/activity
- Manage competencies
- A js table of competencies which you can explore, edit the actions of completion, and add a competency from your referencials. If you don't have access to referencial, you could ask access with a button on the modal.
> \*\*Additional informations:\*\* The plugin was tested in Moodle 3.3 and 3.4
> For more information contact : support_git@softia.fr
## MAJ
### Fait
[x] Affichage du nom du cours et du nom de l'évaluateur en début du texte joint à une évaluation d'une compétence. Ceci permet de se souvenir du contexte de l'évaluation, même si le cours a été supprimé.
[x] Dans la description d'une compétence sur la page qui montre la compétence d'un utilisateur dans le cours, la description est tronquée si elle fait plus de 300 caractères et un lien permet de la déplier / replier. Il y a un ascenseur dans les deux cas.
[x] Ajout de cadres autours des zones de la page pour plus de clareté.
[x] Sur la page qui montre la compétence d'un utilisateur dans le cours, remplacement de la description de la compétence par une boîte à onglet avec dans le premier onglet le titre et la description de la compétence (toujours replable et sinon scrollable), et dans le second onglet, un accordéon dont le premier item est déplié avec pour chaque item le nom et la description : du référentiel, puis de chaque parent de la compétence dans le référentiel, avec un item par parent, dans l'ordre de haut en bas (réf, parent niv 1, parent niv 2, etc. ).
[x] Restriction de la hauteur de l'historique à environ deux éléments avec un scroll pour le reste. Suppression du bouton pour tout déplier car il était peu visible.
[x] Sur la page qui montre la compétence d'un utilisateur dans le cours, ajout d'un bouton pour passer directement à l'utilisateur précédent / suivant et à la compétence précédente, suivante, sans passer par la liste qui est longue pour les users (surtout pour les users).
[x] Sur la page qui montre la compétence d'un utilisateur dans le cours, correction d'un bug qui empêchait le changement d'étudiant en cas d'homonymie.
[x] Sur la page qui montre la compétence d'un utilisateur dans le cours, la section qui montre l'historique ne s'affiche plus s'il n'y en a pas.
[x] Sur la page qui montre la compétence d'un utilisateur dans le cours, la section qui montre les modules de cours liés ne s'affiche plus s'il n'y en a pas.
[x] Sur la page qui montre la compétence d'un utilisateur dans le cours, ajout d'un lien au début de l'historique qui permet d'aller à la page qui montre la compétence pour un utilisateur en dehors du contexte du cours : http://localhost:8888/moodle35/admin/tool/lp/user_competency.php?id=[[competency_usercomp->id]] ; si cette donnée existe. La donnée existe s'il y a déjà eu une action sur la compétence dans un cours avec l'option de remontée dans les plans de formation activée.
[x] La liste des commentaires est pliée par défaut pour augmenter la lisibilité de la page. Attention, les nouveaux commentaires seront très difficiles à voir, il faudra prévoir une notification.
### En cours
[ ] Sur la page qui montre la compétence d'un utilisateur dans le cours, ajout d'un historique de la compétence comprenant les données du plan de formation (donc celles placées dans le PF, mais aussi celles issues de tous les cours dont les données remontent dans le PF).
( ) Aggréger l'historique de toutes les compétences dans l'historique du cours avec un switch entre les deux ou une autre solution pour voir les autres infos. Peut-être que ce n'est pas l'endroit.
### A faire un jour
[ ] Nettoyer les méthodes persos inutiles dans la page view_competency_iena et passer par l'api.
[ ] Rendre la page qui montre la compétence d'un utilisateur dans le cours jolie et plus facile à lire.
[ ] Modifier l'apparence ou le fonctionnement de la matrice d'ajout et de liaison des compétences aux activités pour qu'elle soit plus pratique à utiliser et plus lisible, surtout pour lier des cpt aux activités.
[ ] Notifier les utilisateurs (lesquels) lors de l'ajout d'un commentaire sur une compétence dans la page qui montre la compétence d'un utilisateur dans le cours.
<?php
require_once('entity/block_competency_iena_competency.php');
class block_competency_iena extends block_base
{
public function init()
{
$this->title = get_string('title_plugin', 'block_competency_iena');
}
function instance_allow_multiple()
{
return false;
}
/**
* Set the applicable formats for this block to all
* @return array
*/
function applicable_formats()
{
return array('course' => true);
}
/**
* Allow the user to configure a block instance
* @return bool Returns true
*/
function instance_allow_config()
{
return true;
}
function has_config()
{
return true;
}
public function get_content()
{
global $CFG;
global $COURSE;
global $USER;
if ($this->content !== null) {
return $this->content;
}
if (empty($this->config)) {
$this->config = new stdClass();
}
$this->content = new stdClass;
if (has_capability('moodle/course:update', $context = context_course::instance($COURSE->id), $USER->id)) {
$this->content->text .= '<a href="' . $CFG->wwwroot . '/blocks/competency_iena/competency_iena_competencies.php?courseid=' . $COURSE->id . '" class="btn btn-primary w-100 mb-3" style="white-space: normal;">Acquisition des compétences</a>';
$this->content->text .= '<a href="' . $CFG->wwwroot . '/blocks/competency_iena/competency_iena_competencies_mgmt.php?courseid=' . $COURSE->id . '" type="button " class="btn btn-success w-100 mb-3" style="white-space: normal;">Gérer les compétences</a>';
$this->content->text .= '<a href="' . $CFG->wwwroot . '/blocks/competency_iena/competency_iena_competency_mgmt.php?courseid=' . $COURSE->id . '" type="button " class="btn btn-secondary w-100 mb-3" style="white-space: normal;">Informations sur l\'APC</a>';
} else {
$this->content->text .= '<a href="' . $CFG->wwwroot . '/blocks/competency_iena/competency_iena_competencies.php?courseid=' . $COURSE->id . '" class="btn btn-primary w-100 mb-3">Mes Compétences</a>';
}
$competenceI = new block_competency_iena_competency();
$competences = $competenceI->get_competencies_by_userID($USER->id);
$nb_ok = 0;
$nb_total = count($competences);
// var_dump($competences);
foreach ($competences as $comp) {
if ($comp->proficiency == 1) {
$nb_ok++;
}
}
// $this->content->text .= "<p></p>";
if ($nb_total > 0) {
$progress_percentage = ceil($nb_ok*100/$nb_total);
$this->content->text .= "
<div class=\"progress\">
<div class=\"progress-bar\" role=\"progressbar\" style=\"width: $progress_percentage%;\" aria-valuenow=\"$nb_ok\" aria-valuemin=\"0\" aria-valuemax=\"$nb_total\">$nb_ok/$nb_total</div>
</div>
";
} else {
$progress_percentage = 0;
$this->content->text .= "
<div class=\"progress\">
<div class=\"progress-bar\" role=\"progressbar\" style=\"width: $progress_percentage%;\" aria-valuenow=\"$nb_ok\" aria-valuemin=\"0\" aria-valuemax=\"$nb_total\"></div>
</div>
";
}
// $this->content->text .= "
// <div class=\"thermo\">
// <div class=\"round_thermo\">
// <span class=\"text_round_thermo\">
// $nb_ok/$nb_total
// </span>
// </div>
// <div class=\"thermo_bar\">
// <progress class=\"progress\" max=\"$nb_total\" value=\"$nb_ok\"></progress>
// </div>
// </div>
// ";
return $this->content;
}
}
?>
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: softia
* Date: 28/03/18
* Time: 12:08
*/
namespace block_competency_iena\task;
class sync_task_iena_competency extends \core\task\scheduled_task
{
/**
* Get a descriptive name for this task (shown to admins).
*
* @return string
*/
public function get_name()
{
return "task_iena_competency";
}
public function execute()
{
global $CFG;
require_once($CFG->dirroot . '/blocks/competency_iena/entity/block_competency_iena_cron_competency.php');
$cron_test = new \block_competency_iena_cron_competency();
$cron_test->attribute_competency_iena();
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: softia
* Date: 28/03/18
* Time: 12:08
*/
namespace block_competency_iena\task;
class sync_task_iena_roles extends \core\task\scheduled_task
{
/**
* Get a descriptive name for this task (shown to admins).
*
* @return string
*/
public function get_name()
{
return "task_iena_roles";
}
public function execute()
{
global $CFG;
require_once($CFG->dirroot . '/blocks/competency_iena/entity/block_competency_iena_cron_roles.php');
$cron_test = new \block_competency_iena_cron_roles();
$cron_test->attribute_roles_iena();
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: softia
* Date: 28/03/18
* Time: 12:08
*/
namespace block_competency_iena\task;
class sync_task_iena_roles_complete extends \core\task\scheduled_task
{
/**
* Get a descriptive name for this task (shown to admins).
*
* @return string
*/
public function get_name()
{
return "task_iena_roles_complete";
}
public function execute()
{
global $CFG;
require_once($CFG->dirroot . '/blocks/competency_iena/entity/block_competency_iena_cron_roles.php');
$cron_test = new \block_competency_iena_cron_roles();
$cron_test->attribute_roles_iena_complete();
}
}
\ No newline at end of file
<?php
require_once('../../config.php');
// ENLEVER SI NON NECESSAIRE :
require_once('entity/block_competency_iena_competency.php');
require_once('entity/block_competency_iena_module.php');
require_once('entity/block_competency_iena_ressource.php');
require_once('entity/block_competency_iena_section.php');
require_once('entity/block_competency_iena_student.php');
require_once('entity/block_competency_iena_cron_roles.php');
require_once('entity/block_competency_iena_cron_competency.php');
require_once('view/view_competency_iena_competencies.php');
global $COURSE, $DB, $USER;
try {
$courseid = required_param('courseid', PARAM_INT);
} catch (coding_exception $e) {
}
try {
$studentid = optional_param('studentid', $USER->id, PARAM_INT);
} catch (coding_exception $e) {
}
try {
$url = new moodle_url('/blocks/competency_iena/competency_iena_competencies.php', array('courseid' => $courseid, 'studentid' => $studentid));
} catch (moodle_exception $e) {
}
$PAGE->set_pagelayout('course');
try {
$PAGE->set_url($url);
} catch (coding_exception $e) {
}
try {
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
} catch (dml_exception $e) {
}
try {
require_login($course, false, NULL);
} catch (coding_exception $e) {
} catch (require_login_exception $e) {
} catch (moodle_exception $e) {
}
try {
$PAGE->set_title(get_string('title_plugin', 'block_competency_iena'));
} catch (coding_exception $e) {
}
try {
$PAGE->set_heading($OUTPUT->heading($COURSE->fullname, 2, 'headingblock header outline'));
} catch (coding_exception $e) {
}
try {
echo $OUTPUT->header();
} catch (coding_exception $e) {
}
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">";
/*$cron_test = new block_competency_iena_cron_roles();
$cron_test->attribute_roles_iena_complete();*/
/*$cron_test = new block_competency_iena_cron_competency();
$cron_test->attribute_competency_iena();*/
$view = new view_competency_iena_competencies();
echo $view->get_content($studentid);
try {
echo $OUTPUT->footer();
} catch (coding_exception $e) {
}
<?php
/**
* Created by PhpStorm.
* User: softia
* Date: 04/04/18
* Time: 14:59
*/
require_once('../../config.php');
// ENLEVER SI NON NECESSAIRE :
require_once('entity/block_competency_iena_competency.php');
require_once('entity/block_competency_iena_module.php');
require_once('entity/block_competency_iena_ressource.php');
require_once('entity/block_competency_iena_section.php');
require_once('entity/block_competency_iena_student.php');
require_once('entity/block_competency_iena_cron_roles.php');
require_once('entity/block_competency_iena_cron_competency.php');
require_once('entity/block_competency_iena_referentiel.php');
require_once('view/view_competency_iena_competencies.php');
global $COURSE, $DB, $USER;
$courseid = required_param('courseid', PARAM_INT);
//$studentid = optional_param('studentid',$USER->id,PARAM_INT);
$url = new moodle_url('/blocks/competency_iena/competency_iena_competencies_api.php', array('courseid' => $courseid));
$PAGE->set_pagelayout('course');
$PAGE->set_url($url);
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
require_login($course, false, NULL);
if ($_POST) {
if (isset($_POST["idcompetence"])) {
$idcompetence = htmlspecialchars($_POST["idcompetence"]);
$compI = new block_competency_iena_competency();
$compI->get_competency_by_id($idcompetence);
$tab['shortname'] = $compI->shortname;
$tab['description'] = $compI->description;
$tab['id'] = $compI->id;
echo json_encode($tab);
}
if (isset($_POST["addcomp"])) {
$value = $_POST["addcomp"];
$refI = new block_competency_iena_referentiel();
$is_insert = $refI->add_competency_in_course($value[0], $value[1]);
if ($is_insert) {
echo 'true';
} else {
echo 'false';
}
}
// updateTextRef
if (isset($_POST["idref"])) {
$idref = $_POST["idref"];
$refI = new block_competency_iena_referentiel();
$value = $refI->get_info_framework_by_id($idref);
$tab['shortname'] = $value->shortname;
$tab['description'] = $value->description;
$tab['id'] = $value->id;
echo json_encode($tab);
}
if (isset($_POST["delproof"])) {
$idproof = htmlspecialchars($_POST["delproof"]);
$DB->delete_records("competency_evidence", array('id' => $idproof));
return 'true';
}
if (isset($_POST["askvalide"])) {
$idcompetence = $_POST["askidcomp"];
$iduser = $_POST["iduser"];
$status = $_POST["askvalide"];
$id_usercomp = $DB->get_record_sql('select id FROM {competency_usercomp}
WHERE competencyid = ? AND userid = ?', array($idcompetence,$iduser));
if ( $id_usercomp->id == NULL ) {
$record = new stdClass();
$record->userid = $iduser;
$record->competencyid = $idcompetence;
$record->status = $status;
$record->reviewerid = NULL;
$record->proficiency = NULL;
$record->grade = NULL;
date_default_timezone_set('Europe/Paris');
$record->timecreated = time();
$record->timemodified = time();
$record->usermodified = $iduser;
$lastinsertid = $DB->insert_record('competency_usercomp', $record, false);
var_dump($lastinsertid);
die;
} else {
$record = new stdClass();
$record->id = $id_usercomp->id;
$record->status = $status;
$DB->update_record("competency_usercomp", $record, false);
}
}
if (isset($_POST["eval_comp"])){
$eval_comp = $_POST["eval_comp"];
$iduser = $_POST["userid"];
$idcompetence = $_POST["compid"];
$eval_comp_note = $_POST["eval_comp_note"];
$eval_comp++;
$api = new \core_competency\external();
// var_dump($api::grade_competency_in_course($courseid,$iduser,$idcompetence,$eval_comp,null));
$api::grade_competency_in_course($courseid,$iduser,$idcompetence,$eval_comp,$eval_comp_note);
// si une demande d'évaluation est en cours sur cette compétence, il faut la retirer
$id_usercomp = $DB->get_record_sql('select id, status FROM {competency_usercomp}
WHERE competencyid = ? AND userid = ?', array($idcompetence,$iduser));
if ( $id_usercomp->status == 1 ) {
$record = new stdClass();
$record->id = $id_usercomp->id;
$record->status = 0;
$DB->update_record("competency_usercomp", $record, false);
}
}
}
\ No newline at end of file
<?php
require_once('../../config.php');
// ENLEVER SI NON NECESSAIRE :
require_once('entity/block_competency_iena_competency.php');
require_once('entity/block_competency_iena_module.php');
require_once('entity/block_competency_iena_ressource.php');
require_once('entity/block_competency_iena_section.php');
require_once('entity/block_competency_iena_student.php');
global $COURSE, $DB;
try {
$courseid = required_param('courseid', PARAM_INT);
} catch (coding_exception $e) {
}
try {
$url = new moodle_url('/blocks/competency_iena/competency_iena_competencies_form.php', array('courseid' => $courseid));
} catch (moodle_exception $e) {
}
//$requete = $DB->get_record_sql('SELECT course FROM {block_competency_iena} WHERE id = ?', array($courseid));
$PAGE->set_pagelayout('course');
try {
$PAGE->set_url($url);
} catch (coding_exception $e) {
}
try {
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
} catch (dml_exception $e) {
}
try {
require_login($course, false, NULL);
} catch (coding_exception $e) {
} catch (require_login_exception $e) {
} catch (moodle_exception $e) {
}
try {
$PAGE->set_title(get_string('title_plugin', 'block_competency_iena'));
} catch (coding_exception $e) {
}
try {
$PAGE->set_heading($OUTPUT->heading($COURSE->fullname, 2, 'headingblock header outline'));
} catch (coding_exception $e) {
}
try {
echo $OUTPUT->header();
} catch (coding_exception $e) {
}
//$PAGE->requires->js("/blocks/competency_iena/js/jquery.min.js");
//$PAGE->requires->js("/blocks/competency_iena/js/file.js");
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">";
//require_once('view/view_competency_iena_unit.php');
try {
echo $OUTPUT->footer();
} catch (coding_exception $e) {
}
<?php
require_once('../../config.php');
// ENLEVER SI NON NECESSAIRE :
require_once('entity/block_competency_iena_competency.php');
require_once('entity/block_competency_iena_module.php');
require_once('entity/block_competency_iena_ressource.php');
require_once('entity/block_competency_iena_section.php');
require_once('entity/block_competency_iena_student.php');
require_once('entity/block_competency_iena_referentiel.php');
require_once('view/view_competency_iena_competencies_mgmt.php');
global $COURSE, $DB, $CFG;
try {
$courseid = required_param('courseid', PARAM_INT);
} catch (coding_exception $e) {
}
try {
$url = new moodle_url('/blocks/competency_iena/competency_iena_competencies_mgmt.php', array('courseid' => $courseid));
} catch (moodle_exception $e) {
}
//$requete = $DB->get_record_sql('SELECT course FROM {block_competency_iena} WHERE id = ?', array($courseid));
try {
$PAGE->set_url($url);
} catch (coding_exception $e) {
}
if ($_POST) {
if ($_POST['info'][0] == "delete_cpt") {
$module_id = htmlspecialchars($_POST['info'][1]);
$cpt_id = htmlspecialchars($_POST['info'][2]);
$cpt_api = new \core_competency\api();
$cpt_list = $cpt_api->remove_competency_from_course($module_id, $cpt_id);
echo $cpt_list;
}
else if ($_POST['info'][2] == "delete") {
// Suppression du lien module - compétence dans la BDD
$module_id = htmlspecialchars($_POST['info'][0]);
$competency_id = htmlspecialchars($_POST['info'][1]);
// vérification si lien module - compétence existe
try {
$data_exist = $DB->get_record_sql('select count(*) AS count FROM {competency_modulecomp} WHERE cmid=? AND competencyid =?', array($module_id, $competency_id));
} catch (dml_exception $e) {
}
//var_dump($data_exist);
if ($data_exist->count > 0) {
//$DB->get_record_sql(' delete FROM {competency_modulecomp} WHERE cmid=? AND competencyid =?' , array($module_id, $competency_id));
try {
$DB->delete_records('competency_modulecomp', array('cmid' => $module_id, 'competencyid' => $competency_id));
} catch (dml_exception $e) {
}
// vérifier si succes suppression
echo 'true';
} else {
echo 'false';
}
} // Insert or update DB
else {
$module_id = htmlspecialchars($_POST['info'][0]);
$competency_id = htmlspecialchars($_POST['info'][1]);
$choix_ruleoutcome = htmlspecialchars($_POST['info'][2]);
// check if link module - skill exists
try {
$data_exist = $DB->get_record_sql('select * FROM {competency_modulecomp} WHERE cmid=? AND competencyid =?', array($module_id, $competency_id));
} catch (dml_exception $e) {
}
$date = new DateTime();
$modulecomp_data = new stdClass();
$modulecomp_data->cmid = $module_id;
$modulecomp_data->competencyid = $competency_id;
$modulecomp_data->ruleoutcome = $choix_ruleoutcome;
$modulecomp_data->timemodified = $date->getTimestamp();
$modulecomp_data->usermodified = $USER->id;
// insert
if (empty($data_exist)) {
$modulecomp_data->sortorder = 0;
$modulecomp_data->timecreated = $modulecomp_data->timemodified;
try {
$resultat = $DB->insert_record('competency_modulecomp', $modulecomp_data, true);
} catch (dml_exception $e) {
}
} // update
else {
$modulecomp_data->id = $data_exist->id;
try {
$resultat = $DB->update_record('competency_modulecomp', $modulecomp_data, false);
} catch (dml_exception $e) {
}
if ($resultat == true) {
$resultat = "update";
}
}
$response = array();
$response[0] = $resultat;
switch ($choix_ruleoutcome) //better with result of insert update queries
{
case 0:
$response[1] = 'Ne rien faire';
break;
case 1:
$response[1] = 'Joindre une preuve';
break;
case 2:
$response[1] = 'Envoyer pour validation';
break;
case 3:
$response[1] = 'Marquer la compétence comme atteinte';
break;
default:
break;
}
echo $response[0] . '/' . $response[1];
}
exit;
}
try {
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
} catch (dml_exception $e) {
}
try {
require_login($course, false, NULL);
} catch (coding_exception $e) {
} catch (require_login_exception $e) {
} catch (moodle_exception $e) {
}
try {
$PAGE->set_title(get_string('title_plugin', 'block_competency_iena'));
} catch (coding_exception $e) {
}
try {
$PAGE->set_heading($OUTPUT->heading($COURSE->fullname, 2, 'headingblock header outline'));
} catch (coding_exception $e) {
}
try {
echo $OUTPUT->header();
} catch (coding_exception $e) {
}
//$PAGE->requires->js("/blocks/competency_iena/js/jquery.min.js");
$PAGE->requires->js("/blocks/competency_iena/js/file.js");
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">";
$view = new view_competency_iena_competencies_mgmt();
echo $view->get_content(htmlspecialchars($courseid));
try {
echo $OUTPUT->footer();
} catch (coding_exception $e) {
}
<?php
require_once('../../config.php');
// ENLEVER SI NON NECESSAIRE :
require_once('entity/block_competency_iena_competency.php');
require_once('entity/block_competency_iena_module.php');
require_once('entity/block_competency_iena_ressource.php');
require_once('entity/block_competency_iena_section.php');
require_once('entity/block_competency_iena_student.php');
global $COURSE, $DB;
try {
$courseid = required_param('courseid', PARAM_INT);
} catch (coding_exception $e) {
}
try {
$url = new moodle_url('/blocks/competency_iena/competency_iena_competency_info.php', array('courseid' => $courseid));
} catch (moodle_exception $e) {
}
//$requete = $DB->get_record_sql('SELECT course FROM {block_competency_iena} WHERE id = ?', array($courseid));
$PAGE->set_pagelayout('course');
try {
$PAGE->set_url($url);
} catch (coding_exception $e) {
}
try {
if (!has_capability('moodle/course:update', $context = context_course::instance($courseid), $USER->id)) {
$link = $CFG->wwwroot . '/course/view.php?id=' . $courseid;
header("Location: {$link}");
exit;
}
} catch (coding_exception $e) {
}
try {
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
} catch (dml_exception $e) {
}
try {
require_login($course, false, NULL);
} catch (coding_exception $e) {
} catch (require_login_exception $e) {
} catch (moodle_exception $e) {
}
try {
$PAGE->set_title(get_string('title_plugin', 'block_competency_iena'));
} catch (coding_exception $e) {
}
try {
$PAGE->set_heading($OUTPUT->heading($COURSE->fullname, 2, 'headingblock header outline'));
} catch (coding_exception $e) {
}
try {
echo $OUTPUT->header();
} catch (coding_exception $e) {
}
//$PAGE->requires->js("/blocks/competency_iena/js/jquery.min.js");
//$PAGE->requires->js("/blocks/competency_iena/js/file.js");
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">";
require_once('view/view_competency_iena_competency_students.php');
$view = new view_competency_iena_competency_students();
echo $view->get_content($competencyid);
try {
echo $OUTPUT->footer();
} catch (coding_exception $e) {
}
\ No newline at end of file
<?php
define('NO_OUTPUT_BUFFERING', true);
require_once('../../config.php');
// ENLEVER SI NON NECESSAIRE :
require_once("$CFG->libdir/formslib.php");
require_once('entity/block_competency_iena_competency.php');
require_once('entity/block_competency_iena_module.php');
require_once('entity/block_competency_iena_ressource.php');
require_once('entity/block_competency_iena_section.php');
require_once('entity/block_competency_iena_student.php');
require_once('entity/block_competency_iena_referentiel.php');
require_once('view/view_competency_iena_competency_mgmt.php');
require('view/view_competency_iena_competency_validation.php');
global $COURSE, $DB, $USER;
try {
$courseid = required_param('courseid', PARAM_INT);
} catch (coding_exception $e) {
}
try {
$url = new moodle_url('/blocks/competency_iena/competency_iena_competencies_form.php', array('courseid' => $courseid));
} catch (moodle_exception $e) {
}
$PAGE->set_pagelayout('course');
try {
$PAGE->set_url($url);
} catch (coding_exception $e) {
}
try {
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
} catch (dml_exception $e) {
}
try {
require_login($course, false, NULL);
} catch (coding_exception $e) {
} catch (require_login_exception $e) {
} catch (moodle_exception $e) {
}
try {
$PAGE->set_title(get_string('title_plugin', 'block_competency_iena'));
} catch (coding_exception $e) {
}
try {
$PAGE->set_heading($OUTPUT->heading($COURSE->fullname, 2, 'headingblock header outline'));
} catch (coding_exception $e) {
}
try {
echo $OUTPUT->header();
} catch (coding_exception $e) {
}
/**
* @param $id
* @return array
*/
function get_referential($id){
$referentiel = htmlspecialchars($id);
$ref = new block_competency_iena_referentiel();
$ref_data = $ref->get_referentiels_informations($referentiel);
return $ref_data;
}
//$PAGE->requires->js("/blocks/competency_iena/js/jquery.min.js");
//$PAGE->requires->js("/blocks/competency_iena/js/file.js");
// echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">";
$view = new view_competency_iena_competency_mgmt();
$view2 = new view_competency_iena_competency_validation();
/** @var TYPE_NAME $view */
if (!empty($_POST)) {
// depuis le sélecteur de cpt
if (!empty($_POST['ref_mod'])) {
if ( $_POST['ref_mod'] == 'none' ) {
$ref_data = false;
} else {
$ref_data = get_referential($_POST['ref_mod']);
}
echo $view->get_content($courseid, $ref_data);
}
// depuis l'envoi d'un message infos apc
elseif ( ! empty($_POST['ref_mod_valid']) ) {
$to = $CFG->mail_iena;
$subject = "Demande d'accès pour modification du référentiel" ;
if ( $_POST['ref_mod_valid'] != 'none' ) {
$ref_data = get_referential($_POST['ref_mod_valid']);
$message = 'Demande d\'accès pour modification du référentiel : '.$ref_data[1]->shortname;
} else {
$message = 'Demande d\'accès pour modification de référentiels (référentiel non précisé).';
}
$message .= $_POST['textarea_message']['text'];
$message .= '<br /> De la part de : '.$USER->firstname . " " . $USER->lastname . " ( " . $USER->username. " / ID = " . $USER->id . " ) ";
$headers = 'From: '.$USER->mail.'' . "\r\n" .
'Reply-To: '.$CFG->mail_iena.'' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
// Sending confirm mail to
mail($to, $subject, $message, $headers);
echo $view2->get_content($courseid);
}
} else {
// depuis un accès direct par url ou par le bloc lui-même
$referentiel = 0;
// echo "Vous n'avez pas envoyé de formulaire, retour ... ";
echo $view->get_content($courseid, false);
}
//require_once('view/view_competency_iena_unit.php');
try {
echo $OUTPUT->footer();
} catch (coding_exception $e) {
}
<?php
require_once('../../config.php');
// ENLEVER SI NON NECESSAIRE :
require_once('entity/block_competency_iena_competency.php');
require_once('entity/block_competency_iena_module.php');
require_once('entity/block_competency_iena_ressource.php');
require_once('entity/block_competency_iena_section.php');
require_once('entity/block_competency_iena_student.php');
global $COURSE, $DB;
try {
$courseid = required_param('courseid', PARAM_INT);
} catch (coding_exception $e) {
}
try {
$competencyid = required_param('competencyid', PARAM_INT);
} catch (coding_exception $e) {
}
try {
$url = new moodle_url('/blocks/competency_iena/competency_iena_competency_students.php', array('courseid' => $courseid, 'competencyid' => $competencyid));
} catch (moodle_exception $e) {
}
//$requete = $DB->get_record_sql('SELECT course FROM {block_competency_iena} WHERE id = ?', array($courseid));
$PAGE->set_pagelayout('course');
try {
$PAGE->set_url($url);
} catch (coding_exception $e) {
}
try {
if (!has_capability('moodle/course:update', $context = context_course::instance($courseid), $USER->id)) {
$link = $CFG->wwwroot . '/course/view.php?id=' . $courseid;
header("Location: {$link}");
exit;
}
} catch (coding_exception $e) {
}
try {
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
} catch (dml_exception $e) {
}
try {
require_login($course, false, NULL);
} catch (coding_exception $e) {
} catch (require_login_exception $e) {
} catch (moodle_exception $e) {
}
try {
$PAGE->set_title(get_string('title_plugin', 'block_competency_iena'));
} catch (coding_exception $e) {
}
try {
$PAGE->set_heading($OUTPUT->heading($COURSE->fullname, 2, 'headingblock header outline'));
} catch (coding_exception $e) {
}
try {
echo $OUTPUT->header();
} catch (coding_exception $e) {
}
//$PAGE->requires->js("/blocks/competency_iena/js/jquery.min.js");
//$PAGE->requires->js("/blocks/competency_iena/js/file.js");
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\">";
require_once('view/view_competency_iena_competency_students.php');
$view = new view_competency_iena_competency_students();
echo $view->get_content($competencyid);
try {
echo $OUTPUT->footer();
} catch (coding_exception $e) {
}
<?php
require_once('../../config.php');
// ENLEVER SI NON NECESSAIRE :
require_once('entity/block_competency_iena_competency.php');
require_once('entity/block_competency_iena_module.php');
require_once('entity/block_competency_iena_ressource.php');
require_once('entity/block_competency_iena_section.php');
require_once('entity/block_competency_iena_student.php');
require_once('entity/block_competency_iena_cron_roles.php');
require_once('entity/block_competency_iena_cron_competency.php');
require_once('view/view_competency_iena_user.php');
global $COURSE, $DB, $USER;
try {
$courseid = required_param('courseid', PARAM_INT);
} catch (coding_exception $e) {
}
try {
$competencyid = required_param('competencyid', PARAM_INT);
} catch (coding_exception $e) {
}
try {
$url = new moodle_url('/blocks/competency_iena/competency_iena_user.php');
} catch (moodle_exception $e) {
}
//$url = new moodle_url('/blocks/competency_iena/competency_iena_user.php',array('courseid' => $courseid, 'studentid' => $studentid));
//$url = new moodle_url('/blocks/competency_iena/competency_iena_user.php',array('courseid' => $courseid, 'studentid' => $studentid));
$PAGE->set_pagelayout('course');
try {
$PAGE->set_url($url);
} catch (coding_exception $e) {
}
if ($_POST) {
// Delete the commentary in block_competency_iena_com table
if ($_POST['info'][0] == "delete") {
// Check if comment id exists
try {
$data_exist = $DB->get_record_sql('select count(*) AS count FROM {block_competency_iena_com} WHERE id=?', array($_POST['info'][1]));
} catch (dml_exception $e) {
}
if ($data_exist->count > 0) {
try {
$DB->delete_records('block_competency_iena_com', array('id' => $_POST['info'][1]));
} catch (dml_exception $e) {
}
echo 'true';
} else {
// if comment id doesn't exist
echo 'false';
}
} // Insert
else {
$date = new DateTime();
$comment_data = new stdClass();
$comment_data->idsender = $_POST['info'][1];
$comment_data->idstudent = $_POST['info'][2];
$comment_data->idcourse = $_POST['info'][3];
$comment_data->idcompetency = $_POST['info'][4];
$comment_data->message = $_POST['info'][5];
$comment_data->date = $date->getTimestamp();
try {
$resultat = $DB->insert_record('block_competency_iena_com', $comment_data, true);
} catch (dml_exception $e) {
}
var_dump($resultat);
}
exit;
}
try {
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
} catch (dml_exception $e) {
}
try {
require_login($course, false, NULL);
} catch (coding_exception $e) {
} catch (require_login_exception $e) {
} catch (moodle_exception $e) {
}
try {
$PAGE->set_title(get_string('title_plugin', 'block_competency_iena'));
} catch (coding_exception $e) {
}
try {
$PAGE->set_heading($OUTPUT->heading($COURSE->fullname, 2, 'headingblock header outline'));
} catch (coding_exception $e) {
}
try {
echo $OUTPUT->header();
} catch (coding_exception $e) {
}
$view = new view_competency_iena_user();
echo $view->get_content();
try {
echo $OUTPUT->footer();
} catch (coding_exception $e) {
}
<?php
$capabilities = array(
'block/competency_iena:myaddinstance' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'archetypes' => array(
'editingteacher' => CAP_ALLOW,
'manager' => CAP_ALLOW
),
'clonepermissionsfrom' => 'moodle/my:manageblocks'
),
'block/competency_iena:addinstance' => array(
'riskbitmask' => RISK_SPAM | RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_BLOCK,
'archetypes' => array(
'editingteacher' => CAP_ALLOW,
'manager' => CAP_ALLOW
),
'clonepermissionsfrom' => 'moodle/site:manageblocks'
),
);
?>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<XMLDB PATH="blocks/competency_iena/db" VERSION="20180212" COMMENT="XMLDB file for Moodle blocks/competency_iena"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
>
<TABLES>
<TABLE NAME="block_competency_iena" COMMENT="Table du block competency_iena">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
<FIELD NAME="course" TYPE="int" LENGTH="8" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
<FIELD NAME="name" TYPE="text" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="description" TYPE="text" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="ressources" TYPE="text" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="image" TYPE="text" NOTNULL="true" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
</TABLE>
<TABLE NAME="block_competency_iena_com" COMMENT="Table du block competency_iena">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
<FIELD NAME="idsender" TYPE="int" LENGTH="8" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="idstudent" TYPE="int" LENGTH="8" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="idcourse" TYPE="int" LENGTH="8" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="idcompetency" TYPE="int" LENGTH="8" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="message" TYPE="text" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="date" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
</TABLE>
</TABLES>
</XMLDB>
<?php
/**
* Created by PhpStorm.
* User: softia
* Date: 28/03/18
* Time: 13:30
*/
defined('MOODLE_INTERNAL') || die();
$tasks = array(
array(
'classname' => 'block_competency_iena\task\sync_task_iena_roles',
'blocking' => 0,
'minute' => '0',
'hour' => '0',
'day' => '0',
'month' => '0',
'dayofweek' => '0'
),
array(
'classname' => 'block_competency_iena\task\sync_task_iena_roles_complete',
'blocking' => 0,
'minute' => '0',
'hour' => '0',
'day' => '0',
'month' => '0',
'dayofweek' => '0'
),
array(
'classname' => 'block_competency_iena\task\sync_task_iena_competency',
'blocking' => 0,
'minute' => '0',
'hour' => '0',
'day' => '0',
'month' => '0',
'dayofweek' => '0'
)
);
\ No newline at end of file
<?php
if (!defined('MOODLE_INTERNAL'))
die('Direct access to this script is forbidden.');
class block_competency_iena_edit_form extends block_edit_form {
function specific_definition($mform) {
$mform->addElement('header','configheader', get_string('blocksettings', 'block'));
}
}
?>
<?php
class block_competency_iena_competency
{
/*
list_course_module_competencies_in_course_module
list_course_competencies
get_user_competency
get_user_competency_by_id
list_course_module_competencies
get_user_competency_in_course
list_user_competencies_in_course
list_user_competencies_to_review
list_user_evidence
list_evidence
list_evidence_in_course
*/
public $id;
public $shortname;
public $description;
// array<Object> students
public $students;
// propriétés d'une compétence uniquement pour la compétence d'un étudiant//
public $student_proficiency;
public $student_grade;
// propriété d'une compétence uniquement pour la compétence d'un module
// 0, 1, 2 ou 3
public $module_ruleoutcome;
public $module_ruleoutcomestring;
// (0:Ne rien faire, 1:Joindre une preuve, 2:Envoyer pour validation, 3:Marquer la compétence comme atteinte)
public function get_competency_by_id($id_competency)
{
global $DB;
try {
$competency = $DB->get_record_sql('select id, shortname, description FROM {competency} WHERE id = ?', array($id_competency));
} catch (dml_exception $e) {
}
$this->id = $id_competency;
$this->shortname = $competency->shortname;
$this->description = $competency->description;
}
public function get_competency_by_id_AND_moduleID($id_competency, $id_module)
{
global $DB;
try {
$competency = $DB->get_record_sql('select c.id, c.shortname, c.description, cm.ruleoutcome
FROM {competency} as c
inner join {competency_modulecomp} as cm on cm.competencyid = c.id
WHERE c.id = ? AND cm.cmid = ? ', array($id_competency, $id_module));
} catch (dml_exception $e) {
}
$this->id = $id_competency;
$this->shortname = $competency->shortname;
$this->description = $competency->description;
$this->module_ruleoutcome = $competency->ruleoutcome;
switch ($competency->ruleoutcome) {
case 0:
$this->module_ruleoutcomestring = 'Ne rien faire';
break;
case 1:
$this->module_ruleoutcomestring = 'Joindre une preuve';
break;
case 2:
$this->module_ruleoutcomestring = 'Envoyer pour validation';
break;
case 3:
$this->module_ruleoutcomestring = 'Marquer la compétence comme atteinte';
break;
}
}
public function get_competency_by_id_AND_userID($id_competency, $id_student)
{
global $DB;
try {
$competency = $DB->get_record_sql('select c.id, c.shortname, c.description, cu.proficiency, cu.grade
FROM {competency} as c
inner join {competency_usercompcourse} as cu on cu.competencyid = c.id
WHERE c.id = ? AND cu.userid = ?', array($id_competency, $id_student));
} catch (dml_exception $e) {
}
$this->id = $id_competency;
$this->shortname = $competency->shortname;
$this->description = $competency->description;
$this->student_proficiency = $competency->proficiency;
$this->student_grade = $competency->grade;
}
// retourne la liste des compétences (avec grade et proficiency) pour un étudiant
// ERREUR : fonctionne uniquement si l'étudiant existe dans la table competency_usercompcourse
// ce qui n'est pas le cas à la base, même s'il est inscrit dans le cours.
// il faut créer l'enregistrement s'il n'existe pas ou trouver une méthode ensure.
/*
* TODO: trouver l'API pour checker l'achèvement d'une activité
*/
public function get_competencies_by_userID($id_student)
{
/*
* ANCIEN CODE
* problème 1 : l'enregistrement en base pour la plupart des étudiants n'existe pas et ce n'est pas traité
* problème 2 : l'api n'est pas utilisée
*
global $DB, $COURSE;
$competencies_id = $DB->get_records_sql('select competencyid FROM {competency_usercompcourse} WHERE userid = ?', array($id_student));
$competencies = array();
// var_dump($competencies_id);
$i = 0;
foreach ($competencies_id as $row) {
try {
$is_existe = $DB->get_record_sql('select count(*) as count FROM {competency_coursecomp} WHERE competencyid = ?
AND courseid = ?', array($row->competencyid, $COURSE->id));
} catch (dml_exception $e) {
}
if ($is_existe->count == 0) {
continue;
}
$competency = new block_competency_iena_competency();
$competency->get_competency_by_id_AND_userID($row->competencyid, $id_student);
$competencies[$i] = $competency;
$i++;
}
return $competencies;
*/
global $COURSE, $DB;
// cpt en elle-même
$course_competencies = core_competency\api::list_course_competencies($COURSE->id);
// étudiant x course x cpt : créé l'enregistrement en base si besoin dans "competency_usercompcourse"
// $user_competencies_in_course = core_competency\api::list_user_competencies_in_course($COURSE->id, $id_student);
// $usercompetencycourse = core_competency\api::get_user_competency_in_course($COURSE->id, $id_student, 3);
$cpts = [];
foreach ($course_competencies as $cpt) {
$row = new stdClass();
$row->cpt_id = $cpt["competency"]->get('id');
$row->cpt_shortname = $cpt["competency"]->get('shortname');
$row->framework_level = count(explode('/', trim($cpt["competency"]->get('path'), '/'))) - 1;
$data = $this->get_data($id_student, $row->cpt_id, $COURSE->id);
$u_course_cpt = $data->usercompetencysummary->usercompetencycourse;
// il est possible d'ajouter aux données : référentiel, chemin complet de la cpt, cpt transversales, taxonomie, autres cours liés, évidences, liste des preuves volontaires (evidence_evidenceofpriorlearninglinked), liste des modules liés
$row->proficiency = $u_course_cpt->proficiency; // 0, 1, NULL
$row->proficiencyname = $u_course_cpt->proficiencyname;
$row->gradename = $u_course_cpt->gradename;
$row->cms = $data->coursemodules;
// $row->cms = core_competency\api::list_course_modules_using_competency($row->cpt_id, $COURSE->id);
$modules_completion_infos = $DB->get_records_sql('SELECT cmc.id, cmc.coursemoduleid, cmc.completionstate
FROM {course_modules_completion} as cmc
inner join {course_modules} as cm on cm.id = cmc.coursemoduleid
inner join {user} as u on u.id = cmc.userid
inner join {modules} as m on m.id = cm.module
where cm.course = ? and cm.deletioninprogress = 0
and cmc.userid = ?
order by section, coursemoduleid asc', array($COURSE->id, $id_student));
$row->cpl_cms = [];
foreach ($row->cms as $cm) {
foreach ($modules_completion_infos as $cpl_cm) {
if ( $cm->id == $cpl_cm->coursemoduleid && $cpl_cm->completionstate == 1 ) {
array_push($row->cpl_cms, $cpl_cm);
continue;
}
}
}
$row->cpl_cms = count($row->cpl_cms);
$row->cms = count($row->cms);
$val_asked = $DB->get_record_sql('select * FROM {competency_usercomp} WHERE competencyid = ? AND userid = ?', array($row->cpt_id, $id_student));
$row->val_asked = $val_asked->status;
array_push($cpts, $row);
}
return $cpts;
}
// retourne la liste des compétences pour un module avec les (grade et proficiency pour un étudiant)
public function get_competencies_by_userID_and_moduleID($id_student, $id_module)
{
global $DB;
try {
$competencies_id = $DB->get_records_sql('select ucc.competencyid FROM {competency_usercompcourse} as ucc
inner join {competency} as c on c.id = ucc.competencyid
inner join {competency_modulecomp} as mc on mc.competencyid = c.id
WHERE ucc.userid = ? AND mc.cmid =?', array($id_student, $id_module));
} catch (dml_exception $e) {
}
$competencies = array();
$i = 0;
foreach ($competencies_id as $row) {
$competency = new block_competency_iena_competency();
$competency->get_competency_by_id_AND_userID($row->competencyid, $id_student);
$competencies[$i] = $competency;
$i++;
}
return $competencies;
}
// retourne la liste des compétences pour un cours
public function get_competencies_by_courseID($id_course)
{
global $DB;
try {
$competencies_id = $DB->get_records_sql('select competencyid FROM {competency_coursecomp} WHERE courseid = ?', array($id_course));
} catch (dml_exception $e) {
}
$competencies = array();
$i = 0;
foreach ($competencies_id as $row) {
$competency = new block_competency_iena_competency();
$competency->get_competency_by_id($row->competencyid);
$competencies[$i] = $competency;
$i++;
}
return $competencies;
}
// retourne la liste des compétences pour un module
public function get_competencies_by_moduleID($id_module)
{
global $DB;
try {
$competencies_id = $DB->get_records_sql('select competencyid FROM {competency_modulecomp} WHERE cmid = ?', array($id_module));
} catch (dml_exception $e) {
}
$competencies = array();
$i = 0;
foreach ($competencies_id as $row) {
$competency = new block_competency_iena_competency();
$competency->get_competency_by_id_AND_moduleID($row->competencyid, $id_module);
$competencies[$i] = $competency;
$i++;
}
return $competencies;
}
public function get_data($userID, $competenceId, $courseID)
{
global $CFG;
$apiComp = new \tool_lp\output\user_competency_summary_in_course($userID, $competenceId, $courseID);
try {
$data = $apiComp->export_for_template(new renderer_base(new moodle_page(), 'autre'));
} catch (invalid_parameter_exception $e) {
}
return $data;
}
public function get_status_by_competenceid($idcompetence, $iduser)
{
global $DB;
try {
$status = $DB->get_record_sql('select * FROM {competency_usercomp}
WHERE competencyid = ? AND userid = ?', array($idcompetence, $iduser));
} catch (dml_exception $e) {
}
$value = "";
if ($status->status == 1) {
$value = "En attente de validation";
} else if ($status->status == 2) {
$value = "En cours de validation";
}
return $value;
}
}
<?php
/**
* Created by PhpStorm.
* User: softia
* Date: 28/03/18
* Time: 14:04
*/
require_once('block_competency_iena_competency.php');
require_once('block_competency_iena_module.php');
require_once('block_competency_iena_ressource.php');
require_once('block_competency_iena_section.php');
require_once('block_competency_iena_student.php');
class block_competency_iena_cron_competency
{
public function attribute_competency_iena(){
global $DB, $USER, $CFG;
echo 'Start attribute_competency_iena';
$time_start = microtime(true);
$courses = $DB->get_records('course');
foreach ($courses as $course){
if ($course->id == 1){
continue;
}
$course_ctx = context_course::instance($course->id);
$students = get_enrolled_users($course_ctx);
foreach ($students as $student){
$idplan = 0;
$have_dynamic_plan = $DB->get_record_sql('SELECT * FROM {competency_plan}
WHERE userid = ? AND name = ?', array($student->id,$CFG->parcour_iena));
if (!$have_dynamic_plan->id){
$idplan = $this->insert_competency_plan_iena($student);
} else {
$idplan = $have_dynamic_plan->id;
}
$competencies = new block_competency_iena_competency();
$tabcompe = $competencies->get_competencies_by_courseID($course->id);
foreach ($tabcompe as $competency) {
$is_competency_in_plan = $DB->get_record_sql('SELECT count(*) FROM {competency_plancomp}
WHERE planid = ? AND competencyid = ?', array($idplan, $competency->id));
if ($is_competency_in_plan->count == 0){
$this->insert_competency_plancomp_iena($idplan,$competency);
}
}
}
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo 'Durée : '.$time.' secondes';
}
private function insert_competency_plan_iena($student){
global $DB, $USER, $CFG;
$record = new stdClass();
$record->name = $CFG->parcour_iena;
$record->description = '<p>Plan créer dynamiquement</p>';
$record->descriptionformat = 1;
$record->userid = $student->id;
$record->status = 1;
$record->duedate = 0;
$date = new DateTime();
$record->timecreated = $date->getTimestamp();
$record->timemodified = $date->getTimestamp();
$record->usermodified = $USER->id;
$id_plan = $DB->insert_record('competency_plan',$record,true);
return $id_plan;
}
private function insert_competency_plancomp_iena($idplan, $competency){
global $DB, $USER;
$record = new stdClass();
$record->planid = $idplan;
$record->competencyid = $competency->id;
$record->sortorder = 0;
$date = new DateTime();
$record->timecreated = $date->getTimestamp();
$record->timemodified = $date->getTimestamp();
$record->usermodified = $USER->id;
$DB->insert_record('competency_plancomp',$record,false);
}
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: softia
* Date: 28/03/18
* Time: 10:35
*/
class block_competency_iena_cron_roles
{
public function attribute_roles_iena_complete(){
global $DB, $CFG;
$idrole = $DB->get_record_sql('SELECT id FROM {role} WHERE shortname = ?', array($CFG->role_iena));
$idrole = $idrole->id;
$DB->delete_records('role_assignments', array('roleid' => $idrole ));
$this->attribute_roles_iena();
}
public function attribute_roles_iena(){
global $DB, $USER, $CFG;
echo 'Start attribute_roles_iena';
$time_start = microtime(true);
$courses = $DB->get_records('course');
$idrole = $DB->get_record_sql('SELECT id FROM {role} WHERE shortname = ?', array($CFG->role_iena));
$idrole = $idrole->id;
foreach ($courses as $course){
if ($course->id == 1){
continue;
}
$course_ctx = context_course::instance($course->id);
$teachers = get_enrolled_users($course_ctx,'moodle/course:update');
foreach ($teachers as $teacher){
$students = get_enrolled_users($course_ctx);
foreach ($students as $student){
if ($student->id == $teacher->id){
continue;
}
$contextid = context_user::instance($student->id)->id;
$is_connecte = $DB->get_record_sql('SELECT count(*) FROM {role_assignments}
WHERE roleid = ? AND contextid = ? AND userid = ?', array($idrole,$contextid,$teacher->id));
if(!$is_connecte->count > 0){
$this->insert_role_assignements_iena($idrole,$contextid,$teacher);
}
}
}
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo 'Durée : '.$time.' secondes';
}
private function insert_role_assignements_iena($idrole,$contextid,$teacher){
global $DB, $USER;
$record = new stdClass();
$record->roleid = $idrole;
$record->contextid = $contextid;
$record->userid = $teacher->id;
$date = new DateTime();
$record->timemodified = $date->getTimestamp();
$record->modifierid = $USER->id;
$record->component = '';
$record->itemid = 0;
$record->sortorder = 0;
$DB->insert_record('role_assignments',$record,false);
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment