[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/usr/share/se3/sbin/ -> mkwall.sh (source)

   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"


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1