Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>pull/16682/head
parent
804d4fe69f
commit
bd5c455da4
@ -0,0 +1,77 @@ |
||||
<?php |
||||
declare(strict_types=1); |
||||
/** |
||||
* @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCA\WorkflowEngine\Command; |
||||
|
||||
use OCA\WorkflowEngine\Manager; |
||||
use OCP\WorkflowEngine\IManager; |
||||
use Symfony\Component\Console\Command\Command; |
||||
use Symfony\Component\Console\Input\InputArgument; |
||||
use Symfony\Component\Console\Input\InputInterface; |
||||
use Symfony\Component\Console\Output\OutputInterface; |
||||
|
||||
class Index extends Command { |
||||
|
||||
/** @var Manager */ |
||||
private $manager; |
||||
|
||||
public function __construct(Manager $manager) { |
||||
$this->manager = $manager; |
||||
parent::__construct(); |
||||
} |
||||
|
||||
protected function configure() { |
||||
$this |
||||
->setName('workflows:list') |
||||
->setDescription('Lists configured workflows') |
||||
->addArgument( |
||||
'scope', |
||||
InputArgument::OPTIONAL, |
||||
'Lists workflows for "admin", "user"', |
||||
'admin' |
||||
) |
||||
->addArgument( |
||||
'scopeId', |
||||
InputArgument::OPTIONAL, |
||||
'User IDs when the scope is "user"', |
||||
null |
||||
); |
||||
} |
||||
|
||||
protected function mappedScope(string $scope): int { |
||||
static $scopes = [ |
||||
'admin' => IManager::SCOPE_ADMIN, |
||||
'user' => IManager::SCOPE_USER, |
||||
]; |
||||
return $scopes[$scope] ?? -1; |
||||
} |
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output) { |
||||
$ops = $this->manager->getAllOperations( |
||||
$this->mappedScope($input->getArgument('scope')), |
||||
$input->getArgument('scopeId') |
||||
); |
||||
$output->writeln(\json_encode($ops)); |
||||
} |
||||
} |
@ -0,0 +1,76 @@ |
||||
<?php |
||||
declare(strict_types=1); |
||||
/** |
||||
* @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCA\WorkflowEngine\Migration; |
||||
|
||||
use Doctrine\DBAL\Driver\Statement; |
||||
use OCP\IDBConnection; |
||||
use OCP\Migration\IOutput; |
||||
use OCP\Migration\IRepairStep; |
||||
use OCP\WorkflowEngine\IManager; |
||||
|
||||
class PopulateNewlyIntroducedDatabaseFields implements IRepairStep { |
||||
|
||||
/** @var IDBConnection */ |
||||
private $dbc; |
||||
|
||||
public function __construct(IDBConnection $dbc) { |
||||
$this->dbc = $dbc; |
||||
} |
||||
|
||||
public function getName() { |
||||
return 'Populating added database structures for workflows'; |
||||
} |
||||
|
||||
public function run(IOutput $output) { |
||||
$result = $this->getIdsWithoutScope(); |
||||
|
||||
$this->populateScopeTable($result); |
||||
|
||||
$result->closeCursor(); |
||||
} |
||||
|
||||
protected function populateScopeTable(Statement $ids): void { |
||||
$qb = $this->dbc->getQueryBuilder(); |
||||
|
||||
$insertQuery = $qb->insert('flow_operations_scope'); |
||||
while($id = $ids->fetchColumn(0)) { |
||||
$insertQuery->values(['operation_id' => $qb->createNamedParameter($id), 'type' => IManager::SCOPE_ADMIN]); |
||||
} |
||||
$insertQuery->execute(); |
||||
} |
||||
|
||||
protected function getIdsWithoutScope(): Statement { |
||||
$qb = $this->dbc->getQueryBuilder(); |
||||
$selectQuery = $qb->select('o.id') |
||||
->from('flow_operations', 'o') |
||||
->leftJoin('o', 'flow_operations_scope', 's', $qb->expr()->eq('o.id', 's.operation_id')) |
||||
->where($qb->expr()->isNull('s.operation_id')); |
||||
// The left join operation is not necessary, usually, but it's a safe-guard |
||||
// in case the repair step is executed multiple times for whatever reason. |
||||
|
||||
return $selectQuery->execute(); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue