Path: blob/master/src/applications/calendar/xaction/PhabricatorCalendarImportICSFileTransaction.php
12256 views
<?php12final class PhabricatorCalendarImportICSFileTransaction3extends PhabricatorCalendarImportTransactionType {45const TRANSACTIONTYPE = 'calendar.import.ics.file';6const PARAMKEY_FILE = 'ics.filePHID';7const PARAMKEY_NAME = 'ics.fileName';89public function generateOldValue($object) {10return $object->getParameter(self::PARAMKEY_FILE);11}1213public function applyInternalEffects($object, $value) {14$object->setParameter(self::PARAMKEY_FILE, $value);1516$viewer = $this->getActor();17$file = id(new PhabricatorFileQuery())18->setViewer($viewer)19->withPHIDs(array($value))20->executeOne();21if ($file) {22$object->setParameter(self::PARAMKEY_NAME, $file->getName());23}24}2526public function getTitle() {27return pht(28'%s imported an ICS file.',29$this->renderAuthor());30}3132public function validateTransactions($object, array $xactions) {33$viewer = $this->getActor();34$errors = array();3536$ics_type = PhabricatorCalendarICSFileImportEngine::ENGINETYPE;37$import_type = $object->getEngine()->getImportEngineType();38if ($import_type != $ics_type) {39if (!$xactions) {40return $errors;41}4243$errors[] = $this->newInvalidError(44pht(45'You can not attach an ICS file to an import type other than '.46'an ICS import (type is "%s").',47$import_type));4849return $errors;50}5152$new_value = $object->getParameter(self::PARAMKEY_FILE);53foreach ($xactions as $xaction) {54$new_value = $xaction->getNewValue();55if (!strlen($new_value)) {56continue;57}5859$file = id(new PhabricatorFileQuery())60->setViewer($viewer)61->withPHIDs(array($new_value))62->executeOne();63if (!$file) {64$errors[] = $this->newInvalidError(65pht(66'File PHID "%s" is not valid or not visible.',67$new_value),68$xaction);69}70}7172if (!$new_value) {73$errors[] = $this->newRequiredError(74pht('You must select an ".ics" file to import.'));75}7677return $errors;78}79}808182