From de6c4cbac169c69782fac185f5aab9d20b4cf9cd Mon Sep 17 00:00:00 2001 From: Anthony Talarico Date: Mon, 14 Mar 2016 14:07:06 -0400 Subject: [PATCH] added metabox, dropdowns for shortcodes, categories, id's, descriptions. lists --- controllers/admin.php | 170 +++++++++++++++++++++++++++++++++++++++--- css/admin.css | 19 ++++- js/admin.js | 163 ++++++++++++++++++++++++++++++++++++++++ js/front.js | 2 +- 4 files changed, 343 insertions(+), 11 deletions(-) diff --git a/controllers/admin.php b/controllers/admin.php index 0bcb8729..d81a0f34 100644 --- a/controllers/admin.php +++ b/controllers/admin.php @@ -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 '
', print_r($packageList), '
'; + + $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 '
'; + //dropdown for main shortcode + echo ''; + + $glmcat = new GlmDataCategories($this->wpdb, $this->wpconfig); + $list = $glmcat->getList(); + + + /* + * Member DB Shortcode Attributes + */ + + //dropdown for categories + echo ''; + + // dropdown for blank start + echo ''; + + // show list options 'scb' = shortcode builder acronym + echo '
'; + echo ''; + echo ''; + foreach($listAttr as $key=>$value){ + if($value != ''){ + echo ''; + } + } + echo '
'; + + // show detail options + echo '
'; + echo ''; + echo ''; + foreach($detailAttr as $key=>$value){ + if($value != ''){ + echo ''; + } + } + echo '
'; + + /* + * Packages Shortcode Attributes + */ + + //dropdown for package list 'type' attr + echo ''; + + //dropdown for package list 'member' attr + echo ''; + + //dropdown for package list 'order' attr + echo ''; + + //dropdown for package list 'template' attr + echo ''; + + // Package 'ID' attr + echo ''; + + // list and detail buttons to open dialog for member db 'show' attr options + echo ''; + echo ''; + + echo ''; + + } + + + + /** * Admin controller @@ -888,5 +1041,4 @@ class glmMembersAdmin extends GlmPluginSupport date_default_timezone_set($defaultTimeZone); } - } diff --git a/css/admin.css b/css/admin.css index dd5bcc4a..598aefcc 100644 --- a/css/admin.css +++ b/css/admin.css @@ -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; +} + diff --git a/js/admin.js b/js/admin.js index cf967274..b4234929 100644 --- a/js/admin.js +++ b/js/admin.js @@ -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 diff --git a/js/front.js b/js/front.js index fe7e3d25..903ba070 100644 --- a/js/front.js +++ b/js/front.js @@ -1,2 +1,2 @@ -/* Nothing here yet */ \ No newline at end of file +/* Nothing here yet */ -- 2.17.1