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

<?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

<?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