Revisión 398
Añadido por Alfonso Pastor hace más de 12 años
scripts/ldap/generacion_listados_inicio_curso_pdf.sh | ||
---|---|---|
#!/bin/bash
|
||
|
||
#Version 2.3
|
||
#Fecha 8/10/2012
|
||
#Autores: Alfonso Pastor. IES Virgen de Guadalupe-Cáceres.
|
||
# José María Sánchez García. IES Parque de Monfragüe.
|
||
# impresión de cada grupo de alumnos en una hoja distinta, evitando que queden cortadas entre pagina y pagina.
|
||
# Fernando Sosa. IES Zurbaran-Badajoz.
|
||
# posibilidad de ordenar cada tabla de grupo por diferentes campos.
|
||
# ORDENAR_POR=[apellidos|nie|password|usuario|nombre|nada]
|
||
# Log con todos los datos generados por si es util para otros fines
|
||
# LOG=/tmp/tabla_grupos_alumnos
|
||
#Cometido: Extrae datos del fichero Alumnos.xml generado por Rayuela, despues de haberlos importado en LDAP.
|
||
# Construye un fichero html y, si esta instalado wkhtmltopdf, un PDF de grupos y alumnos, con los datos de login y contraseña.
|
||
|
||
#AVISO: por las herramientas que utiliza este script no debe ejecutarse en el servidor ldap, mejor ejecutarlo en un
|
||
# workstation normal y corriente que tenga acceso a ldap.
|
||
|
||
#ORDENAR_POR=[apellidos|nie|password|usuario|nombre|nada]
|
||
ORDENAR_POR=apellidos
|
||
|
||
LOG=/tmp/tabla_grupos_alumnos
|
||
:> $LOG
|
||
|
||
if [ ! -e /usr/bin/xmlstarlet ]
|
||
then
|
||
echo "Falta xmlstarlet, hay que instalarlo con apt-get install xmlstarlet"
|
||
exit
|
||
fi
|
||
|
||
if [ ! -e /usr/bin/ldapsearch ]
|
||
then
|
||
echo "Falta ldapsearch, hay que instalarlo con apt-get install ldap-utils"
|
||
exit
|
||
fi
|
||
|
||
curso="2012/13"
|
||
|
||
case $# in
|
||
4)
|
||
grupofiltro="TODOS"
|
||
;;
|
||
5)
|
||
grupofiltro=$5
|
||
;;
|
||
*)
|
||
echo "Uso: $0 <fichero xml alumnos> <fichero xml grupos> <fichero xml profesores> <fichero html salida> [<grupo a procesar>]"
|
||
exit
|
||
;;
|
||
esac
|
||
|
||
|
||
echo "Iniciando proceso...."
|
||
|
||
echo "Obteniendo la lista de grupos"
|
||
codigo=$(xmlstarlet sel -t -m "/grupos-centro/centro" -v "codigo" -n $2)
|
||
if [ -z $codigo ]
|
||
then
|
||
echo "El fichero indicado como segundo parametro ($2) no parece ser un fichero de exportación de grupos de Rayuela"
|
||
echo "Abortando proceso"
|
||
exit
|
||
fi
|
||
|
||
|
||
xmlstarlet sel -t -m "/grupos-centro/curso/grupo-curso" -v "concat(nombre-grupo,':',dni-tutor-grupo,':',../nombre-curso)" -n $2 > /tmp/grupos.txt
|
||
codificacion=$(file -i /tmp/grupos.txt | cut -d"=" -f2)
|
||
#Si no estan en utf-8 los convertimos a dicho formato
|
||
if [ "$codificacion" != "utf-8" ]
|
||
then
|
||
echo "Convirtiendo grupos..."
|
||
iconv -t UTF8//IGNORE -f $codificacion /tmp/grupos.txt > /tmp/grupos2.txt
|
||
else
|
||
cp /tmp/grupos.txt /tmp/grupos2.txt
|
||
fi
|
||
|
||
if [ "$grupofiltro" != "TODOS" ]
|
||
then
|
||
lineagrupo=$(grep "^${grupofiltro}:" /tmp/grupos2.txt | cut -d: -f1)
|
||
if [ -z "$lineagrupo" ]
|
||
then
|
||
echo "El grupo indicado ($grupofiltro) no aparece en la lista de grupos bajada de Rayuela."
|
||
echo "Verifique que lo ha escrito IGUAL que aparece en la lista de grupos. Si tiene espacios en blanco intermedios, entrecomille el nombre del grupo."
|
||
echo ""
|
||
echo "Esta es la lista de grupos descargados (el nombre que debe usar aparece al principio antes de los dos puntos):"
|
||
echo ""
|
||
cat /tmp/grupos2.txt
|
||
exit
|
||
else
|
||
#Si está en la lista
|
||
#Borramos todos los grupos y dejamos solo el que queremos procesar.
|
||
echo "Grupo $grupofiltro encontrado correctamente."
|
||
grep "^${grupofiltro}:" /tmp/grupos2.txt > /tmp/grupos1.txt
|
||
mv /tmp/grupos1.txt /tmp/grupos2.txt
|
||
fi
|
||
fi
|
||
|
||
echo "Obteniendo la lista de alumnos"
|
||
codigo=$(xmlstarlet sel -t -m "/alumnado-centro/centro" -v "codigo" -n $1)
|
||
if [ -z $codigo ]
|
||
then
|
||
echo "El fichero indicado como primer parametro ($1) no parece ser un fichero de exportación de alumnos de Rayuela"
|
||
echo "Abortando proceso"
|
||
exit
|
||
fi
|
||
|
||
|
||
xmlstarlet sel -t -m "/alumnado-centro/alumno" -v "concat(grupo,':',nombre,':',primer-apellido,' ',segundo-apellido,':',fecha-nacimiento,':',nie)" -n $1 > /tmp/alumnos.txt
|
||
codificacion=$(file -i /tmp/alumnos.txt | cut -d"=" -f2)
|
||
#Si no estan en utf-8 los convertimos a dicho formato
|
||
if [ "$codificacion" != "utf-8" ]
|
||
then
|
||
echo "Convirtiendo alumnos..."
|
||
iconv -t UTF8//IGNORE -f $codificacion /tmp/alumnos.txt > /tmp/alumnos2.txt
|
||
else
|
||
cp /tmp/alumnos.txt /tmp/alumnos2.txt
|
||
fi
|
||
|
||
echo "Obteniendo la lista de profesores"
|
||
codigo=$(xmlstarlet sel -t -m "/profesorado-centro/centro" -v "codigo" -n $3)
|
||
if [ -z $codigo ]
|
||
then
|
||
echo "El fichero indicado en como tercer parametro ($3) no parece ser un fichero de exportación de profesores de Rayuela"
|
||
echo "Abortando proceso"
|
||
exit
|
||
fi
|
||
|
||
xmlstarlet sel -t -m "/profesorado-centro/profesor" -v "concat(dni,':',nombre,' ',primer-apellido,' ',segundo-apellido)" -n $3 > /tmp/profes.txt
|
||
codificacion=$(file -i /tmp/profes.txt | cut -d"=" -f2)
|
||
#Si no estan en utf-8 los convertimos a dicho formato
|
||
if [ "$codificacion" != "utf-8" ]
|
||
then
|
||
echo "Convirtiendo profesores..."
|
||
iconv -t UTF8//IGNORE -f $codificacion /tmp/profes.txt > /tmp/profes2.txt
|
||
else
|
||
cp /tmp/profes.txt /tmp/profes2.txt
|
||
fi
|
||
|
||
|
||
echo -n "Contraseña de administrador de la BBDD ldap: "
|
||
read pwd
|
||
|
||
consulta=$(ldapsearch -w $pwd -D "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es" -xLLL -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" "cn=admin")
|
||
if [ -z "$consulta" ]
|
||
then
|
||
echo "La contraseña es incorrecta o bien no hay conexión con ldap"
|
||
echo "Proceso abortado"
|
||
exit
|
||
fi
|
||
|
||
echo "Empiezo del proceso. Se ordenará cada grupo por $ORDENAR_POR"
|
||
|
||
|
||
#Generamos el html en utf8
|
||
echo "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/><style>table {page-break-after:always;}</style></head><body><div style='width: 800px'>" > $4
|
||
|
||
|
||
echo "<h1><p align="center">Listados claves alumnos curso $curso </p></h1>" >> $4
|
||
|
||
echo "" >> $4
|
||
echo "" > /tmp/alumtemp.txt
|
||
while read lineagrupo
|
||
do
|
||
grupo=$(echo $lineagrupo | cut -d: -f1)
|
||
echo "Procesando grupo: $grupo"
|
||
tutor=$(echo $lineagrupo | cut -d: -f2)
|
||
nombre_curso=$(echo $lineagrupo | cut -d: -f3)
|
||
nombre_tutor=$(grep "^$tutor:" /tmp/profes2.txt | cut -d: -f2)
|
||
|
||
echo "<table width='100%' border=1>" >> $4
|
||
echo "<tr bgcolor='#CCCCCC'>" >> $4
|
||
echo "<td colspan='2' width='50%'>Grupo: $grupo - $nombre_curso</td>" >> $4
|
||
echo "<td colspan='2'>Tutor: $tutor - $nombre_tutor</td>" >> $4
|
||
echo "</tr" >> $4
|
||
|
||
case "$ORDENAR_POR" in
|
||
"nie") grep "^$grupo:" /tmp/alumnos2.txt | sort -k1 -t':' >> /tmp/alumtemp.txt
|
||
;;
|
||
"nombre") grep "^$grupo:" /tmp/alumnos2.txt | sort -k2 -t':' >> /tmp/alumtemp.txt
|
||
;;
|
||
"apellidos") grep "^$grupo:" /tmp/alumnos2.txt | sort -k3 -t':' >> /tmp/alumtemp.txt
|
||
;;
|
||
"password") grep "^$grupo:" /tmp/alumnos2.txt | sort -k4 -t':' >> /tmp/alumtemp.txt
|
||
;;
|
||
"usuario") grep "^$grupo:" /tmp/alumnos2.txt | sort -k5 -t':' >> /tmp/alumtemp.txt
|
||
;;
|
||
*) grep "^$grupo:" /tmp/alumnos2.txt >> /tmp/alumtemp.txt
|
||
;;
|
||
esac
|
||
|
||
echo "<tr bgcolor='#F0F8FF'>" >> $4
|
||
echo "<td>NIF/NIE</td><td>Nombre</td><td>Contraseña</td><td>Usuario</td>" >> $4
|
||
echo "</tr>" >> $4
|
||
|
||
while read linea
|
||
do
|
||
|
||
grupo=$(echo $linea | cut -d: -f1)
|
||
nombre=$(echo $linea | cut -d: -f2)
|
||
apellidos=$(echo $linea | cut -d: -f3)
|
||
fecha=$(echo $linea | cut -d: -f4)
|
||
nie=$(echo $linea | cut -d: -f5)
|
||
password=$(echo $fecha | sed "s?/??g")
|
||
|
||
if [ ! -z "$nie" ]
|
||
then
|
||
login=$(ldapsearch -w $pwd -D "cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es" -xLLL -h ldap -b "ou=People,dc=instituto,dc=extremadura,dc=es" "employeeNumber=$nie" "uid" | grep "uid:" | cut -f2 -d" ")
|
||
if [ -z "$login" ]
|
||
then
|
||
echo " ERROR ------------> no se ha encontrado login para $nombre"
|
||
login="No encontrado"
|
||
else
|
||
echo " Procesando $nombre con login: $login"
|
||
fi
|
||
echo "<tr>" >> $4
|
||
echo "<td>$nie</td><td>$nombre $apellidos</td><td>$password</td><td>$login</td>" >> $4
|
||
echo "</tr>" >> $4
|
||
fi
|
||
|
||
echo "$grupo:$nombre:$apellidos:$login:$password:$nie:" >> $LOG
|
||
|
||
done < "/tmp/alumtemp.txt"
|
||
rm "/tmp/alumtemp.txt"
|
||
echo "</table><br/><br/><br/>" >> $4
|
||
|
||
done < "/tmp/grupos2.txt"
|
||
|
||
echo "</div></body></html>" >> $4
|
||
|
||
echo "Generado $4 correctamente."
|
||
|
||
if [ -e /usr/bin/wkhtmltopdf ]
|
||
then
|
||
echo "Generando PDF..."
|
||
nombresinext=$(basename "$4" .html)
|
||
wkhtmltopdf "$4" "$nombresinext.pdf"
|
||
echo "Generado $nombresinext.pdf correctamente."
|
||
else
|
||
echo "No existe el programa /usr/bin/wkhtmltopdf, genere el PDF manualmente abriendolo con el Firefox e imprimiendolo en un archivo tipo PDF."
|
||
fi
|
||
|
||
rm /tmp/alumnos.txt
|
||
rm /tmp/grupos.txt
|
||
rm /tmp/profes.txt
|
||
rm /tmp/alumnos2.txt
|
||
rm /tmp/grupos2.txt
|
||
rm /tmp/profes2.txt
|
||
echo "log en $LOG"
|
||
|
||
|
||
|
||
|
||
|
Exportar a: Unified diff
Generacion listados