Overriding Customer Data
In order to modify marketing permission detection you must create a small Magento 2 module. Start by following the steps described in the guide about Overriding or Extending Functionalities
Required files and configurations
1. The events config app/code/My/Nosto/etc/events.xml
app/code/My/Nosto/etc/events.xml<?xml version="1.0"?>
<!--suppress XmlUnboundNsPrefix -->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="nosto_person_load_after">
        <observer name="nosto_person_load_after_marketing_permission" instance="My\Nosto\Observer\Person\Load" />
    </event>
</config>2. The observer app/code/My/Nosto/Observer/Person/Load.php
app/code/My/Nosto/Observer/Person/Load.php<?php
namespace My\Nosto\Observer\Person;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Nosto\Object\AbstractPerson;
use Nosto\Object\ModelFilter;
use Nosto\Tagging\Model\ElementFilter;
class Load implements ObserverInterface
{
    /**
     * NOTE! You must inject the classes / services required to determinate
     * the marketing permission consent
     */
    public function __construct()
    {
    }
    /**
     * Observer for "nosto_person_load_after" event
     *
     * @param Observer $observer
     * @return void
     */
    public function execute(Observer $observer)
    {
        /* @var ModelFilter $modelFilter */
        $modelFilter = $observer->getData('modelFilter');
        // Note that you can disable completely person data processing
        // with the modelFilter
        // $modelFilter->setValid(false);
        /* @var AbstractPerson $person */
        $person = $observer->getData('person');
        if ($modelFilter instanceof ModelFilter
        && $person instanceof AbstractPerson) {
            $person->setMarketingPermission(
                $this->hasMarketingPermissions($person)
            );
        }
    }
    /**
     * Custom marketing permission detection
     *
     * @param AbstractPerson $person
     * @return boolean
     */
    private function hasMarketingPermissions(AbstractPerson $person)
    {
        if ($person->getEmail()) {
            // Do your extra validation here
        }
        return $person->getMarketingPermission();
    }
}Last updated
Was this helpful?
