Path: blob/master/src/applications/calendar/controller/PhabricatorCalendarImportDropController.php
12256 views
<?php12final class PhabricatorCalendarImportDropController3extends PhabricatorCalendarController {45public function handleRequest(AphrontRequest $request) {6$viewer = $request->getViewer();78if (!$request->validateCSRF()) {9return new Aphront400Response();10}1112$cancel_uri = $this->getApplicationURI();1314$ids = $request->getStrList('h');15if ($ids) {16$files = id(new PhabricatorFileQuery())17->setViewer($viewer)18->withIDs($ids)19->setRaisePolicyExceptions(true)20->execute();21} else {22$files = array();23}2425if (!$files) {26return $this->newDialog()27->setTitle(pht('Nothing Uploaded'))28->appendParagraph(29pht(30'Drag and drop .ics files to upload them and import them into '.31'Calendar.'))32->addCancelButton($cancel_uri, pht('Done'));33}3435$engine = new PhabricatorCalendarICSFileImportEngine();36$imports = array();37foreach ($files as $file) {38$import = PhabricatorCalendarImport::initializeNewCalendarImport(39$viewer,40clone $engine);4142$xactions = array();43$xactions[] = id(new PhabricatorCalendarImportTransaction())44->setTransactionType(45PhabricatorCalendarImportICSFileTransaction::TRANSACTIONTYPE)46->setNewValue($file->getPHID());4748$editor = id(new PhabricatorCalendarImportEditor())49->setActor($viewer)50->setContinueOnNoEffect(true)51->setContinueOnMissingFields(true)52->setContentSourceFromRequest($request);5354$editor->applyTransactions($import, $xactions);5556$imports[] = $import;57}5859$import_phids = mpull($imports, 'getPHID');60$events = id(new PhabricatorCalendarEventQuery())61->setViewer($viewer)62->withImportSourcePHIDs($import_phids)63->execute();6465if (count($events) == 1) {66// The user imported exactly one event. This is consistent with dropping67// a .ics file from an email; just take them to the event.68$event = head($events);69$next_uri = $event->getURI();70} else if (count($imports) > 1) {71// The user imported multiple different files. Take them to a summary72// list of generated import activity.73$source_phids = implode(',', $import_phids);74$next_uri = '/calendar/import/log/?importSourcePHIDs='.$source_phids;75} else {76// The user imported one file, which had zero or more than one event.77// Take them to the import detail page.78$import = head($imports);79$next_uri = $import->getURI();80}8182return id(new AphrontRedirectResponse())->setURI($next_uri);83}8485}868788