private function buildPropertySection(PhabricatorCalendarImport $import) { $viewer = $this->getViewer(); $properties = id(new PHUIPropertyListView())->setViewer($viewer); $engine = $import->getEngine(); $properties->addProperty(pht('Source Type'), $engine->getImportEngineTypeName()); if ($import->getIsDisabled()) { $auto_updates = phutil_tag('em', array(), pht('Import Disabled')); $has_trigger = false; } else { $frequency = $import->getTriggerFrequency(); $frequency_map = PhabricatorCalendarImport::getTriggerFrequencyMap(); $frequency_names = ipull($frequency_map, 'name'); $auto_updates = idx($frequency_names, $frequency, $frequency); if ($frequency == PhabricatorCalendarImport::FREQUENCY_ONCE) { $has_trigger = false; $auto_updates = phutil_tag('em', array(), $auto_updates); } else { $has_trigger = true; } } $properties->addProperty(pht('Automatic Updates'), $auto_updates); if ($has_trigger) { $trigger = id(new PhabricatorWorkerTriggerQuery())->setViewer($viewer)->withPHIDs(array($import->getTriggerPHID()))->needEvents(true)->executeOne(); if (!$trigger) { $next_trigger = phutil_tag('em', array(), pht('Invalid Trigger')); } else { $now = PhabricatorTime::getNow(); $next_epoch = $trigger->getNextEventPrediction(); $next_trigger = pht('%s (%s)', phabricator_datetime($next_epoch, $viewer), phutil_format_relative_time($next_epoch - $now)); } $properties->addProperty(pht('Next Update'), $next_trigger); } $engine->appendImportProperties($viewer, $import, $properties); return $properties; }