public function save(ezcWorkflow $workflow) { // verify workflow $workflow->verify(); // calc new version number $workflowVersion = $this->getCurrentVersionNumber($workflow->getName()) + 1; try { $this->_conn->beginTransaction(); // Mark version that is currenlty the lastest version as old. if ($workflowVersion > 1) { $sql = "WHERE workflow_name = '%s' AND workflow_version_is_latest = %s"; $workflowData = Axiom_Model::getModel('Workflow')->findByQuery(sprintf($sql, $workflow->getName(), 1)); $workflowData->workflow_version_is_latest = 0; $workflowData->save(); } // Write workflow table row $newWorkflowData = new Workflow(); $newWorkflowData->workflow_name = $workflow->getName(); $newWorkflowData->workflow_version = $workflowVersion; $newWorkflowData->workflow_created = date('Y-m-d H:i:s', time()); $newWorkflowData->workflow_version_is_latest = 1; $newWorkflowData->save(); $workflow->setId($newWorkflowData->id); $workflow->setVersion($workflowVersion); // Write node table rows. foreach ($workflow->getNodes() as $node) { $nodeData = new Node(); $nodeClass = get_class($node); $nodeConfiguration = $this->serialize($node->getConfiguration()); // $nodeData->id = $workflow->getId(); $nodeData->node_class = $nodeClass; $nodeData->node_configuration = $nodeConfiguration; $nodeData->workflow_id = $newWorkflowData->id; $nodeData->save(); $node->setId($nodeData->node_id); } // Connect node table rows. foreach ($workflow->getNodes() as $node) { foreach ($node->getOutNodes() as $outNode) { $nodeConnData = new NodeConnection(); $nodeConnData->incoming_node_id = $node->getId(); $nodeConnData->outgoing_node_id = $outNode->getId(); $nodeConnData->save(); } } // Write variable handler row foreach ($workflow->getVariableHandlers() as $variable => $class) { $varHandlerData = new VariableHandler(); $varHandlerData->id = $workflow->getId(); $varHandlerData->variable = $variable; $varHandlerData->class = $class; $varHandlerData->save(); } $this->_conn->commit(); } catch (Doctrine_Exception $e) { $conn->rollback(); throw new Axiom_Workflow_Exception( 'Could not load definition from db.' ); } }