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;
}
}