354 lines
10 KiB
PHP
354 lines
10 KiB
PHP
<?php
|
|
|
|
class CRED_societes_credit_manager extends CRED_base {
|
|
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 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
|
|
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
|
|
$data = array(
|
|
'nom' => sanitize_text_field($_POST['nom']),
|
|
'status' => isset($_POST['status']) && $_POST['status'] === 'true' ? 1 : 0
|
|
);
|
|
|
|
// 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
|
|
$data = array(
|
|
'nom' => sanitize_text_field($_POST['nom']),
|
|
'status' => isset($_POST['status']) && $_POST['status'] === 'true' ? 1 : 0
|
|
);
|
|
|
|
// 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 FROM {$table_name} ORDER BY nom ASC";
|
|
$societes = $wpdb->get_results($sql);
|
|
|
|
wp_send_json_success(array(
|
|
'societes' => $societes,
|
|
'total' => intval($total)
|
|
));
|
|
}
|
|
}
|
|
|