<?php
/*
Plugin Name: map_prof
Plugin URI:
Description: add/remove locations on map at publication/deletion of posts
Author: hugogogo
Version: 1.0.0
Author URI:
*/





/**
 * inclusions :
 */

include_once(dirname(__FILE__) . '/mp_console_log.php');

require_once(dirname(__FILE__) . '/settings/mp_required.php');
require_once(dirname(__FILE__) . '/settings/mp_optionnals.php');
require_once(dirname(__FILE__) . '/settings/mp_globals.php');

require_once(dirname(__FILE__) . '/mp_url_api.php');
require_once(dirname(__FILE__) . '/mp_add_to_scripts.php');
require_once(dirname(__FILE__) . '/mp_get_coordinates.php');
require_once(dirname(__FILE__) . '/mp_get_events.php');
require_once(dirname(__FILE__) . '/mp_get_locations.php');
require_once(dirname(__FILE__) . '/mp_get_filters.php');
require_once(dirname(__FILE__) . '/mp_address_errors.php');
require_once(dirname(__FILE__) . '/mp_create_div.php');


//	// temp test
//
//	add_action( 'wp', 'my_front_end_function');
//	function my_front_end_function() {
//		if ( is_admin() )
//			return;
//		if ( get_post_type() != "post" )
//			return;
//		if ( get_post_status() != "publish" )
//			return;
//	
//		$location = get_field(location);
//		mp_console_log("location:");
//		mp_console_log($location);
//	
//		$coordinates = $location->coordinates;
//		mp_console_log("coordinates:");
//		mp_console_log($coordinates);
//	}



function is_event_post() {
	if ( is_admin() )
		return false;
	if ( get_post_type() != "post" )
		return 0;
	if ( get_post_status() != "publish" )
		return 0;
	return true;
}



/**
 * when 'shortcode' found in page, enqueue scripts and styles,
 * run php script, and replace shortcode by return value
 */

function mp_ljdp_map() {


	/* * * * * * * * * * * * * * *
	 * ENQUEUE SCRIPTS AND STYLES
	 */

	// https://developers.google.com/maps/documentation/javascript/marker-clustering
	$marker_clusterer = "https://unpkg.com/@googlemaps/markerclusterer/dist/index.min.js";

	wp_enqueue_style('mp__style',				plugins_url('styles/mp__style.css', __FILE__),			'',						'',	false);

	// enqueue header
	wp_enqueue_script('mp_info_window',			plugins_url('scripts/mp_info_window.js', __FILE__),		'',						'',	false);
	wp_enqueue_script('mp_errors_map',			plugins_url('scripts/mp_errors_map.js', __FILE__),		'',						'',	false);
	wp_enqueue_script('mp_create_filters',		plugins_url('scripts/mp_create_filters.js', __FILE__),	'',						'',	false);
	wp_enqueue_script('mp_create_markers',		plugins_url('scripts/mp_create_markers.js', __FILE__),	'',						'',	false);
	wp_enqueue_script('mp_create_map',			plugins_url('scripts/mp_create_map.js', __FILE__),		'',						'',	false);
	wp_enqueue_script('mp_draw_clusters',		plugins_url('scripts/mp_draw_clusters.js', __FILE__),	'',						'',	false);
	wp_enqueue_script('mp_filter_events',		plugins_url('scripts/mp_filter_events.js', __FILE__),	'',						'',	false);

	// enqueue footer
	wp_enqueue_script('mp_marker_clusterer',	$marker_clusterer,										'',						'', true);
	wp_enqueue_script('mp_init_map',			plugins_url('scripts/mp_init_map.js', __FILE__),		['mp_marker_clusterer'],'',	true);
	wp_enqueue_script('mp_google_api',			mp_url_api(),											['mp_init_map'],		'',	true);


	/* * * * * * * * *
	 * FIND LOCATIONS
	 */

	$events = mp_get_published_events();
	//mp_console_log("php events:");
	//mp_console_log($events);

	$locations = mp_sort_events($events);
	//mp_console_log("php locations:");
	//mp_console_log($locations);

	$filters = mp_get_filters($events);
	//mp_console_log("php filters:");
	//mp_console_log($filters);

	$to_add = array(
		"locations" => $locations,
		"filters" => $filters,
	);

	// if post event instead of map page, change ccoordinate and zoom
	global $mp_zoom;
	if (is_event_post()) {
		$mp_zoom = $mp_zoom_set[1];

		$location = get_field("location");
		$coordinates = $location->coordinates;

		$mp_coordinates_default = $coordinates;
	}

	mp_add_to_scripts($to_add);


	/* * * * * * * *
	 * ADD FILTERS
	 */

	$mp_map_div = mp_create_div($filters);

	return $mp_map_div;
}
add_shortcode('lejourduprof_map', 'mp_ljdp_map');





/**
 * errors map
 */

function mp_errors_map() {
	return mp_find_address_errors();
}
add_shortcode('ljdp_errors_map', 'mp_errors_map');





/**
 * when a post is saved or published or updated,
 * find its coordinates
 */

function post_published_coordinates($id, $post) {

	$location = mp_get_coordinates($id);

	if ( ! add_post_meta( $id, 'location', $location, true ) )
		update_post_meta( $id, 'location', $location );

}
add_action( 'publish_post', 'post_published_coordinates', 10, 2 );




/**
 * trying to prevent publication with message if bad country address
 */

//	// notice on post edit :
//	//   https://developer.wordpress.org/block-editor/how-to-guides/notices/
//	//   https://developer.wordpress.org/block-editor/how-to-guides/javascript/loading-javascript/
//	//   https://developer.wordpress.org/block-editor/reference-guides/components/notice/https://developer.wordpress.org/block-editor/reference-guides/components/notice/
//	// modals : https://developer.wordpress.org/block-editor/reference-guides/components/modal/
//
//	// https://www.wpbeginner.com/wp-tutorials/how-to-add-admin-notices-in-wordpress/
//	// https://digwp.com/2016/05/wordpress-admin-notices/
//	function my_notice() {
//		//echo '<div class="notice notice-warning is-dismissible">
//		//echo '<div class="notice notice-info is-dismissible">
//		//echo '<div class="notice notice-success is-dismissible">
//		//echo '<div class="components-notice is-error is-dismissible">
//	//	echo '
//	//		<div class="notice notice-error is-dismissible">
//	//			<p>my message</p>
//	//		</div>
//	//	';
//	
//		mp_console_log("\n       get values:");
//		foreach ($_GET as $key => $value) {
//			mp_console_log("  " . $key . ": " . $value);
//		}
//		$screen = get_current_screen();
//		mp_console_log("\n       screen values:");
//		foreach ($screen as $key => $value) {
//			mp_console_log("  " . $key . ": " . $value);
//		}
//	}
//	add_action( 'admin_notices', 'my_notice');
//	
//	// 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 my_publish_check($id, $post, $update) {
//	
//		// is doing autosaving ?
//		if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
//			return;
//	
//		// is post creation ?
//		if (!$update)
//			return;
//	
//		// if this is a revision, get real post ID
//		if ( $parent_id = wp_is_post_revision( $id ) )
//			$id = $parent_id;
//	
//		// 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) {
//	
//			// 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' => $id, 'post_status' => 'draft'));
//	
//			// re-hook this function again
//			add_action('save_post', 'my_save_post');
//		}
//	}
//	add_action( 'save_post_post', 'my_publish_check', 10, 3);
//	
//	function publish_error() {
//		wp_enqueue_script('mp_publish_error',
//			plugins_url('scripts/mp_publish_error.js', __FILE__),
//			array( 'wp-data' ),
//			'',
//			true
//		);
//	}
//	add_action( 'enqueue_block_editor_assets', 'publish_error');
//	
//	// https://wordpress.stackexchange.com/questions/42013/prevent-post-from-being-published-if-custom-fields-not-filled
//	// https://wordpress.stackexchange.com/questions/15546/dont-publish-custom-post-type-post-if-a-meta-data-field-isnt-valid
//	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);
//	
//	//function test1($id, $post) {
//	//	mp_console_log("save_post - " . $post->post_status);
//	//}
//	//add_action( 'save_post', 'test1', 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
//	*/


?>
