public function modelAction ($actionData = false)
{
-ini_set('log_errors_max_len', 20000);
-trigger_error(print_r($_REQUEST,1),E_USER_NOTICE);
-
require_once GLM_MEMBERS_ASSETS_PLUGIN_CLASS_PATH.'/data/dataFacilities.php';
$Facilities = new GlmDataAssetsFacilities($this->wpdb, $this->config);
die('No option specified.');
}
+trigger_error("Option = ".$_REQUEST['option'],E_USER_NOTICE);
+
switch($_REQUEST['option']) {
+ case 'newFacility':
+
+ $facility = $Facilities->newEntry();
+
+ $view = 'facilityForm';
+
+ $templateData = array(
+ 'status' => '0',
+ 'facility' => $facility['fieldData']
+ );
+
+ break;
+
+ case 'editFacility':
+
+ $facilityId = 0;
+ if (isset($_REQUEST) && isset($_REQUEST['id']) ) {
+ $facilityId = $_REQUEST['id'] + 0;
+ }
+
+ if ($facilityId > 0) {
+ $facility = $Facilities->editEntry($facilityId);
+//echo " <pre>".print_r($facility,1)."</pre>";
+//die();
+ $view = 'facilityForm';
+
+ $templateData = array(
+ 'status' => '0',
+ 'facility' => $facility['fieldData']
+ );
+
+ } else {
+ die("2Facility not found!");
+ }
+
+ break;
+
case 'addNewFacility':
$newFacility = $Facilities->insertEntry();
+ $newFacilityAdded = true;
if (!is_array($newFacility) || trim($newFacility['fieldData']['id']) == '') {
- $newFacility['status'] = 0;
+
+ $view = 'facilityForm';
+
+ // New facility was not added so we need to redisplay the form.
+ $templateData = array(
+ 'status' => 1,
+ 'cities' => $cities,
+ 'states' => $this->config['states'],
+ 'countries' => $this->config['countries']
+ );
+
}
- $response = json_encode($newFacility, JSON_FORCE_OBJECT);
- die($response);
+ $view = 'facilityLine';
+
+ // New facility was not added so we need to redisplay the form.
+ $templateData = array(
+ 'status' => '0',
+ 'facility' => $newFacility
+ );
break;
die('No valid option provided');
break;
}
-die('done');
+
+ $templateData['$glmPluginMediaUrl'] = GLM_MEMBERS_PLUGIN_MEDIA_URL;
+ $html = $this->generateHTML($templateData, 'admin/assets/'.$view.'.html');
+ die($html);
die('Nothing Here');
}
+ /**
+ * Merge template and data to produce HTML
+ *
+ * Checks the theme's view directories and the view directories for
+ * this plugin for a matching view file.
+ *
+ * Note that $view needs to have the proper view directory path
+ * includes. (i.e. "/views/front/registrations/summary.html")
+ *
+ * $view may also be a template as a string if $viewIsString is true.
+ *
+ * @param $data array Array of data to merge with the template
+ * @param $view string Name of view file (see above))
+ * @param $viewIsString boolean If true, $view is a string containing the view.
+ *
+ * @access public
+ * @return void
+ */
+ function generateHTML($data, $view, $viewIsString = false)
+ {
+
+ // Load Smarty Template support
+ $smarty = new smartyTemplateSupport();
+
+ // Add standard parameters
+ require GLM_MEMBERS_PLUGIN_SETUP_PATH.'/standardTemplateParams.php';
+
+ // Add data from model to Smarty template
+ if (is_array($data) && count($data) > 0) {
+ foreach ($data as $k => $d) {
+ $smarty->templateAssign($k, $d);
+ }
+ }
+
+ // If is supplied as a string
+ if ($viewIsString) {
+
+ $out = $smarty->template->fetch('eval:'.$view);
+
+ // Otherwise $view is a file name
+ } else {
+
+ // Get the specified view file - check theme first
+ $viewPath = GLM_MEMBERS_PLUGIN_CURRENT_THEME_DIR."/views";
+ $viewPath2 = GLM_MEMBERS_ASSETS_PLUGIN_PATH . "/views"; // Save default
+
+ // If the view is not found in the theme, fall back to views in the plugin
+ if (!is_file($viewPath.'/'.$view)) {
+
+ // Next try the plugin/add-on
+ $viewPath = GLM_MEMBERS_REGISTRATIONS_PLUGIN_PATH . "/views";
+
+ if (!is_file($viewPath.'/'.$view)) {
+
+ if (GLM_MEMBERS_PLUGIN_FRONT_DEBUG) {
+ trigger_error("Bad or missing view file when generating checkout HTML: $viewPath/$view", E_USER_NOTICE);
+ }
+
+ }
+
+ }
+
+ // Update the Smarty view path
+ $smarty->template->setTemplateDir($viewPath);
+
+ // If the view path doesn't match the default, add the default (using theme view)
+ if ($viewPath2 != $viewPath) {
+ $smarty->template->addTemplateDir($viewPath2);
+ }
+
+ // Generate output from model data and view
+ $out = $smarty->template->fetch($view);
+
+ }
+
+ return $out;
+
+ }
+
+
+
}
<a id="glm-assets-add-facility-button" class="button">Add a Facility</a>
+ <div id="assetsFacilitiesContainer" class="assets-admin-content">
{if $haveFacilities}
-
- <div id="assets-facilities-container" class="assets-admin-content">
{foreach $facilities as $facility}
- <div style="grid-column: 1 / span 7;" class="facility_{$facility.id} facility-name">{$facility.name}</div>
+ <div style="grid-column: 1 / span 7;" id="facility_{$facility.id}" class="facility-name" data-id="{$facility.id}">{$facility.name} {$facility.id}</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 6;" id="facilityEditLinks_{$facility.id}" class="glm-hidden facility_{$facility.id}">
+ <a class="facility-edit button glm-button-small" data-id="{$facility.id}">Edit</a>
+ <a class="facility-delete button glm-button-small" data-id="{$facility.id}">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: 2 / span 3;" class="assets-colum-title facility_{$facility.id} glm-hidden">Asset Type</div>
+ <div class="assets-colum-title facility_{$facility.id} glm-hidden">Name</div>
+ <div class="assets-colum-title facility_{$facility.id} glm-hidden">Number</div>
+ <div class="assets-colum-title facility_{$facility.id} glm-hidden">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: 2 / span 3;" class="facility_{$facility.id} glm-hidden">Room</div>
+ <div class="facility_{$facility.id} glm-hidden">Ballroom</div>
+ <div class="facility_{$facility.id} glm-hidden">101</div>
+ <div class="facility_{$facility.id} glm-hidden">1</div>
{* Second indent here *}
- <div style="grid-column: 3 / span 5;"><a href="#edit">Edit</a> <a href="#edit">Delete</a></div>
+ <div style="grid-column: 3 / span 5;" class="facility_{$facility.id} glm-hidden"><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>
+ <div style="grid-column: 3 / span 2;" class="assets-colum-title facility_{$facility.id} glm-hidden">Start</div>
+ <div class="assets-colum-title facility_{$facility.id} glm-hidden">End</div>
+ <div class="assets-colum-title facility_{$facility.id} glm-hidden">Account</div>
+ <div class="assets-colum-title facility_{$facility.id} glm-hidden">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" class="facility_{$facility.id} glm-hidden">1/1/2018 07:00 AM</div>
+ <div class="facility_{$facility.id} glm-hidden">1/1/2018 05:00 PM</div>
+ <div class="facility_{$facility.id} glm-hidden">Gaslight Media</div>
+ <div> class="facility_{$facility.id} glm-hidden"1</div>
{* Third indent here *}
- <div style="grid-column: 4 / span 4;"><a href="#edit">Edit</a> <a href="#edit">Delete</a></div>
+ <div style="grid-column: 4 / span 4;" class="facility_{$facility.id} glm-hidden"><a href="#edit">Edit</a> <a href="#edit">Delete</a></div>
{/foreach} {* assignments *}
{else} {* if haveFacilities *}
- <div id="glm-assets-no-facilities">No Facilities Listed</div>
+ <div style="grid-column: 1 / span 7;" id="glmAssetNoFacilities">No Facilities Listed</div>
{/if} {* if haveFacilities *}
+
+ </div> {* assetsFacilitiesContainer *}
- </div> {* assets-admin-content *}
-
- </div> {* glm-admin-table-inner *}
-
- </div> {* glm-admin-table *}
+ </div> {* assets-admin-inner *}
- {* 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> {* glm-admin-table-inner *}
- <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> </div><div> </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> {* glm-admin-table *}
<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>
-
+ <div id="assetsDialog" class="glm-dialog-box">
+ </div>
+
<script>
jQuery(document).ready(function($){
+ // File Line Hover Action
+ var facilityEditFlag = false;
+ var facilityHoverId = false;
+ $('.facility-name').live( 'mouseenter', function() {
+ if (facilityEditFlag) {
+ return;
+ }
+ if (facilityHoverId) {
+ $('.facility_' + facilityHoverId).addClass('glm-hidden');
+ }
+ facilityHoverId = $(this).attr('data-id');
+ $('.facility_' + facilityHoverId).removeClass('glm-hidden');
+ });
+
+ function fileLinksEditSelected() {
+ $('#facilityLinks_' + facilityHoverId).addClass('glm-hidden');
+ fileEditFlag = true;
+ }
+
+ function clearFacilityExpand() {
+ facilityLinksEditSelected();
+ facilityEditFlag = false;
+ facilityHoverId = false;
+ }
+
+
+
+
+
+
// Facility dialog box
- $('#assetsFacilityDialog').dialog({
+ $('#assetsDialog').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();
+ $('#glmAssetNoFacilities').hide();
}
-
+
// Cancel facility dialog box
- $('#assetsFacilityCancel').on('click', function() {
- $('#assetsFacilityDialog').dialog('close');
- })
+ $('#assetsDialogCancel').live('click', function() {
+ $('#assetsDialog').dialog('close');
+ facilityEditFlag = false;
+ });
- // 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);
- }
-
+ // Add a facility
+ $('#glm-assets-add-facility-button').on('click', function(event) {
$.ajax({
- context: this,
- type: 'POST',
- url: '{$ajaxUrl}?action=glm_members_admin_ajax',
- data : facilityData,
+ url: '{$ajaxUrl}?action=glm_members_admin_ajax&glm_action=assetManagement&option=newFacility',
+ type: $(this).attr("method"),
+ dataType: 'html',
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]) {
-
- // 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);
-
-
+ success: function (data, status)
+ {
+ var status = data.charAt(0);
+ $('#assetsDialog').html(data.substring(1));
+ $('#assetsDialog').dialog( "option", "title", "Add a new Facility" );
+ $('#assetsDialog').dialog('open');
+ },
+ error: function (xhr, desc, err)
+ {
+ alert("Sorry, we were unable to talk to our systems at the moment. Please try again.");
}
-
- 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();
- 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();
- $('.glm-edit-form-' + $(this).data('file')).show();
- var fileId = $(this).data('file');
- lastFileTouched(fileId);
- });
-
- $('.glm-cancel').live('click', function(e){
- e.preventDefault();
- clearFileLinks();
- $('.glm-edit-form-' + $(this).data('file')).hide();
- $('.glm-file-' + $(this).data('file')).show();
- });
-
- // File Line Hover Action
- var fileEditFlag = false;
- var fileHoverId = false;
- $('.glm-file-line').live( 'mouseenter', function() {
- if (fileEditFlag) {
- return;
- }
- fileHoverId = $(this).attr('data-file');
- $('.glm-file-links').addClass('glm-hidden');
- $('#fileLinks_' + fileHoverId).removeClass('glm-hidden');
+ });
});
- function fileLinksEditSelected() {
- $('#fileLinks_' + fileHoverId).addClass('glm-hidden');
- fileEditFlag = true;
- }
- function clearFileLinks() {
- fileLinksEditSelected();
- fileEditFlag = false;
- fileHoverId = false;
- }
- $('.glm-admin-table-inner').mouseleave( function() {
- $('#fileLinks_' + fileHoverId).addClass('glm-hidden');
- })
- // Delete file
- $('.delete-file').live('click', function(e){
-
- e.preventDefault();
- var fileId = $(this).data('file');
-
- if (confirm('Are you sure you want to delete this file?')) {
- $.ajax({
- context: this,
- url: '{$ajaxUrl}?action=glm_members_admin_ajax',
- data: {
- glm_action: 'fileLibraryDelete',
- fileId: fileId
- }
- }).done(function(msg){
- if (msg == 'File Deleted') {
- $('#fileContainer_' + fileId).fadeOut(1000, function() {
- $('#fileContainer_' + fileId).remove();
- });
- } else {
- alert('Unable to delete: ' + msg);
- }
- }).fail(function(msg){
- alert('Unable to delete this file at this time.');
- });
- }
-
+ // Edit a facility
+ $('.facility-edit').on('click', function(event) {
+ facilityEditFlag = true;
+ $.ajax({
+ url: '{$ajaxUrl}?action=glm_members_admin_ajax&glm_action=assetManagement&option=editFacility&id=' + facilityHoverId,
+ type: $(this).attr("method"),
+ dataType: 'html',
+ processData: false,
+ contentType: false,
+ success: function (data, status)
+ {
+ var status = data.charAt(0);
+ $('#assetsDialog').html(data.substring(1));
+ $('#assetsDialog').dialog( "option", "title", "Edit Facility" );
+ $('#assetsDialog').dialog('open');
+ },
+ error: function (xhr, desc, err)
+ {
+ alert("Sorry, we were unable to talk to our systems at the moment. Please try again.");
+ }
+ });
});
-
- 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);
- }
- $('.glm-update').live('click', function(e){
- e.preventDefault();
- 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();
+ // Submit Facility Form
+ $('#facilityForm').live('submit', function(event) {
+ event.preventDefault();
$.ajax({
- context: this,
- type: 'POST',
- url: '{$ajaxUrl}?action=glm_members_admin_ajax',
- dataType: 'text',
- data: {
- glm_action: 'fileLibraryUpdate',
- fileId: fileId,
- title: fileTitle,
- descr: fileDescr
+ url: '{$ajaxUrl}?action=glm_members_admin_ajax&glm_action=assetManagement&option=addNewFacility',
+ type: $(this).attr("method"),
+ dataType: 'html',
+ data: new FormData(this),
+ processData: false,
+ contentType: false,
+ success: function (data, status)
+ {
+ var status = data.charAt(0);
+ var html = data.substring(1);
+
+ // If all is good add this facility to the top of the list for now
+ if (status == 0) {
+ $('#assetsFacilitiesContainer').prepend(html);
+ $('#assetsDialog').dialog('close');
+ hideNoFacilities();
+ }
+ },
+ error: function (xhr, desc, err)
+ {
+ alert("Sorry, we were unable to talk to our systems at the moment. Please try again.");
}
- }).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);
- });
+ });
});
-
- // highlight last file touched
- function lastFileTouched(fileId) {
- $('.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);
}