Settings > Cities, stop deletion if used by member
authorLaury GvR <laury@gaslightmedia.com>
Fri, 6 Oct 2017 19:38:46 +0000 (15:38 -0400)
committerLaury GvR <laury@gaslightmedia.com>
Fri, 6 Oct 2017 19:38:46 +0000 (15:38 -0400)
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
models/admin/settings/cities.php
views/admin/settings/cities.html

index a13c7ed..645933c 100644 (file)
@@ -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
index 4751fbe..665c69e 100644 (file)
@@ -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
index c822014..cf10728 100644 (file)
         </center>
     </div>
 
+    <!--  Delete City with Members Dialog Box -->
+    <div id="deleteCityWithMembersDialog" class="glm-dialog-box" title="Delete City With Members">
+        <center>
+            <p>This city is in use by several members and may not be deleted to make sure these are not left without a city.</p>
+            <p>Please set a different city for the following members, then refresh this page, and try again.</p>
+            <div class="cityMembers"></div>
+            <a id="deleteCityWithMembersCancel" class="button button-primary">Cancel</a>
+        </center>
+    </div>
+
     <!-- Edit City Dialog Box -->
     <div id="editCityDialog" class="glm-dialog-box" title="Edit this City">
         <form action="{$thisUrl}?page={$thisPage}" method="post" enctype="multipart/form-data">
         </form>
     </div>
 
+    <!-- Show Members With City Dialog Box -->
+    <div id="showMembersWithCityDialog" class="glm-dialog-box" title="Members with this city">
+        <div class="cityMembers"></div>
+        <center>
+            <a id="showMembersWithCityCancel" class="button button-primary">Cancel</a>
+        </center>
+    </div>
+
     <h2>Cities</h2>
 
     <table class="wp-list-table widefat fixed posts glm-admin-table"">
@@ -60,6 +78,8 @@
         </thead>
         <tbody>
 {if $haveCities}
+
+
     {assign var="i" value="0"}
     {foreach $cities as $t}
         {if $i++ is odd by 1}
                 <td>
                     <a class="editCity" data-cityID="{$t.id}">{$t.name}</a>
                 </td>
+
                 <td>
-                    <div class="deleteCityButton button button-secondary glm-button-small glm-right" data-cityID="{$t.id}">Delete</div>
+                    {$citiesWithMembers = $citiesWithMembers}
+                    {if $t.id|array_key_exists:$citiesWithMembers}
+                        <span>Assigned to {$citiesWithMembers[$t.id]|count} members </span>
+                        <div class="showMembersWithCityButton button glm-button-small" data-cityID="{$t.id}">view</div>
+                        <div class="deleteCityWithMembersButton button button-secondary glm-button-small glm-right" data-cityID="{$t.id}">Delete</div>   
+                    {else}                     
+                        <span>Not assigned to any members</span>
+                        <div class="deleteCityButton button button-secondary glm-button-small glm-right" data-cityID="{$t.id}">Delete</div>
+                    {/if}
+                    
                 </td>
             </tr>
     {/foreach}
                 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");
             $('#deleteCityCancel').click( function() {
                 $("#deleteCityDialog").dialog("close");
             });
+            
+            var citiesWithMembers = '{$citiesWithMembersJSON}';
+            citiesWithMembers = JSON.parse(citiesWithMembers);
+            $('.deleteCityWithMembersButton').click( function() {
+                
+                id = $(this).attr('data-cityID');
+                
+                var citiesString = '<ul>';
+                //console.log(citiesString);
+                $.each(citiesWithMembers[id], function(memberID, memberName) {
+                    var memberName = citiesWithMembers[id][memberID];
+                    citiesString += '<li><a href=\"{$thisUrl}?page=glm-members-admin-menu-member&glm_action=memberInfo&member=' + memberID + '&memberInfo=' + memberID + '\" target=\"blank\">' + memberName + '</a></li>';
+                });
+                citiesString += '</ul>';
+                $("#deleteCityWithMembersDialog .cityMembers").html(citiesString);
+                $("#deleteCityWithMembersDialog").dialog("open");
+            });
+            $('#deleteCityWithMembersCancel').click( function() {
+                $("#deleteCityWithMembersDialog").dialog("close");
+            });
+
+            $('.showMembersWithCityButton').click( function() {
+
+                id = $(this).attr('data-cityID');
+
+                var citiesString = '<ul>';
+                //console.log(citiesString);
+                $.each(citiesWithMembers[id], function(memberID, memberName) {
+                    var memberName = citiesWithMembers[id][memberID];
+                    citiesString += '<li><a href=\"{$thisUrl}?page=glm-members-admin-menu-member&glm_action=memberInfo&member=' + memberID + '&memberInfo=' + memberID + '\" target=\"blank\">' + memberName + '</a></li>';
+                });
+                citiesString += '</ul>';
+                
+                $("#showMembersWithCityDialog .cityMembers").html(citiesString);
+                $("#showMembersWithCityDialog").dialog("open");
+            });
+            $('#showMembersWithCityCancel').click( function() {
+                $("#showMembersWithCityDialog").dialog("close");
+            });
 
         });
     </script>