server/admin/fill_exercices.sh

168 lines
4.9 KiB
Bash
Executable File

#!/bin/sh
BASEURL="http://localhost:8081"
BASEURI="https://srs.epita.fr/owncloud/remote.php/webdav/FIC 2016"
CLOUDPASS=fic:'f>t\nV33R|(+?$i*'
new_theme() {
NAME=`echo $1 | sed 's/"/\\\\"/g'`
curl -f -s -d "{\"name\": \"$NAME\"}" "${BASEURL}/api/themes/" |
grep -Eo '"id":[0-9]+,' | grep -Eo "[0-9]+"
}
new_exercice() {
THEME="$1"
TITLE=`echo "$2" | sed 's/"/\\\\"/g'`
STATEMENT=`echo "$3" | sed 's/"/\\\\"/g' | sed ':a;N;$!ba;s/\n/<br>/g'`
HINT=`echo "$4" | sed 's/"/\\\\"/g' | sed ':a;N;$!ba;s/\n/<br>/g'`
DEPEND="$5"
GAIN="$6"
VIDEO="$7"
curl -f -s -d "{\"title\": \"$TITLE\", \"statement\": \"$STATEMENT\", \"hint\": \"$HINT\", \"depend\": $DEPEND, \"gain\": $GAIN, \"videoURI\": \"$VIDEO\"}" "${BASEURL}/api/themes/$THEME" |
grep -Eo '"id":[0-9]+,' | grep -Eo "[0-9]+"
}
new_file() {
THEME="$1"
EXERCICE="$2"
URI="$3"
curl -f -s -d "{\"URI\": \"$URI\"}" "${BASEURL}/api/themes/$THEME/$EXERCICE/files" |
grep -Eo '"id":[0-9]+,' | grep -Eo "[0-9]+"
}
new_key() {
THEME="$1"
EXERCICE="$2"
NAME="$3"
KEY=`echo $4 | sed 's/"/\\\\"/g'`
curl -f -s -d "{\"name\": \"$NAME\", \"key\": \"$KEY\"}" "${BASEURL}/api/themes/$THEME/$EXERCICE/keys" |
grep -Eo '"id":[0-9]+,' | grep -Eo "[0-9]+"
}
# Theme
while read -p "Theme name: " THEME_NAME
do
if [ -z "$THEME_NAME" ]; then
break
fi
THEME_ID=`new_theme "$THEME_NAME"`
if [ -z "$THEME_ID" ]; then
echo -e "\e[31;01m!!! An error occured during theme add\e[00m"
continue
else
echo -e "\e[32m>>> New theme created:\e[00m $THEME_ID - $THEME_NAME"
fi
LAST=null
EXO_NUM=1
THM_BASEURI=
echo
echo -e "\e[36m--- Filling exercice ${EXO_NUM} in theme ${THEME_NAME}\e[00m"
while read -p "Exercice title (^D to pass to the next theme) [Exercice ${EXO_NUM}]: " EXO_NAME
do
if [ -z "${EXO_NAME}" ]; then
EXO_NAME="Exercice ${EXO_NUM}"
fi
if [ -z "${THM_BASEURI}" ]
then
read -p "Base URI for the theme [/${THEME_NAME}/]: ${BASEURI}" THM_BASEURI
if [ -z "${THM_BASEURI}" ]; then
THM_BASEURI="/${THEME_NAME}/"
fi
fi
read -p "Base URI for the exercice [${EXO_NAME}/]: ${BASEURI}${THM_BASEURI}" EXO_BASEURI
if [ -z "${EXO_BASEURI}" ]; then
EXO_BASEURI="${EXO_NAME}/"
fi
FILES=$(curl -f -s -X PROPFIND -u "${CLOUDPASS}" "${BASEURI}${THM_BASEURI}${EXO_BASEURI}" | xmllint --format - | grep 'd:href' | sed -E 's/^.*>(.*)<.*$/\1/' | sed 1d | while read f; do basename $f; done)
DEF_VIDEO=$(echo "$FILES" | grep -E "\.(mov|mkv|mp4|avi)$" | head -1)
read -p "Video URI [${DEF_VIDEO}]: ${BASEURI}${THM_BASEURI}${EXO_BASEURI}" EXO_VIDEO
if [ -z "${EXO_VIDEO}" ]; then
EXO_VIDEO="$DEF_VIDEO"
fi
README=$(echo "$FILES" | grep -iE "readme" | head -1)
if ! [ -z "$README" ]; then
echo
echo "################################# $README #################################"
curl -f -u "${CLOUDPASS}" "${BASEURI}${THM_BASEURI}${EXO_BASEURI}/${README}"
echo
echo "###########################################################################"
echo
fi
if [ "${LAST}" = "null" ]; then
echo ">>> Assuming this exercice has no dependency"
else
echo ">>> Assuming this exercice depends on the last entry (id=${LAST})"
fi
EXO_GAIN=$((5 * (2 ** $EXO_NUM)))
echo ">>> Using default gain: ${EXO_GAIN} points"
echo "--- Enter the description for ${EXO_NUM} in theme ${THEME_NAME}"
EXO_DESC=`cat`
echo "--- Enter the optional hint for ${EXO_NUM} in theme ${THEME_NAME}"
EXO_HINT=`cat`
EXO_ID=`new_exercice "${THEME_ID}" "${EXO_NAME}" "${EXO_DESC}" "${EXO_HINT}" "${LAST}" "${EXO_GAIN}" "${THM_BASEURI}${EXO_BASEURI}${EXO_VIDEO}"`
if [ -z "$EXO_ID" ]; then
echo -e "\e[31;01m!!! An error occured during exercice add.\e[00m"
continue
else
echo -e "\e[32m>>> New exercice created: $EXO_ID - $EXO_NAME\e[00m"
fi
# Keys
while read -p "New key: " KEY_RAW
do
if [ -z "${KEY_RAW}" ]
then
break
fi
read -p "Key type/kind/hint: " KEY_TYPE
KEY_ID=`new_key "${THEME_ID}" "${EXO_ID}" "${KEY_TYPE}" "${KEY_RAW}"`
if [ -z "$KEY_ID" ]; then
echo -e "\e[31;01m!!! An error occured during key add.\e[00m"
else
echo -e "\e[32m>>> New key created: $KEY_ID - $KEY_TYPE\e[00m"
fi
done
# Files
for FBASE in $(for f in $FILES; do echo $f; done | grep -vEi "(readme|${EXO_VIDEO})")
do
if read -p "Import file ${BASEURI}${THM_BASEURI}${EXO_BASEURI}${FBASE}? (Enter: yes, ^D: no)"
then
FILE_ID=`new_file "${THEME_ID}" "${EXO_ID}" "${THM_BASEURI}${EXO_BASEURI}${FBASE}"`
if [ -z "$FILE_ID" ]; then
echo -e "\e[31;01m!!! An error occured during file import! Please check path.\e[00m"
else
echo -e "\e[32m>>> New file added: $FILE_ID - $FBASE\e[00m"
fi
fi
done
LAST=$EXO_ID
EXO_NUM=$((EXO_NUM + 1))
echo
echo -e "\e[36m--- Filling exercice ${EXO_NUM} in theme ${THEME_NAME}\e[00m"
done
echo
done