/**
  * @dataProvider provideTestDirs
  */
 public function testAddDir($dirname, $expected_result, $manipulate, $zipContentsOnly = false)
 {
     # Create new archive
     $archive = '/tmp/archive.zip';
     $zip = new ZipArchiveEx();
     $zip->open($archive, ZIPARCHIVE::OVERWRITE);
     # Try to add directory:
     if ($zipContentsOnly) {
         $result = $zip->addDirContents($dirname);
     } else {
         $result = $zip->addDir($dirname);
     }
     $this->assertEquals($expected_result, $result);
     # Close archive:
     $zip->close();
     # If directory was added successfully
     if ($result) {
         # Remove extracted testdirectory from
         # former testruns:
         $extractionDir = self::$tmpDir . '/' . basename($dirname);
         FileSystemManager::rrmdir($extractionDir);
         # Extract directory
         $output = array();
         # -u Option forces update of already existing files,
         # importang for testing on travis-ci.org!
         $extractTo = $zipContentsOnly ? $extractionDir : self::$tmpDir;
         exec('unzip -u ' . $archive . ' -d ' . $extractTo, $output, $result);
         $this->assertEquals(0, $result);
         # 0 = successfull
         # $manipulate holds the file to manipulate,
         # so the following assertion fails.
         if ($manipulate) {
             file_put_contents($extractionDir . '/' . $manipulate, 'Lorem ipsum dolor sit amet.');
             $expected_result = 1;
         } else {
             $expected_result = 0;
         }
         # Compare extracted directory and original one
         exec('diff -arq ' . $dirname . ' ' . $extractionDir, $output, $result);
         LogMore::debug('Output of diff-command: %s', implode(PHP_EOL, $output));
         LogMore::debug('Expecting %d, got: %d', $expected_result, $result);
         $this->assertEquals($expected_result, $result);
     }
 }
Example #2
0
 protected function __construct(Menu $xMenu)
 {
     $this->menu = $xMenu;
     $rewp = new ReWP(WP_VAGRANTIZE_HOME . COMPOSER_DIR . '/amekusa/ReWP');
     $this->actions = array(new AjaxAction('saveSettings', function () use($rewp) {
         if (!$_POST) {
             wp_send_json_error();
         }
         if (!array_key_exists('data', $_POST)) {
             wp_send_json_error();
         }
         $data = array();
         parse_str($_POST['data'], $data);
         $rewp->setData($data);
         $dest = $rewp->exportData();
         if (!$dest) {
             wp_send_json_error();
         } else {
             $time = filemtime($dest);
             wp_send_json_success(array('file' => $dest, 'date' => date(get_option('time_format') . ', ' . get_option('date_format'), $time), 'datetime' => date(DATE_W3C, $time)));
         }
     }), new AjaxAction('resetSettings', function () use($rewp) {
         if (!$rewp->reset()) {
             wp_send_json_error();
         } else {
             wp_send_json_success();
         }
     }), new AjaxAction('renderSettingsTable', function () use($rewp) {
         $data = $rewp->getData();
         ob_start();
         include __DIR__ . '/view/SettingsTable.php';
         wp_send_json_success(ob_get_clean());
     }), new AjaxAction('download', function () use($rewp) {
         $name = $rewp->getData('hostname');
         if (!$name) {
             $name = $rewp->getData('ip');
         }
         if (!$name) {
             $name = 'vagrantme.up';
         }
         $name = preg_replace('/^[^a-zA-Z0-9_-]+/', '', $name);
         $name = preg_replace('/[^a-zA-Z0-9_-]+$/', '', $name);
         $name = preg_replace('/[^a-zA-Z0-9_.-]/', '_', $name);
         $dest = WP_VAGRANTIZE_HOME . ".exports/{$name}." . date('YmdHis') . '.zip';
         $zip = new \ZipArchiveEx();
         $zip->open($dest, \ZipArchive::OVERWRITE);
         $zip->addDirContents($rewp->getPath());
         $db = '';
         if ($rewp->getData('import_sql')) {
             $db = $rewp->exportDB(WP_VAGRANTIZE_HOME . '.exports');
             $zip->addFile($db, basename($db));
         }
         $zip->close();
         if ($db) {
             unlink($db);
         }
         $time = filemtime($dest);
         wp_send_json_success(array('file' => $dest, 'fileUrl' => WP_VAGRANTIZE_URL . 'download.php?file=' . basename($dest), 'date' => date(get_option('time_format') . ', ' . get_option('date_format'), $time), 'datetime' => date(DATE_W3C, $time)));
     }));
     // @formatter:on
     foreach ($this->actions as $iAct) {
         $iAct->register();
     }
     add_action('load-' . $this->getId(), array($this, 'setup'));
 }