Proyecto

General

Perfil

« Anterior | Siguiente » 

Revisión 398

Añadido por Alfonso Pastor hace más de 12 años

Generacion listados

Ver diferencias:

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&ntilde;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