/** * While migrate Contao newsletter recipients, fill with member details. * * @param MigrateRecipientEvent $event */ public function collectMemberPersonals(MigrateRecipientEvent $event) { global $container; $migrationSettings = $event->getMigrationSettings(); if ($migrationSettings['importFromMembers']) { $recipient = $event->getRecipient(); /** @var \Doctrine\DBAL\Connection $connection */ $connection = $container['doctrine.connection.default']; $queryBuilder = $connection->createQueryBuilder(); /** @var \PDOStatement $stmt */ $stmt = $queryBuilder->select('*')->from('tl_member', 'm')->where($queryBuilder->expr()->eq('m.email', ':email'))->setParameter('email', $recipient->getEmail())->execute(); $member = $stmt->fetch(\PDO::FETCH_ASSOC); if ($member) { /** @var EntityAccessor $entityAccessor */ $entityAccessor = $container['doctrine.orm.entityAccessor']; foreach ($member as $key => $value) { // graceful conversions switch ($key) { case 'id': $value = $entityAccessor->getPrimaryKey($recipient); break; case 'firstname': $key = 'forename'; break; case 'lastname': $key = 'surname'; break; } if ($entityAccessor->hasProperty($recipient, $key)) { $entityAccessor->setProperty($recipient, $key, $value); } } } } }
/** * @param MigrateRecipientEvent $event * @SuppressWarnings(PHPMD.CamelCaseVariableName) */ public static function collectPersonalsFromMembers(MigrateRecipientEvent $event) { global $container, $TL_DCA; $migrate = new Migrate(); $migrate->loadLanguageFile('orm_avisota_recipient'); $migrate->loadDataContainer('orm_avisota_recipient'); $migrationSettings = $event->getMigrationSettings(); if ($migrationSettings['importFromMembers']) { /** @var \Doctrine\DBAL\Connection $connection */ $connection = $container['doctrine.connection.default']; $recipient = $event->getRecipient(); $queryBuilder = $connection->createQueryBuilder(); /** @var PDOStatement $stmt */ $stmt = $queryBuilder->select('*')->from('tl_member', 'm')->where($queryBuilder->expr()->eq('email', $recipient->getEmail()))->execute(); $member = $stmt->fetch(); $fields = $TL_DCA['orm_avisota_recipient']['fields']; foreach ($fields as $fieldName => $fieldConfig) { if (isset($fieldConfig['eval']['migrateFrom'])) { $recipient->{$fieldName} = $member[$fieldConfig['eval']['migrateFrom']]; } } } }