// Exit at this point to stop all WordPress Dashboard output
exit();
}
-
// Add admin menus
add_action('admin_menu',
array(
)
);
-
+ // 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(
'glmMembersAdminAjax'
)
);
-
// Check the current Git branch and if it's not 'master' then display admin warning
$this->getGitBranch();
if (count($this->gitBranch) > 0) {
if (is_file($miscFile)) {
require_once($miscFile);
}
-
}
-
-
}
-
-
/**
* Get Git Branch
*
}
}
+
+
+
+
+
+
+
+
+ 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
date_default_timezone_set($defaultTimeZone);
}
-
}
* 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