From 7a60faef27532a8b05a00748f68cf67bfba97a4f Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 18 Feb 2015 13:39:02 +0100 Subject: [PATCH] Command abstraction --- .../Console/Command/AbstractCommand.php | 44 ++++++++++++ .../PowerDNS/Command/AbstractZoneCommand.php | 70 +++++++++++++++++++ .../PowerDNS/Command/ZoneListCommand.php | 60 ++++------------ 3 files changed, 129 insertions(+), 45 deletions(-) create mode 100644 src/Deblan/Console/Command/AbstractCommand.php create mode 100644 src/Deblan/PowerDNS/Command/AbstractZoneCommand.php diff --git a/src/Deblan/Console/Command/AbstractCommand.php b/src/Deblan/Console/Command/AbstractCommand.php new file mode 100644 index 0000000..6c2cd51 --- /dev/null +++ b/src/Deblan/Console/Command/AbstractCommand.php @@ -0,0 +1,44 @@ +setInput($input); + $this->setOutput($output); + } + + public function setInput(InputInterface $input) + { + $this->input = $input; + + return $this; + } + + public function getInput() + { + return $this->input; + } + + public function setOutput(OutputInterface $output) + { + $this->output = $output; + + return $this; + } + + public function getOutput() + { + return $this->output; + } +} diff --git a/src/Deblan/PowerDNS/Command/AbstractZoneCommand.php b/src/Deblan/PowerDNS/Command/AbstractZoneCommand.php new file mode 100644 index 0000000..0f7fda9 --- /dev/null +++ b/src/Deblan/PowerDNS/Command/AbstractZoneCommand.php @@ -0,0 +1,70 @@ +addOption('active', null, InputOption::VALUE_NONE, '') + ->addOption('no-active', null, InputOption::VALUE_NONE, ''); + } + + protected function showZone(Zone $zone, $key) + { + $this->getOutput()->writeln(sprintf('%s.', $zone->getName())); + + if ($zone->getDescription()) { + $this->getOutput()->writeln($zone->getDescription()); + } + + foreach ($zone->getZoneVersions() as $key => $zoneVersion) { + $this->showZoneVersion($zoneVersion, $key); + } + } + + protected function showZoneVersion(ZoneVersion $zoneVersion, $key) + { + if ($this->getInput()->getOption('active') && false === $zoneVersion->getIsActive()) { + return; + } + + if ($this->getInput()->getOption('no-active') && true === $zoneVersion->getIsActive()) { + return; + } + + $this->getOutput()->writeln(''); + $this->getOutput()->writeln(sprintf( + 'Version: %d - Active: %s', + $zoneVersion->getVersion(), + $zoneVersion->getIsActive() ? 'Yes' : 'No' + )); + + $this->showZoneVersionRecords($zoneVersion); + } + + protected function showZoneVersionRecords(ZoneVersion $zoneVersion) + { + $this->getOutput()->writeln(''); + $this->getOutput()->writeln(' ID | NAME | TYPE | TTL | PRIO | CONTENT'); + $this->getOutput()->writeln('----------------------------------------------------------------------'); + + foreach ($zoneVersion->getZoneRecords() as $zoneRecord) { + $this->getOutput()->writeln(sprintf( + '%5d | %s | %s | %s | %s | %s', + $zoneRecord->getId(), + str_pad($zoneRecord->getName(), 21), + str_pad($zoneRecord->getType(), 9), + str_pad($zoneRecord->getTtl(), 6), + str_pad($zoneRecord->getPrio(), 7), + $zoneRecord->getContent() + )); + } + } +} diff --git a/src/Deblan/PowerDNS/Command/ZoneListCommand.php b/src/Deblan/PowerDNS/Command/ZoneListCommand.php index 2124c2d..7e9a471 100644 --- a/src/Deblan/PowerDNS/Command/ZoneListCommand.php +++ b/src/Deblan/PowerDNS/Command/ZoneListCommand.php @@ -8,77 +8,47 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Command\Command; use Deblan\PowerDNS\Model\ZoneQuery; -use Deblan\PowerDNS\Model\Zone; -use Deblan\PowerDNS\Model\ZoneVersion; -class ZoneListCommand extends Command +class ZoneListCommand extends AbstractZoneCommand { protected function configure() { + parent::configure(); + $this ->setName('zone:list') ->setDescription('List DNS zones') // ->addArgument('foo', InputArgument::OPTIONAL, '') - // ->addOption('bar', null, InputOption::VALUE_NONE, '') + ->addOption('name', null, InputOption::VALUE_REQUIRED, '') ->setHelp("The %command.name% "); } protected function execute(InputInterface $input, OutputInterface $output) { + parent::execute($input, $output); + // $this->getContainer()->get('foo.bar'); // $output->writeln(sprintf('%s bar.', $example)); // $input->getArgument('foo'); // $input->getOption('bar'); - $zones = ZoneQuery::create()->orderByName()->find(); + $query = $this->getZoneQuery(); + + $zones = $query->find(); foreach ($zones as $key => $zone) { - $this->showZone($zone, $output, $key); - + $this->showZone($zone, $key); } } - protected function showZone(Zone $zone, OutputInterface $output, $key) + protected function getZoneQuery() { - $output->writeln(sprintf('%s.', $zone->getName())); + $query = ZoneQuery::create()->orderByName(); - if ($zone->getDescription()) { - $output->writeln($zone->getDescription()); + if ($this->getInput()->getOption('name')) { + $query->filterByName(sprintf('%%%s%%', $this->getInput()->getOption('name'))); } - foreach ($zone->getZoneVersions() as $key => $zoneVersion) { - $this->showZoneVersion($zoneVersion, $output, $key); - } - } - - protected function showZoneVersion(ZoneVersion $zoneVersion, OutputInterface $output, $key) - { - $output->writeln(''); - $output->writeln(sprintf( - 'Version: %d - Active: %s', - $zoneVersion->getVersion(), - $zoneVersion->getIsActive() ? 'Yes' : 'No' - )); - - $this->showZoneVersionRecords($zoneVersion, $output); - } - - protected function showZoneVersionRecords(ZoneVersion $zoneVersion, OutputInterface $output) - { - $output->writeln(''); - $output->writeln(' ID | NAME | TYPE | TTL | PRIO | CONTENT'); - $output->writeln('----------------------------------------------------------------------'); - - foreach ($zoneVersion->getZoneRecords() as $zoneRecord) { - $output->writeln(sprintf( - '%5d | %s | %s | %s | %s | %s', - $zoneRecord->getId(), - str_pad($zoneRecord->getName(), 21), - str_pad($zoneRecord->getType(), 9), - str_pad($zoneRecord->getTtl(), 6), - str_pad($zoneRecord->getPrio(), 7), - $zoneRecord->getContent() - )); - } + return $query; } }