getRequest(); $user = $request->getUser(); $task = id(new ManiphestTask())->load($request->getStr('taskID')); if (!$task) { return new Aphront404Response(); } $action = $request->getStr('action'); $transaction = new ManiphestTransaction(); $transaction ->setAuthorPHID($user->getPHID()) ->setComments($request->getStr('comments')) ->setTransactionType($action); switch ($action) { case ManiphestTransactionType::TYPE_NONE: break; case ManiphestTransactionType::TYPE_STATUS: $transaction->setNewValue($request->getStr('resolution')); break; case ManiphestTransactionType::TYPE_OWNER: $assign_to = $request->getArr('assign_to'); $assign_to = reset($assign_to); $transaction->setNewValue($assign_to); break; case ManiphestTransactionType::TYPE_CCS: $ccs = $request->getArr('ccs'); $ccs = array_merge($ccs, $task->getCCPHIDs()); $ccs = array_filter($ccs); $ccs = array_unique($ccs); $transaction->setNewValue($ccs); break; case ManiphestTransactionType::TYPE_PRIORITY: $transaction->setNewValue($request->getInt('priority')); break; default: throw new Exception('unknown action'); } $transactions = array($transaction); switch ($action) { case ManiphestTransactionType::TYPE_OWNER: if ($task->getOwnerPHID() == $transaction->getNewValue()) { // If this is actually no-op, don't generate the side effect. break; } // When a task is reassigned, move the previous owner to CC. $old = $task->getCCPHIDs(); $new = array_merge( $old, array($task->getOwnerPHID())); $new = array_unique(array_filter($new)); if ($old != $new) { $cc = clone $transaction; $cc->setTransactionType(ManiphestTransactionType::TYPE_CCS); $cc->setNewValue($new); $transactions[] = $cc; } break; } $editor = new ManiphestTransactionEditor(); $editor->applyTransactions($task, $transactions); return id(new AphrontRedirectResponse()) ->setURI('/T'.$task->getID()); } }