settings = $settings; $this->logger = $logger; $this->translator = $translator; parent::__construct(); } protected function configure() { $this->setName('dms:delete') ->setDescription('Delete a folder or document') ->setHelp('Folders can also be emptied.') ->addOption('user', 'u', InputOption::VALUE_REQUIRED, 'Run in behalf of this user.', '') ->addOption('folder', '', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Delete this folder.', null) ->addOption('document', '', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Delete this document.', null) ->addOption('empty', '', InputOption::VALUE_REQUIRED, 'Do not delete but empty the given folder.', null); } protected function execute(InputInterface $input, OutputInterface $output) : int { $app = $this->getApplication(); $settings = $this->settings; $logger = $this->logger; $translator = $this->translator; $output->writeln("Using configuration from '".$settings->_configFilePath."'."); if (!is_writable($settings->_contentDir)) { $output->writeln(sprintf("The content dir '%s' is not writable for the system user running this script.", $settings->_contentDir)); return Command::FAILURE; } require_once('inc/inc.DBInit.php'); $username = $input->getOption('user'); if ($username) { if (!($user = $dms->getUserByLogin($username))) { $output->writeln(sprintf("No such user '%s'", $username)); return Command::FAILURE; } } else { $output->writeln("You must specify a user."); return Command::FAILURE; } $dms->setUser($user); $output->writeln("Running as user ".$user->getLogin()."."); $folderids = $input->getOption('folder'); $documentids = $input->getOption('document'); $empty = $input->getOption('empty'); if(!$documentids && !$folderids) { $output->writeln("You need to specify a folder or document."); return Command::FAILURE; } foreach($folderids as $folderid) { $folder = $dms->getFolder((int) $folderid); if (!is_object($folder)) { $output->writeln("Could not find specified folder."); return Command::FAILURE; } if ($folder->getAccessMode($user) < M_ALL) { $output->writeln("Insufficient access rights to remove folder with id=".$folderid.""); return Command::FAILURE; } else { if($empty) $controller = Controller::factory('EmptyFolder', array('dms'=>$dms, 'user'=>$user)); else $controller = Controller::factory('RemoveFolder', array('dms'=>$dms, 'user'=>$user)); $controller->setParam('folder', $folder); $controller->setParam('fulltextservice', $fulltextservice); if(!$folder = $controller->run()) { $output->writeln("Could not ".($empty ? 'empty' : 'remove')." folder with id=".$folderid.""); return Command::FAILURE; } else { $output->writeln("Folder with id=".$folderid." ".($empty ? 'emptied' : 'removed')."."); } } } foreach($documentids as $documentid) { $document = $dms->getDocument((int) $documentid); if (!is_object($document)) { $output->writeln("Could not find specified document."); return Command::FAILURE; } if ($document->getAccessMode($user) < M_ALL) { $output->writeln("Insufficient access rights to remove document with id=".$documentid.""); return Command::FAILURE; } else { $controller = Controller::factory('RemoveDocument', array('dms'=>$dms, 'user'=>$user)); $controller->setParam('document', $document); $controller->setParam('fulltextservice', $fulltextservice); if(!$document = $controller->run()) { $output->writeln("Could not remove document with id=".$documentid.""); return Command::FAILURE; } else { $output->writeln("Document with id=".$documentid." removed."); } } } return Command::SUCCESS; } } // vim: ts=4 sw=4 expandtab