#!/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"