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