summaryrefslogtreecommitdiffstats
path: root/source/Command/Restore.php
diff options
context:
space:
mode:
authorPhilip Nicolcev <frugen@gmail.com>2014-08-24 13:12:44 -0400
committerPhilip Nicolcev <frugen@gmail.com>2014-08-24 13:12:44 -0400
commitf5fe739314de24e3a9cb94b9c8c64e11ed9cc14c (patch)
treebe46c6120d6dc0d08a7112a8dc80840281cbad33 /source/Command/Restore.php
parent9ffeed7646620ae7de51b929a3b44f2cdffb677f (diff)
parent5d8755faf06fd2ff9d3977f103e641b0ba9f714e (diff)
downloadAJAX-Chat-origin/cli_testing.zip
AJAX-Chat-origin/cli_testing.tar.gz
AJAX-Chat-origin/cli_testing.tar.bz2
Merge pull request #178 from stevleibelt/masterorigin/cli_testing
Implemented Command Line Tools in cli_testing branch
Diffstat (limited to 'source/Command/Restore.php')
-rw-r--r--source/Command/Restore.php152
1 files changed, 152 insertions, 0 deletions
diff --git a/source/Command/Restore.php b/source/Command/Restore.php
new file mode 100644
index 0000000..60c78a7
--- /dev/null
+++ b/source/Command/Restore.php
@@ -0,0 +1,152 @@
+<?php
+/**
+ * @author stev leibelt <artodeto@bazzline.net>
+ * @since 2014-08-17
+ */
+
+/**
+ * Class Command_Restore
+ */
+class Command_Restore extends Command_AbstractCommand
+{
+ /**
+ * @var string
+ */
+ private $command;
+
+ /**
+ * @var array
+ */
+ private $commands = array(
+ 'all',
+ 'channels',
+ 'application',
+ 'users',
+ 'version'
+ );
+
+ /**
+ * @var Filesystem
+ */
+ private $filesystem;
+
+ /**
+ * @var Configuration_Path
+ */
+ private $pathConfiguration;
+
+ /**
+ * @param Configuration_Path $configuration
+ */
+ public function setPathConfiguration(Configuration_Path $configuration)
+ {
+ $this->pathConfiguration = $configuration;
+ }
+
+ /**
+ * @param Filesystem $filesystem
+ */
+ public function setFilesystem(Filesystem $filesystem)
+ {
+ $this->filesystem = $filesystem;
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function execute()
+ {
+ $identifiers = array();
+
+ switch ($this->command) {
+ case 'all':
+ $identifiers = array(
+ 'channels',
+ 'pathConfiguration',
+ 'users',
+ 'version'
+ );
+ break;
+ case 'channels':
+ $identifiers[] = 'channels';
+ break;
+ case 'pathConfiguration':
+ $identifiers[] = 'pathConfiguration';
+ break;
+ case 'users':
+ $identifiers[] = 'users';
+ break;
+ case 'version':
+ $identifiers[] = 'version';
+ break;
+ }
+
+ $identifierToPaths = array(
+ 'channels' => array(
+ 'backup' => $this->pathConfiguration->getBackupChannelsFilePath(),
+ 'chat' => $this->pathConfiguration->getChatChannelsFilePath()
+ ),
+ 'pathConfiguration' => array(
+ 'backup' => $this->pathConfiguration->getBackupConfigurationFilePath(),
+ 'chat' => $this->pathConfiguration->getChatConfigurationFilePath()
+ ),
+ 'users' => array(
+ 'backup' => $this->pathConfiguration->getBackupUsersFilePath(),
+ 'chat' => $this->pathConfiguration->getChatUsersFilePath()
+ ),
+ 'version' => array(
+ 'backup' => $this->pathConfiguration->getBackupVersionFilePath(),
+ 'chat' => $this->pathConfiguration->getChatVersionFilePath()
+ ),
+ );
+
+ foreach ($identifiers as $identifier) {
+ if ($this->filesystem->isFile($identifierToPaths[$identifier]['backup'])) {
+ $this->output->addLine($identifier . ' backup file available, will restore it ...');
+ $this->filesystem->copy(
+ $identifierToPaths[$identifier]['backup'],
+ $identifierToPaths[$identifier]['chat']
+ );
+ } else {
+ $this->output->addLine('no ' . $identifier .' backup file available ...');
+ }
+ }
+ }
+
+ /**
+ * @return array
+ */
+ public function getUsage()
+ {
+ return array(
+ '[--' . implode('|--', $this->commands) . ']'
+ );
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function verify()
+ {
+ if ($this->input->getNumberOfArguments() !== 1) {
+ throw new Exception(
+ 'invalid number of arguments provided'
+ );
+ }
+
+ foreach ($this->commands as $command) {
+ if ($this->input->hasLongOption($command)) {
+ $this->command = $command;
+ break;
+ }
+ }
+
+ if (is_null($this->command)) {
+ throw new Exception(
+ 'invalid command provided'
+ );
+ }
+
+ $this->command = $command;
+ }
+} \ No newline at end of file