Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14012297
D16727.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Referenced Files
None
Subscribers
None
D16727.diff
View Options
diff --git a/src/applications/calendar/controller/PhabricatorCalendarController.php b/src/applications/calendar/controller/PhabricatorCalendarController.php
--- a/src/applications/calendar/controller/PhabricatorCalendarController.php
+++ b/src/applications/calendar/controller/PhabricatorCalendarController.php
@@ -18,4 +18,23 @@
->setContent($ics_data);
}
+ protected function newImportedEventResponse(PhabricatorCalendarEvent $event) {
+ if (!$event->isImportedEvent()) {
+ return null;
+ }
+
+ // Give the user a specific, detailed message if they try to edit an
+ // imported event via common web paths. Other edits (including those via
+ // the API) are blocked by the normal policy system, but this makes it more
+ // clear exactly why the event can't be edited.
+
+ return $this->newDialog()
+ ->setTitle(pht('Can Not Edit Imported Event'))
+ ->appendParagraph(
+ pht(
+ 'This event has been imported from an external source and '.
+ 'can not be edited.'))
+ ->addCancelButton($event->getURI(), pht('Done'));
+ }
+
}
diff --git a/src/applications/calendar/controller/PhabricatorCalendarEventCancelController.php b/src/applications/calendar/controller/PhabricatorCalendarEventCancelController.php
--- a/src/applications/calendar/controller/PhabricatorCalendarEventCancelController.php
+++ b/src/applications/calendar/controller/PhabricatorCalendarEventCancelController.php
@@ -7,19 +7,27 @@
$viewer = $request->getViewer();
$id = $request->getURIData('id');
+ // Just check CAN_VIEW first. Then we'll check if this is an import so
+ // we can raise a better error.
$event = id(new PhabricatorCalendarEventQuery())
->setViewer($viewer)
->withIDs(array($id))
- ->requireCapabilities(
- array(
- PhabricatorPolicyCapability::CAN_VIEW,
- PhabricatorPolicyCapability::CAN_EDIT,
- ))
->executeOne();
if (!$event) {
return new Aphront404Response();
}
+ $response = $this->newImportedEventResponse($event);
+ if ($response) {
+ return $response;
+ }
+
+ // Now that we've done the import check, check for CAN_EDIT.
+ PhabricatorPolicyFilter::requireCapability(
+ $viewer,
+ $event,
+ PhabricatorPolicyCapability::CAN_EDIT);
+
$cancel_uri = $event->getURI();
$is_parent = $event->isParentEvent();
diff --git a/src/applications/calendar/controller/PhabricatorCalendarEventEditController.php b/src/applications/calendar/controller/PhabricatorCalendarEventEditController.php
--- a/src/applications/calendar/controller/PhabricatorCalendarEventEditController.php
+++ b/src/applications/calendar/controller/PhabricatorCalendarEventEditController.php
@@ -4,6 +4,20 @@
extends PhabricatorCalendarController {
public function handleRequest(AphrontRequest $request) {
+ $viewer = $this->getViewer();
+
+ $id = $request->getURIData('id');
+ if ($id) {
+ $event = id(new PhabricatorCalendarEventQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($id))
+ ->executeOne();
+ $response = $this->newImportedEventResponse($event);
+ if ($response) {
+ return $response;
+ }
+ }
+
return id(new PhabricatorCalendarEventEditEngine())
->setController($this)
->buildResponse();
diff --git a/src/applications/calendar/controller/PhabricatorCalendarEventJoinController.php b/src/applications/calendar/controller/PhabricatorCalendarEventJoinController.php
--- a/src/applications/calendar/controller/PhabricatorCalendarEventJoinController.php
+++ b/src/applications/calendar/controller/PhabricatorCalendarEventJoinController.php
@@ -15,6 +15,11 @@
return new Aphront404Response();
}
+ $response = $this->newImportedEventResponse($event);
+ if ($response) {
+ return $response;
+ }
+
$cancel_uri = $event->getURI();
$action = $request->getURIData('action');
diff --git a/src/applications/calendar/controller/PhabricatorCalendarEventViewController.php b/src/applications/calendar/controller/PhabricatorCalendarEventViewController.php
--- a/src/applications/calendar/controller/PhabricatorCalendarEventViewController.php
+++ b/src/applications/calendar/controller/PhabricatorCalendarEventViewController.php
@@ -63,6 +63,19 @@
->setHeader(pht('Details'));
$recurring_header = $this->buildRecurringHeader($event);
+ // NOTE: This is a bit hacky: for imported events, we're just hiding the
+ // comment form without actually preventing comments. Users could still
+ // submit a request to add comments to these events. This isn't really a
+ // major problem since they can't do anything truly bad and there isn't an
+ // easy way to selectively disable this or some other similar behaviors
+ // today, but it would probably be nice to fully disable these
+ // "pseudo-edits" (like commenting and probably subscribing and awarding
+ // tokens) at some point.
+ if ($event->isImportedEvent()) {
+ $comment_view = null;
+ $timeline->setShouldTerminate(true);
+ }
+
$view = id(new PHUITwoColumnView())
->setHeader($header)
->setSubheader($subheader)
@@ -105,6 +118,16 @@
->setPolicyObject($event)
->setHeaderIcon($event->getIcon());
+ if ($event->isImportedEvent()) {
+ $header->addTag(
+ id(new PHUITagView())
+ ->setType(PHUITagView::TYPE_SHADE)
+ ->setName(pht('Imported'))
+ ->setIcon('fa-download')
+ ->setHref($event->getImportSource()->getURI())
+ ->setShade('orange'));
+ }
+
foreach ($this->buildRSVPActions($event) as $action) {
$header->addActionLink($action);
}
@@ -141,12 +164,15 @@
->setWorkflow(!$can_edit));
}
+ $can_attend = !$event->isImportedEvent();
+
if ($is_attending) {
$curtain->addAction(
id(new PhabricatorActionView())
->setName(pht('Decline Event'))
->setIcon('fa-user-times')
->setHref($this->getApplicationURI("event/join/{$id}/"))
+ ->setDisabled(!$can_attend)
->setWorkflow(true));
} else {
$curtain->addAction(
@@ -154,6 +180,7 @@
->setName(pht('Join Event'))
->setIcon('fa-user-plus')
->setHref($this->getApplicationURI("event/join/{$id}/"))
+ ->setDisabled(!$can_attend)
->setWorkflow(true));
}
@@ -261,6 +288,15 @@
pht('None'));
}
+ if ($event->isImportedEvent()) {
+ $properties->addProperty(
+ pht('Imported By'),
+ pht(
+ '%s from %s',
+ $viewer->renderHandle($event->getImportAuthorPHID()),
+ $viewer->renderHandle($event->getImportSourcePHID())));
+ }
+
$properties->addProperty(
pht('Invitees'),
$invitee_list);
diff --git a/src/applications/calendar/phid/PhabricatorCalendarImportPHIDType.php b/src/applications/calendar/phid/PhabricatorCalendarImportPHIDType.php
--- a/src/applications/calendar/phid/PhabricatorCalendarImportPHIDType.php
+++ b/src/applications/calendar/phid/PhabricatorCalendarImportPHIDType.php
@@ -33,7 +33,7 @@
$import = $objects[$phid];
$id = $import->getID();
- $name = $import->getName();
+ $name = $import->getDisplayName();
$uri = $import->getURI();
$handle
diff --git a/src/applications/calendar/storage/PhabricatorCalendarEvent.php b/src/applications/calendar/storage/PhabricatorCalendarEvent.php
--- a/src/applications/calendar/storage/PhabricatorCalendarEvent.php
+++ b/src/applications/calendar/storage/PhabricatorCalendarEvent.php
@@ -576,6 +576,10 @@
}
}
+ if ($this->isImportedEvent()) {
+ return 'fa-download';
+ }
+
return $this->getIcon();
}
@@ -584,6 +588,10 @@
return 'red';
}
+ if ($this->isImportedEvent()) {
+ return 'orange';
+ }
+
if ($viewer->isLoggedIn()) {
$status = $this->getUserInviteStatus($viewer->getPHID());
switch ($status) {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Nov 2, 10:45 AM (2 w, 2 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6724316
Default Alt Text
D16727.diff (7 KB)
Attached To
Mode
D16727: Make event detail view more user-friendly for imported events
Attached
Detach File
Event Timeline
Log In to Comment