From 15b4f881223097ee6fc99d8e19a9d89f657a0d9f Mon Sep 17 00:00:00 2001 From: Laury GvR Date: Fri, 6 Oct 2017 15:38:46 -0400 Subject: [PATCH] Settings > Cities, stop deletion if used by member Cities are no longer allowed to be deleted when they are used by a member, and will notify the user which members this city is in use with, as well as prove links to said members' profile admin page. --- models/admin/members/list.php | 48 +++++++++---------- models/admin/settings/cities.php | 23 +++++++-- views/admin/settings/cities.html | 81 +++++++++++++++++++++++++++++++- 3 files changed, 124 insertions(+), 28 deletions(-) diff --git a/models/admin/members/list.php b/models/admin/members/list.php index a13c7ed0..645933c5 100644 --- a/models/admin/members/list.php +++ b/models/admin/members/list.php @@ -346,31 +346,31 @@ class GlmMembersAdmin_members_list extends GlmDataMembers // Compile template data $templateData = array( - 'monthYear' => $monthYear, - 'enable_members' => $enable_members, - 'haveMembers' => $haveMembers, - 'members' => $list, - 'memberCount' => $memberCount, - 'categories' => $categories, - 'member_types' => $member_types, - 'haveFilter' => $haveFilter, - 'filterArchived' => $filterArchived, - 'filterFeatured' => $filterFeatured, - 'filterPending' => $filterPending, - 'catSelected' => $catSelected, + 'monthYear' => $monthYear, + 'enable_members' => $enable_members, + 'haveMembers' => $haveMembers, + 'members' => $list, + 'memberCount' => $memberCount, + 'categories' => $categories, + 'member_types' => $member_types, + 'haveFilter' => $haveFilter, + 'filterArchived' => $filterArchived, + 'filterFeatured' => $filterFeatured, + 'filterPending' => $filterPending, + 'catSelected' => $catSelected, 'catSearchSelected' => $catSelectedString, - 'mTypeSelected' => $mTypeSelected, - 'alphaList' => $alphaList, - 'alphaSelected' => $alphaSelected, - 'numbDisplayed' => $numbDisplayed, - 'lastDisplayed' => $lastDisplayed, - 'paging' => $paging, - 'prevStart' => $prevStart, - 'nextStart' => $nextStart, - 'start' => $start, - 'limit' => $limit, - 'namesList' => $namesList, - 'textSearch' => $textSearch + 'mTypeSelected' => $mTypeSelected, + 'alphaList' => $alphaList, + 'alphaSelected' => $alphaSelected, + 'numbDisplayed' => $numbDisplayed, + 'lastDisplayed' => $lastDisplayed, + 'paging' => $paging, + 'prevStart' => $prevStart, + 'nextStart' => $nextStart, + 'start' => $start, + 'limit' => $limit, + 'namesList' => $namesList, + 'textSearch' => $textSearch ); // Return status, suggested view, and data to controller diff --git a/models/admin/settings/cities.php b/models/admin/settings/cities.php index 4751fbe7..665c69e9 100644 --- a/models/admin/settings/cities.php +++ b/models/admin/settings/cities.php @@ -151,6 +151,18 @@ class GlmMembersAdmin_settings_cities extends GlmDataCities $haveCities = true; } } + + // Get a list of all members by city, used in the Settings > Cities list to limit city deletion + require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataMemberInfo.php'; + $MemberInfo = new GlmDataMemberInfo($this->wpdb, $this->config); + foreach ($cities as $city) { + $sql = "SELECT T.member_name, T.id FROM ".GLM_MEMBERS_PLUGIN_DB_PREFIX."member_info T WHERE T.city = " . $city["id"] . " "; + $membersForCity = $this->wpdb->get_results($sql, ARRAY_A); + foreach ($membersForCity as $memberForCity) { + $citiesWithMembers[$city["id"]][$memberForCity["id"]] = $memberForCity["member_name"]; + } + + } // If we had a fatal error, redirect to the error page if ($error) { @@ -163,11 +175,16 @@ class GlmMembersAdmin_settings_cities extends GlmDataCities ); } + $citiesWithMembersJSON = json_encode($citiesWithMembers); + // Compile template data $templateData = array( - 'enable_members' => $enable_members, - 'haveCities' => $haveCities, - 'cities' => $cities + 'enable_members' => $enable_members, + 'haveCities' => $haveCities, + 'cities' => $cities, + 'citiesWithMembers' => $citiesWithMembers, + 'citiesWithMembersJSON' => $citiesWithMembersJSON + ); // Return status, suggested view, and data to controller diff --git a/views/admin/settings/cities.html b/views/admin/settings/cities.html index c8220147..cf107281 100644 --- a/views/admin/settings/cities.html +++ b/views/admin/settings/cities.html @@ -29,6 +29,16 @@ + +
+
+

This city is in use by several members and may not be deleted to make sure these are not left without a city.

+

Please set a different city for the following members, then refresh this page, and try again.

+
+ Cancel +
+
+
@@ -49,6 +59,14 @@
+ +
+
+
+ Cancel +
+
+

Cities

@@ -60,6 +78,8 @@ {if $haveCities} + + {assign var="i" value="0"} {foreach $cities as $t} {if $i++ is odd by 1} @@ -70,8 +90,18 @@ + {/foreach} @@ -99,6 +129,16 @@ minWidth: 400, dialogClass: "glm-dialog-no-close" }); + $("#deleteCityWithMembersDialog").dialog({ + autoOpen: false, + minWidth: 400, + dialogClass: "glm-dialog-no-close" + }); + $("#showMembersWithCityDialog").dialog({ + autoOpen: false, + minWidth: 400, + dialogClass: "glm-dialog-no-close" + }) $('#newCityButton').click( function() { $("#newCityDialog").dialog("open"); @@ -129,6 +169,45 @@ $('#deleteCityCancel').click( function() { $("#deleteCityDialog").dialog("close"); }); + + var citiesWithMembers = '{$citiesWithMembersJSON}'; + citiesWithMembers = JSON.parse(citiesWithMembers); + $('.deleteCityWithMembersButton').click( function() { + + id = $(this).attr('data-cityID'); + + var citiesString = ''; + $("#deleteCityWithMembersDialog .cityMembers").html(citiesString); + $("#deleteCityWithMembersDialog").dialog("open"); + }); + $('#deleteCityWithMembersCancel').click( function() { + $("#deleteCityWithMembersDialog").dialog("close"); + }); + + $('.showMembersWithCityButton').click( function() { + + id = $(this).attr('data-cityID'); + + var citiesString = ''; + + $("#showMembersWithCityDialog .cityMembers").html(citiesString); + $("#showMembersWithCityDialog").dialog("open"); + }); + $('#showMembersWithCityCancel').click( function() { + $("#showMembersWithCityDialog").dialog("close"); + }); }); -- 2.17.1
{$t.name} -
Delete
+ {$citiesWithMembers = $citiesWithMembers} + {if $t.id|array_key_exists:$citiesWithMembers} + Assigned to {$citiesWithMembers[$t.id]|count} members +
view
+
Delete
+ {else} + Not assigned to any members +
Delete
+ {/if} +