added metabox, dropdowns for shortcodes, categories, id's, descriptions. lists
authorAnthony Talarico <talarico@gaslightmedia.com>
Mon, 14 Mar 2016 18:07:06 +0000 (14:07 -0400)
committerAnthony Talarico <talarico@gaslightmedia.com>
Mon, 14 Mar 2016 18:07:06 +0000 (14:07 -0400)
controllers/admin.php
css/admin.css
js/admin.js
js/front.js

index 0bcb872..d81a0f3 100644 (file)
@@ -150,7 +150,6 @@ class glmMembersAdmin extends GlmPluginSupport
             // Exit at this point to stop all WordPress Dashboard output
             exit();
         }
-
         // Add admin menus
         add_action('admin_menu',
             array(
@@ -175,7 +174,11 @@ class glmMembersAdmin extends GlmPluginSupport
 
             )
         );
-
+        // add shortcode metabox
+        add_action('add_meta_boxes', array(
+            $this,
+            'glmMembersShortcode'
+        ) );       
         // Add AJAX image upload action
         add_action( 'wp_ajax_glm_members_admin_ajax',
             array(
@@ -183,7 +186,6 @@ class glmMembersAdmin extends GlmPluginSupport
                 'glmMembersAdminAjax'
             )
         );
-
         // Check the current Git branch and if it's not 'master' then display admin warning
         $this->getGitBranch();
         if (count($this->gitBranch) > 0) {
@@ -212,13 +214,8 @@ class glmMembersAdmin extends GlmPluginSupport
             if (is_file($miscFile)) {
                 require_once($miscFile);
             }
-
         }
-
-
     }
-
-
     /**
      * Get Git Branch
      *
@@ -522,6 +519,162 @@ class glmMembersAdmin extends GlmPluginSupport
 
         }
     }
+    
+    
+    
+    
+    
+    
+    
+    
+    public function glmMembersShortcode(){
+        
+        add_meta_box("shortcode_builder", 
+                "Shortcode Builder", 
+                array($this,'shortcode_builder_markup'), 
+                "page", 'normal', 'high'
+                );
+        
+    }
+      // metabox content
+        function shortcode_builder_markup(){
+            
+            require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCategories.php');
+            require_once(GLM_MEMBERS_PACKAGING_PLUGIN_CLASS_PATH.'/data/dataPackages.php');      
+            
+            $package = new GlmDataPackages($this->wpdb, $this->config);
+            $packageList = $package->getList();
+            foreach($packageList as $key=>$value){
+                $packageListId[] = $value['id'];
+            }
+//            echo '<pre>', print_r($packageList), '</pre>';
+            
+            $shortcodes = $this->config['addOns']['glm-member-db']['shortcodes'];
+            $listAttr = $this->config['addOns']['glm-member-db']['shortcodes']['glm-members-list']['attributes'];
+            $detailAttr = $this->config['addOns']['glm-member-db']['shortcodes']['glm-member-detail']['attributes'];
+            
+            $packageShortcodes = $this->config['addOns']['glm-member-db-packaging']['shortcodes'];
+//          $packageDetail = $this->config['addOns']['glm-member-db-packaging']['shortcodes']['glm-members-packaging-detail']['attributes'];
+            $packageListAttr = $this->config['addOns']['glm-member-db-packaging']['shortcodes']['glm-members-packaging-list']['attributes'];
+  
+            foreach($packageListAttr as $key=>$value){
+                $packageListAttr[] = $key;
+            }
+            foreach($packageShortcodes as $key=>$value){
+                $shortcode[] = $key;
+            }
+            foreach($shortcodes as $key=>$value){
+                $shortcode[] = $key;
+            }
+            echo '<div id="shortcodeBuilder">';
+            //dropdown for main shortcode
+            echo '<select id="shortcodeDropdown">
+            <option disabled="disabled"> Select Shortcode </option>';
+            foreach($shortcode as $code){
+                echo '<option value = "' . $code . '">' . $code . '</option>';
+            }
+            echo '</select>';
+
+            $glmcat = new GlmDataCategories($this->wpdb, $this->wpconfig);
+            $list = $glmcat->getList();
+            
+            
+            /*
+             * Member DB Shortcode Attributes
+             */
+            
+            //dropdown for categories
+            echo '<select id="category-scDropdown">';
+            echo '<option disabled="disabled"> Select Category </option>';
+            foreach($list as $key=>$value){
+                echo '<option value='. $key . '>' . $value['name']  . '</option>';
+            }
+            echo '</select>';
+
+            // dropdown for blank start
+            echo '<select id="blank-start-scDropdown">';
+            echo  '<option disabled="disabled"> Blank Start </option>
+            <option selected="selected" value="False"> False </option>
+            <option value = "True"> True </option>';
+            echo '</select>';
+            
+            // show list options 'scb' = shortcode builder acronym 
+            echo '<div id="showList" title="List Options">';
+            echo '<label><input class="listBox" type="checkbox" name="list-scb" value="all">All</label>';
+            echo '<label><input class="listBox" type="checkbox" name="list-scb" value="none">None</label>';
+            foreach($listAttr as $key=>$value){
+                if($value != ''){
+                    echo '<label><input class="showLists" type="checkbox" name="listBox" value='. $key . '>' . $key .'</label>';
+                }
+            }           
+            echo '</div>';
+
+            // show detail options
+            echo '<div id="showDetail" title="Detail Options">';
+            echo '<label><input class="detailBox" type="checkbox" name="detailBox" value="all">All</label>';
+            echo '<label><input class="detailBox" type="checkbox" name="detailBox" value="none">None</label>';
+            foreach($detailAttr as $key=>$value){
+                if($value != ''){
+                    echo '<label><input class="showDetails" type="checkbox" name="detailBox" value='. $key . '>' . $key .'</label>';
+                }
+            }           
+            echo '</div>';
+            
+            /*
+             * Packages Shortcode Attributes
+             */
+
+            //dropdown for package list 'type' attr
+            echo '<select id="type-scDropdown">';
+            echo  '<option disabled="disabled">Package Type</option>';
+            foreach($packageListId as $id){
+                echo '<option value=' .$id . '>' . $id . '</option>';
+            }
+            echo '</select>';
+
+            //dropdown for package list 'member' attr
+            echo '<select id="member-scDropdown">';
+            echo  '<option disabled="disabled">Member ID</option>';
+            foreach($packageListId as $id){
+                echo '<option value=' .$id . '>' . $id . '</option>';
+            }
+            echo '</select>';
+
+            //dropdown for package list 'order' attr
+            echo '<select id="member-scDropdown">';
+            echo  '<option disabled="disabled">Order</option>';
+            foreach($packageListId as $id){
+                echo '<option value=' .$id . '>' . $id . '</option>';
+            }
+            echo '</select>';
+            
+            //dropdown for package list 'template' attr
+            echo '<select id="template-scDropdown">';
+            echo  '<option disabled="disabled">Template</option>';
+            foreach($packageListId as $id){
+                echo '<option value=' .$id . '>' . $id . '</option>';
+            }
+            echo '</select>';
+
+            // Package 'ID' attr
+            echo '<select id="id-scDropdown">';
+            echo  '<option disabled="disabled">Package ID</option>';
+            foreach($packageListId as $id){
+                echo '<option value=' .$id . '>' . $id . '</option>';
+            }
+            echo '</select>';
+
+            // list and detail buttons to open dialog for member db 'show' attr options
+            echo '<button id="listBtn" class="glm-button" type="button"> Show List Options </button>';
+            echo '<button id="detailBtn" class="glm-button" type="button"> Show Detail Options </button>';
+
+            echo '<button id="generate" class="glm-button" type="button"> Insert Shortcode </button>';
+                
+        }
+        
+           
+        
+        
 
     /**
      * Admin controller
@@ -888,5 +1041,4 @@ class glmMembersAdmin extends GlmPluginSupport
         date_default_timezone_set($defaultTimeZone);
 
     }
-
 }
index dd5bcc4..598aefc 100644 (file)
@@ -308,4 +308,21 @@ td.glm-nowrap {
 }
 .glm-calendar td {
     padding: .2em;
-}
\ No newline at end of file
+}
+label {
+    display: block;
+    padding-left: 15px;
+    text-indent: -15px;
+}
+.listBox {
+    width: 13px;
+    height: 13px;
+    padding: 0;
+    margin:0;
+    vertical-align: bottom;
+    position: relative;
+    top: -1px;
+    *overflow: hidden;
+    z-index: 10;
+}
+
index cf96727..b423492 100644 (file)
@@ -3,3 +3,166 @@
  *  Other needed Admin JS code
  * 
  */
+jQuery(document).ready(function ($) {
+    
+    var shortcodeDropdown, shortcodeCategory, blankStart, listBox, detailBox, target, shortcodeString;
+    var shortcodeValues = {};
+    $("#showDetail").hide();
+    $("#showList").hide();
+    $("#listBtn").hide();
+    $("#detailBtn").hide();
+//    $("#category-scDropdown").hide();
+//    $("#blank-start-scDropdown").hide();
+//    $("#id-scDropdown").hide();
+    $("[id$=-scDropdown]").hide();
+   
+   // fire core events when switching between shortcodes
+    $("#shortcodeDropdown").on("change", function () {
+        // reset the dropdowns and checkbox if when switching shortcodes
+        document.getElementById('category-scDropdown').options[0].selected = 'selected';
+        document.getElementById('blank-start-scDropdown').options[0].selected = 'selected';
+        document.getElementById('id-scDropdown').options[0].selected = 'selected';
+        UncheckAll();
+        
+        // delete the object properties to reset the object
+        shortcodeString = "";
+        for (var prop in shortcodeValues){
+            delete shortcodeValues[prop];
+        }
+        
+        // get the shortcode option name and hide / show necessary elements
+        shortcodeDropdown = $("#shortcodeDropdown option:selected").text();
+        
+        if(shortcodeDropdown === "glm-members-list"){
+            $("#listBtn").show();
+            $("#detailBtn").hide();
+            $("#category-scDropdown").show();
+            $("#blank-start-scDropdown").show();
+            $("#id-scDropdown").hide();
+        }
+        
+        if(shortcodeDropdown === "glm-member-detail") {
+            $("#detailBtn").show();
+            $("#listBtn").hide();
+            $("#blank-start-scDropdown").show();
+            $("#category-scDropdown").hide();  
+            $("#id-scDropdown").hide();
+        } 
+        
+        if(shortcodeDropdown === "glm-members-packaging-list"){
+            $("#blank-start-scDropdown").hide();
+            $("#listBtn").hide();
+            $("#category-scDropdown").hide();
+            $("#detailBtn").hide();
+            $("#id-scDropdown").hide();
+        } 
+        
+        if (shortcodeDropdown === "glm-members-packaging-detail"){
+            $("#blank-start-scDropdown").hide();
+            $("#listBtn").hide();
+            $("#category-scDropdown").hide();
+            $("#detailBtn").hide()
+            $("#id-scDropdown").show();
+        }
+    });
+     
+     // shortcode attribute name from from dropdowns containing '-scDropdown' in their ID
+     // Then append the values to the shortcode object
+     $("[id$=-scDropdown]").on("change", function () {
+         target = $(this).attr("id").slice(0, -11);
+         var targetVal = $("#" + target + "-scDropdown option:selected").val();
+         shortcodeValues[target] = targetVal;
+    });
+
+    // use jquery dialog to separate the checkbox lists
+    $("#listBtn").on("click", function () {
+        $("#showList").dialog();
+    });
+    $("#detailBtn").on("click", function () {
+        $("#showDetail").dialog();
+    });
+
+    // generate the shortcode into a string and insert into the content upon clicking
+    $("#generate").on("click", function () {
+        // enforce the selection of a shortcode
+        if(shortcodeDropdown){
+            // set up properties for shortcode lists
+            if(shortcodeDropdown === "glm-members-list"){
+            var listValues = $('input[name="listBox"]:checkbox:checked').map(function() {
+                target = $(this).attr("class").slice(0, -5);
+                return this.value;
+            }).get();
+            
+            var listString = "";
+                listValues.forEach(function(value){
+                    listString += value + ",";
+                });
+                if(listValues != ""){
+                    listString = listString.replace(/,\s*$/, "");
+                    shortcodeValues[target] = listString;
+                }
+                // set up properties for detail shortcode
+            } else if( shortcodeDropdown === "glm-member-detail"){
+                var detailValues = $('input[name="detailBox"]:checkbox:checked').map(function() {
+                target = $(this).attr("class").slice(0, -7);
+                return this.value;
+            }).get();
+            
+                var detailString = '';
+                detailValues.forEach(function(value){
+                    detailString += value + ",";
+                });
+                if(detailValues != ""){
+                    detailString = detailString.replace(/,\s*$/, "");
+                    shortcodeValues[target] = detailString;
+                }
+            }
+
+            // start the shortcode string that will be added to the tinymce editor
+            shortcodeString = "[" + shortcodeDropdown;
+            
+            // populate the shortcode object
+            for (var key in shortcodeValues) {
+                if (shortcodeValues.hasOwnProperty(key)) {
+                    shortcodeString += " " + key + '="' + shortcodeValues[key] +'"';
+                }
+            }
+            shortcodeString += ']';
+  
+            // insert shortcode at current cursor position
+            var cursorPos = $('#content').prop('selectionStart');
+            var v = $('#content').val();
+            var textBefore = v.substring(0,  cursorPos );
+            var textAfter  = v.substring( cursorPos, v.length );
+            $('#content').val( textBefore + shortcodeString +textAfter );
+        } else {
+            alert("Please Select a Shortcode");
+        }
+    });
+
+    // reset dropdowns and checkboxes to default values on page reload
+    var scd = document.getElementById('shortcodeDropdown');
+    var catscd = document.getElementById('category-scDropdown');
+    var blank = document.getElementById('blank-start-scDropdown');
+    
+    if(scd){
+        window.onload = document.getElementById('shortcodeDropdown').options[0].selected = 'selected';
+    }
+    if(catscd){
+        window.onload = document.getElementById('category-scDropdown').options[0].selected = 'selected';
+    }
+    if(blank){
+        window.onload = document.getElementById('blank-start-scDropdown').options[0].selected = 'selected';
+    }
+   window.onload = UncheckAll();
+     
+    function UncheckAll(){ 
+      var w = document.getElementsByTagName('input'); 
+      for(var i = 0; i < w.length; i++){ 
+        if(w[i].type=='checkbox'){ 
+          w[i].checked = false; 
+        }
+      }
+    }
+});
\ No newline at end of file
index fe7e3d2..903ba07 100644 (file)
@@ -1,2 +1,2 @@
 
-/* Nothing here yet */
\ No newline at end of file
+/* Nothing here yet */