Skip to content

#2498 - Metrics - Personal Layers Map #2542

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions dt-assets/js/shared-functions.js
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,14 @@ window.SHAREDFUNCTIONS = {
window.localStorage.setItem(key, JSON.stringify(json));
}
},
remove_json_from_local_storage(key, path) {
if (path) {
key = path + '_' + key;
}
if (localStorage) {
window.localStorage.removeItem(key);
}
},
createCustomFilter(field, value) {
return {
fields: [
Expand Down
44 changes: 41 additions & 3 deletions dt-mapping/mapping-queries.php
Original file line number Diff line number Diff line change
Expand Up @@ -1301,34 +1301,72 @@ public static function post_type_geojson( $post_type, $args = [], $offset = 0, $
global $wpdb;

//phpcs:disable
// Determine if post id filtering should take place.
$post_id_filter_sql = '';
$shared_user_join_sql = '';
$shared_user_condition_sql = '';
if ( isset( $args['list_all'], $args['list_all_by_user_id'] ) && !$args['list_all'] ) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

list_all seems to be set by the browser.
Consider checking if the user can actually list all. the new genmapper should have code to copy.

$post_id_filter_sql = $wpdb->prepare( "
SELECT * FROM
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this outer layer is needed

(
SELECT api_p.ID
FROM $wpdb->posts api_p
LEFT JOIN $wpdb->postmeta as field_type ON ( field_type.post_id = api_p.ID AND field_type.meta_key = 'type' )
WHERE (field_type.meta_value = 'access' OR field_type.meta_value = 'user' OR field_type.meta_value = 'access_placeholder')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This keeps groups from showing.
We don't need to filter by type for personal contacts

AND (api_p.post_status = 'publish')
AND api_p.post_type = %s
GROUP BY api_p.ID
LIMIT 0, 50000
) AS assigned_post_ids
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm confused at this whole section. It says assigned_post_ids, but no sql to to with assignment?
Could be that just the share filter is needed here.

", ( ( $post_type === 'system-users' ) ? 'contacts' : $post_type ) );

if ( isset( $args['field_type'] ) && $args['field_type'] == 'user_select' ) {
$shared_user_join_sql = "LEFT JOIN $wpdb->dt_share as field_shared_with ON ( field_shared_with.post_id = um.meta_value )";
$post_id_filter_sql = 'AND (um.meta_value IN ('. $post_id_filter_sql .'))';
} else {
$shared_user_join_sql = "LEFT JOIN $wpdb->dt_share as field_shared_with ON ( field_shared_with.post_id = p.ID )";
$post_id_filter_sql = 'AND (p.ID IN ('. $post_id_filter_sql .'))';
}
$shared_user_condition_sql = "AND (field_shared_with.user_id = ". $args['list_all_by_user_id'] .")";
}

if ( isset( $args['field_key'], $args['field_type'] ) && in_array( $args['field_type'], [ 'key_select', 'multi_select' ] ) ){
$prepared_query = $wpdb->prepare( "
SELECT p.post_title AS name, lgm.post_id, lgm.lng, lgm.lat
SELECT DISTINCT p.post_title AS name, lgm.post_id, lgm.lng, lgm.lat
FROM $wpdb->dt_location_grid_meta AS lgm
JOIN $wpdb->posts AS p ON ( p.ID = lgm.post_id )
LEFT JOIN $wpdb->postmeta AS pm ON ( p.ID = pm.post_id )
". $shared_user_join_sql ."
WHERE lgm.post_type = %s
". $shared_user_condition_sql ."
AND (pm.meta_key = %s)" . ( !empty( $args['field_values'] ) ? " AND (pm.meta_value IN (" . dt_array_to_sql( $args['field_values'] ) . "))" : '' ) ."
". $post_id_filter_sql ."
LIMIT %d, %d;
", $post_type, $args['field_key'], $offset, $limit );

} elseif ( isset( $args['field_type'] ) && $args['field_type'] == 'user_select' ){
$prepared_query = $wpdb->prepare("
SELECT u.display_name AS name, um.meta_value AS post_id, lgm.lng, lgm.lat
SELECT DISTINCT u.display_name AS name, um.meta_value AS post_id, lgm.lng, lgm.lat
FROM $wpdb->dt_location_grid_meta AS lgm
JOIN $wpdb->users AS u ON ( u.ID = lgm.post_id )
LEFT JOIN $wpdb->usermeta AS um ON ( u.ID = um.user_id AND um.meta_key = %s )
INNER JOIN $wpdb->usermeta AS um_cap ON ( u.ID = um_cap.user_id AND um_cap.meta_key = %s )
". $shared_user_join_sql ."
WHERE lgm.post_type = %s
". $shared_user_condition_sql ."
". $post_id_filter_sql ."
LIMIT %d, %d;
", ( $wpdb->prefix . 'corresponds_to_contact' ), ( $wpdb->prefix . 'capabilities' ), 'users', $offset, $limit );

} else {
$prepared_query = $wpdb->prepare( "
SELECT p.post_title AS name, lgm.post_id, lgm.lng, lgm.lat
SELECT DISTINCT p.post_title AS name, lgm.post_id, lgm.lng, lgm.lat
FROM $wpdb->dt_location_grid_meta AS lgm
JOIN $wpdb->posts AS p ON ( p.ID = lgm.post_id )
". $shared_user_join_sql ."
WHERE lgm.post_type = %s
". $shared_user_condition_sql ."
". $post_id_filter_sql ."
LIMIT %d, %d;
", $post_type, $offset, $limit );
}
Expand Down
4 changes: 3 additions & 1 deletion dt-metrics/metrics.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ public function __construct(){
// Personal
require_once( get_template_directory() . '/dt-metrics/records/genmap.php' );
new DT_Metrics_Groups_Genmap( 'personal', __( 'Personal', 'disciple_tools' ) );
require_once( get_template_directory() . '/dt-metrics/records/dynamic-records-map.php' );
new DT_Metrics_Dynamic_Records_Map( 'personal', __( 'Personal', 'disciple_tools' ) );
require_once( get_template_directory() . '/dt-metrics/personal/coaching-tree.php' );
require_once( get_template_directory() . '/dt-metrics/personal/baptism-tree.php' );
require_once( get_template_directory() . '/dt-metrics/personal/group-tree.php' );
Expand Down Expand Up @@ -80,7 +82,7 @@ public function __construct(){

/* Record Types */
new DT_Metrics_Groups_Genmap( 'records', __( 'Genmap', 'disciple_tools' ) );
require_once( get_template_directory() . '/dt-metrics/records/dynamic-records-map.php' );
new DT_Metrics_Dynamic_Records_Map( 'records', __( 'Records Map', 'disciple_tools' ) );
}
if ( !empty( $modules['access_module']['enabled'] ) ){
require_once( get_template_directory() . '/dt-metrics/combined/critical-path.php' );
Expand Down
122 changes: 90 additions & 32 deletions dt-metrics/records/dynamic-records-map.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ jQuery(document).ready(function ($) {
spinner: null,
map_query_layer_payloads: {},
dt_maps_layers_cookie_id: 'dt-maps-layers-cookie',
dt_maps_layers_cookie_id_by_slug: `dt-maps-layers-cookie-${window.dt_mapbox_metrics.settings.menu_slug}`,
recursive_load: async function (
body,
data = {},
Expand All @@ -30,6 +31,7 @@ jQuery(document).ready(function ($) {

body.offset = offset;
body.limit = limit;
body.list_all = mapbox_library_api.obj.settings.can_list_all;
let query = await window.makeRequest(
'POST',
mapbox_library_api.obj.settings.post_type_rest_url,
Expand Down Expand Up @@ -438,15 +440,25 @@ jQuery(document).ready(function ($) {
mapbox_library_api.dt_maps_layers_cookie_id,
{},
);
if (!dt_maps_layers_cookie) {
dt_maps_layers_cookie =
window.SHAREDFUNCTIONS.get_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id_by_slug,
{},
);
}
if (!dt_maps_layers_cookie) {
dt_maps_layers_cookie = {};
}
dt_maps_layers_cookie['' + response.request.id] = cookie;
window.SHAREDFUNCTIONS.save_json_to_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
mapbox_library_api.dt_maps_layers_cookie_id_by_slug,
dt_maps_layers_cookie,
null,
);
window.SHAREDFUNCTIONS.remove_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
);

// Adjust all map layer points.
mapbox_library_api.adjust_layer_point_sizes();
Expand Down Expand Up @@ -501,16 +513,26 @@ jQuery(document).ready(function ($) {
mapbox_library_api.dt_maps_layers_cookie_id,
{},
);
if (!dt_maps_layers_cookie) {
dt_maps_layers_cookie =
window.SHAREDFUNCTIONS.get_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id_by_slug,
{},
);
}
if (!dt_maps_layers_cookie) {
dt_maps_layers_cookie = {};
}

dt_maps_layers_cookie['' + layer_id] = map_query_layer_payload;
window.SHAREDFUNCTIONS.save_json_to_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
mapbox_library_api.dt_maps_layers_cookie_id_by_slug,
dt_maps_layers_cookie,
null,
);
window.SHAREDFUNCTIONS.remove_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
);

// Close layer records edit modal.
$('#add_records_div').fadeOut('fast');
Expand Down Expand Up @@ -544,14 +566,24 @@ jQuery(document).ready(function ($) {
window.SHAREDFUNCTIONS.get_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
);
if (!dt_maps_layers_cookie) {
dt_maps_layers_cookie =
window.SHAREDFUNCTIONS.get_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id_by_slug,
{},
);
}
if (dt_maps_layers_cookie['' + map_query_layer_payload.id]) {
delete dt_maps_layers_cookie['' + map_query_layer_payload.id];

window.SHAREDFUNCTIONS.save_json_to_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
mapbox_library_api.dt_maps_layers_cookie_id_by_slug,
dt_maps_layers_cookie,
null,
);
window.SHAREDFUNCTIONS.remove_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
);
}

// Remove from map memory.
Expand Down Expand Up @@ -634,12 +666,22 @@ jQuery(document).ready(function ($) {
window.SHAREDFUNCTIONS.get_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
);
if (!dt_maps_layers_cookie) {
dt_maps_layers_cookie =
window.SHAREDFUNCTIONS.get_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id_by_slug,
{},
);
}
dt_maps_layers_cookie['' + div_layer_id] = layer_settings;
window.SHAREDFUNCTIONS.save_json_to_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
mapbox_library_api.dt_maps_layers_cookie_id_by_slug,
dt_maps_layers_cookie,
null,
);
window.SHAREDFUNCTIONS.remove_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
);
}
break;
}
Expand Down Expand Up @@ -699,6 +741,13 @@ jQuery(document).ready(function ($) {
mapbox_library_api.dt_maps_layers_cookie_id,
false,
);
if (!dt_maps_layers_cookie) {
dt_maps_layers_cookie =
window.SHAREDFUNCTIONS.get_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id_by_slug,
false,
);
}

// Convert parent object to array of layer objects.
let layer_cookies = [];
Expand Down Expand Up @@ -729,10 +778,13 @@ jQuery(document).ready(function ($) {
dt_maps_layers_cookie = {};
dt_maps_layers_cookie['' + default_cookie['id']] = default_cookie;
window.SHAREDFUNCTIONS.save_json_to_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
mapbox_library_api.dt_maps_layers_cookie_id_by_slug,
dt_maps_layers_cookie,
null,
);
window.SHAREDFUNCTIONS.remove_json_from_local_storage(
mapbox_library_api.dt_maps_layers_cookie_id,
);

// Force a reload.
reload_data = true;
Expand Down Expand Up @@ -1502,13 +1554,14 @@ jQuery(document).ready(function ($) {

points_map: {
setup: async function () {
let payload = {
post_type: mapbox_library_api.post_type,
query: mapbox_library_api.query_args || {},
};
let points = await window.makeRequest(
'POST',
mapbox_library_api.obj.settings.points_rest_url,
{
post_type: mapbox_library_api.post_type,
query: mapbox_library_api.query_args || {},
},
payload,
mapbox_library_api.obj.settings.rest_base_url,
);
this.load_layer(points);
Expand Down Expand Up @@ -1645,13 +1698,14 @@ jQuery(document).ready(function ($) {

let cluster_map = {
default_setup: async function () {
let payload = {
post_type: mapbox_library_api.post_type,
query: mapbox_library_api.query_args || {},
};
let geojson = await window.makeRequest(
'POST',
mapbox_library_api.obj.settings.rest_url,
{
post_type: mapbox_library_api.post_type,
query: mapbox_library_api.query_args || {},
},
payload,
mapbox_library_api.obj.settings.rest_base_url,
);
cluster_map.load_layer(geojson);
Expand Down Expand Up @@ -1792,13 +1846,14 @@ jQuery(document).ready(function ($) {
behind_layer: null,
setup: async function (behind_layer = null) {
area_map.behind_layer = behind_layer;
let payload = {
post_type: mapbox_library_api.obj.settings.post_type,
query: mapbox_library_api.query_args || {},
};
area_map.grid_data = await window.makeRequest(
'POST',
mapbox_library_api.obj.settings.totals_rest_url,
{
post_type: mapbox_library_api.obj.settings.post_type,
query: mapbox_library_api.query_args || {},
},
payload,
mapbox_library_api.obj.settings.rest_base_url,
);
await area_map.load_layer();
Expand Down Expand Up @@ -2051,15 +2106,16 @@ jQuery(document).ready(function ($) {

if (details.admin2_grid_id !== null) {
jQuery('#admin2_list').html(spinner_html);
let payload = {
grid_id: details.admin2_grid_id,
post_type: mapbox_library_api.post_type,
query: mapbox_library_api.query_args || {},
};
window
.makeRequest(
'POST',
mapbox_library_api.obj.settings.list_by_grid_rest_url,
{
grid_id: details.admin2_grid_id,
post_type: mapbox_library_api.post_type,
query: mapbox_library_api.query_args || {},
},
payload,
mapbox_library_api.obj.settings.rest_base_url,
)
.done((list_by_grid) => {
Expand All @@ -2071,15 +2127,16 @@ jQuery(document).ready(function ($) {
});
} else if (details.admin1_grid_id !== null) {
jQuery('#admin1_list').html(spinner_html);
let payload = {
grid_id: details.admin1_grid_id,
post_type: mapbox_library_api.post_type,
query: mapbox_library_api.query_args || {},
};
window
.makeRequest(
'POST',
mapbox_library_api.obj.settings.list_by_grid_rest_url,
{
grid_id: details.admin1_grid_id,
post_type: mapbox_library_api.post_type,
query: mapbox_library_api.query_args || {},
},
payload,
mapbox_library_api.obj.settings.rest_base_url,
)
.done((list_by_grid) => {
Expand All @@ -2091,15 +2148,16 @@ jQuery(document).ready(function ($) {
});
} else if (details.admin0_grid_id !== null) {
jQuery('#admin0_list').html(spinner_html);
let payload = {
grid_id: details.admin0_grid_id,
post_type: mapbox_library_api.post_type,
query: mapbox_library_api.query_args || {},
};
window
.makeRequest(
'POST',
mapbox_library_api.obj.settings.list_by_grid_rest_url,
{
grid_id: details.admin0_grid_id,
post_type: mapbox_library_api.post_type,
query: mapbox_library_api.query_args || {},
},
payload,
mapbox_library_api.obj.settings.rest_base_url,
)
.done((list_by_grid) => {
Expand Down
Loading
Loading