117 lines
3.5 KiB
Python
117 lines
3.5 KiB
Python
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é.")
|