VirtueMart Forum

VirtueMart 2 + 3 + 4 => Virtuemart Development and bug reports => Topic started by: sandomatyas on November 30, 2023, 18:08:17 PM

Title: Triggering plugins
Post by: sandomatyas on November 30, 2023, 18:08:17 PM
We migrated a Joomla 3 + VM4 site to Joomla 4 + VM4. Also we had an Acymailing automation, triggered when a customer places an order, and it stopped after the update. Interestingly, these settings had previously operated seamlessly on a Joomla 3 site.
Upon reaching out to Acymailing and their excellent support, they identified the issue:

As they wrote:
Quote
The VirtueMart trigger we based our integration on is named "plgVmOnUserOrder". It is still working for Joomla 3 websites, but Joomla decided starting from their version 4 that every trigger must be prefixed with "on". This lead to this trigger to not working anymore in Joomla 4+.

As a temporary fix, in the VirtueMart file administrator/components/com_virtuemart/models/orders.php near the line 1783, this code:

$plg_datas = vDispatcher::trigger('plgVmOnUserOrder',array(&$_orderData));

May be replaced by this code:

$plg_datas = vDispatcher::trigger('onplgVmOnUserOrder',array(&$_orderData));


Then in the AcyMailing file plugins/system/acymtriggers/acymtriggers.php near the line 99, this code:

public function plgVmOnUserOrder($orderData)

May be replaced by this code:

public function onplgVmOnUserOrder($orderData)


This should fix the trigger in AcyMailing, but for a more permanent solution the VirtueMart team should apply the modification in a future version. Do you already have a contact with a member of the VirtueMart support? They may be interested in this information.

What do you think?
Title: Re: Triggering plugins
Post by: Jumbo! on November 30, 2023, 21:59:59 PM
Their statement is partially correct. Yes, the "on" prefix in the event names is new in Joomla 4. However, VirtueMart must remain backwards compatible with all its existing extensions, so changing the event name will not be wise.

There is an easy solution available to deal with this problem.

They need to add the following lines of codes in the "__construct" function in their plugin - plugins/system/acymtriggers/acymtriggers.php.

        if (version_compare(JVERSION, '4.0.0', 'ge')) {
            $this->registerLegacyListener('plgVmOnUserOrder');
        }


That's it. Now, the event will get triggered correctly, just like Joomla 3.
Title: Re: Triggering plugins
Post by: sandomatyas on December 01, 2023, 05:32:08 AM
Thanks Jumbo :)