Page MenuHomec4science

functions.sh
No OneTemporary

File Metadata

Created
Wed, May 8, 23:43

functions.sh

#!/bin/bash
function get_targets() {
# TARGETS
TARGETS="check:do_check|\
blank:do_blank|\
test:do_test|\
project:do_project|\
clean:do_clean|\
sample:do_sample|\
pdf:do_pdf|\
all:do_check,do_blank,do_sample,do_pdf,do_list|\
webdav_catalog:do_webdav_catalog|\
webdav_sample:do_webdav_sample|\
webdav_list:do_webdav_list|\
webdav_pdf:do_webdav_pdf|\
webdav_all:do_webdav_catalog,do_webdav_sample,do_webdav_list,do_webdav_pdf|\
list:do_list|\
help:do_help|\
scans:do_scans|\
analyse:do_analyse|\
associate:do_associate|\
export:do_export|\
annotate:do_annotate|\
mailing:do_mailing"
echo $TARGETS | tr '|' '\n' | grep "^$1:" | cut -d ':' -f 2- | tr ',' ' '
}
function parse_arguments() {
if [ $# -lt 1 ]; then set 'test'; fi
while [ $# -gt 0 ]; do
case "$1" in
'--only'|'-o')
shift
echo teacher_list:$1 | tr ',' ' '
shift
;;
'--params'|'-p')
shift
echo parameters:$1 | tr ',' ' '
shift
;;
*)
echo target:$(get_targets $1)
shift
;;
esac
done
}
function get_param_value() {
local IFS=' '
for p in $(echo $PARAMETERS | tr ',' ' '); do
echo $p | grep "$1=" | cut -d '=' -f 2
done
}
function do_actions() {
ACTIONS=$(parse_arguments $@ | grep "^target:" | cut -d ':' -f 2-)
TEACHERS=$(parse_arguments $@ | grep "^teacher_list:" | cut -d ':' -f 2-)
PARAMETERS=$(parse_arguments $@ | grep "^parameters:" | cut -d ':' -f 2-)
local rc=0
if [ -z "$ACTIONS" ]; then echo "Nothing to do!"; exit 0; fi
for ACTION in $(echo "$ACTIONS");
do
tell_if_verbose "Processing : ($ACTION)"
process_action $ACTION
rc=$((rc+$?))
done
if [ $rc -gt 0 ]; then
echo "RC=$rc"
fi
exit $rc
}
function tell_if_verbose() {
if [ "$(get_param_value 'mode')" = 'verbose' ]; then echo "$@"; fi
}
function do_help() {
echo $(basename $0)" [--only teacher,teacher] [--params ask=no,lang=xx] action [action ...]
Options:
--only, -o: only process the following teachers (comma separated list)
--params, -p: set/force some parameters (e.g. ask=no,mode=verbose,lang=fr)
Actions:
help: print this help
test: do nothing - usefull for testing with --only ...
# Exam preparation
project: build AMC project
clean: clean output dirs, projects, etc
sample: build samples PDF (sample)
blank: build blank exam PDF (blank and catalog)
pdf: build final PDF (exam and correction)
list: build exam students list
all: build blank, sample, final and list PDF files
# Exam publication
webdav_catalog: publish catalog PDF files to \$DIR_WEBDAV_CATALOGS
webdav_sample: publish sample PDF files to \$DIR_WEBDAV_SAMPLES
[...]"
#echo $TARGETS | tr '|' '\n' | sed "s/:/ => /g" | sed "s/,/, /g"
}
function process_action() {
case "$1" in
"do_clean") do_clean;;
"do_project") do_project;;
"do_sample") do_sample;;
"do_pdf") do_pdf;;
"do_help") do_help;;
"do_scans") do_scans;;
"do_analyse") do_analyse;;
"do_associate") do_associate;;
"do_annotate") do_annotate;;
"do_export") do_export;;
"do_mailing") do_mailing;;
"do_test") do_test;;
"do_blank") do_blank;;
"do_check") do_check;;
"do_list") do_list;;
"do_webdav_catalog") do_webdav_catalog;;
"do_webdav_sample") do_webdav_sample;;
"do_webdav_list") do_webdav_list;;
"do_webdav_pdf") do_webdav_pdf;;
*)
echo "Unimplemented action: '$1'"
return 1
;;
esac
return $?
}
function do_list() {
local rc=0
local lang line id sciper name section IFS i tab FILE list_file
for teacher in $(get_teachers); do
tell_if_verbose " - $teacher"
if [ ! -d $DIR_TEACHERS/$teacher ]; then
echo "ERROR: [$teacher] teacher not found."
((rc++))
else
lang=$(get_lang $teacher)
FILE=$DIR_TEACHERS/$teacher/$FILE_PROF
IFS=$'\n'
cp $DIR_LIST/$lang/list.tex $DIR_EXAMS/$teacher/$FILE_LIST_MAIN
list_file=$DIR_EXAMS/$teacher/$FILE_LIST_MAIN
check_file_exists $list_file
for replace in $(cat $FILE); do
pattern="#$(echo $replace | cut -d ':' -f 1)#"
string=$(echo $replace | cut -d ':' -f 2-)
sed -i "s/$pattern/$string/g" $list_file
done
rm -f $DIR_EXAMS/$teacher/$FILE_LIST_ROWS
i=0
tab=1
prev_section=''
for line in $(tail -n +2 $DIR_EXAMS/$teacher/$FILE_STUDENTS); do
((i++))
if [ $tab -eq 1 ]; then
cat $DIR_LIST/$lang/$FILE_LIST_TSTART >> $DIR_EXAMS/$teacher/$FILE_LIST_ROWS
tab=0
fi
# id field
id=$(echo $line | cut -d ',' -f 1)
id=$(printf "%3s" $id)
id=$(echo $id | sed "s/ /~/g")
name=$(echo $line | cut -d ',' -f 2)
if [ $(echo -n $name | wc -c) -gt $LIST_MAX_CHAR ]; then name=$(echo $name | cut -c 1-$LIST_MAX_CHAR)"…"; fi
sciper=$(echo $line | cut -d ',' -f 3)
section=$(echo $line | cut -d ',' -f 4)
comment=$(echo $line | cut -d ',' -f 10)
if [ "$comment" == "n/a" ]; then comment=''; fi
if [ "$section" == "XXX" ]; then section=''; name="SCIPER:"; fi
name=$(printf "%-${LIST_MAX_CHAR}s" $name)
name=$(echo $name | sed "s/ /~/g")
if [ "$section" != "$prev_section" ]; then
if [ $i -ne 1 ]; then
cat $DIR_LIST/$lang/$FILE_LIST_TEND >> $DIR_EXAMS/$teacher/$FILE_LIST_ROWS
cat $DIR_LIST/$lang/$FILE_LIST_TSTART >> $DIR_EXAMS/$teacher/$FILE_LIST_ROWS
i=1
fi
prev_section=$section
fi
echo "\texttt{$id} & \texttt{$sciper} & \texttt{$section} & \texttt{$name} & & & {\tiny \texttt{$comment}} "'\\ \hline' >> $DIR_EXAMS/$teacher/$FILE_LIST_ROWS
if [ $(($i % $LIST_ROWS_PER_PAGE)) -eq 0 ]; then
cat $DIR_LIST/$lang/$FILE_LIST_TEND >> $DIR_EXAMS/$teacher/$FILE_LIST_ROWS
tab=1
fi
done
if [ $(($i % $LIST_ROWS_PER_PAGE)) -ne 0 ]; then
cat $DIR_LIST/$lang/$FILE_LIST_TEND >> $DIR_EXAMS/$teacher/$FILE_LIST_ROWS
fi
pdf_list=$(echo $FILE_LIST_MAIN | cut -d '.' -f 1)'.pdf'
cd $DIR_EXAMS/$teacher/
# Run pdflatex twice to get total number of pages
pdflatex ./$FILE_LIST_MAIN 2>&1 > /dev/null
pdflatex ./$FILE_LIST_MAIN 2>&1 > /dev/null
cd - > /dev/null
mkdir -p $DIR_LIST_OUT
cp $DIR_EXAMS/$teacher/$pdf_list $DIR_LIST_OUT/List-$teacher.pdf
cp $DIR_TEACHERS/$teacher/$FILE_STUDENTS $DIR_LIST_OUT/List-$teacher.csv
fi
done
return $rc
}
function check_project_exists() {
local teacher=$1
if [ ! -d $DIR_EXAMS/$teacher ]; then
echo "No project found for teacher: $1"
echo "Did you run \"project\" action ?"
exit 1
fi
}
function get_teachers() {
if [ -n "$TEACHERS" ]; then echo "$TEACHERS"; return; fi
find $DIR_TEACHERS -maxdepth 1 -mindepth 1 -type d -exec basename {} \; | grep -v ".ignore$" | sort
}
function do_test() {
local rc=0
for teacher in $(get_teachers); do
tell_if_verbose " - $teacher"
if [ ! -d $DIR_TEACHERS/$teacher ]; then
echo "ERROR: [$teacher] teacher not found."
((rc++))
else
echo " Nothing done. just testing."
fi
done
return $rc
}
function check_file_exists() {
if [ ! -r $1 ]; then
if [ $# -lt 2 ]; then echo "ERROR: File not found: $1"; fi
if [ -n "$2" ]; then return $2; else exit 1; fi
fi
return 0
}
function get_lang() {
local forced_lang=$(get_param_value 'lang')
if [ -n "$forced_lang" ]; then
echo $forced_lang;
else
local FILE=$DIR_TEACHERS/$1/$FILE_LANG
check_file_exists $FILE
cat $FILE
fi
}
function import_tex_files() {
local teacher=$1
local lang=$(get_lang $teacher)
cp $DIR_DATA/base/* $DIR_EXAMS/$teacher/
cp $DIR_DATA/$lang/* $DIR_EXAMS/$teacher/
}
function override_tex_files() {
local teacher=$1
find $DIR_TEACHERS/$teacher/ -name '*.tex' -exec cp {} $DIR_EXAMS/$teacher/ \;
}
function import_student_file() {
local teacher=$1
local lang=$(get_lang $teacher)
local FILE=$DIR_TEACHERS/$teacher/$FILE_STUDENTS
check_file_exists $FILE
cp $FILE $DIR_EXAMS/$teacher/$FILE_STUDENTS
# Add extra students
local nb=0
local IFS=$'\n'
local id=$(tail -n 1 $DIR_EXAMS/$teacher/$FILE_STUDENTS | cut -d ',' -f 1)
local sample=$(head -n 1 $DIR_CSV/extra.csv)
while [ $nb -lt $EXTRA_COPIES ]; do
((nb++))
((id++))
echo $sample | sed "s/#NB#/$nb/g" | sed "s/#ID#/$id/g" | sed "s/#SCIPER#/FAKE-$nb/g" | sed "s/#EMAIL#/$DEFAULT_EMAIL/g" | sed "s/#SEMESTER#/$SEMESTER/g" >> $DIR_EXAMS/$teacher/$FILE_STUDENTS
done
}
function get_expected_page_per_exam() {
local teacher=$1
local FILE=$DIR_TEACHERS/$teacher/$FILE_PROF
cat $FILE | grep '^TOTAL_PAGES:' | cut -d ':' -f 2
}
function customize_tex_files() {
local teacher=$1 replace
local lang=$(get_lang $teacher)
local FILE=$DIR_TEACHERS/$teacher/$FILE_PROF
check_file_exists $FILE
# professor.tex
local prof_file=$DIR_EXAMS/$teacher/$FILE_PROF_TEX IFS=$'\n'
check_file_exists $prof_file
for replace in $(cat $FILE); do
pattern="#$(echo $replace | cut -d ':' -f 1)#"
string=$(echo $replace | cut -d ':' -f 2-)
sed -i "s/$pattern/$string/g" $prof_file
done
# exam.tex
lang=$(echo $lang | tr '[a-z]' '[A-Z]')
sed -i "s/#LANG#/$lang/g" $DIR_EXAMS/$teacher/$FILE_EXAM_BASENAME.tex
# Add specific.tex file
if [ -r $DIR_EXAMS/$teacher/specific.tex ]; then
sed -i 's?% #SPECIFIC#?\\input{./specific.tex}?g' $DIR_EXAMS/$teacher/$FILE_EXAM_BASENAME.tex
fi
}
function build_sections() {
local question_file question section_file section teacher=$1
local lang=$(get_lang $teacher) IFS=$'\n' FILE=$DIR_TEACHERS/$teacher/$FILE_SECTIONS
mkdir -p $DIR_EXAMS/$teacher
check_file_exists $FILE
local section_num=0
rm -f $DIR_EXAMS/$teacher/sections.tex $DIR_EXAMS/$teacher/random-sections.tex
for section in $(cat $FILE); do
((section_num++))
section_file=$DIR_EXAMS/$teacher/section_${section_num}.tex
rm -f $section_file
for question in $(echo $section | tr ',' '\n'); do
#echo "Adding $question to section $section_file...";
question_file=$DIR_QUESTIONS/$lang/$question
check_file_exists $question_file
echo "%% From $lang/$question =======================================" >> $section_file
echo '\element{section'$section_num'}{' >> $section_file
cat $question_file >> $section_file
echo '}' >> $section_file
done
#echo "Updating 'sections.tex' file"
echo "\input{./section_${section_num}.tex}" >> $DIR_EXAMS/$teacher/sections.tex
#echo "Updating 'random-sections.tex' file"
echo "\input{./header_${section_num}.tex}
\melangegroupe{section${section_num}}
\restituegroupe{section${section_num}}
" >> $DIR_EXAMS/$teacher/random-sections.tex
done
}
function do_sample() {
local teacher
local lang
local runs
local ok
local rc=0
for teacher in $(get_teachers); do
ok=0
tell_if_verbose " - $teacher"
check_project_exists $teacher
if [ -r $DIR_EXAMS/$teacher/INVALID ]; then ((rc++)); break; fi
runs=$PDFLATEX_RUNS
mv $DIR_EXAMS/$teacher/$FILE_STUDENTS $DIR_EXAMS/$teacher/$FILE_STUDENTS.sav
cp $DIR_CSV/$FILE_SAMPLE_CSV $DIR_EXAMS/$teacher/$FILE_STUDENTS
cd $DIR_EXAMS/$teacher
rm -f EXAM-sujet.pdf EXAM-corrige.pdf EXAM-catalog.pdf catalog.pdf
while [ $runs -gt 0 ]; do
auto-multiple-choice prepare --mode s --with pdflatex --filter latex --prefix ./ ./$FILE_EXAM_BASENAME.tex --out-sujet EXAM-sujet.pdf --out-corrige EXAM-corrige.pdf 2>&1 > /dev/null | grep -v 'deprecated'
rm -f $DIR_EXAMS/$teacher/catalog.pdf
check_file_exists EXAM-sujet.pdf 1
if [ $? -ne 0 ]; then runs=0; continue; else ok=1; fi;
((runs--))
done
cd - 2>&1 > /dev/null
mv $DIR_EXAMS/$teacher/$FILE_STUDENTS.sav $DIR_EXAMS/$teacher/$FILE_STUDENTS
if [ $ok -eq 1 ]; then
mkdir -p $DIR_SAMPLES
lang=$(get_lang $teacher)
mv $DIR_EXAMS/$teacher/EXAM-sujet.pdf $DIR_SAMPLES/Sample-$teacher-$lang.pdf
rm -f $DIR_EXAMS/$teacher/catalog.pdf $DIR_EXAMS/$teacher/EXAM-corrige.pdf
else
((rc++))
echo "ERROR: [$teacher] Sample not generated."
fi
done;
return $rc
}
function do_check() {
local teacher
local runs
local ok
local rc=0
for teacher in $(get_teachers); do
ok=0
tell_if_verbose " - $teacher"
check_project_exists $teacher
runs=$PDFLATEX_RUNS
mv $DIR_EXAMS/$teacher/$FILE_STUDENTS $DIR_EXAMS/$teacher/$FILE_STUDENTS.sav
cp $DIR_CSV/$FILE_BLANK_CSV $DIR_EXAMS/$teacher/$FILE_STUDENTS
cd $DIR_EXAMS/$teacher
rm -f EXAM-sujet.pdf EXAM-corrige.pdf EXAM-catalog.pdf catalog.pdf
while [ $runs -gt 0 ]; do
auto-multiple-choice prepare --mode s --with pdflatex --filter latex --prefix ./ ./$FILE_EXAM_BASENAME.tex --out-sujet EXAM-sujet.pdf --out-corrige EXAM-corrige.pdf 2>&1 > /dev/null | grep -v 'deprecated'
rm -f catalog.pdf
if [ ! -r EXAM-sujet.pdf ]; then runs=0; continue; else ok=1; fi;
if [ ! -r EXAM-corrige.pdf ]; then runs=0; continue; else ok=1; fi;
((runs--))
done
cd - 2>&1 > /dev/null
mv $DIR_EXAMS/$teacher/$FILE_STUDENTS.sav $DIR_EXAMS/$teacher/$FILE_STUDENTS
if [ $ok -eq 0 ]; then
echo "ERROR: [$teacher] exam.tex does not compile."
touch $DIR_EXAMS/$teacher/INVALID
((rc++))
else
rm -f $DIR_EXAMS/$teacher/INVALID
fi
done;
return $rc
}
function do_blank() {
local teacher
local lang
local runs
local ok
local rc=0
for teacher in $(get_teachers); do
ok=0
tell_if_verbose " - $teacher"
check_project_exists $teacher
if [ -r $DIR_EXAMS/$teacher/INVALID ]; then ((rc++)); break; fi
runs=$PDFLATEX_RUNS
mv $DIR_EXAMS/$teacher/$FILE_STUDENTS $DIR_EXAMS/$teacher/$FILE_STUDENTS.sav
cp $DIR_CSV/$FILE_BLANK_CSV $DIR_EXAMS/$teacher/$FILE_STUDENTS
cd $DIR_EXAMS/$teacher
rm -f EXAM-sujet.pdf EXAM-corrige.pdf EXAM-catalog.pdf catalog.pdf
while [ $runs -gt 0 ]; do
auto-multiple-choice prepare --mode s --with pdflatex --filter latex --prefix ./ ./$FILE_EXAM_BASENAME.tex --out-sujet EXAM-sujet.pdf --out-corrige EXAM-corrige.pdf 2>&1 > /dev/null | grep -v 'deprecated'
check_file_exists EXAM-sujet.pdf 1
if [ $? -ne 0 ]; then runs=0; continue; else ok=1; fi;
check_file_exists EXAM-corrige.pdf 1
if [ $? -ne 0 ]; then runs=0; continue; else ok=1; fi;
check_file_exists catalog.pdf 1
if [ $? -ne 0 ]; then runs=0; continue ;else ok=1; fi;
((runs--))
done
cd - 2>&1 > /dev/null
mv $DIR_EXAMS/$teacher/$FILE_STUDENTS.sav $DIR_EXAMS/$teacher/$FILE_STUDENTS
if [ $ok -eq 1 ]; then
mkdir -p $DIR_BLANKS
lang=$(get_lang $teacher)
mv $DIR_EXAMS/$teacher/EXAM-sujet.pdf $DIR_BLANKS/Blank-$teacher-$lang.pdf
mv $DIR_EXAMS/$teacher/EXAM-corrige.pdf $DIR_BLANKS/Correction-Blank-$teacher-$lang.pdf
mv $DIR_EXAMS/$teacher/catalog.pdf $DIR_BLANKS/Catalog-$teacher-$lang.pdf
else
((rc++))
echo "ERROR: [$teacher] Blank not generated."
fi
done;
return $rc
}
function do_pdf() {
local teacher
local lang
local runs
local ok=0
local rc
for teacher in $(get_teachers); do
ok=0
tell_if_verbose " - $teacher"
check_project_exists $teacher
if [ -r $DIR_EXAMS/$teacher/INVALID ]; then ((rc++)); break; fi
runs=$PDFLATEX_RUNS
cd $DIR_EXAMS/$teacher
while [ $runs -gt 0 ]; do
tell_if_verbose " (step 1/3)"
auto-multiple-choice prepare --mode s --with pdflatex --filter latex --prefix ./ ./$FILE_EXAM_BASENAME.tex --out-sujet EXAM-sujet.pdf --out-corrige EXAM-corrige.pdf --out-calage DOC-calage.xy 2>&1 > /dev/null | grep -v 'deprecated'
((runs--))
check_file_exists EXAM-sujet.pdf 1
if [ $? -ne 0 ]; then runs=0; continue; else ok=1; fi;
check_file_exists EXAM-corrige.pdf 1
if [ $? -ne 0 ]; then runs=0; continue; else ok=1; fi;
check_file_exists DOC-calage.xy 1
if [ $? -ne 0 ]; then runs=0; continue; else ok=1; fi;
done
if [ $ok -eq 1 ]; then
tell_if_verbose " (step 2/3)"
auto-multiple-choice prepare --mode b --with pdflatex --filter latex --prefix ./ ./$FILE_EXAM_BASENAME.tex --data ./data/ 2>&1 > /dev/null | grep -v 'deprecated'
tell_if_verbose " (step 3/3)"
auto-multiple-choice meptex --src ./DOC-calage.xy --data ./data --debug /dev/null 2>&1 > /dev/null
fi
cd - 2>&1 > /dev/null
if [ $ok -eq 1 ]; then
mkdir -p $DIR_PDF
lang=$(get_lang $teacher)
cp $DIR_EXAMS/$teacher/EXAM-sujet.pdf $DIR_PDF/Exam-$teacher-$lang.pdf
cp $DIR_EXAMS/$teacher/EXAM-corrige.pdf $DIR_PDF/Exam-$teacher-$lang-CORRECTION.pdf
mv $DIR_EXAMS/$teacher/catalog.pdf $DIR_EXAMS/$teacher/EXAM-catalog.pdf
# Validate page count
nb_of_students=$(tail -n 1 $DIR_EXAMS/$teacher/$FILE_STUDENTS | cut -d ',' -f 1)
ppe=$(get_expected_page_per_exam $teacher)
expected_page_count=$(echo "$ppe * $nb_of_students" | bc)
actual_page_count=$(pdfinfo $DIR_PDF/Exam-$teacher-$lang.pdf | grep '^Pages:' | rev | cut -d ' ' -f 1 | rev)
if [ $expected_page_count -ne $actual_page_count ]; then
((rc++))
echo "Unexpected number of pages generated."
fi
echo "$actual_page_count page(s) generated for $nb_of_students students. $expected_page_count pag(s) were expected." > $DIR_PDF/Exam-$teacher-$lang.log
else
((rc++))
echo "Exam not generated for $teacher."
fi
done
return $rc
}
function build_amc_project() {
local teacher=$1
mkdir -p $DIR_EXAMS/$teacher/cr/corrections/jpg
mkdir -p $DIR_EXAMS/$teacher/cr/corrections/pdf
mkdir -p $DIR_EXAMS/$teacher/cr/diagnostic
mkdir -p $DIR_EXAMS/$teacher/cr/zooms
mkdir -p $DIR_EXAMS/$teacher/data
mkdir -p $DIR_EXAMS/$teacher/exports
mkdir -p $DIR_EXAMS/$teacher/scans
mkdir -p $DIR_EXAMS/$teacher/copies
mkdir -p $DIR_EXAMS/$teacher/media
cp $DIR_CONFIG/$FILE_AMC_OPTIONS $DIR_EXAMS/$teacher/$FILE_AMC_OPTIONS
}
function add_media_files() {
local teacher=$1
cp $DIR_MEDIA/* $DIR_EXAMS/$teacher/media/
}
function do_project() {
mkdir -p $DIR_EXAMS
local teacher
for teacher in $(get_teachers); do
tell_if_verbose " - $teacher"
build_amc_project $teacher
build_sections $teacher
import_tex_files $teacher
override_tex_files $teacher
customize_tex_files $teacher
add_media_files $teacher
import_student_file $teacher
done
}
function do_scans() {
local teacher
for teacher in $(get_teachers); do
echo "Processing teacher $teacher"
if [ ! -d $DIR_SCANS/$teacher ]; then
echo "No scans found! (looked in $DIR_SCANS/$teacher)"
break;
fi
rm -rf $DIR_EXAMS/$teacher/scans/
mkdir $DIR_EXAMS/$teacher/scans/
cp $DIR_SCANS/$teacher/* $DIR_EXAMS/$teacher/scans/
local file_count=$(find $DIR_EXAMS/$teacher/scans/ -type f | wc -l)
echo "Number of files: $file_count"
local page_count=0
for tif in $(find $DIR_EXAMS/$teacher/scans/ -type f); do
if [ $(tiffinfo $tif 2> /dev/null | grep 'Page Number:' | cut -d '-' -f 2 ) -eq 0 ]; then
((page_count++))
else
echo "Invalid page count for file: $tif";
fi
done
echo "Number of pages: $page_count"
local students_count=$(cat $DIR_EXAMS/$teacher/$FILE_STUDENTS | grep -vc '^ID,')
echo "Number of students: $students_count"
local ppc=$(grep 'TOTAL_PAGES:' $DIR_TEACHERS/$teacher/$FILE_PROF | cut -d ':' -f 2)
local expected=$((ppc*students_count))
echo "Expected number of pages: $expected"
if [ ! $expected -eq $page_count ]; then
echo "MISSING COPIES :"
cat $DIR_EXAMS/$teacher/$FILE_STUDENTS | grep -v '^ID,' | cut -d ',' -f 1 >> /tmp/$$
find $DIR_EXAMS/$teacher/scans/ -type f | rev | cut -d '_' -f 1 | rev | cut -d '-' -f 1 | sed 's/^0*//g' | sort -u >> /tmp/$$
for missing in $(sort -n /tmp/$$ | uniq -u); do
grep "^$missing," $DIR_EXAMS/$teacher/$FILE_STUDENTS
done
rm -f /tmp/$$
fi
done
}
function do_analyse() {
local teacher
for teacher in $(get_teachers); do
echo "Processing teacher $teacher"
cd $DIR_EXAMS/$teacher/
auto-multiple-choice analyse --projet ./ ./scans/*
# auto-multiple-choice note --data ./data --seuil 0.05 # ignored anyway... check "seuil" in options.xml
cd - > /dev/null 2>&1
done
}
function do_associate() {
local teacher
for teacher in $(get_teachers); do
echo "Processing teacher $teacher"
cd $DIR_EXAMS/$teacher/
for csv in $(grep -v '^ID,' $FILE_STUDENTS | cut -d ',' -f 1,3); do
local id=$(echo $csv | cut -d ',' -f 1)
local sciper=$(echo $csv | cut -d ',' -f 2)
auto-multiple-choice association --data ./data --set --student $id --id $sciper
done
cd - > /dev/null 2>&1
done
}
function do_annotate() {
local teacher
for teacher in $(get_teachers); do
echo "Processing teacher $teacher"
cd $DIR_EXAMS/$teacher/
auto-multiple-choice annote --projet ./ --data ./data --fich-noms $FILE_STUDENTS
auto-multiple-choice regroupe --projet ./ --sujet EXAM-sujet.pdf --fich-noms $FILE_STUDENTS --tex-src $FILE_EXAM_BASENAME.tex --compose
cd - > /dev/null 2>&1
done
}
function do_mailing() {
local teacher
for teacher in $(get_teachers); do
echo "Processing teacher $teacher"
local lang=$(get_lang $teacher)
check_file_exists $DIR_CONFIG/$lang-$FILE_AMC_MAILING
cp $DIR_CONFIG/$lang-$FILE_AMC_MAILING $DIR_EXAMS/$teacher/$FILE_AMC_MAILING
sed -i "s?%FILE_STUDENTS%?./$FILE_STUDENTS?g" $DIR_EXAMS/$teacher/$FILE_AMC_MAILING
echo "#!/bin/bash
auto-multiple-choice mailing --xmlargs ./$FILE_AMC_MAILING
exit 0" > $DIR_EXAMS/$teacher/$FILE_EMAILS_SCRIPT
chmod +x $DIR_EXAMS/$teacher/$FILE_EMAILS_SCRIPT
done
}
function do_export() {
local teacher
for teacher in $(get_teachers); do
tell_if_verbose " - $teacher"
cd $DIR_EXAMS/$teacher/
auto-multiple-choice export --data ./data --module CSV --fich-noms $FILE_STUDENTS --o $FILE_RESULTS.csv
cd - > /dev/null 2>&1
done
}
function check_webdav_mounted() {
if [ ! -d $DIR_WEBDAV_BASE ]; then echo "ERROR: webdav dir ($DIR_WEBDAV_BASE) is not accessible."; exit 1; fi
}
function do_webdav_catalog() {
local teacher
local rc=0
check_webdav_mounted
for teacher in $(get_teachers); do
tell_if_verbose " - $teacher"
local lang=$(get_lang $teacher)
mkdir -p $DIR_WEBDAV_CATALOGS
for f in $(echo $DIR_BLANKS/Catalog-$teacher-$lang.pdf); do
check_file_exists $f 1
if [ $? -eq 0 ]; then
cp $f $DIR_WEBDAV_CATALOGS/
else
echo "ERROR: [$teacher] "$f" not found. Did you run 'blank' action?"
((rc++))
break;
fi
done
done
return $rc
}
function do_webdav_sample() {
local teacher
local rc=0
check_webdav_mounted
for teacher in $(get_teachers); do
tell_if_verbose " - $teacher"
local lang=$(get_lang $teacher)
mkdir -p $DIR_WEBDAV_SAMPLES
for f in $(echo $DIR_SAMPLES/Sample-$teacher-$lang.pdf); do
check_file_exists $f 1
if [ $? -eq 0 ]; then
cp $f $DIR_WEBDAV_SAMPLES/
else
echo "ERROR: [$teacher] "$f" not found. Did you run 'sample' action?"
((rc++))
break;
fi
done
done
return $rc
}
function do_webdav_pdf() {
local teacher
local rc=0
check_webdav_mounted
for teacher in $(get_teachers); do
tell_if_verbose " - $teacher"
local lang=$(get_lang $teacher)
mkdir -p $DIR_WEBDAV_EXAMS
for f in $(echo $DIR_PDF/Exam-$teacher-$lang.log $DIR_PDF/Exam-$teacher-$lang.pdf $DIR_PDF/Exam-$teacher-$lang-CORRECTION.pdf); do
check_file_exists $f 1
if [ $? -eq 0 ]; then
cp $f $DIR_WEBDAV_EXAMS/
else
echo "ERROR: [$teacher] "$f" not found. Did you run 'list' action?"
((rc++))
break;
fi
done
done
return $rc
}
function do_webdav_list() {
local teacher
local rc=0
check_webdav_mounted
for teacher in $(get_teachers); do
tell_if_verbose " - $teacher"
local lang=$(get_lang $teacher)
mkdir -p $DIR_WEBDAV_LISTS
for f in $(echo $DIR_LIST_OUT/List-$teacher.pdf $DIR_LIST_OUT/List-$teacher.csv); do
check_file_exists $f 1
if [ $? -eq 0 ]; then
cp $f $DIR_WEBDAV_LISTS/
else
echo "ERROR: [$teacher] "$f" not found. Did you run 'list' action?"
((rc++))
break;
fi
done
done
return $rc
}
function do_clean() {
local teacher
local ask=$(get_param_value 'ask')
for teacher in $(get_teachers); do
tell_if_verbose " - $teacher"
lang=$(get_lang $teacher)
if [ "$ask" != "no" ]; then
echo "Cleaning all generated data for teacher '$teacher' ? CTRL-C to abort."
echo "(Use '--params ask=no' to force)"
read a
fi
# Projects
rm -rf $DIR_EXAMS/$teacher
# Blanks
rm -f $DIR_BLANKS/Blank-$teacher-$lang.pdf $DIR_BLANKS/Correction-Blank-$teacher-$lang.pdf $DIR_BLANKS/Catalog-$teacher-$lang.pdf
# Samples
rm -f $DIR_SAMPLES/Sample-$teacher-$lang.pdf
# PDF
rm -f $DIR_PDF/Exam-$teacher-$lang.log $DIR_PDF/Exam-$teacher-$lang.pdf $DIR_PDF/Exam-$teacher-$lang-CORRECTION.pdf
# Lists
rm -f $DIR_LIST_OUT/List-$teacher.pdf $DIR_LIST_OUT/List-$teacher.csv
done
for dir_to_clean in $(echo "$DIR_EXAMS $DIR_BLANKS $DIR_SAMPLES $DIR_PDF $DIR_LIST_OUT"); do if [ -d $dir_to_clean ]; then rmdir --ignore-fail-on-non-empty $dir_to_clean; fi; done
}

Event Timeline