updating datase to include a point of interest category
authorAnthony Talarico <talarico@gaslightmedia.com>
Mon, 12 Nov 2018 18:18:01 +0000 (13:18 -0500)
committerAnthony Talarico <talarico@gaslightmedia.com>
Mon, 12 Nov 2018 18:18:01 +0000 (13:18 -0500)
classes/data/dataMapSettings.php
css/admin.min.css
models/admin/ajax/mapSettingsAjax.php
models/admin/settings/mapSettings.php
sass/admin/_settings.scss
setup/databaseScripts/create_database_V0.0.1.sql
views/admin/settings/mapSettings.html

index 003e37d..2e359ac 100644 (file)
@@ -152,7 +152,13 @@ class GlmDataMapSettings extends GlmDataAbstract
                 'required' => false,
                 'use'      => 'a',
             ),
-
+            'category_id' => array(
+                'field'    => 'category_id',
+                'type'     => 'integer',
+                'default'  => '',
+                'required' => false,
+                'use'      => 'a',
+            ),
             'hover_color' => array(
                 'field'   => 'hover_color',
                 'type'    => 'text',
index 65653f3..a871292 100644 (file)
@@ -1 +1 @@
-#map-area-container{padding:10px}#map-area-container #new-area-section{max-width:800px;background-color:white}#map-area-container #new-area-section .input-container{margin-bottom:0;padding:0 10px 0 10px}#map-area-container #new-area-section .input-container input.area-name{margin:10px 10px 0 0px}#map-area-container #new-area-section .input-container input.area-name+label{top:15px !important}#map-area-container #new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child){line-height:1;min-height:20px}#map-area-container #new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child) span,#map-area-container #new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child) a{line-height:1;padding:2px 10px}#map-area-container #new-area-section .map-color-selection{margin-top:20px}#map-area-container #new-area-section .map-color-selection label{margin-left:15px;font-size:16px}#map-area-container #list-header{padding:5px;background-color:#003366;color:white}#map-area-container #list-header .area-header{color:inherit;max-width:555px}#map-area-container #area-list .record-container{margin-bottom:0px}#map-area-container #area-list .record-container .area-record{padding:5px;background-color:white;align-items:center}#map-area-container #area-list .record-container .area-record:hover{cursor:pointer;background-color:#f8f8f8}#map-area-container #area-list .record-container .area-record .area-record-delete:hover{cursor:pointer}#map-area-container #area-list .record-container:nth-child(even) .area-record{background-color:#E0F7F7}.area-buttons{padding-bottom:10px !important}.area-buttons #area-update{margin-top:10px;float:right;margin-left:10px}.area-buttons #area-reset{margin-top:10px;background-color:rgba(244,67,54,0.8);margin-bottom:10px;display:none}.edit-field{background-color:rgba(30,202,162,0.1) !important}.error-field{background-color:rgba(244,67,54,0.1) !important}
+#map-area-container{padding:10px}#map-area-container #new-area-section{max-width:800px;background-color:white;position:relative}#map-area-container #new-area-section .input-container{margin-bottom:0;padding:0 10px 0 10px}#map-area-container #new-area-section .input-container input.area-name{margin:10px 10px 0 0px}#map-area-container #new-area-section .input-container input.area-name+label{top:15px !important}#map-area-container #new-area-section .map-page-selection,#map-area-container #new-area-section .map-interest-selection{margin-top:45px}#map-area-container #new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child),#map-area-container #new-area-section .map-interest-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child){line-height:1;min-height:20px}#map-area-container #new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child) span,#map-area-container #new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child) a,#map-area-container #new-area-section .map-interest-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child) span,#map-area-container #new-area-section .map-interest-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child) a{line-height:1;padding:2px 10px}#map-area-container #new-area-section .map-color-selection{margin-top:0px}#map-area-container #new-area-section .map-color-selection label{margin-left:15px;font-size:16px}#map-area-container #list-header{padding:5px;background-color:#003366;color:white}#map-area-container #list-header .area-header{color:inherit;max-width:415px}#map-area-container #area-list .record-container{margin-bottom:0px}#map-area-container #area-list .record-container .area-record{padding:5px;background-color:white;align-items:center}#map-area-container #area-list .record-container .area-record:hover{cursor:pointer;background-color:#f8f8f8}#map-area-container #area-list .record-container .area-record .area-record-delete:hover{cursor:pointer}#map-area-container #area-list .record-container:nth-child(even) .area-record{background-color:#E0F7F7}.area-buttons{padding-bottom:10px !important;min-height:66px;max-width:500px;float:right}.area-buttons #area-update{margin-top:10px;float:right;margin-left:10px}.area-buttons #area-reset{margin-top:10px;background-color:rgba(244,67,54,0.8);margin-bottom:10px;display:none}.edit-field{background-color:rgba(30,202,162,0.1) !important}.error-field{background-color:rgba(244,67,54,0.1) !important}
index ad95877..5a6020e 100644 (file)
@@ -58,7 +58,7 @@ class GlmMembersAdmin_ajax_mapSettingsAjax extends GlmDataMapSettings
 
     }
     private function getAreas(){
-        $sql        = "SELECT * FROM " . GLM_MEMBERS_COUNTY_MAP_PLUGIN_DB_PREFIX . 'areas';
+        $sql        = "SELECT * FROM " . GLM_MEMBERS_COUNTY_MAP_PLUGIN_DB_PREFIX . 'areas ORDER BY area_name';
         return $this->wpdb->get_results($sql); 
     }
     function write_log ( $log )  {
@@ -86,12 +86,10 @@ class GlmMembersAdmin_ajax_mapSettingsAjax extends GlmDataMapSettings
     {
         global $wpdb;
         $option     = filter_var($_REQUEST['option'], FILTER_SANITIZE_STRING);
-        $numbObits  = 0;
-        $namesList  = false;
-        $areas      = false;
-        $test       = "start";
-        $area_name  = false;
-        $page_id    = false;
+        $area_name      = (isset($_REQUEST['area_name'] ) )? filter_var($_REQUEST['area_name'], FILTER_SANITIZE_STRING) : false;
+        $page_id        = (isset($_REQUEST['page_id'])) ? filter_var($_REQUEST['page_id'], FILTER_SANITIZE_STRING) : 0;
+        $category_id    = (isset($_REQUEST['category_id'])) ? filter_var($_REQUEST['category_id'], FILTER_SANITIZE_STRING) : 0;
+        $hover_color    = (isset($_REQUEST['hover_color'])) ? filter_var($_REQUEST['hover_color'], FILTER_SANITIZE_URL) : "#003366";
         
         // Check if an ID is supplied
         $id = 0;
@@ -100,25 +98,25 @@ class GlmMembersAdmin_ajax_mapSettingsAjax extends GlmDataMapSettings
         }
         // If there's an action option
         if ( $option ) {
-       
+            
             switch( $option ) {
                 
                 case 'add':
                     
-                    $area_name      = filter_var($_REQUEST['area_name'], FILTER_SANITIZE_STRING);
-                    $page_id        = (isset($_REQUEST['page_id'])) ? filter_var($_REQUEST['page_id'], FILTER_SANITIZE_STRING) : 0;
-                    $hover_color    = filter_var($_REQUEST['hover_color'], FILTER_SANITIZE_URL);
+                    
                     $this->wpdb->insert(
                         GLM_MEMBERS_COUNTY_MAP_PLUGIN_DB_PREFIX . 'areas',
                         array(
                             'area_name'     => $area_name,
                             'page_id'       => $page_id,
                             'hover_color'   => $hover_color,
+                            'category_id'   => $category_id,
                         ),
                         array(
                             '%s',
                             '%d',
-                            '%s'
+                            '%s',
+                            '%d'
                         )
                     );
                     $areas = $this->getAreas();
@@ -126,20 +124,18 @@ class GlmMembersAdmin_ajax_mapSettingsAjax extends GlmDataMapSettings
 
                 case 'update':
                     if ( $id > 0 ) {
-                        $test = $id;
-                        $area_name      = filter_var($_REQUEST['area_name'], FILTER_SANITIZE_STRING);
-                        $page_id        = (isset($_REQUEST['page_id'])) ? filter_var($_REQUEST['page_id'], FILTER_SANITIZE_STRING) : 0;
-                        $hover_color    = filter_var($_REQUEST['hover_color'], FILTER_SANITIZE_URL);
                         $this->wpdb->update(
                             GLM_MEMBERS_COUNTY_MAP_PLUGIN_DB_PREFIX . 'areas',
                             array( 
                                 'area_name'     => $area_name,
+                                'page_id'       => $page_id,
                                 'hover_color'   => $hover_color,
-                                'page_id'       => $page_id
+                                'category_id'   => $category_id
                             ),
                             array( 'id' => $id ),
                             array( 
                                 '%s',
+                                '%d',
                                 '%s',
                                 '%d'
                             ),
index 7f1a414..eda3322 100644 (file)
@@ -14,6 +14,7 @@
 
 // Load Map Settings data abstract
 require_once GLM_MEMBERS_COUNTY_MAP_PLUGIN_CLASS_PATH.'/data/dataMapSettings.php';
+require_once GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCategories.php';
 /*
  * This class performs the work for the default action of the "Members" menu
  * option, which is to display the members dashboard.
@@ -106,6 +107,12 @@ class GlmMembersAdmin_settings_mapSettings extends GlmDataMapSettings
             ),
             GLM_MEMBERS_PLUGIN_VERSION
         );
+        
+        wp_enqueue_script('materialize', false, array('jquery'), false, true);
+        wp_enqueue_style('materialize-css', GLM_MEMBERS_PLUGIN_URL . 'css/materialize.min.css');
+        wp_enqueue_style('admin-css', GLM_MEMBERS_COUNTY_MAP_PLUGIN_URL . 'css/admin.min.css');
+        wp_enqueue_style('css-icons', "https://fonts.googleapis.com/icon?family=Material+Icons");
+        
         $args = array(
             'sort_order'    => 'asc',
             'sort_column'   => 'post_title',
@@ -113,18 +120,22 @@ class GlmMembersAdmin_settings_mapSettings extends GlmDataMapSettings
             'post_type'     => 'page',
             'post_status'   => 'publish'
         ); 
+
         $results = get_pages($args); 
         foreach($results as $page){
             $pages[$page->ID] = $page->post_title;
         }
-        wp_enqueue_script('materialize', false, array('jquery'), false, true);
-        wp_enqueue_style('materialize-css', GLM_MEMBERS_PLUGIN_URL . 'css/materialize.min.css');
-        wp_enqueue_style('admin-css', GLM_MEMBERS_COUNTY_MAP_PLUGIN_URL . 'css/admin.min.css');
-        wp_enqueue_style('css-icons', "https://fonts.googleapis.com/icon?family=Material+Icons");
-        
+
+        $categories = new GlmDataCategories($this->wpdb, $this->config);
+        $categories = $categories->getListSortedParentChild();
+        foreach($categories as $category){
+            $cats[$category['id']] = $category['name'];
+        }
+
         // Compile template data
         $templateData = array(
-            'pages' => $pages
+            'pages' => $pages,
+            'categories'  => $cats
         );
 
         // Return status, suggested view, and data to controller
index d90904c..e7780ca 100644 (file)
@@ -3,6 +3,7 @@
     #new-area-section{
         max-width: 800px;
         background-color: white;
+        position:relative;
         .input-container{
             margin-bottom: 0;
             padding: 0 10px 0 10px;
@@ -13,7 +14,8 @@
                 top: 15px !important;
             }
         }
-        .map-page-selection{
+        .map-page-selection,.map-interest-selection{
+            margin-top: 45px;
             .select-wrapper{
                 .dropdown-content.select-dropdown{
                     li:not(:first-child){
             }
         }
         .map-color-selection{
-            margin-top: 20px;
+            margin-top: 0px;
             label{
                 margin-left: 15px;
                 font-size: 16px;
             }
         }
+
     }
     #list-header{
         padding: 5px;
@@ -41,7 +44,7 @@
         color: white;
         .area-header{
             color: inherit;
-            max-width: 555px;
+            max-width: 415px;
         }
     }
     #area-list{
         }
     }
 }
+
 .area-buttons{
     padding-bottom: 10px !important;
+    min-height: 66px;
+    max-width: 500px;
+    float: right;
     #area-update{
         margin-top: 10px;
         float: right;
index cb02a96..e2688ac 100644 (file)
@@ -19,6 +19,7 @@ CREATE TABLE {prefix}areas (
   lat FLOAT NOT NULL DEFAULT 0,
   lng FLOAT NOT NULL DEFAULT 0,                   
   page_id SMALLINT NOT NULL DEFAULT 0,             
-  hover_color TINYTEXT NOT NULL,         
+  hover_color TINYTEXT NOT NULL,
+  category_id SMALLINT NOT NULL DEFAULT 0,                     
   PRIMARY KEY (id)
 );
\ No newline at end of file
index d4dd760..5b4086e 100644 (file)
@@ -2,19 +2,23 @@
     <h5>Map Areas</h5>
     <div id="new-area-section">
         <div class="row">
-            <div class="s12 l7 col">
+            <div class="input-container area-buttons">     
+                <button id="area-update" class="btn" data-option="add">Add Area</button>
+                <button id="area-reset" class="btn" data-option="add">Nevermind</button>
+            </div>
+            <div class="s12 l6 col">
                 <div class="row input-container">
-                    <div class="input-field col s12 l8">
+                    <div class="input-field col s12 ">
                         <input id="area-name" class="area-name validate" type="text" value="" required="" aria-required="">
                         <label for="area-name">Area Name</label>
                         <span data-error="required">Required</span>
                         
                     </div>
                 </div>
-                
+   
                 <div class="row input-container">
-                    <div class="input-field col s12 l6 map-page-selection">
-                        <select>
+                    <div class="input-field col s12 map-page-selection">
+                        <select id="map-page-dropdown">
                             <option class="select-placeholder" value="">Select a page</option>
                             {foreach $pages as $id=>$name}
                                 <option class="map-page-option" value="{$id}">{$name}</option>
                     
                 </div>
                
+                
+            </div>
+            <div class="s12 l6 col">
                 <div class="row input-container">
-                    <div class="input-field col s12 l6 map-color-selection">
+                    <div class="input-field col s12 map-color-selection">
                         <div id="map-hover-color">
                             <input type="color" name="hover_color" id="map-color" value="#003366">
                             <label for="map-color">Map Hover Color</label>
                         </div>
                     </div>
                 </div>
-            </div>
-            <div class="s12 l5 col" style="max-width: 300px;">
-                <div class="row input-container area-buttons">     
-                    <button id="area-update" class="btn" data-option="add">Add Area</button>
-                    <button id="area-reset" class="btn" data-option="add">Nevermind</button>
+                <div class="row input-container">
+                    <div class="input-field col s12 map-interest-selection">
+                        <div id="map-interest">
+                            <select id="map-interest-dropdown">
+                                <option class="select-placeholder" value="">Select Point of Interest</option>
+                                {foreach $categories as $id=>$name}
+                                    <option class="map-interest-option" value="{$id}">{$name}</option>
+                                {/foreach}
+                            </select>
+                        </div>
+                    </div>
                 </div>
             </div>
+   
         </div>
     </div>
     <div id="list-header" style="display: flex;">
-            <div class="area-header" id="area-name-header" style="flex: 1; font-weight: bold;">Area Name</div>
-            <div class="area-header" id="area-page-header" style="flex: 1; font-weight: bold;">Attached Page</div>
-            <div class="area-header" id="area-color-header" style="flex: 1; font-weight: bold;">Hover Color</div>
-            <div class="area-header" id="area-delete-header" style="flex: 0; font-weight: bold;"></div>
+        <div class="area-header" id="area-name-header" style="flex: 1; font-weight: bold;">Area Name</div>
+        <div class="area-header" id="area-page-header" style="flex: 1; font-weight: bold;">Attached Page</div>
+        <div class="area-header" id="area-page-header" style="flex: 1; font-weight: bold;">Points of Interest</div>
+        <div class="area-header" id="area-color-header" style="flex: 1; font-weight: bold;">Hover Color</div>
+        <div class="area-header" id="area-delete-header" style="flex: 0; font-weight: bold;"></div>
     </div>
     <div id="area-list"></div>
 </div>  
 <script type="text/javascript">
     jQuery(function($){
         var pages = {$pages|json_encode};
+        var categories = {$categories|json_encode};
+        console.log(categories)
         var firstRecord = true;
         var data = {
             action      : 'glm_members_admin_ajax',
                         $('#area-list').empty();
                         data.areas.list.forEach( function(area) {
                             var page = (parseInt(area.page_id)) ? pages[area.page_id] : "None";
-                            $("<div class='row record-container'><div data-position='bottom' data-tooltip='Click to edit area' style='display: flex;' class='s12 col area-record tooltipped' data-id='" + area.id + "'><span class='area-record-name' style='flex: 1;'>" + area.area_name + "</span> <span class='area-record-page' style='flex: 1;'>" + page + "</span><span class='area-record-color' style='flex: 1;'>" + area.hover_color + "</span><span class='area-record-delete' style='flex: 0;'> <i class='material-icons area-record-delete'>delete_forever</i></span></div></div>").appendTo( $("#area-list") );
+                            var category = (parseInt(area.category_id)) ? categories[area.category_id] : "None";
+                            $("<div class='row record-container'><div data-position='bottom' data-tooltip='Click to edit area' style='display: flex;' class='s12 col area-record tooltipped' data-id='" + area.id + "'><span class='area-record-name' style='flex: 1;'>" + area.area_name + "</span> <span class='area-record-page' style='flex: 1;'>" + page + "</span><span class='area-record-poi' style='flex: 1;'>" + category + "</span><span class='area-record-color' style='flex: 1;'><span style='padding: 2px;color: white;background-color:" + area.hover_color + "'>" + area.hover_color + "</span></span><span class='area-record-delete' style='flex: 0;'> <i class='material-icons area-record-delete'>delete_forever</i></span></div></div>").appendTo( $("#area-list") );
                         })
                     }
-                    // $('.tooltipped').tooltip({literal}{delay: 50, tooltip:"new",position:"left"}{/literal});
                 }
             });
         };
             $("#area-name").parent().removeClass("edit-field");
             $("#map-color").removeClass('edit-field');
             $(".map-page-selection").removeClass("edit-field");
+            $(".map-interest-selection").removeClass("edit-field");
         }
         // Form interaction events
         $(document).on("click", '#area-update',function(){
             
             if($("#area-name").val() ){
                 $("#area-name").parent().removeClass("error-field");
-                data.area_name = capitalize($("#area-name").val());
-                data.hover_color = $("#map-color").val();
+                data.area_name      = capitalize($("#area-name").val());
+                data.hover_color    = $("#map-color").val();
+                data.page_id        = ($("#map-page-dropdown").val()) ? $("#map-page-dropdown").val() : null;
+                data.category_id    = ($("#map-interest-dropdown").val()) ? $("#map-interest-dropdown").val() : null;
                 $("#map-color").val();
-                data.page_id = ($("select").val()) ? $("select").val() : "None";
-                resetForm();
                 serverCall(data);
+
+                // reset default values
+                resetForm();
                 data.hover_color = "#003366";
                 data.option = "add";
                 $(this).text("Add Area");
 
         $('select').formSelect();
 
-        $('select').on('change', function(e) {
+        $('#map-page-dropdown').on('change', function(e) {
             data.page_id = $(this).val();
         });
-        
+        $('#map-interest-dropdown').on('change', function(e) {
+            data.category_id = $(this).val();
+        });
         $(document).on("change", "#map-color",function(){
             data.hover_color = $(this).val();
         });
         });
 
         $(document).on("click", ".area-record",function(e){
-            var id          = $(this).data('id');
-            var area_name   = $(this).find($('.area-record-name')).text();
-            var area_page   = $(this).find($('.area-record-page')).text();
-            var page_id     = getKeyByValue(pages, area_page);  
-            var hover_color  = $(this).find($('.area-record-color')).text();
+            var id              = $(this).data('id');
+            var area_name       = $(this).find($('.area-record-name')).text();
+            var area_page       = $(this).find($('.area-record-page')).text();
+            var area_poi        = $(this).find($('.area-record-poi')).text();
+            var page_id         = getKeyByValue(pages, area_page);
+            var category_id     = getKeyByValue(categories, area_poi);   
+            var hover_color     = $(this).find($('.area-record-color')).text();
 
             $("#area-name").val(area_name).siblings("label").addClass("active");
             $("#area-name").parent().addClass("edit-field");
             $("#map-color").val(hover_color).addClass('edit-field');
             $(".map-page-selection").addClass("edit-field");
-            $('select').val(page_id);
-            $("select").formSelect();
+            $(".map-interest-selection").addClass("edit-field");
+            $('#map-page-dropdown').val(page_id);
+            $("#map-page-dropdown").formSelect();
+            $('#map-interest-dropdown').val(category_id);
+            $("#map-interest-dropdown").formSelect();
             $("#area-update").text("Update Area").attr("data-id", id);
+
             data.id = id;
             data.hover_color = hover_color;
             data.option = "update";
             e.preventDefault();
             $("body, html").animate({
                 scrollTop: $("#new-area-section")
-            } /* speed */ );
+            },1000);
         });
         $(document).on("click", "#area-reset",function(){
             resetForm();
             $(this).fadeOut("fast");
             $('#area-update').text("Add Area");
+            data.option = "add";
         });
    
 
         
         $("#area-name").val("").siblings("label").removeClass("active");
         $("#map-color").val("#003366");
-        $('select').prop('selectedIndex', 0);
-        $("select").formSelect();
+        resetForm();
     });
 </script>
\ No newline at end of file