From 73d988eb6a7aed8265abb7b508e2ac40efb49c2a Mon Sep 17 00:00:00 2001 From: lenovo Date: Tue, 8 Nov 2022 21:00:05 +0100 Subject: [PATCH] wip prevent post publish if wrong coordinates --- srcs/plugins/map_prof/map_prof_hooks.php | 125 ++++++++++++++++++- srcs/plugins/map_prof/mp_console_log.php | 23 +++- srcs/plugins/map_prof/mp_get_coordinates.php | 40 ++---- srcs/plugins/map_prof/mp_get_events.php | 10 +- 4 files changed, 157 insertions(+), 41 deletions(-) diff --git a/srcs/plugins/map_prof/map_prof_hooks.php b/srcs/plugins/map_prof/map_prof_hooks.php index 80873a3..976a3e3 100644 --- a/srcs/plugins/map_prof/map_prof_hooks.php +++ b/srcs/plugins/map_prof/map_prof_hooks.php @@ -138,18 +138,131 @@ add_shortcode('lejourduprof_map', 'mp_add_div'); /** - * when a post is published, check its coordinates + * when a post is saved or published or updated, + * find its coordinates */ function post_published_coordinates($id, $post) { - $coordinates_valid = true; - $coordinates = mp_get_coordinates($id, $coordinates_valid); + + if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) + return; + + if ( !isset( $_POST['ep_eventposts_nonce'] ) ) + return; + + if ( !wp_verify_nonce( $_POST['ep_eventposts_nonce'], plugin_basename( __FILE__ ) ) ) + return; + + // Is the user allowed to edit the post or page? + if ( !current_user_can( 'edit_post', $post->ID ) ) + return; + + $coordinates = mp_get_coordinates($id); if ( ! add_post_meta( $id, 'coordinates', $coordinates, true ) ) update_post_meta( $id, 'coordinates', $coordinates ); - if ( ! add_post_meta( $id, 'coordinates_valid', $coordinates_valid, true ) ) - update_post_meta( $id, 'coordinates_valid', $coordinates_valid ); } -add_action( 'publish_post', 'post_published_coordinates', 10, 2 ); +add_action( 'save_post', 'post_published_coordinates', 10, 2 ); + + + + +// https://wordpress.stackexchange.com/questions/42013/prevent-post-from-being-published-if-custom-fields-not-filled +// https://developer.wordpress.org/reference/hooks/save_post/ +function test1($id, $post, $update) { + + // is doing autosaving ? + if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) + return; + + // is post creation ? + if (!$update) + return; + + // is the user allowed to edit the post or page ? + if ( !current_user_can( 'edit_post', $id ) ) + return; + + // is not being published ? + if ($post->post_status != "publish") + return; + + $prevent_publish= true; // set to true if data was invalid + if ($prevent_publish) { + + echo '
+

my message

+
'; + + // unhook this function to prevent indefinite loop + remove_action('save_post', 'my_save_post'); + + // update the post to change post status + wp_update_post(array('ID' => $post_id, 'post_status' => 'draft')); + + // re-hook this function again + add_action('save_post', 'my_save_post'); + } +} +add_action( 'save_post_post', 'test1', 10, 3); + +function my_notice() { + echo '
+

my message

+
'; + components-notice-list components-editor-notices__pinned +} +//add_action( 'admin_notices', 'my_notice'); + +function my_redirect_location($location,$post_id){ + + // if post was published... + if (isset($_POST['publish'])){ + + // obtain current post status + $status = get_post_status( $post_id ); + + // the post was 'published', but if it is still a draft, display draft message (10). + if($status=='draft') + $location = add_query_arg('message', 10, $location); + } + + return $location; +} +//add_filter('redirect_post_location', 'my_redirect_location', 10, 2); + +/* + modification rapide, publie -> brouillon : 1 - draft + modification rapide, brouillon -> brouillon : 1 - draft + modification rapide, brouillon -> publie : 1 - publish + add post : 1 - auto-draft + modification, publie -> brouillon : 2 - draft + modification, brouillon -> brouillon : 2 - draft + modification, brouillon -> publie : 2 - publish +*/ + +//function test2($id, $post) { +// mp_console_log("publish_post - " . $post->post_status); +//} +//add_action( 'publish_post', 'test2', 10, 2 ); +/* + modification rapide, publie -> brouillon : / + modification rapide, brouillon -> brouillon : / + modification rapide, brouillon -> publie : 1 - publish + add post : / + modification, publie -> brouillon : / + modification, brouillon -> brouillon : / + modification, brouillon -> publie : 2 - publish +*/ + + + + + + +//function save_post_coordinates($id, $post) { +// mp_console_log("coordinates is null"); +//} +//add_action( 'publish_post', 'post_published_coordinates', 10, 2 ); ?> diff --git a/srcs/plugins/map_prof/mp_console_log.php b/srcs/plugins/map_prof/mp_console_log.php index be85850..075d018 100644 --- a/srcs/plugins/map_prof/mp_console_log.php +++ b/srcs/plugins/map_prof/mp_console_log.php @@ -1,8 +1,25 @@ ' . $js_code . ''; - echo $js_code; + $time = date('H:i'); + $file = '/var/www/html/wp-debug.log'; + file_put_contents($file, $time . " " . $output . "\n", FILE_APPEND); } + +// function mp_console_log($output) { +// $js_code = 'console.log(' . json_encode($output, JSON_HEX_TAG) . ');'; +// $js_code = ''; +// echo $js_code; +// } + +// function mp_console_log($output, $with_script_tags = true) { +// $js_code = 'console.log(' . json_encode($output, JSON_HEX_TAG) . +// ');'; +// if ($with_script_tags) { +// $js_code = ''; +// } +// echo $js_code; +// } + ?> diff --git a/srcs/plugins/map_prof/mp_get_coordinates.php b/srcs/plugins/map_prof/mp_get_coordinates.php index 4772efb..7116106 100644 --- a/srcs/plugins/map_prof/mp_get_coordinates.php +++ b/srcs/plugins/map_prof/mp_get_coordinates.php @@ -1,13 +1,12 @@ $field = $address_section; - if (strlen($address_section) == 0) - $errors++; + $address .= $address_section . ","; } - // check errors - if ($errors > 0) - $valid = false; - else - $valid = true; - - // concat as an address - $address = $event->adresse . "," - . $event->ville . "," - . $event->pays; - // get coordinates from google maps api - if ($errors < 3) { - $geolocation = 'https://maps.googleapis.com/maps/api/geocode/json' - . '?address=' . urlencode($address) - . '&key=' . $mp_api_key; - $jsoncontent = file_get_contents($geolocation); + $geolocation = 'https://maps.googleapis.com/maps/api/geocode/json' + . '?address=' . urlencode($address) + . '&key=' . $mp_api_key; + $jsoncontent = file_get_contents($geolocation); - // extract coordinates from json - $content = json_decode($jsoncontent); - $coordinates = $content->results[0]->geometry->location; - } - - // if null, set to default (by default, france) - if ($coordinates == null) - $coordinates = $mp_coordinates_default; + // extract coordinates from json + $content = json_decode($jsoncontent); + $coordinates = $content->results[0]->geometry->location; return $coordinates; } diff --git a/srcs/plugins/map_prof/mp_get_events.php b/srcs/plugins/map_prof/mp_get_events.php index 2f0d980..0575e8f 100644 --- a/srcs/plugins/map_prof/mp_get_events.php +++ b/srcs/plugins/map_prof/mp_get_events.php @@ -127,7 +127,7 @@ function mp_get_published_posts() { return $posts_published; } -function mp_fill_fields_value($post, $id, &$pays) { +function mp_fill_fields_value($id, &$pays) { /* * get_field is an ACF function @@ -170,9 +170,15 @@ function mp_get_published_events(&$pays) { $posts_list = mp_get_published_posts(); $events = []; foreach ($posts_list as $post) { - $event = mp_fill_fields_value($post, $post->ID, $pays); + $event = mp_fill_fields_value($post->ID, $pays); $event->id = $post->ID; $event->title = $post->post_title; + // TEMP + if (strlen($event->pays) == 0) { + mp_console_log("pays nulle:"); + mp_console_log($event); + } + // array_push($events, $event); } mp_console_log("nombre de posts: " . count($events));