/** * Create job configuration */ public function createJobconf($activity, $settings) { $content = array(); $content["type"] = "virtual"; $content["platform"] = $settings['platform']; $content["expirationInMinutes"] = 3; $content["reward"] = 0.02; $content["workerunitsPerUnit"] = $settings['judgmentsPerUnit']; $content["workerunitsPerWorker"] = 6; $content["unitsPerTask"] = 3; $content["title"] = $settings['filename']; $content["description"] = "N/A"; $content["keywords"] = "sound annotation"; $content["instructions"] = ""; $hash = md5(serialize([$content])); $entity = JobConfiguration::withTrashed()->where('hash', $hash)->first(); // check if file already exists if ($entity) { // do not delete this on rollback $entity->_existing = true; array_push($this->status['notice'], "Existing job configuration found (" . $entity->_id . ")"); } else { $entity = new Entity(); $entity->type = "jobconf"; $entity->project = $settings['project']; $entity->tags = array($settings['documentType']); $entity->documentType = $settings['documentType']; $entity->content = $content; $entity->hash = $hash; $entity->activity_id = $activity; $entity->save(); array_push($this->status['success'], "Job configuration created (" . $entity->_id . ")"); } return $entity; }
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->type = "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"); } $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 a selected, newest jcbase $maxi = Template::where("type", $jcco['type'])->max('version'); $jcbase = Template::where("type", $jcco['type'])->where('version', $maxi)->first(); if (!isset($jcbase)) { Session::flash('flashError', "template not found: " . $jcco['type']); 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"); } $jcco['platform'] = array("DrDetectiveGamingPlatform"); //TODOJORAN $jcco['description'] = Input::get('description'); $jcco['title'] = $jcco['title'] . "[[" . $jcco['type'] . "(" . $batch->_id . ", " . $batch->domain . ", " . $batch->format . ")]]"; ///////// PUT $jcco['platform'] = array("cf2"); $jc->content = $jcco; if ($own) { $_tt = 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 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 = "job"; $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 = App::make("cf2"); // $platform = App::make("DrDetectiveGamingPlatform"); //TODOJORAN $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"); } }