File Manager

Current Directory: /home/astoriaah/www/administrator/components/com_akeeba/CliCommands
Viewing File: /home/astoriaah/www/administrator/components/com_akeeba/CliCommands/FilterIncludeDatabase.php
<?php /** * @package akeebabackup * @copyright Copyright (c)2006-2022 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\Backup\Admin\CliCommands; defined('_JEXEC') || die; use Akeeba\Backup\Admin\Model\MultipleDatabases; use FOF40\Container\Container; use Joomla\Console\Command\AbstractCommand; use Akeeba\Backup\Admin\CliCommands\MixIt\ArgumentUtilities; use Akeeba\Backup\Admin\CliCommands\MixIt\ConfigureIO; use Akeeba\Backup\Admin\CliCommands\MixIt\FilterRoots; use Akeeba\Backup\Admin\CliCommands\MixIt\IsPro; use Akeeba\Backup\Admin\CliCommands\MixIt\PrintFormattedArray; use Joomla\Plugin\Console\AkeebaBackup\Helper\UUID4; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * akeeba:filter:include-database * * Add an additional database to be backed up by Akeeba Backup. * * @since 7.5.0 */ class FilterIncludeDatabase extends AbstractCommand { use ConfigureIO, ArgumentUtilities, PrintFormattedArray, IsPro, FilterRoots; /** * The default command name * * @var string * @since 7.5.0 */ protected static $defaultName = 'akeeba:filter:include-database'; /** * Internal function to execute the command. * * @param InputInterface $input The input to inject into the command. * @param OutputInterface $output The output to inject into the command. * * @return integer The command exit code * * @since 7.5.0 */ protected function doExecute(InputInterface $input, OutputInterface $output): int { $this->configureSymfonyIO($input, $output); if (!$this->isPro()) { $this->ioStyle->error('This feature requires Akeeba Backup Professional'); return 1; } $profileId = (int) ($this->cliInput->getOption('profile') ?? 1); define('AKEEBA_PROFILE', $profileId); // Initialization $uuidObject = new UUID4(true); $uuid = $uuidObject->get('-'); $check = (bool) $this->cliInput->getOption('check') ?? false; $data = [ 'driver' => (string) $this->cliInput->getOption('dbdriver') ?? 'mysqli', 'host' => (string) $this->cliInput->getOption('dbhost') ?? 'localhost', 'port' => (int) $this->cliInput->getOption('port') ?? 0, 'user' => (string) $this->cliInput->getOption('dbusername') ?? '', 'password' => (string) $this->cliInput->getOption('dbpassword') ?? '', 'database' => (string) $this->cliInput->getOption('dbname') ?? '', 'prefix' => (string) $this->cliInput->getOption('dbprefix') ?? '', ]; $data['port'] = ($data['port'] === 0) ? null : $data['port']; // Does the database definition already exist? $container = Container::getInstance('com_akeeba'); /** @var MultipleDatabases $model */ $model = $container->factory->model('MultipleDatabases')->tmpInstance(); if ($model->filterExists($data)) { $this->ioStyle->error(sprintf("The database '%s' is already included. Delete the old inclusion filter before trying to add the database again.", $data['database'])); return 2; } // Can I connect to the database? $checkResults = $model->test($data); if ($check && !$checkResults['status']) { $this->ioStyle->error(sprintf("Could not connect to the database '%s'. Server reported '%s'. Use the --no-check option to continue anyway but be advised that your backup will most likely result in an error.", $data['database'], $checkResults['message'])); return 3; } // Add the filter if (!$model->setFilter($uuid, $data)) { $this->ioStyle->error(sprintf("Could not include database '%s'.", $data['database'])); return 4; } $this->ioStyle->success(sprintf("Added database '%s'.", $data['database'])); return 0; } /** * Configure the command. * * @return void * * @since 7.5.0 */ protected function configure(): void { $help = "<info>%command.name%</info> will add an additional database to be backed up by Akeeba Backup. \nUsage: <info>php %command.full_name%</info>"; $this->addOption('profile', null, InputOption::VALUE_OPTIONAL, 'The backup profile to use. Default: 1.', 1); $this->addOption('dbdriver', null, InputOption::VALUE_OPTIONAL, 'The database driver to use: mysqli, mysql, pdomysql', 'mysqli'); $this->addOption('dbport', null, InputOption::VALUE_OPTIONAL, 'The database server port. Skip to use the driver\'s default.', null); $this->addOption('dbusername', null, InputOption::VALUE_REQUIRED, 'The database connection username.'); $this->addOption('dbpassword', null, InputOption::VALUE_REQUIRED, 'The database connection password.'); $this->addOption('dbname', null, InputOption::VALUE_REQUIRED, 'The database name.'); $this->addOption('dbprefix', null, InputOption::VALUE_OPTIONAL, 'The common prefix of the database table names, allows you to change it on restoration.', null); $this->addOption('check', null, InputOption::VALUE_NONE, 'Check the database connection before adding the filter.'); $this->setDescription('Adds an additional database to be backed up by Akeeba Backup.'); $this->setHelp($help); } }