Changeset View
Changeset View
Standalone View
Standalone View
src/applications/calendar/editor/PhabricatorCalendarEventEditor.php
Show First 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | switch ($xaction->getTransactionType()) { | ||||
return (int)$object->getIsAllDay(); | return (int)$object->getIsAllDay(); | ||||
case PhabricatorCalendarEventTransaction::TYPE_ICON: | case PhabricatorCalendarEventTransaction::TYPE_ICON: | ||||
return $object->getIcon(); | return $object->getIcon(); | ||||
case PhabricatorCalendarEventTransaction::TYPE_ACCEPT: | case PhabricatorCalendarEventTransaction::TYPE_ACCEPT: | ||||
case PhabricatorCalendarEventTransaction::TYPE_DECLINE: | case PhabricatorCalendarEventTransaction::TYPE_DECLINE: | ||||
$actor_phid = $this->getActingAsPHID(); | $actor_phid = $this->getActingAsPHID(); | ||||
return $object->getUserInviteStatus($actor_phid); | return $object->getUserInviteStatus($actor_phid); | ||||
case PhabricatorCalendarEventTransaction::TYPE_INVITE: | case PhabricatorCalendarEventTransaction::TYPE_INVITE: | ||||
$map = $xaction->getNewValue(); | $invitees = $object->getInvitees(); | ||||
$phids = array_keys($map); | return mpull($invitees, 'getStatus', 'getInviteePHID'); | ||||
$invitees = mpull($object->getInvitees(), null, 'getInviteePHID'); | |||||
$old = array(); | |||||
foreach ($phids as $phid) { | |||||
$invitee = idx($invitees, $phid); | |||||
if ($invitee) { | |||||
$old[$phid] = $invitee->getStatus(); | |||||
} else { | |||||
$old[$phid] = PhabricatorCalendarEventInvitee::STATUS_UNINVITED; | |||||
} | |||||
} | |||||
return $old; | |||||
} | } | ||||
return parent::getCustomTransactionOldValue($object, $xaction); | return parent::getCustomTransactionOldValue($object, $xaction); | ||||
} | } | ||||
protected function getCustomTransactionNewValue( | protected function getCustomTransactionNewValue( | ||||
PhabricatorLiskDAO $object, | PhabricatorLiskDAO $object, | ||||
PhabricatorApplicationTransaction $xaction) { | PhabricatorApplicationTransaction $xaction) { | ||||
switch ($xaction->getTransactionType()) { | switch ($xaction->getTransactionType()) { | ||||
case PhabricatorCalendarEventTransaction::TYPE_RECURRING: | case PhabricatorCalendarEventTransaction::TYPE_RECURRING: | ||||
case PhabricatorCalendarEventTransaction::TYPE_FREQUENCY: | case PhabricatorCalendarEventTransaction::TYPE_FREQUENCY: | ||||
case PhabricatorCalendarEventTransaction::TYPE_NAME: | case PhabricatorCalendarEventTransaction::TYPE_NAME: | ||||
case PhabricatorCalendarEventTransaction::TYPE_DESCRIPTION: | case PhabricatorCalendarEventTransaction::TYPE_DESCRIPTION: | ||||
case PhabricatorCalendarEventTransaction::TYPE_CANCEL: | case PhabricatorCalendarEventTransaction::TYPE_CANCEL: | ||||
case PhabricatorCalendarEventTransaction::TYPE_INVITE: | |||||
case PhabricatorCalendarEventTransaction::TYPE_ICON: | case PhabricatorCalendarEventTransaction::TYPE_ICON: | ||||
return $xaction->getNewValue(); | return $xaction->getNewValue(); | ||||
case PhabricatorCalendarEventTransaction::TYPE_ACCEPT: | case PhabricatorCalendarEventTransaction::TYPE_ACCEPT: | ||||
return PhabricatorCalendarEventInvitee::STATUS_ATTENDING; | return PhabricatorCalendarEventInvitee::STATUS_ATTENDING; | ||||
case PhabricatorCalendarEventTransaction::TYPE_DECLINE: | case PhabricatorCalendarEventTransaction::TYPE_DECLINE: | ||||
return PhabricatorCalendarEventInvitee::STATUS_DECLINED; | return PhabricatorCalendarEventInvitee::STATUS_DECLINED; | ||||
case PhabricatorCalendarEventTransaction::TYPE_ALL_DAY: | case PhabricatorCalendarEventTransaction::TYPE_ALL_DAY: | ||||
return (int)$xaction->getNewValue(); | return (int)$xaction->getNewValue(); | ||||
case PhabricatorCalendarEventTransaction::TYPE_RECURRENCE_END_DATE: | case PhabricatorCalendarEventTransaction::TYPE_RECURRENCE_END_DATE: | ||||
case PhabricatorCalendarEventTransaction::TYPE_START_DATE: | case PhabricatorCalendarEventTransaction::TYPE_START_DATE: | ||||
case PhabricatorCalendarEventTransaction::TYPE_END_DATE: | case PhabricatorCalendarEventTransaction::TYPE_END_DATE: | ||||
return $xaction->getNewValue(); | return $xaction->getNewValue(); | ||||
case PhabricatorCalendarEventTransaction::TYPE_INVITE: | |||||
$status_invited = PhabricatorCalendarEventInvitee::STATUS_INVITED; | |||||
$status_uninvited = PhabricatorCalendarEventInvitee::STATUS_UNINVITED; | |||||
$status_attending = PhabricatorCalendarEventInvitee::STATUS_ATTENDING; | |||||
$invitees = $object->getInvitees(); | |||||
foreach ($invitees as $key => $invitee) { | |||||
if ($invitee->getStatus() == $status_uninvited) { | |||||
unset($invitees[$key]); | |||||
} | |||||
} | |||||
$invitees = mpull($invitees, null, 'getInviteePHID'); | |||||
$new = $xaction->getNewValue(); | |||||
$new = array_fuse($new); | |||||
$all = array_keys($invitees + $new); | |||||
$map = array(); | |||||
foreach ($all as $phid) { | |||||
$is_old = isset($invitees[$phid]); | |||||
$is_new = isset($new[$phid]); | |||||
if ($is_old && !$is_new) { | |||||
$map[$phid] = $status_uninvited; | |||||
} else if (!$is_old && $is_new) { | |||||
$map[$phid] = $status_invited; | |||||
} | |||||
} | |||||
// If we're creating this event and the actor is inviting themselves, | |||||
// mark them as attending. | |||||
if ($this->getIsNewObject()) { | |||||
$acting_phid = $this->getActingAsPHID(); | |||||
if (isset($map[$acting_phid])) { | |||||
$map[$acting_phid] = $status_attending; | |||||
} | |||||
} | |||||
return $map; | |||||
} | } | ||||
return parent::getCustomTransactionNewValue($object, $xaction); | return parent::getCustomTransactionNewValue($object, $xaction); | ||||
} | } | ||||
protected function applyCustomInternalTransaction( | protected function applyCustomInternalTransaction( | ||||
PhabricatorLiskDAO $object, | PhabricatorLiskDAO $object, | ||||
PhabricatorApplicationTransaction $xaction) { | PhabricatorApplicationTransaction $xaction) { | ||||
▲ Show 20 Lines • Show All 234 Lines • ▼ Show 20 Lines | switch ($type) { | ||||
pht('Required'), | pht('Required'), | ||||
pht('Event name is required.'), | pht('Event name is required.'), | ||||
nonempty(last($xactions), null)); | nonempty(last($xactions), null)); | ||||
$error->setIsMissingFieldError(true); | $error->setIsMissingFieldError(true); | ||||
$errors[] = $error; | $errors[] = $error; | ||||
} | } | ||||
break; | break; | ||||
case PhabricatorCalendarEventTransaction::TYPE_INVITE: | |||||
$old = $object->getInvitees(); | |||||
$old = mpull($old, null, 'getInviteePHID'); | |||||
foreach ($xactions as $xaction) { | |||||
$new = $xaction->getNewValue(); | |||||
$new = array_fuse($new); | |||||
$add = array_diff_key($new, $old); | |||||
if (!$add) { | |||||
continue; | |||||
} | |||||
// In the UI, we only allow you to invite mailable objects, but there | |||||
// is no definitive marker for "invitable object" today. Just allow | |||||
// any valid object to be invited. | |||||
$objects = id(new PhabricatorObjectQuery()) | |||||
->setViewer($this->getActor()) | |||||
->withPHIDs($add) | |||||
->execute(); | |||||
$objects = mpull($objects, null, 'getPHID'); | |||||
foreach ($add as $phid) { | |||||
if (isset($objects[$phid])) { | |||||
continue; | |||||
} | |||||
$errors[] = new PhabricatorApplicationTransactionValidationError( | |||||
$type, | |||||
pht('Invalid'), | |||||
pht( | |||||
'Invitee "%s" identifies an object that does not exist or '. | |||||
'which you do not have permission to view.', | |||||
$phid)); | |||||
} | |||||
} | |||||
break; | |||||
} | } | ||||
return $errors; | return $errors; | ||||
} | } | ||||
protected function shouldPublishFeedStory( | protected function shouldPublishFeedStory( | ||||
PhabricatorLiskDAO $object, | PhabricatorLiskDAO $object, | ||||
array $xactions) { | array $xactions) { | ||||
▲ Show 20 Lines • Show All 91 Lines • Show Last 20 Lines |