/**
  * @param Workflow $workflow
  * @param EmailMessageForWorkflowForm $emailMessage
  * @param RedBeanModel $model
  * @param User $triggeredByUser
  * @throws FailedToSaveModelException
  */
 protected static function processEmailMessageAfterSave(Workflow $workflow, EmailMessageForWorkflowForm $emailMessage, RedBeanModel $model, User $triggeredByUser)
 {
     if ($emailMessage->sendAfterDurationInterval == 0) {
         $helper = new WorkflowEmailMessageProcessingHelper($emailMessage, $model, $triggeredByUser);
         $helper->process();
     } else {
         $emailMessageData = SavedWorkflowToWorkflowAdapter::makeArrayFromEmailMessageForWorkflowFormAttributesData(array($emailMessage));
         $workflowMessageInQueue = new WorkflowMessageInQueue();
         $workflowMessageInQueue->processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime($emailMessage->resolveNewTimeStampForDuration(time()));
         $workflowMessageInQueue->savedWorkflow = SavedWorkflow::getById((int) $workflow->getId());
         $workflowMessageInQueue->modelClassName = get_class($model);
         $workflowMessageInQueue->modelItem = $model;
         $workflowMessageInQueue->serializedData = serialize($emailMessageData);
         $workflowMessageInQueue->triggeredByUser = $triggeredByUser;
         $saved = $workflowMessageInQueue->save();
         if (!$saved) {
             throw new FailedToSaveModelException();
         }
     }
 }
 public function testResolveNewTimeStampForDuration()
 {
     $message = new EmailMessageForWorkflowForm('WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $message->sendAfterDurationInterval = 5;
     $message->sendAfterDurationType = TimeDurationUtil::DURATION_TYPE_DAY;
     $this->assertEquals(5 * 24 * 60 * 60, $message->resolveNewTimeStampForDuration(0));
     $message->sendAfterDurationType = TimeDurationUtil::DURATION_TYPE_MINUTE;
     $this->assertEquals(5 * 60, $message->resolveNewTimeStampForDuration(0));
     $message->sendAfterDurationInterval = 10;
     $this->assertEquals(10 * 60, $message->resolveNewTimeStampForDuration(0));
     $message->sendAfterDurationType = TimeDurationUtil::DURATION_TYPE_HOUR;
     $this->assertEquals(10 * 60 * 60, $message->resolveNewTimeStampForDuration(0));
 }