summaryrefslogtreecommitdiffstats
path: root/source/Command/Backup.php
diff options
context:
space:
mode:
Diffstat (limited to 'source/Command/Backup.php')
-rw-r--r--source/Command/Backup.php107
1 files changed, 107 insertions, 0 deletions
diff --git a/source/Command/Backup.php b/source/Command/Backup.php
new file mode 100644
index 0000000..14b74c6
--- /dev/null
+++ b/source/Command/Backup.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * @author stev leibelt <artodeto@bazzline.net>
+ * @since 2014-08-16
+ */
+
+/**
+ * Class Command_Backup
+ */
+class Command_Backup extends Command_AbstractCommand
+{
+ /**
+ * @var Configuration_Path
+ */
+ private $pathConfiguration;
+
+ /**
+ * @var Filesystem
+ */
+ private $filesystem;
+
+ /**
+ * @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()
+ {
+ if (!$this->filesystem->isDirectory($this->pathConfiguration->getBackupPath())) {
+ $this->filesystem->createDirectory($this->pathConfiguration->getBackupPath());
+ }
+
+ $identifierToPaths = array(
+ 'channels' => array(
+ 'backup' => $this->pathConfiguration->getBackupChannelsFilePath(),
+ 'chat' => $this->pathConfiguration->getChatChannelsFilePath()
+ ),
+ 'application' => 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 ($identifierToPaths as $identifier => $paths) {
+ if ($this->filesystem->isFile($paths['backup'])) {
+ $this->output->addLine($identifier . ' backup file available, will delete it ...');
+ $this->filesystem->deleteFile($paths['backup']);
+ }
+ }
+
+ foreach ($identifierToPaths as $identifier => $paths) {
+ echo 'creating backup of ' . $identifier . ' ...' . PHP_EOL;
+ $this->filesystem->copy(
+ $paths['chat'],
+ $paths['backup']
+ );
+ }
+ }
+
+ /**
+ * @return array
+ */
+ public function getUsage()
+ {
+ return array();
+ }
+
+ /**
+ * @throws Exception
+ */
+ public function verify()
+ {
+ if (is_null($this->pathConfiguration)) {
+ throw new Exception(
+ 'application is mandatory'
+ );
+ }
+
+ if (is_null($this->filesystem)) {
+ throw new Exception(
+ 'filesystem is mandatory'
+ );
+ }
+ }
+} \ No newline at end of file