/** * @param EmailModel $model * * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ protected function processEmailModel(EmailModel $model) { /** * TODO EmailEntityBuilder::email or EmailEntityBuilder::emailUser should be user here */ $this->assertModel($model); $currentDate = new \DateTime('now', new \DateTimeZone('UTC')); $messageDate = $model->getSentAt() ?: $currentDate; $this->ensureEmailEntitySet($model); $email = $model->getEntity(); // Subject if ($model->getSubject()) { $this->processString($email, 'Subject', $model->getSubject()); } // From if ($model->getFrom()) { $this->processSender($email, $model->getFrom()); } // To if ($model->getTo()) { $this->processRecipients($email, EmailRecipient::TO, $model->getTo()); } // Cc if ($model->getCc()) { $this->processRecipients($email, EmailRecipient::CC, $model->getCc()); } // Bcc if ($model->getBcc()) { $this->processRecipients($email, EmailRecipient::BCC, $model->getBcc()); } // Body if ($model->getBody()) { $this->processBody($email, $model->getBody(), $model->getBodyType()); } elseif ($model->getBodyType()) { $this->processBodyType($email, $model->getBodyType()); } // CreatedAt if ($model->getCreatedAt()) { $email->setCreated($model->getCreatedAt()); } elseif (!$email->getId()) { $email->setCreated($messageDate); } // SentAt if ($model->getSentAt()) { $email->setSentAt($model->getSentAt()); } elseif (!$email->getId()) { $email->setSentAt($messageDate); } // InternalDate if ($model->getInternalDate()) { $email->setInternalDate($model->getInternalDate()); } elseif (!$email->getId()) { $email->setInternalDate($messageDate); } // Importance if (null !== $model->getImportance()) { $this->processImportance($email, $model->getImportance()); } // Head if (null !== $model->isHead()) { $this->processHead($email, $model->isHead()); } // MessageId if (null !== $model->getMessageId()) { $this->processString($email, 'MessageId', $model->getMessageId()); } // XMessageId if (null !== $model->getXMessageId()) { $this->processString($email, 'XMessageId', $model->getXMessageId()); } // XThreadId if (null !== $model->getXThreadId()) { $this->processString($email, 'XThreadId', $model->getXThreadId()); } // Thread if (null !== $model->getThread()) { $this->processThread($email, $model->getThread()); } // Refs if (null !== $model->getRefs()) { $this->processRefs($email, $model->getRefs()); } // process EmailUser entities for each folder $emailUsers = $this->processFolders($email, $model->getFolders()); foreach ($emailUsers as $emailUser) { // ReceivedAt if ($model->getReceivedAt()) { $emailUser->setReceivedAt($model->getReceivedAt()); } elseif (!$email->getId()) { $emailUser->setReceivedAt($messageDate); } // Seen if (null !== $model->isSeen()) { $emailUser->setSeen($model->isSeen()); } $this->emailEntityBuilder->setObject($emailUser); } $this->emailEntityBuilder->getBatch()->persist($this->entityManager); }