PopulateNewlyIntroducedDatabaseFields.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de>
  5. *
  6. * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
  7. * @author Christoph Wurst <christoph@winzerhof-wurst.at>
  8. *
  9. * @license GNU AGPL version 3 or any later version
  10. *
  11. * This program is free software: you can redistribute it and/or modify
  12. * it under the terms of the GNU Affero General Public License as
  13. * published by the Free Software Foundation, either version 3 of the
  14. * License, or (at your option) any later version.
  15. *
  16. * This program is distributed in the hope that it will be useful,
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  19. * GNU Affero General Public License for more details.
  20. *
  21. * You should have received a copy of the GNU Affero General Public License
  22. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  23. *
  24. */
  25. namespace OCA\WorkflowEngine\Migration;
  26. use OCP\DB\IResult;
  27. use OCP\IDBConnection;
  28. use OCP\Migration\IOutput;
  29. use OCP\Migration\IRepairStep;
  30. use OCP\WorkflowEngine\IManager;
  31. class PopulateNewlyIntroducedDatabaseFields implements IRepairStep {
  32. /** @var IDBConnection */
  33. private $dbc;
  34. public function __construct(IDBConnection $dbc) {
  35. $this->dbc = $dbc;
  36. }
  37. public function getName() {
  38. return 'Populating added database structures for workflows';
  39. }
  40. public function run(IOutput $output) {
  41. $result = $this->getIdsWithoutScope();
  42. $this->populateScopeTable($result);
  43. $result->closeCursor();
  44. }
  45. protected function populateScopeTable(IResult $ids): void {
  46. $qb = $this->dbc->getQueryBuilder();
  47. $insertQuery = $qb->insert('flow_operations_scope');
  48. while (($id = $ids->fetchOne()) !== false) {
  49. $insertQuery->values(['operation_id' => $qb->createNamedParameter($id), 'type' => IManager::SCOPE_ADMIN]);
  50. $insertQuery->execute();
  51. }
  52. }
  53. protected function getIdsWithoutScope(): IResult {
  54. $qb = $this->dbc->getQueryBuilder();
  55. $selectQuery = $qb->select('o.id')
  56. ->from('flow_operations', 'o')
  57. ->leftJoin('o', 'flow_operations_scope', 's', $qb->expr()->eq('o.id', 's.operation_id'))
  58. ->where($qb->expr()->isNull('s.operation_id'));
  59. // The left join operation is not necessary, usually, but it's a safe-guard
  60. // in case the repair step is executed multiple times for whatever reason.
  61. /** @var IResult $result */
  62. $result = $selectQuery->execute();
  63. return $result;
  64. }
  65. }