/** * @todo: docs */ public function start(midgard_object $object, array $args = null) { if (!midgardmvc_core::get_instance()->authentication->is_user()) { return false; } $user = midgardmvc_core::get_instance()->authentication->get_user(); $workflow = $this->get(); $storage = new midgard_query_storage('midgardmvc_helper_workflow_execution'); $q = new midgard_query_select($storage); $q->set_constraint(new midgard_query_constraint(new midgard_query_property('metadata.creator'), '=', new midgard_query_value($user->person))); $q->execute(); $execs = $q->list_objects(); foreach ($execs as $exec) { $variables = unserialize($exec->variables); if ($variables['package_instance'] == $object->guid) { midgardmvc_core::get_instance()->log(__CLASS__, 'Re-use unfinished workflow execution (' . $exec->id . ')', 'info'); return self::resume($exec->guid, $variables); } } $execution = new midgardmvc_helper_workflow_execution_interactive($workflow); $execution->setVariable('package_instance', $object->guid); $execution->start(); $values = array(); if (!$execution->hasEnded()) { $values['execution'] = $execution->guid; return $values; } return $values; }