/** * Delete a workspace * * @param Workspace $workspace A workspace to delete * @return void */ public function deleteAction(Workspace $workspace) { if (substr($workspace->getName(), 0, 5) === 'user-') { $this->redirect('index'); } $dependentWorkspaces = $this->workspaceRepository->findByBaseWorkspace($workspace); if (count($dependentWorkspaces) > 0) { $dependentWorkspaceTitles = []; /** @var Workspace $dependentWorkspace */ foreach ($dependentWorkspaces as $dependentWorkspace) { $dependentWorkspaceTitles[] = $dependentWorkspace->getTitle(); } $message = $this->translator->translateById('workspaces.workspaceCannotBeDeletedBecauseOfDependencies', [$workspace->getTitle(), implode(', ', $dependentWorkspaceTitles)], null, null, 'Modules', 'TYPO3.Neos'); $this->addFlashMessage($message, '', Message::SEVERITY_WARNING); $this->redirect('index'); } $nodesCount = 0; try { $nodesCount = $this->publishingService->getUnpublishedNodesCount($workspace); } catch (\Exception $exception) { $message = $this->translator->translateById('workspaces.notDeletedErrorWhileFetchingUnpublishedNodes', [$workspace->getTitle()], null, null, 'Modules', 'TYPO3.Neos'); $this->addFlashMessage($message, '', Message::SEVERITY_WARNING); $this->redirect('index'); } if ($nodesCount > 0) { $message = $this->translator->translateById('workspaces.workspaceCannotBeDeletedBecauseOfUnpublishedNodes', [$workspace->getTitle(), $nodesCount], $nodesCount, null, 'Modules', 'TYPO3.Neos'); $this->addFlashMessage($message, '', Message::SEVERITY_WARNING); $this->redirect('index'); } $this->workspaceRepository->remove($workspace); $this->addFlashMessage($message = $this->translator->translateById('workspaces.workspaceHasBeenRemoved', [$workspace->getTitle()], null, null, 'Modules', 'TYPO3.Neos')); $this->redirect('index'); }
/** * Deletes a workspace * * This command deletes a workspace. If you only want to empty a workspace and not delete the * workspace itself, use <i>workspace:discard</i> instead. * * @param string $workspace Name of the workspace, for example "christmas-campaign" * @param boolean $force Delete the workspace and all of its contents * @return void * @see typo3.neos:workspace:discard */ public function deleteCommand($workspace, $force = false) { $workspaceName = $workspace; $workspace = $this->workspaceRepository->findOneByName($workspaceName); if (!$workspace instanceof Workspace) { $this->outputLine('Workspace "%s" does not exist', [$workspaceName]); $this->quit(1); } if ($workspace->isPersonalWorkspace()) { $this->outputLine('Did not delete workspace "%s" because it is a personal workspace. Personal workspaces cannot be deleted manually.', [$workspaceName]); $this->quit(2); } $dependentWorkspaces = $this->workspaceRepository->findByBaseWorkspace($workspace); if (count($dependentWorkspaces) > 0) { $this->outputLine('Workspace "%s" cannot be deleted because the following workspaces are based on it:', [$workspaceName]); $this->outputLine(); $tableRows = []; $headerRow = ['Name', 'Title', 'Description']; /** @var Workspace $workspace */ foreach ($dependentWorkspaces as $workspace) { $tableRows[] = [$workspace->getName(), $workspace->getTitle(), $workspace->getDescription()]; } $this->output->outputTable($tableRows, $headerRow); $this->quit(3); } try { $nodesCount = $this->publishingService->getUnpublishedNodesCount($workspace); } catch (\Exception $exception) { $this->outputLine('An error occurred while fetching unpublished nodes from workspace %s, nothing was deleted.', [$workspaceName]); $this->quit(4); } if ($nodesCount > 0) { if ($force === false) { $this->outputLine('Did not delete workspace "%s" because it contains %s unpublished node(s). Use --force to delete it nevertheless.', [$workspaceName, $nodesCount]); $this->quit(5); } $this->discardCommand($workspaceName); } $this->workspaceRepository->remove($workspace); $this->outputLine('Deleted workspace "%s"', [$workspaceName]); }