From b5bf0192f82376b7306a348036a68a662bf0a277 Mon Sep 17 00:00:00 2001 From: lprik Date: Wed, 20 Aug 2025 08:33:14 +0000 Subject: [PATCH] Ajouter distribution_modeles.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit première version --- distribution_modeles.sh | 151 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 distribution_modeles.sh diff --git a/distribution_modeles.sh b/distribution_modeles.sh new file mode 100644 index 0000000..2161647 --- /dev/null +++ b/distribution_modeles.sh @@ -0,0 +1,151 @@ +#!/bin/bash +# distribution_modeles_v2.sh - Distribution intelligente avec gestion des versions + +NEXTCLOUD_DATA="/var/www/html/nextcloud/data" +PROF_USERNAME="profsnt" +MODELES_DIR="$NEXTCLOUD_DATA/$PROF_USERNAME/files/Modeles_SNT" + +# Paramètres +CLASSE_CIBLE="$1" # Optionnel : numéro de classe (ex: 2nde1) +CSV_FILE="${2:-eleves_test.csv}" + +echo "📤 Distribution intelligente des modèles SNT" +echo "============================================" + +# Vérifier que le dossier modèles existe +if [[ ! -d "$MODELES_DIR" ]]; then + echo "❌ Erreur: Dossier modèles non trouvé: $MODELES_DIR" + echo "💡 Créez le dossier et organisez vos modèles par Sequence/Activite" + exit 1 +fi + +echo "📁 Dossier modèles : $MODELES_DIR" + +# Afficher les classes disponibles +if [[ -z "$CLASSE_CIBLE" ]]; then + echo "🎯 Distribution vers TOUTES les classes" +else + echo "🎯 Distribution vers la classe : $CLASSE_CIBLE" +fi + +echo "" + +# Lister les modèles disponibles +echo "📚 Modèles disponibles :" +find "$MODELES_DIR" -name "*.docx" -o -name "*.txt" | while read modele; do + modele_relatif=$(echo "$modele" | sed "s|$MODELES_DIR/||") + echo " 📄 $modele_relatif" +done + +echo "" + +# Distribution par élève +nb_distributions=0 +nb_ignores=0 + +while IFS=',' read -r classe nom prenom email motdepasse; do + [[ "$classe" = "Classe" ]] && continue + + # Filtrer par classe si spécifiée + if [[ -n "$CLASSE_CIBLE" && "$classe" != "$CLASSE_CIBLE" ]]; then + continue + fi + + username="${prenom,,}.${nom,,}" + eleve_snt_dir="$NEXTCLOUD_DATA/$username/files/SNT" + + echo "👤 Distribution pour : $username ($classe)" + + # Parcourir tous les modèles + find "$MODELES_DIR" \( -name "*.docx" -o -name "*.txt" \) | while read modele; do + # Extraire la structure Sequence/Activite + modele_relatif=$(echo "$modele" | sed "s|$MODELES_DIR/||") + sequence=$(echo "$modele_relatif" | cut -d'/' -f1) + activite=$(echo "$modele_relatif" | cut -d'/' -f2) + nom_fichier=$(basename "$modele") + + # Vérifier que c'est bien une structure Sequence/Activite + if [[ "$sequence" == "$nom_fichier" || "$activite" == "$nom_fichier" ]]; then + echo " ⚠️ Fichier mal placé ignoré : $modele_relatif" + continue + fi + + # Dossier de destination chez l'élève + dest_dir="$eleve_snt_dir/$sequence/$activite" + + # NOUVELLE LOGIQUE : Distribuer avec _v0 seulement si AUCUNE version n'existe + nom_base=$(echo "$nom_fichier" | sed 's/\.[^.]*$//') # Sans extension + extension=$(echo "$nom_fichier" | sed 's/.*\.//') # Extension seule + dest_file="$dest_dir/${nom_base}_v0.${extension}" + + # RÈGLE : Vérifier qu'AUCUNE version n'existe (v0, v1, v2, etc.) ET pas le fichier original + # 1. Fichier original sans version + fichier_original="$dest_dir/$nom_fichier" + + # 2. Patterns de versions flexibles : _v1, v1, -v1, v1 (avec ou sans séparateur) + versions_existantes=$(find "$dest_dir" -name "${nom_base}*v[0-9]*.$extension" 2>/dev/null) + + if [[ -f "$fichier_original" ]] || [[ -n "$versions_existantes" ]]; then + echo " 🔢 Fichier(s) existant(s) pour : $sequence/$activite/$nom_fichier" + + # Afficher ce qui existe + if [[ -f "$fichier_original" ]]; then + echo " 📄 $(basename "$fichier_original") (sans version)" + fi + + if [[ -n "$versions_existantes" ]]; then + nb_versions=$(echo "$versions_existantes" | wc -l) + echo " 🔢 $nb_versions version(s) :" + echo "$versions_existantes" | while read version; do + echo " 📄 $(basename "$version")" + done + fi + continue + fi + + # Distribution du fichier avec v0 (aucune version n'existe) + mkdir -p "$dest_dir" + + if cp "$modele" "$dest_file" 2>/dev/null; then + echo " ✅ Distribué : $sequence/$activite/${nom_base}_v0.${extension}" + chown www-data:www-data "$dest_file" + ((nb_distributions++)) + else + echo " ❌ Erreur copie : $sequence/$activite/${nom_base}_v0.${extension}" + fi + done + + # Rescan de l'élève pour qu'il voit les nouveaux fichiers + echo " 🔄 Rescan pour $username..." + sudo -u www-data php /var/www/html/nextcloud/occ files:scan "$username" > /dev/null 2>&1 + + # Petit délai pour s'assurer que le rescan est terminé + sleep 1 + +done < "$CSV_FILE" + +echo "" +echo "✅ Distribution terminée" +echo "📊 Statistiques :" +echo " - $nb_distributions fichiers distribués" + +# Rescan final pour s'assurer que tout est visible +echo "" +echo "🔄 Rescan final de tous les élèves concernés..." +while IFS=',' read -r classe nom prenom email motdepasse; do + [[ "$classe" = "Classe" ]] && continue + + # Filtrer par classe si spécifiée + if [[ -n "$CLASSE_CIBLE" && "$classe" != "$CLASSE_CIBLE" ]]; then + continue + fi + + username="${prenom,,}.${nom,,}" + sudo -u www-data php /var/www/html/nextcloud/occ files:scan "$username" > /dev/null 2>&1 + +done < "$CSV_FILE" +echo "" +echo "💡 Usage :" +echo " $0 # Toutes les classes" +echo " $0 2nde1 # Classe spécifique" +echo " $0 2nde3 eleves.csv # Classe + CSV custom" \ No newline at end of file