/** * * Load all Slots and Fields for a workflow and then send the email * * @param int $versionId, id of the current workflowversion * @param int $templateId, id of the current workflowtemplate * @param int $userId, userid * @param sfContext $context, context * @param String $serverUrl, server url */ public function __construct($versionId, $templateId, $userId, sfContext $context, $serverUrl) { if($this->checkSendingRight() == true) { $this->serverUrl = $serverUrl; $this->userId = $userId; $this->context = $context; $this->userSettings = new UserMailSettings($userId); $this->versionId = $versionId; $this->templateId = $templateId; $this->workflowSettings = WorkflowVersionTable::instance()->getWorkflowVersionById($versionId); $this->workflowDetailsObj = new WorkflowDetail(false); $this->workflowDetailsObj->setServerUrl($serverUrl); $this->workflowDetailsObj->setCulture($this->userSettings->userSettings['language']); $this->workflowDetailsObj->setContext($context); $this->setWorkflowDetailData(); $this->setAttachments(); $this->workflowEditObj = new WorkflowEdit(false); $this->workflowEditObj->setServerUrl($serverUrl); $this->workflowEditObj->setContext($context); $this->workflowEditObj->setCulture($this->userSettings->userSettings['language']); $this->workflowEditObj->setUserId($this->userId); $this->slots = $this->workflowEditObj->buildSlots($this->workflowSettings , $this->versionId); $this->makeDecission(); } }
protected function execute($arguments = array(), $options = array()) { $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection(); $context = sfContext::createInstance($this->configuration); sfProjectConfiguration::getActive()->loadHelpers('Partial', 'I18N', 'Url'); $serverUrl = $options['setenvironment'] == '' ? $serverUrl = $options['host'] : $serverUrl = $options['host'] . '/' . $options['setenvironment']; $workflows = WorkflowVersionTable::instance()->getWorkflowsToStart(time())->toArray(); foreach($workflows as $workflow) { $sender = WorkflowTemplateTable::instance()->getWorkflowTemplateById($workflow['workflowtemplate_id'])->toArray(); $userSettings = new UserMailSettings($sender[0]['sender_id']); $sendMail = new SendStartWorkflowEmail($userSettings, $context, $workflow, $sender, $serverUrl); $workflowTemplate = WorkflowTemplateTable::instance()->getWorkflowTemplateByVersionId($workflow['id']); WorkflowVersionTable::instance()->startWorkflowInFuture($workflow['id']); $sendToAllSlotsAtOnce = $workflowTemplate[0]->getMailinglistVersion()->toArray(); if($sendToAllSlotsAtOnce[0]['sendtoallslotsatonce'] == 1) { $calc = new CreateWorkflow($workflow['id']); $calc->setServerUrl($serverUrl); $calc->setContext($context); $calc->addAllSlots(); } else { $calc = new CreateWorkflow($workflow['id']); $calc->setServerUrl($serverUrl); $calc->setContext($context); $calc->addSingleSlot(); } } }
/** * Function sets SendToAllAtOnce Flag of the Worklfow and also sets the WorkflowTemplateId */ public function setSendToAllAtOnce() { $workflow = WorkflowVersionTable::instance()->getWorkflowVersionById($this->version_id); $workflowVersion = WorkflowTemplateTable::instance()->getWorkflowTemplateByVersionId($this->version_id); $this->workflow = $workflow->toArray(); $this->workflowversion = $workflowVersion->toArray(); $template = MailinglistVersionTable::instance()->getSingleVersionById($workflowVersion[0]->getMailinglisttemplateversionId())->toArray(); $this->sendToAllAtOnce = $template[0]['sendtoallslotsatonce']; $this->workflowtemplate_id = $workflow[0]->getWorkflowtemplateId(); }
/** * Action loads an IFrame for the email, when settings are set IFRAME and HTML * the template getIframeSuccess.php adds the needed fields to the iframe * @param sfWebRequest $request * @return <type> */ public function executeGetIFrame(sfWebRequest $request) { sfLoader::loadHelpers('Url', 'I18N'); $serverUrl = str_replace('/layout', '', url_for('layout/index', true)); $versionId = $request->getParameter('versionid'); $templateId = $request->getParameter('workflowid'); $userId = $request->getParameter('userid'); $userSettings = new UserMailSettings($userId); $context = sfContext::getInstance(); $sf_i18n = $context->getI18N(); $sf_i18n->setCulture($userSettings->userSettings['language']); $this->linkto = $context->getI18N()->__('Direct link to workflow' ,null,'sendstationmail'); $wfSettings = WorkflowVersionTable::instance()->getWorkflowVersionById($versionId); $workflow = $wfSettings[0]->getWorkflowTemplate()->toArray(); $detailObj = new WorkflowDetail(false); $detailObj->setServerUrl($serverUrl); $detailObj->setCulture($userSettings->userSettings['language']); $detailObj->setContext($context); $editObj = new WorkflowEdit(false); $editObj->setServerUrl($serverUrl); $editObj->setContext($context); $editObj->setCulture($userSettings->userSettings['language']); $editObj->setUserId($userId); $this->slots = $editObj->buildSlots($wfSettings , $versionId); $content['workflow'][0] = $context->getI18N()->__('You have to fill out the fields in the workflow' ,null,'sendstationmail'); $content['workflow'][1] = $workflow[0]['name']; $content['workflow'][2] = $context->getI18N()->__('Slot' ,null,'sendstationmail'); $content['workflow'][3] = $context->getI18N()->__('Yes' ,null,'sendstationmail'); $content['workflow'][4] = $context->getI18N()->__('No' ,null,'sendstationmail'); $content['workflow'][5] = $context->getI18N()->__('Field' ,null,'sendstationmail'); $content['workflow'][6] = $context->getI18N()->__('Value' ,null,'sendstationmail'); $content['workflow'][7] = $context->getI18N()->__('File' ,null,'sendstationmail'); $content['workflow'][8] = $context->getI18N()->__('Accept Workflow' ,null,'sendstationmail'); $content['workflow'][9] = $context->getI18N()->__('Deny Workflow' ,null,'sendstationmail'); $content['workflow'][10] = $context->getI18N()->__('Save' ,null,'sendstationmail'); $this->error = $request->getParameter('error',0); $this->serverPath = $serverUrl; $this->workflowverion = $versionId; $this->userid = $userId; $this->workflow = $templateId; $this->text = $content; $this->setLayout(false); $this->setTemplate('getIFrame'); return sfView::SUCCESS; }
/** * * @param array $data, contains reason for deny * @param int $workflowid, workflow id * @param int $userId, user id * @param int $versionId, version id * @return <type> */ public function denyWorkflow(array $data, $workflowid, $userId, $versionId) { WorkflowTemplateTable::instance()->stopWorkflow($workflowid, $userId); WorkflowVersionTable::instance()->setEndReason($versionId, $data['workfloweditAcceptWorkflow_reason']); $workflowToStop = WorkflowProcessUserTable::instance()->getWaitingStationToStopByUser($versionId); foreach($workflowToStop as $itemToChange) { $pdoObj = Doctrine::getTable('WorkflowProcessUser')->find($itemToChange->getId()); $pdoObj->setDecissionstate('STOPPEDBYUSER'); $pdoObj->setDateofdecission(time()); $pdoObj->save(); } return true; }
/** * Load all data, wich is needed to fill out an workflow * generalData like sender, creation date is loaded * slotData, all slots to fill out * workflowAttachment, load public attachments * userData: tree on left side, to show current process * showName: flag if users can be shown in the left side or not * * @param sfWebRequest $request * @return <type> */ public function executeLoadWorkflowData(sfWebRequest $request) { sfLoader::loadHelpers('EndAction'); $detailsObj = new WorkflowDetail(); $detailsObj->setUser($this->getUser()); $detailsObj->setCulture($this->getUser()->getCulture()); $detailsObj->setContext($this->getContext()); $workflowsettings = WorkflowVersionTable::instance()->getWorkflowVersionById($request->getParameter('versionid')); $generalData = $detailsObj->buildHeadLine($workflowsettings); $attachments = $detailsObj->buildAttachments($workflowsettings, $request->getParameter('versionid')); $userData = $detailsObj->buildUserData($workflowsettings, $request->getParameter('versionid')); $workflowDecission = WorkflowTemplateTable::instance()->getWorkflowTemplateById($workflowsettings[0]->getWorkflowtemplateId())->toArray(); $endAction = getEndAction($workflowDecission[0]['endaction']); $slotObj = new WorkflowEdit(); $slotObj->setUser($this->getUser()); $slotObj->setCulture($this->getUser()->getCulture()); $slotObj->setContext($this->getContext()); $slotData = $slotObj->buildSlots($workflowsettings, $request->getParameter('versionid')); $this->renderText('{"generalData":'.json_encode($generalData).',"slotData":'.json_encode($slotData).', "workflowAttachment" : '.json_encode($attachments).', "userData" : '.json_encode($userData).',"showName": '.$endAction[0].'}'); return sfView::NONE; }
public function setWorkflowTemplateId() { $template = WorkflowVersionTable::instance()->getWorkflowVersionById($this->version_id); $this->workflowtemplate_id = $template[0]->getWorkflowtemplateId(); }
public function stopWorkflow($workflow_id, $version_id, $user_id, $endreason) { WorkflowTemplateTable::instance()->stopWorkflow($workflow_id, $user_id); WorkflowVersionTable::instance()->setEndReason($version_id, $endreason); WorkflowProcessUserTable::instance()->setWaitingStationToStoppedByUser($version_id); }
/** * Start a workflow and its processes. Needed to start a workflow, also if it is started in future * * @param sfWebRequest $request * @return <type> */ public function executeStartWorkflow(sfWebRequest $request) { WorkflowVersionTable::instance()->startWorkflow($request->getParameter('versionid')); $workflowVersion = WorkflowTemplateTable::instance()->getWorkflowTemplateByVersionId($request->getParameter('versionid')); $template = MailinglistVersionTable::instance()->getSingleVersionById($workflowVersion[0]->getMailinglisttemplateversionId())->toArray(); if($template[0]['sendtoallslotsatonce'] == 1) { $calc = new CreateWorkflow($request->getParameter('versionid')); $calc->addAllSlots(); } else { $calc = new CreateWorkflow($request->getParameter('versionid')); $calc->addSingleSlot(); } return sfView::NONE; }
public function getFieldItems(WorkflowSlotField $field, $type, sfContext $context, $versionid) { $result = array(); $a = 0; switch ($type) { case 'TEXTFIELD': $items = WorkflowSlotFieldTextfieldTable::instance()->getAllItemsByWorkflowFieldId($field->getId())->toArray(); $fieldData = FieldTextfieldTable::instance()->getTextfieldByFieldId($field->getFieldId())->toArray(); $replaceObj = new ReplaceTags($versionid, $items[0]['value'], $this->culture, $context); $value = $replaceObj->getText(); $result['value'] = $value; $result['regex'] = $fieldData[0]['regex']; $result['id'] = $items[0]['id']; break; case 'CHECKBOX': $items = WorkflowSlotFieldCheckboxTable::instance()->getAllItemsByWorkflowFieldId($field->getId())->toArray(); $result['value'] = $items[0]['value']; $result['id'] = $items[0]['id']; break; case 'NUMBER': $items = WorkflowSlotFieldNumberTable::instance()->getAllItemsByWorkflowFieldId($field->getId())->toArray(); $fieldData = FieldNumberTable::instance()->getNumberByFieldId($field->getFieldId())->toArray(); if($fieldData[0]['comboboxvalue'] != 'EMPTY') { $result['emptytext'] = $context->getI18N()->__($fieldData[0]['comboboxvalue'] ,null,'field'); } else { $result['emptytext'] = $fieldData[0]['regex']; } $result['value'] = $items[0]['value']; $result['regex'] = $fieldData[0]['regex']; $result['id'] = $items[0]['id']; break; case 'DATE': $items = WorkflowSlotFieldDateTable::instance()->getAllItemsByWorkflowFieldId($field->getId())->toArray(); $format = FieldDateTable::instance()->getDateByFieldId($field->getFieldId())->toArray(); $result['value'] = $items[0]['value']; $result['dateformat'] = $format[0]['dateformat']; $result['regex'] = $format[0]['regex']; $result['id'] = $items[0]['id']; break; case 'TEXTAREA': $items = WorkflowSlotFieldTextareaTable::instance()->getAllItemsByWorkflowFieldId($field->getId())->toArray(); $textarea = FieldTextareaTable::instance()->getTextareaById($field->getFieldId())->toArray(); $result['value'] = $items[0]['value']; $result['contenttype'] = $textarea[0]['contenttype']; $result['id'] = $items[0]['id']; break; case 'RADIOGROUP': $items = WorkflowSlotFieldRadiogroupTable::instance()->getAllItemsByWorkflowFieldId($field->getId()); foreach($items as $item) { $name = FieldRadiogroupTable::instance()->getRadiogroupItemById($item->getFieldradiogroupId())->toArray(); $result[$a]['value'] = $item->getValue(); $result[$a]['id'] = $item->getId(); $result[$a++]['name'] = $name[0]['value']; } break; case 'CHECKBOXGROUP': $items = WorkflowSlotFieldCheckboxgroupTable::instance()->getAllItemsByWorkflowFieldId($field->getId()); foreach($items as $item) { $name = FieldCheckboxgroupTable::instance()->getCheckboxgroupItemById($item->getFieldcheckboxgroupId())->toArray(); $result[$a]['value'] = $item->getValue(); $result[$a]['id'] = $item->getId(); $result[$a++]['name'] = $name[0]['value']; } break; case 'COMBOBOX': $items = WorkflowSlotFieldComboboxTable::instance()->getAllItemsByWorkflowFieldId($field->getId()); foreach($items as $item) { $name = FieldComboboxTable::instance()->getComboboxItemById($item->getFieldcomboboxId())->toArray(); $result[$a]['value'] = $item->getValue(); $result[$a]['id'] = $item->getId(); $result[$a++]['name'] = $name[0]['value']; } break; case 'FILE': $file = WorkflowSlotFieldFileTable::instance()->getAllItemsByWorkflowFieldId($field->getId())->toArray(); $workflowtemplate = WorkflowVersionTable::instance()->getWorkflowVersionById($versionid)->toArray(); $result['filepath'] = sfConfig::get('sf_upload_dir') . '/' . $workflowtemplate[0]['workflowtemplate_id'] . '/' . $versionid . '/' . $file[0]['hashname'] ; $result['hashname'] = $file[0]['hashname']; $result['filename'] = $file[0]['filename']; $url = $this->serverUrl . '/file/ShowAttachment'; $plainUrl = $this->serverUrl . '/file/ShowAttachment'; $url .= '/workflowid/' . $workflowtemplate[0]['workflowtemplate_id'] . '/versionid/' . $versionid. '/attachmentid/' . $file[0]['id'] . '/file/1'; $plainUrl .= '/workflowid/' . $workflowtemplate[0]['workflowtemplate_id'] . '/versionid/' . $versionid. '/attachmentid/' . $file[0]['id'] . '/file/1'; $result['plainurl'] = $plainUrl; $result['url'] = $url; $result['link'] = '<a href="'.$url.'" target="_blank">'.$result['filename'].'</a>'; break; } return $result; }
/** * Set the workflowtemplate id */ public function setWorkflowId() { $workflow = WorkflowVersionTable::instance()->getWorkflowVersionById($this->version_id)->toArray(); $this->workflow_id = $workflow[0]['workflowtemplate_id']; }
/** * Get userdefined field * * @param String $type, userdefined1, userdefined2 */ public function getFields($type, $versionId) { $view = $this->user->getAttribute('userWorkflowSettings'); $result = ''; foreach($view as $singleView) { if($singleView['store'] == $type AND $singleView['fieldid'] > -1) { $wfItem = WorkflowVersionTable::instance()->getFieldByWorkflowversionIdAndFieldId($singleView['fieldid'], $versionId)->toArray(); if(empty($wfItem) == true) { return ''; } else { $slots = WorkflowSlotTable::instance()->getFieldBySlotIdAndFieldId($singleView['fieldid'], $versionId)->toArray(); $fields = WorkflowSlotFieldTable::instance()->getWorkflowSlotFieldBySlotIdAndFieldId($slots[0]['id'],$singleView['fieldid'])->toArray(); $theType = FieldTable::instance()->getFieldById($fields[0]['field_id'])->toArray(); if(!empty($theType)) { switch ($theType[0]['type']) { case 'TEXTFIELD': $value = WorkflowSlotFieldTextfieldTable::instance()->getAllItemsByWorkflowFieldId($fields[0]['id'])->toArray(); $result = $value[0]['value']; return $result; break; case 'CHECKBOX': $value = WorkflowSlotFieldCheckboxTable::instance()->getAllItemsByWorkflowFieldId($fields[0]['id'])->toArray(); $result = $value[0]['value'] == 1 ? $this->context->getI18N()->__('Yes' ,null,'workflowmanagement') : $this->context->getI18N()->__('No' ,null,'workflowmanagement'); return $result; break; case 'NUMBER': $value = WorkflowSlotFieldNumberTable::instance()->getAllItemsByWorkflowFieldId($fields[0]['id'])->toArray(); $result = $value[0]['value']; return $result; break; case 'DATE': $value = WorkflowSlotFieldDateTable::instance()->getAllItemsByWorkflowFieldId($fields[0]['id'])->toArray(); $result = $value[0]['value']; return $result; break; case 'TEXTAREA': $value = WorkflowSlotFieldTextareaTable::instance()->getAllItemsByWorkflowFieldId($fields[0]['id'])->toArray(); $result = $value[0]['value']; return $result; break; case 'RADIOGROUP': $value = WorkflowSlotFieldRadiogroupTable::instance()->getAllItemsByWorkflowFieldId($fields[0]['id'])->toArray(); $result = $value[0]['value'] == 1 ? $this->context->getI18N()->__('Yes' ,null,'workflowmanagement') : $this->context->getI18N()->__('No' ,null,'workflowmanagement'); return $result; break; case 'CHECKBOXGROUP': $value = WorkflowSlotFieldCheckboxgroupTable::instance()->getAllItemsByWorkflowFieldId($fields[0]['id'])->toArray(); $result = $value[0]['value'] == 1 ? $this->context->getI18N()->__('Yes' ,null,'workflowmanagement') : $this->context->getI18N()->__('No' ,null,'workflowmanagement'); return $result; break; case 'COMBOBOX': $value = WorkflowSlotFieldComboboxTable::instance()->getAllItemsByWorkflowFieldId($fields[0]['id'])->toArray(); $result = $value[0]['value'] == 1 ? $this->context->getI18N()->__('Yes' ,null,'workflowmanagement') : $this->context->getI18N()->__('No' ,null,'workflowmanagement'); return $result; break; case 'FILE': $value = WorkflowSlotFieldFileTable::instance()->getAllItemsByWorkflowFieldId($fields[0]['id'])->toArray(); $url = (url_for('layout/index',true)); $url = str_replace('/layout', '', $url); $result['filepath'] = $url . '/file/showAttachment/workflowid/' . $wfItem[0]['workflowtemplate_id'] . '/versionid/' . $wfItem[0]['id'] . '/attachmentid/' . $value[0]['id'] . '/file/1'; $fileUrl = '<a href="'.$result['filepath'].'">'.$value[0]['filename'].'</a>'; return $fileUrl; break; } } else { return ''; } } } } }
/** * the Action restarts the workflow * @param sfWebRequest $request * @return <type> */ public function executeRestartWorkflow(sfWebRequest $request) { sfLoader::loadHelpers('Url'); $context = sfContext::getInstance(); $context->getConfiguration()->loadHelpers('Partial', 'I18N', 'Url', 'Date', 'CalculateDate', 'ColorBuilder', 'Icon', 'EndAction'); $createWorkObj = new PrepareWorkflowData(); $startDate = array(); $version_id = $request->getParameter('versionid'); $newValue = $request->getParameter('restartWorkflowFirstTab_useoldvalues',0); // set flag if values form previous version will be used or from the default value of the fields $endreason = $createWorkObj->createEndreason($request->getPostParameter('restartWorkflowFirstTabSettings', array())); // set additional settings $startDate = $createWorkObj->createStartDate('', ''); // startdate is always at the moment $content = $createWorkObj->createRestartContenttype($request->getPostParameters());// ste contenttype of the additional text $workflowtemplate_id = WorkflowVersionTable::instance()->getWorkflowVersionById($version_id)->toArray(); // load the current workflowversion WorkflowTemplateTable::instance()->updateEndaction($workflowtemplate_id[0]['id'],$endreason); // update the endaction/additionalsettings $currentVersion = WorkflowVersionTable::instance()->getLastVersionById($workflowtemplate_id[0]['workflowtemplate_id'])->toArray(); // load the last workflow $slots = WorkflowSlotTable::instance()->getSlotByVersionId($version_id); // get all slots for the current workflow WorkflowVersionTable::instance()->setVersionInactive($version_id); // set the current version inactive WorkflowTemplateTable::instance()->restartWorkflow($workflowtemplate_id[0]['workflowtemplate_id']); // remove stopflag from template $wfRestart = new RestartWorkflow(); // set flag if workflow uses old values or not $wfRestart->setNewValue($newValue); //load the data for fields. they contain old values or the default field values. the data array contains slots and its fields, values and users of the last version $data = $wfRestart->buildSaveData($slots); // create a new instance of the workflow $wfVersion = new WorkflowVersion(); $wfVersion->setWorkflowtemplateId($workflowtemplate_id[0]['workflowtemplate_id']); $wfVersion->setActiveversion(1); $wfVersion->setContent($content['content']); $wfVersion->setStartworkflowAt($startDate['startworkflowat']); $wfVersion->setContenttype($content['contenttype']); $wfVersion->setWorkflowisstarted($startDate['workflowisstarted']); $wfVersion->setVersion($currentVersion[0]['version']+1); $wfVersion->save(); $newVersionId = $wfVersion->getId(); /* * to transfer the last version of the workflow into a new one, it is needed to copy * the old version and set new relations (ids). $slotCounter stores the id's of the * new created slots, user and userproeccess, to replace the old values with the new ones. */ $dataStore = array(); $slotCounter = 0; foreach($data as $slot) { $singleSlot = new WorkflowSlot(); $singleSlot->setWorkflowversionId($newVersionId); $singleSlot->setSlotId($slot['slot_id']); $singleSlot->setPosition($slot['position']); $singleSlot->save(); $slotId = $singleSlot->getId(); // ids of created slots $dataStore[$slotCounter]['slot_id'] = $slotId; $fields = $slot['fields']; // the fields of the slot $users = $slot['users']; // the users of the slot // create the fields for the slot and set the value foreach($fields as $field) { $newField = new WorkflowSlotField(); $newField->setWorkflowslotId($slotId); $newField->setFieldId($field['field_id']); $newField->setPosition($field['position']); $newField->save(); $fieldId = $newField->getId(); switch($field['type']) { case 'TEXTFIELD': $newField = new WorkflowSlotFieldTextfield(); $newField->setWorkflowslotfieldId($fieldId); $newField->setValue($field['items'][0]['value']); $newField->save(); break; case 'CHECKBOX': $newField = new WorkflowSlotFieldCheckbox(); $newField->setWorkflowslotfieldId($fieldId); $newField->setValue($field['items'][0]['value']); $newField->save(); break; case 'NUMBER': $newField = new WorkflowSlotFieldNumber(); $newField->setWorkflowslotfieldId($fieldId); $newField->setValue($field['items'][0]['value']); $newField->save(); break; case 'DATE': $newField = new WorkflowSlotFieldDate(); $newField->setWorkflowslotfieldId($fieldId); $newField->setValue($field['items'][0]['value']); $newField->save(); break; case 'TEXTAREA': $newField = new WorkflowSlotFieldTextarea(); $newField->setWorkflowslotfieldId($fieldId); $newField->setValue($field['items'][0]['value']); $newField->save(); break; case 'RADIOGROUP': $items = $field['items']; foreach($items as $item) { $newField = new WorkflowSlotFieldRadiogroup(); $newField->setWorkflowslotfieldId($fieldId); $newField->setFieldradiogroupId($item['fieldradiogroup_id']); $newField->setValue($item['value']); $newField->setPosition($item['position']); $newField->save(); } break; case 'CHECKBOXGROUP': $items = $field['items']; foreach($items as $item) { $newField = new WorkflowSlotFieldCheckboxgroup(); $newField->setWorkflowslotfieldId($fieldId); $newField->setFieldcheckboxgroupId($item['fieldradiogroup_id']); $newField->setValue($item['value']); $newField->setPosition($item['position']); $newField->save(); } break; case 'COMBOBOX': $items = $field['items']; foreach($items as $item) { $newField = new WorkflowSlotFieldCombobox(); $newField->setWorkflowslotfieldId($fieldId); $newField->setFieldcomboboxId($item['fieldradiogroup_id']); $newField->setValue($item['value']); $newField->setPosition($item['position']); $newField->save(); } break; case 'FILE': $moveFile = new FileUpload(); $moveFile->moveFile($field['items'][0], $newVersionId,$workflowtemplate_id[0]['workflowtemplate_id'], $request->getParameter('versionid')); $newField = new WorkflowSlotFieldFile(); $newField->setWorkflowslotfieldId($fieldId); $newField->setFilename($field['items'][0]['filename']); $newField->setHashname($field['items'][0]['hashname']); $newField->save(); break; } } // save the users for a slot $userCounter = 0; foreach($users as $user) { $wfSlotUser = new WorkflowSlotUser(); $wfSlotUser->setWorkflowslotId($slotId); $wfSlotUser->setPosition($user['position']); $wfSlotUser->setUserId($user['user_id']); $wfSlotUser->save(); // store the new id of the user and its user_id $dataStore[$slotCounter]['slotuser_id'][$userCounter]['id'] = $wfSlotUser->getId(); $dataStore[$slotCounter]['slotuser_id'][$userCounter++]['user_id'] = $user['user_id']; } $slotCounter++; } /** * save files from file grid in overview. * files are moved forom ext * $keys[0]['uploadfile']->file1 * $keys[1]['uploadfile']->file2 * it is also necessary to use $_FILES instead of $request->getFiles() */ $files = $_FILES; $keys = array(); $keys = array_keys($files); for($a=0;$a<count($keys);$a++) { $key = $keys[$a]; if(substr_count($key, 'uploadfile') == 1) { $fileUpload = new FileUpload(); $fileUpload->uploadFile($files[$key],$newVersionId,$workflowtemplate_id[0]['workflowtemplate_id']); } } $workflowTemplate = WorkflowTemplateTable::instance()->getWorkflowTemplateByVersionId($version_id)->toArray(); $sendToAllSlotsAtOnce = MailinglistVersionTable::instance()->getActiveVersionById($workflowTemplate[0]['mailinglisttemplateversion_id'])->toArray(); if($request->getPostParameter('restartWorkflowFirstTab_startpoint') == 'BEGINNING'){ // workflow starts from beginning // check if mailinglist is send to all slots at once, no workflowprocessuser data is needed to be loaded if($sendToAllSlotsAtOnce[0]['sendtoallslotsatonce'] == 1) { // create all slots $calc = new CreateWorkflow($newVersionId); $calc->setServerUrl(str_replace('/layout', '', url_for('layout/index',true))); $calc->setContext($context); $calc->addAllSlots(); } else { // create a single slot $calc = new CreateWorkflow($newVersionId); $calc->setServerUrl(str_replace('/layout', '', url_for('layout/index',true))); $calc->setContext($context); $calc->addSingleSlot(); } } else if ($request->getPostParameter('restartWorkflowFirstTab_startpoint') == 'LASTSTATION') { // workflow is send to last station $wfRestart = new RestartWorkflow(); $wfRestart->setContext($context); $wfRestart->setServerUrl(str_replace('/layout', '', url_for('layout/index',true))); // load the workflowprocessuser / workflowprocess data of the old version $lastStationdata = $wfRestart->getRestartData($version_id); // write the oldversions workflowprocessuser/workflowprocess and set the new id's from $dataStore array $wfRestart->restartAtLastStation($lastStationdata, $dataStore, $newVersionId, $workflowtemplate_id[0]['workflowtemplate_id']); } else { // workflow will start at specific station $slotOrder = array(); $slotOrder = explode('__', $request->getPostParameter('restartWorkflowFirstTab_startpointid')); $slotPosition = $slotOrder[1]; // Slot Position worklfow must start $userPosition = $slotOrder[3]; // position of the user in the slot. e.g. Slot 3 and User 2 $currentUserSlotId = $dataStore[0]['slotuser_id'][0]['id']; // get Id of the first WorkflowSlot of the restarted Workflow $newUserSlotId = $dataStore[$slotPosition-1]['slotuser_id'][$userPosition-1]['id']; // get Id of the first WorkflowSlotUser of the restarted Workflow $direction = 'UP'; // direction is UP! // write first Process $wfProcess = new WorkflowProcess(); $wfProcess->setWorkflowtemplateId($workflowtemplate_id[0]['workflowtemplate_id']); $wfProcess->setWorkflowversionId($newVersionId); $wfProcess->setWorkflowslotId($dataStore[0]['slot_id']); $wfProcess->save(); $wfProcessId = $wfProcess->getId(); // write first user $wfProcessUser = new WorkflowProcessUser(); $wfProcessUser->setWorkflowprocessId($wfProcessId); $wfProcessUser->setWorkflowslotuserId($dataStore[0]['slotuser_id'][0]['id']); $wfProcessUser->setUserId($dataStore[0]['slotuser_id'][0]['user_id']); $wfProcessUser->setInprogresssince(time()); $wfProcessUser->setDecissionstate('WAITING'); $wfProcessUser->setDateofdecission(time()); $wfProcessUser->setResendet(0); $wfProcessUser->save(); // use Set Nextstation with direction UP from slot 1 user 1 to defined user e.g. slot 3 and user 2 $calc = new SetStation($newVersionId, $newUserSlotId, $currentUserSlotId, $direction, $context, str_replace('/layout', '', url_for('layout/index',true))); } /** * set the response of the action. * it is needed to use this response when using fileupload in extjs with symfony. * extjs is uploading files using iframe. this iframe needs text/html as response */ $this->getResponse()->setHttpHeader('Content-Type','text/html; charset=utf-8'); $json = array('success' => true); $string = '<textarea>'.json_encode($json).'</textarea>'; $this->renderText($string); return sfView::NONE; }
public function setWorkflowVersion($versionId) { $data = WorkflowVersionTable::instance()->getWorkflowVersionById($versionId)->toArray(); $this->workflowVersion = $data[0]; }
/** * Save the selected station from the popup * * @param sfWebRequest $request * @return <type> */ public function executeSetNewStation(sfWebRequest $request) { sfLoader::loadHelpers('Url'); $context = sfContext::getInstance(); $context->getConfiguration()->loadHelpers('Partial', 'I18N', 'Url', 'Date', 'CalculateDate', 'ColorBuilder', 'Icon', 'EndAction'); $calc = new SetStation($request->getParameter('versionid'),$request->getParameter('newworkflowuserslotid'), $request->getParameter('currentworkflowuserslotid'), $request->getParameter('direction'), $context, str_replace('/layout', '', url_for('layout/index',true))); $detailsObj = new WorkflowDetail(); $detailsObj->setUser($this->getUser()); $detailsObj->setCulture($this->getUser()->getCulture()); $detailsObj->setContext($this->getContext()); $workflowsettings = WorkflowVersionTable::instance()->getWorkflowVersionById($request->getParameter('versionid')); $userData = $detailsObj->buildUserData($workflowsettings, $request->getParameter('versionid')); $this->renderText('{"detailData" : '.json_encode($userData).'}'); return sfView::NONE; }
/** * Recursive function, which calculates and creates a useragent. * The Function calculates out of an timestamp the next useragent * * The $sumUseragenttime variable is summed up by each set useragent. * $sumUseragenttime = $sumUseragenttime + (mountofUseragents * userUserSetinngsUserAgenttime) * * @param array $userAgent, current Useragent * @param int $sumUseragenttime, useragent time which is summed up by each written useragent * @param int $userAgentOffset, offset for the array */ public function setNewUserAgent(array $userAgent, $sumUseragenttime, $userAgentOffset) { if($this->checkSubObj->cronJobSetting == 1){ if($this->currentTime > ($sumUseragenttime + $this->process['inprogresssince'])) { $decissionstate = 'USERAGENTSET'; $userAgentOffset++; $nextUserAgent = $this->getNextUserAgent($userAgentOffset); if(is_array($nextUserAgent) == true) { // a useragent was found $sumUseragenttime = $sumUseragenttime + $this->process['useragenttime']; WorkflowProcessUserTable::instance()->setProcessToUseragentSet($this->process['id']); $processObj = new WorkflowProcessUser(); $processObj->setWorkflowprocessId($this->process['workflowprocess_id']); $processObj->setWorkflowslotuserId($this->process['workflowslotuser_id']); $processObj->setUserId($userAgent['useragent_id']); $processObj->setInprogresssince(time()); $processObj->setDateofdecission(time()); $processObj->setDecissionstate('USERAGENTSET'); $processObj->setUseragentsetbycronjob(1); $processObj->setIsuseragentof($this->process['id']); $processObj->setResendet(0); $processObj->save(); $this->setNewUserAgent($nextUserAgent, $sumUseragenttime, $userAgentOffset); } else { // last Useragent in list is selected $decissionstate = 'WAITING'; } } else { $decissionstate = 'WAITING'; } } else { $decissionstate = 'WAITING'; } if($decissionstate == 'WAITING') { WorkflowProcessUserTable::instance()->setProcessToUseragentSet($this->process['id']); $processObj = new WorkflowProcessUser(); $processObj->setWorkflowprocessId($this->process['workflowprocess_id']); $processObj->setWorkflowslotuserId($this->process['workflowslotuser_id']); $processObj->setUserId($userAgent['useragent_id']); $processObj->setInprogresssince(time()); $processObj->setDateofdecission(time()); $processObj->setDecissionstate('WAITING'); $processObj->setUseragentsetbycronjob(1); $processObj->setIsuseragentof($this->process['id']); $processObj->setResendet(0); $processObj->save(); // get Additional Data, to send an email $workflowSettings = WorkflowProcessTable::instance()->getWorkflowProcessById($this->process['id']); $workflowVersionTable = WorkflowVersionTable::instance()->getWorkflowVersionById($workflowSettings[0]->getWorkflowversionId())->toArray(); // sendmail $mailObj = new PrepareStationEmail($workflowVersionTable[0]['id'], $workflowVersionTable[0]['workflowtemplate_id'], $userAgent['useragent_id'], $this->checkSubObj->context, $this->checkSubObj->serverUrl); } }