Skip to content

Commit

Permalink
Merge branch 'Release-4.3' into list_user_courses
Browse files Browse the repository at this point in the history
  • Loading branch information
DidierViret committed Jul 4, 2024
2 parents 5ede5b1 + 9e7e162 commit e835f90
Show file tree
Hide file tree
Showing 22 changed files with 221 additions and 82 deletions.
17 changes: 10 additions & 7 deletions orif/plafor/Controllers/Apprentice.php
Original file line number Diff line number Diff line change
Expand Up @@ -393,16 +393,18 @@ public function save_apprentice_link($id_apprentice = 0, $id_link = 0) {
return redirect()->to(base_url("plafor/apprentice/view_apprentice/{$id_apprentice}"));
}
}
// It seems that the MY_model dropdown method can't return a filtered result
// so here we get every users that are trainer, then we create a array
// with the matching constitution

// Gets data of trainers for the dropdown menu
// Gets data of trainers for the dropdown menu BUT ignore the trainers who are
// already linked to the selected apprentice
$trainersRaw = $this->user_model->getTrainers();
$trainers = array();
$linked_apprentices = array();

foreach ($trainersRaw as $trainer){
$trainers[$trainer['id']] = $trainer['username'];
$linked_apprentices = $this->trainer_apprentice_model->getApprenticeIdsFromTrainer($trainer['id']);
if (is_null($linked_apprentices) || !in_array($id_apprentice, $linked_apprentices)){
$trainers[$trainer['id']] = $trainer['username'];
}
}

// Data to send to the view
Expand Down Expand Up @@ -710,9 +712,10 @@ public function view_user_course($id_user_course = 0) {

// Preparing data for the view
$user_course_status = $this->user_course_model->getUserCourseStatus($user_course['fk_status']);
$course_plan = $this->user_course_model->getCoursePlan($user_course['fk_course_plan']);
$course_plan = $this->user_course_model->getCoursePlan($user_course['fk_course_plan'], true);
$trainers_apprentice = $this->trainer_apprentice_model->where('fk_apprentice',$apprentice['id'])->findAll();


// If url parameters contains filter operationalCompetenceId
if ($this->request->getGet('operationalCompetenceId')!=null){
$objectives = [];
Expand Down Expand Up @@ -821,4 +824,4 @@ public function delete_user($user_id = 0, $action = 0) {
}
return $this->display_view('\User\errors\403error');
}
}
}
13 changes: 5 additions & 8 deletions orif/plafor/Language/fr/plafor_lang.php
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@
'course_plan_delete' => 'Supprimer ce plan de formation',
'course_plan_delete_explanation' => 'Toutes les informations concernant ce plan de formation (domaines de compétences, compétences oppérationnelles et objectifs) seront supprimées.',
'course_plan_disable' => 'Désactiver ce plan de formation',
'course_plan_disable_explanation' => 'Toutes les informations concernant ce plan de formation (domaines de compétences, compétences oppérationnelles et objectifs) seront désactivées.',
'course_plan_disable_explanation' => 'Les apprentis listés garderont le lien avec ce plan de formation, mais il sera désactivé et ne pourra plus être attribué à de nouveaux apprentis.',
'number_abr' => 'No',
'competence_domain' => 'Domaine de compétence',
'competence_domain_delete' => 'Supprimer ce domaine de compétence',
Expand All @@ -237,12 +237,12 @@
'user_course_delete' => 'Supprimer cette formation liée',
'user_course_delete_explanation' => 'Toutes les informations concernant cette formation liée seront supprimées.',
'user_course_disable' => 'Désactiver cette formation liée',
'user_course_disable_explanation' => 'Toutes les informations concernant cette formation liée seront désactivées.',
'apprentice_link' => 'Apprenti et formateur liés',
'apprentice_link_delete' => 'Supprimer le lien entre cet apprenti et ce formateur',
'apprentice_link_delete_explanation' => 'Toutes les informations concernant le lien entre cet apprenti et ce formateur seront supprimées.',
'apprentice_link_disable' => 'Désactiver le lien entre cet apprenti et ce formateur',
'apprentice_link_disable_explanation' => 'Toutes les informations concernant le lien entre cet apprenti et ce formateur seront désactivées.',
'apprentice_trainer_already_linked' => 'Le formateur sélectionné est déjà lié à cet apprenti',
'acquisition_status' => 'Statut d\'acquisition',
'acquisition_status_delete' => 'Supprimer le statut d\'acquisition',
'acquisition_status_delete_explanation' => 'Toutes les informations concernant le statut d\'acquisition seront supprimées.',
Expand All @@ -255,15 +255,12 @@
'form_number_not_unique' => 'Le numéro du plan de formation existe déjà',
'with_status' => 'Avec le statut',

'course_plan_enable_explanation' => 'Toutes les informations concernant ce plan de formation (domaines de compétences, compétences oppérationnelles et objectifs) seront réactivées.',
'course_plan_enable_explanation' => 'Ce plan de formation sera réactivé et pourra de nouveau être attribué à des apprentis.',
'competence_domain_enable_explanation' => 'Toutes les informations concernant ce domaine de compétence (symbole, nom, compétences oppérationnelles et objectifs) seront réactivées.',
'operational_competence_enable_explanation' => 'Toutes les informations concernant cette compétence opérationnelle (nom, symbole, compétences, objectifs) seront réactivées.',
'objective_enable_explanation' => 'Toutes les informations concernant cet objectif (symbole, taxonomie, nom) seront réactivées.',
'user_course_enable_explanation' => 'Toutes les informations concernant cette formation liée seront réactivées.',
'apprentice_link_enable_explanation' => 'Toutes les informations concernant le lien entre cet apprenti et ce formateur seront réactivées.',
'acquisition_status_enable_explanation' => 'Toutes les informations concernant le statut d\'acquisition seront réactivées.',

'apprentices_already_assigned_to_course_plan' => 'Les apprentis suivants sont déjà associés au plan de formation',

'current' => 'En vigueur'
];
'apprentices_already_assigned_to_course_plan' => 'Les apprentis suivants sont associés à ce plan de formation'
];
9 changes: 7 additions & 2 deletions orif/plafor/Models/TrainerApprenticeModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,16 @@ class TrainerApprenticeModel extends \CodeIgniter\Model

public function __construct(ConnectionInterface &$db = null, ValidationInterface $validation = null)
{
$this->validationRules=array(
$this->validationRules = array(
'fk_trainer'=>[
'label' => 'plafor_lang.field_trainer_link',
'rules' => 'required|numeric|AreApprenticeAndTrainerNotLinked[{fk_apprentice}]'
],
'fk_apprentice'=>[
'label' => 'plafor_lang.field_trainer_link',
'rules' => 'required|numeric'
]);
]
);
parent::__construct($db, $validation);
}

Expand Down
9 changes: 6 additions & 3 deletions orif/plafor/Models/UserCourseModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,11 @@ public static function getUserCourseByUserAndCoursePlan($fk_user, $fk_course_pla
* @param $fkCoursePlanId
* @return array
*/
public static function getCoursePlan($fkCoursePlanId,$with_archived=0){
return CoursePlanModel::getInstance()->withDeleted($with_archived)->find($fkCoursePlanId);
public static function getCoursePlan($fkCoursePlanId,
$with_archived = false)
{
return CoursePlanModel::getInstance()->withDeleted($with_archived)
->find($fkCoursePlanId);
}

/**
Expand All @@ -138,4 +141,4 @@ public static function getUserCourseStatus($fkUserCourseStatusId){
public static function getAcquisitionStatus($userCourseId){
return AcquisitionStatusModel::getInstance()->where('fk_user_course',$userCourseId)->findAll();
}
}
}
21 changes: 21 additions & 0 deletions orif/plafor/Validation/PlaforRules.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Plafor\Models\CompetenceDomainModel;
use Plafor\Models\OperationalCompetenceModel;
use Plafor\Models\ObjectiveModel;
use Plafor\Models\TrainerApprenticeModel;

class PlaforRules
{
Expand All @@ -33,6 +34,26 @@ public function checkFormPlanNumber($number, $course_plan_id, $datas, &$error) {
return true;
}

/**
* Check if the given apprentice ID and the given trainer ID
* exist in the same row of the table "trainer_apprentice"
*
* @param int $fkApprenticeId : ID of the apprentice, required
* @param int $fkTrainerId : ID of the trainer, required
* @param null $datas : Is set to access error
* @param string &$error : Error message
* @return bool
*/
public function AreApprenticeAndTrainerNotLinked($fkTrainerId, $fkApprenticeId, $datas, &$error) : bool{
$array_where = array('fk_trainer' => $fkTrainerId, 'fk_apprentice' => $fkApprenticeId);

if (empty(TrainerApprenticeModel::getInstance()->getWhere($array_where)->getResultArray())){
return true;
}
$error = lang('plafor_lang.apprentice_trainer_already_linked');
return false;
}

/**
* Check if the symbol of the competence domain already exists in database
*
Expand Down
2 changes: 1 addition & 1 deletion orif/plafor/Views/acquisition_status/save.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
<!-- FORM BUTTONS -->
<div class="row">
<div class="col text-right">
<a class="btn btn-default" href="<?= base_url('plafor/apprentice/view_acquisition_status/'.$id); ?>"><?= lang('common_lang.btn_cancel'); ?></a>
<a class="btn btn-secondary" href="<?= base_url('plafor/apprentice/view_acquisition_status/'.$id); ?>"><?= lang('common_lang.btn_cancel'); ?></a>
<?= form_submit('save', lang('common_lang.btn_save'), ['class' => 'btn btn-primary']); ?>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion orif/plafor/Views/apprentice/delete.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<div class = "alert alert-info" ><?= lang('plafor_lang.apprentice_link_'.($apprentice['archive']==null?'disable_explanation':'enable_explanation'))?></div>
</div>
<div class="text-right">
<a href="<?= base_url('plafor/apprentice/view_apprentice/'.$apprentice['id']); ?>" class="btn btn-default">
<a href="<?= base_url('plafor/apprentice/view_apprentice/'.$apprentice['id']); ?>" class="btn btn-secondary">
<?= lang('common_lang.btn_cancel'); ?>
</a>
<a href="<?= base_url(uri_string().'/1'); ?>" class="btn btn-danger">
Expand Down
2 changes: 1 addition & 1 deletion orif/plafor/Views/apprentice/link.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
<!-- FORM BUTTONS -->
<div class="row">
<div class="col text-right">
<a class="btn btn-default" href="<?= base_url("plafor/apprentice/view_apprentice/{$apprentice['id']}"); ?>"><?= lang('common_lang.btn_cancel'); ?></a>
<a class="btn btn-secondary" href="<?= base_url("plafor/apprentice/view_apprentice/{$apprentice['id']}"); ?>"><?= lang('common_lang.btn_cancel'); ?></a>
<?= form_submit('save', lang('common_lang.btn_save'), ['class' => 'btn btn-primary']); ?>
</div>
</div>
Expand Down
34 changes: 24 additions & 10 deletions orif/plafor/Views/apprentice/list.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,18 +75,32 @@
</div>
</div>
<script type="text/babel" defer>
const invokeInitProgress = () => {
try {
initProgress("<?=base_url("plafor/apprentice/getcourseplanprogress")?>"
+ '/', "<?=lang('plafor_lang.details_progress')?>");
} catch (e) {
new Promise(resolve => setTimeout(resolve, 300))
.then(invokeInitProgress);
}
};

$(document).ready(function () {
setTimeout(()=>{initProgress("<?=base_url("plafor/apprentice/getcourseplanprogress")?>"+'/',"<?=lang('plafor_lang.details_progress')?>")},200);
$('#toggle_deleted').change(e => {
let checked = e.currentTarget.checked;
$.post('<?php echo base_url("plafor/apprentice/list_apprentice") . '/'?>' + ((checked == true ? '1' : '0')), {}, data => {
$('#apprenticeslist').empty();
$('#apprenticeslist')[0].innerHTML = $(data).find('#apprenticeslist')[0].innerHTML;
}).then(()=>{
initProgress("<?=base_url("plafor/apprentice/getcourseplanprogress")?>"+'/',"<?=lang('plafor_lang.details_progress')?>");
});
$(document).ready(function () {
invokeInitProgress();
$('#toggle_deleted').change(e => {
let checked = e.currentTarget.checked;
let url = '<?=base_url("plafor/apprentice/list_apprentice") . '/'?>'
+ (checked ? '1' : '0');
$.post(url , {}, data => {
$('#apprenticeslist').empty();
$('#apprenticeslist')[0].innerHTML = $(data)
.find('#apprenticeslist')[0].innerHTML;
}).then(()=>{
let url = "<?=base_url(
"plafor/apprentice/getcourseplanprogress")?>" + '/';
initProgress(url, "<?=lang('plafor_lang.details_progress')?>");
});
});
});
</script>

94 changes: 70 additions & 24 deletions orif/plafor/Views/apprentice/view.php
Original file line number Diff line number Diff line change
Expand Up @@ -109,28 +109,74 @@
</div>

<script type="text/babel">
console.log("jngowejgn");
$(document).ready(()=>{
$('#usercourseSelector').val(<?=isset($userCourseMax)?$userCourseMax['id']:null?>);
setTimeout(()=>{displayDetails(null,<?=json_encode($userCourseMax)?>,'integrated',"<?=base_url("plafor/apprentice/getcourseplanprogress")?>"+'/',"<?=base_url('plafor/apprentice/view_user_course')?>");},200);
$('#usercourseSelector').change((event)=>{
let userCourses=<?= json_encode($user_courses)?>;
let coursePlans=<?= json_encode($course_plans)?>;
let userCoursesStatus=<?= json_encode($user_course_status)?>;
document.querySelectorAll('.user-course-details-course-plan-name').forEach((node)=>{
node.innerHTML=`${coursePlans[userCourses[event.target.value].fk_course_plan].official_name}`;
});
document.querySelectorAll('.user-course-details-begin-date').forEach((node)=>{
node.innerHTML=`${userCourses[event.target.value].date_begin}`;
});
document.querySelectorAll('.user-course-details-end-date').forEach((node)=>{
node.innerHTML=`${userCourses[event.target.value].date_end}`;
});
document.querySelectorAll('.user-course-details-status').forEach((node)=>{
node.innerHTML=`${userCoursesStatus[userCourses[event.target.value].fk_status].name}`;
});
document.getElementById('detailsArray').setAttribute('course_plan_id',userCourses[event.target.value].fk_course_plan);
displayDetails(null,userCourses[event.target.value],'integrated',"<?=base_url("plafor/apprentice/getcourseplanprogress")?>"+'/',"<?=base_url('plafor/apprentice/view_user_course')?>");
});
const invokeDisplayDetails = () => {
try {
displayDetails(null, <?=json_encode($userCourseMax)?>, 'integrated',
"<?=base_url("plafor/apprentice/getcourseplanprogress")?>" + '/' ,
"<?=base_url('plafor/apprentice/view_user_course')?>"
);
} catch (e) {
new Promise(resolve => setTimeout(resolve, 300))
.then(invokeDisplayDetails);
}
};

const invokeHydrationName = (event, userCourses, coursePlans) => {
document.querySelectorAll('.user-course-details-course-plan-name')
.forEach((node) =>
{
let coursePlanId = userCourses[event.target.value].fk_course_plan;
let officialName = coursePlans[coursePlanId].official_name;
node.innerHTML = new String(official_name);
});
};

const invokeHydrationBeginDate = (event, userCourses) => {
document.querySelectorAll('.user-course-details-begin-date').forEach(
(node) =>
{
let dateBegin = userCourses[event.target.value].date_begin;
node.innerHTML = new String(dateBegin);
});
};

const invokeHydrationEndDate = (event, userCourses) => {
document.querySelectorAll('.user-course-details-end-date').forEach(
(node) =>
{
let dateEnd = userCourses[event.target.value].date_end;
node.innerHTML = new String(dateEnd);
});
};

const invokeHydrationStatus = (event, userCourses, userCoursesStatus) => {
document.querySelectorAll('.user-course-details-status').forEach(
(node) =>
{
let statusId = userCourses[event.target.value].fk_status;
let name = userCoursesStatus[statusId].name;
node.innerHTML = new String(name);
});
}

$(document).ready(()=>{
$('#usercourseSelector').val(<?=isset($userCourseMax)
? $userCourseMax['id'] : null?>);
$('#usercourseSelector').change((event) => {
let userCourses = <?=json_encode($user_courses)?>;
let coursePlans = <?=json_encode($course_plans)?>;
let userCoursesStatus = <?= json_encode($user_course_status)?>;
invokeHydrationName(event, userCourses, coursePlans);
invokeHydrationBeginDate(event, userCourses);
invokeHydrationEndDate(event, userCourses);
invokeHydrationStatus(event, userCourses, userCoursesStatus);
document.querySelector('#detailsArray').setAttribute('course_plan_id',
userCourses[event.target.value].fk_course_plan);
displayDetails(null, userCourses[event.target.value], 'integrated',
"<?=base_url("plafor/apprentice/getcourseplanprogress")?>"
+ '/' , "<?=base_url('plafor/apprentice/view_user_course')?>"
);
});
</script>
invokeDisplayDetails();
});
</script>
2 changes: 1 addition & 1 deletion orif/plafor/Views/comment/save.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
<!-- FORM BUTTONS -->
<div class="row">
<div class="col text-right">
<a class="btn btn-default" href="<?= base_url('plafor/apprentice/view_acquisition_status/'.$acquisition_status['id']); ?>"><?= lang('common_lang.btn_cancel'); ?></a>
<a class="btn btn-secondary" href="<?= base_url('plafor/apprentice/view_acquisition_status/'.$acquisition_status['id']); ?>"><?= lang('common_lang.btn_cancel'); ?></a>
<?= form_submit('save', lang('common_lang.btn_save'), ['class' => 'btn btn-primary']); ?>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion orif/plafor/Views/competence_domain/delete.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
<!-- BUTTONS -->
<div class="text-right">
<!-- CANCEL -->
<a href="<?= base_url('plafor/courseplan/view_course_plan/'.$competence_domain['fk_course_plan']) ?>" class="btn btn-default">
<a href="<?= base_url('plafor/courseplan/view_course_plan/'.$competence_domain['fk_course_plan']) ?>" class="btn btn-secondary">
<?= lang('common_lang.btn_cancel'); ?>
</a>
<!-- ENABLE / DISABLE -->
Expand Down
2 changes: 1 addition & 1 deletion orif/plafor/Views/competence_domain/save.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@
<!-- FORM BUTTONS -->
<div class="row">
<div class="col text-right">
<a class="btn btn-default" href="<?= base_url('plafor/courseplan/view_course_plan/'.($fk_course_plan_id==null?'':$fk_course_plan_id)) ?>"><?= lang('common_lang.btn_cancel'); ?></a>
<a class="btn btn-secondary" href="<?= base_url('plafor/courseplan/view_course_plan/'.($fk_course_plan_id==null?'':$fk_course_plan_id)) ?>"><?= lang('common_lang.btn_cancel'); ?></a>
<?= form_submit('save', lang('common_lang.btn_save'), ['class' => 'btn btn-primary']); ?>
</div>
</div>
Expand Down
Loading

0 comments on commit e835f90

Please sign in to comment.