3require_once dirname(__DIR__) .
'/include/dbxWorkflowAdmin.class.php';
4require_once dirname(__DIR__, 2) .
'/dbxWorkflow/include/dbxWorkflowEngine.class.php';
8 $key = (string)($where[
'workflow_key'] ??
'');
10 'active_flow' => array(
12 'workflow_key' =>
'active_flow',
13 'title' =>
'Aktiver Ablauf',
14 'result_label' =>
'Aktives Ergebnis',
15 'description' =>
'Test',
17 'definition_json' =>
'{"needs":[{"key":"value","label":"Wert","actions":["form"]}]}',
19 'inactive_flow' => array(
21 'workflow_key' =>
'inactive_flow',
22 'title' =>
'Inaktiver Ablauf',
23 'result_label' =>
'Inaktives Ergebnis',
24 'description' =>
'Test',
26 'definition_json' =>
'{"needs":[{"key":"value","label":"Wert","actions":["form"]}]}',
29 if (!isset(
$rows[$key]))
return array();
30 if (isset($where[
'active']) && (
int)$where[
'active'] !== (
int)
$rows[$key][
'active'])
return array();
31 return array(
$rows[$key]);
50 public function get_config($modul =
'dbx', $key =
'', $default =
null) {
51 return $key ===
'default_workflow' ?
'active_flow' : $default;
55 return $name ===
'dbxDB' ? $this->db :
null;
59 return $name ===
'dbxWorkflowModule' ? $this->module :
null;
63if (!function_exists(
'dbx')) {
75 $this->values = $values;
79 return $this->values[$name] ?? $default;
83 return $this->values[$name] ?? $default;
88 if ($condition) return;
89 fwrite(STDERR,
"FEHLER: " . $message . PHP_EOL);
99 'actions' => array(
'create',
'select'),
100 'preferred' =>
'select',
101 'event' =>
'Alter Ereignistext',
104 'label' =>
'Kunde auswählen',
105 'adapter' =>
'customer_v2',
107 'source' => array(
'dd' =>
'dbxContact|contact'),
108 'complete_label' =>
'Kunde wurde im Fachformular gespeichert.',
109 'future_extension' => array(
'keep' =>
true),
113 'workflow_key' =>
'customer_flow',
114 'title' =>
'Kundenablauf',
115 'result' =>
'Kunde bearbeitet',
116 'description' =>
'Ausgangsbeschreibung',
117 'schema_version' => 3,
118 'custom_root' => array(
'owner_module' =>
'dbxContact'),
119 'bind_ref' =>
'dbxContact|customer_flow',
121 'checks' => array(array(
123 'severity' =>
'blocking',
126 'label' =>
'Kunde abschließen',
127 'strategy' =>
'atomic',
128 'custom_finish' => array(
'keep' =>
true),
133 'workflow_step_present' => array(0 =>
'1'),
134 'workflow_step_active' => array(0 =>
'1'),
135 'workflow_step_original' => array(0 => json_encode(
$originalNeed, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)),
136 'workflow_step_action_contract' => array(0 =>
'1'),
139 'workflow_step_actions' => array(0 => array(
'select',
'create')),
140 'workflow_step_action' => array(0 =>
'select'),
141 'workflow_step_kind' => array(0 =>
'input'),
142 'workflow_step_automation' => array(0 =>
'manual'),
143 'workflow_step_mode' => array(0 =>
'single'),
144 'workflow_step_required' => array(0 =>
'1'),
145 'workflow_step_label' => array(0 =>
'Kunde auswählen'),
146 'workflow_step_key' => array(0 =>
'primary_customer'),
147 'workflow_step_question' => array(0 =>
'Welcher Kunde wird verwendet?'),
148 'workflow_step_validation' => array(0 =>
'exactly_one'),
149 'workflow_step_missing_message' => array(0 =>
'Kunde fehlt.'),
150 'workflow_step_resolver_label' => array(0 =>
'Kundenauswahl öffnen'),
151 'workflow_step_hint' => array(0 =>
'Vorhandenen Kunden auswählen oder neu anlegen.'),
152 'workflow_step_event' => array(0 =>
''),
153 'workflow_step_depends_on' => array(0 =>
''),
154 'workflow_step_depends_value' => array(0 =>
''),
155 'workflow_step_options' => array(0 =>
''),
156 'workflow_step_complete_label' => array(0 =>
'Kunde wurde im Fachformular gespeichert.'),
157 'workflow_step_source' => array(0 => json_encode(
$originalNeed[
'source'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)),
158 'workflow_step_bind' => array(0 =>
''),
159 'workflow_step_module_links' => array(0 =>
''),
160 'workflow_finish_label' =>
'Kunde abschließen',
161 'workflow_bind_ref' =>
'',
165 'workflow_key' =>
'customer_flow',
166 'title' =>
'Kundenablauf aktualisiert',
167 'result_label' =>
'Kunde vollständig bearbeitet',
168 'description' =>
'Aktualisierte Beschreibung',
170$admin = new \dbx\dbxWorkflow_admin\dbxWorkflowAdmin();
179workflow_test_assert((
$definition[
'checks'][0][
'key'] ??
'') ===
'primary_customer',
'Check-Erweiterung wurde bei einer Key-Umbenennung nicht mitgeführt.');
180workflow_test_assert((
$need[
'future_extension'][
'keep'] ??
false) ===
true,
'Unbekannte Need-Erweiterung wurde entfernt.');
183workflow_test_assert((
$need[
'complete_label'] ??
'') ===
'Kunde wurde im Fachformular gespeichert.',
'complete_label wurde nicht erhalten.');
184workflow_test_assert((
$need[
'actions'] ?? array()) === array(
'create',
'select'),
'Mehrfachaktionen oder deren Reihenfolge wurden verändert.');
191$_POST[
'workflow_step_actions'][0] = array(
'form');
192$_POST[
'workflow_step_action'][0] =
'form';
193$_POST[
'workflow_step_label'][0] =
'Neue Notiz';
194$_POST[
'workflow_step_key'][0] =
'new_note';
195$_POST[
'workflow_step_complete_label'][0] =
'';
199workflow_test_assert(!isset(
$newNeed[
'future_extension']),
'Ein neuer Schritt hat Erweiterungen der wiederverwendeten alten Zeile geerbt.');
201workflow_test_assert((
$newNeed[
'actions'] ?? array()) === array(
'form'),
'Aktionen eines neuen Schritts wurden nicht sauber initialisiert.');
206$_POST[
'workflow_step_original'][0] =
'{ungueltig';
207$_POST[
'workflow_step_original_index'][0] =
'0';
212$engine = new \dbx\dbxWorkflow\dbxWorkflowEngine();
214 'workflow_key' =>
'check_extensions',
215 'title' =>
'Check-Erweiterungen',
216 'result' =>
'Geprüft',
217 'needs' => array(array(
218 'key' =>
'readiness',
219 'label' =>
'Bereitschaft',
220 'actions' => array(
'form'),
221 'resolver' => array(
'type' =>
'form',
'label' =>
'Prüfung öffnen'),
223 'checks' => array(array(
224 'key' =>
'readiness',
225 'severity' =>
'blocking',
226 'resolver' => array(
'telemetry_key' =>
'ready-v2'),
231workflow_test_assert((
$check[
'resolver'][
'telemetry_key'] ??
'') ===
'ready-v2',
'Resolver-Erweiterung des Checks wurde entfernt.');
236 'depends_on' =>
'channels',
237 'depends_value' =>
'ebay',
239 'channels' => array(
'shop',
'ebay'),
240)) ===
true,
'Ein Schritt hinter einer gültigen Mehrfachauswahl bleibt gesperrt.');
242 'depends_on' =>
'optional_note',
244 'optional_note' => array(
'skipped' => 1),
245)) ===
false,
'Ein übersprungener Abhängigkeitsschritt wurde als Wert behandelt.');
247workflow_test_assert((
$engine->load_definition(
'active_flow')[
'workflow_key'] ??
'') ===
'active_flow',
'Aktive Admin-Definition wurde nicht geladen.');
249workflow_test_assert((
$engine->load_definition(
'inactive_flow',
false)[
'workflow_key'] ??
'') ===
'inactive_flow',
'Inaktive Definition kann für eine bestehende Instanz nicht geladen werden.');
250workflow_test_assert(
$engine->load_definition(
'unknown_flow') === array(),
'Unbekannter Key wurde durch eine Fallback-Definition ersetzt.');
252echo
"OK: Workflow-Definitionen bleiben round-trip-sicher." . PHP_EOL;
get_config($modul='dbx', $key='', $default=null)
get_include_obj($name, $modul='')
select($dd, $where, $fields=' *', $order='', $dir='', $group='', $limit=0, $pos=0, $flag=0)
enrichDefinition(array $definition, array $values=array())
if(!defined( 'IMG_WEBP')) define( 'IMG_WEBP'
DBX schema administration.
workflow_test_assert($condition, string $message)