mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-27 09:12:41 +01:00
Support "Edit just this event" on the parent event in a series
Summary: Ref T11804. This one is messy because we have to fork the //next// event, possibly creating it first. Then we can edit the parent normally. Test Plan: Cancelled the first event in a series, only that one cancelled. Reviewers: chad Reviewed By: chad Maniphest Tasks: T11804 Differential Revision: https://secure.phabricator.com/D16781
This commit is contained in:
parent
b084efb362
commit
208f8ed526
1 changed files with 34 additions and 16 deletions
|
@ -39,7 +39,7 @@ final class PhabricatorCalendarEventCancelController
|
|||
$validation_exception = null;
|
||||
if ($request->isFormPost()) {
|
||||
|
||||
$targets = array();
|
||||
$targets = array($event);
|
||||
if ($is_recurring) {
|
||||
$mode = $request->getStr('mode');
|
||||
$is_future = ($mode == 'future');
|
||||
|
@ -51,6 +51,38 @@ final class PhabricatorCalendarEventCancelController
|
|||
|
||||
if ($must_fork) {
|
||||
if ($is_child) {
|
||||
$fork_target = $event;
|
||||
} else {
|
||||
if ($event->isValidSequenceIndex($viewer, 1)) {
|
||||
$next_event = id(new PhabricatorCalendarEventQuery())
|
||||
->setViewer($viewer)
|
||||
->withInstanceSequencePairs(
|
||||
array(
|
||||
array($event->getPHID(), 1),
|
||||
))
|
||||
->requireCapabilities(
|
||||
array(
|
||||
PhabricatorPolicyCapability::CAN_VIEW,
|
||||
PhabricatorPolicyCapability::CAN_EDIT,
|
||||
))
|
||||
->executeOne();
|
||||
|
||||
if (!$next_event) {
|
||||
$next_event = $event->newStub($viewer, 1);
|
||||
}
|
||||
|
||||
$fork_target = $next_event;
|
||||
} else {
|
||||
// This appears to be a "recurring" event with no valid
|
||||
// instances: for example, its "until" date is before the second
|
||||
// instance would occur. This can happen if we already forked the
|
||||
// event or if users entered silly stuff. Just edit the event
|
||||
// directly without forking anything.
|
||||
$fork_target = null;
|
||||
}
|
||||
}
|
||||
|
||||
if ($fork_target) {
|
||||
$xactions = array();
|
||||
|
||||
$xaction = id(new PhabricatorCalendarEventTransaction())
|
||||
|
@ -64,20 +96,8 @@ final class PhabricatorCalendarEventCancelController
|
|||
->setContinueOnNoEffect(true)
|
||||
->setContinueOnMissingFields(true);
|
||||
|
||||
$editor->applyTransactions($event, array($xaction));
|
||||
|
||||
$targets[] = $event;
|
||||
} else {
|
||||
// TODO: This is a huge mess; we need to load or generate the
|
||||
// first child, then fork that, then apply the event to the
|
||||
// parent. Just bail for now.
|
||||
throw new Exception(
|
||||
pht(
|
||||
'Individual edits to parent events are not yet supported '.
|
||||
'because they are real tricky to implement.'));
|
||||
$editor->applyTransactions($fork_target, array($xaction));
|
||||
}
|
||||
} else {
|
||||
$targets[] = $event;
|
||||
}
|
||||
|
||||
if ($is_future) {
|
||||
|
@ -105,8 +125,6 @@ final class PhabricatorCalendarEventCancelController
|
|||
$targets[] = $future_event;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$targets = array($event);
|
||||
}
|
||||
|
||||
foreach ($targets as $target) {
|
||||
|
|
Loading…
Reference in a new issue