VirtueMart 3.2.4 released with new payment options

The new version comes with a slightly improved PayPal plugin and a new PayPal product named "PayPal Credit". It allows to finance a purchase with PayPal's partner Comenity Capital Bank.

Furthermore Amazon Pay is now ready for productive use. It makes the cart more efficient by using the same login as for which autofills the customer's address into the VirtueMart BillTo and ShipTo address forms.

Also, we worked hard to improve PHP 7 compatibility, exchanged volatile loops and conditions for more robust code and added more error handling code to prevent breaking javascripts. New abstract language helper functions now create the SQL for the language fallbacks, thus reducing bugs and increasing consistent behaviour. The backend now provides more functions for a comfortable workflow, more tooltips, filters, stored states of filters, fixed links and small GUI enhancements. Editing an order now calculates proper results. For example, changing the order status for one item now updates the inventory correctly.

The whole 'Tools' section got cleaned up and a more logical layout. We added a new wizard for setting the safepath, which sets a secure safepath with one click. The old function to change the storeowner got enhanced and now works reliable even when the vmuser entry is missing.
The revenue report now works correctly to the second. There is also a new hidden config to set the mode for the week.

The new joomla core 3.7.4 creates the plugin object while updating, so updating a VirtueMart plugin ends in a fatal error because the VM plugins need the loaded VirtueMart environment. Therefore we added a small system plugin, which ensures that the vm environment is loaded.

New triggers increase the flexibility of VirtueMart. The triggers plgVmBeforeStoreProduct and plgVmAfterStoreProduct in the product model allows automatically set product properties. The triggers plgVmOnUpdateCart (in cart controller) and plgVmOnAddToCart (in cart helper function add) give programmers more control when a user is adding an item to the cart.

The cart also has been enhanced with new features. We now have the intuitive automatic shipment/payment. The old method was to set a shipment/payment automatically, when there was only one choice. Then we added a small javascript, which sets the configured method automatically, when available. This had the disadvantage that only one method could be automatically configured and when it was not available, nothing happened. The new method automatically sets the first method. The item update within the cart now also uses ajax, except for removing a product, because there was no backward compatible solution (we may find one later). The new cart layout does not show an extra 'Save' button for the shipment/payment selection anylonger. Plugins which provide extra data must add the button themself.

Opening the order details now works also with ajax. Ajax for the category browse view currently is too complex considering backward compatibility, but it is of course planned for the future. The new productdetails layout now uses the thumbnail function to display the main image. This sounds a bit strange at first, but at the end it makes the automatic resizing feature also available for the main images. Layout overriders can now also change the used layout for the order list and order detail views per hidden config.

To read the complete change list

Security release Joomla 3.7.1, update your VirtueMart first!

A Joomla 3.7.1 release containing a security fix will be published on Wednesday 17th May, BUT you should update to VirtueMart 3.2.2 BEFORE updating to Joomal 3.7.1. VirtueMart 3.2 addresses significant changes from Joomal 3.6.5 to Joomla 3.7. If you were still running VM 3.0.18.x with Joomla 3.6.5 to avoid update problems, you will now be forced to update to Joomla 3.7.1. Everybody, regardless of the Joomla or VM 3 version used, should update to the latest VirtueMart version 3.2.2 on Joomla 3.7.0 in order to find and solve any compatibility problems prior to the mandatory Joomla 3.7.1 security release.

The new  VirtueMart 3.2.2 is mainly a bugfix release with very few new features. In VirtueMart 3.2.x the backend language behaviour changed. Previously VM always took the shop language for displaying the content in the VM administration views, regardless the selected backend language. Since VM 3.2 it uses the selected backend language. That created some confusion especially with language fallbacks, because managers had no indication whether or not they saw a language fallback. Now country flags are added to display the origin of the language string, when a language fallback is displayed. Some additional language options are now available. The shop language can now be set directly in the VirtueMart configuration. The language issue of the registration emails is fixed. Also we found a fix for the width of the chosen dropdowns.
Other minor features and bug fixes address quick-and-dirty written plugins, outdated relations and adjustments for joomla 3.7.0.

VirtueMart 3.2 - Cached and Optimized

Better display options and improved backend gui

The new handling of the category view and categories is the most interesting feature of the new core. The new options for categories are set globally in the VM configuration and can be finetuned in the category itself and/or in the menu item of the category. The new category view has all old options of the "frontpage" view, so shopowners can now also display grouped products of the category for example featured or topten. The old frontpage view "virtuemart" is now deprecated and won't be developed further, but it will still work for updaters. Additional GUI enhancements in the backend reduce clicks and provide a better overview of the store. Ajax loaded categories and javascript outsourced into libraries do increase the performance when browsing the administration area.


Improvements under the hood

The new core got a lot improvements under the hood. The design of the system became more consistent and more and more follows the object caching strategy. This means that we prefer to load a full object, even we just need the name, because it is quite likely that we need the full object a bit later anyway. Also we added program caches for whole functions, not just database searches. Furthermore the new core sets course to Wordpress compatibility. For example the options per category are important for WP, because there are no menu item options similar to the ones used in joomla. The new language system indeed still uses the joomla JLanguage object, but the handling above got separated, so we can better use it in WP. It also has the advantage, that we can load different languages with language overrides for each language correctly in one page call. We need this for example for different email languages. Previously we just reused the old JLanguage object. The system works a bit more performant (not measurable in time, but load) and has less overhead.

Update friendly

We paid a lot attention to updaters. Updated systems are set into the legacy layout mode by default. In case a shop uses a system plugin working with VirtueMart, it may happen that there are problems with a multilanguage shop. In this case ask the plugin developer for an updated version (most 3rd party developers already provide an updated version). For layout changes, we highly recommend to use the new layout options.

Templaters and any 3rd party developer using the VirtueMart config object in the trigger onAfterInitialise, please read here


- load homeid after trying to get the activeMenu
- routing of category and manufacturer ids in category view
- Itemid for product links
- another way in the router to grant that the productmodel is loaded
- Added new function in router.php which takes care of loading ids or slugs with multilang using the vm config vm_lfbs. This function maybe more enhanced and added to VmModel
- sef lang keys must not have the same translation!
- Added previous hidden configuration 'sef_for_cart_links' for SEF links in tab SEF of vm config.

Cache and Optimisations
- Added program cache for currency converter. Maybe moved to database
- cached getVendorId
- enhanced link creation in BE product listing, prepared and cached with static variable
- enhancement for the router and product model getProductParentId uses now usually already loaded and cached data of the getProductSingle function. Also the name of the products are now taken from the cache. Usually products are loaded already anyway.
- the check if vmdebug should be displayed works now with a static in VmConfig and not with a function. The functions is now executed in loadConfig if needed.
- function getParentProductcategory in router.php uses now already cached products if available
- sorting on countries published: fix on hash
- Added "cache" option for language loader

- Currency can use now empty Space in format
- increased size of currency fields, so that we can use now html entities

Improvements for convenience:
- Updated "update xmls" to vm3.0.18
- missing language keys
- removed id tag from dropdowns to ensure that chosen can always generate a unique id
- little fix in calculation, category settings work now also for discounts of rules per bill
- added deep category search for product links by GJC
- bulgarian states added by servlet
- global category settings
a) Added parameters of category view to the vm category itself. This includes also renaming of some parameters in the vmconfig, updater is provided
b) Added more global options to the new category parameters reused old vm config options (partly of the homepage settings) as global options for the new category parameters
c) enhanced the layout for the view global settings in vm config
d) Adjusted also the newsfeed of the category view to work as the homepage feed.
e) added "no override" setting to the category layout/template parameters. All additional category/template/layout Parameters use now an empty string as "default" (no override)

- ajax loading of categories in Administration area.
- updated links of help file
- Added config which price should be used, when more than one fits (old selection used always the higher price)
- added vm config option for legacy layouts
- function getLayouts in config model checks for empty directories
- fix for tcpdf font listing, when tcpdf is not installed
- "debug email" which outputs the emails as message instead of sending them.
- fixed coupon search (thank you sandomatyas)
- configuration for the feature to omit already loaded products
- fix for JCE 2.6.0
- fix for editor cf, don't compare JDocumentHTML case sensitive, since Joomla changed it to JDocumentHtml
- added discontinued products
- added stockhandle on product level
- config for stockhandle on product level
- choose between replace, add and remove for product bulk associations
- more failsafe solution in model product.php for getProductShoppersByStatus in case a userfield is deleted
- MV were sortable, but did not show the right order in product edit, fixed
- "gui" fixes for customfield Multivariant. Removed phantom child in case it got deleted and fixed for some workflows a wrongly shown error.
- fixed rounding of customfield property by adding a new option "use rounding"
- added that commas are also replaced for desired final price
- createClone works now with getProductSingle, so that clones are still completely configurable by the parent
- fixed cloning of products in multilanguage shops
- fix in vmtable (for vmusers) function check, new registered users got vendorId of the admin creating the user
- added coupon to revenue (as extra column)
- fixed report for daily filter, should now work also with correct time offset (r9401)
- enhanced order listing, more information, combined some columns
- enhanced order editing, please check the help file for the new possibilities
- hidden fields also in order edit (by Rupostel)
- Shipmentmethod in the order list BE (by Alatak)
- colors for order status for faster BE order list reading (by Alatak)
- fixed BE ordering of shipment and payment methods
- fixed small display error while adding ST address in BE user edit
- also ratings are autopublished (worked already for reviews)
- BE hover title for image search results

- enhanced fallback of meta data in the category view
- added config "show_subcat_products"
- fixed recent products, was missing creating products by returned ids
- added using $this->isPdf to the cart layout to prevent printing of unnecessary forms
- cart sets vendorId=0, when all products are removed an in multivendor mode
- no public error for missing images
- Added total prices (price per item multiplied by quantity)
- related products use now normal price display
- added option for related products to have an add to cart button
- setProductType for related products
- Added product img thumb for Ajax Cart
- removed deprecated layout login.php in user view, is now replaced by sublayout login
- enhanced js toggling the checkout/confirm button
- new Handling of session in function emptyCartFromStorageSession, should throw an logged error in case someone has an unpatched joomla
- added feedback when user registration is forbidden by joomla
- fixed the problem that the registration mail was always sent regardless the joomla configuration
- "Shopper group back to default after order finished." fixed
- fixed "show more revues" button.

- Better language system, we load different languages now in different JLanguage instances
- moved language functions of VmConfig in own class vmLanguage, moved class vmLanguage in own file
- added new variable $currLangTag, which keeps always the last set language.
- vmLanguge function setLanguage is now private, setLanguageByTag should be used
- check in vmtable if language tag is correctly set, else it calls vmLanguage::initialise()
- added shopFunctionsF::loadOrderLanguages, which loads the language files "shoppers" and "orders" with fallbacks and for the requested extra language
- added parameter for loadConfig, so that it can be used without initialising vmLanguage (important for use in onAfterInitialise event)
- added log message, when language was not correctly loaded.
- added the options for "invoice in user language "
- function renderMail uses now the default backend language for the messages to the vendor
- vendor emails of orders are now sent always with the vendor language with fallback to joomla default language
- fix in router for better BC, loads vmConfig and sets in case the right language, this is need because some plugins load vm before the right language is set by joomla
- fix for order/invoice/mail shopper language, when the shop language has not english as default language (=joomla default site language)
- Fixed language for invoices header and footer, need resetting of vmlang by VmConfig::setdbLanguageTag added user language to order, is also interesting for support
- displayLinkToParent works now with language fallbacks
- Added cloning and creation of childs to product edit view
- Cloning products: Fixed doubled prices of cloned product, happened due reupdating the product after the process
- Cloning products: Fixed missing shoppergroups
- added language fallback for manufacturer
- language fallback for manufacturer for routing
- added fallback for categories in the backend list config model
- fix for category search with multilanguage fallbacks
- fix for default ordering in product listing with multilanguage fallbacks
- fixed ordering for product names in BE list, works also with language fallbacks

- Updating an old vm enables the legacy layout
- added installation language, minors for sample_virtuemart.sql
- added checking for the new order stati, inserted if missing
- fullinstaller has virtuemart sample data already selected
- language depended sample data is loaded, when available (with suffix _fr_fr for example)
- increased max_execution_time and memory_limit in installer and tableupdater
- loaded vm instance of install script is now using the temp install folder
- enhanced sample data (more reasonable)
- changed some default settings of the updater, so that updaters should not notice any difference

Table enhancements:
- Some more fields from char to varchar
- added some keys for faster reading

- prevented ambiguous product_mpn
- payment and shipment model missed i. for ordering
- Some sql were broken for multivendor using fallback for fallback language. Abstract function planned
- Replaced all "using" in sql against ON (and that was a lot)
- fixed getParentlink query in product edit
- getCategoryRecurse sql is not executed for child_id = 0 anylonger
- fixed sql getPluginMethods
- fixed sql in model category function getParentsList when language fallback is needed
- fixed sql of shipment and payment model function getPayments and getShipments (kind of typo a missing alias after the "as"
- fixed sql error in customfield.php r9358
- Added some sql table keys id,ordering
- small optimisations of sql for using keys better

Program internal:
- config helper and regarding config model for WP
- renamed stockhandle_discontinued_products to stockhandle_products
- renamed product_remaining_stock to product_discontinued
- replaced VmConfig::setErrorReporting by VmConfig::setErrRepDefault
- Added common function "useSSL", which considers the option in vm and joomla
- exchanged "round" against "roundInternal" in calculation helper
- new function getCurrentUrlBy, which creates a link by Request (get,post) by a whitelist of variablenames correct redirect urls for login, etc loading of product images for ajax cart data with parameter now
- model category function getCategory, added check so that an empty category does not try to load medias
- moved function getRecentProductIds from shopfunctionsF.php to the product model
- Added new Function vmConfig::getMemoryLimitBytes, which returns the set memory_limit with Bytes
- Found the error "scalar", happened when a boolean is cast to object r9374
- VirtuemartModelConfig function getLayouts, added param to disable the empty option
- replaced more json_encode against vmJsApi::safe_json_encode
- Each language uses now its own JLanguage object, makes it a lot easier to render different languages
- Replaced VmConfig::loadJLang against vmLanguage::loadJLang('com_virtuemart');
- htmlentities does not use ini_get("default_charset") anylonger, is set to UTF-8
- new function in vmtable checkTableExists
- vmpsplugin uses now checkTableExists
- email function renderMail got seperated in different functions and cleaned up
- removed nasty bug for 3rd party developes which prevented the update of order items using the function updateStatusForOneOrder (r9400)
- vmTrace can now log and render the message (before log or render)
- function getTCPDFFontsList, replaced function glob against RecursiveDirectoryIterator
- added new field vmlisttable, handy to display item lists of models (maintable)
- added vRequest::setVar('doVendor', $this->doVendor); to function renderMailLayout of the invoice, used by sublayouts in the mail
- enhanced function getPluginMethods in vmpsplugin.php
- Added new getCache function, replaced all JFactory::getCache against VmConfig::getCache
- parameters of customfields not set in the product edit do not set a default value anylonger, so the value of the customprototype is used
- userfields are now escaped with htmlspecialchar and not htmlentities anylonger
- Added missing state="0" for sqls using the joomla extension table. This is important, when someone uninstalled and reinstalled a plugin.
- function declarePluginParams is only checking by name, not extension_id anylonger and removed the & in the foreach for better compatibility
- updated vmUserfieldPlugin so that its params work similar as the other vmtable params. Is now also php7 compatible.
- changed function renderCustomfieldsCart so, that it can display extra data by product and user input data
- Added vmdebug as echo to add to cart popup
- added clone $product for the triggers plgVmOnProductDisplayShipment and plgVmOnProductDisplayPayment to prevent that the trigger changes accidently the selected variant of the product

- Added ajax to browse view for multi variants and generic child variants
- enhanced ajax for reloading children. The view productdetails must have now the class product-container to work properly with ajax
- replaced "all" jQuery calls against $, if within jQuery environment to prevent problems with safari
- changed reserver time of "keepAlive" script. The delivery time of the page must be considered.
- javascript added boolean setBrowserState to prevent optionally the setting of browser state by ajax
- removed avfind.js is now added to cvfind.js
- cvfind js, additionally checks to prevent endless "while loops"
- switch for loading JHtml::_('behavior.formvalidation'); in vmsjapi and replaced in any files by vmValidator
- moved js script of mediahandler in own file
- gathered all media edit scripts to one script "mediahandler.js"
- gathered product scripts to product.js
- removed a lot scripts (for products and media) from the vm2admin.js, added "sortable" and "hide price"
- js for add to cart does not check anylonger for the dom type, so it can be used with spans also
- vmprices.js setproducttype checks now for the classes product-container, productdetails, vm-product-details-container
- Added product img thumb for Ajax Cart
- enhanced language switcher js and new lib for the admin menu
- BE view orders list und order edit js enhanced

- typo in config.php created empty language db suffix
- typo in order model $orderDetails['details'] must be $order['details']

- removed asynchron loading of MV script, created random errors on some browsers
- facebox, disabled asynchronous and defer loading
- added missing class for ajax to the product module layout "single"
- Fixed HTML validation issue of cartpos[] input, moved in td. tr elements can accept only td and th elements as childs.
- Fixed invalid br tag. (r9300)
- view/category/tmpl/default.php changed if($this->showproducts) against if (!empty($this->products)) the option is considered while loading the products and dont need to be checked there
- adjusted product_horizon to work with variant ajax reload
- wrote fallback for ajax for old layouts
- changed the 0 product group (normal products in the browse view) to "products"
- update by Stefan Schumacher for the 3 price lists (cart, invoice, orders) removed old tags against inline style (yeh, class comes later)
- changed a bit css so that add to cart button can be shown as span

- Fix for paybox IP problem
- little fix for paypal express, removed the possibility to select it as option to prevent errors with ajax
- fixed selection of paypal (removing of paypal express from the select list, removed it completely) r9384
- paypal has now optional conditional shipments
- small fix in Amazon Pay orderreferencenotification.php
- Amazon Pay removed VMPAYMENT_AMAZON_PAYMENT_NOT_AVAILABLE message, when the method cannot be selected
- Heidelpay adjustments for php 7 and some minors
- little fix for
- Standard shipment plugin: Fixed a small issue, that deactivation of "show on productdetail" was not correctly loaded in the settings
- small fix in weight_countries.php, which prevented a checkout when there was no method for weight_countries.php configured and another shipment plugin used
- check in weight_countries.php, which prevents that the wrong shipment is autoselected (r9418)
- Avatax added check for soap

- rewritten getMyOrderDetails, works now whitelisted
- security enhancement for model userfields by Stan Scholtz (Rupostel)
- userfields security enhancement by Rupostel double encoded html entities, param changed
- added hashing of vmver (js and css)
- Added extra check for isFEmanager if user is actually logged in.

Joomla Security Release 3.6.5 and Patch for joomla 2.5.28

There is a security problem in the JUser model. Please update as soon as possible.

Joomla 2.5.x is not anylonger supported by the Joomla project, but we know that a lot people still use joomla 2.5. with VirtueMart. As promised, we provide a fix (Direct link).

This patch is just the one for j2.5.28 of last year extended by the new files. Update your joomal 2.5.x at least to the last version j2.5.28.

It is normal that an unpatched j2.5.28 logs you out. The patch should be still applied. 

Release of 3.0.18 - Connecting the loose ends

This new VirtueMart 3 Version is completing the vm3.0 series. There won't be any new vm3.0.x updates other than if we have a security issue. Some of our developers are still developing on Joomla 2.5 to ensure the backward compatibility. But from now on, any new version will be developed on the most recent Joomla or WordPress releases. We won't break the compatibility by purpose, but we just cannot test any longer for older versions.

We have got VirtueMart running on WordPress already in our laboratory. WordPress opens a new market for shops which do not need a complex CMS setup. The last big task is at the moment only the router, which must be adjusted to the WordPress links. The ACL is at the moment only roughly translated, but it will be possible to make it more fine grained later, so that we can simulate 80% of the Joomla rights within Wordpress. Transforming VirtueMart to a cms-less system forces us to use an own user table. So in future we will have real Virtuemart users, not being based on the old Joomla table. The basic trick is that we still use a light version of the Joomla libraries, so extension developers can easily write extensions compatible to Joomla and WordPress. We hope that we can extend this technique to integrate VM into more CMS systems like Drupal. We plan to publish a beta before Christmas.

Since it is the last of its series, we added some of the membership features to the main version. So product variants work now also in the category browse view. Changing the ordering within a dropdown of a multivariant was quite painful. But we added a drag and drop for the children list, so it is very easy to adjust.

Here an incomplete list of the new features

New Features for shopowners

  • Customfields of type S (String) and P (Property) can be used to automatically create a dropdown for search (like tags)
  • Added ajax for child variants in category browse view - MV (MultiVariant) and GC (GenericVariant)
  • Category view now has the same options for displaying additional VM content as were available in the virtuemart view (which is now deprecated)
  • Update of com_tcpdf to tcpdf version 6.2.12
  • Added drag and drop sorting of MultiVariants in product edit
  • Already loaded grouped products are not displayed twice on the same browse view
  • Product is now virtually added to the cart before the conditions are tested. So it works now also for weights and other conditions (not just price)
  • User dependent currency for invoice, mail, and order view
  • Currency can now use the "space character" in the display format
  • Payment and shipment methods can now be edited in different currencies
  • Changed addProductToRecent so that it always stores 10 product ids; can be adjust by hidden config max_recent_products
  • Added a template vmbeez3 derived from beez3
  • New VirtueMart/Joomla! 3 full installer
  • Paypal accepts multiple currencies
  • Amazon works now with the cart ajax and updated library
  • Avatax taxfreightcode added

New Features for developer and templater

  • shopfunctions::getLoginForm works now with a sublayout login, so it can be used in other views
  • Added trigger plgVmOnCheckoutCheckStock
  • Removed id tag from dropdowns to ensure that chosen can always generate a unique id
  • Quite a lot of JS enhancements, more robust and faster
  • Added function sendCurrForm, which simply fires the form if an input has the right class.
  • Plugins can now define in the constructor which values should be handled as convertables

Important for shops with overrides

The new js for using ajax for reloading product content uses now always the same class. The class is "product-container". Just search for the div with "productdetails-view productdetails" and add "product-container". In case you want the ajax reload within a product modul, you need to adjust the overrides here also. Furthermore the layout login of the user view is now in the sublayout folder. Members who used the ajax for child variants within the browse view should change the layout back to default.

For a full list of all changes or more information how to adjust your overrides, please read here in our forum 

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.