/** * Save an updated issue * * @return \Model\Issue */ protected function _saveUpdate() { $f3 = \Base::instance(); $post = array_map("trim", $f3->get("POST")); $issue = new \Model\Issue(); // Load issue and return if not set $issue->load($post["id"]); if (!$issue->id) { return $issue; } // Diff contents and save what's changed. $hashState = json_decode($post["hash_state"]); foreach ($post as $i => $val) { if ($issue->exists($i) && $i != "id" && $issue->{$i} != $val && md5($val) != $hashState->{$i}) { if (empty($val)) { $issue->{$i} = null; } else { $issue->{$i} = $val; if ($i == "status") { $status = new \Model\Issue\Status(); $status->load($val); // Toggle closed_date if issue has been closed/restored if ($status->closed) { if (!$issue->closed_date) { $issue->closed_date = $this->now(); } } else { $issue->closed_date = null; } } // Save to the sprint of the due date unless one already set if ($i == "due_date" && !empty($val)) { if (empty($post['sprint_id'])) { $sprint = new \Model\Sprint(); $sprint->load(array("DATE(?) BETWEEN start_date AND end_date", $val)); $issue->sprint_id = $sprint->id; } } } } } // Save comment if given if (!empty($post["comment"])) { $comment = new \Model\Issue\Comment(); $comment->user_id = $this->_userId; $comment->issue_id = $issue->id; $comment->text = $post["comment"]; $comment->created_date = $this->now(); $comment->save(); $f3->set("update_comment", $comment); } // Save issue, optionally send notifications $notify = !empty($post["notify"]); $issue->save($notify); return $issue; }
public function single_put($f3, $params) { $issue = new \Model\Issue(); $issue->load($params["id"]); if (!$issue->id) { $f3->error(404); return; } $updated = array(); foreach ($f3->get("REQUEST") as $key => $val) { if (is_scalar($val) && $issue->exists($key)) { $updated[] = $key; $issue->set($key, $val); } } if ($updated) { $issue->save(); } $this->printJson(array("updated_fields" => $updated, "issue" => $this->_issueMultiArray($issue))); }