Skip to content

Commit 302d41f

Browse files
authored
Merge pull request #10 from soap/develop
Develop
2 parents bf78573 + 068ddf2 commit 302d41f

13 files changed

+121
-86
lines changed

config/workflow_loader.php

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
<?php
22

33
return [
4-
'databaseLoader' => [
5-
'tableNames' => [
6-
'workflows' => 'workflows',
7-
'workflow_states' => 'workflow_states',
8-
'workflow_transitions' => 'workflow_transitions',
9-
'workflow_state_transitions' => 'workflow_state_transitions',
4+
'loaders' => [
5+
'database' => [
6+
'tableNames' => [
7+
'workflows' => 'workflows',
8+
'workflow_states' => 'workflow_states',
9+
'workflow_transitions' => 'workflow_transitions',
10+
'workflow_state_transitions' => 'workflow_state_transitions',
11+
],
12+
'class' => \Soap\WorkflowLoader\DatabaseLoader::class,
1013
],
11-
'loaderClass' => \Soap\WorkflowLoader\DatabaseLoader::class,
1214
],
1315
];

database/migrations/wf1_create_workflows_table.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,23 @@
88
{
99
public function up()
1010
{
11-
Schema::create('workflows', function (Blueprint $table) {
11+
$tableName = app(\Soap\WorkflowLoader\DatabaseLoader::class)->getWorkflowTableName();
12+
Schema::create($tableName, function (Blueprint $table) {
1213
$table->id();
1314
$table->string('name');
14-
$table->string('marking_store_attribute')->nullable()->comment('name of marking store attribute');
15+
$table->text('marking_store')->nullable()->comment('marking store as array');
1516
$table->string('type')->default('workflow')->comment('workflow or state_machine');
1617
$table->text('description')->nullable();
1718
$table->json('supports')->nullable()->comment('support models');
1819
$table->json('metadata')->nullable()->comment('metadata');
20+
$table->boolean('active')->default(true);
1921
$table->timestamps();
2022
});
2123
}
2224

2325
public function down()
2426
{
25-
Schema::dropIfExists('workflows');
27+
$tableName = app(\Soap\WorkflowLoader\DatabaseLoader::class)->getWorkflowTableName();
28+
Schema::dropIfExists($tableName);
2629
}
2730
};

database/migrations/wf2_create_workflow_states_table.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
{
99
public function up()
1010
{
11-
Schema::create('workflow_states', function (Blueprint $table) {
11+
$tableName = app(\Soap\WorkflowLoader\DatabaseLoader::class)->getWorkflowStateTableName();
12+
Schema::create($tableName, function (Blueprint $table) {
1213
$table->id();
1314
$table->string('name');
1415
$table->tinyInteger('initial_state')->default(0)->comment('initial state');
@@ -21,6 +22,7 @@ public function up()
2122

2223
public function down()
2324
{
24-
Schema::dropIfExists('workflow_states');
25+
$tableName = app(\Soap\WorkflowLoader\DatabaseLoader::class)->getWorkflowStateTableName();
26+
Schema::dropIfExists($tableName);
2527
}
2628
};

database/migrations/wf3_create_workflow_transitions_table.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
{
99
public function up()
1010
{
11-
Schema::create('workflow_transitions', function (Blueprint $table) {
11+
$tableName = app(\Soap\WorkflowLoader\DatabaseLoader::class)->getWorkflowTransitionTableName();
12+
Schema::create($tableName, function (Blueprint $table) {
1213
$table->id();
1314
$table->string('name');
1415
$table->foreignId('to_state_id')->constrained('workflow_states')->onDelete('cascade');
@@ -20,6 +21,7 @@ public function up()
2021

2122
public function down()
2223
{
23-
Schema::dropIfExists('workflow_transitions');
24+
$tableName = app(\Soap\WorkflowLoader\DatabaseLoader::class)->getWorkflowTransitionTableName();
25+
Schema::dropIfExists($tableName);
2426
}
2527
};

database/migrations/wf4_create_workflow_state_transitions_table.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
{
99
public function up()
1010
{
11-
Schema::create('workflow_state_transitions', function (Blueprint $table) {
11+
$tableName = app(\Soap\WorkflowLoader\DatabaseLoader::class)->getWorkflowStateTransitionTableName();
12+
Schema::create($tableName, function (Blueprint $table) {
1213
$table->id();
1314
$table->foreignId('workflow_transition_id')->constrained('workflow_transitions')->onDelete('cascade');
1415
$table->foreignId('from_state_id')->constrained('workflow_states')->onDelete('cascade');
@@ -19,6 +20,7 @@ public function up()
1920

2021
public function down()
2122
{
22-
Schema::dropIfExists('workflow_state_transitions');
23+
$tableName = app(\Soap\WorkflowLoader\DatabaseLoader::class)->getWorkflowStateTransitionTableName();
24+
Schema::dropIfExists($tableName);
2325
}
2426
};

resources/stubs/WorkflowServiceProvider.php.stub

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,17 @@
33
namespace App\Providers;
44

55
use Illuminate\Support\ServiceProvider;
6-
use Soap\WorkflowLoader\DatabaseLoader;
76

87
class WorkflowServiceProvider extends ServiceProvider
98
{
10-
public function register()
11-
{
12-
13-
}
9+
public function register() {}
1410

1511
public function boot()
1612
{
17-
$registy = app()->make('workflow');
18-
$workflowLoader = app()->make('workflow-loader');
19-
foreach ($wokflowLoader->all() as $workflow => $config) {
20-
$registy->addFromArray($workflow, $config);
13+
$registry = app()->make('workflow');
14+
$workflowLoaderRegistry = app()->make('workflowLoaderRegistry');
15+
foreach ($workflowLoaderRegistry->all() as $workflow => $config) {
16+
$registry->addFromArray($workflow, $config);
2117
}
2218
}
2319
}

src/DatabaseLoader.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@ class DatabaseLoader implements WorkflowDatabaseLoader
1414
*/
1515
protected $config;
1616

17-
public function __construct(?array $config)
17+
protected $repo;
18+
19+
public function __construct(?array $config, WorkflowRepository $repo)
1820
{
1921
if (! isset($config[self::KEY_TABLE_NAMES])) {
2022
throw new \InvalidArgumentException('Table names not found in config');
2123
}
2224
$this->config = $config;
25+
$this->repo = $repo;
2326
}
2427

2528
public function getTableNames(): array
@@ -54,15 +57,15 @@ public function getWorkflowStateTransitionTableName(): string
5457

5558
public function load(string $workflowName): array
5659
{
57-
$repo = app()->make(WorkflowRepository::class);
60+
//$repo = app()->make(WorkflowRepository::class);
5861

59-
return $repo->findByName($workflowName);
62+
return $this->repo->findByName($workflowName);
6063
}
6164

6265
public function all(): array
6366
{
64-
$repo = app()->make(WorkflowRepository::class);
67+
//$repo = app()->make(WorkflowRepository::class);
6568

66-
return $repo->all();
69+
return $this->repo->all();
6770
}
6871
}

src/Facades/WorkflowLoader.php renamed to src/Facades/WorkflowLoaderRegistry.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
/**
88
* @see \Soap\WorkflowLoader\WorkflowLoader
99
*/
10-
class WorkflowLoader extends Facade
10+
class WorkflowLoaderRegistry extends Facade
1111
{
1212
protected static function getFacadeAccessor(): string
1313
{
14-
return \Soap\WorkflowLoader\WorkflowLoader::class;
14+
return 'workflowLoaderRegistry';
1515
}
1616
}

src/Models/Workflow.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class Workflow extends Model
1717
protected $casts = [
1818
'supports' => 'array',
1919
'metadata' => 'array',
20+
'marking_store' => 'array',
2021
'type' => WorkflowTypeEnum::class,
2122
];
2223

src/Repositories/WorkflowRepository.php

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,21 @@ protected function makeWorkflowCofig($workflow): array
5050
return $state->name;
5151
})->toArray();
5252

53-
$transitions = $workflow->transitions->map(function ($transition) {
54-
return [
55-
$transition->name => [
56-
'from' => $transition->fromStates->map(function ($transitionState) {
57-
return $transitionState->fromState->name;
58-
})->toArray(),
59-
'to' => $transition->toState->name,
60-
],
53+
$transitions = [];
54+
foreach ($workflow->transitions as $transition) {
55+
$transitions[$transition->name] = [
56+
'from' => $transition->fromStates->map(function ($transitionState) {
57+
return $transitionState->fromState->name;
58+
})->toArray(),
59+
'to' => $transition->toState->name,
6160
];
62-
})->toArray();
61+
}
6362

6463
return [
6564
$workflow->name => [
65+
'marking_store' => $workflow->marking_store ?? [],
66+
'type' => $workflow->type ? $workflow->type->value : 'workflow',
67+
'metadata' => $workflow->metadata,
6668
'supports' => $workflow->supports,
6769
'places' => $places,
6870
'transitions' => $transitions,

src/WorkflowLoader.php

Lines changed: 0 additions & 41 deletions
This file was deleted.

src/WorkflowLoaderRegistry.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace Soap\WorkflowLoader;
4+
5+
use Soap\WorkflowLoader\Contracts\WorkflowLoader as WorkflowLoaderContract;
6+
7+
class WorkflowLoaderRegistry
8+
{
9+
protected array $loaders = [];
10+
11+
public function __construct(array $loaders)
12+
{
13+
foreach ($loaders as $key => $loader) {
14+
if (! isset($loader['class'])) {
15+
throw new \Exception("Key 'class' configuration not found in {$key} loader");
16+
}
17+
18+
if (! class_exists($loader['class'])) {
19+
throw new \Exception("Class {$loader['class']} not found");
20+
}
21+
$this->registerLoader($key, app()->make($loader['class']));
22+
}
23+
}
24+
25+
public function registerLoader(string $name, WorkflowLoaderContract $loader)
26+
{
27+
$this->loaders[$name] = $loader;
28+
}
29+
30+
public function getLoaders(): array
31+
{
32+
return $this->loaders;
33+
}
34+
35+
public function getLoader(string $name): WorkflowLoaderContract
36+
{
37+
if (! isset($this->loaders[$name])) {
38+
throw new \Exception("Loader {$name} not found");
39+
}
40+
41+
return $this->loaders[$name];
42+
}
43+
44+
public function all(): array
45+
{
46+
if (count($this->loaders) === 0) {
47+
return [];
48+
}
49+
50+
$workflows = [];
51+
foreach ($this->loaders as $name => $loader) {
52+
foreach ($loader->all() as $workflow => $config) {
53+
$workflows[$workflow] = $config;
54+
}
55+
}
56+
57+
return $workflows;
58+
}
59+
}

src/WorkflowLoaderServiceProvider.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,14 @@ public function packageRegistered()
3232
{
3333
$this->app->when(\Soap\WorkflowLoader\DatabaseLoader::class)
3434
->needs('$config')
35-
->give(config('workflow_loader.databaseLoader'));
35+
->give($this->app->make('config')->get('workflow_loader.loaders.database'));
3636

37-
$this->app->singleton('workflow-loader', function ($app) {
38-
$workflowLoader = new WorkflowLoader($app->make(\Soap\WorkflowLoader\DatabaseLoader::class));
39-
});
37+
$this->app->when(\Soap\WorkflowLoader\WorkflowLoaderRegistry::class)
38+
->needs('$loaders')
39+
->give($this->app->make('config')->get('workflow_loader.loaders'));
40+
41+
$this->app->bind(\Soap\WorkflowLoader\Contracts\WorkflowDatabaseLoader::class, \Soap\WorkflowLoader\DatabaseLoader::class);
42+
43+
$this->app->singleton('workflowLoaderRegistry', \Soap\WorkflowLoader\WorkflowLoaderRegistry::class);
4044
}
4145
}

0 commit comments

Comments
 (0)