[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\core\Repo;
|
||||||
|
use database\repo\category;
|
||||||
use database\repo\formation;
|
use database\repo\formation;
|
||||||
use database\repo\ue;
|
use database\repo\ue;
|
||||||
use error\core\Error;
|
use error\core\Error;
|
||||||
|
@ -20,6 +21,7 @@ class filterController{
|
||||||
|
|
||||||
/* (1) Get professor ID(s) matching a specific filter
|
/* (1) Get professor ID(s) matching a specific filter
|
||||||
*
|
*
|
||||||
|
* @categories<array> [OPT] Array of categories IDS
|
||||||
* @formations<array> [OPT] Array of formation IDS
|
* @formations<array> [OPT] Array of formation IDS
|
||||||
* @ues<array> [OPT] Array of UE codes
|
* @ues<array> [OPT] Array of UE codes
|
||||||
*
|
*
|
||||||
|
@ -28,6 +30,7 @@ class filterController{
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
public static function post($args){
|
public static function post($args){
|
||||||
|
|
||||||
|
$categories = [];
|
||||||
$formations = [];
|
$formations = [];
|
||||||
$ues = [];
|
$ues = [];
|
||||||
extract($args);
|
extract($args);
|
||||||
|
@ -39,11 +42,12 @@ class filterController{
|
||||||
/* (1) If no filter -> return error
|
/* (1) If no filter -> return error
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
/* (1) Pre-process conditions */
|
/* (1) Pre-process conditions */
|
||||||
|
$no_category = !is_array($categories) || count($categories) < 1;
|
||||||
$no_ue = !is_array($ues) || count($ues) < 1;
|
$no_ue = !is_array($ues) || count($ues) < 1;
|
||||||
$no_formation = !is_array($formations) || count($formations) < 1;
|
$no_formation = !is_array($formations) || count($formations) < 1;
|
||||||
|
|
||||||
/* (2) Exit if no filter */
|
/* (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')];
|
return ['error' => new Error(Err::MissingParam, 'You must give at least 1 parameter')];
|
||||||
|
|
||||||
/* (3) Init. result array (only keys used for unicity) */
|
/* (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) ){
|
if( is_array($formations) ){
|
||||||
|
|
||||||
|
@ -79,7 +111,7 @@ class filterController{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* (3) Filter by ue
|
/* (4) Filter by ue
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
if( is_array($ues) ){
|
if( is_array($ues) ){
|
||||||
|
|
||||||
|
|
|
@ -41,14 +41,14 @@ class category extends Repo_i{
|
||||||
LEFT JOIN UE U ON Cours.UE_code = U.code
|
LEFT JOIN UE U ON Cours.UE_code = U.code
|
||||||
GROUP BY Prof.Categorie_idCategorie, U.disabled
|
GROUP BY Prof.Categorie_idCategorie, U.disabled
|
||||||
HAVING U.disabled = 0) VHCours ON VHCours.idCat = Cat.idCategorie
|
HAVING U.disabled = 0) VHCours ON VHCours.idCat = Cat.idCategorie
|
||||||
|
|
||||||
LEFT JOIN (SELECT IFNULL(SUM(TD.volume),0) VHTd , Prof.Categorie_idCategorie idCat
|
LEFT JOIN (SELECT IFNULL(SUM(TD.volume),0) VHTd , Prof.Categorie_idCategorie idCat
|
||||||
FROM Professeur Prof
|
FROM Professeur Prof
|
||||||
LEFT JOIN TD ON TD.Professeur_idProfesseur = Prof.idProfesseur
|
LEFT JOIN TD ON TD.Professeur_idProfesseur = Prof.idProfesseur
|
||||||
LEFT JOIN UE U2 ON TD.UE_code = U2.code
|
LEFT JOIN UE U2 ON TD.UE_code = U2.code
|
||||||
GROUP BY Prof.Categorie_idCategorie, U2.disabled
|
GROUP BY Prof.Categorie_idCategorie, U2.disabled
|
||||||
HAVING U2.disabled = 0) VHTd ON VHTd.idCat = Cat.idCategorie
|
HAVING U2.disabled = 0) VHTd ON VHTd.idCat = Cat.idCategorie
|
||||||
|
|
||||||
LEFT JOIN (SELECT IFNULL(SUM(TP.volume),0) VHTp, Prof.Categorie_idCategorie idCat
|
LEFT JOIN (SELECT IFNULL(SUM(TP.volume),0) VHTp, Prof.Categorie_idCategorie idCat
|
||||||
FROM Professeur Prof
|
FROM Professeur Prof
|
||||||
LEFT JOIN TP ON TP.Professeur_idProfesseur = Prof.idProfesseur
|
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",
|
"des": "Get matching professors (only ids) for a given filter",
|
||||||
"per": [],
|
"per": [],
|
||||||
"par": {
|
"par": {
|
||||||
|
"categories": { "des": "Optional category ID list", "typ": "array<id>", "opt": true },
|
||||||
"formations": { "des": "Optional formation 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 }
|
"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
|
/* (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){
|
gstore.add('show_fgroup', function(gname){
|
||||||
|
|
||||||
var opened = gstore.get.filters[gname] != null && gstore.get.filters[gname][0].visible;
|
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){
|
gstore.add('toggle_filter', function(gname, i){
|
||||||
|
|
||||||
// {1} If wrong @gname -> abort //
|
// {1} If wrong @gname -> abort //
|
||||||
|
@ -140,20 +147,11 @@ gstore.add('toggle_filter', function(gname, i){
|
||||||
|
|
||||||
// {4} Update active table //
|
// {4} Update active table //
|
||||||
gstore.get.filters[gname][0].active.splice(0);
|
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++ )
|
for( var f = 1 ; f < gstore.get.filters[gname].length ; f++ )
|
||||||
if( gstore.get.filters[gname][f].active )
|
if( gstore.get.filters[gname][f].active )
|
||||||
gstore.get.filters[gname][0].active.push(f);
|
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 */
|
/* (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