Editing of custom fields, and picklist options all now working.
authorChuck Scott <cscott@gaslightmedia.com>
Thu, 28 Dec 2017 21:49:09 +0000 (16:49 -0500)
committerChuck Scott <cscott@gaslightmedia.com>
Thu, 28 Dec 2017 21:49:09 +0000 (16:49 -0500)
classes/data/dataCustomFieldsOption.php
models/admin/ajax/customFieldOptions.php
models/admin/ajax/customFields.php
views/admin/ajax/newField.html
views/admin/ajax/newFieldOption.html
views/admin/customFields/index.html
views/front/customFields/displayForm.html

index 95dd95a..323ac38 100644 (file)
@@ -126,7 +126,7 @@ class GlmDataFieldsCustomFieldsOption extends GlmDataAbstract
             'field_id' => array (
                 'field'     => 'field_id',
                 'type'      => 'integer',
-                'use'       => 'a'
+                'use'       => 'lgnie'
             ),
 
             // Option Text - Displayed text for option
index 3f5fff5..70cdee8 100644 (file)
@@ -78,22 +78,48 @@ class GlmMembersAdmin_ajax_customFieldOptions extends GlmDataFieldsCustomFieldsO
     {
 
         switch($_REQUEST['option']) {
-            
+
             case 'addNewOption':
-    
+
                 $fieldOption = $this->insertEntry();
 
                 if (!is_array($fieldOption) || !$fieldOption['status']) {
                     echo "0";
                 } else {
 
-                    // Produce HTML for the new field
+                    // Produce HTML for the new option
                     $viewFile = 'admin/ajax/newFieldOption.html';
                     $fieldOption['fieldData']['fid'] = $_REQUEST['fid'];
 
-                    $newFieldHtml = $this->generateHTML($fieldOption, $viewFile);                    
-                    echo $newFieldHtml;
-                    
+                    $newOptionHtml = $this->generateHTML($fieldOption, $viewFile);
+                    echo $newOptionHtml;
+
+                }
+
+                break;
+
+            case 'updateOption':
+
+                $optionId = ($_REQUEST['option_id'] -0);
+
+                if ($optionId > 0) {
+
+
+                    $res = $this->updateEntry($optionId);
+
+                    if ($res) {
+
+                        $fieldOption = $this->editEntry($optionId);
+
+                        // Produce HTML for the new field
+                        $viewFile = 'admin/ajax/newFieldOption.html';
+                        $fieldOption['fieldData']['fid'] = $_REQUEST['fid'];
+
+                        $optionHtml = $this->generateHTML($fieldOption, $viewFile);
+                        echo $optionHtml;
+
+                    }
+
                 }
 
                 break;
@@ -101,10 +127,10 @@ class GlmMembersAdmin_ajax_customFieldOptions extends GlmDataFieldsCustomFieldsO
             case 'deleteOption':
 
                 $fieldId = false;
-                
+
                 if (isset($_REQUEST['id'])) {
                     $fieldId = $_REQUEST['id'] - 0;
-                    
+
                     if ($fieldId <= 0) {
                         echo false;
                         wp_die();
index 2049723..9a2dee7 100644 (file)
@@ -91,7 +91,6 @@ class GlmMembersAdmin_ajax_customFields extends GlmDataFieldsCustomFields
 
                     // Add description for the selected field type
                     $customField['fieldData']['field_type_descr'] = $this->config['custom_field_type'][$customField['fieldData']['field_type']];
-trigger_error('**** 11111 *****'.print_r($res,1),E_USER_NOTICE);
 
                     // Produce HTML for the new field
                     $viewFile = 'admin/ajax/newField.html';
@@ -103,25 +102,23 @@ trigger_error('**** 11111 *****'.print_r($res,1),E_USER_NOTICE);
 
             case 'updateField':
 
-                    $fieldId = ($_REQUEST['fieldId'] -0);
-                    if ($fieldId > 0) {
-                        $res = $this->updateEntry($fieldId);
+                $fieldId = ($_REQUEST['fieldId'] -0);
 
-                        if ($res) {
+                if ($fieldId > 0) {
 
-trigger_error('**** 22222 *****'.$_REQUEST['fieldId'].":".print_r($res,1),E_USER_NOTICE);
+                    $res = $this->updateEntry($fieldId);
 
-                            $customField = $this->editEntry($fieldId);
-trigger_error('**** 33333 *****'.$_REQUEST['fieldId']." - ".print_r($customField,1),E_USER_NOTICE);
+                    if ($res) {
 
-                            // Produce HTML for the new field
-                            $viewFile = 'admin/ajax/newField.html';
-                            $newFieldHtml = $this->generateHTML($customField, $viewFile);
-                            echo $newFieldHtml;
+                        $customField = $this->editEntry($fieldId);
 
-                        }
+                        // Produce HTML for the new field
+                        $viewFile = 'admin/ajax/newField.html';
+                        $newFieldHtml = $this->generateHTML($customField, $viewFile);
+                        echo $newFieldHtml;
 
                     }
+                }
 
                 break;
 
index f7e12d3..4ba440c 100644 (file)
@@ -37,6 +37,6 @@
             </td>
         </tr>
     {/if}                
-        <tr id="EndOfField_{$fieldData.id}" class="FieldRow_{$fieldData.id}"><td  style="border-bottom: 1px solid black;" colspan="5">&nbsp;</td></tr>
+        <tr id="EndOfField_{$fieldData.id}" class="FieldRow_{$fieldData.id}"><td  style="border-bottom: 1px solid black; line-height: 0px;" colspan="5">&nbsp;</td></tr>
     </tbody>
 
index f1618da..bb5f4ba 100644 (file)
@@ -1,13 +1,20 @@
 {* A line describing the new picklist option. *}
 
-<tr id="FieldOptionRow_{$fieldData.id}" class="FieldRow_{$fieldData.field_id}">">
-    <td style="text-align: left;">{$fieldData.option_value}</td>
-    <td style="text-align: left;">{$fieldData.option_text}</td>
-    <td style="text-align: left;">${$fieldData.option_cost}</td>
-    <td style="text-align: left;">{$fieldData.option_default.name}</td>
+<tr id="OptionRow_{$fieldData.id}" class="FieldRow_{$fieldData.field_id}">">
+    <td style="text-align: left;" id="EditOptionValue_{$fieldData.id}">{$fieldData.option_value}</td>
+    <td style="text-align: left;" id="EditOptionText_{$fieldData.id}">{$fieldData.option_text}</td>
+    <td style="text-align: left;" id="EditOptionCost_{$fieldData.id}">${$fieldData.option_cost|number_format:2}</td>
+    <td style="text-align: left;" id="EditOptionDefault_{$fieldData.id}">{$fieldData.option_default.name}</td>
     <td style="text-align: right;">
-        <div class="DeleteOptionButton_{$fieldData.fid} button button-secondary glm-button-small" data-fieldOptionId="{$fieldData.id}">Delete</div>
-        <div class="EditOptionButton_{$fieldData.fid} button button-secondary glm-button-small" data-fieldOptionId="{$fieldData.id}">Edit</div>
+        <div class="DeleteOptionButton_{$fieldData.fid} button button-secondary glm-button-small" data-optionId="{$fieldData.id}">Delete</div>
+        <div class="EditOptionButton_{$fieldData.fid} button button-secondary glm-button-small" 
+            data-fieldId="{$fieldData.field_id}"
+            data-optionId="{$fieldData.id}"
+            data-optionValue="{$fieldData.option_value|escape:'html'}" 
+            data-optionText="{$fieldData.option_text|escape:'html'}" 
+            data-optionCost="{$fieldData.option_cost}" 
+            data-default="{$fieldData.option_default.value}"
+        >Edit</div>
     </td>
 </tr>
 
index 6a4532f..a73fb26 100644 (file)
@@ -1,4 +1,4 @@
-<!-- Add Custom Field Button and Dialog Box -->
+<!-- Custom Field Dialog Box -->
 
 {* New/Edit field form *}
 <div id="FieldDialog_{$fid}" class="glm-dialog-box" style="width: 100%" title="Enter a New Custom Field">
     </center>
 </div>
 
-{* New Picklist Option form *}
-<div id="NewOptionDialog_{$fid}" class="glm-dialog-box" style="width: 100%" title="Add a New Option">
+{* Picklist Option form *}
+<div id="EditOptionDialog_{$fid}" class="glm-dialog-box" style="width: 100%" title="Add a New Option">
     <table class="glm-admin-table" style="width: 100%">
         <tr>
             <th class="glm-required" style="width: 20%; white-space: nowrap;">Option Name:</th>
             <td>
-                <input id="NewOptionValue_{$fid}" type="text" name="option_value" class="glm-form-text-input-short">
+                <input id="EditOptionValue_{$fid}" type="text" name="option_value" class="glm-form-text-input-short">
                 <br>(For reference - keep short)
             </td>
         </tr>
         <tr>
             <th class="glm-required">Displayed Text:</th>
-            <td><input id="NewOptionText_{$fid}" type="text" name="option_text" class="glm-form-text-input"></td>
+            <td><input id="EditOptionText_{$fid}" type="text" name="option_text" class="glm-form-text-input"></td>
         </tr>
         <tr>
-            <th style="width: 20%; white-space: nowrap;">Selected by Dedault</th>
-            <td><input id="NewOptionDefault_{$fid}" type="checkbox" name="option_default"></td>
+            <th style="width: 20%; white-space: nowrap;">Selected by Default</th>
+            <td><input id="EditOptionDefault_{$fid}" type="checkbox" name="option_default"></td>
         </tr>
         <tr>
             <th>Cost:</th>
-            <td>$<input id="NewOptionCost_{$fid}" type="text" name="option_cost" class="glm-form-text-input-veryshort"></td>
+            <td>$<input id="EditOptionCost_{$fid}" type="text" name="option_cost" class="glm-form-text-input-veryshort"></td>
         </tr>
     </table>
     <p><span class="glm-required">*</span> Required</p>
-    <div id="NewOptionCancel_{$fid}" class="button button-primary glm-right">Cancel</div>
-    <div id="NewOptionSubmit_{$fid}" class="button button-primary" data-fieldId="">Add new Picklist Option</div>
-    <div id="NewOptionDialogError_{$fid}" class="glm-error" style="display: none;"><p>Unable to create picklist option. Did you supply all required information?</p></div>
+    <div id="EditOptionCancel_{$fid}" class="button button-primary glm-right">Cancel</div>
+    <div id="EditOptionSubmit_{$fid}" class="button button-primary" data-optionId="" data-fieldId="">(name supplied by code below)</div>
+    <div id="EditOptionDialogError_{$fid}" class="glm-error" style="display: none;"><p>Unable to create picklist option. Did you supply all required information?</p></div>
 </div>
 
 {* Fields Table *}
     {if $t.field_type=='picklist'}
         <tr id="PicklistField_{$t.id}">
             <td colspan="5" style="padding-left: 2rem;">
-                <table id="PicklistOptions_{$t.id}" width="100%">
+                <table id="PicklistOptions_{$t.id}" width="100%" style="margin-top: .5rem;">
                     <tr class="FieldRow_{$t.id}" style="background-color: #ddd;">
                         <th style="text-align: left;">Option Name</th>
                         <th style="text-align: left;">Option Text</th>
                     </tr>
                   {if $t.options}
                     {foreach $t.options as $option}
-                    <tr id="FieldOptionRow_{$option.id}" class="FieldRow_{$t.id}">
-                        <td style="text-align: left;">{$option.option_value}</td>
-                        <td style="text-align: left;">{$option.option_text}</td>
-                        <td style="text-align: left;">${$option.option_cost|number_format:2}</td>
-                        <td style="text-align: left;">{$option.option_default.name}</td>
+                    <tr id="OptionRow_{$option.id}" class="FieldRow_{$t.id}">
+                        <td style="text-align: left;" id="EditOptionValue_{$option.id}">{$option.option_value}</td>
+                        <td style="text-align: left;" id="EditOptionText_{$option.id}">{$option.option_text}</td>
+                        <td style="text-align: left;" id="EditOptionCost_{$option.id}">${$option.option_cost|number_format:2}</td>
+                        <td style="text-align: left;" id="EditOptionDefault_{$option.id}">{$option.option_default.name}</td>
                         <td style="text-align: right;">
-                            <div class="DeleteOptionButton_{$fid} button button-secondary glm-button-small" data-fieldOptionId="{$option.id}">Delete</div>
-                            <div class="EditOptionButton_{$fid} button button-secondary glm-button-small" data-fieldOptionId="{$option.id}">Edit</div>
+                            <div class="DeleteOptionButton_{$fid} button button-secondary glm-button-small" data-optionId="{$option.id}">Delete</div>
+                            <div id="EditOptionButton_{$option.id}" class="EditOptionButton_{$fid} button button-secondary glm-button-small" 
+                                data-fieldId="{$t.id}"
+                                data-optionId="{$option.id}"
+                                data-optionValue="{$option.option_value|escape:'html'}" 
+                                data-optionText="{$option.option_text|escape:'html'}" 
+                                data-optionCost="{$option.option_cost}" 
+                                data-default="{$option.option_default.value}"
+                            >Edit</div>
                         </td>
                     </tr>
                     {/foreach}
             </td>
         </tr>
     {/if}                
-        <tr id="EndOfField_{$fieldData.id}" class="FieldRow_{$fieldData.id}"><td  style="border-bottom: 1px solid black;" colspan="5">&nbsp;</td></tr>
+        <tr id="EndOfField_{$t.id}" class="FieldRow_{$t.id}"><td  style="border-bottom: 1px solid black; line-height: 0px" colspan="5">&nbsp;</td></tr>
     </tbody>
   {/foreach}
 {/if}
@@ -252,8 +259,8 @@ jQuery(document).ready(function($) {
                     $('body').on('click', '.DeleteFieldButton_{$fid}', deleteFieldButton_{$fid});
                     $('body').off('click', '.AddOptionButton_{$fid}', addOptionButton_{$fid});
                     $('body').on('click', '.AddOptionButton_{$fid}', addOptionButton_{$fid});
-                    $('body').off('click', '#NewOptionCancel_{$fid}', NewOptionCancel_{$fid});
-                    $('body').on('click', '#NewOptionCancel_{$fid}', NewOptionCancel_{$fid});
+                    $('body').off('click', '#EditOptionCancel_{$fid}', editOptionCancel_{$fid});
+                    $('body').on('click', '#EditOptionCancel_{$fid}', editOptionCancel_{$fid});
 
                 // Otherwise this is a field update
                 } else {
@@ -265,8 +272,8 @@ jQuery(document).ready(function($) {
                     // Update the displayed values 
                     $('#DisplayFieldName_' + fieldId).html(formData.field_name);
                     $('#DisplayFieldTypeDescr_' + fieldId).html($('#FieldType_{$fid} :selected').text());                    
-                    $('#DisplayFieldPriority_' + fieldId).html((formData.priority_display ? 'Yes':'No'));
-                    $('#DisplayFieldRequired_' + fieldId).html((formData.required ? 'Yes':'No'));
+                    $('#DisplayFieldPriority_' + fieldId).html(formData.priority_display ? 'Yes':'No');
+                    $('#DisplayFieldRequired_' + fieldId).html(formData.required ? 'Yes':'No');
                     $('#DisplayFieldPrompt_' + fieldId).html(formData.field_prompt);
 
                     // Update hidden values used for editing
@@ -361,15 +368,15 @@ jQuery(document).ready(function($) {
      * New Picklist Option Dialog
      */
     // Setup
-    $("#NewOptionDialog_{$fid}").dialog({
+    $("#EditOptionDialog_{$fid}").dialog({
         autoOpen: false,
         minWidth: 600,
         dialogClass: "glm-dialog-no-close"
     });
     // Cancel
-    $('body').on('click', '#NewOptionCancel_{$fid}', NewOptionCancel_{$fid});
-    function NewOptionCancel_{$fid}(e) {
-        $("#NewOptionDialog_{$fid}").dialog("close");
+    $('body').on('click', '#EditOptionCancel_{$fid}', editOptionCancel_{$fid});
+    function editOptionCancel_{$fid}(e) {
+        $("#EditOptionDialog_{$fid}").dialog("close");
     };
     
     /*
@@ -378,32 +385,40 @@ jQuery(document).ready(function($) {
     $('body').on('click', '.AddOptionButton_{$fid}', addOptionButton_{$fid});
     function addOptionButton_{$fid}(e) {
         var fieldId_{$fid} = $(this).attr('data-fieldId');
-        
-        $("#NewOptionDialog_{$fid}").dialog("open");
-        $('#NewOptionValue_{$fid}').val('');
-        $('#NewOptionText_{$fid}').val('');
-        $('#NewOptionDefault_{$fid}').removeAttr('checked');
-        $('#NewOptionCost_{$fid}').val('0.00');
-        
-        $('#NewOptionSubmit_{$fid}').data('data-fieldId', $(this).attr('data-fieldId'));
+
+        $('#EditOptionSubmit_{$fid}').data('data-optionId', '');
+        $("#EditOptionDialog_{$fid}").dialog("open");
+        $('#EditOptionValue_{$fid}').val('');
+        $('#EditOptionText_{$fid}').val('');
+        $('#EditOptionDefault_{$fid}').removeAttr('checked');
+        $('#EditOptionCost_{$fid}').val('0.00');
+
+        $('#EditOptionSubmit_{$fid}').html('New Custom Field');
+        $('#EditOptionSubmit_{$fid}').data('data-fieldId', $(this).attr('data-fieldId'));
     };
 
     /*
-     * Add New Option Submit
+     * Option Submit
      */
-    $('#NewOptionSubmit_{$fid}').click( function(e) {
+    $('#EditOptionSubmit_{$fid}').click( function(e) {
 
-        // Collect the new field data
+        var optionSubmitOption = 'addNewOption';
+        if ($('#EditOptionSubmit_{$fid}').data('data-optionId') != '') {
+            optionSubmitOption = 'updateOption';
+        }
+
+        // Collect the option field data
         var formData = {
             'action':           'glm_members_admin_ajax',
             'glm_action':       'customFieldOptions',
-            'option':           'addNewOption',
-            'field_id':         $('#NewOptionSubmit_{$fid}').data('data-fieldId'),
-            'option_value':     $('#NewOptionValue_{$fid}').val(),
-            'option_text':      $('#NewOptionText_{$fid}').val(),
-            'option_cost':      $('#NewOptionCost_{$fid}').val(),
-            'option_default':   $('#NewOptionDefault_{$fid}').is(':checked'),
-            'fid':              '{$fid}'
+            'option':           optionSubmitOption,
+            'fid':              '{$fid}',
+            'field_id':         $('#EditOptionSubmit_{$fid}').data('data-fieldId'),
+            'option_id':        $('#EditOptionSubmit_{$fid}').data('data-optionId'),
+            'option_value':     $('#EditOptionValue_{$fid}').val(),
+            'option_text':      $('#EditOptionText_{$fid}').val(),
+            'option_cost':      $('#EditOptionCost_{$fid}').val(),
+            'option_default':   $('#EditOptionDefault_{$fid}').is(':checked')
         };
 
         // Submit new field data - expect field new ID back
@@ -415,27 +430,79 @@ jQuery(document).ready(function($) {
             dataType:   'text'
         })
         .done( function(optionHtml) {
+            
             if (optionHtml == '') {
-                flashElement('FieldDialogError_{$fid}');
+                flashElement('EditOptionDialogError_{$fid}');
             } else {
-                var fieldId_{$fid} = $('#NewOptionSubmit_{$fid}').data('data-fieldId');      
-                $('#PicklistOptions_'+fieldId_{$fid}).append(optionHtml);
-                
-                $("#NewOptionDialog_{$fid}").dialog("close");
-
-                // Need to rebind delete option buttons
-                $('body').off('click', '.DeleteOptionButton_{$fid}', DeleteOptionButton_{$fid});
-                $('body').on('click', '.DeleteOptionButton_{$fid}', DeleteOptionButton_{$fid});
+
+                // If this is a new option
+                if (optionSubmitOption == 'addNewOption') { 
+                    
+                    var fieldId_{$fid} = $('#EditOptionSubmit_{$fid}').data('data-fieldId');      
+                    $('#PicklistOptions_'+fieldId_{$fid}).append(optionHtml);
+                    
+                    $("#EditOptionDialog_{$fid}").dialog("close");
+    
+                    // Need to rebind delete option buttons
+                    $('body').off('click', '.DeleteOptionButton_{$fid}', deleteOptionButton_{$fid});
+                    $('body').on('click', '.DeleteOptionButton_{$fid}', deleteOptionButton_{$fid});
+
+                // Otherwise this is an option update
+                } else {
+
+                    var optionId = formData.option_id;
+                    var optionDefault = (formData.option_default == true ? 'Yes':'No');
+                    
+                    // Update the displayed values
+                    $('#EditOptionValue_' + optionId).html(formData.option_value);
+                    $('#EditOptionText_' + optionId).html(formData.option_text);
+                    $('#EditOptionCost_' + optionId).html('$'+Number(formData.option_cost).toFixed(2));                    
+                    $('#EditOptionDefault_' + optionId).html(formData.option_default ? 'Yes':'No');
+
+                    // Update hidden values used for editing
+                    $('#EditOptionButton_' + optionId).attr('data-optionValue', formData.option_value);
+                    $('#EditOptionButton_' + optionId).attr('data-optionText', formData.option_text);
+                    $('#EditOptionButton_' + optionId).attr('data-optionCost', formData.option_cost);
+                    $('#EditOptionButton_' + optionId).attr('data-default', (formData.default ? 1 : 0));
+                    
+                    
+                }
+                $("#EditOptionDialog_{$fid}").dialog("close");
             }
         });
         
     });
 
+    /*
+     * Edit field 
+     */
+    $('body').on('click', '.EditOptionButton_{$fid}', editOptionButton_{$fid});
+    function editOptionButton_{$fid}(e) {
+
+        var fieldId         = $(this).attr('data-fieldId');
+        var optionId        = $(this).attr('data-optionId');
+        var optionValue     = $(this).attr('data-optionValue');
+        var optionText      = $(this).attr('data-optionText');
+        var optionCost      = $(this).attr('data-optionCost');
+        var optionDefault   = ($(this).attr('data-default') == 1);
+
+        $('#EditOptionSubmit_{$fid}').data('data-optionId', optionId);
+        $('#EditOptionSubmit_{$fid}').data('data-fieldId', fieldId);
+        $('#EditOptionValue_{$fid}').val(optionValue);
+        $('#EditOptionText_{$fid}').val(optionText);
+        $('#EditOptionCost_{$fid}').val(optionCost);
+        $('#EditOptionDefault_{$fid}').prop('checked', optionDefault);
+
+        $('#EditOptionSubmit_{$fid}').html('Update Custom Field Option');
+        $("#EditOptionDialog_{$fid}").dialog("open");
+    }
+
+    
     // Delete
-    $('body').on('click', '.DeleteOptionButton_{$fid}', DeleteOptionButton_{$fid});
-    function DeleteOptionButton_{$fid}(e) {
+    $('body').on('click', '.DeleteOptionButton_{$fid}', deleteOptionButton_{$fid});
+    function deleteOptionButton_{$fid}(e) {
         
-        var optionDeleteId_{$fid} = $(this).attr('data-fieldOptionId');
+        var optionDeleteId_{$fid} = $(this).attr('data-optionId');
 
         // Delete the selected option and remove it from the display
         var formData = {
@@ -453,7 +520,7 @@ jQuery(document).ready(function($) {
             dataType:   'text'
         })
         .done( function(deleted) {
-            $('#FieldOptionRow_' + optionDeleteId_{$fid}).remove();
+            $('#OptionRow_' + optionDeleteId_{$fid}).remove();
         });
         
     };
index 37d9939..69cdd29 100644 (file)
@@ -31,7 +31,7 @@
                                     <option value=""></option>
       {foreach $field.options as $option} 
                                     <option value="{$option.option_value}" {if $option.option_default.value}selected{/if}>
-                                        {$option.option_cost}{if $option.option_cost>0}{$option.option_cost}{/if}&nbsp;&nbsp;{$option.option_text}
+                                        {if $option.option_cost>0}${$option.option_cost|number_format:2}{/if}&nbsp;&nbsp;{$option.option_text}
                                     </option>
       {/foreach}                              
                                 </select>