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) )); } }