Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
iena-course-format
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
iena
iena-course-format
Commits
fe975f94
Commit
fe975f94
authored
3 months ago
by
DELARUELLE Myriam
Browse files
Options
Downloads
Patches
Plain Diff
fin optimisation js
parent
d829ae2d
Loading
Loading
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
amd/build/suivi.js
+302
-260
302 additions, 260 deletions
amd/build/suivi.js
templates/suivi.mustache
+1
-1
1 addition, 1 deletion
templates/suivi.mustache
with
303 additions
and
261 deletions
amd/build/suivi.js
+
302
−
260
View file @
fe975f94
...
@@ -44,13 +44,16 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -44,13 +44,16 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
triggerAction
(
e
);
triggerAction
(
e
);
});
});
$
(
"
#section-select
"
).
on
(
'
change
'
,
function
(){
$
(
"
#section-select
"
).
on
(
'
change
'
,
function
(){
changeSection
();
//changeSection();
wrapperChangeSection
();
});
});
$
(
"
#filter-select
"
).
on
(
'
change
'
,
function
(){
$
(
"
#completion-select
"
).
on
(
'
change
'
,
function
(){
changeCompletion
();
//showHideStudents();
wrapperChangeCompletion
();
});
});
$
(
"
#symbol-select
"
).
on
(
'
change
'
,
function
(){
$
(
"
#symbol-select
"
).
on
(
'
change
'
,
function
(){
changeCompletion
();
//showHideStudents();
wrapperChangeCompletion
();
});
});
$
(
'
.dropdown-menu-form
'
).
on
(
'
click
'
,
function
(
e
)
{
$
(
'
.dropdown-menu-form
'
).
on
(
'
click
'
,
function
(
e
)
{
e
.
stopPropagation
();
e
.
stopPropagation
();
...
@@ -64,6 +67,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -64,6 +67,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
//Evenement pour le selectall : créé une seule fois au chargement de la page
//Evenement pour le selectall : créé une seule fois au chargement de la page
registerSelectAllActivitiesFilter
:
function
(){
registerSelectAllActivitiesFilter
:
function
(){
$
(
'
.selectallactivities
'
).
click
(
function
()
{
$
(
'
.selectallactivities
'
).
click
(
function
()
{
if
(
$
(
"
.selectallactivities
"
).
is
(
'
:checked
'
))
{
if
(
$
(
"
.selectallactivities
"
).
is
(
'
:checked
'
))
{
checkAllActivitiesFilter
();
checkAllActivitiesFilter
();
showHideActivities
();
showHideActivities
();
...
@@ -76,17 +80,18 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -76,17 +80,18 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
$
(
"
.select-text
"
).
html
(
'
Select
'
);
$
(
"
.select-text
"
).
html
(
'
Select
'
);
showHideActivities
();
showHideActivities
();
}
}
reloadTable
();
});
});
//initActivityFilter();
//initActivityFilter();
},
},
registerSelectAllGroupsFilter
:
function
(){
registerSelectAllGroupsFilter
:
function
(){
if
(
data
.
countstudents
<
1000
){
if
(
data
.
countstudents
<
1000
){
console
.
log
(
"
on rentre ici
"
);
checkAllGroupsFilter
();
checkAllGroupsFilter
();
}
}
$
(
'
.selectallgroups
'
).
click
(
function
()
{
$
(
'
.selectallgroups
'
).
click
(
function
(
e
)
{
e
.
stopPropagation
();
if
(
$
(
"
.selectallgroups
"
).
is
(
'
:checked
'
))
{
if
(
$
(
"
.selectallgroups
"
).
is
(
'
:checked
'
))
{
checkAllGroupsFilter
();
checkAllGroupsFilter
();
}
else
{
}
else
{
...
@@ -94,12 +99,11 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -94,12 +99,11 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
updateGroupsFilterLabel
();
updateGroupsFilterLabel
();
}
}
changeGroup
();
//
changeGroup();
});
});
},
},
initTable
:
function
(){
initTable
:
function
(){
data
=
fetchProgress
();
data
=
fetchProgress
();
...
@@ -111,25 +115,25 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -111,25 +115,25 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
}
}
function
fetchProgress
(){
function
fetchProgress
(){
console
.
log
(
"
non plutôt on fetch le progress
"
)
completeUrl
=
getCompleteUrl
();
completeUrl
=
getCompleteUrl
();
$
.
ajax
({
url
:
completeUrl
,
$
.
ajax
({
url
:
completeUrl
,
data
:
{
action
:
'
fetchprogress
'
},
data
:
{
action
:
'
fetchprogress
'
},
type
:
'
post
'
,
type
:
'
post
'
,
success
:
function
(
request
)
{
success
:
function
(
request
)
{
data
=
calcPercentage
(
JSON
.
parse
(
request
));
data
=
calcPercentage
(
JSON
.
parse
(
request
));
if
(
data
.
students
.
length
<
1000
){
if
(
data
.
students
.
length
<
1000
){
//localStorage.setItem("groups",request);
//localStorage.setItem("groups",request);
}
}
initActivityFilter
(
false
);
initActivityFilter
(
false
);
displayTotalActivitiesFilter
(
false
);
updateActivitiesFilterLabel
(
false
);
initGroupFilter
(
false
);
updateGroupsFilterLabel
(
false
);
updateGroupsFilterLabel
(
false
);
showHideActivities
(
false
);
showHideActivities
(
false
);
initGroupFilter
(
false
);
registerGroupFilter
();
changeSection
(
false
);
changeSection
(
false
);
reloadTable
(
data
);
reloadTable
(
data
);
return
data
;
return
data
;
...
@@ -137,7 +141,6 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -137,7 +141,6 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
});
});
}
}
function
initHeaders
(){
function
initHeaders
(){
var
nb_counts
=
$
(
"
.th-rotate
"
).
length
;
var
nb_counts
=
$
(
"
.th-rotate
"
).
length
;
$
(
"
.th-rotate
"
).
each
(
function
(
index
,
element
){
$
(
"
.th-rotate
"
).
each
(
function
(
index
,
element
){
...
@@ -154,7 +157,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -154,7 +157,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
courseid
=
urlParams
.
get
(
'
courseid
'
);
courseid
=
urlParams
.
get
(
'
courseid
'
);
groupid
=
$
(
"
#group-select
"
).
val
();
groupid
=
$
(
"
#group-select
"
).
val
();
sectionid
=
$
(
"
#section-select
"
).
val
();
sectionid
=
$
(
"
#section-select
"
).
val
();
filter
=
$
(
"
#symbol-select
"
).
val
()
+
$
(
"
#
filter
-select
"
).
val
();
filter
=
$
(
"
#symbol-select
"
).
val
()
+
$
(
"
#
completion
-select
"
).
val
();
completeUrl
=
'
suivi_unit.php?courseid=
'
+
courseid
;
completeUrl
=
'
suivi_unit.php?courseid=
'
+
courseid
;
if
(
sectionid
){
if
(
sectionid
){
completeUrl
+=
'
§ionid=
'
+
sectionid
;
completeUrl
+=
'
§ionid=
'
+
sectionid
;
...
@@ -170,7 +173,6 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -170,7 +173,6 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
//À changer pour intégrer une fonction plus générique
//À changer pour intégrer une fonction plus générique
function
changeGroup
(){
function
changeGroup
(){
console
.
log
(
"
on va changer le groupe ?
"
);
var
completeUrl
=
getCompleteUrl
();
var
completeUrl
=
getCompleteUrl
();
var
groupscheckboxes
=
$
(
'
input[name="groupoptions[]"]:checked
'
);
var
groupscheckboxes
=
$
(
'
input[name="groupoptions[]"]:checked
'
);
var
groupsid
=
[];
var
groupsid
=
[];
...
@@ -185,16 +187,16 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -185,16 +187,16 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
data
:
{
action
:
'
fetchgroups
'
,
groupsid
:
groupsid
},
data
:
{
action
:
'
fetchgroups
'
,
groupsid
:
groupsid
},
type
:
'
post
'
,
type
:
'
post
'
,
success
:
function
(
request
)
{
success
:
function
(
request
)
{
data
=
calcPercentage
(
JSON
.
parse
(
request
));
//initGroupFilter();
//
changeSection
();
showHideActivities
();
data
=
calcPercentage
(
JSON
.
parse
(
request
));
showHideStudents
();
if
(
data
.
students
.
length
<
1000
){
if
(
data
.
students
.
length
<
1000
){
localStorage
.
setItem
(
"
groups
"
,
request
);
localStorage
.
setItem
(
"
groups
"
,
request
);
}
}
reloadTable
(
data
);
updateGroupsFilterLabel
(
false
);
updateGroupsFilterLabel
(
false
);
}
}
});
});
...
@@ -202,9 +204,9 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -202,9 +204,9 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
//Affiche ou non (dynamiquement, pas de requête) les étudiants selon le filtre d'achèvement
//Affiche ou non (dynamiquement, pas de requête) les étudiants selon le filtre d'achèvement
function
changeCompletion
(
changefilter
=
true
){
function
showHideStudents
(
changefilter
=
true
){
symbol
=
$
(
"
#symbol-select
"
).
val
();
symbol
=
$
(
"
#symbol-select
"
).
val
();
filter
=
$
(
"
#filter
-select
"
).
val
();
completion
=
$
(
"
#completion
-select
"
).
val
();
data
.
count_results
=
0
;
data
.
count_results
=
0
;
for
(
var
i
=
0
;
i
<
data
.
students
.
length
;
i
++
){
for
(
var
i
=
0
;
i
<
data
.
students
.
length
;
i
++
){
if
(
data
.
display_groups
==
1
){
if
(
data
.
display_groups
==
1
){
...
@@ -213,7 +215,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -213,7 +215,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
if
(
symbol
==
"
<
"
){
if
(
symbol
==
"
<
"
){
if
(
data
.
students
[
i
].
percentage
<
filter
){
if
(
data
.
students
[
i
].
percentage
<
completion
){
data
.
count_results
++
;
data
.
count_results
++
;
data
.
students
[
i
].
visible
=
true
;
data
.
students
[
i
].
visible
=
true
;
}
}
...
@@ -222,7 +224,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -222,7 +224,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
}
}
}
}
else
if
(
symbol
==
"
>
"
){
else
if
(
symbol
==
"
>
"
){
if
(
data
.
students
[
i
].
percentage
>
filter
){
if
(
data
.
students
[
i
].
percentage
>
completion
){
data
.
count_results
++
;
data
.
count_results
++
;
data
.
students
[
i
].
visible
=
true
;
data
.
students
[
i
].
visible
=
true
;
}
}
...
@@ -231,7 +233,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -231,7 +233,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
}
}
}
}
else
if
(
symbol
==
"
≤
"
){
else
if
(
symbol
==
"
≤
"
){
if
(
data
.
students
[
i
].
percentage
<=
filter
){
if
(
data
.
students
[
i
].
percentage
<=
completion
){
data
.
count_results
++
;
data
.
count_results
++
;
data
.
students
[
i
].
visible
=
true
;
data
.
students
[
i
].
visible
=
true
;
}
}
...
@@ -240,7 +242,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -240,7 +242,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
}
}
}
}
else
if
(
symbol
==
"
≥
"
){
else
if
(
symbol
==
"
≥
"
){
if
(
data
.
students
[
i
].
percentage
>=
filter
){
if
(
data
.
students
[
i
].
percentage
>=
completion
){
data
.
count_results
++
;
data
.
count_results
++
;
data
.
students
[
i
].
visible
=
true
;
data
.
students
[
i
].
visible
=
true
;
}
}
...
@@ -249,7 +251,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -249,7 +251,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
}
}
}
}
else
{
else
{
if
(
data
.
students
[
i
].
percentage
==
filter
){
if
(
data
.
students
[
i
].
percentage
==
completion
){
data
.
count_results
++
;
data
.
count_results
++
;
data
.
students
[
i
].
visible
=
true
;
data
.
students
[
i
].
visible
=
true
;
}
}
...
@@ -259,15 +261,37 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -259,15 +261,37 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
}
}
}
}
if
(
changefilter
==
true
){
/*
if(changefilter==true){
reloadTable(data);
reloadTable(data);
}
}
*/
}
}
//on va devoir calculer le pourcentage, check la completion et reload la table à chaque fois
//on va devoir calculer le pourcentage, check la completion et reload la table à chaque fois
function
wrapperChangeSection
(
changefilter
=
true
){
changeSection
();
reloadTable
();
}
function
wrapperChangeActivities
(
changefilter
=
true
){
showHideActivities
();
data
=
calcPercentage
();
reloadTable
();
}
function
wrapperChangeCompletion
(
changefilter
=
true
){
showHideStudents
();
reloadTable
();
}
function
changeSection
(
changefilter
=
true
){
function
changeSection
(
changefilter
=
true
){
loadMessage
(
"
loading
"
);
loadMessage
(
"
loading
"
);
...
@@ -290,39 +314,28 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -290,39 +314,28 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
}
}
}
}
}
}
//Si pas de résultats on recharge juste la table
if
(
data
.
count_results
==
0
&&
changefilter
==
true
){
if
(
data
.
count_results
==
0
&&
changefilter
==
true
){
reloadTable
(
data
);
//
reloadTable(data);
}
}
else
{
else
{
data
=
calcPercentage
(
data
);
data
=
calcPercentage
(
data
);
changeCompletion
(
changefilter
);
showHideStudents
(
changefilter
);
}
}
changeActivitiesDropdown
(
data
.
modules
);
changeActivitiesDropdown
();
}
//Charge les activités dynamiquement en fonction de la section choisie
//Vérifier si ça passe ou s'il faut attendre la promise
function
changeActivitiesDropdown
(
modules
){
//html='<li><label class="checkbox"><input type="checkbox" class="selectall" value="all" checked>Toutes les activités</label></li><li class="divider"></li>';
html
=
""
;
for
(
var
i
=
0
;
i
<
modules
.
length
;
i
++
){
if
(
modules
[
i
].
visible
){
html
+=
'
<li><label class="checkbox"><input type="checkbox" name="options[]" checked value=
'
+
modules
[
i
].
id
+
'
class="option justone-activity">
'
+
modules
[
i
].
displayname
+
'
</label></li>
'
;
}
}
$
(
"
.iena-dynamic-activities
"
).
html
(
html
);
registerActivityFilter
();
registerActivityFilter
();
checkAllActivitiesFilter
();
checkAllActivitiesFilter
();
}
}
//Affiche/cache dynamiquement les activités sélectionnées
//Affiche/cache dynamiquement les activités sélectionnées DANS LE TABLEAU
function
showHideActivities
(
changefilter
=
true
){
function
showHideActivities
(
changefilter
=
true
){
var
arrayActivitiesID
=
[];
var
arrayActivitiesID
=
[];
var
activitiesToStore
=
[];
var
activitiesToStore
=
[];
var
activities
=
$
(
'
input[name="options[]"]
'
);
var
activities
=
$
(
'
input[name="options[]"]
'
);
console
.
log
(
data
.
modules
);
for
(
var
i
=
0
;
i
<
activities
.
length
;
i
++
){
for
(
var
i
=
0
;
i
<
activities
.
length
;
i
++
){
prog
=
data
.
modules
.
find
(
element
=>
element
.
id
===
activities
[
i
].
value
);
prog
=
data
.
modules
.
find
(
element
=>
element
.
id
===
activities
[
i
].
value
);
...
@@ -344,31 +357,20 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -344,31 +357,20 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
localStorage
.
setItem
(
"
activities
"
,
JSON
.
stringify
(
activitiesToStore
));
localStorage
.
setItem
(
"
activities
"
,
JSON
.
stringify
(
activitiesToStore
));
}
}
if
(
changefilter
==
true
){
/*
if(changefilter==true){
reloadTable(data);
reloadTable(data);
}
}
*/
}
}
//Charge message de chargement ou d'erreur
function
loadMessage
(
type
){
if
(
type
==
"
loading
"
){
var
message
=
str
.
get_string
(
'
loadingResults
'
,
'
format_iena
'
);
}
else
if
(
type
==
"
error
"
){
var
message
=
str
.
get_string
(
'
errorLoadingResults
'
,
'
format_iena
'
);
}
$
.
when
(
message
).
done
(
function
(
localizedEditString
)
{
$
(
"
#partial-table
"
).
html
(
"
<div class='alert alert-primary' role='alert'>
"
+
localizedEditString
+
"
</div>
"
);
});
}
//Reload table with new parameters JUST FOR DISPLAYING THE TABLE.
//Reload table with new parameters JUST FOR DISPLAYING THE TABLE.
function
reloadTable
(
params
){
function
reloadTable
(
params
){
console
.
log
(
"
on est dans le reloadTable
"
)
if
(
!
params
){
params
=
data
;
}
url
=
getCompleteUrl
();
url
=
getCompleteUrl
();
templates
.
render
(
'
format_iena/suivi-table
'
,
params
)
templates
.
render
(
'
format_iena/suivi-table
'
,
params
)
.
done
(
function
(
html
,
js
){
.
done
(
function
(
html
,
js
){
...
@@ -385,6 +387,241 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -385,6 +387,241 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
//Pour chaque module non caché, on va regarder pour chaque étudiant
//Calcule le pourcentage pour les modules VISIBLES ?
function
calcPercentage
(
request
){
if
(
!
request
){
request
=
data
;
}
for
(
var
i
=
0
;
i
<
request
.
students
.
length
;
i
++
)
{
request
.
students
[
i
].
percentage
=
0
;
var
done
=
0
;
var
nb_modules
=
0
;
for
(
var
j
=
0
;
j
<
request
.
students
[
i
].
progress
.
length
;
j
++
){
if
(
request
.
modules
.
find
(
module
=>
module
.
id
===
request
.
students
[
i
].
progress
[
j
].
idmodule
).
visible
){
nb_modules
++
;
if
(
request
.
students
[
i
].
progress
[
j
].
completionstate
==
1
||
request
.
students
[
i
].
progress
[
j
].
completionstate
==
2
){
done
++
;
}
}
}
request
.
students
[
i
].
percentage
=
Math
.
floor
(
100
*
done
/
nb_modules
);
}
return
request
;
}
/*Etapes
Premier chargement :
- On initialise les filtres (on les register)
- On a chargé les données en même temps (avec ces filtres par défaut)
- On affiche/cache les modules selon la section
- On calcule le pourcentage selon les modules VISIBLES
- On affiche/cache les étudiants selon le % d'achèvement
*/
//On va recharger dynamiquement les options donc on doit recréer les événements à chaque fois qu'on change de section
function
registerActivityFilter
(){
$
(
"
input[type='checkbox'].justone-activity
"
).
on
(
'
click
'
,
function
(
e
){
e
.
stopPropagation
();
var
a
=
$
(
"
input[type='checkbox'].justone-activity
"
);
if
(
a
.
length
==
a
.
filter
(
"
:checked
"
).
length
){
$
(
'
.selectallactivities
'
).
prop
(
'
checked
'
,
true
);
$
(
"
.select-text
"
).
html
(
'
Deselect
'
);
}
else
{
$
(
'
.selectallactivities
'
).
prop
(
'
checked
'
,
false
);
$
(
"
.select-text
"
).
html
(
'
Select
'
);
}
updateActivitiesFilterLabel
();
wrapperChangeActivities
();
});
}
//Stocke le filtre des activités en localStorage pour ne pas avoir 50 id dans l'url
//On fait bien attention à rétablir cocher le selectall si toutes les activités sont bien cochées
function
initActivityFilter
(){
if
(
localStorage
.
activities
){
var
checkedActivities
=
JSON
.
parse
(
localStorage
.
activities
);
var
activities
=
$
(
"
input[type='checkbox'].justone-activity
"
);
if
(
$
(
"
input[type='checkbox'].justone-activity[value=
"
+
checkedActivities
[
0
]
+
"
]
"
).
length
>
0
){
if
(
activities
.
length
===
checkedActivities
.
length
){
$
(
"
.selectallactivities
"
).
prop
(
"
checked
"
,
true
);
$
(
"
input[type='checkbox'].justone-activity
"
).
prop
(
"
checked
"
,
true
);
}
else
{
$
(
"
.selectallactivities
"
).
prop
(
"
checked
"
,
false
);
for
(
var
i
=
0
;
i
<
activities
.
length
;
i
++
){
if
(
checkedActivities
.
includes
(
activities
[
i
].
value
)){
activities
[
i
].
checked
=
true
;
}
else
{
activities
[
i
].
checked
=
false
;
}
}
}
}
}
}
//Coche toutes les activités quand on change de section
function
checkAllActivitiesFilter
(){
$
(
'
.selectallactivities
'
).
prop
(
'
checked
'
,
true
);
$
(
'
.option
'
).
prop
(
'
checked
'
,
true
);
updateActivitiesFilterLabel
();
}
//Update activities filter label
function
updateActivitiesFilterLabel
(){
var
total
=
$
(
'
input[name="options[]"]:checked
'
).
length
;
if
(
total
==
$
(
'
input[name="options[]"]
'
).
length
){
var
message
=
str
.
get_string
(
'
allActivities
'
,
'
format_iena
'
);
$
.
when
(
message
).
done
(
function
(
localizedEditString
)
{
$
(
"
.dropdown-text
"
).
html
(
localizedEditString
);
});
}
else
{
var
message
=
str
.
get_string
(
'
selectedActivities
'
,
'
format_iena
'
);
$
.
when
(
message
).
done
(
function
(
localizedEditString
)
{
$
(
"
.dropdown-text
"
).
html
(
total
+
'
'
+
localizedEditString
);
});
}
}
//Charge les activités dynamiquement en fonction de la section choisie
function
changeActivitiesDropdown
(){
html
=
""
;
for
(
var
i
=
0
;
i
<
data
.
modules
.
length
;
i
++
){
if
(
data
.
modules
[
i
].
visible
){
html
+=
'
<li><label class="checkbox"><input type="checkbox" name="options[]" checked value=
'
+
data
.
modules
[
i
].
id
+
'
class="option justone-activity">
'
+
data
.
modules
[
i
].
displayname
+
'
</label></li>
'
;
}
}
$
(
"
.iena-dynamic-activities
"
).
html
(
html
);
}
function
initGroupFilter
(){
$
(
"
input[type='checkbox'].justone-group
"
).
on
(
'
click
'
,
function
(
e
){
e
.
stopPropagation
();
var
a
=
$
(
"
input[type='checkbox'].justone-group
"
);
if
(
a
.
length
==
a
.
filter
(
"
:checked
"
).
length
){
$
(
'
.selectallgroups
'
).
prop
(
'
checked
'
,
true
);
}
else
{
$
(
'
.selectallgroups
'
).
prop
(
'
checked
'
,
false
);
}
updateGroupsFilterLabel
();
});
if
(
localStorage
.
groups
){
var
checkedGroups
=
JSON
.
parse
(
localStorage
.
groups
);
var
groups
=
$
(
"
input[type='checkbox'].justone-group
"
);
if
(
$
(
"
input[type='checkbox'].justone-group[value=
"
+
checkedGroups
[
0
]
+
"
]
"
).
length
>
0
){
if
(
groups
.
length
===
checkedGroups
.
length
){
$
(
"
.selectallgroups
"
).
prop
(
"
checked
"
,
true
);
$
(
"
input[type='checkbox'].justone-group
"
).
prop
(
"
checked
"
,
true
);
}
else
{
$
(
"
.selectallgroups
"
).
prop
(
"
checked
"
,
false
);
for
(
var
i
=
0
;
i
<
groups
.
length
;
i
++
){
if
(
checkedGroups
.
includes
(
groups
[
i
].
value
)){
groups
[
i
].
checked
=
true
;
}
else
{
groups
[
i
].
checked
=
false
;
}
}
}
}
}
else
{
if
(
data
.
countstudents
<
1000
){
checkAllGroupsFilter
();
}
}
}
//Coche tous les groupes quand le select all est coché
function
checkAllGroupsFilter
(){
$
(
'
.selectallgroups
'
).
prop
(
'
checked
'
,
true
);
$
(
'
.group-option
'
).
prop
(
'
checked
'
,
true
);
//changeGroup();
$
(
"
.select-text
"
).
html
(
'
Deselect
'
);
}
//Update activities filter label
function
updateGroupsFilterLabel
(){
var
total
=
$
(
'
input[name="groupoptions[]"]:checked
'
).
length
;
if
(
total
==
$
(
'
input[name="groupoptions[]"]
'
).
length
){
var
message
=
str
.
get_string
(
'
allGroups
'
,
'
format_iena
'
);
$
.
when
(
message
).
done
(
function
(
localizedEditString
)
{
$
(
"
.dropdown-text-group
"
).
html
(
localizedEditString
);
});
}
else
{
var
message
=
str
.
get_string
(
'
selectedGroups
'
,
'
format_iena
'
);
$
.
when
(
message
).
done
(
function
(
localizedEditString
)
{
$
(
"
.dropdown-text-group
"
).
html
(
total
+
'
'
+
localizedEditString
);
});
}
}
//Charge message de chargement ou d'erreur
function
loadMessage
(
type
){
if
(
type
==
"
loading
"
){
var
message
=
str
.
get_string
(
'
loadingResults
'
,
'
format_iena
'
);
}
else
if
(
type
==
"
error
"
){
var
message
=
str
.
get_string
(
'
errorLoadingResults
'
,
'
format_iena
'
);
}
$
.
when
(
message
).
done
(
function
(
localizedEditString
)
{
$
(
"
#partial-table
"
).
html
(
"
<div class='alert alert-primary' role='alert'>
"
+
localizedEditString
+
"
</div>
"
);
});
}
//****************************** Fonctions liées à l'envoi de messages aux étudiants et au téléchargement du csv **************************//
//Récupère les étudiants sélectionnées par les checkbox
//Récupère les étudiants sélectionnées par les checkbox
function
getSelectedStudents
(){
function
getSelectedStudents
(){
var
selectedChecks
=
$
(
"
#table-body input:checked
"
);
var
selectedChecks
=
$
(
"
#table-body input:checked
"
);
...
@@ -555,199 +792,4 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
...
@@ -555,199 +792,4 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
}
}
//Pour chaque module non caché, on va regarder pour chaque étudiant
//Calcule le pourcentage pour les modules VISIBLES ?
function
calcPercentage
(
data
){
for
(
var
i
=
0
;
i
<
data
.
students
.
length
;
i
++
)
{
data
.
students
[
i
].
percentage
=
0
;
var
done
=
0
;
var
nb_modules
=
0
;
for
(
var
j
=
0
;
j
<
data
.
students
[
i
].
progress
.
length
;
j
++
){
if
(
data
.
modules
.
find
(
module
=>
module
.
id
===
data
.
students
[
i
].
progress
[
j
].
idmodule
).
visible
){
nb_modules
++
;
if
(
data
.
students
[
i
].
progress
[
j
].
completionstate
==
1
||
data
.
students
[
i
].
progress
[
j
].
completionstate
==
2
){
done
++
;
}
}
}
data
.
students
[
i
].
percentage
=
Math
.
floor
(
100
*
done
/
nb_modules
);
}
return
data
;
}
//Update activities filter label
function
updateActivitiesFilterLabel
(){
var
total
=
$
(
'
input[name="options[]"]:checked
'
).
length
;
if
(
total
==
$
(
'
input[name="options[]"]
'
).
length
){
var
message
=
str
.
get_string
(
'
allActivities
'
,
'
format_iena
'
);
$
.
when
(
message
).
done
(
function
(
localizedEditString
)
{
$
(
"
.dropdown-text
"
).
html
(
localizedEditString
);
});
}
else
{
var
message
=
str
.
get_string
(
'
selectedActivities
'
,
'
format_iena
'
);
$
.
when
(
message
).
done
(
function
(
localizedEditString
)
{
$
(
"
.dropdown-text
"
).
html
(
total
+
'
'
+
localizedEditString
);
});
}
}
//Coche toutes les activités quand on change de section
function
checkAllActivitiesFilter
(){
$
(
'
.selectallactivities
'
).
prop
(
'
checked
'
,
true
);
$
(
'
.option
'
).
prop
(
'
checked
'
,
true
);
updateActivitiesFilterLabel
();
$
(
"
.select-text
"
).
html
(
'
Deselect
'
);
}
//Coche tous les groupes quand le select all est coché
function
checkAllGroupsFilter
(){
$
(
'
.selectallgroups
'
).
prop
(
'
checked
'
,
true
);
$
(
'
.group-option
'
).
prop
(
'
checked
'
,
true
);
//changeGroup();
$
(
"
.select-text
"
).
html
(
'
Deselect
'
);
}
//Update activities filter label
function
updateGroupsFilterLabel
(){
var
total
=
$
(
'
input[name="groupoptions[]"]:checked
'
).
length
;
if
(
total
==
$
(
'
input[name="groupoptions[]"]
'
).
length
){
var
message
=
str
.
get_string
(
'
allGroups
'
,
'
format_iena
'
);
$
.
when
(
message
).
done
(
function
(
localizedEditString
)
{
$
(
"
.dropdown-text-group
"
).
html
(
localizedEditString
);
});
}
else
{
var
message
=
str
.
get_string
(
'
selectedGroups
'
,
'
format_iena
'
);
$
.
when
(
message
).
done
(
function
(
localizedEditString
)
{
$
(
"
.dropdown-text-group
"
).
html
(
total
+
'
'
+
localizedEditString
);
});
}
}
/*Etapes
Premier chargement :
- On initialise les filtres (on les register)
- On a chargé les données en même temps (avec ces filtres par défaut)
- On affiche/cache les modules selon la section
- On calcule le pourcentage selon les modules VISIBLES
- On affiche/cache les étudiants selon le % d'achèvement
*/
//On va recharger dynamiquement les options donc on doit recréer les événements à chaque fois qu'on change de section
function
registerActivityFilter
(){
$
(
"
input[type='checkbox'].justone-activity
"
).
on
(
'
click
'
,
function
(
e
){
e
.
stopPropagation
();
var
a
=
$
(
"
input[type='checkbox'].justone-activity
"
);
if
(
a
.
length
==
a
.
filter
(
"
:checked
"
).
length
){
$
(
'
.selectallactivities
'
).
prop
(
'
checked
'
,
true
);
$
(
"
.select-text
"
).
html
(
'
Deselect
'
);
}
else
{
$
(
'
.selectallactivities
'
).
prop
(
'
checked
'
,
false
);
$
(
"
.select-text
"
).
html
(
'
Select
'
);
}
updateActivitiesFilterLabel
();
showHideActivities
();
});
}
function
registerGroupFilter
(){
$
(
"
input[type='checkbox'].justone-group
"
).
on
(
'
click
'
,
function
(
e
){
e
.
stopPropagation
();
var
a
=
$
(
"
input[type='checkbox'].justone-group
"
);
if
(
a
.
length
==
a
.
filter
(
"
:checked
"
).
length
){
$
(
'
.selectallgroups
'
).
prop
(
'
checked
'
,
true
);
}
else
{
$
(
'
.selectallgroups
'
).
prop
(
'
checked
'
,
false
);
}
//Pourquoi ?
//displayTotalActivitiesFilter();
});
}
//Stocke le filtre des activités en localStorage pour ne pas avoir 50 id dans l'url
//On fait bien attention à rétablir cocher le selectall si toutes les activités sont bien cochées
function
initActivityFilter
(){
if
(
localStorage
.
activities
){
var
checkedActivities
=
JSON
.
parse
(
localStorage
.
activities
);
var
activities
=
$
(
"
input[type='checkbox'].justone-activity
"
);
if
(
$
(
"
input[type='checkbox'].justone-activity[value=
"
+
checkedActivities
[
0
]
+
"
]
"
).
length
>
0
){
if
(
activities
.
length
===
checkedActivities
.
length
){
$
(
"
.selectallactivities
"
).
prop
(
"
checked
"
,
true
);
$
(
"
input[type='checkbox'].justone-activity
"
).
prop
(
"
checked
"
,
true
);
}
else
{
$
(
"
.selectallactivities
"
).
prop
(
"
checked
"
,
false
);
for
(
var
i
=
0
;
i
<
activities
.
length
;
i
++
){
if
(
checkedActivities
.
includes
(
activities
[
i
].
value
)){
activities
[
i
].
checked
=
true
;
}
else
{
activities
[
i
].
checked
=
false
;
}
}
}
}
}
}
function
initGroupFilter
(){
if
(
localStorage
.
groups
){
var
checkedGroups
=
JSON
.
parse
(
localStorage
.
groups
);
var
groups
=
$
(
"
input[type='checkbox'].justone-group
"
);
if
(
$
(
"
input[type='checkbox'].justone-group[value=
"
+
checkedGroups
[
0
]
+
"
]
"
).
length
>
0
){
if
(
groups
.
length
===
checkedGroups
.
length
){
$
(
"
.selectallgroups
"
).
prop
(
"
checked
"
,
true
);
$
(
"
input[type='checkbox'].justone-group
"
).
prop
(
"
checked
"
,
true
);
}
else
{
$
(
"
.selectallgroups
"
).
prop
(
"
checked
"
,
false
);
for
(
var
i
=
0
;
i
<
groups
.
length
;
i
++
){
if
(
checkedGroups
.
includes
(
groups
[
i
].
value
)){
groups
[
i
].
checked
=
true
;
}
else
{
groups
[
i
].
checked
=
false
;
}
}
}
}
}
else
{
if
(
data
.
countstudents
<
1000
){
checkAllGroupsFilter
();
}
}
//Pourquoi ?
// displayTotalActivitiesFilter();
}
});
});
This diff is collapsed.
Click to expand it.
templates/suivi.mustache
+
1
−
1
View file @
fe975f94
...
@@ -126,7 +126,7 @@
...
@@ -126,7 +126,7 @@
{{/
symbols
}}
{{/
symbols
}}
</select>
</select>
<select
class=
"custom-select mr-sm-2"
id=
"
filter
-select"
name=
"filter"
>
<select
class=
"custom-select mr-sm-2"
id=
"
completion
-select"
name=
"filter"
>
{{#
filters
}}
{{#
filters
}}
<option
{{
selected
}}
value=
'
{{
value
}}
'
>
{{
name
}}
</option>
<option
{{
selected
}}
value=
'
{{
value
}}
'
>
{{
name
}}
</option>
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment