Ajouter distribution_modeles.sh
première version
This commit is contained in:
parent
ac4ad215ed
commit
b5bf0192f8
1 changed files with 151 additions and 0 deletions
151
distribution_modeles.sh
Normal file
151
distribution_modeles.sh
Normal file
|
|
@ -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"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue