[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 #!/bin/bash 2 # 3 ##### Script de generation de fonds ##### 4 # 5 # Auteur: Stephane Boireau (A.S. - Relais de Bernay/Pont-Audemer (27)) 6 # 7 ## $Id: mkwall.sh 8020 2014-01-06 20:05:04Z crob $ ## 8 # 9 # /usr/share/se3/sbin/mkwall.sh 10 11 12 13 chemin_param_fond="/etc/se3/fonds_ecran" 14 dossier_trombines="/var/se3/Docs/trombine" 15 dossier_base_fond="/var/se3/Docs/media/fonds_ecran" 16 17 #============================================= 18 # Chemin pour les images a inserer uploadees 19 dossier_tmp_fond="/var/lib/se3/fonds_ecran" 20 mkdir -p $dossier_tmp_fond} 21 chown www-se3 $dossier_tmp_fond} 22 # Comme ca, apres le premier essai, les droits sont ok pour l'upload 23 24 chemin_www_fonds_courants="Admin/fonds_ecran/courant" 25 dossier_www_fonds_courants="/var/www/se3/$chemin_www_fonds_courants" 26 mkdir -p $dossier_www_fonds_courants} 27 #============================================= 28 29 case $2 in 30 jpg) 31 prefix="jpeg:" 32 ext="jpg" 33 ;; 34 *) 35 prefix="bmp3:" 36 ext="bmp" 37 ;; 38 esac 39 40 dim_photo=100 41 taille_police=30 42 43 if [ "$(cat $chemin_param_fond/actif.txt 2>/dev/null)" != "1" ]; then 44 exit 0 45 fi 46 47 if [ -z "$1" -o ! -e "/usr/bin/convert" ]; then 48 echo "Bad args or missing convert" 49 fi 50 51 [ -f "/tmp/$1.fond.lck" ] && exit 0 52 >"/tmp/$1.fond.lck" 53 54 #============================================= 55 image_a_inserer="" 56 if [ -e "$dossier_tmp_fond/tmp_$1.jpg" ]; then 57 #echo "Le fichier image a inserer $dossier_tmp_fond/tmp_$1.jpg existe." 58 image_a_inserer="$dossier_tmp_fond/tmp_$1.jpg" 59 fi 60 #============================================= 61 62 temoin="" 63 64 # Parametres propres a un utilisateur/groupe: 65 if [ "$1" = "admin" ]; then 66 if [ -e "$chemin_param_fond/fond_admin.txt" ]; then 67 # Le statut actif sert a savoir si on souhaite utiliser les parametres de fonds pour cet utilisateur/groupe. 68 # Cela permet de desactiver sans supprimer les preferences. 69 if [ $(cat "$chemin_param_fond/fond_admin.txt") = "actif" ]; then 70 source "$chemin_param_fond/parametres_admin.sh" 71 source "$chemin_param_fond/annotations_admin.sh" 2>/dev/null 72 temoin="admin" 73 fi 74 fi 75 classe="Admins" 76 else 77 if [ -e "$chemin_param_fond/fond_overfill.txt" ]; then 78 test_membre_overfill=$(ldapsearch -xLLL "(&(memberuid=$1)(cn=overfill))" cn | grep "^cn: ") 79 #if [ ! -z "$test_membre_overfill" -a $(cat "$chemin_param_fond/overfill.txt") = "actif" ]; then 80 if [ ! -z "$test_membre_overfill" -a $(cat "$chemin_param_fond/fond_overfill.txt") = "actif" ]; then 81 # L'utilisateur a depasse son quota... 82 if [ $(cat "$chemin_param_fond/fond_overfill.txt") = "actif" ]; then 83 source "$chemin_param_fond/parametres_overfill.sh" 84 source "$chemin_param_fond/annotations_overfill.sh" 2>/dev/null 85 temoin="overfill" 86 fi 87 fi 88 fi 89 90 91 if [ -e "$chemin_param_fond/fond_Profs.txt" ]; then 92 test_membre_prof=$(ldapsearch -xLLL "(&(memberuid=$1)(cn=Profs))" cn | grep "^cn: ") 93 if [ ! -z "$test_membre_prof" ]; then 94 # Utilisateur prof 95 if [ $(cat "$chemin_param_fond/fond_Profs.txt") = "actif" ]; then 96 source "$chemin_param_fond/parametres_Profs.sh" 97 source "$chemin_param_fond/annotations_Profs.sh" 2>/dev/null 98 temoin="Profs" 99 fi 100 fi 101 classe="Profs" 102 fi 103 104 105 if [ -z "$temoin" ]; then 106 # Utilisateur non prof... -> eleves ou administratifs? 107 test_membre_eleve=$(ldapsearch -xLLL "(&(memberuid=$1)(cn=Eleves))" cn | grep "^cn: ") 108 #echo "test_membre_eleve=$test_membre_eleve" 109 if [ ! -z "$test_membre_eleve" ]; then 110 # Utilisateur eleve 111 # Dans le cas d'un eleve, le groupe Classe est prioritaire (pour l'image) sur le groupe eleves. 112 classe=$(ldapsearch -xLLL "(&(memberuid=$1)(cn=Classe*))" cn | grep "^cn: " | sed -e "s/^cn: //"|head -n1) 113 #echo "classe=$classe" 114 if [ ! -z "$classe" ]; then 115 if [ -e "$chemin_param_fond/fond_$classe}.txt" ]; then 116 if [ $(cat "$chemin_param_fond/fond_$classe}.txt") = "actif" ]; then 117 source "$chemin_param_fond/parametres_$classe}.sh" 118 source "$chemin_param_fond/annotations_$classe}.sh" 2>/dev/null 119 temoin=$classe 120 fi 121 fi 122 fi 123 124 #if [ -z "$temoin" ]; then 125 if [ -e "$chemin_param_fond/fond_Eleves.txt" -a -z "$temoin" ]; then 126 if [ $(cat "$chemin_param_fond/fond_Eleves.txt") = "actif" ]; then 127 source "$chemin_param_fond/parametres_Eleves.sh" 128 source "$chemin_param_fond/annotations_Eleves.sh" 2>/dev/null 129 temoin="Eleves" 130 fi 131 fi 132 fi 133 fi 134 135 136 if [ -e "$chemin_param_fond/fond_Administratifs.txt" -a -z "$temoin" ]; then 137 # Utilisateur non prof... -> eleves ou administratifs? 138 test_membre_administratifs=$(ldapsearch -xLLL "(&(memberuid=$1)(cn=Administratifs))" cn | grep "^cn: ") 139 if [ ! -z "$test_membre_administratifs" ]; then 140 # Utilisateur membre de: Administratifs 141 if [ $(cat "$chemin_param_fond/fond_Administratifs.txt") = "actif" ]; then 142 source "$chemin_param_fond/parametres_Administratifs.sh" 143 source "$chemin_param_fond/annotations_Administratifs.sh" 2>/dev/null 144 temoin="Administratifs" 145 fi 146 fi 147 classe="Administratifs" 148 fi 149 fi 150 151 152 # Si aucune generation de fond n'est prevue pour l'utilisateur courant, on quitte: 153 if [ -z "$temoin" ]; then 154 echo " pas de fond pour $1" 155 # Suppression du fichier de lock s'il existe: 156 rm -f "/tmp/$1.fond.lck" 157 exit 0 158 fi 159 160 161 # Passage de variable: 162 base=$temoin 163 if [ "$base" == "admin" ] 164 then 165 orig="Adminse3" 166 else 167 orig="$base" 168 fi 169 170 # Generation du fond commun s'il n'existe pas: 171 # il est genere en jpeg par l'interface, mais xp veut du bmp, il sera converti si besoin 172 if [ ! -e "$dossier_base_fond}/$orig.jpg" ]; then 173 /usr/bin/convert -size $largeur}x$hauteur} gradient:$couleur1}-$couleur2} jpeg:$dossier_base_fond}/$orig.jpg 174 fi 175 176 # S'il y a une image a inserer, on ne se preoccupe pas de ce que le fond existe deja 177 if [ -z "$image_a_inserer" ]; then 178 # Si le fond existe deja on quitte 179 180 if [ -f "$dossier_base_fond}/$1_$orig.$ext" -a -f "$dossier_base_fond}/$1.$ext" ]; then 181 echo " fond deja cree pour $1" 182 # Suppression du fichier de lock s'il existe: 183 rm -f "/tmp/$1.fond.lck" 184 185 exit 0 186 fi 187 fi 188 189 # on efface les anciens 190 rm -f $dossier_base_fond}/$1_*.$ext 191 192 #=============================================================== 193 # Generation de la chaine des infos a afficher: 194 chaine="" 195 if [ "$annotation_nom" = "1" ]; then 196 nom_prenom=$(ldapsearch -xLLL uid=$1 cn | grep "^cn: " | sed -e "s/^cn: //") 197 #chaine="$nom_prenom" 198 chaine=$(echo "$nom_prenom" | tr "'ÂÄÀÁÃÄÅÇÊËÈÉÎÏÌÍÑÔÖÒÓÕ¦ÛÜÙÚݾ´áàâäãåçéèêëîïìíñôöðòóõ¨ûüùúýÿ¸" "_AAAAAAACEEEEIIIINOOOOOSUUUUYYZaaaaaaceeeeiiiinoooooosuuuuyyz" | sed -e "s|[^A-Za-z_ -]||g" | sed -e "s|Æ|AE|g" | sed -e "s|¼|OE|g" | sed -e "s|æ|ae|g" | sed -e "s|½|oe|g") 199 fi 200 201 if [ "$annotation_classe" = "1" ]; then 202 if [ -z "$classe" ]; then 203 # Cas d'un eleve dans le groupe overfill: 204 classe=$(ldapsearch -xLLL "(&(memberUid=$1)(cn=Classe_*))" cn | grep "^cn: " | sed -e "s/^cn: //"|head -n1) 205 fi 206 if [ -z "$classe" ]; then 207 # Cas d'un prof dans le groupe overfill: 208 classe=$(ldapsearch -xLLL "(&(memberUid=$1)(cn=Profs))" cn | grep "^cn: " | sed -e "s/^cn: //") 209 fi 210 if [ ! -z "$classe" ]; then 211 if [ -n "$chaine}" ]; then 212 chaine="$chaine ($classe)" 213 else 214 chaine="$classe" 215 fi 216 fi 217 fi 218 219 # Generation de l'image: 220 if [ "$(cat "$chemin_param_fond/annotations_$base}.txt" 2>/dev/null)" = "actif" ]; then 221 /usr/bin/convert -fill $couleur_txt} -pointsize $taille_police -draw "gravity North text 0,0 '$chaine'" $dossier_base_fond}/$orig.jpg $prefix}$dossier_base_fond}/$1_$orig.$ext 222 if [ "$(cat "$chemin_param_fond/photos_$base}.txt" 2>/dev/null)" = "actif" ]; then 223 photo=$dossier_trombines/$1.jpg 224 if [ -f "$photo" ]; then 225 source $chemin_param_fond/dim_photo_$temoin.sh 226 if [ "$dim_photo" -eq "0" ]; then 227 taille_photo="100%" 228 else 229 taille_photo="$dim_photo}x$dim_photo}" 230 fi 231 /usr/bin/convert -resize $taille_photo $photo $prefix}/tmp/$1_tromb.$ext 232 /usr/bin/composite -gravity NorthEast -dissolve 80 /tmp/$1_tromb.$ext $dossier_base_fond}/$1_$orig.$ext $dossier_base_fond}/$1_$orig.$ext 233 rm -f /tmp/$1_tromb.$ext 234 fi 235 fi 236 else 237 # on fait une copie en bmp si besoin 238 if [ ! -e "$dossier_base_fond}/$orig.$ext" ]; then 239 /usr/bin/convert jpeg:$dossier_base_fond}/$orig.jpg bmp3:$dossier_base_fond}/$orig.bmp 240 fi 241 fi 242 243 if [ -n "$image_a_inserer" -a -e "$image_a_inserer" ]; then 244 # Insertion de l'image $image_a_inserer 245 246 # Si il n'y a pas d'image propre a l'utilisateur on fait une copie du modèle du groupe de l'utilisateur 247 # Et on va modifier la copie 248 [ ! -f $dossier_base_fond}/$1_$orig.$ext ] && cp $dossier_base_fond}/$orig.$ext $dossier_base_fond}/$1_$orig.$ext 249 250 # Calculer la taille et redimensionner si c'est trop grand 251 larg_max=500 252 haut_max=500 253 254 taille_image_inseree=$(identify $image_a_inserer | cut -d" " -f3) 255 larg_ins=$(echo "$taille_image_inseree" | cut -d"x" -f1) 256 haut_ins=$(echo "$taille_image_inseree" | cut -d"x" -f2) 257 echo "Largeur de l'image proposee: larg_ins=$larg_ins" 258 echo "Hauteur de l'image proposee: haut_ins=$haut_ins" 259 #if [ $larg_ins -ge $larg_max -o $haut_ins -ge $haut_max ]; then 260 # taille_image_inseree="${larg_ins}x${haut_ins}" 261 #fi 262 263 redimensionnement="n" 264 if [ $larg_ins -ge $larg_max -o $haut_ins -ge $haut_max ]; then 265 redimensionnement="y" 266 echo "Redimensionnement requis:" 267 268 ratio_l=$(echo "$larg_ins/$larg_max"|bc -l) 269 ratio_h=$(echo "$haut_ins/$haut_max"|bc -l) 270 echo "Ratio horizontal: ratio_l=$ratio_l" 271 echo "Ratio vertical: ratio_h=$ratio_h" 272 273 ratio_l_test=$(echo "$ratio_l*1000000"|bc|cut -d"." -f1) 274 ratio_h_test=$(echo "$ratio_h*1000000"|bc|cut -d"." -f1) 275 #echo "ratio_l_test=$ratio_l_test" 276 #echo "ratio_h_test=$ratio_h_test" 277 278 #if [ $ratio_h -gt $ratio_l ]; then 279 if [ $ratio_h_test -gt $ratio_l_test ]; then 280 larg_ins=$(echo "$larg_ins/$ratio_h"|bc) 281 haut_ins=$(echo "$haut_ins/$ratio_h"|bc) 282 else 283 larg_ins=$(echo "$larg_ins/$ratio_l"|bc) 284 haut_ins=$(echo "$haut_ins/$ratio_l"|bc) 285 fi 286 287 taille_image_inseree="$larg_ins}x$haut_ins}" 288 289 fi 290 291 echo "Dimensions de l'image inseree: taille_image_inseree=$taille_image_inseree" 292 293 # Opaque: 100, transparent:0 294 niveau_dissolve=100 295 296 if [ "$redimensionnement" = "y" ]; then 297 echo "Redimensionnement si necessaire de l'image:" 298 echo "/usr/bin/convert -resize $taille_image_inseree $image_a_inserer $prefix}/tmp/$1_inser.$ext" 299 /usr/bin/convert -resize $taille_image_inseree $image_a_inserer $prefix}/tmp/$1_inser.$ext 300 else 301 echo "Copie temporaire de l'image a inserer:" 302 echo "cp $image_a_inserer $prefix}/tmp/$1_inser.$ext" 303 cp $image_a_inserer /tmp/$1_inser.$ext 304 fi 305 306 echo "Fusion avec le fond:" 307 echo "/usr/bin/composite -gravity center -dissolve $niveau_dissolve /tmp/$1_inser.$ext $dossier_base_fond}/$1_$orig.$ext $dossier_base_fond}/$1_$orig.$ext" 308 /usr/bin/composite -gravity center -dissolve $niveau_dissolve /tmp/$1_inser.$ext $dossier_base_fond}/$1_$orig.$ext $dossier_base_fond}/$1_$orig.$ext 309 310 rm -f /tmp/$1_inser.$ext 311 else 312 # Si il n'y a pas d'image propre a l'utilisateur on cree un lien vers le modele du groupe de l'utilisateur 313 [ ! -f $dossier_base_fond}/$1_$orig.$ext ] && ln -s $dossier_base_fond}/$orig.$ext $dossier_base_fond}/$1_$orig.$ext 314 fi 315 316 # On supprime l'ancien lien symbolique login.jpg pour le recreer 317 rm -f $dossier_base_fond}/$1.$ext 318 ln -s $dossier_base_fond}/$1_$orig.$ext $dossier_base_fond}/$1.$ext 319 320 # Pour pouvoir consulter le fond courant depuis l'interface web 321 # Probleme: Si ce n'est pas un jpeg, l'affichage merdoie... 322 if [ -n "$image_a_inserer" -a -e "$image_a_inserer" ]; then 323 echo "Creation du lien..." 324 if [ "$ext" = "jpg" ]; then 325 ln -s $dossier_base_fond}/$1.$ext $dossier_www_fonds_courants/$1.jpg 326 else 327 convert $dossier_base_fond}/$1.$ext $dossier_base_fond}/$1.jpg 328 ln -s $dossier_base_fond}/$1.jpg $dossier_www_fonds_courants/$1.jpg 329 chown www-se3 $dossier_www_fonds_courants/$1.jpg 330 fi 331 rm -f $image_a_inserer 332 fi 333 334 chown admin $dossier_base_fond}/$1_$orig.$ext 335 rm -f "/tmp/$1.fond.lck"
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |