adding admin settings to add a hover color and a page to link to
authorAnthony Talarico <talarico@gaslightmedia.com>
Thu, 8 Nov 2018 20:56:06 +0000 (15:56 -0500)
committerAnthony Talarico <talarico@gaslightmedia.com>
Thu, 8 Nov 2018 20:56:06 +0000 (15:56 -0500)
css/admin.min.css
models/admin/ajax/mapSettingsAjax.php
models/admin/settings/mapSettings.php
sass/admin/_settings.scss
setup/adminHooks.php
setup/databaseScripts/create_database_V0.0.1.sql
views/admin/settings/mapSettings.html

index e853d85..500d42c 100644 (file)
@@ -1 +1 @@
-#new-area-section{background-color:white}#new-area-section .input-container{margin-bottom:0;padding:0 10px 0 10px}#new-area-section .input-container input.area-name{margin:10px 10px 0 10px}#new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child){line-height:1;min-height:20px}#new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child) span,#new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child) a{line-height:1;padding:2px 10px}
+#new-area-section{background-color:white}#new-area-section .input-container{margin-bottom:0;padding:0 10px 0 10px}#new-area-section .input-container input.area-name{margin:10px 10px 0 0px}#new-area-section .input-container input.area-name+label{top:15px !important}#new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child){line-height:1;min-height:20px}#new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child) span,#new-area-section .map-page-selection .select-wrapper .dropdown-content.select-dropdown li:not(:first-child) a{line-height:1;padding:2px 10px}#new-area-section .map-color-selection{margin-top:20px}#new-area-section .map-color-selection label{margin-left:15px;font-size:16px}#list-header{padding:5px;background-color:#003366;color:white}#list-header .area-header{color:inherit}#area-list .record-container{margin-bottom:2px}#area-list .record-container .area-record{padding:5px;background-color:white}#area-list .record-container .area-record .area-record-delete{position:relative;right:15px}#area-list .record-container .area-record .area-record-delete:hover{cursor:pointer}
index 5aca237..bf59cee 100644 (file)
@@ -57,6 +57,10 @@ class GlmMembersAdmin_ajax_mapSettingsAjax extends GlmDataMapSettings
         //parent::__construct(false, false);
 
     }
+    private function getAreas(){
+        $sql        = "SELECT * FROM " . GLM_MEMBERS_COUNTY_MAP_PLUGIN_DB_PREFIX . 'areas';
+        return $this->wpdb->get_results($sql); 
+    }
     function write_log ( $log )  {
         if ( true === WP_DEBUG ) {
             if ( is_array( $log ) || is_object( $log ) ) {
@@ -81,11 +85,14 @@ class GlmMembersAdmin_ajax_mapSettingsAjax extends GlmDataMapSettings
     public function modelAction ($actionData = false)
     {
         global $wpdb;
-        $option = filter_var($_REQUEST['option'], FILTER_SANITIZE_STRING);
-        $numbObits       = 0;
-        $namesList       = false;
-        $areas           = false;
-        $test = "start";
+        $option     = filter_var($_REQUEST['option'], FILTER_SANITIZE_STRING);
+        $numbObits  = 0;
+        $namesList  = false;
+        $areas      = false;
+        $test       = "start";
+        $area_name  = false;
+        $page_id    = false;
+        
         // Check if an ID is supplied
         $id = 0;
         if ( isset( $_REQUEST['id'] ) ) {
@@ -96,8 +103,24 @@ class GlmMembersAdmin_ajax_mapSettingsAjax extends GlmDataMapSettings
             switch( $option ) {
                 
                 case 'add':
-                    $return = $this->insertEntry();
-                    $id = $return['fieldData']['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->insert(
+                        GLM_MEMBERS_COUNTY_MAP_PLUGIN_DB_PREFIX . 'areas',
+                        array(
+                            'area_name'     => $area_name,
+                            'page_id'       => $page_id,
+                            'hover_color'   => $hover_color,
+                        ),
+                        array(
+                            '%s',
+                            '%d',
+                            '%s'
+                        )
+                    );
+                    $areas = $this->getAreas();
                     break;
 
                 case 'update':
@@ -108,12 +131,23 @@ class GlmMembersAdmin_ajax_mapSettingsAjax extends GlmDataMapSettings
 
                 case 'delete':
                     if ( $id > 0 ) {
-                        $this->deleteEntry( $id, true );
+                        $test = $id;
+                        $wpdb->delete(
+                            GLM_MEMBERS_COUNTY_MAP_PLUGIN_DB_PREFIX . 'areas', // table to delete from
+                            array(
+                            'id' => $id // value in column to target for deletion
+                            ),
+                            array(
+                            '%d' // format of value being targeted for deletion
+                            )
+                        );
+                        $areas = $this->getAreas();
                     }
                     break;
                     
                 case 'list':
-                    $areas = $this->getList();
+                    $areas = $this->getAreas();
+
                     break;
 
                 default:
@@ -123,12 +157,12 @@ class GlmMembersAdmin_ajax_mapSettingsAjax extends GlmDataMapSettings
             }
         }
         $data['list'] = $areas;
-        $data['test'] = $this->wpdb->insert_id;
         // Get number of obits
 
         
         $return = array(
-            'searchData'    =>  $data    // Where our events list will go
+            'areas'    =>  $data,
+            'test'      => $test  // Where our events list will go
         );
 
         header('Content-type:application/json;charset=utf-8', true);
index d2ca2f2..7f1a414 100644 (file)
@@ -107,13 +107,16 @@ class GlmMembersAdmin_settings_mapSettings extends GlmDataMapSettings
             GLM_MEMBERS_PLUGIN_VERSION
         );
         $args = array(
-            'sort_order' => 'asc',
-            'sort_column' => 'post_title',
-            'hierarchical' => 0,
-            'post_type' => 'page',
-            'post_status' => 'publish'
+            'sort_order'    => 'asc',
+            'sort_column'   => 'post_title',
+            'hierarchical'  => 0,
+            'post_type'     => 'page',
+            'post_status'   => 'publish'
         ); 
-        $pages = get_pages($args); 
+        $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');
index 6dd5206..862cff6 100644 (file)
@@ -4,7 +4,10 @@
         margin-bottom: 0;
         padding: 0 10px 0 10px;
         input.area-name{
-            margin: 10px 10px 0 10px;
+            margin: 10px 10px 0 0px;
+        }
+        input.area-name + label{
+            top: 15px !important;
         }
     }
     .map-page-selection{
             }
         }
     }
+    .map-color-selection{
+        margin-top: 20px;
+        label{
+            margin-left: 15px;
+            font-size: 16px;
+        }
+    }
+}
+#list-header{
+    padding: 5px;
+    background-color: #003366;
+    color: white;
+    .area-header{
+        color: inherit;
+    }
+}
+#area-list{
+    
+    .record-container{
+        margin-bottom: 2px;
+        .area-record{
+            padding: 5px;
+            background-color: white;
+            .area-record-delete{
+                position: relative;
+                right: 15px;
+                &:hover{
+                    cursor: pointer;
+                }
+            }
+        }
+    }
 }
\ No newline at end of file
index 4bc99a9..4282b6e 100644 (file)
@@ -24,4 +24,3 @@
  *  });
  *
  *  Also note that parameters will be in the context of the main admin controller constructor.
-  */
index 8f06e76..cb02a96 100644 (file)
@@ -17,8 +17,8 @@ CREATE TABLE {prefix}areas (
   id INT NOT NULL AUTO_INCREMENT,
   area_name TINYTEXT NOT NULL,
   lat FLOAT NOT NULL DEFAULT 0,
-  lng FLOAT NOT NULL DEFAULT 0,                    -- Birth Year
-  page_id SMALLINT NOT NULL DEFAULT 0,             -- Birth Year Range (use the start of the decade like 2010 or 2000)
-  hover_color TINYTEXT NOT NULL,         -- Death Year
+  lng FLOAT NOT NULL DEFAULT 0,                   
+  page_id SMALLINT NOT NULL DEFAULT 0,             
+  hover_color TINYTEXT NOT NULL,         
   PRIMARY KEY (id)
 );
\ No newline at end of file
index aa291d0..abe75f6 100644 (file)
@@ -1,29 +1,57 @@
 <button class="btn" data-action="add">Add Area</button>
 <div id="new-area-section">
-    <div class="row input-container">
-        <input class="s12 m6 l3 col area-name" type="text" value="" placeholder="Area Name">
-    </div>
-    <div class="row input-container">
-         <div class="input-field col s12 m6 l3 map-page-selection">
-            <select>
-                <option class="select-placeholder" value="">Select a page</option>
-                {foreach $pages as $page}
-                    <option class="map-page-option" value="{$page->ID}">{$page->post_title}</option>
-                {/foreach}
-            </select>
+    <div class="row">
+        <div class="s12 l4 col">
+            <div class="row input-container">
+                <div class="input-field col s12 l8">
+                    <input id="area-name" class="area-name validate" type="text" value="" required="" aria-required="">
+                    <span data-error="required">Required</span>
+                    <label for="area-name">Area Name</label>
+                </div>
+            </div>
+            
+            <div class="row input-container">
+                <div class="input-field col s12 l6 map-page-selection">
+                    <select>
+                        <option class="select-placeholder" value="">Select a page</option>
+                        {foreach $pages as $id=>$name}
+                            <option class="map-page-option" value="{$id}">{$name}</option>
+                        {/foreach}
+                    </select>
+                </div>
+            </div>
+        </div>
+        <div class="s12 l8 col">
+            <div class="row input-container">
+                <div class="col s12 m6 l5 map-color-selection">
+                    <input type="color" name="hover_color" id="map-color" value="#003366">
+                    <label for="map-color">Map Hover Color</label>
+                </div>
+            </div>
         </div>
     </div>
 </div>
+<div id="list-header" style="display: flex;">
+        <div class="aread-header" id="area-name-header" style="flex: 1; font-weight: bold;">Area Name</div>
+        <div class="aread-header" id="area-page-header" style="flex: 1; font-weight: bold;">Attached Page</div>
+        <div class="aread-header" id="area-color-header" style="flex: 1; font-weight: bold;">Hover Color</div>
+        <div class="aread-header" id="area-delete-header" style="flex: 0; font-weight: bold;"></div>
+ </div>
 <div id="area-list"></div>
 
-<script>
+<script type="text/javascript">
     jQuery(function($){
-        let firstRecord = true;
-        let data = {
+        var pages = {$pages|json_encode};
+        var firstRecord = true;
+        var data = {
             action      : 'glm_members_admin_ajax',
             glm_action  : 'mapSettingsAjax',
+            hover_color : '#003366'
         }
         // Helper Functions
+        function capitalize(string) {
+            return string.charAt(0).toUpperCase() + string.slice(1);
+        }
         function serverCall(data){
             $.ajax({
                 dataType: "json",
                 url: '{$ajaxUrl}',
                 data: data,
                 success: function(data) {
-                    console.log(data);
-                    if(!data.list) firstRecord = false;
+                    if(data.areas.list){
+                        $('#area-list').not( $("#list-header") ).empty();
+                        data.areas.list.forEach( function(area) {
+                           
+                            $("<div class='row record-container'><div style='display: flex;' class='s12 col area-record' data-id='" + area.id + "'><span class='area-record-name' style='flex: 1;'>" + area.area_name + "</span> <span class='area-record-page' style='flex: 1;'>" + pages[area.page_id] + "</span><span class='area-record-page' 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") );
+                        })
+                    }
                 }
             });
         };
-        function createAreaRecord(){
-
-        }
-
-
+     
         // Form interaction events
         $('button').on("click", function(){
-            createAreaRecord();
-            // data.option = $(this).data("action");
-            // serverCall(data);
+            if($("#area-name").val() ){
+                data.option = 'add';
+                data.area_name = capitalize($("#area-name").val());
+                data.page_id = $("select").val();
+                serverCall(data);
+                console.log(data);
+                $("#area-name").val("").siblings("label").removeClass("active");
+                $("#map-color").val("#003366");
+            
+                $('select').prop('selectedIndex', 0);
+                $("select").formSelect();
+            }else{
+                $("#area-name").css({literal}{'background-color':"rgba(244, 67, 54, 0.3)"}{/literal})
+            }
+        });
+
+        $("#area-name").on("click", function(){
+            console.log( $(this).css({literal}{"background-color": "transparent"}{/literal}) );
         });
+
         $('select').formSelect();
+
+        $('select').on('change', function(e) {
+            data.page_id = $(this).val();
+        });
+        
+        $(document).on("change", "#map-color",function(){
+            data.hover_color = $(this).val();
+        });
+        $(document).on("click", ".material-icons",function(){
+            console.log("delete");
+            data.option = 'delete';
+            data.id     = $(this).parent().parent().data("id");
+            serverCall(data);
+        });
+
         // Initial page load list population
         (function(){
             data.option = 'list';