public function postSubmitFinal($ordersandbox = 'order') { $batch = unserialize(Session::get('batch')); $batchColumnsNewTemplate = array(); $batchColumnsExtraChosenTemplate = array(); $associationsTemplBatch = array(); $ownTemplate = false; // Use existing job configuration content (if available) if (!($jc = unserialize(Session::get('jobconf')))) { $jc = new JobConfiguration(); $jc->documentType = "jobconf"; $jcco = array(); } else { $jcco = $jc->content; } $own = false; if (Input::has('templateTypeOwn') && strlen(Input::get('templateTypeOwn')) > 0) { $jcco['type'] = Input::get('templateTypeOwn'); $batchColumns = Input::get('batchColumns'); $newNamesForBatchColumns = Input::get('newcolnames'); $newNamesForBatchColumnsArray = explode(",", $newNamesForBatchColumns); array_pop($newNamesForBatchColumnsArray); if ($batchColumns == null) { return Redirect::back()->with('flashError', "You did not choose the batch columns"); } else { foreach ($newNamesForBatchColumnsArray as $value) { $oldNewArray = explode(" - ", $value); if (in_array($oldNewArray[0], $batchColumns)) { $batchColumnsNewTemplate[$oldNewArray[0]] = $oldNewArray[1]; } } } $ownTemplate = true; $own = true; } else { $jcco['type'] = Input::get('templateType'); if ($jcco['type'] == null) { return Redirect::back()->with('flashError', "You did not fill in the type of the template"); } // Get selected, newest template $jcbase = $this->findNewestTemplate($jcco['type'], $batch->format); if ($jcbase == null) { Session::flash('flashError', "template not found"); return Redirect::to("jobs2/submit"); } if (!isset($jcbase['cml'])) { // Template must have CML field Session::flash('flashError', "No template details in this template"); return Redirect::to("jobs2/submit"); } $batchColumnsExtraChosenTemplate = Input::get('addMoreColumns'); $fieldsInChosenTemplate = Input::get('tempFields'); $arrayFields = explode(",", $fieldsInChosenTemplate); foreach ($arrayFields as $field) { $association = Input::get($field); array_push($associationsTemplBatch, $field . " - " . $association); if ($association == null || $association == "---") { return Redirect::back()->with('flashError', "You did not fill in all the associations for the template fields"); } } $jcco['cml'] = $jcbase['cml']; if (isset($jcbase['css'])) { $jcco['css'] = $jcbase['css']; } if (isset($jcbase['instructions'])) { $jcco['instructions'] = $jcbase['instructions']; } if (isset($jcbase['js'])) { $jcco['js'] = $jcbase['js']; } $jcco['template_id'] = $jcbase['_id']; } if (Input::has('titleOwn') && strlen(Input::get('titleOwn')) > 0) { $jcco['title'] = Input::get('titleOwn'); } else { $jcco['title'] = Input::get('title'); } if ($jcco['title'] == null) { return Redirect::back()->with('flashError', "You did not fill in the title of the template"); } // TODO: dynamically load available platforms (in case more than cf are available). // At the moment this will work for CF2 and DrDetective but it is not flexible if (isset($jcbase['platform'])) { $jcco['platform'] = [$jcbase['platform']]; } else { $jcco['platform'] = ["cf2"]; $jcco['title'] = $jcco['title'] . "[[" . $jcco['type'] . "(" . $batch->_id . ", " . $batch->domain . ", " . $batch->format . ")]]"; } $jcco['description'] = Input::get('description'); ///////// PUT $jc->content = $jcco; if ($own) { $_tt = \MongoDB\Template::where('type', $jcco['type'])->where("format", $batch->format)->first(); if (isset($_tt)) { Session::flash('flashError', "There is already a template of this type. Please rename (or select this template from dropdown list."); return Redirect::to("jobs2/submit"); } } try { // Save activity $activity = new MongoDB\Activity(); $activity->label = "Job is uploaded to crowdsourcing platform."; $activity->softwareAgent_id = 'jobcreator'; // JOB softwareAgent_id = $platform. Does this need to be the same? $activity->save(); // Save jobconf if necessary $hash = md5(serialize($jc->content)); if ($existingid = JobConfiguration::where('hash', $hash)->pluck('_id')) { //[qq] $jcid = $existingid; // Don't save, it already exists. } else { $jc->format = $batch->format; $jc->domain = $batch->domain; $jc->project = $batch->project; $jc->user_id = $batch->user_id; $jc->softwareAgent_id = $activity->softwareAgent_id; $jc->hash = $hash; $jc->activity_id = $activity->_id; $jc->save(); $jcid = $jc->_id; } // Software Agent ID which will perform the job // TODO: Fix this -- choose one of the possibly many platforms in $jcco // at the moment we are picking the first arbitrarily $job_sw_agent = $jcco['platform'][0]; // Publish jobs $j = new Job(); $j->format = $batch->format; $j->project = $batch->project; $j->domain = $batch->domain; $j->user_id = $batch->user_id; $j->type = $jc->content['type']; $j->batch_id = $batch->_id; $j->jobConf_id = $jcid; $j->softwareAgent_id = $job_sw_agent; $j->activity_id = $activity->_id; $j->iamemptyjob = "yes"; $extraInfoBatch = array(); $extraInfoBatch["batchColumnsNewTemplate"] = $batchColumnsNewTemplate; $extraInfoBatch["batchColumnsExtraChosenTemplate"] = $batchColumnsExtraChosenTemplate; $extraInfoBatch["associationsTemplBatch"] = $associationsTemplBatch; $extraInfoBatch["ownTemplate"] = $ownTemplate; $j->extraInfoBatch = $extraInfoBatch; $j->save(); //convert to publish later $j->publish($ordersandbox == 'sandbox' ? true : false); $jobs[] = $j; $successmessage = "Created job with jobConf :-)"; $platform = App::make($job_sw_agent); $platform->refreshJob($j->_id); Session::flash('flashSuccess', $successmessage); return Redirect::to("jobs"); } catch (Exception $e) { // Undo creation and delete jobs // if(isset($jobs)) // foreach($jobs as $j){ // if(isset($j->platformJobId)) // $j->undoCreation($j->platformJobId); // $j->forceDelete(); // } //delete activity if (isset($j)) { $j->forceDelete(); } if (isset($jc)) { $jc->forceDelete(); } if ($activity) { $activity->forceDelete(); } throw $e; //for debugging Session::flash('flashError', $e->getMessage()); return Redirect::to("jobs2/submit"); } }
$key = strtolower(str_replace('.', '_', $key)); $unitAttributes[$key] = $key; } // dd($unitAttributes); $_aTitles = \MongoDB\Entity::where("documentType", "jobconf")->where("format", $_format)->distinct("content.title")->get(); $_aTitles = array_flatten($_aTitles->toArray()); foreach ($_aTitles as $key => $value) { $pos = strpos($value, '[['); if ($pos > 0) { $t = trim(substr($value, 0, $pos)); if (!array_key_exists($t, $aTitles)) { $aTitles[$t] = $t; } } } $_aTypes = \MongoDB\Template::where("format", $_format)->distinct('type')->get(); $_aTypes = array_flatten($_aTypes->toArray()); foreach ($_aTypes as $key => $value) { if (!isset($aTypes[$value])) { $aTypes[$value] = $value; } } if ($phpres = Session::get('templatetype')) { if (!isset($aTypes[$phpres])) { $phpres = null; } } if ($phprest = Session::get('title')) { $pos = strpos($phprest, '[['); if ($pos > 0) { $phprest = trim(substr($phprest, 0, $pos));