forked from ProcessMaker/processmaker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDependent.php
More file actions
89 lines (77 loc) · 2.34 KB
/
Dependent.php
File metadata and controls
89 lines (77 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
namespace ProcessMaker\ImportExport;
class Dependent
{
public function __construct(
public string $type,
public string $uuid,
public Manifest $manifest,
public $meta,
public string $exporterClass,
public string $modelClass,
public array $fallbackMatches,
public bool $discard = false
) {
}
public function toArray()
{
return [
'type' => $this->type,
'uuid' => $this->uuid,
'meta' => $this->meta,
'exporterClass' => $this->exporterClass,
'modelClass' => $this->modelClass,
'fallbackMatches' => $this->fallbackMatches,
'name' => $this->name,
'discard' => $this->discard,
];
}
public static function fromArray(array $array, Manifest $manifest)
{
return array_map(function ($dependent) use ($manifest) {
return new self(
$dependent['type'],
$dependent['uuid'],
$manifest,
$dependent['meta'],
$dependent['exporterClass'],
$dependent['modelClass'],
$dependent['fallbackMatches'],
);
}, $array);
}
public function __get($property)
{
$asset = $this->manifest->get($this->uuid);
if ($property === 'model' && !$asset) {
// Attempt to reconstruct discarded model if it exists on the target instance
$assetInfo = [
'model' => $this->modelClass,
'attributes' => $this->fallbackMatches,
];
list($_, $model) = Manifest::getModel($this->uuid, $assetInfo, 'discard', $this->exporterClass);
// Only return the model if it is persisted in the database
if ($model && $model->exists) {
return $model;
}
}
if ($property === 'mode') {
if ($asset) {
return $asset->mode;
} else {
return 'discard';
}
}
if ($property === 'name') {
if ($asset) {
return $asset->getName($this->model);
} else {
return '';
}
}
if (!$asset) {
return null;
}
return $asset->$property;
}
}