~ubuntu-branches/ubuntu/wily/phabricator/wily

« back to all changes in this revision

Viewing changes to phabricator/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php

  • Committer: Package Import Robot
  • Author(s): Richard Sellam
  • Date: 2015-06-13 10:52:10 UTC
  • mfrom: (0.30.1) (0.29.1) (0.17.4) (2.1.9 sid)
  • Revision ID: package-import@ubuntu.com-20150613105210-5uirr7tvnk0n6e6y
Tags: 0~git20150613-1
* New snapshot release (closes: #787805)
* fixed typo in logrotate script (closes: #787645)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
 
 
3
final class PhabricatorOwnersPackageTransactionEditor
 
4
  extends PhabricatorApplicationTransactionEditor {
 
5
 
 
6
  public function getEditorApplicationClass() {
 
7
    return 'PhabricatorOwnersApplication';
 
8
  }
 
9
 
 
10
  public function getEditorObjectsDescription() {
 
11
    return pht('Owners Packages');
 
12
  }
 
13
 
 
14
  public function getTransactionTypes() {
 
15
    $types = parent::getTransactionTypes();
 
16
 
 
17
    $types[] = PhabricatorOwnersPackageTransaction::TYPE_NAME;
 
18
    $types[] = PhabricatorOwnersPackageTransaction::TYPE_PRIMARY;
 
19
    $types[] = PhabricatorOwnersPackageTransaction::TYPE_OWNERS;
 
20
    $types[] = PhabricatorOwnersPackageTransaction::TYPE_AUDITING;
 
21
    $types[] = PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION;
 
22
    $types[] = PhabricatorOwnersPackageTransaction::TYPE_PATHS;
 
23
 
 
24
    return $types;
 
25
  }
 
26
 
 
27
  protected function getCustomTransactionOldValue(
 
28
    PhabricatorLiskDAO $object,
 
29
    PhabricatorApplicationTransaction $xaction) {
 
30
 
 
31
    switch ($xaction->getTransactionType()) {
 
32
      case PhabricatorOwnersPackageTransaction::TYPE_NAME:
 
33
        return $object->getName();
 
34
      case PhabricatorOwnersPackageTransaction::TYPE_PRIMARY:
 
35
        return $object->getPrimaryOwnerPHID();
 
36
      case PhabricatorOwnersPackageTransaction::TYPE_OWNERS:
 
37
        // TODO: needOwners() this on the Query.
 
38
        $phids = mpull($object->loadOwners(), 'getUserPHID');
 
39
        $phids = array_values($phids);
 
40
        return $phids;
 
41
      case PhabricatorOwnersPackageTransaction::TYPE_AUDITING:
 
42
        return (int)$object->getAuditingEnabled();
 
43
      case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION:
 
44
        return $object->getDescription();
 
45
      case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
 
46
        // TODO: needPaths() this on the query
 
47
        $paths = $object->loadPaths();
 
48
        return mpull($paths, 'getRef');
 
49
    }
 
50
  }
 
51
 
 
52
  protected function getCustomTransactionNewValue(
 
53
    PhabricatorLiskDAO $object,
 
54
    PhabricatorApplicationTransaction $xaction) {
 
55
 
 
56
    switch ($xaction->getTransactionType()) {
 
57
      case PhabricatorOwnersPackageTransaction::TYPE_NAME:
 
58
      case PhabricatorOwnersPackageTransaction::TYPE_PRIMARY:
 
59
      case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION:
 
60
      case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
 
61
        return $xaction->getNewValue();
 
62
      case PhabricatorOwnersPackageTransaction::TYPE_AUDITING:
 
63
        return (int)$xaction->getNewValue();
 
64
      case PhabricatorOwnersPackageTransaction::TYPE_OWNERS:
 
65
        $phids = $xaction->getNewValue();
 
66
        $phids = array_unique($phids);
 
67
        $phids = array_values($phids);
 
68
        return $phids;
 
69
    }
 
70
  }
 
71
 
 
72
  protected function transactionHasEffect(
 
73
    PhabricatorLiskDAO $object,
 
74
    PhabricatorApplicationTransaction $xaction) {
 
75
 
 
76
    switch ($xaction->getTransactionType()) {
 
77
      case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
 
78
        $old = $xaction->getOldValue();
 
79
        $new = $xaction->getNewValue();
 
80
 
 
81
        $diffs = PhabricatorOwnersPath::getTransactionValueChanges($old, $new);
 
82
        list($rem, $add) = $diffs;
 
83
 
 
84
        return ($rem || $add);
 
85
    }
 
86
 
 
87
    return parent::transactionHasEffect($object, $xaction);
 
88
  }
 
89
 
 
90
  protected function applyCustomInternalTransaction(
 
91
    PhabricatorLiskDAO $object,
 
92
    PhabricatorApplicationTransaction $xaction) {
 
93
 
 
94
    switch ($xaction->getTransactionType()) {
 
95
      case PhabricatorOwnersPackageTransaction::TYPE_NAME:
 
96
        $object->setName($xaction->getNewValue());
 
97
        return;
 
98
      case PhabricatorOwnersPackageTransaction::TYPE_PRIMARY:
 
99
        $object->setPrimaryOwnerPHID($xaction->getNewValue());
 
100
        return;
 
101
      case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION:
 
102
        $object->setDescription($xaction->getNewValue());
 
103
        return;
 
104
      case PhabricatorOwnersPackageTransaction::TYPE_AUDITING:
 
105
        $object->setAuditingEnabled($xaction->getNewValue());
 
106
        return;
 
107
      case PhabricatorOwnersPackageTransaction::TYPE_OWNERS:
 
108
      case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
 
109
        return;
 
110
    }
 
111
 
 
112
    return parent::applyCustomInternalTransaction($object, $xaction);
 
113
  }
 
114
 
 
115
  protected function applyCustomExternalTransaction(
 
116
    PhabricatorLiskDAO $object,
 
117
    PhabricatorApplicationTransaction $xaction) {
 
118
 
 
119
    switch ($xaction->getTransactionType()) {
 
120
      case PhabricatorOwnersPackageTransaction::TYPE_NAME:
 
121
      case PhabricatorOwnersPackageTransaction::TYPE_PRIMARY:
 
122
      case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION:
 
123
      case PhabricatorOwnersPackageTransaction::TYPE_AUDITING:
 
124
        return;
 
125
      case PhabricatorOwnersPackageTransaction::TYPE_OWNERS:
 
126
        $old = $xaction->getOldValue();
 
127
        $new = $xaction->getNewValue();
 
128
 
 
129
        // TODO: needOwners this
 
130
        $owners = $object->loadOwners();
 
131
        $owners = mpull($owners, null, 'getUserPHID');
 
132
 
 
133
        $rem = array_diff($old, $new);
 
134
        foreach ($rem as $phid) {
 
135
          if (isset($owners[$phid])) {
 
136
            $owners[$phid]->delete();
 
137
            unset($owners[$phid]);
 
138
          }
 
139
        }
 
140
 
 
141
        $add = array_diff($new, $old);
 
142
        foreach ($add as $phid) {
 
143
          $owners[$phid] = id(new PhabricatorOwnersOwner())
 
144
            ->setPackageID($object->getID())
 
145
            ->setUserPHID($phid)
 
146
            ->save();
 
147
        }
 
148
 
 
149
        // TODO: Attach owners here
 
150
        return;
 
151
      case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
 
152
        $old = $xaction->getOldValue();
 
153
        $new = $xaction->getNewValue();
 
154
 
 
155
        // TODO: needPaths this
 
156
        $paths = $object->loadPaths();
 
157
 
 
158
        $diffs = PhabricatorOwnersPath::getTransactionValueChanges($old, $new);
 
159
        list($rem, $add) = $diffs;
 
160
 
 
161
        $set = PhabricatorOwnersPath::getSetFromTransactionValue($rem);
 
162
        foreach ($paths as $path) {
 
163
          $ref = $path->getRef();
 
164
          if (PhabricatorOwnersPath::isRefInSet($ref, $set)) {
 
165
            $path->delete();
 
166
          }
 
167
        }
 
168
 
 
169
        foreach ($add as $ref) {
 
170
          $path = PhabricatorOwnersPath::newFromRef($ref)
 
171
            ->setPackageID($object->getID())
 
172
            ->save();
 
173
        }
 
174
 
 
175
        return;
 
176
    }
 
177
 
 
178
    return parent::applyCustomExternalTransaction($object, $xaction);
 
179
  }
 
180
 
 
181
  protected function validateTransaction(
 
182
    PhabricatorLiskDAO $object,
 
183
    $type,
 
184
    array $xactions) {
 
185
 
 
186
    $errors = parent::validateTransaction($object, $type, $xactions);
 
187
 
 
188
    switch ($type) {
 
189
      case PhabricatorOwnersPackageTransaction::TYPE_NAME:
 
190
        $missing = $this->validateIsEmptyTextField(
 
191
          $object->getName(),
 
192
          $xactions);
 
193
 
 
194
        if ($missing) {
 
195
          $error = new PhabricatorApplicationTransactionValidationError(
 
196
            $type,
 
197
            pht('Required'),
 
198
            pht('Package name is required.'),
 
199
            nonempty(last($xactions), null));
 
200
 
 
201
          $error->setIsMissingFieldError(true);
 
202
          $errors[] = $error;
 
203
        }
 
204
        break;
 
205
      case PhabricatorOwnersPackageTransaction::TYPE_PRIMARY:
 
206
        $missing = $this->validateIsEmptyTextField(
 
207
          $object->getPrimaryOwnerPHID(),
 
208
          $xactions);
 
209
 
 
210
        if ($missing) {
 
211
          $error = new PhabricatorApplicationTransactionValidationError(
 
212
            $type,
 
213
            pht('Required'),
 
214
            pht('Packages must have a primary owner.'),
 
215
            nonempty(last($xactions), null));
 
216
 
 
217
          $error->setIsMissingFieldError(true);
 
218
          $errors[] = $error;
 
219
        }
 
220
        break;
 
221
    }
 
222
 
 
223
    return $errors;
 
224
  }
 
225
 
 
226
  protected function extractFilePHIDsFromCustomTransaction(
 
227
    PhabricatorLiskDAO $object,
 
228
    PhabricatorApplicationTransaction $xaction) {
 
229
 
 
230
    switch ($xaction->getTransactionType()) {
 
231
      case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION:
 
232
        return array($xaction->getNewValue());
 
233
    }
 
234
 
 
235
    return parent::extractFilePHIDsFromCustomTransaction($object, $xaction);
 
236
  }
 
237
 
 
238
  protected function shouldSendMail(
 
239
    PhabricatorLiskDAO $object,
 
240
    array $xactions) {
 
241
    return true;
 
242
  }
 
243
 
 
244
  protected function getMailSubjectPrefix() {
 
245
    return PhabricatorEnv::getEnvConfig('metamta.package.subject-prefix');
 
246
  }
 
247
 
 
248
  protected function getMailTo(PhabricatorLiskDAO $object) {
 
249
    return array(
 
250
      $object->getPrimaryOwnerPHID(),
 
251
      $this->requireActor()->getPHID(),
 
252
    );
 
253
  }
 
254
 
 
255
  protected function getMailCC(PhabricatorLiskDAO $object) {
 
256
    // TODO: needOwners() this
 
257
    return mpull($object->loadOwners(), 'getUserPHID');
 
258
  }
 
259
 
 
260
  protected function buildReplyHandler(PhabricatorLiskDAO $object) {
 
261
    return id(new OwnersPackageReplyHandler())
 
262
      ->setMailReceiver($object);
 
263
  }
 
264
 
 
265
  protected function buildMailTemplate(PhabricatorLiskDAO $object) {
 
266
    $id = $object->getID();
 
267
    $name = $object->getName();
 
268
 
 
269
    return id(new PhabricatorMetaMTAMail())
 
270
      ->setSubject($name)
 
271
      ->addHeader('Thread-Topic', $object->getPHID());
 
272
  }
 
273
 
 
274
  protected function buildMailBody(
 
275
    PhabricatorLiskDAO $object,
 
276
    array $xactions) {
 
277
 
 
278
    $body = parent::buildMailBody($object, $xactions);
 
279
 
 
280
    $detail_uri = PhabricatorEnv::getProductionURI(
 
281
      '/owners/package/'.$object->getID().'/');
 
282
 
 
283
    $body->addLinkSection(
 
284
      pht('PACKAGE DETAIL'),
 
285
      $detail_uri);
 
286
 
 
287
    return $body;
 
288
  }
 
289
 
 
290
}