Updates
This commit is contained in:
parent
dec4529d50
commit
0a7c68beca
|
|
@ -33,6 +33,7 @@
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/admin/views/type/view-type-list.php';
|
require_once plugin_dir_path(__FILE__) . 'src/admin/views/type/view-type-list.php';
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/admin/views/type/view-type-edit.php';
|
require_once plugin_dir_path(__FILE__) . 'src/admin/views/type/view-type-edit.php';
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/admin/views/race/view-race-list.php';
|
require_once plugin_dir_path(__FILE__) . 'src/admin/views/race/view-race-list.php';
|
||||||
|
require_once plugin_dir_path(__FILE__) . 'src/admin/views/member/view-member-list.php';
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/admin/views/race/view-race-edit.php';
|
require_once plugin_dir_path(__FILE__) . 'src/admin/views/race/view-race-edit.php';
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/admin/views/race_user/view-race-user-list.php';
|
require_once plugin_dir_path(__FILE__) . 'src/admin/views/race_user/view-race-user-list.php';
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/admin/views/race_user/view-race-user-edit.php';
|
require_once plugin_dir_path(__FILE__) . 'src/admin/views/race_user/view-race-user-edit.php';
|
||||||
|
|
@ -52,6 +53,8 @@
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/class/race/Race_User.php';
|
require_once plugin_dir_path(__FILE__) . 'src/class/race/Race_User.php';
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/class/race/Race_Material.php';
|
require_once plugin_dir_path(__FILE__) . 'src/class/race/Race_Material.php';
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/class/race/Race.php';
|
require_once plugin_dir_path(__FILE__) . 'src/class/race/Race.php';
|
||||||
|
|
||||||
|
require_once plugin_dir_path(__FILE__) . 'src/class/member/Member.php';
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/class/season/Season.php';
|
require_once plugin_dir_path(__FILE__) . 'src/class/season/Season.php';
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/library/functions.php';
|
require_once plugin_dir_path(__FILE__) . 'src/library/functions.php';
|
||||||
require_once plugin_dir_path(__FILE__) . 'src/frontend/cass-shortcode-calendar-global.php';
|
require_once plugin_dir_path(__FILE__) . 'src/frontend/cass-shortcode-calendar-global.php';
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ class CASS_Dashboard_Menu
|
||||||
{
|
{
|
||||||
//Options
|
//Options
|
||||||
global $cass_admin_race_list;
|
global $cass_admin_race_list;
|
||||||
|
global $cass_admin_member_list;
|
||||||
global $cass_admin_race_user_list;
|
global $cass_admin_race_user_list;
|
||||||
global $cass_admin_race_user_all_courses_list;
|
global $cass_admin_race_user_all_courses_list;
|
||||||
global $cass_admin_group_list;
|
global $cass_admin_group_list;
|
||||||
|
|
@ -52,6 +53,15 @@ class CASS_Dashboard_Menu
|
||||||
'cass_admin_dashboard'
|
'cass_admin_dashboard'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$cass_admin_member_list = add_submenu_page(
|
||||||
|
'cass-settings',
|
||||||
|
__('Liste des membres', 'cass-admin-member-list'),
|
||||||
|
'Liste des membres',
|
||||||
|
'cass_rl',
|
||||||
|
'cass-admin-member-list',
|
||||||
|
'view_member_list_initialisation'
|
||||||
|
);
|
||||||
|
|
||||||
$cass_admin_race_list = add_submenu_page(
|
$cass_admin_race_list = add_submenu_page(
|
||||||
'cass-settings',
|
'cass-settings',
|
||||||
__('Liste des courses', 'cass-admin-race-list'),
|
__('Liste des courses', 'cass-admin-race-list'),
|
||||||
|
|
@ -227,6 +237,7 @@ class CASS_Dashboard_Menu
|
||||||
add_action("load-$cass_admin_material_list", "cass_admin_material_list");
|
add_action("load-$cass_admin_material_list", "cass_admin_material_list");
|
||||||
add_action("load-$cass_admin_season_list", "cass_admin_season_list");
|
add_action("load-$cass_admin_season_list", "cass_admin_season_list");
|
||||||
add_action("load-$cass_admin_type_list", "cass_admin_type_list");
|
add_action("load-$cass_admin_type_list", "cass_admin_type_list");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,10 +22,18 @@ class CASS_User_Profile_Extention
|
||||||
$cassAddress =get_user_meta($user->ID, 'cassAddress', true);
|
$cassAddress =get_user_meta($user->ID, 'cassAddress', true);
|
||||||
$cassNPA = get_user_meta($user->ID, 'cassNPA', true);
|
$cassNPA = get_user_meta($user->ID, 'cassNPA', true);
|
||||||
$cassLocality = get_user_meta($user->ID, 'cassLocality', true);
|
$cassLocality = get_user_meta($user->ID, 'cassLocality', true);
|
||||||
|
$cassMemberOfSion = get_user_meta($user->ID, 'cassMemberOfSion', true);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<h3>Club Alpin Suisse de Sion</h3>
|
<h3>Club Alpin Suisse de Sion</h3>
|
||||||
<table class="form-table">
|
<table class="form-table">
|
||||||
|
<tr>
|
||||||
|
<th><label for="cassMemberOfSion">Membre de Sion</label></th>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" name="cassMemberOfSion" id="cassMemberOfSion" value="1" <?php if ($cassMemberOfSion == 1) {
|
||||||
|
echo "checked";
|
||||||
|
} ?> />
|
||||||
|
</td>
|
||||||
<tr>
|
<tr>
|
||||||
<th><label for="cassMemberNo">N° de membre</label></th>
|
<th><label for="cassMemberNo">N° de membre</label></th>
|
||||||
<td>
|
<td>
|
||||||
|
|
@ -205,6 +213,7 @@ class CASS_User_Profile_Extention
|
||||||
update_user_meta($user_id, 'cassAddress', SantizeGlobal($_POST['cassAddress']));
|
update_user_meta($user_id, 'cassAddress', SantizeGlobal($_POST['cassAddress']));
|
||||||
update_user_meta($user_id, 'cassNPA', SantizeGlobal($_POST['cassNPA']));
|
update_user_meta($user_id, 'cassNPA', SantizeGlobal($_POST['cassNPA']));
|
||||||
update_user_meta($user_id, 'cassLocality', SantizeGlobal($_POST['cassLocality']));
|
update_user_meta($user_id, 'cassLocality', SantizeGlobal($_POST['cassLocality']));
|
||||||
|
update_user_meta($user_id, 'cassMemberOfSion', $_POST['cassMemberOfSion']);
|
||||||
}
|
}
|
||||||
|
|
||||||
//No de membre
|
//No de membre
|
||||||
|
|
@ -333,6 +342,28 @@ class CASS_User_Profile_Extention
|
||||||
return $columns;
|
return $columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//MemberOfSion
|
||||||
|
add_filter('manage_users_columns', 'add_cassMemberOfSion');
|
||||||
|
function add_cassMemberOfSion($columns)
|
||||||
|
{
|
||||||
|
$columns['cassMemberOfSion'] = 'Membre de Sion';
|
||||||
|
return $columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
add_action('manage_users_custom_column', 'add_cassMemberOfSion_column_content', 10, 3);
|
||||||
|
function add_cassMemberOfSion_column_content($value, $column_name, $user_id)
|
||||||
|
{
|
||||||
|
$user = get_userdata($user_id);
|
||||||
|
if ('cassMemberOfSion' == $column_name) {
|
||||||
|
if (get_user_meta(intval($user->ID), 'cassMemberOfSion', true) == 1) {
|
||||||
|
return "Oui";
|
||||||
|
} else {
|
||||||
|
return "Non";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
add_action('manage_users_custom_column', 'add_cassLocality_column_content', 10, 3);
|
add_action('manage_users_custom_column', 'add_cassLocality_column_content', 10, 3);
|
||||||
function add_cassLocality_column_content($value, $column_name, $user_id)
|
function add_cassLocality_column_content($value, $column_name, $user_id)
|
||||||
|
|
|
||||||
267
src/admin/views/member/view-member-list.php
Normal file
267
src/admin/views/member/view-member-list.php
Normal file
|
|
@ -0,0 +1,267 @@
|
||||||
|
<?php
|
||||||
|
if (!class_exists('WP_List_Table')) {
|
||||||
|
require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php');
|
||||||
|
}
|
||||||
|
|
||||||
|
function view_member_list_initialisation()
|
||||||
|
{
|
||||||
|
echo "
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
document.getElementById('bulk-action-selector-top').disabled = true;
|
||||||
|
document.getElementById('doaction').disabled = true;
|
||||||
|
document.getElementById('bulk-action-selector-bottom').disabled = true;
|
||||||
|
document.getElementById('doaction2').disabled = true;
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
";
|
||||||
|
|
||||||
|
$table = new CASS_View_Member_List();
|
||||||
|
?>
|
||||||
|
<div class="wrap">
|
||||||
|
<h2>Liste des membres</h2>
|
||||||
|
<?php
|
||||||
|
// Ajouter la boîte de recherche
|
||||||
|
$table->search_box('Rechercher par nom', 'lastname');
|
||||||
|
?>
|
||||||
|
<?php
|
||||||
|
$table->prepare_items();
|
||||||
|
echo "<form id='cass-admin-race-list' method='post'>";
|
||||||
|
$table->display();
|
||||||
|
echo "</form>";
|
||||||
|
?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
class CASS_View_Member_List extends WP_List_Table
|
||||||
|
{
|
||||||
|
private $table_data;
|
||||||
|
|
||||||
|
function get_columns()
|
||||||
|
{
|
||||||
|
$columns = array(
|
||||||
|
'role' => __('Rôle','role-content'),
|
||||||
|
'lastname' => __('Nom', 'cass-race-lastname-content'),
|
||||||
|
'firstname' => __('Prénom', 'cass-race-firstname-content'),
|
||||||
|
'cassMemberNo' => __('Numéro de membre', 'cass-race-member-no-content'),
|
||||||
|
'cassLevel' => __('Niveau', 'cass-race-level-content'),
|
||||||
|
'cassLevelTechSki' => __('Niveau ski', 'cass-race-level-tech-ski-content'),
|
||||||
|
'cassLevelClimbing' => __('Niveau escalade','cass-race-level-climbing-content'),
|
||||||
|
'cassLevelMountaineering' => __('Niveau alpinitme', 'cass-race-level-mountaineering-content'),
|
||||||
|
'cassGroup' => __('Groupe', 'cass-race-group-content'),
|
||||||
|
'cassTelephone' => __('Téléphone', 'cass-race-telephone-content'),
|
||||||
|
'cassAddress' => __('Adresse', 'cass-race-address-content'),
|
||||||
|
'cassNPA' => __('Code postal', 'cass-race-npa-content'),
|
||||||
|
'cassLocality' => __('Localité', 'cass-race-locality-content'),
|
||||||
|
'email' => __('Email', 'cass-race-email-content'),
|
||||||
|
);
|
||||||
|
return $columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function prepare_items($search = '')
|
||||||
|
{
|
||||||
|
|
||||||
|
$search = isset($_POST['s']) ? sanitize_text_field($_POST['s']) : '';
|
||||||
|
|
||||||
|
$this->table_data = $this->get_table_data($search);
|
||||||
|
|
||||||
|
$columns = $this->get_columns();
|
||||||
|
$hidden = array();
|
||||||
|
$sortable = $this->get_sortable_columns();
|
||||||
|
$this->_column_headers = array(
|
||||||
|
$this->get_columns(),
|
||||||
|
array(), // Colonnes masquées
|
||||||
|
$this->get_sortable_columns()
|
||||||
|
);
|
||||||
|
|
||||||
|
usort($this->table_data, array(&$this, 'usort_reorder'));
|
||||||
|
|
||||||
|
$per_page = 20;
|
||||||
|
$current_page = $this->get_pagenum();
|
||||||
|
$total_items = count($this->table_data);
|
||||||
|
|
||||||
|
// Découper les données pour la pagination
|
||||||
|
$this->table_data = array_slice($this->table_data, (($current_page - 1) * $per_page), $per_page);
|
||||||
|
|
||||||
|
$this->set_pagination_args(
|
||||||
|
array(
|
||||||
|
'total_items' => $total_items,
|
||||||
|
'per_page' => $per_page,
|
||||||
|
'total_pages' => ceil($total_items / $per_page),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->items = $this->table_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private function get_table_data($search = '')
|
||||||
|
{
|
||||||
|
// Récupérer les données des membres
|
||||||
|
$members = Member::sqlWPTable();
|
||||||
|
|
||||||
|
// Initialiser un tableau pour stocker les données filtrées
|
||||||
|
$filtered_data = array();
|
||||||
|
|
||||||
|
// Parcourir les membres et appliquer le filtre
|
||||||
|
foreach ($members as $member) {
|
||||||
|
if (empty($search) || stripos($member->getLastname(), $search) !== false) {
|
||||||
|
$filtered_data[] = $member;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retourner les données filtrées
|
||||||
|
return $filtered_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function column_default($item, $column_name)
|
||||||
|
{
|
||||||
|
switch ($column_name) {
|
||||||
|
case 'role':
|
||||||
|
return $item->getRole();
|
||||||
|
case 'lastname':
|
||||||
|
return $item->getLastname();
|
||||||
|
case 'firstname':
|
||||||
|
return $item->getFirstname();
|
||||||
|
case 'cassMemberNo':
|
||||||
|
return $item->getCassMemberNo();
|
||||||
|
case 'cassLevel':
|
||||||
|
return $item->getCassLevel();
|
||||||
|
case 'cassLevelTechSki':
|
||||||
|
return $item->getCassLevelTechSki();
|
||||||
|
case 'cassLevelClimbing':
|
||||||
|
return $item->getCassLevelClimbing();
|
||||||
|
case 'cassLevelMountaineering':
|
||||||
|
return $item->getCassLevelMountaineering();
|
||||||
|
case 'cassGroup':
|
||||||
|
return $item->getCassGroup();
|
||||||
|
case 'cassTelephone':
|
||||||
|
return $item->getCassTelephone();
|
||||||
|
case 'cassAddress':
|
||||||
|
return $item->getCassAddress();
|
||||||
|
case 'cassNPA':
|
||||||
|
return $item->getCassNPA();
|
||||||
|
case 'cassLocality':
|
||||||
|
return $item->getCassLocality();
|
||||||
|
case 'email':
|
||||||
|
return $item->getEmail();
|
||||||
|
default:
|
||||||
|
return ''; // Valeur par défaut pour les colonnes non définies
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function get_sortable_columns()
|
||||||
|
{
|
||||||
|
$sortable_columns = array(
|
||||||
|
'role' => array('role', false),
|
||||||
|
'lastname' => array('lastname', true),
|
||||||
|
'firstname' => array('firstname', false),
|
||||||
|
'cassMemberNo' => array('cassMemberNo', false),
|
||||||
|
'cassLevel' => array('cassLevel', false),
|
||||||
|
'cassLevelTechSki' => array('cassLevelTechSki', false),
|
||||||
|
'cassLevelClimbing' => array('cassLevelClimbing', false),
|
||||||
|
'cassLevelMountaineering' => array('cassLevelMountaineering', false),
|
||||||
|
'cassGroup' => array('cassGroup', false),
|
||||||
|
'cassTelephone' => array('cassTelephone', false),
|
||||||
|
'email' => array('email', false),
|
||||||
|
);
|
||||||
|
return $sortable_columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
function usort_reorder($a, $b)
|
||||||
|
{
|
||||||
|
// Vérifie si une colonne de tri a été spécifiée dans l'URL, sinon utilise 'lastname' par défaut
|
||||||
|
$orderby = !empty($_GET['orderby']) ? $_GET['orderby'] : 'lastname';
|
||||||
|
|
||||||
|
// Vérifie si un ordre a été spécifié dans l'URL, sinon utilise 'asc' par défaut
|
||||||
|
$order = !empty($_GET['order']) ? $_GET['order'] : 'asc';
|
||||||
|
|
||||||
|
// Compare les valeurs des colonnes en fonction de 'orderby'
|
||||||
|
switch ($orderby) {
|
||||||
|
case 'lastname':
|
||||||
|
$result = strcmp($a->getLastname(), $b->getLastname());
|
||||||
|
break;
|
||||||
|
case 'firstname':
|
||||||
|
$result = strcmp($a->getFirstname(), $b->getFirstname());
|
||||||
|
break;
|
||||||
|
case 'role':
|
||||||
|
$result = strcmp($a->getRole(), $b->getRole());
|
||||||
|
break;
|
||||||
|
case 'cassMemberNo':
|
||||||
|
$result = strcmp($a->getCassMemberNo(), $b->getCassMemberNo());
|
||||||
|
break;
|
||||||
|
case 'cassLevel':
|
||||||
|
$result = strcmp($a->getCassLevel(), $b->getCassLevel());
|
||||||
|
break;
|
||||||
|
case 'cassLevelTechSki':
|
||||||
|
$result = strcmp($a->getCassLevelTechSki(), $b->getCassLevelTechSki());
|
||||||
|
break;
|
||||||
|
case 'cassLevelClimbing':
|
||||||
|
$result = strcmp($a->getCassLevelClimbing(), $b->getCassLevelClimbing());
|
||||||
|
break;
|
||||||
|
case 'cassLevelMountaineering':
|
||||||
|
$result = strcmp($a->getCassLevelMountaineering(), $b->getCassLevelMountaineering());
|
||||||
|
break;
|
||||||
|
case 'cassGroup':
|
||||||
|
$result = strcmp($a->getCassGroup(), $b->getCassGroup());
|
||||||
|
break;
|
||||||
|
case 'cassTelephone':
|
||||||
|
$result = strcmp($a->getCassTelephone(), $b->getCassTelephone());
|
||||||
|
break;
|
||||||
|
case 'cassAddress':
|
||||||
|
$result = strcmp($a->getCassAddress(), $b->getCassAddress());
|
||||||
|
break;
|
||||||
|
case 'cassNPA':
|
||||||
|
$result = strcmp($a->getCassNPA(), $b->getCassNPA());
|
||||||
|
break;
|
||||||
|
case 'cassLocality':
|
||||||
|
$result = strcmp($a->getCassLocality(), $b->getCassLocality());
|
||||||
|
break;
|
||||||
|
case 'email':
|
||||||
|
$result = strcmp($a->getEmail(), $b->getEmail());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$result = 0; // Aucun tri si la colonne n'est pas reconnue
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retourne le résultat en fonction de l'ordre spécifié
|
||||||
|
return ($order === 'asc') ? $result : -$result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function column_lastname($item)
|
||||||
|
{
|
||||||
|
$ID_WPUser = $item->getID();
|
||||||
|
$actions = array(
|
||||||
|
'allCourses' => sprintf('<a href="' . admin_url() . "admin.php?page=cass-admin-race-user-all-courses-list&element=" . $ID_WPUser . '">Liste de ses courses</a>', $_REQUEST['page'], 'allCourses', $ID_WPUser),
|
||||||
|
);
|
||||||
|
|
||||||
|
return sprintf('%1$s %2$s', ReadGlobal($item->getLastname()), $this->row_actions($actions));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function column_firstname($item)
|
||||||
|
{
|
||||||
|
return $item->getFirstname();
|
||||||
|
}
|
||||||
|
|
||||||
|
function search_box($text, $input_id)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
$input_id = $input_id . '-search-input';
|
||||||
|
|
||||||
|
echo '<form method="post">';
|
||||||
|
echo '<p class="search-box">';
|
||||||
|
echo '<label class="screen-reader-text" for="' . esc_attr($input_id) . '">' . $text . ':</label>';
|
||||||
|
echo '<input type="search" id="' . esc_attr($input_id) . '" name="s" value="' . esc_attr($_REQUEST['s'] ?? '') . '" />';
|
||||||
|
echo '<button type="submit" class="button">' . esc_attr($text) . '</button>';
|
||||||
|
echo '</p>';
|
||||||
|
echo '</form>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -65,6 +65,10 @@ function view_race_list_initialisation()
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
";
|
";
|
||||||
|
|
||||||
|
$table->search_box('Rechercher par Adjoint', 'IDWPUser_Deputy');
|
||||||
|
$table->search_box('Rechercher par CdC', 'IDWPUser_RL');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
@ -127,7 +131,7 @@ class CASS_View_Race_List extends WP_List_Table
|
||||||
'IDWPUser_Deputy' => __('Adjoint', 'cass-race-deputy-content'),
|
'IDWPUser_Deputy' => __('Adjoint', 'cass-race-deputy-content'),
|
||||||
'start' => __('Début', 'cass-race-start-content'),
|
'start' => __('Début', 'cass-race-start-content'),
|
||||||
'end' => __('Fin', 'cass-race-end-content'),
|
'end' => __('Fin', 'cass-race-end-content'),
|
||||||
'subscriptionEnable' => __('Ins. activée','cass-race-subscription-enable-content'),
|
'subscriptionEnable' => __('Ins. activée', 'cass-race-subscription-enable-content'),
|
||||||
'subscriptionStart' => __('Ins. début', 'cass-race-start-content'),
|
'subscriptionStart' => __('Ins. début', 'cass-race-start-content'),
|
||||||
'subscriptionEnd' => __('Ins. fin', 'cass-race-end-content'),
|
'subscriptionEnd' => __('Ins. fin', 'cass-race-end-content'),
|
||||||
'subscriptionCount' => __('Nbre inscrit', 'cass-race-count-subscribed-content'),
|
'subscriptionCount' => __('Nbre inscrit', 'cass-race-count-subscribed-content'),
|
||||||
|
|
@ -161,6 +165,9 @@ class CASS_View_Race_List extends WP_List_Table
|
||||||
//Result of bulk action
|
//Result of bulk action
|
||||||
$action = $this->current_action();
|
$action = $this->current_action();
|
||||||
|
|
||||||
|
$search_CdC = isset($_POST['IDWPUser_RL-search-input']) ? $_POST['IDWPUser_RL-search-input'] : '';
|
||||||
|
$search_Deputy = isset($_POST['IDWPUser_Deputy-search-input']) ? $_POST['IDWPUser_Deputy-search-input'] : '';
|
||||||
|
|
||||||
$selected_ids = isset($_POST[$this->_args['singular']]) ? $_POST[$this->_args['singular']] : array();
|
$selected_ids = isset($_POST[$this->_args['singular']]) ? $_POST[$this->_args['singular']] : array();
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -180,7 +187,7 @@ class CASS_View_Race_List extends WP_List_Table
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->table_data = $this->get_table_data();
|
$this->table_data = $this->get_table_data($search_CdC, $search_Deputy);
|
||||||
|
|
||||||
$columns = $this->get_columns();
|
$columns = $this->get_columns();
|
||||||
$hidden = array('ID');
|
$hidden = array('ID');
|
||||||
|
|
@ -210,7 +217,7 @@ class CASS_View_Race_List extends WP_List_Table
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get table data
|
// Get table data
|
||||||
private function get_table_data()
|
private function get_table_data($search_CdC, $search_Deputy)
|
||||||
{
|
{
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
|
|
@ -220,9 +227,11 @@ class CASS_View_Race_List extends WP_List_Table
|
||||||
// Obtenez l'ID de la saison en cours
|
// Obtenez l'ID de la saison en cours
|
||||||
$currentSeasonID = intval($season->getCurrentSeason());
|
$currentSeasonID = intval($season->getCurrentSeason());
|
||||||
|
|
||||||
|
$results = null;
|
||||||
|
|
||||||
if (isset($_POST["IDSeason"]) && $_POST["IDSeason"] == "all") {
|
if (isset($_POST["IDSeason"]) && $_POST["IDSeason"] == "all") {
|
||||||
// Sélectionner toutes les courses
|
// Sélectionner toutes les courses
|
||||||
return $wpdb->get_results(
|
$results = $wpdb->get_results(
|
||||||
"SELECT * from {$table}",
|
"SELECT * from {$table}",
|
||||||
ARRAY_A
|
ARRAY_A
|
||||||
|
|
||||||
|
|
@ -234,18 +243,57 @@ class CASS_View_Race_List extends WP_List_Table
|
||||||
$wpdb->prepare("SELECT * FROM {$table} WHERE IDSeason = %d", $IDSeason),
|
$wpdb->prepare("SELECT * FROM {$table} WHERE IDSeason = %d", $IDSeason),
|
||||||
ARRAY_A
|
ARRAY_A
|
||||||
);
|
);
|
||||||
|
|
||||||
return $results;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Utilisez l'ID de la saison en cours pour filtrer les résultats
|
// Utilisez l'ID de la saison en cours pour filtrer les résultats
|
||||||
$results = $wpdb->get_results(
|
$results = $wpdb->get_results("SELECT * FROM {$table}", ARRAY_A);
|
||||||
$wpdb->prepare("SELECT * FROM {$table} WHERE IDSeason = %d", $currentSeasonID),
|
|
||||||
ARRAY_A
|
|
||||||
);
|
|
||||||
|
|
||||||
return $results;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Filter on CdC or Deputy
|
||||||
|
$filtered_data = array();
|
||||||
|
|
||||||
|
// Charger tous les utilisateurs avec le rôle 'CASS_MEMBER'
|
||||||
|
$args = array(
|
||||||
|
'role' => 'CASS_MEMBER',
|
||||||
|
'orderby' => 'user_nicename',
|
||||||
|
'order' => 'ASC'
|
||||||
|
);
|
||||||
|
$users = get_users($args);
|
||||||
|
|
||||||
|
for ($i = 0; $i < count($results); $i++) {
|
||||||
|
$result = $results[$i];
|
||||||
|
|
||||||
|
$ItemCdCName = "";
|
||||||
|
$ItemDeputyName = "";
|
||||||
|
|
||||||
|
foreach ($users as $user) {
|
||||||
|
if ($result['IDWPUser_RL'] == $user->id) {
|
||||||
|
$ItemCdCName = $user->last_name . " " . $user->first_name;
|
||||||
|
}
|
||||||
|
if ($result['IDWPUser_Deputy'] == $user->id) {
|
||||||
|
$ItemDeputyName = $user->last_name . " " . $user->first_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($search_CdC != "" && $search_Deputy != ""){
|
||||||
|
if (strpos($ItemCdCName, $search_CdC) !== false && strpos($ItemDeputyName, $search_Deputy) !== false) {
|
||||||
|
$filtered_data[] = $result;
|
||||||
|
}
|
||||||
|
} else if($search_CdC != ""){
|
||||||
|
if (strpos($ItemCdCName, $search_CdC) !== false) {
|
||||||
|
$filtered_data[] = $result;
|
||||||
|
}
|
||||||
|
} else if($search_Deputy != ""){
|
||||||
|
if (strpos($ItemDeputyName, $search_Deputy) !== false) {
|
||||||
|
$filtered_data[] = $result;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$filtered_data[] = $result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $filtered_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
function column_default($item, $column_name)
|
function column_default($item, $column_name)
|
||||||
|
|
@ -280,7 +328,7 @@ class CASS_View_Race_List extends WP_List_Table
|
||||||
$retuned = "";
|
$retuned = "";
|
||||||
foreach ($users as $user) {
|
foreach ($users as $user) {
|
||||||
if ($item[$column_name] == $user->id) {
|
if ($item[$column_name] == $user->id) {
|
||||||
$retuned = $user->display_name;
|
$retuned = $user->last_name . " " . $user->first_name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $retuned;
|
return $retuned;
|
||||||
|
|
@ -294,7 +342,7 @@ class CASS_View_Race_List extends WP_List_Table
|
||||||
$retuned = "";
|
$retuned = "";
|
||||||
foreach ($users as $user) {
|
foreach ($users as $user) {
|
||||||
if ($item[$column_name] == $user->id) {
|
if ($item[$column_name] == $user->id) {
|
||||||
$retuned = $user->display_name;
|
$retuned = $user->last_name . " " . $user->first_name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $retuned;
|
return $retuned;
|
||||||
|
|
@ -424,6 +472,19 @@ class CASS_View_Race_List extends WP_List_Table
|
||||||
return sprintf('%1$s %2$s', ReadGlobal($item['name']), $this->row_actions($actions));
|
return sprintf('%1$s %2$s', ReadGlobal($item['name']), $this->row_actions($actions));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function search_box($text, $input_id)
|
||||||
|
{
|
||||||
|
$input_id = $input_id . '-search-input';
|
||||||
|
|
||||||
|
echo '<form method="post">';
|
||||||
|
echo '<p class="search-box">';
|
||||||
|
echo '<label class="screen-reader-text" for="' . esc_attr($input_id) . '">' . $text . ':</label>';
|
||||||
|
echo '<input type="search" id="' . esc_attr($input_id) . '" name="' . esc_attr($input_id) . '" value="' . esc_attr($_REQUEST[$input_id] ?? '') . '" />';
|
||||||
|
echo '<button type="submit" class="button">' . esc_attr($text) . '</button>';
|
||||||
|
echo '</p>';
|
||||||
|
echo '</form>';
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,92 @@ function view_race_user_list_initialisation()
|
||||||
exportParticipantListOfRace(intval($_GET["IDRace"]));
|
exportParticipantListOfRace(intval($_GET["IDRace"]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Download model
|
||||||
|
if (isset($_POST["downloadParticipantMailCSV"]) && intval($_POST["downloadParticipantMailCSV"]) == 1) {
|
||||||
|
$mails = exportParticipantListOfRaceMailOnly(intval($_GET["IDRace"]));
|
||||||
|
|
||||||
|
// Convert emails to a string separated by semicolons
|
||||||
|
$mails = implode(";", $mails);
|
||||||
|
|
||||||
|
// Create the 'cass' folder inside the uploads directory
|
||||||
|
$directoryCass = 'cass';
|
||||||
|
$upload_dir = wp_upload_dir();
|
||||||
|
$upload_path = $upload_dir['basedir'];
|
||||||
|
$subdirectory_path = $upload_path . '/' . $directoryCass;
|
||||||
|
if (!file_exists($subdirectory_path)) {
|
||||||
|
wp_mkdir_p($subdirectory_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Path for the CSV file
|
||||||
|
$modelCSVExportFile = $subdirectory_path . "/" . "participants.csv";
|
||||||
|
|
||||||
|
// Create and write the emails into the CSV file
|
||||||
|
file_put_contents($modelCSVExportFile, $mails);
|
||||||
|
|
||||||
|
// Generate the full URL for the file
|
||||||
|
$url_complet = home_url() . '/wp-content/uploads/' . $directoryCass . '/participants.csv';
|
||||||
|
|
||||||
|
// Open the file in a new browser tab
|
||||||
|
echo "<script>window.open('$url_complet', '_blank');</script>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (isset($_POST["copyParticipantMail"]) && intval($_POST["copyParticipantMail"]) == 1) {
|
||||||
|
$mails = exportParticipantListOfRaceMailOnly(intval($_GET["IDRace"]));
|
||||||
|
|
||||||
|
// Convertir les mails en une chaîne séparée par des ";"
|
||||||
|
$mails = implode(";", $mails);
|
||||||
|
|
||||||
|
// Générer le script JavaScript pour afficher une modale
|
||||||
|
echo "<script>
|
||||||
|
// Création de la modale
|
||||||
|
const modal = document.createElement('div');
|
||||||
|
modal.style.position = 'fixed';
|
||||||
|
modal.style.top = '50%';
|
||||||
|
modal.style.left = '50%';
|
||||||
|
modal.style.transform = 'translate(-50%, -50%)';
|
||||||
|
modal.style.background = '#fff';
|
||||||
|
modal.style.padding = '20px';
|
||||||
|
modal.style.border = '1px solid #ccc';
|
||||||
|
modal.style.boxShadow = '0px 4px 8px rgba(0, 0, 0, 0.2)';
|
||||||
|
modal.style.zIndex = '1000';
|
||||||
|
modal.style.width = '400px';
|
||||||
|
modal.style.textAlign = 'center';
|
||||||
|
|
||||||
|
// Contenu de la modale
|
||||||
|
modal.innerHTML = `
|
||||||
|
<h3>Liste des e-mails</h3>
|
||||||
|
<textarea id='emailList' style='width: 100%; height: 100px; margin-bottom: 15px;'>" . $mails . "</textarea>
|
||||||
|
<div>
|
||||||
|
<button id='copyButton' style='padding: 10px 15px; margin-right: 10px;'>Copier</button>
|
||||||
|
<button id='closeButton' style='padding: 10px 15px;'>Fermer</button>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
// Ajout de la modale au document
|
||||||
|
document.body.appendChild(modal);
|
||||||
|
|
||||||
|
// Fonction pour copier dans le presse-papiers
|
||||||
|
document.getElementById('copyButton').addEventListener('click', async () => {
|
||||||
|
const text = document.getElementById('emailList').value;
|
||||||
|
try {
|
||||||
|
await navigator.clipboard.writeText(text);
|
||||||
|
alert('La liste des e-mails a été copiée dans le presse-papiers.');
|
||||||
|
} catch (err) {
|
||||||
|
alert('Erreur : Impossible de copier les e-mails.');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Fonction pour fermer la modale
|
||||||
|
document.getElementById('closeButton').addEventListener('click', () => {
|
||||||
|
modal.remove();
|
||||||
|
});
|
||||||
|
</script>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$table = new CASS_View_Race_User_List();
|
$table = new CASS_View_Race_User_List();
|
||||||
?>
|
?>
|
||||||
|
|
@ -94,20 +180,41 @@ function view_race_user_list_initialisation()
|
||||||
<?php echo ReadGlobal($result->name); ?>
|
<?php echo ReadGlobal($result->name); ?>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
// Ajouter la boîte de recherche
|
||||||
|
$table->search_box('Rechercher par nom', 'lastname');
|
||||||
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
<div style="display: flex; gap: 10px; align-items: center;">
|
||||||
<form action='<?php echo admin_url() . "admin.php?page=cass-admin-race-user-edit"; ?>' method='POST'>
|
<form action='<?php echo admin_url() . "admin.php?page=cass-admin-race-user-edit"; ?>' method='POST'>
|
||||||
<input type="hidden" id="stateForm" name="stateForm" value="create">
|
<input type="hidden" id="stateForm" name="stateForm" value="create">
|
||||||
<input type="hidden" id="IDRace" name="IDRace" value="<?php echo intval($_GET['IDRace']) ?>">
|
<input type="hidden" id="IDRace" name="IDRace" value="<?php echo intval($_GET['IDRace']) ?>">
|
||||||
<button type="submit" class="button-secondary" id="refresh-cache">Ajouter</button>
|
<button type="submit" class="button-secondary" id="refresh-cache">Ajouter</button>
|
||||||
<a href='<?php echo admin_url() . "admin.php?page=cass-admin-race-list"; ?>' class="button">Retour aux
|
|
||||||
courses</a>
|
|
||||||
</form>
|
</form>
|
||||||
<br>
|
|
||||||
|
<form action='<?php echo admin_url() . "admin.php?page=cass-admin-race-list"; ?>' method='get'>
|
||||||
|
<button type="submit" class="button">Retour aux courses</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
<form action='#' method='post'>
|
<form action='#' method='post'>
|
||||||
<input type='hidden' id='downloadParticipant' name='downloadParticipant' value='1'>
|
<input type='hidden' id='downloadParticipant' name='downloadParticipant' value='1'>
|
||||||
<button type='submit' class='button-secondary' id='refresh-cache'>Télécharger la liste des participants
|
<button type='submit' class='button-secondary' id='refresh-cache'>Télécharger la liste des
|
||||||
</button>
|
participants</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
<form action='#' method='post'>
|
||||||
|
<input type='hidden' id='downloadParticipantMailCSV' name='downloadParticipantMailCSV' value='1'>
|
||||||
|
<button type='submit' class='button-secondary' id='refresh-cache'>Télécharger les mails des participants
|
||||||
|
(CSV)</button>
|
||||||
|
</form>
|
||||||
|
<form action='#' method='post'>
|
||||||
|
<input type='hidden' id='copyParticipantMail' name='copyParticipantMail' value='1'>
|
||||||
|
<button type='submit' class='button-secondary' id='refresh-cache'>Copier les mails des participants</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<button id='btnOpenModal' hidden
|
<button id='btnOpenModal' hidden
|
||||||
class="modal-open bg-transparent border border-gray-500 hover:border-indigo-500 text-gray-500 hover:text-indigo-500 font-bold py-2 px-4 rounded-full">Validation
|
class="modal-open bg-transparent border border-gray-500 hover:border-indigo-500 text-gray-500 hover:text-indigo-500 font-bold py-2 px-4 rounded-full">Validation
|
||||||
d'un membre</button>
|
d'un membre</button>
|
||||||
|
|
@ -240,7 +347,11 @@ class CASS_View_Race_User_List extends WP_List_Table
|
||||||
|
|
||||||
function prepare_items()
|
function prepare_items()
|
||||||
{
|
{
|
||||||
$this->table_data = $this->get_table_data();
|
// Récupérer le paramètre de recherche
|
||||||
|
$search = isset($_POST['s']) ? sanitize_text_field($_POST['s']) : '';
|
||||||
|
|
||||||
|
// Charger les données du tableau
|
||||||
|
$this->table_data = $this->get_table_data($search);
|
||||||
|
|
||||||
$columns = $this->get_columns();
|
$columns = $this->get_columns();
|
||||||
$hidden = array();
|
$hidden = array();
|
||||||
|
|
@ -258,11 +369,9 @@ class CASS_View_Race_User_List extends WP_List_Table
|
||||||
|
|
||||||
$this->set_pagination_args(
|
$this->set_pagination_args(
|
||||||
array(
|
array(
|
||||||
'total_items' => $total_items,
|
'total_items' => $total_items, // Nombre total d'éléments
|
||||||
// total number of items
|
'per_page' => $per_page, // Nombre d'éléments par page
|
||||||
'per_page' => $per_page,
|
'total_pages' => ceil($total_items / $per_page), // Total des pages
|
||||||
// items to show on a page
|
|
||||||
'total_pages' => ceil($total_items / $per_page) // use ceil to round up
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -270,12 +379,53 @@ class CASS_View_Race_User_List extends WP_List_Table
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get table data
|
// Get table data
|
||||||
private function get_table_data()
|
private function get_table_data($search = '')
|
||||||
{
|
{
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$race_user = new Race_User();
|
$race_user = new Race_User();
|
||||||
return $race_user->sqlWPTableRaceUserPerRace(intval($_GET["IDRace"]));
|
$data = $race_user->sqlWPTableRaceUserPerRace(intval($_GET["IDRace"]));
|
||||||
|
|
||||||
|
// Appliquer le filtre si une recherche est effectuée
|
||||||
|
if (!empty($search)) {
|
||||||
|
$filtered_data = [];
|
||||||
|
|
||||||
|
// Charger tous les utilisateurs avec le rôle 'CASS_MEMBER'
|
||||||
|
$args = array(
|
||||||
|
'role' => 'CASS_MEMBER',
|
||||||
|
'orderby' => 'user_nicename',
|
||||||
|
'order' => 'ASC'
|
||||||
|
);
|
||||||
|
$users = get_users($args);
|
||||||
|
|
||||||
|
// Préparer un tableau pour faire correspondre les IDs aux noms
|
||||||
|
$user_map = [];
|
||||||
|
foreach ($users as $user) {
|
||||||
|
$user_map[$user->id] = $user->user_lastname; // Associe l'ID utilisateur au nom
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Parcourir les données et appliquer le filtre
|
||||||
|
foreach ($data as $item) {
|
||||||
|
// Vérifiez si l'ID dans 'lastname' correspond à un utilisateur
|
||||||
|
if (isset($item['lastname']) && isset($user_map[$item['lastname']])) {
|
||||||
|
$lastname = $user_map[$item['lastname']]; // Obtenez le nom réel
|
||||||
|
|
||||||
|
// Ajoutez un journal pour le débogage
|
||||||
|
echo "<script>console.log('Debug Objects: " . $lastname . " " . $search . "' );</script>";
|
||||||
|
|
||||||
|
// Vérifiez si le nom contient le terme recherché
|
||||||
|
if (stripos($lastname, $search) !== false) {
|
||||||
|
$filtered_data[] = $item; // Ajoutez l'élément filtré
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = $filtered_data; // Remplacez $data par les résultats filtrés
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
function column_default($item, $column_name)
|
function column_default($item, $column_name)
|
||||||
{
|
{
|
||||||
switch ($column_name) {
|
switch ($column_name) {
|
||||||
|
|
@ -379,10 +529,10 @@ class CASS_View_Race_User_List extends WP_List_Table
|
||||||
?>
|
?>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
var mailContentParticipiantValidationToMemberObject = "<?php echo str_replace(["\r", "\n"], ['\\r', '\\n'],ReadGlobal($setting->getMailContentParticipiantValidationToMemberObject())); ?>";
|
var mailContentParticipiantValidationToMemberObject = "<?php echo str_replace(["\r", "\n"], ['\\r', '\\n'], ReadGlobal($setting->getMailContentParticipiantValidationToMemberObject())); ?>";
|
||||||
var mailContentParticipiantValidationToMember = "<?php echo str_replace(["\r", "\n"], ['\\r', '\\n'],ReadGlobal($setting->getMailContentParticipiantValidationToMember())); ?>";
|
var mailContentParticipiantValidationToMember = "<?php echo str_replace(["\r", "\n"], ['\\r', '\\n'], ReadGlobal($setting->getMailContentParticipiantValidationToMember())); ?>";
|
||||||
var mailContentParticipiantExcusationToMemberObject = "<?php echo str_replace(["\r", "\n"], ['\\r', '\\n'],ReadGlobal($setting->getMailContentParticipiantExcusationToMemberObject())); ?>";
|
var mailContentParticipiantExcusationToMemberObject = "<?php echo str_replace(["\r", "\n"], ['\\r', '\\n'], ReadGlobal($setting->getMailContentParticipiantExcusationToMemberObject())); ?>";
|
||||||
var mailContentParticipiantExcusationToMember = "<?php echo str_replace(["\r", "\n"], ['\\r', '\\n'],ReadGlobal($setting->getMailContentParticipiantExcusationToMember())); ?>";
|
var mailContentParticipiantExcusationToMember = "<?php echo str_replace(["\r", "\n"], ['\\r', '\\n'], ReadGlobal($setting->getMailContentParticipiantExcusationToMember())); ?>";
|
||||||
var IDRace = "<?php echo $_GET['IDRace']; ?>";
|
var IDRace = "<?php echo $_GET['IDRace']; ?>";
|
||||||
|
|
||||||
// The function below will start the confirmation dialog
|
// The function below will start the confirmation dialog
|
||||||
|
|
@ -496,4 +646,20 @@ class CASS_View_Race_User_List extends WP_List_Table
|
||||||
|
|
||||||
return sprintf('%1$s %2$s', ReadGlobal($lastname), $this->row_actions($actions));
|
return sprintf('%1$s %2$s', ReadGlobal($lastname), $this->row_actions($actions));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ajouter un formulaire de recherche au-dessus du tableau
|
||||||
|
function search_box($text, $input_id)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
$input_id = $input_id . '-search-input';
|
||||||
|
|
||||||
|
echo '<form method="post">';
|
||||||
|
echo '<p class="search-box">';
|
||||||
|
echo '<label class="screen-reader-text" for="' . esc_attr($input_id) . '">' . $text . ':</label>';
|
||||||
|
echo '<input type="search" id="' . esc_attr($input_id) . '" name="s" value="' . esc_attr($_REQUEST['s'] ?? '') . '" />';
|
||||||
|
echo '<button type="submit" class="button">' . esc_attr($text) . '</button>';
|
||||||
|
echo '</p>';
|
||||||
|
echo '</form>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
164
src/class/member/Member.php
Normal file
164
src/class/member/Member.php
Normal file
|
|
@ -0,0 +1,164 @@
|
||||||
|
<?php
|
||||||
|
class Member
|
||||||
|
{
|
||||||
|
private $ID;
|
||||||
|
private $role;
|
||||||
|
private $lastname;
|
||||||
|
private $firstname;
|
||||||
|
private $email;
|
||||||
|
private $pseudonyme;
|
||||||
|
private $cassMemberNo;
|
||||||
|
private $cassLevel;
|
||||||
|
private $cassLevelTechSki;
|
||||||
|
private $cassLevelClimbing;
|
||||||
|
private $cassLevelMountaineering;
|
||||||
|
private $cassGroup;
|
||||||
|
private $cassTelephone;
|
||||||
|
private $cassAddress;
|
||||||
|
private $cassNPA;
|
||||||
|
private $cassLocality;
|
||||||
|
|
||||||
|
public function __construct($user_id)
|
||||||
|
{
|
||||||
|
// Récupérer les informations de l'utilisateur
|
||||||
|
$user = get_userdata($user_id);
|
||||||
|
|
||||||
|
$this->ID = $user->ID;
|
||||||
|
$roles = implode(', ', $user->roles); // Récupérer les rôles
|
||||||
|
|
||||||
|
if (in_array('CASS_RL', $user->roles)) {
|
||||||
|
$this->role = 'Chef de course';
|
||||||
|
} else {
|
||||||
|
$this->role = 'Membre';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->lastname = $user->last_name;
|
||||||
|
$this->firstname = $user->first_name;
|
||||||
|
$this->email = $user->user_email;
|
||||||
|
$this->pseudonyme = $user->user_nicename;
|
||||||
|
|
||||||
|
// Récupérer les métadonnées
|
||||||
|
$this->cassMemberNo = sanitize_text_field(get_user_meta($user_id, 'cassMemberNo', true));
|
||||||
|
$cassLevelId = sanitize_text_field(get_user_meta($user_id, 'cassLevel', true));
|
||||||
|
$level = new Level();
|
||||||
|
$level->loadFromId($cassLevelId);
|
||||||
|
$this->cassLevel = $level->getName();
|
||||||
|
|
||||||
|
$cassLevelTechSkiId = sanitize_text_field(get_user_meta($user_id, 'cassLevelTechSki', true));
|
||||||
|
$levelTechSki = new Level();
|
||||||
|
$levelTechSki->loadFromId($cassLevelTechSkiId);
|
||||||
|
$this->cassLevelTechSki = $levelTechSki->getName();
|
||||||
|
|
||||||
|
$cassLevelClimbingId = sanitize_text_field(get_user_meta($user_id, 'cassLevelClimbing', true));
|
||||||
|
$levelClimbing = new Level();
|
||||||
|
$levelClimbing->loadFromId($cassLevelClimbingId);
|
||||||
|
$this->cassLevelClimbing = $levelClimbing->getName();
|
||||||
|
|
||||||
|
$cassLevelMountaineeringId = sanitize_text_field(get_user_meta($user_id, 'cassLevelMountaineering', true));
|
||||||
|
$levelMountaineering = new Level();
|
||||||
|
$levelMountaineering->loadFromId($cassLevelMountaineeringId);
|
||||||
|
$this->cassLevelMountaineering = $levelMountaineering->getName();
|
||||||
|
|
||||||
|
$GroupID = sanitize_text_field(get_user_meta($user_id, 'cassGroup', true));
|
||||||
|
|
||||||
|
// Récupérer le nom du groupe
|
||||||
|
$group = new Group();
|
||||||
|
$group->loadFromId($GroupID);
|
||||||
|
$this->cassGroup = $group->getName();
|
||||||
|
|
||||||
|
$this->cassTelephone = sanitize_text_field(get_user_meta($user_id, 'cassTelephone', true));
|
||||||
|
$this->cassAddress = sanitize_text_field(get_user_meta($user_id, 'cassAddress', true));
|
||||||
|
$this->cassNPA = sanitize_text_field(get_user_meta($user_id, 'cassNPA', true));
|
||||||
|
$this->cassLocality = sanitize_text_field(get_user_meta($user_id, 'cassLocality', true));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Méthode qui récupère la liste des utilisateurs avec leurs métadonnées
|
||||||
|
public static function sqlWPTable()
|
||||||
|
{
|
||||||
|
global $wpdb;
|
||||||
|
|
||||||
|
// Argument pour récupérer les utilisateurs avec le rôle 'CASS_MEMBER'
|
||||||
|
$args = array(
|
||||||
|
'role' => 'CASS_MEMBER',
|
||||||
|
'orderby' => 'user_nicename',
|
||||||
|
'order' => 'ASC'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Récupérer tous les utilisateurs
|
||||||
|
$users = get_users($args);
|
||||||
|
$members = [];
|
||||||
|
|
||||||
|
// Pour chaque utilisateur, récupérer ses métadonnées et les ajouter à la liste
|
||||||
|
foreach ($users as $user) {
|
||||||
|
$members[] = new Member($user->ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retourner la liste des membres
|
||||||
|
return $members;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Méthodes getter pour chaque propriété
|
||||||
|
public function getID() {
|
||||||
|
return $this->ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRole() {
|
||||||
|
return $this->role;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLastname() {
|
||||||
|
return $this->lastname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFirstname() {
|
||||||
|
return $this->firstname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEmail() {
|
||||||
|
return $this->email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPseudonyme() {
|
||||||
|
return $this->pseudonyme;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCassMemberNo() {
|
||||||
|
return $this->cassMemberNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCassLevel() {
|
||||||
|
return $this->cassLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCassLevelTechSki() {
|
||||||
|
return $this->cassLevelTechSki;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCassLevelClimbing() {
|
||||||
|
return $this->cassLevelClimbing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCassLevelMountaineering() {
|
||||||
|
return $this->cassLevelMountaineering;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCassGroup() {
|
||||||
|
return $this->cassGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCassTelephone() {
|
||||||
|
return $this->cassTelephone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCassAddress() {
|
||||||
|
return $this->cassAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCassNPA() {
|
||||||
|
return $this->cassNPA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCassLocality() {
|
||||||
|
return $this->cassLocality;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -261,6 +261,42 @@ function ReadGlobal($text)
|
||||||
return $text;
|
return $text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function exportParticipantListOfRaceMailOnly($IDRace){
|
||||||
|
global $wpdb;
|
||||||
|
|
||||||
|
$mails = [];
|
||||||
|
|
||||||
|
$race = new Race();
|
||||||
|
$race->loadFromId($IDRace);
|
||||||
|
|
||||||
|
//Récupération des participants
|
||||||
|
$sql = "
|
||||||
|
SELECT IDWPUser FROM cass_race_user WHERE IDRace = %d;
|
||||||
|
";
|
||||||
|
|
||||||
|
$sql = $wpdb->prepare($sql, $IDRace);
|
||||||
|
$results = $wpdb->get_results($sql);
|
||||||
|
|
||||||
|
foreach ($results as $result) {
|
||||||
|
//Get user meta
|
||||||
|
$user_meta = get_user_meta($result->IDWPUser);
|
||||||
|
|
||||||
|
$args = array(
|
||||||
|
'role' => 'CASS_MEMBER',
|
||||||
|
'orderby' => 'user_nicename',
|
||||||
|
'order' => 'ASC'
|
||||||
|
);
|
||||||
|
$users = get_users($args);
|
||||||
|
$retuned = "";
|
||||||
|
foreach ($users as $user) {
|
||||||
|
if ($user->id == $result->IDWPUser) {
|
||||||
|
$mails[] = $user->user_email;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $mails;
|
||||||
|
}
|
||||||
|
|
||||||
function exportParticipantListOfRace($IDRace)
|
function exportParticipantListOfRace($IDRace)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user