Most of admin assets dashboard coming up.
authorChuck Scott <cscott@gaslightmedia.com>
Thu, 8 Mar 2018 14:01:06 +0000 (09:01 -0500)
committerChuck Scott <cscott@gaslightmedia.com>
Thu, 8 Mar 2018 14:01:06 +0000 (09:01 -0500)
classes/data/dataFacilities.php
setup/validActions.php
views/admin/assets/index.html

index 982d307..b2b0452 100644 (file)
@@ -121,6 +121,7 @@ class GlmDataAssetsFacilities extends GlmDataAbstract
                 'field' => 'name',
                 'type' => 'text',
                 'required' => true,
+                'unique' => true,
                 'use' => 'a'
             ),
 
@@ -142,10 +143,10 @@ class GlmDataAssetsFacilities extends GlmDataAbstract
             'city' => array (
                 'field' => 'city',
                 'type' => 'pointer',
-                'p_table' => GLM_MEMBERS_PLUGIN_DB_PREFIX . 'cities',
-                'p_field' => 'name',
-                'p_orderby' => 'name',
-                'p_blank' => true,
+                    'p_table' => GLM_MEMBERS_PLUGIN_DB_PREFIX . 'cities',
+                    'p_field' => 'name',
+                    'p_orderby' => 'name',
+                    'p_blank' => true,
                 'force_list' => true,
                 'use' => 'a'
             ),
@@ -154,9 +155,8 @@ class GlmDataAssetsFacilities extends GlmDataAbstract
             'state' => array (
                 'field' => 'state',
                 'type' => 'list',
-                'list' => $this->config['states'],
-                'default' => 'MI',
-                'force_list' => true,
+                    'list' => $this->config['states'],
+                'default'  => $this->config['settings']['default_state'],
                 'use' => 'a'
             ),
 
@@ -171,12 +171,12 @@ class GlmDataAssetsFacilities extends GlmDataAbstract
             'country' => array (
                 'field' => 'country',
                 'type' => 'list',
-                'list' => $this->config['countries'],
+                    'list' => $this->config['countries'],
                 'default' => 'US',
-                'force_list' => true,
                 'use' => 'a'
             ),
 
+/*
             // Latitude
             'lat' => array(
                 'field'    => 'lat',
@@ -192,7 +192,7 @@ class GlmDataAssetsFacilities extends GlmDataAbstract
                 'default'  => $this->config['settings']['maps_default_lon'],
                 'use'      => 'a'
             ),
-
+*/
             // Phone
             'phone' => array (
                 'field' => 'phone',
index cecc3c9..a518251 100644 (file)
@@ -59,6 +59,9 @@
 
 $glmMembersAssetsAddOnValidActions = array(
     'adminActions' => array(
+        'ajax' => array(
+            'assetManagement' => GLM_MEMBERS_ASSETS_PLUGIN_SLUG
+        ),
         'assets' => array(
             'index' => GLM_MEMBERS_ASSETS_PLUGIN_SLUG
         ),
index 9652e34..a6d3f23 100644 (file)
         .assets-colum-title {
             font-weight: bold;
         }
-        
+        .assets-dialog-box {
+            display: grid;
+            grid-gap: 5px 5px;
+            grid-template-columns: 8rem auto;
+        }
+        .assets-facility-descr {
+            width: 30em !important;
+        }
+        .assets-facility-input-prompt {
+            padding: 5px 0 0 5px;
+        }       
+        .assetsFacilityInputMsg {
+            color: red;
+        }
     </style>
     
 
     <div class="glm-admin-table">
         <div class="glm-admin-table-inner">
 
-            <a href="#add">Add a Facility</a>
+            <a id="glm-assets-add-facility-button" class="button">Add a Facility</a>
             
     
 {if $haveFacilities}
     
-            <div class="assets-admin-content">
+            <div id="assets-facilities-container" class="assets-admin-content">
 
     {foreach $facilities as $facility}                
 
-                <div style="grid-column: 1 / span 7;" class="facility-name">(Facility Name)</div>
-
-                    <div style="grid-column: 2 / span 6;"><a href="#edit">Edit</a> <a href="#edit">Delete</a></div>
-                    
-                    <div style="grid-column: 2 / span 3;" class="assets-colum-title">Asset Type</div>
-                    <div class="assets-colum-title">Name</div>
-                    <div class="assets-colum-title">Number</div>
-                    <div class="assets-colum-title">Quantity</div>
+                <div style="grid-column: 1 / span 7;" class="facility_{$facility.id} facility-name">{$facility.name}</div>
+                
+                {* First indent here *}
+                
+                <div style="grid-column: 2 / span 6;" class="facility_{$facility.id}"><a href="#edit">Edit</a> <a href="#edit">Delete</a></div>
+                
+                <div style="grid-column: 2 / span 3;" class="assets-colum-title">Asset Type</div>
+                <div class="assets-colum-title">Name</div>
+                <div class="assets-colum-title">Number</div>
+                <div class="assets-colum-title">Quantity</div>
     
       {foreach $facility.assets as $asset}   
         
-                    <div style="grid-column: 2 / span 3;" >Room</div>
-                    <div>Ballroom</div>
-                    <div>101</div>
-                    <div>1</div>
-                
-                        <div style="grid-column: 3 / span 5;"><a href="#edit">Edit</a> <a href="#edit">Delete</a></div>
+                <div style="grid-column: 2 / span 3;" >Room</div>
+                <div>Ballroom</div>
+                <div>101</div>
+                <div>1</div>
+
+                {* Second indent here *}
                 
-                        <div style="grid-column: 3 / span 2;" class="assets-colum-title">Start</div>
-                        <div class="assets-colum-title">End</div>
-                        <div class="assets-colum-title">Account</div>
-                        <div class="assets-colum-title">Quantity</div>
+                <div style="grid-column: 3 / span 5;"><a href="#edit">Edit</a> <a href="#edit">Delete</a></div>
+        
+                <div style="grid-column: 3 / span 2;" class="assets-colum-title">Start</div>
+                <div class="assets-colum-title">End</div>
+                <div class="assets-colum-title">Account</div>
+                <div class="assets-colum-title">Quantity</div>
     
         {foreach $asset.assignments as $assignment}                        
-                        <div style="grid-column: 3 / span 2" >1/1/2018 07:00 AM</div>
-                        <div>1/1/2018 05:00 PM</div>
-                        <div>Gaslight Media</div>
-                        <div>1</div>
+
+                <div style="grid-column: 3 / span 2" >1/1/2018 07:00 AM</div>
+                <div>1/1/2018 05:00 PM</div>
+                <div>Gaslight Media</div>
+                <div>1</div>
+
+                {* Third indent here *}    
+                <div style="grid-column: 4 / span 4;"><a href="#edit">Edit</a> <a href="#edit">Delete</a></div>
+                
+        {/foreach} {* assignments *}
     
-                            <div style="grid-column: 4 / span 4;"><a href="#edit">Edit</a> <a href="#edit">Delete</a></div>
-        {/foreach}
+      {/foreach} {* assets *}
+      
+    {/foreach} {* facilities *}
     
-      {/foreach}
-    {/foreach}
-{else}
-        <div>No Facilities Listed</div>
-{/if}
+{else} {* if haveFacilities *}
+
+            <div id="glm-assets-no-facilities">No Facilities Listed</div>
+
+{/if} {* if haveFacilities *}
     
+            </div> {* assets-admin-content *}
+          
+       </div> {* glm-admin-table-inner *}
     
+    </div> {* glm-admin-table *}
     
+    {* New Facility Dialog Box *}
+    <div id="assetsFacilityDialog" class="glm-dialog-box" title="Enter a New Facility">
+        <form id="assetsFacilityForm" enctype="multipart/form-data">
+            <input type="hidden" name="glm_action" value="assetManagement">
     
+            <div class="assets-dialog-box">
+                
+                <div class="glm-required assets-facility-input-prompt">Name:</div>
+                <div><input type="text" name="name" class="glm-form-text-intput glm-form-text-input-medium" value="" required><span id="assetsFacilityInputMsg_name" class="assetsFacilityInputMsg"></span></div>
+                
+                <div class="assets-facility-input-prompt">Description:</div>
+                <div><textarea name="descr" class="glm-form-textarea assets-facility-descr" required></textarea></div>
+                
+                <div class="assets-facility-input-prompt">Address:</div>
+                <div><input type="text" name="address" class="glm-form-text-intput glm-form-text-input-medium" value="" required></div>
+                
+                <div class="assets-facility-input-prompt">City:</div>
+                <div>
+                    <select name="city" required>
+                        <option value=""></option>
+    {foreach $cities as $city}
+                        <option value="{$city.id}">{$city.name}</option>
+    {/foreach}                    
+                    </select>
+                </div>
+
+                <div class="assets-facility-input-prompt">State:</div>
+                <div>
+                    <select name="state" required>
+                        <option value=""></option>
+    {foreach from=$states item="stateName" key="stateKey"}
+                        <option value="{$stateKey}">{$stateName}</option>
+    {/foreach}                    
+                    </select>
+                </div>
+
+                <div class="assets-facility-input-prompt">ZIP / Postal Code:</div>
+                <div><input type="text" name="zip" class="glm-form-text-intput glm-form-text-input-veryshort" value="" required></div>
+                
+                <div class="assets-facility-input-prompt">Country:</div>
+                <div>
+                    <select name="country" required>
+                        <option value=""></option>
+    {foreach from=$countries item="countryName" key="countryKey"}
+                        <option value="{$countryKey}">{$countryName}</option>
+    {/foreach}                    
+                    </select>
+                </div>
+
+                <!-- LAT / LON can go here if needed -->
+                
+                <div class="assets-facility-input-prompt">Phone:</div>
+                <div><input type="text" name="phone" class="glm-form-text-intput" value="" required></div>
+
+                <div class="assets-facility-input-prompt">URL:</div>
+                <div><input type="text" name="url" class="glm-form-text-intput glm-form-text-input-medium" value="" placeholder="http://somefacilityname.com" required></div>
+
+                <div class="assets-facility-input-prompt">E-Mail Address:</div>
+                <div><input type="text" name="email" class="glm-form-text-intput glm-form-text-input-medium" value="" required></div>
+
+                <div class="assets-facility-input-prompt">Facility Map:</div>
+                <div>
+                    <p>
+                        Facility map file must be a standard image file such as JPG, PNG, or GIF and
+                        of adequate size and resolution. Images larger than 1200 pixels wide may be 
+                        too large for the page.
+                    </p>
+                    <a href="image url here" target="facilityMap">(image url here) </a><br>
+                    <input type="checkbox" name="logo_delete"> Delete Image<br>
+                    <b>New image:</b> <input id="assetFacilityMap" type="file" name="facility_map_new">
+                </div>
+
+                <div>&nbsp;</div><div>&nbsp;</div>
+
+                <div><span class="glm-required">*</span> Required</div>
+                <div>
+                    <a id="assetsFacilitySubmit" class="button button-primary">Add New Facility</a>
+                    <a id="assetsFacilityCancel" class="button button-primary">Cancel</a>
+                </div>
+                
+                </div> {* assetsFacilityDialog *}
+            
+        
+        </form>
+    </div>
     
+    <div id="assetsFailityTemplate" class="glm-hidden">
+        <div style="grid-column: 1 / span 7;" class="facility-name facility_{* facility_id *}">{* facility_name *}</div>
+        <div style="grid-column: 2 / span 6;" class="facility_{* facility_id *}"><a href="#edit" data-id="{* facility_id *}">Edit</a> <a href="#edit" data-id="{* facility_id *}">Delete</a></div>
+    </div>
     
-<!--     
-            <table class="wp-list-table striped glm-admin-table-single">
-                <thead>
-                    <tr>
-                        <th class="glm-file-library-table-left">Original Name</th>
-                        <th class="glm-file-library-table-left">Stored File Name</th>
-                        <th class="glm-file-library-table-left">Title</th>
-                        <th class="glm-file-library-table-left">Last Access</th>
-                    </tr>
-                </thead>
-                <tbody id="AfterNewFiles">
-                    <tr class="glm-NewFileHidden glm-fileLibraryItemHidden" style="background-color: #fff;"><td colspan="4">&nbsp;</td></tr>
-                    <tr class="glm-NewFileHidden glm-fileLibraryItemHidden" style="background-color: #fff;"><th colspan="4" style="color: gray;">&nbsp;&nbsp;&nbsp;&nbsp;Previous Uploads</th></tr>
-                </tbody>            
-    {if $haveFiles}
-        {assign var="i" value="0"}
-        {foreach $files as $f}
-                <tbody id="fileContainer_{$f.id}">
-                    <tr id="filenameLine_{$f.id}" class="glm-file-line glm-edit-form glm-file-{$f.id}{if $i++ is odd by 1} {/if}" data-file="{$f.id}">
-                        <td class="glm-file-library-table-left">
-                            {$f.name}
-                        </td>
-                        <td class="glm-file-library-table-left">
-                            {$f.file_name}
-                        </td>
-                        <td id="fileTitle_{$f.id}" class="glm-file-library-table-left">
-                            {$f.title}
-                        </td>
-                        <td class="glm-file-library-table-left">
-                            {$f.last_access_time.datetime}
-                        </td>
-                    </tr>
-                    <tr id="fileLinks_{$f.id}" class="glm-hidden glm-file-links"">
-                        <td colspan="5" style="padding: .8rem; background-color: #fff;>
-                            <span class="file-edit-link">
-                                <a href="" class="glm-file-library-copy" data-file="{$f.id}" data-link="{$f.link_url}">Copy File URL</a> |
-                            </span>
-                            <span class="file-edit-link">
-                                <a class="glm-edit" href="#" data-file="{$f.id}">Edit File</a> |
-                            </span>
-                            <span>
-                                <a class="file-download-link" data-file="{$f.id}" href="{$ajaxUrl}?action=glm_members_admin_ajax&glm_action=fileLibraryDownload&fileId={$f.id}">Download File</a> |
-                            </span>
-                            <span>
-                                <a class="delete-file" href="#" data-file="{$f.id}">Delete File</a> 
-                            </span>
-                            <span id="FileCopied_{$f.id}" class="glm-notice" style="display: none;">&nbsp;&nbsp;File URL copied to your clipboard.</span>
-                            <span id="FileDeleted_{$f.id}" class="glm-notice" style="display: none;">&nbsp;&nbsp;File Deleted!</span>
-                        </td>
-                    </tr>
-                    <tr class="glm-edit-form glm-edit-form-{$f.id}{if $f@iteration is div by 2} alternate{/if}" style="display:none; background-color: #fff;">
-                        <td colspan="5" style="border: 1px #ccc solid;">
-                            <div class="glm-row" style="margin-bottom: 0px !important; margin-top: .5rem;">
-                                <div class="glm-columns glm-small-6">
-                                    <label>File Title: </label><br>
-                                    <input id="InputTitle_{$f.id}" class="glm-form-text-input-medium" type="text" name="title" value="{$f.title}"><br>
-                                </div>
-                                <div class="glm-columns glm-small-5">
-                                    <label>Description: </label><br> 
-                                    <textarea id="InputDescr_{$f.id}" class="glm-form-text-input-medium" name="descr">{$f.descr}</textarea>
-                                </div>
-                            </div>
-                            <div class="glm-row">
-                                <div class="glm-columns glm-small-7">
-                                    <button class="glm-cancel button button-secondary" data-file="{$f.id}">Cancel</button>
-                                    <button class="glm-update button button-secondary" data-file="{$f.id}">Update</button>
-                                </div>
-                            </div>
-                        </td>
-                    </tr>
-                </tbody>
-        {/foreach}
-    {else}
-                    <tr class="alternate"><td colspan="4">(no files listed)</td></tr>
-    {/if}
-                </tbody>
-          </table>
-           
- -->           
-       </div>
-   </div>
-</div>
 
 
 
 jQuery(document).ready(function($){
 
 
-    // Copy an element to the clipboard
-    function copyToClipboard(text) {
-        var $temp = $("<input>");
-        $("body").append($temp);
-        $temp.val(text).select();
-        document.execCommand("copy");
-        $temp.remove();
+    // Facility dialog box
+    $('#assetsFacilityDialog').dialog({
+        autoOpen: false,
+        width: 600,
+        minWidth: 300,
+        dialogClass: 'glm-dialog-no-close'
+    });
+
+    // Add a facility
+    $('#glm-assets-add-facility-button').on('click', function() {
+        $('#assetsFacilityDialog').dialog('open');
+        $('#assetsFacilityForm')[0].reset();
+    })
+    
+    // Hide "No facilities"
+    function hideNoFacilities() {
+        $('#glm-assets-no-facilities').hide();
     }
+    
+    // Cancel facility dialog box
+    $('#assetsFacilityCancel').on('click', function() {
+        $('#assetsFacilityDialog').dialog('close');
+    })
+    
+    // Save facility data
+    $('#assetsFacilitySubmit').on('click', function(e){
+
+//        var facilityData = $('#assetsFacilityForm').serializeArray();
+        var facilityData = new FormData();
+        facilityData.append('option', 'addNewFacility');
+        facilityData.append('facility_map_new', $('#assetFacilityMap')[0].files[0]);
+        var formFields = $('#assetsFacilityForm').serializeArray();
+        for (var i = 0; i < formFields.length; i++) {
+            facilityData.append(formFields[i].name, formFields[i].value);
+        }
+        
+        $.ajax({
+            context: this,
+            type: 'POST',
+            url: '{$ajaxUrl}?action=glm_members_admin_ajax',
+            data : facilityData,
+            processData: false,
+            contentType: false,
+        }).done(function(msg){
+alert(msg);
+            // Get response message
+            var response = JSON.parse(msg);
+
+            // Clear any submission error messages
+            $('.assetsFacilityInputMsg').html('');
+
+            // If there was a submission problem
+            if (!response.status) {
+
+                // For each input field
+                for (var key in response.fieldFail) {
+
+                    // If this field was a problem
+                    if (response.fieldFail[key]) {
 
-    $('body').on('click', '.glm-file-library-copy', function(e) {
+                        // Put a highlighted message under this field.
+                        $('#assetsFacilityInput_' + key).addClass('assets-facility-input-fail');
+                        $('#assetsFacilityInputMsg_' + key).html('<br>' + response.fieldFail[key]);
+
+                    }
+                }
+                alert('Facility not saved. Please check the indicated fields.');
+            } else {
+                $('#assetsFacilityDialog').dialog('close');
+                hideNoFacilities();
+                var facilityTemplate = templateParse($('#assetsFailityTemplate').html(), 'facility_', response.fieldStore);
+                $('#assets-facilities-container').prepend(facilityTemplate);
+                
+                
+            }
+
+        function templateParse(template, prefix, data) {
+alert(data.name);            
+            for (var key in data) {
+alert(data[key]);                
+                template = template.replace('{* ' + prefix + key + ' *}', data[key]);
+            }
+            return template;            
+        }
+            
+        }).fail(function(){
+            alert('Unable to store this facility at this time. Please try again.');            
+        });
+
+/*
         e.preventDefault();
-        copyToClipboard($(this).attr('data-link'));
-        var fileId = $(this).attr('data-file');
-        lastFileTouched(fileId);
-        flashNotice($('#FileCopied_' + fileId));
-        return false;
+        var fileId = $(this).data('file');
+        
+        // Get possible custom field data
+        var fileFormData = $('#glm-file-form-' + fileId).serialize();
+        console.log(fileFormData);
+
+        var fileTitle = $('#InputTitle_' + fileId).val().trim();
+        var fileDescr = $('#InputDescr_' + fileId).val().trim();
+
+        $.ajax({
+            context: this,
+            type: 'POST',
+            url: '{$ajaxUrl}?action=glm_members_admin_ajax',
+            dataType: 'text',
+            data: {
+                glm_action: 'fileLibraryUpdate',
+                fileId: fileId,
+                title: fileTitle,
+                descr: fileDescr
+            }
+        }).done(function(){
+            $('.glm-edit-form-' + $(this).data('file')).hide();
+            $('.glm-file-' + $(this).data('file')).show();
+            $('#fileTitle_' + fileId).text(fileTitle);
+            clearFileLinks();
+        }).fail(function(msg){
+            alert('Unable to update file: ' + msg);            
+        });
+*/        
     });
     
+
+/*
+    
+    
     $('.glm-edit').live('click', function(e){
         e.preventDefault();
         fileLinksEditSelected();
@@ -200,11 +342,6 @@ jQuery(document).ready(function($){
         $('.glm-file-' + $(this).data('file')).show();
     });
 
-    $('.file-download-link').live('click', function(e) {
-        var fileId = $(this).data('file');
-        lastFileTouched(fileId);
-    });
-    
     // File Line Hover Action
     var fileEditFlag = false;
     var fileHoverId = false;    
@@ -299,6 +436,11 @@ jQuery(document).ready(function($){
         $('.glm-file-line').removeClass('last-file-touched');
         $('#filenameLine_' + fileId).addClass('last-file-touched file-been-touched');
     }
+*/
+
+    function flashNotice(notice) {
+        notice.fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500).fadeIn(500).fadeOut(500);
+    }
 
 });
 </script>