/** * @param SavedWorkflow $savedWorkflow * @return Workflow */ public static function makeWorkflowBySavedWorkflow(SavedWorkflow $savedWorkflow) { $workflow = new Workflow(); if ($savedWorkflow->id > 0) { $workflow->setId((int) $savedWorkflow->id); } $workflow->setDescription($savedWorkflow->description); $workflow->setIsActive((bool) $savedWorkflow->isActive); $workflow->setModuleClassName($savedWorkflow->moduleClassName); $workflow->setName($savedWorkflow->name); $workflow->setOrder((int) $savedWorkflow->order); $workflow->setType($savedWorkflow->type); $workflow->setTriggerOn($savedWorkflow->triggerOn); if ($savedWorkflow->serializedData != null) { $unserializedData = unserialize($savedWorkflow->serializedData); if (isset($unserializedData['triggersStructure'])) { $workflow->setTriggersStructure($unserializedData['triggersStructure']); } self::makeComponentFormAndPopulateWorkflowFromData($unserializedData[ComponentForWorkflowForm::TYPE_TRIGGERS], $workflow, 'Trigger'); self::makeActionForWorkflowFormAndPopulateWorkflowFromData($unserializedData[ComponentForWorkflowForm::TYPE_ACTIONS], $workflow); self::makeEmailMessageForWorkflowFormAndPopulateWorkflowFromData($unserializedData[ComponentForWorkflowForm::TYPE_EMAIL_MESSAGES], $workflow); if (isset($unserializedData[ComponentForWorkflowForm::TYPE_TIME_TRIGGER])) { $moduleClassName = $workflow->getModuleClassName(); $timeTrigger = new TimeTriggerForWorkflowForm($moduleClassName, $moduleClassName::getPrimaryModelName(), $workflow->getType()); $timeTrigger->setAttributes($unserializedData[ComponentForWorkflowForm::TYPE_TIME_TRIGGER]); $workflow->setTimeTrigger($timeTrigger); $workflow->setTimeTriggerAttribute($timeTrigger->getAttributeIndexOrDerivedType()); } } return $workflow; }
/** * No need to sanitize for Date and DateTime since those attributes utilize integers for time-based triggers * @param array $data * @param Workflow $workflow */ public static function resolveTimeTrigger($data, Workflow $workflow) { assert('is_array($data)'); if ($workflow->getType() != Workflow::TYPE_BY_TIME) { return; } $workflow->removeTimeTrigger(); $moduleClassName = $workflow->getModuleClassName(); $timeTrigger = new TimeTriggerForWorkflowForm($moduleClassName, $moduleClassName::getPrimaryModelName(), $workflow->getType()); if (null != ($timeTriggerData = ArrayUtil::getArrayValue($data, ComponentForWorkflowForm::TYPE_TIME_TRIGGER))) { $timeTrigger->setAttributes($timeTriggerData); } $workflow->setTimeTrigger($timeTrigger); }