seeddms-code/utils/Commands/DeleteCommand.php
2025-11-13 13:57:03 +01:00

129 lines
5.3 KiB
PHP

<?php
namespace Seeddms\Console\Commands;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Seeddms\Seeddms\Settings;
use Seeddms\Seeddms\Translator;
use Log_file;
class DeleteCommand extends Command
{
protected $settings;
protected $logger;
protected $translator;
public function __construct(Settings $settings, Log_file $logger, Translator $translator)
{
$this->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("<comment>Using configuration from '".$settings->_configFilePath."'.</comment>");
if (!is_writable($settings->_contentDir)) {
$output->writeln(sprintf("<error>The content dir '%s' is not writable for the system user running this script.</error>", $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("<error>No such user '%s'</error>", $username));
return Command::FAILURE;
}
} else {
$output->writeln("<error>You must specify a user.</error>");
return Command::FAILURE;
}
$dms->setUser($user);
$output->writeln("<comment>Running as user ".$user->getLogin().".</comment>");
$folderids = $input->getOption('folder');
$documentids = $input->getOption('document');
$empty = $input->getOption('empty');
if(!$documentids && !$folderids) {
$output->writeln("<error>You need to specify a folder or document.</error>");
return Command::FAILURE;
}
foreach($folderids as $folderid) {
$folder = $dms->getFolder((int) $folderid);
if (!is_object($folder)) {
$output->writeln("<error>Could not find specified folder.</error>");
return Command::FAILURE;
}
if ($folder->getAccessMode($user) < M_ALL) {
$output->writeln("<error>Insufficient access rights to remove folder with id=".$folderid."</error>");
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("<error>Could not ".($empty ? 'empty' : 'remove')." folder with id=".$folderid."</error>");
return Command::FAILURE;
} else {
$output->writeln("<info>Folder with id=".$folderid." ".($empty ? 'emptied' : 'removed').".</info>");
}
}
}
foreach($documentids as $documentid) {
$document = $dms->getDocument((int) $documentid);
if (!is_object($document)) {
$output->writeln("<error>Could not find specified document.</error>");
return Command::FAILURE;
}
if ($document->getAccessMode($user) < M_ALL) {
$output->writeln("<error>Insufficient access rights to remove document with id=".$documentid."</error>");
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("<error>Could not remove document with id=".$documentid."</error>");
return Command::FAILURE;
} else {
$output->writeln("<info>Document with id=".$documentid." removed.</info>");
}
}
}
return Command::SUCCESS;
}
}
// vim: ts=4 sw=4 expandtab