/** * Pushes a given task to MobileWorks. The resource is set according * to the evalution type. * * Expects the evaluation id to be the current active record id. * * @param MobileWorks $mobileWorksApi A configured mobileWorksApi * @return void */ public function pushTask($mobileWorksApi, $redundancy, $workflowType, $blocked_users) { $this->read(null, $this->id); // create the callback url dependend of type value if ($this->data['Evaluation']['type'] == Evaluation::$TYPE_ARTICLE_TOPIC) { $callback = Configure::read('domain') . '/evaluations/returnstepone/' . $this->data['Evaluation']['id'] . '.json'; } else { $callback = Configure::read('domain') . '/evaluations/returnsteptwo/' . $this->data['Evaluation']['id'] . '.json'; } // create a project (to get an instant callback, we need a new project for every task) $p = $mobileWorksApi->Project(array('projectid' => Configure::read('version') . $this->data['Evaluation']['id'], 'webhooks' => $callback)); $daysSinceCreation = 0; $price = $this->getPrice(0); //calculate price since initial task $now = time(); $your_date = strtotime($this->data['Evaluation']['created']); $datediff = $now - $your_date; $daysSinceCreation = floor($datediff / (60 * 60 * 24)); $price = $this->getPrice($daysSinceCreation); // create the tasks for ($i = 0; $i < 3; $i++) { $t = $mobileWorksApi->Task(array('taskid' => $this->getMWTaskId($i), 'instructions' => $this->data['Evaluation']['question'], 'workflow' => $workflowType, 'blocked' => $blocked_users, 'payment' => $price)); // build choices if ($this->data['Evaluation']['type'] == Evaluation::$TYPE_ARTICLE_TOPIC) { $t->add_field('result', 'm', array("choices" => "Yes,No")); } else { // titlesentiment or paragraphsentiment $t->add_field('rating', 'm', array("choices" => "-5 (Very Bad),-4,-3,-2,-1,0 (balanced),1,2,3,4,5 (Very positive)")); } // add to project $p->add_task($t); } //otherwise reject the task if ($daysSinceCreation < 15) { // push the project $project_url = $p->post(); // add the task url to the evaluation record $this->saveField('task_url', $project_url); } else { $this->saveField('task_url', "rejected"); } }