@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 86 lines 2.7 kB view raw
1<?php 2 3final class PhabricatorCalendarImportDropController 4 extends PhabricatorCalendarController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $request->getViewer(); 8 9 if (!$request->validateCSRF()) { 10 return new Aphront400Response(); 11 } 12 13 $cancel_uri = $this->getApplicationURI(); 14 15 $ids = $request->getStrList('h'); 16 if ($ids) { 17 $files = id(new PhabricatorFileQuery()) 18 ->setViewer($viewer) 19 ->withIDs($ids) 20 ->setRaisePolicyExceptions(true) 21 ->execute(); 22 } else { 23 $files = array(); 24 } 25 26 if (!$files) { 27 return $this->newDialog() 28 ->setTitle(pht('Nothing Uploaded')) 29 ->appendParagraph( 30 pht( 31 'Drag and drop .ics files to upload them and import them into '. 32 'Calendar.')) 33 ->addCancelButton($cancel_uri, pht('Done')); 34 } 35 36 $engine = new PhabricatorCalendarICSFileImportEngine(); 37 $imports = array(); 38 foreach ($files as $file) { 39 $import = PhabricatorCalendarImport::initializeNewCalendarImport( 40 $viewer, 41 clone $engine); 42 43 $xactions = array(); 44 $xactions[] = id(new PhabricatorCalendarImportTransaction()) 45 ->setTransactionType( 46 PhabricatorCalendarImportICSFileTransaction::TRANSACTIONTYPE) 47 ->setNewValue($file->getPHID()); 48 49 $editor = id(new PhabricatorCalendarImportEditor()) 50 ->setActor($viewer) 51 ->setContinueOnNoEffect(true) 52 ->setContinueOnMissingFields(true) 53 ->setContentSourceFromRequest($request); 54 55 $editor->applyTransactions($import, $xactions); 56 57 $imports[] = $import; 58 } 59 60 $import_phids = mpull($imports, 'getPHID'); 61 $events = id(new PhabricatorCalendarEventQuery()) 62 ->setViewer($viewer) 63 ->withImportSourcePHIDs($import_phids) 64 ->execute(); 65 66 if (count($events) == 1) { 67 // The user imported exactly one event. This is consistent with dropping 68 // a .ics file from an email; just take them to the event. 69 $event = head($events); 70 $next_uri = $event->getURI(); 71 } else if (count($imports) > 1) { 72 // The user imported multiple different files. Take them to a summary 73 // list of generated import activity. 74 $source_phids = implode(',', $import_phids); 75 $next_uri = '/calendar/import/log/?importSourcePHIDs='.$source_phids; 76 } else { 77 // The user imported one file, which had zero or more than one event. 78 // Take them to the import detail page. 79 $import = head($imports); 80 $next_uri = $import->getURI(); 81 } 82 83 return id(new AphrontRedirectResponse())->setURI($next_uri); 84 } 85 86}