[module.professor.filter] can now filter by 'categories' + [repo.category] implemented getProfessors() + [webpack.teacher.view] instant-filter for 'categories' -> will propably help to have categories to update category label when prof edited)
This commit is contained in:
parent
158b9d2cb0
commit
8a3d83503d
|
@ -10,6 +10,7 @@ namespace api\module\professor;
|
|||
|
||||
|
||||
use database\core\Repo;
|
||||
use database\repo\category;
|
||||
use database\repo\formation;
|
||||
use database\repo\ue;
|
||||
use error\core\Error;
|
||||
|
@ -20,6 +21,7 @@ class filterController{
|
|||
|
||||
/* (1) Get professor ID(s) matching a specific filter
|
||||
*
|
||||
* @categories<array> [OPT] Array of categories IDS
|
||||
* @formations<array> [OPT] Array of formation IDS
|
||||
* @ues<array> [OPT] Array of UE codes
|
||||
*
|
||||
|
@ -28,6 +30,7 @@ class filterController{
|
|||
---------------------------------------------------------*/
|
||||
public static function post($args){
|
||||
|
||||
$categories = [];
|
||||
$formations = [];
|
||||
$ues = [];
|
||||
extract($args);
|
||||
|
@ -39,11 +42,12 @@ class filterController{
|
|||
/* (1) If no filter -> return error
|
||||
---------------------------------------------------------*/
|
||||
/* (1) Pre-process conditions */
|
||||
$no_category = !is_array($categories) || count($categories) < 1;
|
||||
$no_ue = !is_array($ues) || count($ues) < 1;
|
||||
$no_formation = !is_array($formations) || count($formations) < 1;
|
||||
|
||||
/* (2) Exit if no filter */
|
||||
if( $no_ue && $no_formation )
|
||||
if( $no_category && $no_ue && $no_formation )
|
||||
return ['error' => new Error(Err::MissingParam, 'You must give at least 1 parameter')];
|
||||
|
||||
/* (3) Init. result array (only keys used for unicity) */
|
||||
|
@ -51,7 +55,35 @@ class filterController{
|
|||
|
||||
|
||||
|
||||
/* (2) Filter by formation
|
||||
/* (2) Filter by categories
|
||||
---------------------------------------------------------*/
|
||||
if( is_array($categories) ){
|
||||
|
||||
/** @var category $cat_repo */
|
||||
$cat_repo = Repo::getRepo('category');
|
||||
|
||||
/* (1) For each formation -> get request */
|
||||
foreach($categories as $cat_id){
|
||||
|
||||
// 1. Ignore if wrong format
|
||||
if( !is_numeric($cat_id) || !is_int($cat_id) )
|
||||
continue;
|
||||
|
||||
// 2. Get from repo
|
||||
$fetched_ids = $cat_repo->getProfessors( intval($cat_id) );
|
||||
|
||||
// 3. Add in unique set
|
||||
foreach($fetched_ids as $prof_id)
|
||||
$matches_uniq[ intval($prof_id['idProfesseur']) ] = null;
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* (3) Filter by formation
|
||||
---------------------------------------------------------*/
|
||||
if( is_array($formations) ){
|
||||
|
||||
|
@ -79,7 +111,7 @@ class filterController{
|
|||
|
||||
|
||||
|
||||
/* (3) Filter by ue
|
||||
/* (4) Filter by ue
|
||||
---------------------------------------------------------*/
|
||||
if( is_array($ues) ){
|
||||
|
||||
|
|
|
@ -41,14 +41,14 @@ class category extends Repo_i{
|
|||
LEFT JOIN UE U ON Cours.UE_code = U.code
|
||||
GROUP BY Prof.Categorie_idCategorie, U.disabled
|
||||
HAVING U.disabled = 0) VHCours ON VHCours.idCat = Cat.idCategorie
|
||||
|
||||
|
||||
LEFT JOIN (SELECT IFNULL(SUM(TD.volume),0) VHTd , Prof.Categorie_idCategorie idCat
|
||||
FROM Professeur Prof
|
||||
LEFT JOIN TD ON TD.Professeur_idProfesseur = Prof.idProfesseur
|
||||
LEFT JOIN UE U2 ON TD.UE_code = U2.code
|
||||
GROUP BY Prof.Categorie_idCategorie, U2.disabled
|
||||
HAVING U2.disabled = 0) VHTd ON VHTd.idCat = Cat.idCategorie
|
||||
|
||||
|
||||
LEFT JOIN (SELECT IFNULL(SUM(TP.volume),0) VHTp, Prof.Categorie_idCategorie idCat
|
||||
FROM Professeur Prof
|
||||
LEFT JOIN TP ON TP.Professeur_idProfesseur = Prof.idProfesseur
|
||||
|
@ -105,4 +105,37 @@ class category extends Repo_i{
|
|||
|
||||
}
|
||||
|
||||
|
||||
/* (5) Gets all professors who teaches a category by ids (array)
|
||||
*
|
||||
* @cat_id<int> The category id
|
||||
*
|
||||
* @return professors<array> The professors' UID matching the @cat_id category
|
||||
*
|
||||
---------------------------------------------------------*/
|
||||
public function getProfessors(int $cat_id) : array{
|
||||
|
||||
/* (1) Prepare statement */
|
||||
$st = $this->pdo->prepare("SELECT idProfesseur FROM Professeur WHERE Categorie_idCategorie = :cat_id;");
|
||||
|
||||
/* (2) Bind params and execute statement */
|
||||
if( is_bool($st) ) return [];
|
||||
$success = $st->execute([ ':cat_id' => $cat_id ]);
|
||||
|
||||
/* (3) Manage error */
|
||||
if( !$success )
|
||||
return [];
|
||||
|
||||
/* (4) Get data */
|
||||
$fetched = $st->fetchAll();
|
||||
|
||||
/* (5) Return [] on no result */
|
||||
if( $fetched === false )
|
||||
return [];
|
||||
|
||||
/* (6) Return data */
|
||||
return $fetched;
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -158,6 +158,7 @@
|
|||
"des": "Get matching professors (only ids) for a given filter",
|
||||
"per": [],
|
||||
"par": {
|
||||
"categories": { "des": "Optional category ID list", "typ": "array<id>", "opt": true },
|
||||
"formations": { "des": "Optional formation ID list", "typ": "array<id>", "opt": true },
|
||||
"ues": { "des": "Optional UE code list", "typ": "array<varchar(2,30,alphanumeric)>", "opt": true }
|
||||
},
|
||||
|
|
|
@ -106,7 +106,14 @@ gstore.add('filter_handler', function(){
|
|||
|
||||
/* (3) Get Filters
|
||||
---------------------------------------------------------*/
|
||||
/* (1) Define filter group show/hide */
|
||||
/* (1) Define global filter */
|
||||
gstore.add('filters', {
|
||||
categories: [{ visible: false, active: [] }],
|
||||
formations: [{ visible: false, active: [] }],
|
||||
ues: [{ visible: false, active: [] }]
|
||||
});
|
||||
|
||||
/* (2) Define filter group show/hide */
|
||||
gstore.add('show_fgroup', function(gname){
|
||||
|
||||
var opened = gstore.get.filters[gname] != null && gstore.get.filters[gname][0].visible;
|
||||
|
@ -124,7 +131,7 @@ gstore.add('show_fgroup', function(gname){
|
|||
|
||||
});
|
||||
|
||||
/* (2) Define filter item toggle */
|
||||
/* (3) Define filter item toggle */
|
||||
gstore.add('toggle_filter', function(gname, i){
|
||||
|
||||
// {1} If wrong @gname -> abort //
|
||||
|
@ -140,20 +147,11 @@ gstore.add('toggle_filter', function(gname, i){
|
|||
|
||||
// {4} Update active table //
|
||||
gstore.get.filters[gname][0].active.splice(0);
|
||||
console.log(gstore.get.filters[gname][0].active);
|
||||
|
||||
for( var f = 1 ; f < gstore.get.filters[gname].length ; f++ )
|
||||
if( gstore.get.filters[gname][f].active )
|
||||
gstore.get.filters[gname][0].active.push(f);
|
||||
|
||||
console.log(gstore.get.filters[gname][0].active);
|
||||
|
||||
});
|
||||
|
||||
/* (3) Define global filter */
|
||||
gstore.add('filters', {
|
||||
formations: [{ visible: false, active: [] }],
|
||||
ues: [{ visible: false, active: [] }]
|
||||
});
|
||||
|
||||
/* (4) Get Formations */
|
||||
|
@ -190,6 +188,23 @@ api.call('GET ue', {}, function(rs){
|
|||
|
||||
});
|
||||
|
||||
/* (6) Get professor categories */
|
||||
api.call('GET category', {}, function(rs){
|
||||
|
||||
// {1} If error -> abort //
|
||||
if( rs.error !== 0 ) return console.log('No category found, error: '+rs.error);
|
||||
console.log(rs);
|
||||
|
||||
// {2} Format category filters //
|
||||
for( var i = 0 ; i < rs.categories.length ; i++ )
|
||||
gstore.get.filters.categories.push({
|
||||
code: rs.categories[i].idCategorie,
|
||||
name: rs.categories[i].labelCategorie,
|
||||
active: false
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue