diff --git a/Admin/Install/db.json b/Admin/Install/db.json
index 66ea7a4..81810f1 100755
--- a/Admin/Install/db.json
+++ b/Admin/Install/db.json
@@ -63,6 +63,17 @@
"primary": true,
"autoincrement": true
},
+ "workflow_instance_title": {
+ "name": "workflow_instance_title",
+ "type": "VARCHAR(255)",
+ "default": null,
+ "null": true
+ },
+ "workflow_instance_status": {
+ "name": "workflow_instance_status",
+ "type": "INT",
+ "null": false
+ },
"workflow_instance_template": {
"name": "workflow_instance_template",
"type": "INT",
diff --git a/Controller.js b/Controller.js
new file mode 100644
index 0000000..f4228fa
--- /dev/null
+++ b/Controller.js
@@ -0,0 +1,26 @@
+import { Autoloader } from '../../jsOMS/Autoloader.js';
+
+Autoloader.defineNamespace('jsOMS.Modules');
+
+jsOMS.Modules.Workflow = class {
+ /**
+ * @constructor
+ *
+ * @since 1.0.0
+ */
+ constructor (app)
+ {
+ this.app = app;
+ };
+
+ bind (id)
+ {
+ mermaid.initialize({startOnLoad:true});
+ };
+
+ bindElement (chart)
+ {
+ };
+};
+
+window.omsApp.moduleManager.get('Workflow').bind();
diff --git a/Controller/ApiController.php b/Controller/ApiController.php
index f4875f0..3f1ac2a 100644
--- a/Controller/ApiController.php
+++ b/Controller/ApiController.php
@@ -21,6 +21,7 @@ use Modules\Media\Models\NullMedia;
use Modules\Media\Models\PathSettings;
use Modules\Workflow\Models\PermissionCategory;
use Modules\Workflow\Models\WorkflowInstanceAbstract;
+use Modules\Workflow\Models\WorkflowInstanceAbstractMapper;
use Modules\Workflow\Models\WorkflowStatus;
use Modules\Workflow\Models\WorkflowTemplate;
use Modules\Workflow\Models\WorkflowTemplateMapper;
@@ -146,7 +147,7 @@ final class ApiController extends Controller
}
/** @var WorkflowInstanceAbstract $instance */
- $instance = WorkflowInstanceMapper::get()
+ $instance = WorkflowInstanceAbstractMapper::get()
->with('template')
->with('template/source')
->with('template/source/sources')
@@ -602,18 +603,19 @@ final class ApiController extends Controller
return;
}
+ /** @var \Modules\Workflow\Models\WorkflowTemplate $template */
$template = WorkflowTemplateMapper::get()
- ->where('id', (int) $request->getData('id'))
+ ->with('source')
+ ->with('source/sources')
+ ->where('id', (int) $request->getData('template'))
->execute();
- $instance = $this->createInstanceFromRequest($template, $request);
-
- require_once $template->findFile('WorkflowInstanceMapper.php')->getPath();
+ $instance = $this->createInstanceFromRequest($request, $template);
$this->createModel(
$request->header->account,
$instance,
- \Modules\Workflow\Models\WorkflowInstanceMapper::class,
+ WorkflowInstanceAbstractMapper::class,
'instance',
$request->getOrigin()
);
@@ -632,7 +634,7 @@ final class ApiController extends Controller
private function validateInstanceCreate(RequestAbstract $request) : array
{
$val = [];
- if (($val['j'] = empty($request->getData('j')))) {
+ if (($val['template'] = empty($request->getData('template')))) {
return $val;
}
@@ -642,24 +644,24 @@ final class ApiController extends Controller
/**
* Method to create interface from request.
*
- * @param WorkflowTemplate $template Workflow template
* @param RequestAbstract $request Request
+ * @param WorkflowTemplate $template Workflow template
*
* @return WorkflowInstanceAbstract
*
* @since 1.0.0
*/
- private function createInstanceFromRequest(WorkflowTemplate $template, RequestAbstract $request) : WorkflowInstanceAbstract
+ private function createInstanceFromRequest(RequestAbstract $request, WorkflowTemplate $template) : WorkflowInstanceAbstract
{
$controller = null;
$file = $template->source->findFile('WorkflowController.php');
- require_once $file->getPath();
-
- $controller = new \Modules\Workflow\Controller\WorkflowController($this->app, $template);
+ require_once $file->getAbsolutePath();
/** @var \Modules\Workflow\Models\WorkflowControllerInterface $controller */
- $instance = $controller->createInstanceFromRequest($request);
+ $controller = new \Modules\Workflow\Controller\WorkflowController($this->app, $template);
+
+ $instance = $controller->createInstanceFromRequest($request, $template);
return $instance;
}
diff --git a/Controller/BackendController.php b/Controller/BackendController.php
index d58a159..32f1f4c 100755
--- a/Controller/BackendController.php
+++ b/Controller/BackendController.php
@@ -17,8 +17,10 @@ namespace Modules\Workflow\Controller;
use Modules\Media\Models\CollectionMapper;
use Modules\Media\Models\NullMedia;
use Modules\Workflow\Models\WorkflowControllerInterface;
+use Modules\Workflow\Models\WorkflowInstanceAbstractMapper;
use Modules\Workflow\Models\WorkflowInstanceMapper;
use Modules\Workflow\Models\WorkflowTemplateMapper;
+use phpOMS\Asset\AssetType;
use phpOMS\Contract\RenderableInterface;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
@@ -108,6 +110,10 @@ final class BackendController extends Controller
$view->setTemplate('/Modules/Workflow/Theme/Backend/workflow-profile');
}
+ $head = $response->get('Content')->getData('head');
+ $head->addAsset(AssetType::JSLATE, 'Resources/mermaid/mermaid.min.js');
+ $head->addAsset(AssetType::JSLATE, 'Modules/Workflow/Controller.js', ['type' => 'module']);
+
return $view;
}
@@ -150,6 +156,11 @@ final class BackendController extends Controller
$view->setTemplate('/Modules/Workflow/Theme/Backend/workflow-dashboard');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005501001, $request, $response));
+ $instances = WorkflowInstanceAbstractMapper::getAll()
+ ->execute();
+
+ $view->setData('instances', $instances);
+
return $view;
}
@@ -171,7 +182,8 @@ final class BackendController extends Controller
$view->setTemplate('/Modules/Workflow/Theme/Backend/workflow-instance-list');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005501001, $request, $response));
- $instances = WorkflowInstanceMapper::getAll()
+ /** @var \Modules\Workflow\Models\WorkflowInstanceAbstract $instances */
+ $instances = WorkflowInstanceAbstractMapper::getAll()
->execute();
$view->setData('instances', $instances);
@@ -196,13 +208,21 @@ final class BackendController extends Controller
$view = new View($this->app->l11nManager, $request, $response);
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005501001, $request, $response));
+ /** @var \Modules\Workflow\Models\WorkflowInstanceAbstract $instance */
+ $instance = WorkflowInstanceAbstractMapper::get()
+ ->where('id', (int) $request->getData('id'))
+ ->execute();
+
/** @var \Modules\Workflow\Models\WorkflowTemplate $template */
$template = WorkflowTemplateMapper::get()
->with('source')
->with('source/sources')
- ->where('template', (int) $request->getData('template'))
+ ->where('id', $instance->template->getId())
+ ->limit()
->execute();
+ $view->addData('template', $template);
+
if (!(($template->source->findFile('instance-profile.tpl.php')) instanceof NullMedia)) {
require_once $template->source->findFile('WorkflowController.php')->getPath();
diff --git a/Models/NullWorkflowInstance.php b/Models/NullWorkflowInstanceAbstract.php
similarity index 88%
rename from Models/NullWorkflowInstance.php
rename to Models/NullWorkflowInstanceAbstract.php
index e551259..a989326 100644
--- a/Models/NullWorkflowInstance.php
+++ b/Models/NullWorkflowInstanceAbstract.php
@@ -22,7 +22,7 @@ namespace Modules\Workflow\Models;
* @link https://karaka.app
* @since 1.0.0
*/
-final class NullWorkflowInstance extends WorkflowInstanceAbstract
+final class NullWorkflowInstanceAbstract extends WorkflowInstanceAbstract
{
/**
* Constructor
diff --git a/Models/WorkflowControllerInterface.php b/Models/WorkflowControllerInterface.php
index e5ffe91..e9d379b 100644
--- a/Models/WorkflowControllerInterface.php
+++ b/Models/WorkflowControllerInterface.php
@@ -31,13 +31,14 @@ interface WorkflowControllerInterface
/**
* Create instance from request
*
- * @param RequestAbstract $request Request
+ * @param RequestAbstract $request Request
+ * @param WorkflowTemplate $template Workflow template
*
* @return WorkflowInstanceAbstract
*
* @since 1.0.0
*/
- public function createInstanceFromRequest(RequestAbstract $request) : WorkflowInstanceAbstract;
+ public function createInstanceFromRequest(RequestAbstract $request, WorkflowTemplate $template) : WorkflowInstanceAbstract;
/**
* Create list of all instances for this workflow from a request
diff --git a/Models/WorkflowInstanceAbstract.php b/Models/WorkflowInstanceAbstract.php
index f3f1956..e7a9ea0 100644
--- a/Models/WorkflowInstanceAbstract.php
+++ b/Models/WorkflowInstanceAbstract.php
@@ -25,7 +25,7 @@ use Modules\Admin\Models\NullAccount;
* @link https://karaka.app
* @since 1.0.0
*/
-abstract class WorkflowInstanceAbstract
+class WorkflowInstanceAbstract
{
/**
* ID.
@@ -43,6 +43,14 @@ abstract class WorkflowInstanceAbstract
*/
public string $title = '';
+ /**
+ * Instance status.
+ *
+ * @var int
+ * @since 1.0.0
+ */
+ private int $status = WorkflowInstanceStatus::WORKING;
+
/**
* Template.
*
@@ -90,4 +98,30 @@ abstract class WorkflowInstanceAbstract
{
return $this->id;
}
+
+ /**
+ * Set status
+ *
+ * @param int $status Status
+ *
+ * @return void
+ *
+ * @since 1.0.0
+ */
+ public function setStatus(int $status) : void
+ {
+ $this->status = $status;
+ }
+
+ /**
+ * Get status
+ *
+ * @return int
+ *
+ * @since 1.0.0
+ */
+ public function getStatus() : int
+ {
+ return $this->status;
+ }
}
diff --git a/Models/WorkflowInstanceMapper.php b/Models/WorkflowInstanceAbstractMapper.php
similarity index 86%
rename from Models/WorkflowInstanceMapper.php
rename to Models/WorkflowInstanceAbstractMapper.php
index 48bbfb1..af4e3e8 100644
--- a/Models/WorkflowInstanceMapper.php
+++ b/Models/WorkflowInstanceAbstractMapper.php
@@ -25,7 +25,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
* @link https://karaka.app
* @since 1.0.0
*/
-final class WorkflowInstanceMapper extends DataMapperFactory
+final class WorkflowInstanceAbstractMapper extends DataMapperFactory
{
/**
* Columns.
@@ -35,6 +35,8 @@ final class WorkflowInstanceMapper extends DataMapperFactory
*/
public const COLUMNS = [
'workflow_instance_id' => ['name' => 'workflow_instance_id', 'type' => 'int', 'internal' => 'id'],
+ 'workflow_instance_title' => ['name' => 'workflow_instance_title', 'type' => 'string', 'internal' => 'title'],
+ 'workflow_instance_status' => ['name' => 'workflow_instance_status', 'type' => 'int', 'internal' => 'status'],
'workflow_instance_template' => ['name' => 'workflow_instance_template', 'type' => 'int', 'internal' => 'template'],
'workflow_instance_created_at' => ['name' => 'workflow_instance_created_at', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt', 'readonly' => true],
'workflow_instance_created_by' => ['name' => 'workflow_instance_created_by', 'type' => 'int', 'internal' => 'createdBy', 'readonly' => true],
diff --git a/Models/WorkflowInstanceStatus.php b/Models/WorkflowInstanceStatus.php
new file mode 100644
index 0000000..9a1fcc3
--- /dev/null
+++ b/Models/WorkflowInstanceStatus.php
@@ -0,0 +1,36 @@
+getData('nav')->render();
+/**
+ * @var \phpOMS\Views\View $this
+ */
+$instances = $this->getData('instances') ?? [];
+
+echo $this->getData('nav')->render(); ?>
+
+
+
+
+
= $this->getHtml('instance'); ?>
+
+
+
+
\ No newline at end of file
diff --git a/Theme/Backend/workflow-instance-list.tpl.php b/Theme/Backend/workflow-instance-list.tpl.php
index 56e7caf..3ea3d6a 100755
--- a/Theme/Backend/workflow-instance-list.tpl.php
+++ b/Theme/Backend/workflow-instance-list.tpl.php
@@ -12,5 +12,34 @@
*/
declare(strict_types=1);
-/** @var \phpOMS\Views\View $this */
-echo $this->getData('nav')->render();
+/**
+ * @var \phpOMS\Views\View $this
+ */
+$instances = $this->getData('instances') ?? [];
+
+echo $this->getData('nav')->render(); ?>
+
+
+
+
+
= $this->getHtml('instance'); ?>
+
+
+
+
\ No newline at end of file