Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
digitalascetic/google-api-client / EventListener / GoogleApiNotificationsChannelMappingListener.php
Size: Mime:
<?php
/**
 * Created by PhpStorm.
 * User: eduarddezacastellano
 * Date: 08/10/2018
 * Time: 11:59
 */

namespace DigitalAscetic\GoogleApiClientBundle\EventListener;


use DigitalAscetic\GoogleApiClientBundle\Entity\GoogleApiNotificationsChannel;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Events;
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;

class GoogleApiNotificationsChannelMappingListener implements EventSubscriber
{
    const SERVICE_NAME = 'ascetic_google_api_client.notifications.channel.mapping_listener';

    /**
     * @var array
     */
    private $config;

    /**
     * GoogleApiNotificationsChannelMappingListener constructor.
     * @param array $config
     */
    public function __construct(array $config)
    {
        $this->config = $config;
    }

    public function getSubscribedEvents()
    {
        return array(
            Events::loadClassMetadata,
        );
    }

    /**
     * @param LoadClassMetadataEventArgs $eventArgs
     */
    public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
    {
        /** @var ClassMetadata $metadata */
        $metadata = $eventArgs->getClassMetadata();

        $reflectionClass = $metadata->getReflectionClass();

        if ($reflectionClass->getName() === GoogleApiNotificationsChannel::class) {

            if (!$metadata->hasAssociation('user')) {

                $metadata->mapManyToOne(
                    array(
                        'targetEntity' => $this->config['user_class'],
                        'fieldName' => 'user',
                        'joinColumns' => array(
                            array(
                                'name' => 'user_id',
                                'referencedColumnName' => $this->config['property_id'],
                                'nullable' => false,
                            ),
                        ),
                    )
                );
            }
        }
    }
}