Paramétrage des fichiers CSV Moodle

This commit is contained in:
Emmanuel Viennet 2021-04-25 10:10:46 +02:00
parent 61d47e8fad
commit bfc3557814
3 changed files with 45 additions and 9 deletions

View File

@ -123,6 +123,7 @@ class GenTable:
pdf_col_widths=None, pdf_col_widths=None,
xml_outer_tag="table", xml_outer_tag="table",
xml_row_tag="row", xml_row_tag="row",
text_with_titles=False, # CSV with header line
text_fields_separator="\t", text_fields_separator="\t",
preferences=None, preferences=None,
): ):
@ -173,6 +174,7 @@ class GenTable:
self.xml_row_tag = xml_row_tag self.xml_row_tag = xml_row_tag
# TEXT parameters # TEXT parameters
self.text_fields_separator = text_fields_separator self.text_fields_separator = text_fields_separator
self.text_with_titles = text_with_titles
# #
if preferences: if preferences:
self.preferences = preferences self.preferences = preferences
@ -265,8 +267,7 @@ class GenTable:
def get_titles_list(self): def get_titles_list(self):
"list of titles" "list of titles"
l = [] return [self.titles.get(cid, "") for cid in self.columns_ids]
return l + [self.titles.get(cid, "") for cid in self.columns_ids]
def gen(self, format="html", columns_ids=None): def gen(self, format="html", columns_ids=None):
"""Build representation of the table in the specified format. """Build representation of the table in the specified format.
@ -479,10 +480,14 @@ class GenTable:
def text(self): def text(self):
"raw text representation of the table" "raw text representation of the table"
if self.text_with_titles:
headline = [self.get_titles_list()]
else:
headline = []
return "\n".join( return "\n".join(
[ [
self.text_fields_separator.join([x for x in line]) self.text_fields_separator.join([x for x in line])
for line in self.get_data_list() for line in headline + self.get_data_list()
] ]
) )

View File

@ -578,6 +578,7 @@ def groups_table(
else: else:
filename = "etudiants_%s" % groups_infos.groups_filename filename = "etudiants_%s" % groups_infos.groups_filename
prefs = context.get_preferences(groups_infos.formsemestre_id)
tab = GenTable( tab = GenTable(
rows=groups_infos.members, rows=groups_infos.members,
columns_ids=columns_ids, columns_ids=columns_ids,
@ -591,8 +592,9 @@ def groups_table(
html_class="table_leftalign table_listegroupe", html_class="table_leftalign table_listegroupe",
xml_outer_tag="group_list", xml_outer_tag="group_list",
xml_row_tag="etud", xml_row_tag="etud",
text_fields_separator=",", # pour csvmoodle text_fields_separator=prefs["moodle_csv_separator"],
preferences=context.get_preferences(groups_infos.formsemestre_id), text_with_titles=prefs["moodle_csv_with_headerline"],
preferences=prefs,
) )
# #
if format == "html": if format == "html":
@ -672,7 +674,10 @@ def groups_table(
% (tab.base_url,), % (tab.base_url,),
'<li><a class="stdlink" href="%s&amp;format=moodlecsv">Fichier CSV pour Moodle (groupe sélectionné)</a></li>' '<li><a class="stdlink" href="%s&amp;format=moodlecsv">Fichier CSV pour Moodle (groupe sélectionné)</a></li>'
% (tab.base_url,), % (tab.base_url,),
'<li><a class="stdlink" href="export_groups_as_moodle_csv?formsemestre_id=%s">Fichier CSV pour Moodle (tous les groupes)</a></li>' """<li>
<a class="stdlink" href="export_groups_as_moodle_csv?formsemestre_id=%s">Fichier CSV pour Moodle (tous les groupes)</a>
<em>(voir le paramétrage pour modifier le format des fichiers Moodle exportés)</em>
</li>"""
% groups_infos.formsemestre_id, % groups_infos.formsemestre_id,
] ]
) )
@ -959,6 +964,7 @@ def export_groups_as_moodle_csv(context, formsemestre_id=None, REQUEST=None):
sem = sco_formsemestre.get_formsemestre(context, formsemestre_id) sem = sco_formsemestre.get_formsemestre(context, formsemestre_id)
moodle_sem_name = sem["session_id"] moodle_sem_name = sem["session_id"]
columns_ids = ("email", "semestre_groupe")
T = [] T = []
for partition_id in partitions_etud_groups: for partition_id in partitions_etud_groups:
partition = sco_groups.get_partition(context, partition_id) partition = sco_groups.get_partition(context, partition_id)
@ -973,11 +979,14 @@ def export_groups_as_moodle_csv(context, formsemestre_id=None, REQUEST=None):
elts.append(group_name) elts.append(group_name)
T.append({"email": etud["email"], "semestre_groupe": "-".join(elts)}) T.append({"email": etud["email"], "semestre_groupe": "-".join(elts)})
# Make table # Make table
prefs = context.get_preferences(formsemestre_id)
tab = GenTable( tab = GenTable(
rows=T, rows=T,
columns_ids=("email", "semestre_groupe"), columns_ids=("email", "semestre_groupe"),
filename=moodle_sem_name + "-moodle", filename=moodle_sem_name + "-moodle",
text_fields_separator=",", titles={x: x for x in columns_ids},
preferences=context.get_preferences(formsemestre_id), text_fields_separator=prefs["moodle_csv_separator"],
text_with_titles=prefs["moodle_csv_with_headerline"],
preferences=prefs,
) )
return tab.make_page(context, format="csv", REQUEST=REQUEST) return tab.make_page(context, format="csv", REQUEST=REQUEST)

View File

@ -175,7 +175,7 @@ PREF_CATEGORIES = (
), ),
( (
"feuilles", "feuilles",
{"title": "Mise en forme des feuilles (Absences, Trombinoscopes, ...)"}, {"title": "Mise en forme des feuilles (Absences, Trombinoscopes, Moodle, ...)"},
), ),
("pe", {"title": "Avis de poursuites d'études"}), ("pe", {"title": "Avis de poursuites d'études"}),
("edt", {"title": "Connexion avec le logiciel d'emplois du temps"}), ("edt", {"title": "Connexion avec le logiciel d'emplois du temps"}),
@ -1644,6 +1644,28 @@ Année scolaire: %(anneescolaire)s
"only_global": True, "only_global": True,
}, },
), ),
# Exports pour Moodle:
(
"moodle_csv_with_headerline",
{
"initvalue": 0,
"title": "Inclure une ligne d'en-têtes dans les fichiers CSV pour Moodle",
"input_type": "boolcheckbox",
"labels": ["non", "oui"],
"only_global": True,
"category": "feuilles",
},
),
(
"moodle_csv_separator",
{
"initvalue": ",",
"title": "séparateur de colonnes dans les fichiers CSV pour Moodle",
"size": 2,
"only_global": True,
"category": "feuilles",
},
),
# Experimental: avis poursuite d'études # Experimental: avis poursuite d'études
( (
"NomResponsablePE", "NomResponsablePE",