Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/calendar/storage/PhabricatorCalendarImport.php
12253 views
1
<?php
2
3
final class PhabricatorCalendarImport
4
extends PhabricatorCalendarDAO
5
implements
6
PhabricatorPolicyInterface,
7
PhabricatorApplicationTransactionInterface,
8
PhabricatorDestructibleInterface {
9
10
protected $name;
11
protected $authorPHID;
12
protected $viewPolicy;
13
protected $editPolicy;
14
protected $engineType;
15
protected $parameters = array();
16
protected $isDisabled = 0;
17
protected $triggerPHID;
18
protected $triggerFrequency;
19
20
const FREQUENCY_ONCE = 'once';
21
const FREQUENCY_HOURLY = 'hourly';
22
const FREQUENCY_DAILY = 'daily';
23
24
private $engine = self::ATTACHABLE;
25
26
public static function initializeNewCalendarImport(
27
PhabricatorUser $actor,
28
PhabricatorCalendarImportEngine $engine) {
29
return id(new self())
30
->setName('')
31
->setAuthorPHID($actor->getPHID())
32
->setViewPolicy($actor->getPHID())
33
->setEditPolicy($actor->getPHID())
34
->setIsDisabled(0)
35
->setEngineType($engine->getImportEngineType())
36
->attachEngine($engine)
37
->setTriggerFrequency(self::FREQUENCY_ONCE);
38
}
39
40
protected function getConfiguration() {
41
return array(
42
self::CONFIG_AUX_PHID => true,
43
self::CONFIG_SERIALIZATION => array(
44
'parameters' => self::SERIALIZATION_JSON,
45
),
46
self::CONFIG_COLUMN_SCHEMA => array(
47
'name' => 'text',
48
'engineType' => 'text64',
49
'isDisabled' => 'bool',
50
'triggerPHID' => 'phid?',
51
'triggerFrequency' => 'text64',
52
),
53
self::CONFIG_KEY_SCHEMA => array(
54
'key_author' => array(
55
'columns' => array('authorPHID'),
56
),
57
),
58
) + parent::getConfiguration();
59
}
60
61
public function getPHIDType() {
62
return PhabricatorCalendarImportPHIDType::TYPECONST;
63
}
64
65
public function getURI() {
66
$id = $this->getID();
67
return "/calendar/import/{$id}/";
68
}
69
70
public function attachEngine(PhabricatorCalendarImportEngine $engine) {
71
$this->engine = $engine;
72
return $this;
73
}
74
75
public function getEngine() {
76
return $this->assertAttached($this->engine);
77
}
78
79
public function getParameter($key, $default = null) {
80
return idx($this->parameters, $key, $default);
81
}
82
83
public function setParameter($key, $value) {
84
$this->parameters[$key] = $value;
85
return $this;
86
}
87
88
public function getDisplayName() {
89
$name = $this->getName();
90
if (strlen($name)) {
91
return $name;
92
}
93
94
return $this->getEngine()->getDisplayName($this);
95
}
96
97
public static function getTriggerFrequencyMap() {
98
return array(
99
self::FREQUENCY_ONCE => array(
100
'name' => pht('No Automatic Updates'),
101
),
102
self::FREQUENCY_HOURLY => array(
103
'name' => pht('Update Hourly'),
104
),
105
self::FREQUENCY_DAILY => array(
106
'name' => pht('Update Daily'),
107
),
108
);
109
}
110
111
112
/* -( PhabricatorPolicyInterface )----------------------------------------- */
113
114
115
public function getCapabilities() {
116
return array(
117
PhabricatorPolicyCapability::CAN_VIEW,
118
PhabricatorPolicyCapability::CAN_EDIT,
119
);
120
}
121
122
public function getPolicy($capability) {
123
switch ($capability) {
124
case PhabricatorPolicyCapability::CAN_VIEW:
125
return $this->getViewPolicy();
126
case PhabricatorPolicyCapability::CAN_EDIT:
127
return $this->getEditPolicy();
128
}
129
}
130
131
public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
132
return false;
133
}
134
135
136
/* -( PhabricatorApplicationTransactionInterface )------------------------- */
137
138
139
public function getApplicationTransactionEditor() {
140
return new PhabricatorCalendarImportEditor();
141
}
142
143
public function getApplicationTransactionTemplate() {
144
return new PhabricatorCalendarImportTransaction();
145
}
146
147
public function newLogMessage($type, array $parameters) {
148
$parameters = array(
149
'type' => $type,
150
) + $parameters;
151
152
return id(new PhabricatorCalendarImportLog())
153
->setImportPHID($this->getPHID())
154
->setParameters($parameters)
155
->save();
156
}
157
158
159
/* -( PhabricatorDestructibleInterface )----------------------------------- */
160
161
162
public function destroyObjectPermanently(
163
PhabricatorDestructionEngine $engine) {
164
$viewer = $engine->getViewer();
165
166
$this->openTransaction();
167
168
$trigger_phid = $this->getTriggerPHID();
169
if ($trigger_phid) {
170
$trigger = id(new PhabricatorWorkerTriggerQuery())
171
->setViewer($viewer)
172
->withPHIDs(array($trigger_phid))
173
->executeOne();
174
if ($trigger) {
175
$engine->destroyObject($trigger);
176
}
177
}
178
179
$events = id(new PhabricatorCalendarEventQuery())
180
->setViewer($viewer)
181
->withImportSourcePHIDs(array($this->getPHID()))
182
->execute();
183
foreach ($events as $event) {
184
$engine->destroyObject($event);
185
}
186
187
$logs = id(new PhabricatorCalendarImportLogQuery())
188
->setViewer($viewer)
189
->withImportPHIDs(array($this->getPHID()))
190
->execute();
191
foreach ($logs as $log) {
192
$engine->destroyObject($log);
193
}
194
195
$this->delete();
196
$this->saveTransaction();
197
}
198
199
}
200
201