ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
AbstractTask.php
Go to the documentation of this file.
1<?php
2
4
7use ILIAS\BackgroundTasks\Implementation\Values\PrimitiveValueWrapperFactory;
8use ILIAS\BackgroundTasks\Implementation\Values\ScalarValues\BasicScalarValueFactory;
12
20abstract class AbstractTask implements Task
21{
22 use BasicScalarValueFactory;
23 const MAIN_REMOVE = 'bt_main_remove';
24 const MAIN_ABORT = 'bt_main_abort';
28 protected $input = [];
32 protected $output;
33
34
40 public function setInput(array $values)
41 {
42 $this->input = $this->getValues($values);
43 $this->checkTypes($this->input);
44 }
45
46
47 protected function checkTypes($values)
48 {
49 $expectedTypes = $this->getInputTypes();
50
51 for ($i = 0; $i < count($expectedTypes); $i++) {
52 $expectedType = $expectedTypes[$i];
53 $givenType = $this->extractType($values[$i]);
54 if (!$givenType->isExtensionOf($expectedType)) {
55 throw new InvalidArgumentException("Types did not match when setting input for "
56 . get_called_class()
57 . ". Expected type $expectedType given type $givenType.");
58 }
59 }
60 }
61
62
69 protected function extractType($value)
70 {
71 if (is_a($value, Value::class)) {
72 return $value->getType();
73 }
74 if (is_a($value, Task::class)) {
75 ;
76 }
77
78 return $value->getOutputType();
79
80 throw new InvalidArgumentException("Input values must be tasks or Values (extend BT\\Task or BT\\Value).");
81 }
82
83
89 public function getOutput()
90 {
91 $thunk = new ThunkValue($this->getOutputType());
92 $thunk->setParentTask($this);
93
94 return $thunk;
95 }
96
97
103 private function getValues($values)
104 {
105 $inputs = [];
106
107 foreach ($values as $value) {
108 if ($value instanceof Task) {
109 $inputs[] = $value->getOutput();
110 } elseif ($value instanceof Value) {
111 $inputs[] = $value;
112 } else {
113 $inputs[] = $this->wrapScalar($value);
114 }
115 }
116
117 return $inputs;
118 }
119
120
124 public function getInput()
125 {
126 return $this->input;
127 }
128
129
133 public function getType()
134 {
135 return get_called_class();
136 }
137
138
145 public function unfoldTask()
146 {
147 $list = [ $this ];
148 foreach ($this->getInput() as $input) {
149 if (is_a($input, ThunkValue::class)) {
150 $list = array_merge($list, $input->getParentTask()->unfoldTask());
151 }
152 }
153
154 return $list;
155 }
156
157
161 public function getRemoveOption()
162 {
163 return new UserInteractionOption('remove', self::MAIN_REMOVE);
164 }
165
166
170 public function getAbortOption()
171 {
172 return new UserInteractionOption('abort', self::MAIN_ABORT);
173 }
174}
An exception for terminatinating execution or to throw for unit testing.
getAbortOption()
Option In case a Job is failed or did not respond for some time, an Abort-Option is displayed....
getRemoveOption()
Option An Option to remove the current task and do some cleanup if possible. This Option is displayed...
$i
Definition: disco.tpl.php:19
if(isset($_REQUEST['delete'])) $list
Definition: registry.php:41