From 3226df90e9c532d0b43c1059f72fe01ce870a357 Mon Sep 17 00:00:00 2001 From: chmst Date: Thu, 23 Apr 2020 23:40:27 +0200 Subject: [PATCH 1/3] Calculate the ordering number in store --- .../components/com_workflow/src/Table/StageTable.php | 10 ++++++++++ .../com_workflow/src/Table/TransitionTable.php | 12 +++++++++++- .../com_workflow/src/Table/WorkflowTable.php | 11 +++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/administrator/components/com_workflow/src/Table/StageTable.php b/administrator/components/com_workflow/src/Table/StageTable.php index 31589d6180e0f..35adfabe24435 100644 --- a/administrator/components/com_workflow/src/Table/StageTable.php +++ b/administrator/components/com_workflow/src/Table/StageTable.php @@ -177,6 +177,16 @@ public function check() */ public function store($updateNulls = true) { + $db = Factory::getDbo(); + $query = $db->getQuery(true); + + $query + ->select('IFNULL(MAX(' . $db->quoteName('ordering') . ') + 1, 1)') + ->from($db->quoteName('#__workflow_stages')) + ->where($db->quoteName('workflow_id') . ' = ' . (int) $this->workflow_id); + + $this->ordering = $db->setQuery($query)->loadResult(); + $table = new StageTable($this->getDbo()); if ($this->default == '1') diff --git a/administrator/components/com_workflow/src/Table/TransitionTable.php b/administrator/components/com_workflow/src/Table/TransitionTable.php index 80d5cbadc9549..9e7e8e7f52a2e 100644 --- a/administrator/components/com_workflow/src/Table/TransitionTable.php +++ b/administrator/components/com_workflow/src/Table/TransitionTable.php @@ -65,7 +65,17 @@ public function __construct(DatabaseDriver $db) * @since 4.0.0 */ public function store($updateNulls = true) - { + { + $db = Factory::getDbo(); + $query = $db->getQuery(true); + + $query + ->select('IFNULL(MAX(' . $db->quoteName('ordering') . ') + 1, 1)') + ->from($db->quoteName('#__workflow_transitions')) + ->where($db->quoteName('workflow_id') . ' = ' . (int) $this->workflow_id); + + $this->ordering = $db->setQuery($query)->loadResult(); + return parent::store($updateNulls); } diff --git a/administrator/components/com_workflow/src/Table/WorkflowTable.php b/administrator/components/com_workflow/src/Table/WorkflowTable.php index 04797b014fc51..4a56c88db3f7d 100644 --- a/administrator/components/com_workflow/src/Table/WorkflowTable.php +++ b/administrator/components/com_workflow/src/Table/WorkflowTable.php @@ -183,6 +183,16 @@ public function store($updateNulls = true) { $date = Factory::getDate(); $user = Factory::getUser(); + + $db = Factory::getDbo(); + $query = $db->getQuery(true); + + // Get next ordering number + $query + ->select('IFNULL(MAX(' . $db->quoteName('ordering') . ') + 1, 1)') + ->from($db->quoteName('#__workflows')); + + $ordering = $db->setQuery($query)->loadResult(); $table = new WorkflowTable($this->getDbo()); @@ -195,6 +205,7 @@ public function store($updateNulls = true) else { $this->modified_by = 0; + $this->ordering = $ordering; } if (!(int) $this->created) From d303ce3dd7d470fd104dc5bfd8c06ab9534d7f72 Mon Sep 17 00:00:00 2001 From: chmst Date: Fri, 24 Apr 2020 00:04:11 +0200 Subject: [PATCH 2/3] Use getNextOrder of Table/table.php --- .../com_workflow/src/Table/StageTable.php | 13 ++++--------- .../com_workflow/src/Table/TransitionTable.php | 13 ++++--------- .../com_workflow/src/Table/WorkflowTable.php | 16 +++++----------- 3 files changed, 13 insertions(+), 29 deletions(-) diff --git a/administrator/components/com_workflow/src/Table/StageTable.php b/administrator/components/com_workflow/src/Table/StageTable.php index 35adfabe24435..e6e89789da04e 100644 --- a/administrator/components/com_workflow/src/Table/StageTable.php +++ b/administrator/components/com_workflow/src/Table/StageTable.php @@ -177,15 +177,10 @@ public function check() */ public function store($updateNulls = true) { - $db = Factory::getDbo(); - $query = $db->getQuery(true); - - $query - ->select('IFNULL(MAX(' . $db->quoteName('ordering') . ') + 1, 1)') - ->from($db->quoteName('#__workflow_stages')) - ->where($db->quoteName('workflow_id') . ' = ' . (int) $this->workflow_id); - - $this->ordering = $db->setQuery($query)->loadResult(); + if (!$this->ordering) + { + $this->ordering = $this->getNextOrder($this->_db->quoteName('workflow_id') . ' = ' . (int) $this->workflow_id); + } $table = new StageTable($this->getDbo()); diff --git a/administrator/components/com_workflow/src/Table/TransitionTable.php b/administrator/components/com_workflow/src/Table/TransitionTable.php index 9e7e8e7f52a2e..b1fe87df51ad0 100644 --- a/administrator/components/com_workflow/src/Table/TransitionTable.php +++ b/administrator/components/com_workflow/src/Table/TransitionTable.php @@ -66,15 +66,10 @@ public function __construct(DatabaseDriver $db) */ public function store($updateNulls = true) { - $db = Factory::getDbo(); - $query = $db->getQuery(true); - - $query - ->select('IFNULL(MAX(' . $db->quoteName('ordering') . ') + 1, 1)') - ->from($db->quoteName('#__workflow_transitions')) - ->where($db->quoteName('workflow_id') . ' = ' . (int) $this->workflow_id); - - $this->ordering = $db->setQuery($query)->loadResult(); + if (!$this->ordering) + { + $this->ordering = $this->getNextOrder($this->_db->quoteName('workflow_id') . ' = ' . (int) $this->workflow_id); + } return parent::store($updateNulls); } diff --git a/administrator/components/com_workflow/src/Table/WorkflowTable.php b/administrator/components/com_workflow/src/Table/WorkflowTable.php index 4a56c88db3f7d..236913cc52360 100644 --- a/administrator/components/com_workflow/src/Table/WorkflowTable.php +++ b/administrator/components/com_workflow/src/Table/WorkflowTable.php @@ -183,16 +183,6 @@ public function store($updateNulls = true) { $date = Factory::getDate(); $user = Factory::getUser(); - - $db = Factory::getDbo(); - $query = $db->getQuery(true); - - // Get next ordering number - $query - ->select('IFNULL(MAX(' . $db->quoteName('ordering') . ') + 1, 1)') - ->from($db->quoteName('#__workflows')); - - $ordering = $db->setQuery($query)->loadResult(); $table = new WorkflowTable($this->getDbo()); @@ -205,7 +195,11 @@ public function store($updateNulls = true) else { $this->modified_by = 0; - $this->ordering = $ordering; + } + + if (!(int) $this->ordering) + { + $this->ordering = $this->getNextOrder(); } if (!(int) $this->created) From e4c59fb8d350bd6c4c4120b2fcdd952ed911c838 Mon Sep 17 00:00:00 2001 From: chmst Date: Fri, 24 Apr 2020 00:08:18 +0200 Subject: [PATCH 3/3] add casting for (int) --- administrator/components/com_workflow/src/Table/StageTable.php | 2 +- .../components/com_workflow/src/Table/TransitionTable.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/administrator/components/com_workflow/src/Table/StageTable.php b/administrator/components/com_workflow/src/Table/StageTable.php index e6e89789da04e..c0bcf7527657c 100644 --- a/administrator/components/com_workflow/src/Table/StageTable.php +++ b/administrator/components/com_workflow/src/Table/StageTable.php @@ -177,7 +177,7 @@ public function check() */ public function store($updateNulls = true) { - if (!$this->ordering) + if (!(int) $this->ordering) { $this->ordering = $this->getNextOrder($this->_db->quoteName('workflow_id') . ' = ' . (int) $this->workflow_id); } diff --git a/administrator/components/com_workflow/src/Table/TransitionTable.php b/administrator/components/com_workflow/src/Table/TransitionTable.php index b1fe87df51ad0..c99095e4b94cb 100644 --- a/administrator/components/com_workflow/src/Table/TransitionTable.php +++ b/administrator/components/com_workflow/src/Table/TransitionTable.php @@ -66,7 +66,7 @@ public function __construct(DatabaseDriver $db) */ public function store($updateNulls = true) { - if (!$this->ordering) + if (!(int) $this->ordering) { $this->ordering = $this->getNextOrder($this->_db->quoteName('workflow_id') . ' = ' . (int) $this->workflow_id); }