/
WorkflowField.php
69 lines (53 loc) · 1.67 KB
/
WorkflowField.php
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
<?php
/**
* A form field that allows workflow actions and transitions to be edited,
* while showing a visual overview of the flow.
*
* @package advancedworkflow
*/
class WorkflowField extends FormField {
public static $allowed_actions = array(
'action',
'transition'
);
protected $definition;
public function __construct($name, $title, WorkflowDefinition $definition) {
$this->definition = $definition;
$this->addExtraClass('workflow-field');
parent::__construct($name, $title);
}
public function action() {
return new WorkflowFieldActionController($this, 'action');
}
public function transition() {
return new WorkflowFieldTransitionController($this, 'transition');
}
public function getTemplate() {
return 'WorkflowField';
}
public function FieldHolder($properties = array()) {
Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
Requirements::javascript(THIRDPARTY_DIR . '/jquery-entwine/dist/jquery.entwine-dist.js');
Requirements::javascript(ADVANCED_WORKFLOW_DIR . '/javascript/WorkflowField.js');
Requirements::css(ADVANCED_WORKFLOW_DIR . '/css/WorkflowField.css');
return $this->Field($properties);
}
public function Definition() {
return $this->definition;
}
public function CreateableActions() {
$list = new ArrayList();
$classes = ClassInfo::subclassesFor('WorkflowAction');
array_shift($classes);
sort($classes);
foreach($classes as $class) {
$reflect = new ReflectionClass($class);
$can = singleton($class)->canCreate() && !$reflect->isAbstract();
if($can) $list->push(new ArrayData(array(
'Title' => singleton($class)->singular_name(),
'Class' => $class
)));
}
return $list;
}
}