credit-direct/app/controllers/societes_credit_manager.php
2025-12-18 09:44:42 +01:00

393 lines
12 KiB
PHP

<?php
class CRED_societes_credit_manager extends CRED_base {
/**
* Traiter les valeurs multiples du type de crédit
*/
private function processTypeCredit($type_credit_data) {
if (is_array($type_credit_data)) {
// Nettoyer et valider chaque valeur
$valid_types = array('PAT', 'CH', 'CA');
$cleaned = array();
foreach ($type_credit_data as $type) {
$type = sanitize_text_field($type);
if (in_array($type, $valid_types)) {
$cleaned[] = $type;
}
}
// Retourner un tableau PHP
return array_unique($cleaned);
} elseif (is_string($type_credit_data)) {
// Si c'est une string (chargée depuis DB), la convertir en array
if (!empty($type_credit_data)) {
return explode(',', $type_credit_data);
}
return array();
}
return array();
}
public function __construct() {
// Le hook admin_menu est maintenant géré par le factory
}
public function init() {
}
/**
* Ajouter le sous-menu d'administration sous Crédits
*/
public function add_admin_menu() {
add_submenu_page(
'credit-manager', // Slug du menu parent
'Gestion des Sociétés de Crédit', // Titre de la page
'Sociétés de Crédit', // Titre du sous-menu
'edit_posts', // Capacité requise
'societes-credit-manager', // Slug du sous-menu
array($this, 'societes_credit_manager_interfaces') // Fonction de callback
);
}
/**
* Afficher l'interface de gestion
*/
public function societes_credit_manager_interfaces() {
// Récupérer les sociétés de crédit
$societes_credit = $this->get_societes_credit();
// Inclure le template
include plugin_dir_path(__FILE__) . '../../templates/admin/societes_credit_table.php';
}
/**
* Récupérer toutes les sociétés de crédit
*/
public function get_societes_credit($limit = 100) {
global $wpdb;
$table_name = 'cdf_societes_credit';
// Vérifier si la table existe
if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
return $this->get_test_societes();
}
$sql = "SELECT id, nom, status, type_credit FROM {$table_name} ORDER BY nom ASC";
$results = $wpdb->get_results($sql);
// Si pas de résultats, retourner des données de test
if (empty($results)) {
return $this->get_test_societes();
}
return $results;
}
/**
* Récupérer une société spécifique par ID
*/
public function get_societe_by_id($societe_id) {
global $wpdb;
$table_name = 'cdf_societes_credit';
// Vérifier si la table existe
if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
return null;
}
$sql = $wpdb->prepare("
SELECT id, nom, status, type_credit
FROM {$table_name}
WHERE id = %d
", $societe_id);
return $wpdb->get_row($sql);
}
/**
* Données de test pour le développement
*/
private function get_test_societes() {
return array(
(object) array(
'id' => 1,
'nom' => 'Banque Exemple 1',
'status' => 1
),
(object) array(
'id' => 2,
'nom' => 'Banque Exemple 2',
'status' => 1
),
(object) array(
'id' => 3,
'nom' => 'Banque Désactivée',
'status' => 0
)
);
}
/**
* ========================================
* FONCTIONS CRUD POUR SOCIETES DE CREDIT
* ========================================
*/
/**
* Créer une nouvelle société de crédit
*/
public function ajax_create_societe() {
// Vérifier le nonce
if (!wp_verify_nonce($_POST['nonce'], 'societes_credit_action')) {
wp_die('Sécurité: Nonce invalide');
}
// Vérifier les permissions
if (!current_user_can('edit_posts')) {
wp_die('Permissions insuffisantes');
}
global $wpdb;
$table_name = 'cdf_societes_credit';
// Récupérer et valider les données
$type_credit_raw = isset($_POST['type_credit']) ? $_POST['type_credit'] : [];
error_log('Type credit raw: ' . print_r($type_credit_raw, true));
$data = array(
'nom' => sanitize_text_field($_POST['nom']),
'status' => isset($_POST['status']) && $_POST['status'] === 'true' ? 1 : 0,
'type_credit' => implode(',', $this->processTypeCredit($type_credit_raw))
);
error_log('Type credit processed: ' . $data['type_credit']);
// Validation des champs obligatoires
if (empty($data['nom'])) {
wp_send_json_error('Le nom est obligatoire');
}
// Vérifier si la table existe
if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
wp_send_json_error('Table de base de données non trouvée');
}
// Vérifier si le nom existe déjà
$existing = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$table_name} WHERE nom = %s",
$data['nom']
));
if ($existing > 0) {
wp_send_json_error('Une société avec ce nom existe déjà');
}
// Insérer la nouvelle société
$result = $wpdb->insert($table_name, $data);
if ($result === false) {
wp_send_json_error('Erreur lors de la création de la société');
}
$societe_id = $wpdb->insert_id;
$new_societe = $this->get_societe_by_id($societe_id);
wp_send_json_success(array(
'message' => 'Société créée avec succès',
'societe' => $new_societe
));
}
/**
* Lire une société spécifique
*/
public function ajax_get_societe() {
// Vérifier le nonce
if (!wp_verify_nonce($_POST['nonce'], 'societes_credit_action')) {
wp_die('Sécurité: Nonce invalide');
}
// Vérifier les permissions
if (!current_user_can('edit_posts')) {
wp_die('Permissions insuffisantes');
}
$societe_id = intval($_POST['societe_id']);
if ($societe_id <= 0) {
wp_send_json_error('ID de société invalide');
}
$societe = $this->get_societe_by_id($societe_id);
if (!$societe) {
wp_send_json_error('Société non trouvée');
}
wp_send_json_success(array(
'societe' => $societe
));
}
/**
* Mettre à jour une société existante
*/
public function ajax_update_societe() {
// Vérifier le nonce
if (!wp_verify_nonce($_POST['nonce'], 'societes_credit_action')) {
wp_die('Sécurité: Nonce invalide');
}
// Vérifier les permissions
if (!current_user_can('edit_posts')) {
wp_die('Permissions insuffisantes');
}
global $wpdb;
$table_name = 'cdf_societes_credit';
$societe_id = intval($_POST['societe_id']);
if ($societe_id <= 0) {
wp_send_json_error('ID de société invalide');
}
// Vérifier si la société existe
$existing_societe = $this->get_societe_by_id($societe_id);
if (!$existing_societe) {
wp_send_json_error('Société non trouvée');
}
// Récupérer et valider les données
$type_credit_raw = isset($_POST['type_credit']) ? $_POST['type_credit'] : [];
error_log('Type credit raw: ' . print_r($type_credit_raw, true));
$data = array(
'nom' => sanitize_text_field($_POST['nom']),
'status' => isset($_POST['status']) && $_POST['status'] === 'true' ? 1 : 0,
'type_credit' => implode(',', $this->processTypeCredit($type_credit_raw))
);
error_log('Type credit processed: ' . $data['type_credit']);
// Validation des champs obligatoires
if (empty($data['nom'])) {
wp_send_json_error('Le nom est obligatoire');
}
// Vérifier si le nom existe déjà (sauf pour cette société)
$existing = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$table_name} WHERE nom = %s AND id != %d",
$data['nom'],
$societe_id
));
if ($existing > 0) {
wp_send_json_error('Une autre société avec ce nom existe déjà');
}
// Mettre à jour la société
$result = $wpdb->update(
$table_name,
$data,
array('id' => $societe_id),
array('%s', '%d'),
array('%d')
);
if ($result === false) {
wp_send_json_error('Erreur lors de la mise à jour de la société');
}
$updated_societe = $this->get_societe_by_id($societe_id);
wp_send_json_success(array(
'message' => 'Société mise à jour avec succès',
'societe' => $updated_societe
));
}
/**
* Supprimer une société
*/
public function ajax_delete_societe() {
// Vérifier le nonce
if (!wp_verify_nonce($_POST['nonce'], 'societes_credit_action')) {
wp_die('Sécurité: Nonce invalide');
}
// Vérifier les permissions
if (!current_user_can('edit_posts')) {
wp_die('Permissions insuffisantes');
}
global $wpdb;
$table_name = 'cdf_societes_credit';
$societe_id = intval($_POST['societe_id']);
if ($societe_id <= 0) {
wp_send_json_error('ID de société invalide');
}
// Vérifier si la société existe
$existing_societe = $this->get_societe_by_id($societe_id);
if (!$existing_societe) {
wp_send_json_error('Société non trouvée');
}
// Supprimer la société
$result = $wpdb->delete(
$table_name,
array('id' => $societe_id),
array('%d')
);
if ($result === false) {
wp_send_json_error('Erreur lors de la suppression de la société');
}
wp_send_json_success(array(
'message' => 'Société supprimée avec succès',
'societe_id' => $societe_id
));
}
/**
* Lister toutes les sociétés avec pagination
*/
public function ajax_list_societes() {
// Vérifier le nonce
if (!wp_verify_nonce($_POST['nonce'], 'societes_credit_action')) {
wp_die('Sécurité: Nonce invalide');
}
// Vérifier les permissions
if (!current_user_can('edit_posts')) {
wp_die('Permissions insuffisantes');
}
global $wpdb;
$table_name = 'cdf_societes_credit';
// Vérifier si la table existe
if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
wp_send_json_error('Table de base de données non trouvée');
}
// Compter le total
$total = $wpdb->get_var("SELECT COUNT(*) FROM {$table_name}");
// Récupérer toutes les sociétés
$sql = "SELECT id, nom, status, type_credit FROM {$table_name} ORDER BY nom ASC";
$societes = $wpdb->get_results($sql);
wp_send_json_success(array(
'societes' => $societes,
'total' => intval($total)
));
}
}