Adding state and enable_weather to cities.
authorSteve Sutton <steve@gaslightmedia.com>
Wed, 20 Feb 2019 21:24:36 +0000 (16:24 -0500)
committerLaury GvR <laury@gaslightmedia.com>
Wed, 27 Feb 2019 16:25:47 +0000 (11:25 -0500)
Also adding the lat lon into the data class and fetching lat lon with
nomnatim database.

classes/data/dataCities.php
models/admin/settings/cities.php
models/front/members/cityWeather.php
views/admin/settings/cities.html

index 6ab8057..53e74d2 100644 (file)
@@ -137,6 +137,38 @@ class GlmDataCities extends GlmDataAbstract
                 'use'        => 'a',
             ),
 
+            // State
+            'state' => array (
+                'field'   => 'state',
+                'type'    => 'list',
+                'list'    => $this->config['states'],
+                'default' => $this->config['settings']['default_state'],
+                'use'     => 'a'
+            ),
+
+            // Enable City Weather
+            'enable_weather' => array(
+                'field' => 'enable_weather',
+                'type'  => 'checkbox',
+                'use'   => 'a',
+            ),
+
+            // Latitude
+            'lat' => array(
+                'field'    => 'lat',
+                'type'     => 'float',
+                'default'  => $this->config['settings']['maps_default_lat'],
+                'use'      => 'a'
+            ),
+
+            // Longitude
+            'lon' => array(
+                'field'    => 'lon',
+                'type'     => 'float',
+                'default'  => $this->config['settings']['maps_default_lon'],
+                'use'      => 'a'
+            ),
+
 
         );
 
index 2ee87c1..6eb26e8 100644 (file)
@@ -14,8 +14,8 @@
  */
 
 // Load Member Types data abstract
-require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCities.php';
-require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCounties.php';
+require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataCities.php';
+require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataCounties.php';
 
 /*
  * This class performs the work for the default action of the "Members" menu
@@ -49,7 +49,7 @@ class GlmMembersAdmin_settings_cities extends GlmDataCities
      * @return object Class object
      *
      */
-    public function __construct ($wpdb, $config)
+    public function __construct ( $wpdb, $config )
     {
 
         // Save WordPress Database object
@@ -59,7 +59,7 @@ class GlmMembersAdmin_settings_cities extends GlmDataCities
         $this->config = $config;
 
         // Run constructor for members data class
-        parent::__construct(false, false);
+        parent::__construct( false, false );
 
     }
 
@@ -97,39 +97,42 @@ class GlmMembersAdmin_settings_cities extends GlmDataCities
      * produce output.
      *
      */
-    public function modelAction ($actionData = false)
+    public function modelAction ( $actionData = false )
     {
 
-        $success        = true;
-        $haveCities     = false;
-        $cities         = false;
-        $counties       = false;
-        $error          = false;
+        $success    = true;
+        $haveCities = false;
+        $cities     = false;
+        $counties   = false;
+        $states     = false;
+        $error      = false;
 
         // Check if a city ID is supplied
         $id = 0;
-        if (isset($_REQUEST['id'])) {
+        if ( isset( $_REQUEST['id'] ) ) {
             $id = $_REQUEST['id']-0;
         }
 
         // If there's an action option
-        if (isset($_REQUEST['option'])) {
+        if ( isset( $_REQUEST['option'] ) ) {
 
-            switch($_REQUEST['option']) {
+            switch( $_REQUEST['option'] ) {
 
                 case 'addNew':
+                    $this->getLatLonForCity();
                     $this->insertEntry();
                     break;
 
                 case 'update':
                     if ($id > 0) {
-                        $this->updateEntry($id);
+                        $this->getLatLonForCity();
+                        $this->updateEntry( $id );
                     }
                     break;
 
                 case 'delete':
                     if ($id > 0) {
-                        $this->deleteEntry($id, true);
+                        $this->deleteEntry( $id, true );
                     }
                     break;
 
@@ -146,42 +149,43 @@ class GlmMembersAdmin_settings_cities extends GlmDataCities
         // If we have list entries - even if it's an empty list
         $success = true;
         $haveCities = false;
-        if ($cities !== false) {
+        if ( $cities !== false ) {
 
             $success = true;
 
             // If we have any entries
-            if (count($cities) > 0) {
+            if ( count( $cities ) > 0 ) {
                 $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) {
-                //echo var_dump(addSlashes($memberForCity["member_name"]));
-                $citiesWithMembers[$city["id"]][$memberForCity["id"]] = $memberForCity["member_name"];
-            }
+        require_once GLM_MEMBERS_PLUGIN_CLASS_PATH . '/data/dataMemberInfo.php';
+        $MemberInfo = new GlmDataMemberInfo( $this->wpdb, $this->config );
+        if ( isset( $cities ) && is_array( $cities ) && !empty( $cities ) ) {
+            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) {
             return array(
-                    'status' => $success,
-                    'menuItemRedirect' => 'error',
-                    'modelRedirect' => 'index',
-                    'view' => 'admin/error/index.html',
-                    'data' => false
+                'status'           => $success,
+                'menuItemRedirect' => 'error',
+                'modelRedirect'    => 'index',
+                'view'             => 'admin/error/index.html',
+                'data'             => false
             );
         }
         // $citiesWithMembersJSON = htmlspecialchars(json_encode($citiesWithMembers), ENT_QUOTES, 'UTF-8');
-        $citiesWithMembersJSON = json_encode($citiesWithMembers);
-        $citiesWithMembersJSON = str_replace("'", "\'", $citiesWithMembersJSON);
+        $citiesWithMembersJSON = json_encode( $citiesWithMembers );
+        $citiesWithMembersJSON = str_replace( "'", "\'", $citiesWithMembersJSON );
 
 
         // Compile template data
@@ -189,6 +193,7 @@ class GlmMembersAdmin_settings_cities extends GlmDataCities
             'haveCities'            => $haveCities,
             'cities'                => $cities,
             'counties'              => $counties,
+            'states'                => $this->config['states'],
             'citiesWithMembers'     => $citiesWithMembers,
             'citiesWithMembersJSON' => $citiesWithMembersJSON
 
@@ -196,7 +201,7 @@ class GlmMembersAdmin_settings_cities extends GlmDataCities
 
         // Return status, suggested view, and data to controller
         return array(
-            'status' => $success,
+            'status'           => $success,
             'menuItemRedirect' => false,
             'modelRedirect'    => false,
             'view'             => 'admin/settings/cities.html',
@@ -205,7 +210,23 @@ class GlmMembersAdmin_settings_cities extends GlmDataCities
 
     }
 
+    public function getLatLonForCity()
+    {
+        if ( isset( $_REQUEST['name'] ) ) {
+            $city  = filter_var( $_REQUEST['name'] );
+            $state = filter_var( $_REQUEST['state'] );
+
+            if ( $city && $state ) {
+                $addressString = $city . '+' . $state;
+
+                $url = "https://nominatim.openstreetmap.org/search/?format=json&addressdetails=1&q={$addressString}&limit=1";
+                $return = json_decode( wp_remote_retrieve_body( wp_remote_get( $url ) ) );
+                if ( $return[0]->lat && $return[0]->lon ) {
+                    $_REQUEST['lat'] = $return[0]->lat;
+                    $_REQUEST['lon'] = $return[0]->lon;
+                }
+            }
+        }
+    }
 
 }
-
-?>
index b67cd16..f7634e5 100644 (file)
@@ -136,15 +136,18 @@ class GlmMembersFront_members_cityWeather extends GlmDataCities
             $alpha = filter_var( $_REQUEST['alpha'], FILTER_SANITIZE_STRING );
         }
 
-        $alphaList = $this->getAlphaList(' AND T.lat IS NOT NULL AND lon IS NOT NULL ', $alpha);
+        $whereCityWeatherSql = ' AND enable_weather AND T.lat IS NOT NULL AND lon IS NOT NULL ';
+
+        $alphaList = $this->getAlphaList( $whereCityWeatherSql, $alpha );
 
         $alphaSelected = strtoupper( $alpha );
 
-        $where = " T.name LIKE '$alphaSelected%'";
+        $where  = " T.name LIKE '$alphaSelected%'";
+        $where .= $whereCityWeatherSql;
 
         $cities = $this->getList( $where, 'name' );
 
-        if ( $cities ) {
+        if ( isset( $cities) && is_array( $cities ) && !empty( $cities ) ) {
             foreach ( $cities as &$city ) {
                 $cWeather = $this->checkWeather( $city['id'] );
                 if ( $cWeather ) {
index adf1080..a5faaaf 100644 (file)
 {include file='admin/settings/header.html'}
 
-    <!-- Add City Button and Dialog Box -->
-    <div id="newCityButton" class="button button-primary glm-right">Add a City</div>
-    <div id="newCityDialog" class="glm-dialog-box" title="Enter a New City">
-        <form action="{$thisUrl}?page={$thisPage}" method="post" enctype="multipart/form-data">
-            <input type="hidden" name="glm_action" value="cities">
-            <input type="hidden" name="option" value="addNew">
-            {if !$settings.enable_counties}
-                <input type="hidden" name="county" value="0">
-            {/if}
-            <table class="glm-admin-table">
+<!-- Add City Button and Dialog Box -->
+<div id="newCityButton" class="button button-primary glm-right">Add a City</div>
+<div id="newCityDialog" class="glm-dialog-box" title="Enter a New City">
+    <form action="{$thisUrl}?page={$thisPage}" method="post" enctype="multipart/form-data">
+        <input type="hidden" name="glm_action" value="cities">
+        <input type="hidden" name="option" value="addNew">
+        {if !$settings.enable_counties}
+            <input type="hidden" name="county" value="0">
+        {/if}
+        <table class="glm-admin-table">
+            <tr>
+                <th class="glm-required">City Name:</th>
+                <td>
+                    <input type="text" name="name" class="glm-form-text-input">
+                </td>
+            </tr>
+            <tr>
+                <th>State:</th>
+                <td>
+                    <select name="state">
+                        <option value=""></option>
+                        {foreach $states as $stateAbbr => $stateName}
+                            <option value="{$stateAbbr}">{$stateName}</option>
+                        {/foreach}
+                    </select>
+                </td>
+            </tr>
+            {if $settings.enable_counties}
                 <tr>
-                    <th class="glm-required">City Name:</th>
+                    <th>{$terms.term_county_cap}:</th>
                     <td>
-                        <input type="text" name="name" class="glm-form-text-input">
+                        <select name="county">
+                            <option value="0"></option>
+                            {foreach $counties as $county}
+                                <option value="{$county.id}">{$county.name}</option>
+                            {/foreach}
+                        </select>
                     </td>
                 </tr>
-                {if $settings.enable_counties}
-                    <tr>
-                        <th>{$terms.term_county_cap}:</th>
-                        <td>
-                            <select name="county">
-                                <option value="0"></option>
-                                {foreach $counties as $county}
-                                    <option value="{$county.id}">{$county.name}</option>
-                                {/foreach}
-                            </select>
-                        </td>
-                    </tr>
-                {/if}
-            </table>
-            <p><span class="glm-required">*</span> Required</p>
-            <a id="newCityCancel" class="button button-primary glm-right">Cancel</a>
-            <input type="submit" value="Add new City">
-        </form>
-    </div>
-
-    <!--  Delete City Dialog Box -->
-    <div id="deleteCityDialog" class="glm-dialog-box" title="Delete City">
-        <center>
-            <p>Are you sure you want to delete this city?</p>
-            <p><div id="deleteCityConfirm" class="button button-primary">Yes, delete this city</div></p>
-            <p><div id="deleteCityCancel" class="button button-primary">Cancel</div></p>
-        </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">
-            <input type="hidden" name="glm_action" value="cities">
-            <input type="hidden" name="option" value="update">
-            <input id="editCityID" type="hidden" name="id" value="">
-            {if !$settings.enable_counties}
-                <input type="hidden" name="county" value="0">
             {/if}
-            <table class="glm-admin-table">
+            <tr>
+                <th>City Weather:</th>
+                <td>
+                    <label>
+                        <input type="checkbox" name="enable_weather" />
+                        Enable City Weather
+                    </label>
+                </td>
+            </tr>
+        </table>
+        <p><span class="glm-required">*</span> Required</p>
+        <a id="newCityCancel" class="button button-primary glm-right">Cancel</a>
+        <input type="submit" value="Add new City">
+    </form>
+</div>
+
+<!--  Delete City Dialog Box -->
+<div id="deleteCityDialog" class="glm-dialog-box" title="Delete City">
+    <center>
+        <p>Are you sure you want to delete this city?</p>
+        <p><div id="deleteCityConfirm" class="button button-primary">Yes, delete this city</div></p>
+        <p><div id="deleteCityCancel" class="button button-primary">Cancel</div></p>
+    </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">
+        <input type="hidden" name="glm_action" value="cities">
+        <input type="hidden" name="option" value="update">
+        <input id="editCityID" type="hidden" name="id" value="">
+        {if !$settings.enable_counties}
+            <input type="hidden" name="county" value="0">
+        {/if}
+        <table class="glm-admin-table">
+            <tr>
+                <th class="glm-required">City Name:</th>
+                <td>
+                    <input id="editCityName" type="text" name="name" class="glm-form-text-input">
+                </td>
+            </tr>
+            <tr>
+                <th>State:</th>
+                <td>
+                    <select id="editState" name="state">
+                        <option value=""></option>
+                        {foreach $states as $stateAbbr => $stateName}
+                            <option value="{$stateAbbr}">{$stateName}</option>
+                        {/foreach}
+                    </select>
+                </td>
+            </tr>
+            {if $settings.enable_counties}
                 <tr>
-                    <th class="glm-required">City Name:</th>
+                    <th>{$terms.term_county_cap}:</th>
                     <td>
-                        <input id="editCityName" type="text" name="name" class="glm-form-text-input">
+                        <select id="editCounty" name="county">
+                            <option value="0"></option>
+                            {foreach $counties as $county}
+                                <option value="{$county.id}">{$county.name}</option>
+                            {/foreach}
+                        </select>
                     </td>
                 </tr>
-                {if $settings.enable_counties}
-                    <tr>
-                        <th>{$terms.term_county_cap}:</th>
-                        <td>
-                            <select id="editCounty" name="county">
-                                <option value="0"></option>
-                                {foreach $counties as $county}
-                                    <option value="{$county.id}">{$county.name}</option>
-                                {/foreach}
-                            </select>
-                        </td>
-                    </tr>
-                {/if}
-            </table>
-            <p><span class="glm-required">*</span> Required</p>
-            <a id="editCityCancel" class="button button-primary glm-right">Cancel</a>
-            <input type="submit" value="Update this City" class="button button-primary">
-        </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"">
-        <thead>
+            {/if}
             <tr>
-                <th>City</th>
-                <th>&nbsp;</th>
+                <th>City Weather:</th>
+                <td>
+                    <label>
+                        <input id="editWeather" type="checkbox" name="enable_weather" />
+                        Enable City Weather
+                    </label>
+                </td>
             </tr>
-        </thead>
-        <tbody>
-{if $haveCities}
-
-
-    {assign var="i" value="0"}
-    {foreach $cities as $t}
-        {if $i++ is odd by 1}
             <tr>
-        {else}
-            <tr class="alternate">
-        {/if}
+                <th>City Location:</th>
                 <td>
-                    <a class="editCity" data-cityID="{$t.id}" data-county="{$t.county}">{$t.name}</a>
+                    Lat: <span id="editLat"></span> <br>
+                    Lon: <span id="editLon"></span>
                 </td>
+            </tr>
+        </table>
+        <p><span class="glm-required">*</span> Required</p>
+        <a id="editCityCancel" class="button button-primary glm-right">Cancel</a>
+        <input type="submit" value="Update this City" class="button button-primary">
+    </form>
+</div>
 
-                <td>
-                    {$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}
+<!-- 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>
 
-                </td>
-            </tr>
-    {/foreach}
-{else}
-            <tr class="alternate"><td colspan="2">(no cities listed)</td></tr>
-{/if}
-        </tbody>
-    </table>
+<h2>Cities</h2>
 
-    <script type="text/javascript">
-        jQuery(document).ready(function($) {
+<table class="wp-list-table widefat fixed posts glm-admin-table">
+    <thead>
+        <tr>
+            <th>City</th>
+            <th>&nbsp;</th>
+        </tr>
+    </thead>
+    <tbody>
+        {if $haveCities}
 
-            $("#newCityDialog").dialog({
-               autoOpen: false,
-               minWidth: 400,
-                dialogClass: "glm-dialog-no-close"
-            });
-            $("#editCityDialog").dialog({
-                autoOpen: false,
-                minWidth: 400,
-                dialogClass: "glm-dialog-no-close"
-            });
-            $("#deleteCityDialog").dialog({
-                autoOpen: false,
-                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");
-            });
-            $('#newCityCancel').click( function() {
-                $("#newCityDialog").dialog("close");
-            });
-            $('.editCity').click( function() {
-                var cityID = $(this).attr('data-cityID');
-                var county = $(this).data('county');
-                var cityName = $(this).text();
-                $('#editCityID').val(cityID);
-                $('#editCityName').val(cityName.trim());
-                if ( county ) {
-                    $('#editCounty').val(county);
-                } else {
-                    $('#editCounty').val(0);
-                }
-                $("#editCityDialog").dialog("open");
-            });
-            $('#editCityCancel').click( function() {
-                $("#editCityDialog").dialog("close");
-            });
+            {assign var="i" value="0"}
+            {foreach $cities as $t}
+                {if $i++ is odd by 1}
+                    <tr>
+                {else}
+                    <tr class="alternate">
+                {/if}
+                    <td>
+                        <a class="editCity"
+                        data-cityID="{$t.id}"
+                        data-county="{$t.county}"
+                        data-state="{$t.state.value}"
+                        data-lat="{$t.lat}"
+                        data-lon="{$t.lon}"
+                        data-weather="{$t.enable_weather.value}"
+                        >{$t.name}</a>
+                    </td>
 
-            var id = false;
-            $('.deleteCityButton').click( function() {
-                id = $(this).attr('data-cityID');
-                $("#deleteCityDialog").dialog("open");
-            });
-            $('#deleteCityConfirm').click( function() {
-                $("#deleteCityDialog").dialog("close");
-                window.location.href = "{$thisUrl}?page={$thisPage}&glm_action=cities&option=delete&id=" + id;
-            });
-            $('#deleteCityCancel').click( function() {
-                $("#deleteCityDialog").dialog("close");
-            });
+                    <td>
+                        {$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}
 
-            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");
-            });
+                    </td>
+                </tr>
+            {/foreach}
+        {else}
+            <tr class="alternate"><td colspan="2">(no cities listed)</td></tr>
+        {/if}
+    </tbody>
+</table>
+
+<script type="text/javascript">
+    jQuery(document).ready(function($) {
+
+        $("#newCityDialog").dialog({
+            autoOpen: false,
+            minWidth: 400,
+            dialogClass: "glm-dialog-no-close"
+        });
+        $("#editCityDialog").dialog({
+            autoOpen: false,
+            minWidth: 400,
+            dialogClass: "glm-dialog-no-close"
+        });
+        $("#deleteCityDialog").dialog({
+            autoOpen: false,
+            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");
+        });
+        $('#newCityCancel').click( function() {
+            $("#newCityDialog").dialog("close");
+        });
+        $('.editCity').click( function() {
+            var cityID   = $(this).attr('data-cityID');
+            var county   = $(this).data('county');
+            var state    = $(this).data('state');
+            var lat      = $(this).data('lat');
+            var lon      = $(this).data('lon');
+            var weather  = $(this).data('weather');
+            var cityName = $(this).text();
+            $('#editCityID').val(cityID);
+            $('#editCityName').val(cityName.trim());
+            $('#editLat').html( lat );
+            $('#editLon').html( lon );
+            if ( weather ) {
+                $('#editWeather').prop('checked', true);
+            } else {
+                $('#editWeather').prop('checked', false);
+            }
+            if ( state ) {
+                $('#editState').val(state);
+            } else {
+                $('#editState').val(0);
+            }
+            if ( county ) {
+                $('#editCounty').val(county);
+            } else {
+                $('#editCounty').val(0);
+            }
+            $("#editCityDialog").dialog("open");
+        });
+        $('#editCityCancel').click( function() {
+            $("#editCityDialog").dialog("close");
+        });
 
-            $('.showMembersWithCityButton').click( function() {
+        var id = false;
+        $('.deleteCityButton').click( function() {
+            id = $(this).attr('data-cityID');
+            $("#deleteCityDialog").dialog("open");
+        });
+        $('#deleteCityConfirm').click( function() {
+            $("#deleteCityDialog").dialog("close");
+            window.location.href = "{$thisUrl}?page={$thisPage}&glm_action=cities&option=delete&id=" + id;
+        });
+        $('#deleteCityCancel').click( function() {
+            $("#deleteCityDialog").dialog("close");
+        });
 
-                id = $(this).attr('data-cityID');
+        var citiesWithMembers = '{$citiesWithMembersJSON}';
+        citiesWithMembers = JSON.parse(citiesWithMembers);
+        $('.deleteCityWithMembersButton').click( function() {
 
-                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>';
+            id = $(this).attr('data-cityID');
 
-                $("#showMembersWithCityDialog .cityMembers").html(citiesString);
-                $("#showMembersWithCityDialog").dialog("open");
+            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>';
             });
-            $('#showMembersWithCityCancel').click( function() {
-                $("#showMembersWithCityDialog").dialog("close");
+            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");
         });
-    </script>
+        $('#showMembersWithCityCancel').click( function() {
+            $("#showMembersWithCityDialog").dialog("close");
+        });
+
+    });
+</script>
 
 {include file='admin/footer.html'}