Compare commits

..

8 Commits

Author SHA1 Message Date
8d28d2cffa introducing the widget
All checks were successful
continuous-integration/drone/push Build is passing
2025-02-18 11:23:47 +01:00
7e2bf1853c working on statutes 2025-02-18 11:22:56 +01:00
c788d119ba working on statutes 2025-02-18 11:22:47 +01:00
30d9074f14 introducing dashboard-widget 2025-02-18 11:22:32 +01:00
c6ea399704 working on metaboxes 2025-02-18 11:22:26 +01:00
1d9494b97d introducing dashboard-widget 2025-02-18 11:22:03 +01:00
848c8a7a37 working on metaboxes 2025-02-18 11:21:50 +01:00
f4f65f0245 hiding taxonomies from artisan page 2025-02-18 11:21:32 +01:00
8 changed files with 507 additions and 49 deletions

View File

@ -15,3 +15,4 @@ require_once(__DIR__ . '/includes/utilities.php');
require_once(__DIR__ . '/includes/acf-fields.php');
require_once(__DIR__ . '/includes/factories.php');
require_once(__DIR__ . '/includes/export-datas.php');
require_once(__DIR__ . '/includes/dashboard-widget.php');

View File

@ -159,9 +159,9 @@ function metiers_new_admin_menu_order($menu_order)
$new_positions = array(
'edit.php?post_type=artisans' => 3,
'edit.php?post_type=chantiers' => 4,
'edit.php?post_type=page' => 6,
'upload.php' => 7,
'export_datas' => 8,
'edit.php?post_type=page' => 7,
'upload.php' => 8,
'export_datas' => 9,
'theme-general-settings' => 11,
'rank-math' => 20,
);
@ -185,3 +185,119 @@ add_action('admin_menu', function () {
add_filter('menu_order', 'metiers_new_admin_menu_order');
add_filter('custom_menu_order', '__return_true');
});
function hide_meta_boxes_by_default()
{
// List of meta boxes to hide by default
$hidden_meta_boxes = array(
'post' => array(
'postexcerpt', // Excerpt
'trackbacksdiv', // Trackbacks
'postcustom', // Custom Fields
'commentstatusdiv', // Discussion
'commentsdiv', // Comments
'authordiv', // Author
'slugdiv' // Slug
),
'page' => array(
'postexcerpt', // Excerpt
'trackbacksdiv', // Trackbacks
'postcustom', // Custom Fields
'commentstatusdiv', // Discussion
'commentsdiv', // Comments
'authordiv', // Author
'slugdiv' // Slug
)
);
// Get the current user ID
$user_id = get_current_user_id();
// Get the hidden meta boxes for the current user
$hidden = get_user_meta($user_id, 'metaboxhidden_post', true);
// Merge the existing hidden meta boxes with the new ones
$hidden = array_unique(array_merge((array) $hidden, $hidden_meta_boxes['post']));
// Update the user meta with the new hidden meta boxes
update_user_meta($user_id, 'metaboxhidden_post', $hidden);
// Repeat for pages
$hidden = get_user_meta($user_id, 'metaboxhidden_page', true);
$hidden = array_unique(array_merge((array) $hidden, $hidden_meta_boxes['page']));
update_user_meta($user_id, 'metaboxhidden_page', $hidden);
}
// Hook the function to the admin_init action
// add_action('admin_init', 'hide_meta_boxes_by_default');
function hide_wpml_language_metabox()
{
// Supprime la meta box "Langue" de WPML dans l'éditeur de post
remove_meta_box('icl_div', 'post', 'side');
remove_meta_box('icl_div', 'page', 'side');
// Ajoutez d'autres types de post si nécessaire
}
// Applique la fonction pour masquer la meta box "Langue"
// add_action('admin_menu', 'hide_wpml_language_metabox');
function add_user_role_to_admin_body_class($classes)
{
$current_user = wp_get_current_user();
if (!empty($current_user->roles)) {
foreach ($current_user->roles as $role) {
$classes .= ' role-' . $role;
$classes .= ' salut fred';
}
}
return $classes;
}
// Applique le filtre pour ajouter la classe au corps de l'interface admin
add_filter('admin_body_class', 'add_user_role_to_admin_body_class');
function add_custom_taxonomy_menu_item()
{
add_menu_page(
'Métiers', // Titre de la page dans le navigateur
'Métiers', // Texte à afficher dans le menu
'edit_others_posts', // Capacité requise pour voir le menu
'edit-tags.php?taxonomy=metiers&post_type=artisans', // URL de la taxonomie
'', // Pas de fonction de rappel, car nous redirigeons
'dashicons-tag', // Icône (facultatif)
50 // Position dans le menu (facultatif)
);
add_menu_page(
'Éléments du batiment', // Titre de la page dans le navigateur
'Éléments du batiment', // Texte à afficher dans le menu
'edit_others_posts', // Capacité requise pour voir le menu
'edit-tags.php?taxonomy=elementsbatiments&post_type=artisans', // URL de la taxonomie
'', // Pas de fonction de rappel, car nous redirigeons
'dashicons-tag', // Icône (facultatif)
58 // Position dans le menu (facultatif)
);
}
// Ajoute l'élément de menu lors de l'initialisation de l'admin
add_action('admin_menu', 'add_custom_taxonomy_menu_item');
function add_custom_update_button()
{
global $post;
if ($post->post_status === 'publish') {
$update_url = admin_url('post.php?post=' . $post->ID . '&action=edit');
echo '<a href="' . esc_url($update_url) . '" class="button button-secondary" style="margin-left:10px;">Mettre à jour l\'article</a>';
}
}
add_action('post_submitbox_misc_actions', 'add_custom_update_button');

View File

@ -53,61 +53,54 @@ function metiers_patrimoine_chantiers_post_updater($post_id)
}
add_action('acf/save_post', 'metiers_patrimoine_chantiers_post_updater', 20);
/* ---------------------------
CUSTOM CODE FOR TITLE
---------------------------*/
/* ---------------------------------------
CUSTOM CONTENT AFTER POST TYPE TITLE
------------------------------------------*/
add_action('edit_form_after_title', function () {
// Vérifie si on est sur le bon post type
$screen = get_current_screen();
$last_modified_date = get_the_modified_date('j F Y');
$status_mdp = get_field('mdp_status', get_the_ID());
$post_status = get_post_status();
$translatedStatus = translate_wordpress_online_statuses($post_status);
if ($screen && $screen->post_type === 'artisans') {
echo '<h1 class="admin-artisan-title">' . get_the_title() . '</h1>';
// echo '<p class="last-updated"> Dernière modification : ' . $last_modified_date . '</p>';
?>
<h1 class="admin-artisan-title"><?php echo get_the_title() ?></h1>
<div id="top-status" class="top-status">
<div class="state-container">
<p>État :</p>
<span class="post-state post-state--<?php echo $post_status; ?>"><?php echo $translatedStatus; ?></span>
</div>
<div class="state-container">
<p>Statut :</p>
<span class="status-state status-state--<?php echo $status_mdp['value']; ?> "><?php echo $status_mdp['label']; ?></span>
</div>
</div>
<?php
}
});
function add_last_modified_date_to_publish_box()
{
global $post;
// Vérifiez que vous êtes dans un post et que l'ID du post est valide
if ($post && $post->ID) {
// Récupérer la date de dernière modification
$dashicon = '<span class="dashicons dashicons-update"></span>';
$last_modified_date = get_the_modified_date('j F Y \à H:i', $post->ID);
// Afficher la date de dernière modification dans le panneau
echo '<div class="misc-pub-section">';
echo $dashicon . ' Dernière update : ';
echo $last_modified_date;
echo '</div>';
}
}
add_action('post_submitbox_start', 'add_last_modified_date_to_publish_box');
/* ---------------------------
CUSTOM CHANTIER META BOX AT THE END OF THE PAGE
---------------------------*/
/* ---------------------------------------
METABOXES
------------------------------------------*/
/** ENQUEUE CUSTOM CHANTIER META BOX AT THE END OF THE PAGE **/
add_action('add_meta_boxes', function () {
// Ajout de la metabox uniquement pour le post type 'artisans'
add_meta_box(
'admin_artisan_chantier_list', // ID de la metabox
'Chantiers réalisé par l\'entreprise', // Titre de la metabox
'render_custom_chantier_box_content', // Fonction de rendu
'admin_artisan_chantier_list',
'Chantiers réalisé par l\'entreprise',
'render_custom_chantier_box_content',
'artisans', // Post type
'normal', // Contexte
'low' // Priorité
'default' // Priorité
);
});
/**
* Fonction de rendu du contenu de la metabox.
*/
/** RENDER CHANTIER METABOX **/
function render_custom_chantier_box_content($post)
{
@ -146,6 +139,175 @@ function render_custom_chantier_box_content($post)
}
}
/** REMOVE SUBMITDIV METABOX **/
add_action('admin_menu', 'remove_submit_div');
function remove_submit_div()
{
remove_meta_box('submitdiv', 'artisans', 'side');
remove_meta_box('postimagediv', 'artisans', 'normal');
remove_meta_box('postimagediv', 'artisans', 'side');
remove_meta_box('postimagediv', 'artisans', 'advanced');
$user = wp_get_current_user();
$metaboxes = get_user_meta($user->ID, 'metaboxhidden_artisans', true);
$metabox_order = get_user_meta($user->ID, 'meta-box-order_artisans', true);
}
/** UPDATE USER METABOX PREFERENCES WITH MANUAL ARRAY **/
function set_user_metabox_order($user_id)
{
$new_order = [
'acf_after_title' => '',
'side' => 'postimagediv,icl_div',
'normal' => 'acf-group_670d265c6ec0e,admin_artisan_chantier_list,acf-group_67581cdaf3262,acf-group_672358433051b,submitdiv,slugdiv,revisionsdiv',
'advanced' => 'rank_math_metabox',
];
update_user_meta($user_id, 'meta-box-order_artisans', $new_order);
$metaboxes_hidden = get_user_meta($user_id, 'metaboxhidden_artisans', true);
if ($metaboxes_hidden === false) return;
$newArrray = array_merge($metaboxes_hidden, ['postimagediv', 'icldiv']);
update_user_meta($user_id, 'metaboxhidden_artisans', $newArrray);
}
// set_user_metabox_order(get_current_user_id());
add_action('admin_init', 'set_user_metabox_order');
/** RE-ENQUEUE SUBMITDIV METABOX **/
add_action('do_meta_boxes', 'reinsert_submitdiv_meta_box');
function reinsert_submitdiv_meta_box()
{
add_meta_box(
'submitdiv',
__('Sauver'),
'post_submit_meta_box',
'artisans',
'normal',
'low'
);
}
/** DE ACTIVATE SCREEN OPTIONS **/
function de_activite_screen_options()
{
$current_user = wp_get_current_user();
if ($current_user->roles[0] !== 'administrator') {
add_filter('screen_options_show_screen', '__return_false');
}
}
add_action('admin_init', 'de_activite_screen_options');
/** FORBID SAVING USER REORGANISATION ON DRAG **/
add_action('check_ajax_referer', 'prevent_meta_box_order');
function prevent_meta_box_order($action)
{
if ('meta-box-order' == $action /* && $wp_user == 'santa claus' */) {
die('-1');
}
}
/* ---------------------------------------
DELETE USER PREFERENCES
------------------------------------------*/
// function reset_user_metabox_order()
// {
// write_log('#############reset_user_metabox_order');
// $user_id = get_current_user_id();
// if ($user_id) {
// delete_user_meta($user_id, 'meta-box-order_artisans');
// }
// }
// add_action('load-post.php', 'reset_user_metabox_order');
// add_action('load-post-new.php', 'reset_user_metabox_order');
function my_custom_admin_button()
{
?>
<form method="post" action="">
<?php wp_nonce_field('my_custom_action', 'my_custom_nonce'); ?>
<input type="submit" name="my_custom_button" class="button button-primary" value="Exécuter l'action">
</form>
<?php
}
function my_custom_options_page()
{
add_menu_page(
'Options personnaliséessssssss',
'Mes Optionsssssssssssssss',
'manage_options',
'my-custom-options',
'my_custom_options_callback'
);
}
function my_custom_options_callback()
{
?>
<div class="wrap">
<h1>Page doptions personnalisée</h1>
<?php my_custom_admin_button(); ?>
</div>
<?php
}
add_action('admin_menu', 'my_custom_options_page');
function my_custom_handle_button_action()
{
if (isset($_POST['my_custom_button']) && check_admin_referer('my_custom_action', 'my_custom_nonce')) {
error_log('#############yalaa');
// Mettre ici laction à exécuter
// update_option('my_custom_message', 'L\'action a été exécutée avec succès !');
// Rediriger pour éviter la soumission multiple
// wp_redirect(admin_url('admin.php?page=my-custom-options&action=success'));
exit;
}
}
add_action('admin_init', 'my_custom_handle_button_action');
/* -------------------------------------------------
ADD LAST MODIFIED DATE TO SUBMIT DIV PUBLISH BOX
-------------------------------------------------*/
function add_last_modified_date_to_publish_box()
{
global $post;
// Vérifiez que vous êtes dans un post et que l'ID du post est valide
if ($post && $post->ID) {
// Récupérer la date de dernière modification
$dashicon = '<span class="dashicons dashicons-update"></span>';
$last_modified_date = get_the_modified_date('j F Y \à H:i', $post->ID);
// Afficher la date de dernière modification dans le panneau
echo '<div class="misc-pub-section">';
echo $dashicon . ' Dernière update : ';
echo $last_modified_date;
echo '</div>';
}
}
// add_action('post_submitbox_start', 'add_last_modified_date_to_publish_box');
// post_submit_meta_box($post, array('side' => 'core'));
/* ----------------------------------------------------------------------
SUPPRIMER LA COLONNE RANK MATH SEO SI ELLE EST PRÉSENTE
------------------------------------------------------------------------*/
@ -266,7 +428,7 @@ add_action('manage_artisans_posts_custom_column', 'metiers_patrimoine_artisans_h
/* ----------------------------------------------------------------------
GESTION DDU FILTRAGES PAR METIERS
GESTION DU FILTRAGES PAR METIERS
------------------------------------------------------------------------*/
// **** CREATION DU DROPDOWN SELECT AVEC LES OPTIONS
function metiers_patrimoine_filter_posts_per_metiers_declare_dropdown()

View File

@ -0,0 +1,26 @@
<?php
function custom_dashboard_widget()
{
// get user name
$current_user = wp_get_current_user();
$user_name = $current_user->user_login;
wp_add_dashboard_widget(
'advisor-dashboard-widget', // ID du widget
'Dashboard Personnel ', // Titre
'custom_dashboard_widget_display' // Fonction d'affichage
);
}
function custom_dashboard_widget_display()
{
$current_user = wp_get_current_user();
$user_name = $current_user->user_login;
?>
<h3>Bonjour <?php echo $user_name ?> !</h3>
<p>Ceci est un widget personnalisé. Vous pouvez afficher ici des infos utiles, des liens ou tout autre contenu.</p>
<?php
}
// Ajouter le widget au tableau de bord
add_action('wp_dashboard_setup', 'custom_dashboard_widget');

View File

@ -30,6 +30,7 @@ function metiers_patrimoine_add_custom_taxonomies()
'show_in_rest' => true, // Needed for tax to appear in Gutenberg editor
'show_ui' => true,
'show_admin_column' => false,
'show_in_menu' => false,
'show_in_quick_edit' => false,
'meta_box_cb' => false,
'hierarchical' => true,
@ -61,6 +62,7 @@ function metiers_patrimoine_add_custom_taxonomies()
'show_in_rest' => true, // Needed for tax to appear in Gutenberg editor
'show_ui' => true,
'show_admin_column' => false,
'show_in_menu' => false,
'show_in_quick_edit' => false,
'meta_box_cb' => false,
'hierarchical' => true,

View File

@ -176,3 +176,26 @@ function getArtisanConseillerName($postID)
$conseiller_name = $conseiller['user_firstname'] . ' ' . $conseiller['user_lastname'];
return $conseiller_name;
}
function translate_wordpress_online_statuses($post_status)
{
$status_object = get_post_status_object($post_status);
if ($post_status === 'publish') {
return 'En ligne';
}
if ($post_status === 'draft') {
return 'Brouillon';
}
if ($post_status === 'pending') {
return 'En attente';
}
if ($post_status === 'offline') {
return 'Hors ligne';
}
if ($post_status === 'trash') {
return 'Corbeille';
}
return $status_object->label;
}

View File

@ -1,6 +1,9 @@
@import './base/filters.css';
@import './base/shadows.css';
/* DASHBOARD */
@import './dashboard/advisor-dashboard-widget.css';
body.post-type-chantiers,
body.post-type-artisans {
#titlediv {
@ -20,7 +23,7 @@ body.post-type-artisans {
---------------------------*/
.post-type-artisans {
.status-state {
@apply font-medium !rounded-2xl px-2 py-2 w-fit mx-auto;
@apply font-medium rounded-2xl px-2 py-2 w-fit mx-auto;
&--ok {
@apply text-green-700;
}
@ -28,10 +31,10 @@ body.post-type-artisans {
@apply text-rose-700;
}
&--to_actualize {
@apply text-amber-500;
@apply text-amber-700;
}
&--to_contact {
@apply text-yellow-500;
@apply text-yellow-700;
}
&--waiting_feedback,
&--ongoing {
@ -453,3 +456,123 @@ ul.striped > :nth-child(odd) {
.acf-input-wrap input::placeholder {
@apply text-neutral-400;
}
.top-status {
@apply flex gap-16 mt-6;
.state-container {
@apply flex gap-3 justify-center items-center;
p {
@apply my-0 font-medium text-xs;
}
}
.status-state,
.post-state {
@apply block px-3 py-2 flex items-center justify-center gap-2;
&:before {
@apply content-[''] block w-2 h-2 rounded-full;
}
}
}
.status-state,
.post-state {
@apply !rounded-xl font-medium text-xs border border-solid inline-block w-fit;
&--ok,
&--publish {
@apply text-green-700 border-green-700;
}
&--publish:before {
@apply bg-green-700;
}
&--offline {
@apply text-neutral-500 border-neutral-500;
}
&--offline:before {
@apply bg-neutral-500;
}
&--to_contact {
@apply text-amber-700 border-amber-700;
}
&--to_contact:before {
@apply bg-amber-700;
}
&--deleted {
@apply text-rose-700;
}
&--deleted:before {
@apply bg-rose-700;
}
&--to_contact,
&--to_actualize {
@apply text-amber-700;
}
&--to_contact:before,
&--to_actualize:before {
@apply bg-amber-700;
}
&--waiting_feedback,
&--ongoing {
@apply text-blue-600;
}
&--waiting_feedback:before,
&--ongoing:before {
@apply bg-blue-600;
}
&--rejected {
@apply text-rose-400;
}
&--rejected:before {
@apply bg-rose-400;
}
}
/* ------------------------------------
CUSTOMIZATION BASED ON USER ROLE
------------------------------------*/
.role-editor {
.rank-math-lock-modified-date,
.misc-pub-curtime,
.misc-pub-revisions,
.misc-pub-visibility,
#icl_div,
#rank_math_metabox,
#acf-group_672358433051b,
#revisionsdiv,
#toplevel_page_rank-math,
#menu-tools,
#submitdiv .handle-order-higher,
#submitdiv .handle-order-lower,
#submitdiv #preview-action,
#footer-left {
@apply !hidden;
}
.post-type-artisans #post-body {
@apply !mr-12 2xl:!mr-32 !max-w-screen-2xl;
}
}
#submitdiv #publish {
@apply bg-rose-600;
.postbox-header {
@apply border-none;
}
}
#acf-group_67581cdaf3262 {
@apply border-2 border-patrimoine-sante-securite border-solid p-0 rounded-xl;
@apply bg-white;
/* border: 2px solid red !important; */
.acf-field-6758467534c1e {
@apply px-[10px];
label {
@apply font-normal !text-white text-xl bg-patrimoine-sante-securite px-4 py-2 rounded-t-xl block;
}
}
.acf-field:not(.acf-field-6758467534c1e) {
@apply px-12;
}
}

View File

@ -0,0 +1,5 @@
#advisor-dashboard-widget {
h3 {
@apply text-3xl text-patrimoine-sante-securite;
}
}