Prevent deletion of referenced BP config

This commit is contained in:
raviks789 2022-08-04 10:11:02 +02:00 committed by Johannes Meyer
parent 3a7dc64a50
commit da2ed1aef4
2 changed files with 27 additions and 4 deletions

View file

@ -149,10 +149,17 @@ class BpConfigForm extends BpConfigBaseForm
$name = $this->getValue('name');
if ($this->shouldBeDeleted()) {
$this->config->clearAppliedChanges();
$this->storage->deleteProcess($name);
$this->setSuccessUrl('businessprocess');
$this->redirectOnSuccess(sprintf('Process %s has been deleted', $name));
if ($this->config->isReferenced()) {
$this->addError(sprintf(
$this->translate('Process "%s" cannot be deleted as it has been referenced in other processes'),
$name
));
} else {
$this->config->clearAppliedChanges();
$this->storage->deleteProcess($name);
$this->setSuccessUrl('businessprocess');
$this->redirectOnSuccess(sprintf('Process %s has been deleted', $name));
}
}
}

View file

@ -305,6 +305,22 @@ class BpConfig
return $this->backend;
}
public function isReferenced()
{
foreach ($this->storage()->listProcessNames() as $bpName) {
if ($bpName !== $this->getName()) {
$bp = $this->storage()->loadProcess($bpName);
foreach ($bp->getImportedNodes() as $importedNode) {
if ($importedNode->getConfigName() === $this->getName()) {
return true;
}
}
}
}
return false;
}
public function hasBackend()
{
return $this->backend !== null;