mirror of
https://git.code.sf.net/p/seeddms/code
synced 2025-11-28 18:40:39 +00:00
129 lines
5.3 KiB
PHP
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
|