Extensions for the Shipping by Rules Plugins for VirtueMart

Extensions for the Shipping by Rules plugins for VirtueMart. These plugins provide custom variables or custom functions to be used in the rules. At least version 5.0 of the Shipping by Rules plugins is required.

All these plugins are "normal" Joomla plugins of plugin type "vmshipmentrules" and need to be installed via the Joomla extension manager. Upon installation they should be automatically published by the installer and their functionality should be available in the Shipping by Rules plugins (both the basic and the advanced plugin) immediately.

Please note that the plugin feature was added only in version 5.0 of the Shipping by Rules plugins, so you need to have at least that version installed.

RegExp Plugin

This plugin provides the following RegExp-related functions to the shipping by rules plugin:

RegExpMatch(pattern, value)

returns whether the value matches the expression (true/false)

RegExpMatches(pattern, value)

returns an array of all matches of regexp within the value (array)

RegExpReplace(pattern, value)

preforms a regexp replacement on the value, returns the resulting string (string)

RegExpSplit(pattern, value)

splits value using the regexp as delimiter, returns array of all substrings (excluding the delimiter) (array)

RegExpFilter(pattern, array)

returns all members of the array that match the regexp (array)

VM Coupon Prices Plugin

This plugin extends the shipping by rules plugin with two variables (couponValue and AmountAfterCoupon / salesPriceAfterCoupon) that take into account coupon discounts by the stock VirtueMart coupon system. For technical resons, these variables are not part of the Shipping by Rules plugin by default to prevent possible interferences.

By default, VirtueMart evaluates shipping costs first and coupons afterwards, so when shipping is calculated, the coupon discount is not yet calculated in general. To work around this issue, this small plugin adds to trickery to manually calculate the coupon during shipping cost evaluation. As this might interfere with VM (we have not yet run into issues, but who knows...), this functionality is not included by default, but only with this small extension plugin.

The plugin makes some more variables available:

AmountAfterCoupon / SalesPriceAfterCoupon

The total amount of the order after coupon discounts have been applied

CouponValue

The total coupon discount

AwoCoupon Plugin

This plugin provides access to the coupon granted by AwoCoupon. For technical reasons that coupon is not part of the Amount variable in the rules. The reason is that VirtuMart handles coupon plugins like AwoCoupon after shipping plugins, so when the shipping rules are evaluated, the coupon plugins have not been evaluated. This plugin uses the internals of the AwoCoupon component to extract the coupon discount directly and makes it available as the awodiscount variable.

The plugin also makes some more variables available:

AwoDiscount

The total amount of the coupon discount (product discount and shipping discount) including taxes

AwoProductDiscount

The total AwoCoupon product discount including taxes

AwoProductDiscountNoTax

The total AwoCoupon product discount excluding taxes

AwoShippingDiscount

The total AwoCoupon shipping discount including taxes

AwoShippingDiscountNoTax

The total AwoCoupon shipping discount excluding taxes

AmountAfterCouponAmountWithTaxAfterCoupon

The order subtotal (product prices total) including taxes after AwoCoupon discounts are applied

TaxAmountAfterCoupon

The order tax amount after AwoCoupon discounts are applied

AmountWithoutTaxAfterCoupon

The order subtotal (product prices total) excluding taxes after AwoCoupon discounts are applied

CAVEAT: Due to the way VirtueMart processes third-party coupons, when a coupon is added or changed, the first page load does NOT have the AwoCoupon values available, because VirtueMart handles shipping methods before Coupons are evaluated. So, immediately after adding a coupon, the coupon will not be available. Only after another page reload will these values be available.

Template for vmshipmentrules Plugins

This is a template for developers who want to write their own plugins to extend the Shipping by Rules plugins. It can be installed, but does not provide any useful functionality, unless a programmer implements the corresponding functions.

Sometimes, shipping costs have to depend on properties (e.g. custom field values, awocoupon discounts, etc.) that are not by default provided by this plugin. Starting with version 5.0, the Shipping by Rules plugins can be extended with plugins of type "vmshipmentrules". Such extensions can add new variables, modify existing variables and add new functions (advanced version only).

The template available for download has the complete file and code structure, which you can use as a starting point for such a plugin. You will need to adjust the file names, the .xml file and the class names.

There are two triggers in the plugin class that can be reimplemented to provide/modify variables and add new functions:

This trigger is called right before the rules are first evaluated (and during evaluation when a scoping function like evaluate_for_categories is used).

Function arguments

$cartvals

Associative array of all defined cart variables available in the rules. This array can be modified by adding new variables or changing existing entries. The variable name is used as the key, its value is the array value of the entry in the associative array.

$cart

The VirtueMartCart object of the whole order. This includes all products in the order, information about the shopper, the address, the shipment and payment methods (although payment plugins have not neccessarily been processed).

$products

The list of products for which the cart variables are supposed to be calculated. Always use this list of products rather than $cart->products, because this trigger can also be called for a subset of the cart (e.g. to calculate values for all articles in only one category when evaluate_for_categories is evaluated)

$method

The configuration of the shipment method.

$cart_prices

The cart prices of the whole cart. If this trigger is called for only a subset of the cart, this argument is null.

function onVmShippingRulesRegisterCustomFunctions()

This trigger is called when the Shipping by Rules plugin is initialized. It is used to register custom function callbacks.

This trigger is called right before the rules are first evaluated (and during evaluation when a scoping function like evaluate_for_categories is used).

Function arguments

-

none

Return value:

Associative array containing function definitions. The array keys are the function names to be used in the rules, the corresponding array values are the callback functions (either a string to call a top-level function, or array('classname', 'methodname') to call a static class member function, or array($classinstance, 'methodname') to call a class member function of an existing object, e.g. $this).

The callback functions should have a signature "function callbackName($args, $rule) {...}" and will be called when the rule is evaluated. The function arguments given in the rule are passed as an array to the callback function. Its second argument is the rule that is currently evaluated. In most cases there should be no need to access the $rule, except to print out $rule->rulestring in error messages to tell the user which rule caused the error.