/** * @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); } }
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')); }