import csv import requests import json import uuid import re import base64 import sys import mysql.connector from unidecode import unidecode ########################################## # Config ########################################## # Récupération de la config with open('config.json', 'r') as f: config = json.load(f) mydb = mysql.connector.connect( host=config['db_host'], user=config['db_user'], password=config['db_password'], database=config['db_database'] ) cursor = mydb.cursor(buffered=True) # Argument --yes pour auto-valider toutes les suppressions valid_args = {'-y', '--yes'} extra_args = [arg for arg in sys.argv[1:] if arg not in valid_args] if extra_args: print(f"Erreur : argument(s) non reconnu(s) : {' '.join(extra_args)}") print(f"Usage : python {sys.argv[0]} [--yes | -y]") sys.exit(1) auto_confirm = bool(set(sys.argv[1:]) & valid_args) ########################################## # Fonctions ########################################## def check_users_exist(user_id): """Vérifie si l'utilisateur existe dans oc_users.""" cursor.execute("SELECT uid FROM oc_users WHERE uid = %s", (user_id,)) return cursor.fetchone() is not None def remove_row_on_table_for_user(user_id, table): """Supprime toutes les entrées d'une table pour un utilisateur donné.""" query = f"DELETE FROM `{table}` WHERE user_id = %s" cursor.execute(query, (user_id,)) affected = cursor.rowcount mydb.commit() print(f" [{table}] {affected} ligne(s) supprimée(s)") ########################################## # Main ########################################## tables = [ "oc_timemanager_client", "oc_timemanager_commit", "oc_timemanager_project", "oc_timemanager_task", "oc_timemanager_time" ] # Listing de tous les utilisateurs configurés avant toute action print("==========================================") print("Utilisateurs configurés dans config.json :") print("==========================================") valid_users = [] for user_info in config['calendars']: user_id = user_info.get('user_name', '') if not user_id: print(f" ⚠ [{user_id or '???'}] — infos de connexion incomplètes, ignoré") continue exists = check_users_exist(user_id) status = "✔ existe en BDD" if exists else "✘ introuvable en BDD" print(f" • {user_id} — {status}") if exists: valid_users.append(user_info) print() if not valid_users: print("Aucun utilisateur valide à traiter. Fin du script.") cursor.close() mydb.close() sys.exit(0) if auto_confirm: print("Mode auto-confirmation activé (--yes) : toutes les suppressions seront effectuées sans demande.\n") # Traitement par utilisateur for user_info in valid_users: user_id = user_info['user_name'] print("==========================================") print(f"User : {user_id}") print("==========================================") if auto_confirm: confirmed = True else: reponse = input(f"\nSupprimer toutes les données TimeManager de '{user_id}' ? [o/N] : ").strip().lower() confirmed = reponse in ('o', 'oui', 'y', 'yes') if confirmed: print("Suppression en cours...") for table in tables: remove_row_on_table_for_user(user_id, table) print(f"✔ Données de '{user_id}' supprimées.\n") else: print(f"✘ Suppression annulée pour '{user_id}'.\n") cursor.close() mydb.close() print("Terminé.")