Installing the extension
The Magento 2 extension for Engage is developed in PHP. These are the steps to install it.
Installation
Add this repository to your composer:
composer config repositories.voyado composer https://gitlab.com/api/v4/group/11993948/-/packages/composer/
Then add this to use the magento2 module:
composer require voyado/magento2
Development
The module has quality assurance scripts in place. To activate them, run:
composer install
Note
Use composer 2 and PHP 7.4.
You’ll be asked for Magento credentials. It's best to use those for Magento Enterprise. Don't store them as they are needed just once.
You’ll also need a GitLab token. Create an "auth.json" file with it as follows:
{ "gitlab-token": { "gitlab.com": "generate-this-in-your-gitlab-account" } }
When changes are committed, GrumPHP will now perform some checks.
Flows
See PlantUML flows in src/doc.
Extending
The module can be extended to, for example, allow more data to be sent to Engage in the order receipt. Do like this:
Note
Replace VendorName below with your own vendor name.
app/code/VendorName/ExtendedVoyado/registration.php
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'VendorName_ExtendedVoyado', __DIR__ );
app/code/VendorName/ExtendedVoyado/etc/module.xml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="VendorName_ExtendedVoyado" setup_version="1.0.0"> <sequence> <module name="Voyado_Magento2" /> </sequence> </module> </config>
app/code/VendorName/ExtendedVoyado/etc/di.xml
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Voyado\Magento2\Helper\VoyadoHelper"> <plugin name="VendorName_ExtendedVoyado_Plugin_AddOwnAttributeToOrderItem" type="VendorName\ExtendedVoyado\Plugin\AddOwnAttributeToOrderItem" /> </type> </config>
app/code/VendorName/ExtendedVoyado/Plugin/AddOwnAttributeToOrderItem.php
<?php namespace VendorName\ExtendedVoyado\Plugin; use Voyado\Magento2\Helper\VoyadoHelper; class AddOwnAttributeToOrderItem { /** * @param VoyadoHelper $object * @param array $result * @param mixed $orderItem * @return array */ public function afterGetExtraDataForItem(VoyadoHelper $object, $result, $orderItem) { if ($orderItem->getProduct() !== null) { if ($orderItem->getProduct()->getTypeId() === 'simple') { if ($orderItem->getProduct()->getAttributeText('my_own_attribute') !== false) { $result['my_own_attribute'] = $orderItem->getProduct()->getAttributeText('my_own_attribute'); } } elseif ($orderItem->getProduct()->getTypeId() === 'configurable') { $options = $orderItem->getProductOptions(); if (isset($options['attributes_info'])) { foreach ($options['attributes_info'] as $option) { if ($option['label'] === 'My Own Attribute Label') { $result['my_own_attribute'] = $option['value']; break; } } } } } return $result; } /** * @param VoyadoHelper $object * @param array $result * @param mixed $orderItem * @return array */ public function afterGetExtraDataForReceiptItem(VoyadoHelper $object, $result, $orderItem) { if ($orderItem->getProduct() !== null) { if ($orderItem->getProduct()->getTypeId() === 'simple') { if ($orderItem->getProduct()->getAttributeText('my_own_attribute') !== false) { $result = [ [ 'name' => 'my_own_attribute', 'value' => $orderItem->getProduct()->getAttributeText('my_own_attribute') ] ]; } } elseif ($orderItem->getProduct()->getTypeId() === 'configurable') { $options = $orderItem->getProductOptions(); if (isset($options['attributes_info'])) { foreach ($options['attributes_info'] as $option) { if ($option['label'] === 'My Own Attribute Label') { $result = [ [ 'name' => 'my_own_attribute', 'value' => $option['value'] ] ]; break; } } } } } return $result; } }
Adding custom functionality with plugins
When adding custom functionality to this extension, make sure to create your own plugin. Otherwise, you may interfere with the existing code and risk breaking it.
Consents
Add consents for contacts by creating two plugins:
afterGetConsents for class Voyado\Magento2\Helper\ContactAttributesHelper
afterGetConsents for class Voyado\Magento2\Helper\OrderBodyHelper
For addOrder and creditMemo, the function will receive "true" for the argument fromOrder.
The method getConsents can be found in the class Voyado\Magento2\Helper\VoyadoHelper and only returns an empty array.
Per index, an array should be added with these keys (the values are examples):
[ "id" => "consentGeneralTerms", "value" => true, "date" => "2021-03-15T16:32:42+01:00", "source" => "string", "comment" => "string" ]