Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php
12256 views
1
<?php
2
3
final class PhabricatorCalendarICSURIImportEngine
4
extends PhabricatorCalendarICSImportEngine {
5
6
const ENGINETYPE = 'icsuri';
7
8
public function getImportEngineName() {
9
return pht('Import .ics URI');
10
}
11
12
public function getImportEngineTypeName() {
13
return pht('.ics URI');
14
}
15
16
public function getImportEngineHint() {
17
return pht('Import or subscribe to a calendar in .ics format by URI.');
18
}
19
20
public function supportsTriggers(PhabricatorCalendarImport $import) {
21
return true;
22
}
23
24
public function appendImportProperties(
25
PhabricatorUser $viewer,
26
PhabricatorCalendarImport $import,
27
PHUIPropertyListView $properties) {
28
29
$uri_key = PhabricatorCalendarImportICSURITransaction::PARAMKEY_URI;
30
$uri = $import->getParameter($uri_key);
31
32
// Since the URI may contain a secret hash, don't show it to users who
33
// can not edit the import.
34
$can_edit = PhabricatorPolicyFilter::hasCapability(
35
$viewer,
36
$import,
37
PhabricatorPolicyCapability::CAN_EDIT);
38
if (!$can_edit) {
39
$uri_display = phutil_tag('em', array(), pht('Restricted'));
40
} else if (!PhabricatorEnv::isValidRemoteURIForLink($uri)) {
41
$uri_display = $uri;
42
} else {
43
$uri_display = phutil_tag(
44
'a',
45
array(
46
'href' => $uri,
47
'target' => '_blank',
48
'rel' => 'noreferrer',
49
),
50
$uri);
51
}
52
53
$properties->addProperty(pht('Source URI'), $uri_display);
54
}
55
56
public function newEditEngineFields(
57
PhabricatorEditEngine $engine,
58
PhabricatorCalendarImport $import) {
59
$fields = array();
60
61
if ($engine->getIsCreate()) {
62
$fields[] = id(new PhabricatorTextEditField())
63
->setKey('uri')
64
->setLabel(pht('URI'))
65
->setDescription(pht('URI to import.'))
66
->setTransactionType(
67
PhabricatorCalendarImportICSURITransaction::TRANSACTIONTYPE)
68
->setConduitDescription(pht('URI to import.'))
69
->setConduitTypeDescription(pht('New URI.'));
70
}
71
72
return $fields;
73
}
74
75
public function getDisplayName(PhabricatorCalendarImport $import) {
76
return pht('ICS URI');
77
}
78
79
public function importEventsFromSource(
80
PhabricatorUser $viewer,
81
PhabricatorCalendarImport $import,
82
$should_queue) {
83
84
$uri_key = PhabricatorCalendarImportICSURITransaction::PARAMKEY_URI;
85
$uri = $import->getParameter($uri_key);
86
87
PhabricatorSystemActionEngine::willTakeAction(
88
array($viewer->getPHID()),
89
new PhabricatorFilesOutboundRequestAction(),
90
1);
91
92
$file = PhabricatorFile::newFromFileDownload(
93
$uri,
94
array(
95
'viewPolicy' => PhabricatorPolicies::POLICY_NOONE,
96
'authorPHID' => $import->getAuthorPHID(),
97
'canCDN' => true,
98
));
99
100
$import->newLogMessage(
101
PhabricatorCalendarImportFetchLogType::LOGTYPE,
102
array(
103
'file.phid' => $file->getPHID(),
104
));
105
106
$data = $file->loadFileData();
107
108
if ($should_queue && $this->shouldQueueDataImport($data)) {
109
return $this->queueDataImport($import, $data);
110
}
111
112
return $this->importICSData($viewer, $import, $data);
113
}
114
115
public function canDisable(
116
PhabricatorUser $viewer,
117
PhabricatorCalendarImport $import) {
118
return true;
119
}
120
121
}
122
123