From af1166d8ca5b55a5effe80ebb02ec2213589abe6 Mon Sep 17 00:00:00 2001 From: Reinhold Kainhofer <reinhold@kainhofer.com> Date: Tue, 2 Dec 2014 01:58:23 +0100 Subject: [PATCH] Further progress in counter editing in the plugin config -) Implement loading indicator during the AJAX calls -) Give each type of number its own fieldset (and thus its own tab in the plugin config) -) Fix display of system messages generated by ajax call in Joomla 2.x -) Fix JSON output in Joomla 2.x (two Content-Disposition headers generated, which broke parsing of the AJAX response in Chromium) -> Use raw format for joomla and manually send the json content-disposition header -) Fix jQuery in Joomla 2.x --- Makefile | 4 +-- fields/vmordernumbercounters.php | 8 ++--- .../en-GB/en-GB.plg_vmshopper_ordernumber.ini | 4 +++ .../en-GB.plg_vmshopper_ordernumber.sys.ini | 4 +++ ordernumber.php | 30 +++++++++++------- ordernumber.xml | 8 +++-- ordernumber/assets/css/ordernumber.css | 17 +++++++++- ordernumber/assets/images/loading.gif | Bin 0 -> 2211 bytes ordernumber/assets/images/loading.png | Bin 0 -> 18117 bytes ordernumber/assets/js/ordernumber.js | 28 ++++++++++------ 10 files changed, 74 insertions(+), 29 deletions(-) create mode 100644 ordernumber/assets/images/loading.gif create mode 100644 ordernumber/assets/images/loading.png diff --git a/Makefile b/Makefile index 2bc6e55..62feb1f 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ BASE=ordernumber PLUGINTYPE=vmshopper -VERSION=1.90 +VERSION=2.0 -PLUGINFILES=$(BASE).php $(BASE).script.php $(BASE).xml index.html +PLUGINFILES=$(BASE).php $(BASE).script.php $(BASE).xml index.html $(BASE)/ SYSTRANSLATIONS=$(call wildcard,language/*/*.plg_$(PLUGINTYPE)_$(BASE).*sys.ini) NONSYSTRANSLATIONS=${SYSTRANSLATIONS:%.sys.ini=%.ini} diff --git a/fields/vmordernumbercounters.php b/fields/vmordernumbercounters.php index 4897222..2c1dbf1 100644 --- a/fields/vmordernumbercounters.php +++ b/fields/vmordernumbercounters.php @@ -66,20 +66,20 @@ class JFormFieldVmOrdernumberCounters extends JFormField { $pluginpath = '/plugins/vmshopper/ordernumber/ordernumber/'; $doc = JFactory::getDocument()->addStyleSheet(JURI::root(true) . $pluginpath . 'assets/css/ordernumber.css'); $doc->addScript(JURI::root(true).$pluginpath . 'assets/js/ordernumber.js'); + vmJsApi::jQuery(); // Look up the current counters $db = JFactory::getDBO(); $db->setQuery('SELECT `number_format`, `count` FROM `#__virtuemart_shopper_plg_ordernumber` WHERE `number_type`='.$db->quote($this->countertype) . ' ORDER BY `number_format`;' ); $counters = $db->loadObjectList(); // Joomla 2.x uses <li> for the params and float:left on the controls, so we need to add that too - $version = new JVersion(); $float = ""; if (version_compare(JVERSION, '3.0', 'lt')) { $float = "float: left; "; } $html=array(); - $html[] = "<table class=\"vmordernumber-countertable table-striped \" display: inline-table; $float\">"; + $html[] = "<img src='".JURI::root(true).$pluginpath . "assets/images/loading.gif' class='vm-ordernumber-loading' style=\"display: none; position: absolute; top: 2px; left: 0px; z-index: 9999;\"/><table class=\"vmordernumber-countertable table-striped \" style=\"display: inline-table; $float\">"; $html[] = " <tr>"; $html[] = " <th class='counter_format'>".JText::_('PLG_ORDERNUMBER_COUNTERLIST_HEADER_COUNTER')."</th>"; $html[] = " <th class='counter_value'>".JText::_('PLG_ORDERNUMBER_COUNTERLIST_HEADER_VALUE'). "</th>"; @@ -94,11 +94,11 @@ class JFormFieldVmOrdernumberCounters extends JFormField { $html[] = " <tr class='counter_row counter_type_$this->countertype'>"; $html[] = " <td class='counter_format'>" . (string)$displayfmt . "</td>"; $html[] = " <td class='counter_value'>" . (string)$c->count . "</td>"; - $html[] = " <td class='counter_buttons'><img src='" .JURI::root(true).$pluginpath . "assets/images/icon-16-edit.png' class='vmordernumber-counter-editbtn vmordernumber-btn' onClick='ajaxEditCounter(this, $this->countertype, ".json_encode($c->number_format).", $c->count)' /><img src='" . JURI::root(true).$pluginpath . "assets/images/icon-16-delete.png' class='vmordernumber-counter-deletebtn vmordernumber-btn' onClick='ajaxDeleteCounter(this, $this->countertype, ".json_encode($c->number_format).", $c->count)' /></td>"; + $html[] = " <td class='counter_buttons'><div class='ordernumber-ajax-loading'><img src='" .JURI::root(true).$pluginpath . "assets/images/icon-16-edit.png' class='vmordernumber-counter-editbtn vmordernumber-btn' onClick='ajaxEditCounter(this, $this->countertype, ".json_encode($c->number_format).", $c->count)' /></div><div class='ordernumber-ajax-loading'><img src='" . JURI::root(true).$pluginpath . "assets/images/icon-16-delete.png' class='vmordernumber-counter-deletebtn vmordernumber-btn' onClick='ajaxDeleteCounter(this, $this->countertype, ".json_encode($c->number_format).", $c->count)' /></div></td>"; $html[] = " </tr>"; } $html[] = " <tr class='addcounter_row'>"; - $html[] = " <td colspan=3 class='counter_add'><div class='vmordernumber-counter-addbtn vmordernumber-btn' onClick='ajaxAddCounter(this, $this->countertype)'><img src='" . JURI::root(true).$pluginpath . "assets/images/icon-16-new.png' class='vmordernumber-counter-addbtn' />" . JText::_('PLG_ORDERNUMBER_COUNTERLIST_ADD') . "</div></td>"; + $html[] = " <td colspan=3 class='counter_add'><div class='vmordernumber-counter-addbtn vmordernumber-btn' onClick='ajaxAddCounter(this, $this->countertype)'><div class='ordernumber-ajax-loading'><img src='" . JURI::root(true).$pluginpath . "assets/images/icon-16-new.png' class='vmordernumber-counter-addbtn' /></div>" . JText::_('PLG_ORDERNUMBER_COUNTERLIST_ADD') . "</div></td>"; $html[] = " </tr>"; $html[] = "</table>"; return implode("\n", $html); diff --git a/language/en-GB/en-GB.plg_vmshopper_ordernumber.ini b/language/en-GB/en-GB.plg_vmshopper_ordernumber.ini index 37a3f73..b421813 100644 --- a/language/en-GB/en-GB.plg_vmshopper_ordernumber.ini +++ b/language/en-GB/en-GB.plg_vmshopper_ordernumber.ini @@ -51,3 +51,7 @@ PLG_ORDERNUMBER_COUNTERLIST_HEADER_COUNTER="Counter format/name" PLG_ORDERNUMBER_COUNTERLIST_HEADER_VALUE="Counter value" PLG_ORDERNUMBER_COUNTERLIST_ADD="Add new counter" PLG_ORDERNUMBER_COUNTERLIST_EXISTS="Counter '%s' already exists." + +PLG_ORDERNUMBER_FIELDSET_ORDERNUMBER="Order Numbers" +PLG_ORDERNUMBER_FIELDSET_INVOICENUMBER="Invoice Numbers" +PLG_ORDERNUMBER_FIELDSET_CUSTOMERNUMBER="Customer Numbers" diff --git a/language/en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini b/language/en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini index 37a3f73..b421813 100644 --- a/language/en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini +++ b/language/en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini @@ -51,3 +51,7 @@ PLG_ORDERNUMBER_COUNTERLIST_HEADER_COUNTER="Counter format/name" PLG_ORDERNUMBER_COUNTERLIST_HEADER_VALUE="Counter value" PLG_ORDERNUMBER_COUNTERLIST_ADD="Add new counter" PLG_ORDERNUMBER_COUNTERLIST_EXISTS="Counter '%s' already exists." + +PLG_ORDERNUMBER_FIELDSET_ORDERNUMBER="Order Numbers" +PLG_ORDERNUMBER_FIELDSET_INVOICENUMBER="Invoice Numbers" +PLG_ORDERNUMBER_FIELDSET_CUSTOMERNUMBER="Customer Numbers" diff --git a/ordernumber.php b/ordernumber.php index d422692..9270fc6 100644 --- a/ordernumber.php +++ b/ordernumber.php @@ -274,26 +274,26 @@ class plgVmShopperOrdernumber extends vmShopperPlugin { $authorized = ($user->authorise('core.admin','com_virtuemart') or $user->authorise('core.manage','com_virtuemart') or $user->authorise('vm.orders','com_virtuemart')); - $output = array(); - $output['authorized'] = $authorized; + $json = array(); + $json['authorized'] = $authorized; if (!$authorized) return FALSE; $action = vRequest::getCmd('action'); $counter= vRequest::getString('counter'); $nrtype = vRequest::getInt('nrtype'); - $output['action'] = $action; - $output['success'] = 0; // default: unsuccessfull + $json['action'] = $action; + $json['success'] = 0; // default: unsuccessfull switch ($action) { case "deleteCounter": - $output['success'] = $this->_deleteCounter($nrtype, $counter); + $json['success'] = $this->_deleteCounter($nrtype, $counter); break; case "addCounter": $value = vRequest::getInt('value',0); if ($this->_counterExists($nrtype, $counter)) { - $output['error'] = JText::sprintf('PLG_ORDERNUMBER_COUNTERLIST_EXISTS', $counter); - $output['success'] = false; + $json['error'] = JText::sprintf('PLG_ORDERNUMBER_COUNTERLIST_EXISTS', $counter); + $json['success'] = false; } else { - $output['success'] = $this->_addCounter($nrtype, $counter, $value); + $json['success'] = $this->_addCounter($nrtype, $counter, $value); // Return the table row for the new counter in the JSON: $pluginpath = '/plugins/vmshopper/ordernumber/ordernumber/'; $displayfmt = ($counter=="") ? JText::_('PLG_ORDERNUMBER_COUNTERLIST_GLOBAL') : $counter; @@ -303,12 +303,12 @@ class plgVmShopperOrdernumber extends vmShopperPlugin { $html[] = " <td class='counter_value'>" . (string)$value . "</td>"; $html[] = " <td class='counter_buttons'><img src='" .JURI::root(true).$pluginpath . "assets/images/icon-16-edit.png' class='vmordernumber-counter-editbtn vmordernumber-btn' onClick='ajaxEditCounter(this, $nrtype, ".json_encode($counter).", $value)' /><img src='" . JURI::root(true).$pluginpath . "assets/images/icon-16-delete.png' class='vmordernumber-counter-deletebtn vmordernumber-btn' onClick='ajaxDeleteCounter(this, $nrtype, ".json_encode($counter).", $value)' /></td>"; $html[] = "</tr>"; - $output['newrow'] = implode("\n", $html); + $json['newrow'] = implode("\n", $html); } break; case "setCounter": $value = vRequest::getInt('value'); - $output['success'] = $this->_setCounter($nrtype, $counter, $value); + $json['success'] = $this->_setCounter($nrtype, $counter, $value); break; } @@ -319,8 +319,16 @@ class plgVmShopperOrdernumber extends vmShopperPlugin { $previoustype = $document->getType(); $document->setType('html'); $msgrenderer = $document->loadRenderer('message'); - $output['messages'] = $msgrenderer->render('Message'); + $json['messages'] = $msgrenderer->render('Message'); $document->setType($previoustype); + + // WORKAROUND for broken (i.e. duplicate) content-disposition headers in Joomla 2.x: + // We request everything in raw and here send the headers for JSON and return + // the raw output in json format + $document =JFactory::getDocument(); + $document->setMimeEncoding('application/json'); + JResponse::setHeader('Content-Disposition','attachment;filename="ordernumber.json"'); + $output = json_encode($json); } diff --git a/ordernumber.xml b/ordernumber.xml index e702bd7..7caf4ba 100644 --- a/ordernumber.xml +++ b/ordernumber.xml @@ -20,6 +20,7 @@ <filename>index.html</filename> <folder>language</folder> <folder>fields</folder> + <folder>ordernumber</folder> </files> <scriptfile>ordernumber.script.php</scriptfile> <languages folder="language"> @@ -31,7 +32,7 @@ <!-- Joomla 2.5 & 3.0 config --> <config> <fields name="params" addfieldpath="/plugins/vmshopper/ordernumber/fields"> - <fieldset name="basic"> + <fieldset name="ordernumbers" label="PLG_ORDERNUMBER_FIELDSET_ORDERNUMBER"> <field name="order_options" type="spacer" label="PLG_ORDERNUMBER_ORDERNR" /> <field name="customize_order_number" type="radio" default="0" class="btn-group btn-group-yesno" label="PLG_ORDERNUMBER_ORDERNR_CUSTOMIZE" description="PLG_ORDERNUMBER_ORDERNR_CUSTOMIZE_DESC"> <option value="1">JYES</option> @@ -45,14 +46,15 @@ </field> <field name="order_number_allcounters" type="VmOrdernumberCounters" label="PLG_ORDERNUMBER_ORDERNR_ALLCOUNTERS" countertype="0" /> - <field name="password_options" type="spacer" label="PLG_ORDERNUMBER_PASSWD" /> <field name="customize_order_password" type="radio" default="0" class="btn-group btn-group-yesno" label="PLG_ORDERNUMBER_PASSWD_CUSTOMIZE" description="PLG_ORDERNUMBER_PASSWD_CUSTOMIZE_DESC"> <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="order_password_format" type="text" default="p_[randomHex5]" label="PLG_ORDERNUMBER_PASSWD_FMT" description="PLG_ORDERNUMBER_PASSWD_FMT_DESC"/> + </fieldset> + <fieldset name="invoicenumbers" label="PLG_ORDERNUMBER_FIELDSET_INVOICENUMBER"> <field name="invoice_options" type="spacer" label="PLG_ORDERNUMBER_INVOICENR" /> <field name="customize_invoice_number" type="radio" default="0" class="btn-group btn-group-yesno" label="PLG_ORDERNUMBER_INVOICENR_CUSTOMIZE" description="PLG_ORDERNUMBER_INVOICENR_CUSTOMIZE_DESC"> <option value="1">JYES</option> @@ -65,7 +67,9 @@ <option value="0">PLG_ORDERNUMBER_COUNTER_PERFORMAT</option> </field> <field name="invoice_number_allcounters" type="VmOrdernumberCounters" label="PLG_ORDERNUMBER_ORDERNR_ALLCOUNTERS" countertype="1" /> + </fieldset> + <fieldset name="customernumbers" label="PLG_ORDERNUMBER_FIELDSET_CUSTOMERNUMBER"> <field name="customer_options" type="spacer" label="PLG_ORDERNUMBER_CUSTOMERNR" /> <field name="customize_customer_number" type="radio" default="0" class="btn-group btn-group-yesno" label="PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE" description="PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE_DESC"> <option value="1">JYES</option> diff --git a/ordernumber/assets/css/ordernumber.css b/ordernumber/assets/css/ordernumber.css index ca33790..140beb3 100644 --- a/ordernumber/assets/css/ordernumber.css +++ b/ordernumber/assets/css/ordernumber.css @@ -15,4 +15,19 @@ table.vmordernumber-countertable.table-striped tbody > tr:nth-child(odd) > th { col.counter_type, th.counter_type, td.counter_type { display:none; -} \ No newline at end of file +} + +fieldset table.vmordernumber-countertable img { + padding: 0; + margin: 0; +} +div.ordernumber-ajax-loading, div.vmordernumber-counter-addbtn { + display: inline; +} +div.ordernumber-ajax-loading, div.ordernumber-ajax-loading img.vmordernumber-btn { + position: relative; + top: 0; left: 0; +} +div.ordernumber-ajax-loading img { + z-index:0; +} diff --git a/ordernumber/assets/images/loading.gif b/ordernumber/assets/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..94da6d80e05ef96d9d7551013d59c22551c0ae1a GIT binary patch literal 2211 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 literal 0 HcmV?d00001 diff --git a/ordernumber/assets/images/loading.png b/ordernumber/assets/images/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0aa90cbc6fde315828934a2494ec1324b8af56 GIT binary patch literal 18117 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 Bb$<W= literal 0 HcmV?d00001 diff --git a/ordernumber/assets/js/ordernumber.js b/ordernumber/assets/js/ordernumber.js index bee01ca..7ef87b7 100644 --- a/ordernumber/assets/js/ordernumber.js +++ b/ordernumber/assets/js/ordernumber.js @@ -1,11 +1,15 @@ var updateMessages = function(messages, area) { - jQuery( "#system-message-container #system-message div."+area+"-message").remove(); + jQuery( "#system-message-container #system-message ."+area+"-message").remove(); // Extract the messages from the returned string, add the ordernumber-message class (so the next ajax call // can remove them again) and then move the messages to the original message container. // Things are complicated by the fact that no #system-message element exists if no messages were printed so far - var newmessages = jQuery( messages ).find("div.alert").addClass(area+"-message"); + var newmessages = jQuery( messages ).find("div.alert, .message").addClass(area+"-message"); if (!jQuery( "#system-message-container #system-message").length && newmessages.length) { - jQuery( "#system-message-container" ).append( "<div id='system-message'></div>" ); + if (jQuery(newmessages).first().prop("tagName")=="dt") { // Joomla 2.x: + jQuery( "#system-message-container" ).append( "<dl id='system-message'></div>" ); + } else { + jQuery( "#system-message-container" ).append( "<div id='system-message'></div>" ); + } } newmessages.appendTo( "#system-message-container #system-message"); } @@ -38,11 +42,12 @@ var ajaxEditCounter = function (btn, nrtype, ctr, value) { msgprefix = "You entered an invalid value for the counter.\n\n"; } if (value != null) { + var loading = jQuery("img.vm-ordernumber-loading").first().clone().insertAfter(btn).show(); jQuery.ajax({ type: "POST", cache: false, dataType: "text", // Read text, but interpret as JSON later in the done method (prevents a warning!) - url: "index.php?option=com_virtuemart&view=plugin&type=vmshopper&name=ordernumber&action=setCounter&format=json", + url: "index.php?option=com_virtuemart&view=plugin&type=vmshopper&name=ordernumber&action=setCounter&format=raw", data: { nrtype: counter.type, counter: counter.counter, value: value }, success: function( data ) { var json = data ? jQuery.parseJSON(data) : null; @@ -53,7 +58,8 @@ var ajaxEditCounter = function (btn, nrtype, ctr, value) { alert ("Failed modifying counter "+counter.counter); } }, - error: function() { alert ("ERROR: Failed modifying counter "+counter.counter); } + error: function() { alert ("ERROR: Failed modifying counter "+counter.counter); }, + complete: function() { jQuery(loading).remove(); }, }); } } @@ -64,11 +70,12 @@ var ajaxDeleteCounter = function (btn, nrtype, ctr, value) { counter.value=value; var proceed = confirm ("Really delete counter '"+counter.counter+"' with value '"+counter.value+"'?"); if (proceed == true) { + var loading = jQuery("img.vm-ordernumber-loading").first().clone().insertAfter(btn).show(); jQuery.ajax({ type: "POST", cache: false, dataType: "text", // Read text, but interpret as JSON later in the done method (prevents a warning!) - url: "index.php?option=com_virtuemart&view=plugin&type=vmshopper&name=ordernumber&action=deleteCounter&format=json", + url: "index.php?option=com_virtuemart&view=plugin&type=vmshopper&name=ordernumber&action=deleteCounter&format=raw", data: { nrtype: counter.type, counter: counter.counter }, success: function( data ) { var json = data ? jQuery.parseJSON(data) : null; @@ -79,7 +86,8 @@ var ajaxDeleteCounter = function (btn, nrtype, ctr, value) { alert ("Failed modifying counter "+counter.counter); } }, - error: function() { alert ("ERROR: Failed modifying counter "+counter.counter); } + error: function() { alert ("ERROR: Failed modifying counter "+counter.counter); }, + complete: function() { jQuery(loading).remove(); }, }); } } @@ -87,11 +95,12 @@ var ajaxAddCounter = function (btn, nrtype) { var row = jQuery(btn).parents("tr.addcounter_row"); var countername = prompt ("Please enter the format/name of the new counter:"); if (countername != null) { + var loading = jQuery("img.vm-ordernumber-loading").first().clone().insertAfter(jQuery(btn).find("img.vmordernumber-counter-addbtn")).show(); jQuery.ajax({ type: "POST", cache: false, dataType: "text", // Read text, but interpret as JSON later in the done method (prevents a warning!) - url: "index.php?option=com_virtuemart&view=plugin&type=vmshopper&name=ordernumber&action=addCounter&format=json", + url: "index.php?option=com_virtuemart&view=plugin&type=vmshopper&name=ordernumber&action=addCounter&format=raw", data: { nrtype: nrtype, counter: countername }, success: function( data ) { var json = data ? jQuery.parseJSON(data) : null; @@ -102,7 +111,8 @@ var ajaxAddCounter = function (btn, nrtype) { } } }, - error: function() { alert ("ERROR: Failed adding counter "+countername); } + error: function() { alert ("ERROR: Failed adding counter "+countername); }, + complete: function() { jQuery(loading).remove(); }, }); } } -- GitLab