Passed
Pull Request — master (#155)
by
unknown
08:25
created

DocumentWorkflow::getWorkflow()   A

Complexity

Conditions 6
Paths 5

Size

Total Lines 27
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 14
c 1
b 0
f 0
nc 5
nop 0
dl 0
loc 27
rs 9.2222
1
<?php
2
namespace EWW\Dpf\Domain\Workflow;
3
4
/*
5
 * This file is part of the TYPO3 CMS project.
6
 *
7
 * It is free software; you can redistribute it and/or modify it under
8
 * the terms of the GNU General Public License, either version 2
9
 * of the License, or any later version.
10
 *
11
 * For the full copyright and license information, please read the
12
 * LICENSE.txt file that was distributed with this source code.
13
 *
14
 * The TYPO3 project - inspiring people to share!
15
 */
16
17
use Symfony\Component\Workflow\DefinitionBuilder;
18
use Symfony\Component\Workflow\MarkingStore\MethodMarkingStore;
19
use Symfony\Component\Workflow\Transition;
20
use Symfony\Component\Workflow\Workflow;
21
use Symfony\Component\Workflow\Registry;
22
23
class DocumentWorkflow
24
{
25
    public const LOCAL_STATE_NONE          = 'NONE';
26
    public const LOCAL_STATE_NEW           = 'NEW';
27
    public const LOCAL_STATE_REGISTERED    = 'REGISTERED';
28
    public const LOCAL_STATE_IN_PROGRESS   = 'IN_PROGRESS';
29
    public const LOCAL_STATE_DISCARDED     = 'DISCARDED';
30
    public const LOCAL_STATE_POSTPONED     = 'POSTPONED';
31
    public const LOCAL_STATE_DELETED       = 'DELETED';
32
33
    public const REMOTE_STATE_NONE         = 'NONE';
34
    public const REMOTE_STATE_ACTIVE       = "ACTIVE";
35
    public const REMOTE_STATE_INACTIVE     = "INACTIVE";
36
    public const REMOTE_STATE_DELETED      = "DELETED";
37
38
    public const STATE_NONE_NONE            = self::LOCAL_STATE_NONE.':'.self::REMOTE_STATE_NONE;
39
40
    // New
41
    public const STATE_NEW_NONE             = self::LOCAL_STATE_NEW.':'.self::REMOTE_STATE_NONE;
42
43
    // Registered
44
    public const STATE_REGISTERED_NONE      = self::LOCAL_STATE_REGISTERED.':'.self::REMOTE_STATE_NONE;
45
46
    // In progress
47
    public const STATE_IN_PROGRESS_NONE     = self::LOCAL_STATE_IN_PROGRESS.':'.self::REMOTE_STATE_NONE;
48
    public const STATE_IN_PROGRESS_ACTIVE   = self::LOCAL_STATE_IN_PROGRESS.":".self::REMOTE_STATE_ACTIVE;
49
    public const STATE_IN_PROGRESS_INACTIVE = self::LOCAL_STATE_IN_PROGRESS.":".self::REMOTE_STATE_INACTIVE;
50
    public const STATE_IN_PROGRESS_DELETED  = self::LOCAL_STATE_IN_PROGRESS.":".self::REMOTE_STATE_DELETED;
51
52
    // Active
53
    public const STATE_NONE_ACTIVE          = self::LOCAL_STATE_NONE.':'.self::REMOTE_STATE_ACTIVE;
54
55
    // Postponed
56
    public const STATE_POSTPONED_NONE       = self::LOCAL_STATE_POSTPONED.':'.self::REMOTE_STATE_NONE;
57
    public const STATE_NONE_INACTIVE        = self::LOCAL_STATE_NONE.':'.self::REMOTE_STATE_INACTIVE;
58
59
    // Discarded
60
    public const STATE_DISCARDED_NONE       = self::LOCAL_STATE_DISCARDED.':'.self::REMOTE_STATE_NONE;
61
    public const STATE_NONE_DELETED         = self::LOCAL_STATE_NONE.':'.self::REMOTE_STATE_DELETED;
62
63
    public const TRANSITION_CREATE              = "CREATE_TRANSITION";
64
    public const TRANSITION_CREATE_REGISTER     = "CREATE_REGISTER_TRANSITION";
65
    public const TRANSITION_REGISTER            = "REGISTER_TRANSITION";
66
    public const TRANSITION_DISCARD             = "DISCARD_TRANSITION";
67
    public const TRANSITION_POSTPONE            = "POSTPONE_TRANSITION";
68
    public const TRANSITION_RELEASE_PUBLISH     = "RELEASE_PUBLISH_TRANSITION";
69
    public const TRANSITION_RELEASE_UPDATE      = "RELEASE_UPDATE_TRANSITION";
70
    public const TRANSITION_RELEASE_ACTIVATE    = "RELEASE_ACTIVATE_TRANSITION";
71
    public const TRANSITION_DELETE_LOCALLY      = "DELETE_LOCALLY_TRANSITION";
72
    public const TRANSITION_DELETE_WORKING_COPY = "DELETE_WORKING_COPY_TRANSITION";
73
    public const TRANSITION_DELETE_DISCARDED    = "DELETE_DISCARDED_TRANSITION";
74
75
    public const PLACES = [
76
        self::STATE_NONE_NONE,
77
        self::STATE_NEW_NONE,
78
        self::STATE_REGISTERED_NONE,
79
        self::STATE_IN_PROGRESS_NONE,
80
        self::STATE_DISCARDED_NONE,
81
        self::STATE_NONE_DELETED,
82
        self::STATE_POSTPONED_NONE,
83
        self::STATE_NONE_INACTIVE,
84
        self::STATE_NONE_ACTIVE,
85
        self::STATE_IN_PROGRESS_ACTIVE,
86
        self::STATE_IN_PROGRESS_INACTIVE,
87
        self::STATE_IN_PROGRESS_DELETED
88
    ];
89
90
    public const TRANSITIONS = [
91
        self::TRANSITION_CREATE => [
92
            "from" => [self::STATE_NONE_NONE],
93
            "to" => self::STATE_NEW_NONE
94
        ],
95
        self::TRANSITION_CREATE_REGISTER => [
96
            "from" => [self::STATE_NONE_NONE],
97
            "to" => self::STATE_REGISTERED_NONE
98
        ],
99
        self::TRANSITION_REGISTER => [
100
            "from" => [self::STATE_NEW_NONE],
101
            "to" => self::STATE_REGISTERED_NONE
102
        ],
103
        self::TRANSITION_DISCARD => [
104
            "from" => [
105
                self::STATE_REGISTERED_NONE,
106
                self::STATE_IN_PROGRESS_NONE,
107
                self::STATE_POSTPONED_NONE,
108
                self::STATE_IN_PROGRESS_ACTIVE,
109
                self::STATE_IN_PROGRESS_INACTIVE,
110
                self::STATE_IN_PROGRESS_DELETED,
111
                self::STATE_NONE_ACTIVE,
112
                self::STATE_NONE_INACTIVE,
113
                self::STATE_NONE_DELETED
114
            ],
115
            "to" => [
116
                self::STATE_DISCARDED_NONE,
117
                self::STATE_DISCARDED_NONE,
118
                self::STATE_DISCARDED_NONE,
119
                self::STATE_NONE_DELETED,
120
                self::STATE_NONE_DELETED,
121
                self::STATE_NONE_DELETED,
122
                self::STATE_NONE_DELETED,
123
                self::STATE_NONE_DELETED,
124
                self::STATE_NONE_DELETED
125
            ]
126
        ],
127
        self::TRANSITION_POSTPONE => [
128
            "from" => [
129
                self::STATE_REGISTERED_NONE,
130
                self::STATE_IN_PROGRESS_NONE,
131
                self::STATE_DISCARDED_NONE,
132
                self::STATE_IN_PROGRESS_ACTIVE,
133
                self::STATE_IN_PROGRESS_DELETED,
134
                self::STATE_IN_PROGRESS_INACTIVE,
135
                self::STATE_NONE_ACTIVE,
136
                self::STATE_NONE_DELETED,
137
                self::STATE_NONE_INACTIVE
138
            ],
139
            "to" => [
140
                self::STATE_POSTPONED_NONE,
141
                self::STATE_POSTPONED_NONE,
142
                self::STATE_POSTPONED_NONE,
143
                self::STATE_NONE_INACTIVE,
144
                self::STATE_NONE_INACTIVE,
145
                self::STATE_NONE_INACTIVE,
146
                self::STATE_NONE_INACTIVE,
147
                self::STATE_NONE_INACTIVE,
148
                self::STATE_NONE_INACTIVE
149
            ]
150
        ],
151
        self::TRANSITION_RELEASE_PUBLISH => [
152
            "from" => [
153
                self::STATE_REGISTERED_NONE,
154
                self::STATE_IN_PROGRESS_NONE,
155
                self::STATE_DISCARDED_NONE,
156
                self::STATE_POSTPONED_NONE,
157
            ],
158
            "to" => self::STATE_NONE_ACTIVE
159
        ],
160
        self::TRANSITION_RELEASE_ACTIVATE => [
161
            "from" => [
162
                self::STATE_IN_PROGRESS_ACTIVE,
163
                self::STATE_IN_PROGRESS_INACTIVE,
164
                self::STATE_IN_PROGRESS_DELETED,
165
                self::STATE_NONE_ACTIVE,
166
                self::STATE_NONE_INACTIVE,
167
                self::STATE_NONE_DELETED
168
            ],
169
            "to" => self::STATE_NONE_ACTIVE
170
        ],
171
        self::TRANSITION_DELETE_LOCALLY => [
172
            "from" => [self::STATE_NEW_NONE],
173
            "to" => self::STATE_NONE_NONE
174
        ],
175
        self::TRANSITION_DELETE_DISCARDED => [
176
            "from" => [self::STATE_DISCARDED_NONE],
177
            "to" => self::STATE_NONE_NONE
178
        ],
179
        self::TRANSITION_DELETE_WORKING_COPY => [
180
            "from" => [self::STATE_IN_PROGRESS_ACTIVE, self::STATE_IN_PROGRESS_INACTIVE, self::STATE_IN_PROGRESS_DELETED],
181
            "to" => self::STATE_NONE_NONE
182
        ],
183
    ];
184
    
185
    public static function getWorkflow()
186
    {
187
        $definitionBuilder = new DefinitionBuilder();
188
189
        $definitionBuilder->addPlaces(self::PLACES);
190
191
        foreach (self::TRANSITIONS as $transitionName => $transition) {
192
            if (!empty($transition["from"]) && !empty($transition["to"])) {
193
                foreach ($transition["from"] as $key => $fromState) {
194
                    if (is_array($transition["to"])) {
195
                        $definitionBuilder->addTransition(
196
                            new Transition($transitionName, $fromState, $transition["to"][$key])
197
                        );
198
                    } else {
199
                        $definitionBuilder->addTransition(
200
                             new Transition($transitionName, $fromState, $transition["to"])
201
                        );
202
                    }
203
                }
204
            }
205
        }
206
207
        $definition = $definitionBuilder->build();
208
209
        $marking = new MethodMarkingStore(TRUE, 'state');
210
211
        return new Workflow($definition, $marking);
212
    }
213
214
}