Files
torebki-fabiola.pl/wp-content/plugins/mapster-wp-maps/admin/api/class-mapster-wordpress-maps-api.php
2026-03-05 13:07:40 +01:00

1159 lines
50 KiB
PHP

<?php
class Mapster_Wordpress_Maps_Admin_API
{
public function mapster_wp_maps_set_option()
{
register_rest_route( 'mapster-wp-maps', 'set-option', array(
'methods' => 'GET',
'callback' => 'mapster_wp_maps_set_option_from_js',
'permission_callback' => function () {
return current_user_can( 'edit_posts' );
},
) );
function mapster_wp_maps_set_option_from_js( $request )
{
$name = $request->get_param( 'option_name' );
$value = $request->get_param( 'option_value' );
update_option( $name, $value );
return array(
"success" => true,
);
}
}
public function mapster_wp_maps_duplicate_post()
{
register_rest_route( 'mapster-wp-maps', 'duplicate', array(
'methods' => 'POST',
'callback' => 'mapster_wp_maps_duplication',
'permission_callback' => function () {
return current_user_can( 'edit_posts' );
},
) );
function mapster_wp_maps_duplication( $request )
{
$body = $request->get_body();
$decoded_body = json_decode( $body );
$post_id = $decoded_body->id;
$old_post = get_post( $post_id );
$new_post = array(
'post_author' => $old_post->post_author,
'post_content' => $old_post->post_content,
'post_title' => $old_post->post_title,
'post_excerpt' => $old_post->post_excerpt,
'post_status' => $old_post->post_status,
'comment_status' => $old_post->comment_status,
'ping_status' => $old_post->ping_status,
'post_password' => $old_post->post_password,
'to_ping' => $old_post->to_ping,
'pinged' => $old_post->pinged,
'post_content_filtered' => $old_post->post_content_filtered,
'post_parent' => $old_post->post_parent,
'menu_order' => $old_post->menu_order,
'post_type' => $old_post->post_type,
'post_mime_type' => $old_post->post_mime_type,
);
$new_post_id = wp_insert_post( $new_post );
if ( $new_post_id ) {
$meta_data = get_post_meta( $post_id );
if ( mapster_can_be_looped( $meta_data ) ) {
foreach ( $meta_data as $meta_key => $meta_value ) {
update_post_meta( $new_post_id, $meta_key, maybe_unserialize( $meta_value[0] ) );
}
}
mapster_update_wpml_post( $post_id, $new_post_id, $old_post->post_type );
return $new_post_id;
}
return array(
"new_post_id" => $new_post_id,
);
}
}
public function mapster_wp_maps_import_geojson_features()
{
register_rest_route( 'mapster-wp-maps', 'import-geojson', array(
'methods' => 'POST',
'callback' => 'mapster_wp_maps_import_geojson',
'permission_callback' => function () {
return current_user_can( 'edit_posts' );
},
) );
function mapster_wp_maps_import_geojson( $request )
{
$body = $request->get_body();
$decoded_body = json_decode( $body );
$geojson = $decoded_body->file;
$category_id = $decoded_body->category;
$marker_count = 0;
$poly_count = 0;
$line_count = 0;
if ( mapster_can_be_looped( $geojson->features ) ) {
foreach ( $geojson->features as $feature ) {
$feature_copy = clone $feature;
$feature_copy->properties = new stdClass();
$feature_geojson = array(
"type" => "FeatureCollection",
"features" => array( $feature_copy ),
);
if ( $feature->geometry->type == 'Point' ) {
$marker_count = $marker_count + 1;
$new_shape = wp_insert_post( array(
'post_type' => 'mapster-wp-location',
'post_status' => 'publish',
'post_title' => ( $feature->properties->name ? $feature->properties->name : $feature->geometry->type . ' ' . $marker_count ),
) );
if ( $category_id !== "" ) {
wp_set_post_terms( $new_shape, array( $category_id ), 'wp-map-category' );
}
mapster_setDefaults( acf_get_fields( 'group_6163732e0426e' ), $new_shape );
mapster_setDefaults( acf_get_fields( 'group_6163d357655f4' ), $new_shape );
update_field( 'location', json_encode( $feature_geojson ), $new_shape );
}
if ( $feature->geometry->type == 'Polygon' || $feature->geometry->type == 'MultiPolygon' ) {
$poly_count = $poly_count + 1;
$new_shape = wp_insert_post( array(
'post_type' => 'mapster-wp-polygon',
'post_status' => 'publish',
'post_title' => ( $feature->properties->name ? $feature->properties->name : $feature->geometry->type . ' ' . $poly_count ),
) );
if ( $category_id !== "" ) {
wp_set_post_terms( $new_shape, array( $category_id ), 'wp-map-category' );
}
mapster_setDefaults( acf_get_fields( 'group_616379566202f' ), $new_shape );
mapster_setDefaults( acf_get_fields( 'group_6163d357655f4' ), $new_shape );
update_field( 'polygon', json_encode( $feature_geojson ), $new_shape );
}
if ( $feature->geometry->type == 'LineString' || $feature->geometry->type == 'MultiLineString' ) {
$line_count = $line_count + 1;
$new_shape = wp_insert_post( array(
'post_type' => 'mapster-wp-line',
'post_status' => 'publish',
'post_title' => ( $feature->properties->name ? $feature->properties->name : $feature->geometry->type . ' ' . $line_count ),
) );
if ( $category_id !== "" ) {
wp_set_post_terms( $new_shape, array( $category_id ), 'wp-map-category' );
}
mapster_setDefaults( acf_get_fields( 'group_616377d62836b' ), $new_shape );
mapster_setDefaults( acf_get_fields( 'group_6163d357655f4' ), $new_shape );
update_field( 'line', json_encode( $feature_geojson ), $new_shape );
}
}
}
ob_get_clean();
return array(
"count" => $marker_count + $poly_count + $line_count,
);
}
}
public function mapster_wp_maps_import_gl_js_features()
{
register_rest_route( 'mapster-wp-maps', 'import-gl-js', array(
'methods' => 'POST',
'callback' => 'mapster_wp_maps_import_gl_js',
'permission_callback' => function () {
return current_user_can( 'edit_posts' );
},
) );
function mapster_wp_maps_import_gl_js( $request )
{
$body = $request->get_body();
$decoded_body = json_decode( $body );
$geojson = $decoded_body->file;
$category_id = $decoded_body->category;
$marker_count = 0;
$poly_count = 0;
$line_count = 0;
$uploaded_images = array();
$uploaded_images_new = array();
if ( mapster_can_be_looped( $geojson->features ) ) {
foreach ( $geojson->features as $feature ) {
$feature_copy = clone $feature;
$feature_copy->properties = new stdClass();
$geojson = array(
"type" => "FeatureCollection",
"features" => array( $feature_copy ),
);
if ( $feature->geometry->type == 'Point' ) {
$marker_count = $marker_count + 1;
$new_shape = wp_insert_post( array(
'post_type' => 'mapster-wp-location',
'post_status' => 'publish',
'post_title' => ( $feature->properties->name !== '' ? $feature->properties->name : $feature->properties->marker_title . ' ' . $marker_count ),
) );
if ( $category_id !== "" ) {
wp_set_post_terms( $new_shape, array( $category_id ), 'wp-map-category' );
}
mapster_setDefaults( acf_get_fields( 'group_6163732e0426e' ), $new_shape );
mapster_setDefaults( acf_get_fields( 'group_6163d357655f4' ), $new_shape );
update_field( 'location_style', 'label', $new_shape );
update_field( 'icon_icon_on', true, $new_shape );
update_field( 'icon_icon_properties_icon-anchor', $feature->properties->marker_icon_anchor, $new_shape );
update_field( 'icon_icon_properties_icon-size', 30, $new_shape );
update_field( 'enable_popup', true, $new_shape );
update_field( 'popup_style', get_option( 'mapster_default_popup' ), $new_shape );
update_field( 'popup_body_text', $feature->properties->description, $new_shape );
// Upload marker image
require_once ABSPATH . 'wp-admin/includes/media.php';
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/image.php';
$filename = explode( '-wp_mapbox_gl_js_sizing', $feature->properties->marker_icon_url )[0];
if ( !in_array( $filename, $uploaded_images ) ) {
$attachment_id = media_sideload_image(
$filename,
0,
null,
'id'
);
array_push( $uploaded_images, $filename );
array_push( $uploaded_images_new, $attachment_id );
update_field( 'icon_icon_properties_icon-image', $attachment_id, $new_shape );
} else {
$index = array_search( $filename, $uploaded_images );
update_field( 'icon_icon_properties_icon-image', $uploaded_images_new[$index], $new_shape );
}
update_field( 'location', json_encode( $geojson ), $new_shape );
}
if ( $feature->geometry->type == 'Polygon' || $feature->geometry->type == 'MultiPolygon' ) {
$poly_count = $poly_count + 1;
$new_shape = wp_insert_post( array(
'post_type' => 'mapster-wp-polygon',
'post_status' => 'publish',
'post_title' => ( $feature->properties->name !== '' ? $feature->properties->name : $feature->properties->marker_title . ' ' . $poly_count ),
) );
if ( $category_id !== "" ) {
wp_set_post_terms( $new_shape, array( $category_id ), 'wp-map-category' );
}
mapster_setDefaults( acf_get_fields( 'group_616379566202f' ), $new_shape );
mapster_setDefaults( acf_get_fields( 'group_6163d357655f4' ), $new_shape );
update_field( 'color', $feature->properties->color, $new_shape );
update_field( 'opacity', $feature->properties->opacity * 100, $new_shape );
update_field( 'polygon', json_encode( $geojson ), $new_shape );
}
if ( $feature->geometry->type == 'LineString' || $feature->geometry->type == 'MultiLineString' ) {
$line_count = $line_count + 1;
$new_shape = wp_insert_post( array(
'post_type' => 'mapster-wp-line',
'post_status' => 'publish',
'post_title' => ( $feature->properties->name !== '' ? $feature->properties->name : $feature->properties->marker_title . ' ' . $line_count ),
) );
if ( $category_id !== "" ) {
wp_set_post_terms( $new_shape, array( $category_id ), 'wp-map-category' );
}
mapster_setDefaults( acf_get_fields( 'group_616377d62836b' ), $new_shape );
mapster_setDefaults( acf_get_fields( 'group_6163d357655f4' ), $new_shape );
update_field( 'color', $feature->properties->color, $new_shape );
update_field( 'opacity', $feature->properties->opacity * 100, $new_shape );
update_field( 'line', json_encode( $geojson ), $new_shape );
}
}
}
ob_get_clean();
return array(
"count" => $line_count + $poly_count + $marker_count,
);
}
}
public function mapster_wp_maps_get_category_features()
{
register_rest_route( 'mapster-wp-maps', 'category', array(
'methods' => 'GET',
'callback' => 'mapster_wp_maps_get_category',
'permission_callback' => function () {
return true;
// open to public
},
) );
function mapster_wp_maps_get_category( $params )
{
$response = array();
$id = json_decode( $params['id'] );
$args = array(
'tax_query' => array( array(
"taxonomy" => "wp-map-category",
"field" => "term_id",
"terms" => $id,
"include_children" => false,
) ),
'post_status' => 'publish',
'posts_per_page' => -1,
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
$thisResponse = mapster_getOnlyValues( get_the_ID() );
array_push( $response, $thisResponse );
}
}
ob_get_clean();
return $response;
}
}
public function mapster_wp_maps_get_all_features()
{
register_rest_route( 'mapster-wp-maps', 'features', array(
'methods' => 'GET',
'callback' => 'mapster_wp_maps_get_features',
'permission_callback' => function () {
return true;
// open to public
},
) );
function mapster_wp_maps_get_features( $params )
{
$response = array();
$idsArray = json_decode( $params['ids'] );
$catsArray = json_decode( $params['categories'] );
if ( mapster_can_be_looped( $idsArray ) ) {
foreach ( $idsArray as $id ) {
$thisResponse = mapster_getOnlyValues( $id );
array_push( $response, $thisResponse );
}
}
// Check for category additions
if ( mapster_can_be_looped( $catsArray ) ) {
if ( count( $catsArray ) > 0 ) {
$args = array(
'post_type' => array(
'mapster-wp-user-sub',
'mapster-wp-location',
'mapster-wp-polygon',
'mapster-wp-line'
),
'tax_query' => array( array(
"taxonomy" => "wp-map-category",
"field" => "term_id",
"terms" => $catsArray,
"include_children" => false,
) ),
'post_status' => 'publish',
'posts_per_page' => -1,
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
$thisResponse = mapster_getOnlyValues( get_the_ID() );
array_push( $response, $thisResponse );
}
}
}
}
ob_get_clean();
return $response;
}
}
public function mapster_wp_maps_get_single_feature()
{
register_rest_route( 'mapster-wp-maps', 'feature', array(
'methods' => 'GET',
'callback' => 'mapster_wp_maps_get_feature',
'permission_callback' => function () {
return true;
// open to public
},
) );
function mapster_wp_maps_get_feature( $params )
{
$post_id = intval( $params['id'] );
$thisResponse = mapster_getOnlyValues( $post_id );
ob_get_clean();
return $thisResponse;
}
}
public function mapster_wp_maps_get_map()
{
register_rest_route( 'mapster-wp-maps', 'map', array(
'methods' => 'GET',
'callback' => 'mapster_wp_maps_get_single_map',
'permission_callback' => function () {
return true;
// open to public
},
) );
function mapster_wp_maps_get_single_map( $params )
{
$post_id = intval( $params['id'] );
$ignore_cache = $params['ignore_cache'];
$single_feature_id = ( isset( $params['single_feature_id'] ) ? intval( $params['single_feature_id'] ) : false );
$acf_data = get_field_objects( $post_id );
$minimized_data = array();
// Top level properties
if ( mapster_can_be_looped( $acf_data ) ) {
foreach ( $acf_data as $key => $data ) {
$minimized_data[$key] = $data['value'];
}
}
$popup_styles = array();
$popup_styles_added = array();
$minimized_location_data = array();
$minimized_line_data = array();
$minimized_polygon_data = array();
$categories = array();
// Load one feature if it's specified
if ( $single_feature_id ) {
$single_feature_post_type = get_post_type( $single_feature_id );
$dataToAdd = mapster_getOnlyValues( $single_feature_id );
if ( $dataToAdd['data']['popup_style'] ) {
if ( !in_array( $dataToAdd['data']['popup_style']['id'], $popup_styles_added ) ) {
array_push( $popup_styles, $dataToAdd['data']['popup_style'] );
array_push( $popup_styles_added, $dataToAdd['data']['popup_style']['id'] );
}
$dataToAdd['data']['popup_style'] = $dataToAdd['data']['popup_style']['id'];
}
if ( $single_feature_post_type === 'mapster-wp-location' || $single_feature_post_type == 'mapster-wp-user-sub' ) {
array_push( $minimized_location_data, $dataToAdd );
} else {
if ( $single_feature_post_type === 'mapster-wp-line' ) {
array_push( $minimized_line_data, $dataToAdd );
} else {
if ( $single_feature_post_type === 'mapster-wp-polygon' ) {
array_push( $minimized_polygon_data, $dataToAdd );
}
}
}
} else {
// Normal feature additions
if ( mapster_can_be_looped( $minimized_data['locations'] ) ) {
foreach ( $minimized_data['locations'] as $location ) {
$dataToAdd = mapster_getOnlyValues( $location->ID );
if ( isset( $dataToAdd['data']['popup_style'] ) ) {
if ( !in_array( $dataToAdd['data']['popup_style']['id'], $popup_styles_added ) ) {
array_push( $popup_styles, $dataToAdd['data']['popup_style'] );
array_push( $popup_styles_added, $dataToAdd['data']['popup_style']['id'] );
}
$dataToAdd['data']['popup_style'] = $dataToAdd['data']['popup_style']['id'];
}
array_push( $minimized_location_data, $dataToAdd );
}
}
if ( mapster_can_be_looped( $minimized_data['lines'] ) ) {
foreach ( $minimized_data['lines'] as $line ) {
$dataToAdd = mapster_getOnlyValues( $line->ID );
if ( isset( $dataToAdd['data']['popup_style'] ) ) {
if ( !in_array( $dataToAdd['data']['popup_style']['id'], $popup_styles_added ) ) {
array_push( $popup_styles, $dataToAdd['data']['popup_style'] );
array_push( $popup_styles_added, $dataToAdd['data']['popup_style']['id'] );
}
$dataToAdd['data']['popup_style'] = $dataToAdd['data']['popup_style']['id'];
}
array_push( $minimized_line_data, $dataToAdd );
}
}
if ( mapster_can_be_looped( $minimized_data['polygons'] ) ) {
foreach ( $minimized_data['polygons'] as $polygon ) {
$dataToAdd = mapster_getOnlyValues( $polygon->ID );
if ( isset( $dataToAdd['data']['popup_style'] ) ) {
if ( !in_array( $dataToAdd['data']['popup_style']['id'], $popup_styles_added ) ) {
array_push( $popup_styles, $dataToAdd['data']['popup_style'] );
array_push( $popup_styles_added, $dataToAdd['data']['popup_style']['id'] );
}
$dataToAdd['data']['popup_style'] = $dataToAdd['data']['popup_style']['id'];
}
array_push( $minimized_polygon_data, $dataToAdd );
}
}
// Check for category additions
$categories = get_field( 'add_by_category', $post_id );
if ( mapster_can_be_looped( $categories ) ) {
if ( count( $categories ) > 0 ) {
$all_posts = array();
$post_ids_added = array();
if ( get_field( 'submission_administration_show_all_languages_on_one_map', $post_id, true ) && is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) {
$current_lang = apply_filters( 'wpml_current_language', NULL );
$languages = apply_filters( 'wpml_active_languages', NULL, 'orderby=id&order=desc' );
foreach ( $languages as $language ) {
do_action( 'wpml_switch_language', $language["language_code"] );
$args = array(
'post_type' => array(
'mapster-wp-user-sub',
'mapster-wp-location',
'mapster-wp-polygon',
'mapster-wp-line'
),
'tax_query' => array( array(
"taxonomy" => "wp-map-category",
"field" => "term_id",
"terms" => $categories,
"include_children" => false,
) ),
'post_status' => 'publish',
'posts_per_page' => -1,
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
if ( !in_array( get_the_ID(), $post_ids_added ) ) {
array_push( $all_posts, array(
"post_type" => get_post_type(),
"post_id" => get_the_ID(),
) );
array_push( $post_ids_added, get_the_ID() );
}
}
}
}
do_action( 'wpml_switch_language', $current_lang["language_code"] );
} else {
$args = array(
'post_type' => array(
'mapster-wp-user-sub',
'mapster-wp-location',
'mapster-wp-polygon',
'mapster-wp-line'
),
'tax_query' => array( array(
"taxonomy" => "wp-map-category",
"field" => "term_id",
"terms" => $categories,
"include_children" => false,
) ),
'post_status' => 'publish',
'posts_per_page' => -1,
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
array_push( $all_posts, array(
"post_type" => get_post_type(),
"post_id" => get_the_ID(),
) );
}
}
}
foreach ( $all_posts as $post ) {
if ( $post['post_type'] == 'mapster-wp-location' || $post['post_type'] == 'mapster-wp-user-sub' ) {
$dataToAdd = mapster_getOnlyValues( $post['post_id'] );
if ( isset( $dataToAdd['data']['popup_style'] ) ) {
if ( !in_array( $dataToAdd['data']['popup_style']['id'], $popup_styles_added ) ) {
array_push( $popup_styles, $dataToAdd['data']['popup_style'] );
array_push( $popup_styles_added, $dataToAdd['data']['popup_style']['id'] );
}
$dataToAdd['data']['popup_style'] = $dataToAdd['data']['popup_style']['id'];
}
array_push( $minimized_location_data, $dataToAdd );
}
if ( $post['post_type'] == 'mapster-wp-line' ) {
$dataToAdd = mapster_getOnlyValues( $post['post_id'] );
if ( isset( $dataToAdd['data']['popup_style'] ) ) {
if ( !in_array( $dataToAdd['data']['popup_style']['id'], $popup_styles_added ) ) {
array_push( $popup_styles, $dataToAdd['data']['popup_style'] );
array_push( $popup_styles_added, $dataToAdd['data']['popup_style']['id'] );
}
$dataToAdd['data']['popup_style'] = $dataToAdd['data']['popup_style']['id'];
}
array_push( $minimized_line_data, $dataToAdd );
}
if ( $post['post_type'] == 'mapster-wp-polygon' ) {
$dataToAdd = mapster_getOnlyValues( $post['post_id'] );
if ( isset( $dataToAdd['data']['popup_style'] ) ) {
if ( !in_array( $dataToAdd['data']['popup_style']['id'], $popup_styles_added ) ) {
array_push( $popup_styles, $dataToAdd['data']['popup_style'] );
array_push( $popup_styles_added, $dataToAdd['data']['popup_style']['id'] );
}
$dataToAdd['data']['popup_style'] = $dataToAdd['data']['popup_style']['id'];
}
array_push( $minimized_polygon_data, $dataToAdd );
}
}
}
}
unset( $minimized_data['locations'] );
unset( $minimized_data['lines'] );
unset( $minimized_data['polygons'] );
}
ob_get_clean();
// return json_decode('');
return array(
'id' => $post_id,
'cats' => $categories,
'popup_styles' => $popup_styles,
'location_template' => mapster_getTemplate( 'location' ),
'line_template' => mapster_getTemplate( 'line' ),
'polygon_template' => mapster_getTemplate( 'polygon' ),
'map' => mapster_remakeUsingTemplate( $minimized_data, 'map' ),
'locations' => mapster_minimizeUsingTemplate( dynamic_popup_replace( $minimized_location_data ), 'location' ),
'lines' => mapster_minimizeUsingTemplate( dynamic_popup_replace( $minimized_line_data ), 'line' ),
'polygons' => mapster_minimizeUsingTemplate( dynamic_popup_replace( $minimized_polygon_data ), 'polygon' ),
);
}
}
}
function dynamic_popup_replace( $data )
{
return $data;
}
function replace_text_with_property_or_acf( $post_id, $properties, $text )
{
$new_text = $text;
preg_match_all( '#\\{(.*?)\\}#', $new_text, $matches );
foreach ( $matches[0] as $index => $match ) {
if ( isset( $properties[$matches[1][$index]] ) ) {
$new_text = str_replace( $match, $properties[$matches[1][$index]], $new_text );
} else {
if ( strpos( $match, "acf" ) !== false ) {
$acf_field_id = str_replace( "acf.", "", $matches[1][$index] );
$field_data = get_field_object( $acf_field_id, $post_id );
if ( $field_data ) {
if ( isset( $field_data['choices'] ) ) {
if ( is_array( $field_data['value'] ) ) {
$arranged_values = array();
foreach ( $field_data['value'] as $value ) {
array_push( $arranged_values, $field_data['choices'][$value] );
}
$field_data = implode( ', ', $arranged_values );
} else {
$field_data = $field_data['choices'][$field_data['value']];
}
} else {
$field_data = $field_data['value'];
}
$new_text = str_replace( $match, $field_data, $new_text );
} else {
$new_text = str_replace( $match, "", $new_text );
}
}
}
}
return $new_text;
}
function mapster_setGroup( $field, $sub_fields, $post_id )
{
$array_to_add = array();
if ( mapster_can_be_looped( $sub_fields ) ) {
foreach ( $sub_fields as $sub_field ) {
if ( isset( $sub_field['default_value'] ) ) {
$array_to_add[$sub_field['name']] = $sub_field['default_value'];
update_field( $field['name'], $array_to_add, $post_id );
}
if ( $sub_field['type'] == 'group' ) {
mapster_setGroup( $sub_field, $sub_field['sub_fields'], $post_id );
}
}
}
}
function mapster_setDefaults( $all_fields, $post_id )
{
$field_names = array();
if ( mapster_can_be_looped( $all_fields ) ) {
foreach ( $all_fields as $field ) {
array_push( $field_names, $field );
if ( isset( $field['default_value'] ) ) {
update_field( $field['name'], $field['default_value'], $post_id );
}
if ( $field['type'] == 'group' ) {
mapster_setGroup( $field, $field['sub_fields'], $post_id );
}
}
}
return $field_names;
}
function mapster_minimizeUsingTemplate( $data, $type )
{
$toReturn = array();
$template = mapster_getTemplate( $type );
if ( $type == 'map' ) {
$toReturn = mapster_replaceValueIfNotDefault( $template, $data );
} else {
if ( mapster_can_be_looped( $data ) ) {
foreach ( $data as $feature ) {
array_push( $toReturn, mapster_replaceValueIfNotDefault( $template, $feature ) );
}
}
}
return $toReturn;
}
// Using default ACF values to make the object
// Therefore not worrying about undefined values that are newly added
function mapster_remakeUsingTemplate( $data, $type )
{
$toReturn = array();
$template = mapster_getTemplate( $type );
if ( $type == 'map' ) {
$toReturn = mapster_replaceValueOrNot( $template, $data );
} else {
if ( mapster_can_be_looped( $data ) ) {
foreach ( $data as $feature ) {
array_push( $toReturn, mapster_replaceValueOrNot( $template, $feature ) );
}
}
}
return $toReturn;
}
function mapster_replaceValueIfNotDefault( $template, $data )
{
$toReturn = array();
if ( mapster_can_be_looped( $template ) ) {
foreach ( $template as $key => $field ) {
if ( !is_null( $field ) || $key == 'popup_style' || isset( $data[$key] ) && !is_null( $data[$key] ) ) {
if ( !isset( $data[$key] ) ) {
// $toReturn[$key] = $field;
} else {
// var_dump($field);
if ( mapster_can_be_looped( $field ) ) {
$valueToAdd = mapster_replaceValueIfNotDefault( $field, $data[$key] );
if ( count( $valueToAdd ) > 0 ) {
$toReturn[$key] = $valueToAdd;
}
} else {
if ( mapster_can_be_looped( $data[$key] ) ) {
if ( $data[$key] !== $field ) {
$toReturn[$key] = $data[$key];
}
} else {
if ( strval( $data[$key] ) !== strval( $field ) ) {
$toReturn[$key] = $data[$key];
}
}
}
}
}
}
}
if ( mapster_can_be_looped( $data ) ) {
$all_field_keys = mapster_getAllTemplateFields( $template );
foreach ( $data as $key => $dataPiece ) {
if ( !is_null( $dataPiece ) ) {
if ( !in_array( $key, $all_field_keys ) ) {
$toReturn['additional_details'][$key] = $dataPiece;
}
}
}
$extra_properties = mapster_getPropertyList( $data );
foreach ( $extra_properties as $property_name => $value ) {
$toReturn['data']['additional_details'][$property_name] = $value;
}
}
return $toReturn;
}
function mapster_getAllTemplateFields( $template )
{
$toReturn = array();
foreach ( $template as $templateKey => $field ) {
if ( mapster_can_be_looped( $field ) ) {
array_push( $toReturn, $templateKey );
$toReturn = array_merge( $toReturn, mapster_getAllTemplateFields( $field ) );
} else {
array_push( $toReturn, $templateKey );
}
}
return $toReturn;
}
function mapster_replaceValueOrNot( $template, $data )
{
$toReturn = array();
if ( mapster_can_be_looped( $template ) ) {
foreach ( $template as $key => $field ) {
if ( !isset( $data[$key] ) ) {
$toReturn[$key] = $field;
} else {
if ( mapster_can_be_looped( $field ) ) {
$toReturn[$key] = mapster_replaceValueOrNot( $field, $data[$key] );
} else {
$toReturn[$key] = $data[$key];
}
}
}
}
if ( mapster_can_be_looped( $data ) ) {
foreach ( $data as $key => $dataPiece ) {
if ( !isset( $toReturn[$key] ) && $dataPiece !== null ) {
$toReturn['additional_details'][$key] = $dataPiece;
}
if ( $key == 'allowed_area' ) {
$toReturn[$key] = get_field( 'polygon', $dataPiece );
}
}
$extra_properties = mapster_getPropertyList( $data );
foreach ( $extra_properties as $property_name => $value ) {
$toReturn['data']['additional_details'][$property_name] = $value;
}
}
return $toReturn;
}
function mapster_getTemplate( $type )
{
if ( $type == 'map' ) {
return mapster_arrange_fields( acf_get_fields( 'group_61636c62b003e' ), false );
} elseif ( $type == 'line' ) {
return mapster_arrange_fields( acf_get_fields( 'group_616377d62836b' ), true );
} elseif ( $type == 'location' ) {
return mapster_arrange_fields( acf_get_fields( 'group_6163732e0426e' ), true );
} elseif ( $type == 'polygon' ) {
return mapster_arrange_fields( acf_get_fields( 'group_616379566202f' ), true );
}
}
// Organizing responses to have minimal output
function mapster_returnPopupData( $popup_id )
{
$single_popup_style_data = array();
$popup_style_data = get_field_objects( $popup_id );
if ( mapster_can_be_looped( $popup_style_data ) ) {
foreach ( $popup_style_data as $key => $data ) {
$single_popup_style_data[$key] = $data['value'];
}
}
$single_popup_style_data['id'] = $popup_id;
return $single_popup_style_data;
}
function mapster_getPropertyList( $data )
{
$propertiesToReturn = array();
return $propertiesToReturn;
}
function mapster_getTermList( $object_id )
{
$terms = get_the_terms( $object_id, 'wp-map-category' );
$termsToReturn = array();
if ( mapster_can_be_looped( $terms ) ) {
foreach ( $terms as $term ) {
$thisTerm = array(
"id" => $term->term_id,
"name" => $term->name,
"color" => get_field( "color", 'wp-map-category_' . $term->term_id ),
"icon" => get_field( "icon", 'wp-map-category_' . $term->term_id ),
"parent" => $term->parent,
);
array_push( $termsToReturn, $thisTerm );
}
}
return $termsToReturn;
}
function mapster_getOnlyValues( $object_id )
{
$field_object_data = get_field_objects( $object_id );
$single_feature_data = array(
"id" => $object_id,
"permalink" => get_permalink( $object_id ),
"title" => get_the_title( $object_id ),
"content" => get_the_content( null, null, $object_id ),
"categories" => mapster_getTermList( $object_id ),
"data" => $field_object_data,
);
if ( mapster_can_be_looped( $field_object_data ) ) {
foreach ( $field_object_data as $key => $data ) {
$thisValue = $data['value'];
if ( is_string( $data['value'] ) && strpos( $data['value'], "FeatureCollection" ) !== false ) {
ini_set( 'serialize_precision', '-1' );
$thisGeoJSON = json_decode( $data['value'] );
$thisValue = array(
'type' => $thisGeoJSON->features[0]->geometry->type,
'coordinates' => mapster_encode_coordinates( $thisGeoJSON->features[0]->geometry->coordinates ),
);
}
$single_feature_data['data'][$key] = $thisValue;
if ( $key == 'popup_style' ) {
if ( $single_feature_data['data'][$key]->ID ) {
$single_feature_data['data'][$key] = mapster_returnPopupData( $single_feature_data['data'][$key]->ID );
}
}
if ( $key == 'popup' ) {
$single_feature_data['data'][$key]['permalink'] = get_permalink( $object_id );
if ( $single_feature_data['data'][$key]['featured_image'] ) {
$newImageData = array();
$newImageData['id'] = $single_feature_data['data'][$key]['featured_image']['id'];
$image_thumbnail_size = ( $single_feature_data['data']['popup_style']['image_thumbnail_size'] ? $single_feature_data['data']['popup_style']['image_thumbnail_size'] : 'medium' );
$newImageData['url'] = wp_get_attachment_image_url( $newImageData['id'], $image_thumbnail_size );
$single_feature_data['data'][$key]['featured_image'] = $newImageData;
}
}
if ( $key == 'images' ) {
foreach ( $field_object_data[$key]['value'] as $image ) {
$thisAttachment = wp_get_attachment_image_src( $image['id'], 'medium' );
array_push( $single_feature_data['data']['popup']['images'], $thisAttachment[0] );
}
}
if ( $key === 'icon' ) {
$newImageData = array();
if ( $single_feature_data['data'][$key]['icon_properties']['icon-image'] ) {
$newImageData['id'] = $single_feature_data['data'][$key]['icon_properties']['icon-image']['id'];
$newImageData['url'] = $single_feature_data['data'][$key]['icon_properties']['icon-image']['url'];
$newImageData['height'] = $single_feature_data['data'][$key]['icon_properties']['icon-image']['height'];
$newImageData['width'] = $single_feature_data['data'][$key]['icon_properties']['icon-image']['width'];
$single_feature_data['data'][$key]['icon_properties']['icon-image'] = $newImageData;
}
}
}
}
return $single_feature_data;
}
// Turning coordinates into encoded
function mapster_encode_coordinates( $coordinates )
{
// $poly_encoder = new Polyline();
// $coordinates_to_return = array();
// if(is_numeric($coordinates[0])) { // It's a point, don't encode
// $coordinates_to_return = $coordinates;
// } else if(is_array($coordinates[0])) { // Line, MultiLine, Poly, MultiPoly
// if(is_numeric($coordinates[0][0])) { // Line
// $coordinates_to_return = $poly_encoder->encode($coordinates);
// }
// if(is_array($coordinates[0][0])) { // Multiline, Poly, MultiPoly
// if(is_numeric($coordinates[0][0][0])) { // Multiline, Poly
// foreach($coordinates as $pointSet) {
// array_push($coordinates_to_return, $poly_encoder->encode($pointSet));
// }
// }
// if(is_array($coordinates[0][0][0])) { // MultiPoly
// foreach($coordinates as $polyOrHoleCollection) {
// $polyOrHoleHolder = array();
// foreach($polyOrHoleCollection as $polyOrHole) {
// array_push($polyOrHoleHolder, $poly_encoder->encode($polyOrHole));
// }
// array_push($coordinates_to_return, $polyOrHoleHolder);
// }
// }
// }
// }
// return $coordinates_to_return;
return $coordinates;
}
// Organizing template fields
function mapster_arrange_fields( $field_group, $isFeature )
{
$toReturn = array();
if ( $isFeature ) {
$toReturn['permalink'] = false;
$toReturn['title'] = false;
$toReturn['content'] = false;
$toReturn['categories'] = false;
$toReturn['id'] = false;
$toReturn['data'] = array();
if ( mapster_can_be_looped( $field_group ) ) {
foreach ( $field_group as $field ) {
if ( $field['name'] !== "" ) {
$toReturn['data'][$field['name']] = mapster_arrange_sub_fields( $field );
}
}
}
// Get popup stuff too
$popup_fields = acf_get_fields( 'group_6163d357655f4' );
if ( mapster_can_be_looped( $popup_fields ) ) {
foreach ( $popup_fields as $field ) {
$toReturn['data'][$field['name']] = mapster_arrange_sub_fields( $field );
}
}
$toReturn['data']['popup']['permalink'] = false;
} else {
foreach ( $field_group as $field ) {
if ( $field['name'] !== "" ) {
$toReturn[$field['name']] = mapster_arrange_sub_fields( $field );
}
}
}
return $toReturn;
}
function mapster_arrange_sub_fields( $field )
{
$toReturn = array();
if ( isset( $field['sub_fields'] ) ) {
if ( mapster_can_be_looped( $field['sub_fields'] ) ) {
foreach ( $field['sub_fields'] as $sub_field ) {
$value = mapster_arrange_sub_fields( $sub_field );
$toReturn[$sub_field['name']] = $value;
}
}
return $toReturn;
} else {
// Handler for true/false
if ( $field['type'] == 'true_false' ) {
return ( $field['default_value'] == 0 ? false : true );
} else {
if ( !isset( $field['default_value'] ) ) {
return null;
} else {
return $field['default_value'];
}
}
}
}
function mapster_can_be_looped( $variable )
{
if ( is_array( $variable ) || is_object( $variable ) ) {
return true;
} else {
return false;
}
}
function mapster_update_wpml_post( $duplicated_post_id, $new_post_id, $post_type )
{
if ( is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) ) {
$post_language_code = false;
if ( $duplicated_post_id ) {
$get_language_args = array(
'element_id' => $duplicated_post_id,
'element_type' => "post_" . $post_type,
);
$original_post_language_info = apply_filters( 'wpml_element_language_details', null, $get_language_args );
$post_language_code = $original_post_language_info->language_code;
} else {
$post_language_code = apply_filters( 'wpml_current_language', NULL );
}
$set_language_args = array(
'element_id' => $new_post_id,
'element_type' => "post_" . $post_type,
'trid' => false,
'language_code' => $post_language_code,
);
do_action( 'wpml_set_element_language_details', $set_language_args );
}
}