From: Anthony Talarico Date: Thu, 28 Apr 2016 20:59:35 +0000 (-0400) Subject: adding shortcode builder functionality X-Git-Tag: v2.0.0^2~26^2~2 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=5acd2cdcc3d108b4404b435fa788a4df697393e3;p=WP-Plugins%2Fglm-member-db.git adding shortcode builder functionality --- diff --git a/controllers/admin.php b/controllers/admin.php index 84eb98b9..7d8f4a55 100644 --- a/controllers/admin.php +++ b/controllers/admin.php @@ -167,6 +167,12 @@ 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', @@ -589,6 +595,128 @@ class glmMembersAdmin extends GlmPluginSupport } } + public function glmMembersShortcode(){ + + add_meta_box("shortcode_builder", + "Shortcode Builder", + array($this,'shortcode_builder_markup'), + "page", 'normal', 'high' + ); + + } + function prettyPrint($array){ + echo '
', print_r($array), '
'; + } + + // metabox content + function shortcode_builder_markup(){ + + require_once(GLM_MEMBERS_PLUGIN_CLASS_PATH.'/data/dataCategories.php'); + + $listAttr = $this->config['addOns']['glm-member-db']['shortcodes']['glm-members-list']['attributes']; + $detailAttr = $this->config['addOns']['glm-member-db']['shortcodes']['glm-member-detail']['attributes']; + $packageListAttr = $this->config['addOns']['glm-member-db-packaging']['shortcodes']['glm-members-packaging-list']['attributes']; + + foreach($packageListAttr as $key=>$value){ + $packageListAttr[] = $key; + } + + $glmcat = new GlmDataCategories($this->wpdb, $this->wpconfig); + $list = $glmcat->getList(); + + // get the each addOn slugs to pass to the config array later + $addOns = $this->config['addOns']; + foreach($addOns as $addOn){ + if(!is_array($addOn['slug'])){ + $addOnSlugs[] = $addOn['slug']; + } + } + + // use the addOn slugs to access each of the shortcodes + foreach($addOnSlugs as $addOn){ + $shortCodeList[] = $this->config['addOns'][$addOn]['shortcodes']; + } + // loop through the shortcodes to pull out the shortcode names + foreach($shortCodeList as $addonInfo) { + foreach($addonInfo as $shortCode=>$value){ + if(!is_array($shortCode)){ + $shortCodes[] = $shortCode; + } + } + } + + /* + * HTML Markup for the shortodes + */ +// if(file_exists(GLM_MEMBERS_EVENTS_PLUGIN_PATH . "/setup/shortcodeBuilder.php")){ +// include GLM_MEMBERS_EVENTS_PLUGIN_PATH . "/setup/shortcodeBuilder.php"; +// } + + + //dropdown for shortcode names + echo '
'; + echo ''; + + + /* + * 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 '
'; + + // packaging addOn mark up + if(file_exists(GLM_MEMBERS_PACKAGING_PLUGIN_PATH . "/setup/shortcodeBuilder.php")){ + include GLM_MEMBERS_PACKAGING_PLUGIN_PATH . "/setup/shortcodeBuilder.php"; + } + + + // list and detail buttons to open dialog for member db 'show' attr options + echo ''; + echo ''; + + echo ''; + + } /** * Admin controller diff --git a/css/admin.css b/css/admin.css index 55837589..ceafac6d 100644 --- a/css/admin.css +++ b/css/admin.css @@ -331,4 +331,19 @@ td.glm-nowrap { } input[type=submit], input[type=file] { cursor: pointer; -} \ No newline at end of file +} +#showDetail label, #showList label{ + display: block; + padding-left: 15px; + text-indent: -15px; +} +.listBox, .detailBox { + width: 13px; + height: 13px; + padding: 0; + margin:0; + vertical-align: bottom; + position: relative; + top: -1px; + *overflow: hidden; +} diff --git a/js/admin.js b/js/admin.js index cf967274..4fffc4e3 100644 --- a/js/admin.js +++ b/js/admin.js @@ -3,3 +3,183 @@ * 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 +// if($("#content").css("display") !== "none"){ +// 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 { + function insert_tag(text){ + if(tinyMCE && tinyMCE.activeEditor) + { + tinyMCE.activeEditor.selection.setContent(text); + } + return false; + } + insert_tag(shortcodeString); +// } + + } 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'); + var list = document.getElementById('type-scList'); + + 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'; + } + if(list){ + window.onload = document.getElementById('type-scList').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