Version Description
- Added storage layer to avoid permission issues with OS's directory used for temporary storage
- Added additional checks to verify the consistency of the imported archive
- Fixed a bug that caused the database to be exported without data
- Removed unused variables from package.json file
Download this release
Release Info
| Developer | bangelov |
| Plugin | |
| Version | 1.7.0 |
| Comparing to | |
| See all releases | |
Code changes from version 1.6.0 to 1.7.0
- all-in-one-wp-migration.php +1 -1
- constants.php +11 -1
- lib/controller/class-ai1wm-export-controller.php +15 -8
- lib/controller/class-ai1wm-import-controller.php +9 -2
- lib/model/class-ai1wm-export.php +57 -41
- lib/model/class-ai1wm-file.php +37 -41
- lib/model/class-ai1wm-import.php +211 -147
- lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpPDO.php +8 -5
- lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpSQL.php +8 -5
- lib/vendor/storage-factory/storage-factory/.editorconfig +26 -0
- lib/vendor/storage-factory/storage-factory/.travil.yml +10 -0
- lib/vendor/storage-factory/storage-factory/LICENSE +20 -0
- lib/vendor/storage-factory/storage-factory/README.md +32 -0
- lib/vendor/storage-factory/storage-factory/bump-version.sh +63 -0
- lib/vendor/storage-factory/storage-factory/composer.json +25 -0
- lib/vendor/storage-factory/storage-factory/lib/StorageAbstract.php +89 -0
- lib/vendor/storage-factory/storage-factory/lib/StorageArea.php +89 -0
- lib/vendor/storage-factory/storage-factory/lib/StorageDirectory.php +109 -0
- lib/vendor/storage-factory/storage-factory/lib/StorageFile.php +85 -0
- lib/vendor/storage-factory/storage-factory/phpunit.xml +29 -0
- lib/vendor/storage-factory/storage-factory/test/bootstrap.php +40 -0
- lib/vendor/storage-factory/storage-factory/test/test-storage-factory.php +67 -0
- lib/vendor/zip-factory/zip-factory/lib/ArchiverPclZip.php +36 -14
- lib/vendor/zip-factory/zip-factory/lib/ArchiverZipArchive.php +17 -19
- lib/vendor/zip-factory/zip-factory/lib/ZipFactory.php +1 -1
- lib/view/export/index.php +3 -4
- lib/view/import/index.php +3 -4
- loader.php +11 -0
- readme.txt +9 -3
all-in-one-wp-migration.php
CHANGED
|
@@ -5,7 +5,7 @@
|
|
| 5 |
* Description: Migration tool for all your blog data
|
| 6 |
* Author: ServMask
|
| 7 |
* Author URI: http://servmask.com/
|
| 8 |
-
* Version: 1.
|
| 9 |
*
|
| 10 |
* Copyright (C) 2013 ServMask LLC
|
| 11 |
*
|
| 5 |
* Description: Migration tool for all your blog data
|
| 6 |
* Author: ServMask
|
| 7 |
* Author URI: http://servmask.com/
|
| 8 |
+
* Version: 1.7.0
|
| 9 |
*
|
| 10 |
* Copyright (C) 2013 ServMask LLC
|
| 11 |
*
|
constants.php
CHANGED
|
@@ -26,7 +26,7 @@
|
|
| 26 |
// ==================
|
| 27 |
// = Plugin VERSION =
|
| 28 |
// ==================
|
| 29 |
-
define( 'AI1WM_VERSION', '1.
|
| 30 |
|
| 31 |
// ===============
|
| 32 |
// = Plugin Name =
|
|
@@ -43,6 +43,11 @@ define( 'AI1WM_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
|
|
| 43 |
// ===============
|
| 44 |
define( 'AI1WM_PATH', dirname( __FILE__ ) );
|
| 45 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
// ============
|
| 47 |
// = Lib Path =
|
| 48 |
// ============
|
|
@@ -93,6 +98,11 @@ define( 'AI1WM_REPORT_URL', 'https://servmask.com/ai1wm/report/create' );
|
|
| 93 |
// ==============
|
| 94 |
define( 'AI1WM_TABLE_PREFIX', 'SERVMASK_PREFIX_' );
|
| 95 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 96 |
// ===========================
|
| 97 |
// = WP_CONTENT_DIR Constant =
|
| 98 |
// ===========================
|
| 26 |
// ==================
|
| 27 |
// = Plugin VERSION =
|
| 28 |
// ==================
|
| 29 |
+
define( 'AI1WM_VERSION', '1.7.0' );
|
| 30 |
|
| 31 |
// ===============
|
| 32 |
// = Plugin Name =
|
| 43 |
// ===============
|
| 44 |
define( 'AI1WM_PATH', dirname( __FILE__ ) );
|
| 45 |
|
| 46 |
+
// ===============
|
| 47 |
+
// = Storage Path =
|
| 48 |
+
// ===============
|
| 49 |
+
define( 'AI1WM_STORAGE_PATH', AI1WM_PATH . DIRECTORY_SEPARATOR . 'storage' );
|
| 50 |
+
|
| 51 |
// ============
|
| 52 |
// = Lib Path =
|
| 53 |
// ============
|
| 98 |
// ==============
|
| 99 |
define( 'AI1WM_TABLE_PREFIX', 'SERVMASK_PREFIX_' );
|
| 100 |
|
| 101 |
+
// ==============
|
| 102 |
+
// = ServMask Storage Prefix =
|
| 103 |
+
// ==============
|
| 104 |
+
define( 'AI1WM_STORAGE_PREFIX', 'wm_' );
|
| 105 |
+
|
| 106 |
// ===========================
|
| 107 |
// = WP_CONTENT_DIR Constant =
|
| 108 |
// ===========================
|
lib/controller/class-ai1wm-export-controller.php
CHANGED
|
@@ -26,12 +26,19 @@
|
|
| 26 |
class Ai1wm_Export_Controller
|
| 27 |
{
|
| 28 |
public static function index() {
|
| 29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
Ai1wm_Template::render(
|
| 31 |
'export/index',
|
| 32 |
array(
|
| 33 |
-
'list_plugins'
|
| 34 |
-
'
|
| 35 |
)
|
| 36 |
);
|
| 37 |
}
|
|
@@ -43,11 +50,11 @@ class Ai1wm_Export_Controller
|
|
| 43 |
|
| 44 |
// Get options
|
| 45 |
if ( isset( $_POST['options'] ) && ( $options = $_POST['options'] ) ) {
|
| 46 |
-
$
|
| 47 |
|
| 48 |
// Export archive
|
| 49 |
$model = new Ai1wm_Export;
|
| 50 |
-
$file = $model->export( $
|
| 51 |
|
| 52 |
// Send the file to the user
|
| 53 |
header( 'Content-Description: File Transfer' );
|
|
@@ -64,14 +71,14 @@ class Ai1wm_Export_Controller
|
|
| 64 |
header( 'Expires: 0' );
|
| 65 |
header( 'Cache-Control: must-revalidate' );
|
| 66 |
header( 'Pragma: public' );
|
| 67 |
-
header( 'Content-Length: ' . filesize( $file ) );
|
| 68 |
|
| 69 |
// Clear output buffering and read file content
|
| 70 |
if ( ob_get_length() > 0 ) {
|
| 71 |
@ob_end_clean();
|
| 72 |
}
|
| 73 |
-
readfile( $file );
|
| 74 |
-
|
| 75 |
exit;
|
| 76 |
}
|
| 77 |
}
|
| 26 |
class Ai1wm_Export_Controller
|
| 27 |
{
|
| 28 |
public static function index() {
|
| 29 |
+
try {
|
| 30 |
+
$storage = new StorageArea;
|
| 31 |
+
$is_accessible = $storage->makeFile();
|
| 32 |
+
$storage->flush();
|
| 33 |
+
} catch ( Exception $e ) {
|
| 34 |
+
$is_accessible = false;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
Ai1wm_Template::render(
|
| 38 |
'export/index',
|
| 39 |
array(
|
| 40 |
+
'list_plugins' => get_plugins(),
|
| 41 |
+
'is_accessible' => $is_accessible,
|
| 42 |
)
|
| 43 |
);
|
| 44 |
}
|
| 50 |
|
| 51 |
// Get options
|
| 52 |
if ( isset( $_POST['options'] ) && ( $options = $_POST['options'] ) ) {
|
| 53 |
+
$storage = new StorageArea;
|
| 54 |
|
| 55 |
// Export archive
|
| 56 |
$model = new Ai1wm_Export;
|
| 57 |
+
$file = $model->export( $storage, $options );
|
| 58 |
|
| 59 |
// Send the file to the user
|
| 60 |
header( 'Content-Description: File Transfer' );
|
| 71 |
header( 'Expires: 0' );
|
| 72 |
header( 'Cache-Control: must-revalidate' );
|
| 73 |
header( 'Pragma: public' );
|
| 74 |
+
header( 'Content-Length: ' . filesize( $file->getAs( 'string' ) ) );
|
| 75 |
|
| 76 |
// Clear output buffering and read file content
|
| 77 |
if ( ob_get_length() > 0 ) {
|
| 78 |
@ob_end_clean();
|
| 79 |
}
|
| 80 |
+
readfile( $file->getAs( 'string' ) );
|
| 81 |
+
$storage->flush();
|
| 82 |
exit;
|
| 83 |
}
|
| 84 |
}
|
lib/controller/class-ai1wm-import-controller.php
CHANGED
|
@@ -26,11 +26,18 @@
|
|
| 26 |
class Ai1wm_Import_Controller
|
| 27 |
{
|
| 28 |
public static function index() {
|
| 29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
Ai1wm_Template::render(
|
| 31 |
'import/index',
|
| 32 |
array(
|
| 33 |
-
'
|
| 34 |
)
|
| 35 |
);
|
| 36 |
}
|
| 26 |
class Ai1wm_Import_Controller
|
| 27 |
{
|
| 28 |
public static function index() {
|
| 29 |
+
try {
|
| 30 |
+
$storage = new StorageArea;
|
| 31 |
+
$is_accessible = $storage->makeFile();
|
| 32 |
+
$storage->flush();
|
| 33 |
+
} catch ( Exception $e ) {
|
| 34 |
+
$is_accessible = false;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
Ai1wm_Template::render(
|
| 38 |
'import/index',
|
| 39 |
array(
|
| 40 |
+
'is_accessible' => $is_accessible,
|
| 41 |
)
|
| 42 |
);
|
| 43 |
}
|
lib/model/class-ai1wm-export.php
CHANGED
|
@@ -52,11 +52,11 @@ class Ai1wm_Export
|
|
| 52 |
/**
|
| 53 |
* Export archive file (database, media, package.json)
|
| 54 |
*
|
| 55 |
-
* @param
|
| 56 |
-
* @param array
|
| 57 |
-
* @return
|
| 58 |
*/
|
| 59 |
-
public function export( $
|
| 60 |
global $wp_version;
|
| 61 |
$options['plugin_version'] = AI1WM_VERSION;
|
| 62 |
$options['wp_version'] = $wp_version;
|
|
@@ -69,15 +69,20 @@ class Ai1wm_Export
|
|
| 69 |
// Export last options
|
| 70 |
update_option( self::EXPORT_LAST_OPTIONS, $options );
|
| 71 |
|
|
|
|
|
|
|
|
|
|
| 72 |
// Make archive
|
| 73 |
-
$archive = ZipFactory::makeZipArchiver( $output_file, ! class_exists( 'ZipArchive' ), true );
|
| 74 |
|
| 75 |
// Should we export database?
|
| 76 |
-
if ( ! isset( $options['export-database'
|
| 77 |
-
|
| 78 |
-
$database_file = $this->prepare_database( $
|
|
|
|
|
|
|
| 79 |
$archive->addFile(
|
| 80 |
-
$database_file,
|
| 81 |
self::EXPORT_DATABASE_NAME
|
| 82 |
);
|
| 83 |
}
|
|
@@ -102,7 +107,8 @@ class Ai1wm_Export
|
|
| 102 |
if ( ! isset( $options['export-plugins'] ) ) {
|
| 103 |
$archive->addDir(
|
| 104 |
$this->prepare_plugins( $options ),
|
| 105 |
-
self::EXPORT_PLUGINS_NAME
|
|
|
|
| 106 |
);
|
| 107 |
}
|
| 108 |
|
|
@@ -112,20 +118,21 @@ class Ai1wm_Export
|
|
| 112 |
$this->prepare_package( $options )
|
| 113 |
);
|
| 114 |
|
| 115 |
-
return $
|
| 116 |
}
|
| 117 |
|
| 118 |
/**
|
| 119 |
* Export database in SQL format
|
| 120 |
*
|
| 121 |
-
* @param
|
| 122 |
-
* @param array
|
| 123 |
-
* @return
|
| 124 |
*/
|
| 125 |
-
public function prepare_database( $
|
| 126 |
global $wpdb;
|
| 127 |
|
| 128 |
-
$
|
|
|
|
| 129 |
|
| 130 |
// Set include tables
|
| 131 |
$includeTables = array();
|
|
@@ -163,16 +170,16 @@ class Ai1wm_Export
|
|
| 163 |
}
|
| 164 |
|
| 165 |
// No table data, but leave Administrator account unchanged
|
| 166 |
-
if (
|
|
|
|
|
|
|
| 167 |
$clauses[ $wpdb->users ] = ' WHERE id = 1 ';
|
| 168 |
$clauses[ $wpdb->usermeta ] = ' WHERE user_id = 1 ';
|
| 169 |
}
|
| 170 |
|
| 171 |
-
$output_meta = stream_get_meta_data( $output_file );
|
| 172 |
-
|
| 173 |
// Set dump options
|
| 174 |
$this->connection
|
| 175 |
-
->setFileName( $
|
| 176 |
->setIncludeTables( $includeTables )
|
| 177 |
->setExcludeTables( $excludeTables )
|
| 178 |
->setNoTableData( $noTableData )
|
|
@@ -184,10 +191,7 @@ class Ai1wm_Export
|
|
| 184 |
$this->connection->dump();
|
| 185 |
|
| 186 |
// Replace Old/New Values
|
| 187 |
-
if (
|
| 188 |
-
isset( $options['replace'] ) &&
|
| 189 |
-
( $replace = $options['replace'] )
|
| 190 |
-
) {
|
| 191 |
$old_values = array();
|
| 192 |
$new_values = array();
|
| 193 |
for ( $i = 0; $i < count( $replace['old-value'] ); $i++ ) {
|
|
@@ -202,7 +206,8 @@ class Ai1wm_Export
|
|
| 202 |
}
|
| 203 |
// Do String Replacement
|
| 204 |
if ( $old_values && $new_values ) {
|
| 205 |
-
$output_file = $
|
|
|
|
| 206 |
$output_file,
|
| 207 |
$old_values,
|
| 208 |
$new_values
|
|
@@ -210,7 +215,9 @@ class Ai1wm_Export
|
|
| 210 |
}
|
| 211 |
}
|
| 212 |
|
| 213 |
-
|
|
|
|
|
|
|
| 214 |
$output_file,
|
| 215 |
'/s:(\d+):([\\\\]?"[\\\\]?"|[\\\\]?"((.*?)[^\\\\])[\\\\]?");/'
|
| 216 |
);
|
|
@@ -276,7 +283,6 @@ class Ai1wm_Export
|
|
| 276 |
*/
|
| 277 |
public function prepare_plugins( array $options = array() ) {
|
| 278 |
if ( ! isset( $options['export-plugins'] ) ) {
|
| 279 |
-
|
| 280 |
return WP_PLUGIN_DIR;
|
| 281 |
}
|
| 282 |
}
|
|
@@ -288,22 +294,32 @@ class Ai1wm_Export
|
|
| 288 |
* @return string Package config
|
| 289 |
*/
|
| 290 |
public function prepare_package( array $options = array() ) {
|
| 291 |
-
$config = array(
|
| 292 |
-
|
| 293 |
-
|
| 294 |
-
|
| 295 |
-
|
| 296 |
-
|
| 297 |
-
|
| 298 |
-
|
| 299 |
-
|
| 300 |
-
|
| 301 |
-
|
| 302 |
-
|
| 303 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 304 |
}
|
| 305 |
}
|
| 306 |
|
| 307 |
-
return
|
| 308 |
}
|
| 309 |
}
|
| 52 |
/**
|
| 53 |
* Export archive file (database, media, package.json)
|
| 54 |
*
|
| 55 |
+
* @param StorageArea $storage Storage instance
|
| 56 |
+
* @param array $options Export settings
|
| 57 |
+
* @return StorageFile StorageFile instance
|
| 58 |
*/
|
| 59 |
+
public function export( StorageArea $storage, array $options = array() ) {
|
| 60 |
global $wp_version;
|
| 61 |
$options['plugin_version'] = AI1WM_VERSION;
|
| 62 |
$options['wp_version'] = $wp_version;
|
| 69 |
// Export last options
|
| 70 |
update_option( self::EXPORT_LAST_OPTIONS, $options );
|
| 71 |
|
| 72 |
+
// Create output file
|
| 73 |
+
$output_file = $storage->makeFile();
|
| 74 |
+
|
| 75 |
// Make archive
|
| 76 |
+
$archive = ZipFactory::makeZipArchiver( $output_file->getAs( 'resource' ), ! class_exists( 'ZipArchive' ), true );
|
| 77 |
|
| 78 |
// Should we export database?
|
| 79 |
+
if ( ! isset( $options['export-database'] ) ) {
|
| 80 |
+
// Prepare database file
|
| 81 |
+
$database_file = $this->prepare_database( $storage, $options );
|
| 82 |
+
|
| 83 |
+
// Add database to archive
|
| 84 |
$archive->addFile(
|
| 85 |
+
$database_file->getAs( 'resource' ),
|
| 86 |
self::EXPORT_DATABASE_NAME
|
| 87 |
);
|
| 88 |
}
|
| 107 |
if ( ! isset( $options['export-plugins'] ) ) {
|
| 108 |
$archive->addDir(
|
| 109 |
$this->prepare_plugins( $options ),
|
| 110 |
+
self::EXPORT_PLUGINS_NAME,
|
| 111 |
+
$this->get_plugins( array( AI1WM_PLUGIN_NAME ) )
|
| 112 |
);
|
| 113 |
}
|
| 114 |
|
| 118 |
$this->prepare_package( $options )
|
| 119 |
);
|
| 120 |
|
| 121 |
+
return $output_file;
|
| 122 |
}
|
| 123 |
|
| 124 |
/**
|
| 125 |
* Export database in SQL format
|
| 126 |
*
|
| 127 |
+
* @param StorageArea $storage Storage instance
|
| 128 |
+
* @param array $options Export settings
|
| 129 |
+
* @return StorageFile StorageFile instance
|
| 130 |
*/
|
| 131 |
+
public function prepare_database( StorageArea $storage, array $options = array() ) {
|
| 132 |
global $wpdb;
|
| 133 |
|
| 134 |
+
$file = new Ai1wm_File;
|
| 135 |
+
$output_file = $storage->makeFile();
|
| 136 |
|
| 137 |
// Set include tables
|
| 138 |
$includeTables = array();
|
| 170 |
}
|
| 171 |
|
| 172 |
// No table data, but leave Administrator account unchanged
|
| 173 |
+
if ( $noTableData ) {
|
| 174 |
+
$clauses = array();
|
| 175 |
+
$clauses[ $wpdb->options ] = ' ORDER BY option_id ASC ';
|
| 176 |
$clauses[ $wpdb->users ] = ' WHERE id = 1 ';
|
| 177 |
$clauses[ $wpdb->usermeta ] = ' WHERE user_id = 1 ';
|
| 178 |
}
|
| 179 |
|
|
|
|
|
|
|
| 180 |
// Set dump options
|
| 181 |
$this->connection
|
| 182 |
+
->setFileName( $output_file->getAs( 'string' ) )
|
| 183 |
->setIncludeTables( $includeTables )
|
| 184 |
->setExcludeTables( $excludeTables )
|
| 185 |
->setNoTableData( $noTableData )
|
| 191 |
$this->connection->dump();
|
| 192 |
|
| 193 |
// Replace Old/New Values
|
| 194 |
+
if ( isset( $options['replace'] ) && ( $replace = $options['replace'] ) ) {
|
|
|
|
|
|
|
|
|
|
| 195 |
$old_values = array();
|
| 196 |
$new_values = array();
|
| 197 |
for ( $i = 0; $i < count( $replace['old-value'] ); $i++ ) {
|
| 206 |
}
|
| 207 |
// Do String Replacement
|
| 208 |
if ( $old_values && $new_values ) {
|
| 209 |
+
$output_file = $file->str_replace_file(
|
| 210 |
+
$storage,
|
| 211 |
$output_file,
|
| 212 |
$old_values,
|
| 213 |
$new_values
|
| 215 |
}
|
| 216 |
}
|
| 217 |
|
| 218 |
+
// Do find and replace
|
| 219 |
+
return $file->preg_replace_file(
|
| 220 |
+
$storage,
|
| 221 |
$output_file,
|
| 222 |
'/s:(\d+):([\\\\]?"[\\\\]?"|[\\\\]?"((.*?)[^\\\\])[\\\\]?");/'
|
| 223 |
);
|
| 283 |
*/
|
| 284 |
public function prepare_plugins( array $options = array() ) {
|
| 285 |
if ( ! isset( $options['export-plugins'] ) ) {
|
|
|
|
| 286 |
return WP_PLUGIN_DIR;
|
| 287 |
}
|
| 288 |
}
|
| 294 |
* @return string Package config
|
| 295 |
*/
|
| 296 |
public function prepare_package( array $options = array() ) {
|
| 297 |
+
$config = array(
|
| 298 |
+
'Version' => AI1WM_VERSION,
|
| 299 |
+
);
|
| 300 |
+
|
| 301 |
+
return json_encode( $config );
|
| 302 |
+
}
|
| 303 |
+
|
| 304 |
+
/**
|
| 305 |
+
* Get available plugins
|
| 306 |
+
*
|
| 307 |
+
* @param array $exclude Exclude plugins
|
| 308 |
+
* @return array List of installed plugins
|
| 309 |
+
*/
|
| 310 |
+
public function get_plugins( $exclude = array() ) {
|
| 311 |
+
if ( ! function_exists( 'get_plugins' ) ) {
|
| 312 |
+
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
| 313 |
+
}
|
| 314 |
+
|
| 315 |
+
$plugins = array();
|
| 316 |
+
foreach ( get_plugins() as $key => $plugin ) {
|
| 317 |
+
$directory = current( explode( DIRECTORY_SEPARATOR, $key ) );
|
| 318 |
+
if ( ! in_array( $directory, $exclude ) ) {
|
| 319 |
+
$plugins[] = $directory;
|
| 320 |
}
|
| 321 |
}
|
| 322 |
|
| 323 |
+
return $plugins;
|
| 324 |
}
|
| 325 |
}
|
lib/model/class-ai1wm-file.php
CHANGED
|
@@ -27,29 +27,28 @@ class Ai1wm_File
|
|
| 27 |
{
|
| 28 |
|
| 29 |
/**
|
| 30 |
-
*
|
| 31 |
-
*
|
| 32 |
-
*
|
| 33 |
-
* @param
|
| 34 |
-
* @
|
|
|
|
|
|
|
|
|
|
| 35 |
*/
|
| 36 |
-
public function str_replace_file( $
|
| 37 |
-
$
|
|
|
|
| 38 |
|
| 39 |
-
while ( ! feof( $
|
| 40 |
-
$line = stream_get_line( $
|
| 41 |
|
| 42 |
// append new line at the end of the line
|
| 43 |
-
if ( strlen( $line ) < 1000000 && ! feof( $
|
| 44 |
$line .= '\n';
|
| 45 |
}
|
| 46 |
|
| 47 |
-
if (
|
| 48 |
-
false === fwrite(
|
| 49 |
-
$_new_file,
|
| 50 |
-
str_replace( $pattern, $replacement, $line )
|
| 51 |
-
)
|
| 52 |
-
) {
|
| 53 |
wp_die(
|
| 54 |
'Writting to a file failed! Probably, there is no more free space left?',
|
| 55 |
'Out of disk space'
|
|
@@ -57,55 +56,52 @@ class Ai1wm_File
|
|
| 57 |
}
|
| 58 |
}
|
| 59 |
|
| 60 |
-
return $
|
| 61 |
}
|
| 62 |
|
| 63 |
/**
|
| 64 |
* Replace a file, line by line with the regex pattern and then writes the
|
| 65 |
* output to a new file.
|
| 66 |
*
|
| 67 |
-
* @param
|
| 68 |
-
* @param
|
| 69 |
-
*
|
| 70 |
-
* @return
|
| 71 |
*/
|
| 72 |
-
public function preg_replace_file( $
|
| 73 |
-
$
|
|
|
|
| 74 |
|
| 75 |
-
//
|
| 76 |
-
rewind( $
|
| 77 |
|
| 78 |
-
while ( ! feof( $
|
| 79 |
-
$line = stream_get_line( $
|
| 80 |
-
//
|
| 81 |
-
if ( strlen( $line ) < 1000000 && ! feof( $
|
| 82 |
$line .= '\n';
|
| 83 |
}
|
| 84 |
|
| 85 |
$replaced = $this->_preg_replace( $line, $pattern );
|
| 86 |
-
if (
|
| 87 |
-
false === fwrite(
|
| 88 |
-
$_new_file,
|
| 89 |
-
$replaced
|
| 90 |
-
)
|
| 91 |
-
) {
|
| 92 |
wp_die(
|
| 93 |
'Writting to a file failed! Probably, there is no more free space left?',
|
| 94 |
'Out of disk space'
|
| 95 |
);
|
| 96 |
}
|
| 97 |
}
|
| 98 |
-
return $
|
| 99 |
}
|
| 100 |
|
| 101 |
/**
|
| 102 |
-
*
|
| 103 |
-
*
|
| 104 |
-
* @param
|
| 105 |
-
* @
|
|
|
|
| 106 |
*/
|
| 107 |
public function _preg_replace( $line, $pattern ) {
|
| 108 |
-
//
|
| 109 |
static $callback = null;
|
| 110 |
|
| 111 |
if ( $callback === null ) {
|
| 27 |
{
|
| 28 |
|
| 29 |
/**
|
| 30 |
+
* Replace a file, line by line with the str pattern and then writes the
|
| 31 |
+
* output to a new file.
|
| 32 |
+
*
|
| 33 |
+
* @param StorageArea $storage Storage instance
|
| 34 |
+
* @param StorageFile $file StorageFile instance
|
| 35 |
+
* @param string $pattern Find and replace pattern
|
| 36 |
+
* @param string $replacement Replace term
|
| 37 |
+
* @return StorageFile StorageFile instance
|
| 38 |
*/
|
| 39 |
+
public function str_replace_file( StorageArea $storage, StorageFile $file, $pattern, $replacement ) {
|
| 40 |
+
$new_file = $storage->makeFile();
|
| 41 |
+
$current_file = $file->getAs( 'resource' );
|
| 42 |
|
| 43 |
+
while ( ! feof( $current_file ) ) {
|
| 44 |
+
$line = stream_get_line( $current_file, 1000000, '\n' );
|
| 45 |
|
| 46 |
// append new line at the end of the line
|
| 47 |
+
if ( strlen( $line ) < 1000000 && ! feof( $current_file ) ) {
|
| 48 |
$line .= '\n';
|
| 49 |
}
|
| 50 |
|
| 51 |
+
if ( false === fwrite( $new_file->getAs( 'resource' ), str_replace( $pattern, $replacement, $line ) ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
wp_die(
|
| 53 |
'Writting to a file failed! Probably, there is no more free space left?',
|
| 54 |
'Out of disk space'
|
| 56 |
}
|
| 57 |
}
|
| 58 |
|
| 59 |
+
return $new_file;
|
| 60 |
}
|
| 61 |
|
| 62 |
/**
|
| 63 |
* Replace a file, line by line with the regex pattern and then writes the
|
| 64 |
* output to a new file.
|
| 65 |
*
|
| 66 |
+
* @param StorageArea $storage Storage instance
|
| 67 |
+
* @param StorageFile $file StorageFile instance
|
| 68 |
+
* @param string $pattern Find and replace pattern
|
| 69 |
+
* @return StorageFile StorageFile instance
|
| 70 |
*/
|
| 71 |
+
public function preg_replace_file( StorageArea $storage, StorageFile $file, $pattern ) {
|
| 72 |
+
$new_file = $storage->makeFile();
|
| 73 |
+
$current_file = $file->getAs( 'resource' );
|
| 74 |
|
| 75 |
+
// Set file handle to the beginning of the file
|
| 76 |
+
rewind( $current_file );
|
| 77 |
|
| 78 |
+
while ( ! feof( $current_file ) ) {
|
| 79 |
+
$line = stream_get_line( $current_file, 1000000, '\n' );
|
| 80 |
+
// Append new line at the end of the line
|
| 81 |
+
if ( strlen( $line ) < 1000000 && ! feof( $current_file ) ) {
|
| 82 |
$line .= '\n';
|
| 83 |
}
|
| 84 |
|
| 85 |
$replaced = $this->_preg_replace( $line, $pattern );
|
| 86 |
+
if ( false === fwrite( $new_file->getAs( 'resource' ), $replaced ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
wp_die(
|
| 88 |
'Writting to a file failed! Probably, there is no more free space left?',
|
| 89 |
'Out of disk space'
|
| 90 |
);
|
| 91 |
}
|
| 92 |
}
|
| 93 |
+
return $new_file;
|
| 94 |
}
|
| 95 |
|
| 96 |
/**
|
| 97 |
+
* Find and replace line by line with pattern
|
| 98 |
+
*
|
| 99 |
+
* @param string $line Line to replace
|
| 100 |
+
* @param string $pattern Pattern
|
| 101 |
+
* @return string New line
|
| 102 |
*/
|
| 103 |
public function _preg_replace( $line, $pattern ) {
|
| 104 |
+
// PHP doesn't garbage collect functions created by create_function()
|
| 105 |
static $callback = null;
|
| 106 |
|
| 107 |
if ( $callback === null ) {
|
lib/model/class-ai1wm-import.php
CHANGED
|
@@ -56,184 +56,198 @@ class Ai1wm_Import
|
|
| 56 |
$errors = array();
|
| 57 |
|
| 58 |
if ( empty( $input_file['error'] ) ) {
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
|
|
|
|
|
|
|
|
|
| 71 |
}
|
| 72 |
-
}
|
| 73 |
|
| 74 |
-
|
| 75 |
-
|
| 76 |
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
$errors[] = sprintf(
|
| 81 |
_(
|
| 82 |
-
'
|
| 83 |
-
Please make sure that
|
| 84 |
-
<a href="https://servmask.com/blog/setting-permissions-for-temp-folder-on-windows" target="_blank">See how?</a>'
|
| 85 |
),
|
| 86 |
-
|
| 87 |
);
|
|
|
|
|
|
|
|
|
|
| 88 |
}
|
| 89 |
|
| 90 |
// Check if file has been uploaded
|
| 91 |
if ( empty( $errors ) && ( ! $options['chunks'] || $options['chunk'] == $options['chunks'] - 1 ) ) {
|
| 92 |
// Create temporary directory
|
| 93 |
-
$extract_to =
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
}
|
| 99 |
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
$upload_dir = wp_upload_dir();
|
| 112 |
-
$upload_basedir = $upload_dir['basedir'] . DIRECTORY_SEPARATOR;
|
| 113 |
-
if ( ! is_dir( $upload_basedir ) ) {
|
| 114 |
-
mkdir( $upload_basedir );
|
| 115 |
-
}
|
| 116 |
-
|
| 117 |
-
// Themes base directory
|
| 118 |
-
$themes_dir = get_theme_root();
|
| 119 |
-
$themes_basedir = $themes_dir . DIRECTORY_SEPARATOR;
|
| 120 |
-
if ( ! is_dir( $themes_basedir ) ) {
|
| 121 |
-
mkdir( $themes_basedir );
|
| 122 |
-
}
|
| 123 |
-
|
| 124 |
-
if ( file_exists( $extract_to . Ai1wm_Export::EXPORT_DATABASE_NAME ) ) {
|
| 125 |
-
// Backup database
|
| 126 |
-
$model = new Ai1wm_Export;
|
| 127 |
-
$database_file = tmpfile();
|
| 128 |
-
$options = array( 'add-drop-table' => true, 'export-single-transaction' => true );
|
| 129 |
-
$model->prepare_database( $database_file, $options );
|
| 130 |
-
|
| 131 |
-
// Truncate database
|
| 132 |
-
$this->connection->truncateDatabase();
|
| 133 |
-
|
| 134 |
-
// Import database
|
| 135 |
-
$this->connection->setOldTablePrefix( AI1WM_TABLE_PREFIX )
|
| 136 |
-
->setNewTablePrefix( $wpdb->prefix )
|
| 137 |
-
->import( $extract_to . Ai1wm_Export::EXPORT_DATABASE_NAME );
|
| 138 |
-
}
|
| 139 |
-
|
| 140 |
-
// Check if media files are present
|
| 141 |
-
if ( file_exists( $extract_to . Ai1wm_Export::EXPORT_MEDIA_NAME ) ) {
|
| 142 |
-
// Backup media files
|
| 143 |
-
$backup_media_to = sys_get_temp_dir() . DIRECTORY_SEPARATOR
|
| 144 |
-
. uniqid()
|
| 145 |
-
. DIRECTORY_SEPARATOR;
|
| 146 |
-
if ( ! is_dir( $backup_media_to ) ) {
|
| 147 |
-
mkdir( $backup_media_to );
|
| 148 |
-
}
|
| 149 |
-
|
| 150 |
-
$this->copy_dir( $upload_basedir, $backup_media_to );
|
| 151 |
-
|
| 152 |
-
// Truncate media files
|
| 153 |
-
$this->truncate_dir( $upload_basedir );
|
| 154 |
-
|
| 155 |
-
// Import media files
|
| 156 |
-
$this->copy_dir( $extract_to . Ai1wm_Export::EXPORT_MEDIA_NAME, $upload_basedir );
|
| 157 |
-
}
|
| 158 |
-
|
| 159 |
-
if ( file_exists( $extract_to . Ai1wm_Export::EXPORT_THEMES_NAME ) ) {
|
| 160 |
-
// Backup themes files
|
| 161 |
-
$backup_themes_to = sys_get_temp_dir() . DIRECTORY_SEPARATOR
|
| 162 |
-
. uniqid()
|
| 163 |
-
. DIRECTORY_SEPARATOR;
|
| 164 |
-
if ( ! is_dir( $backup_themes_to ) ) {
|
| 165 |
-
mkdir( $backup_themes_to );
|
| 166 |
}
|
| 167 |
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
// Import themes files
|
| 174 |
-
$this->copy_dir( $extract_to . Ai1wm_Export::EXPORT_THEMES_NAME, $themes_basedir );
|
| 175 |
-
}
|
| 176 |
-
|
| 177 |
-
if ( file_exists( $extract_to . Ai1wm_Export::EXPORT_PLUGINS_NAME ) ) {
|
| 178 |
-
// Backup plugin files
|
| 179 |
-
$backup_plugins_to = sys_get_temp_dir() . DIRECTORY_SEPARATOR
|
| 180 |
-
. uniqid()
|
| 181 |
-
. DIRECTORY_SEPARATOR;
|
| 182 |
-
if ( ! is_dir( $backup_plugins_to ) ) {
|
| 183 |
-
mkdir( $backup_plugins_to );
|
| 184 |
}
|
| 185 |
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
// Truncate plugin files
|
| 189 |
-
$this->truncate_dir( WP_PLUGIN_DIR );
|
| 190 |
-
|
| 191 |
-
// Import plugin files
|
| 192 |
-
$this->copy_dir( $extract_to . Ai1wm_Export::EXPORT_PLUGINS_NAME, WP_PLUGIN_DIR );
|
| 193 |
-
}
|
| 194 |
-
|
| 195 |
-
// Test website
|
| 196 |
-
if ( ! $this->test_website( get_option( 'siteurl' ) ) ) {
|
| 197 |
if ( file_exists( $extract_to . Ai1wm_Export::EXPORT_DATABASE_NAME ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 198 |
// Truncate database
|
| 199 |
$this->connection->truncateDatabase();
|
| 200 |
|
| 201 |
-
// Import
|
| 202 |
$this->connection->setOldTablePrefix( AI1WM_TABLE_PREFIX )
|
| 203 |
-
|
| 204 |
-
->import( $
|
| 205 |
}
|
| 206 |
|
| 207 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 208 |
// Truncate media files
|
| 209 |
$this->truncate_dir( $upload_basedir );
|
| 210 |
|
| 211 |
-
// Import
|
| 212 |
-
$this->copy_dir( $
|
| 213 |
}
|
| 214 |
|
| 215 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 216 |
// Truncate themes files
|
| 217 |
$this->truncate_dir( $themes_basedir );
|
| 218 |
|
| 219 |
-
// Import
|
| 220 |
-
$this->copy_dir( $
|
| 221 |
}
|
| 222 |
|
| 223 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 224 |
// Truncate plugin files
|
| 225 |
-
$this->truncate_dir( WP_PLUGIN_DIR );
|
| 226 |
|
| 227 |
-
// Import
|
| 228 |
-
$this->copy_dir( $
|
| 229 |
}
|
| 230 |
-
}
|
| 231 |
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 236 |
}
|
|
|
|
|
|
|
|
|
|
| 237 |
}
|
| 238 |
} else {
|
| 239 |
$errors[] = $this->code_to_message( $input_file['error'] );
|
|
@@ -256,22 +270,47 @@ class Ai1wm_Import
|
|
| 256 |
/**
|
| 257 |
* Copy files from directory to directory
|
| 258 |
*
|
| 259 |
-
* @param string $from
|
| 260 |
-
* @param string $to
|
|
|
|
| 261 |
* @return void
|
| 262 |
*/
|
| 263 |
-
public function copy_dir( $from, $to ) {
|
| 264 |
$from = trailingslashit( $from );
|
| 265 |
$to = trailingslashit( $to );
|
| 266 |
|
| 267 |
$iterator = new RecursiveIteratorIterator(
|
| 268 |
-
|
| 269 |
RecursiveIteratorIterator::SELF_FIRST
|
| 270 |
);
|
| 271 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 272 |
foreach ( $iterator as $item ) {
|
| 273 |
// Skip dots
|
| 274 |
-
if ( $iterator->isDot() )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 275 |
|
| 276 |
if ( $item->isDir() ) {
|
| 277 |
mkdir( $to . $iterator->getSubPathName() );
|
|
@@ -284,19 +323,44 @@ class Ai1wm_Import
|
|
| 284 |
/**
|
| 285 |
* Truncate all files from specific directory
|
| 286 |
*
|
| 287 |
-
* @param string $dir
|
|
|
|
| 288 |
* @return void
|
| 289 |
*/
|
| 290 |
-
public function truncate_dir( $dir ) {
|
| 291 |
$dir = trailingslashit( $dir );
|
| 292 |
$iterator = new RecursiveIteratorIterator(
|
| 293 |
-
|
| 294 |
RecursiveIteratorIterator::CHILD_FIRST
|
| 295 |
);
|
| 296 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 297 |
foreach ( $iterator as $item ) {
|
| 298 |
// Skip dots
|
| 299 |
-
if ( $iterator->isDot() )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 300 |
|
| 301 |
if ( $item->isDir() ) {
|
| 302 |
rmdir( $dir . $iterator->getSubPathName() );
|
| 56 |
$errors = array();
|
| 57 |
|
| 58 |
if ( empty( $input_file['error'] ) ) {
|
| 59 |
+
try {
|
| 60 |
+
$storage = new StorageArea;
|
| 61 |
+
|
| 62 |
+
// Partial file path
|
| 63 |
+
$upload_file = $storage->makeFile( $options['name'] )->getAs( 'string' );
|
| 64 |
+
|
| 65 |
+
// Open partial file
|
| 66 |
+
$out = fopen( $upload_file, $options['chunk'] == 0 ? 'wb' : 'ab' );
|
| 67 |
+
if ( $out ) {
|
| 68 |
+
// Read binary input stream and append it to temp file
|
| 69 |
+
$in = fopen( $input_file['tmp_name'], 'rb' );
|
| 70 |
+
if ( $in ) {
|
| 71 |
+
while ( $buff = fread( $in, 4096 ) ) {
|
| 72 |
+
fwrite( $out, $buff );
|
| 73 |
+
}
|
| 74 |
}
|
|
|
|
| 75 |
|
| 76 |
+
fclose( $in );
|
| 77 |
+
fclose( $out );
|
| 78 |
|
| 79 |
+
// Remove temporary uploaded file
|
| 80 |
+
unlink( $input_file['tmp_name'] );
|
| 81 |
+
} else {
|
| 82 |
+
$errors[] = sprintf(
|
| 83 |
+
_(
|
| 84 |
+
'Site could not be imported!<br />
|
| 85 |
+
Please make sure that storage directory <strong>%s</strong> has read and write permissions.'
|
| 86 |
+
),
|
| 87 |
+
AI1WM_STORAGE_PATH
|
| 88 |
+
);
|
| 89 |
+
|
| 90 |
+
// Clear storage
|
| 91 |
+
$storage->flush();
|
| 92 |
+
}
|
| 93 |
+
} catch ( Exception $e ) {
|
| 94 |
$errors[] = sprintf(
|
| 95 |
_(
|
| 96 |
+
'Site could not be imported!<br />
|
| 97 |
+
Please make sure that storage directory <strong>%s</strong> has read and write permissions.'
|
|
|
|
| 98 |
),
|
| 99 |
+
AI1WM_STORAGE_PATH
|
| 100 |
);
|
| 101 |
+
|
| 102 |
+
// Clear storage
|
| 103 |
+
$storage->flush();
|
| 104 |
}
|
| 105 |
|
| 106 |
// Check if file has been uploaded
|
| 107 |
if ( empty( $errors ) && ( ! $options['chunks'] || $options['chunk'] == $options['chunks'] - 1 ) ) {
|
| 108 |
// Create temporary directory
|
| 109 |
+
$extract_to = $storage->makeDirectory()->getAs( 'string' );
|
| 110 |
+
|
| 111 |
+
try {
|
| 112 |
+
// Extract archive to a temporary directory
|
| 113 |
+
$archive = ZipFactory::makeZipArchiver( $upload_file, ! class_exists( 'ZipArchive' ) );
|
| 114 |
+
$archive->extractTo( $extract_to );
|
| 115 |
+
$archive->close();
|
| 116 |
+
} catch ( Exception $e ) {
|
| 117 |
+
$errors[] = _(
|
| 118 |
+
'Archive file is broken or is not compatible with
|
| 119 |
+
"All In One WP Migration" plugin! Please verify your archive file.'
|
| 120 |
+
);
|
| 121 |
}
|
| 122 |
|
| 123 |
+
if ( empty( $errors ) ) {
|
| 124 |
+
// Verify whether this archive is valid
|
| 125 |
+
if ( $this->is_valid( $extract_to ) ) {
|
| 126 |
+
// Enable maintenance mode
|
| 127 |
+
$this->maintenance_mode( true );
|
| 128 |
+
|
| 129 |
+
// Media base directory
|
| 130 |
+
$upload_dir = wp_upload_dir();
|
| 131 |
+
$upload_basedir = $upload_dir['basedir'] . DIRECTORY_SEPARATOR;
|
| 132 |
+
if ( ! is_dir( $upload_basedir ) ) {
|
| 133 |
+
mkdir( $upload_basedir );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 134 |
}
|
| 135 |
|
| 136 |
+
// Themes base directory
|
| 137 |
+
$themes_dir = get_theme_root();
|
| 138 |
+
$themes_basedir = $themes_dir . DIRECTORY_SEPARATOR;
|
| 139 |
+
if ( ! is_dir( $themes_basedir ) ) {
|
| 140 |
+
mkdir( $themes_basedir );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 141 |
}
|
| 142 |
|
| 143 |
+
// Database import
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
if ( file_exists( $extract_to . Ai1wm_Export::EXPORT_DATABASE_NAME ) ) {
|
| 145 |
+
// Backup database
|
| 146 |
+
$model = new Ai1wm_Export;
|
| 147 |
+
$database_file = $model->prepare_database( $storage );
|
| 148 |
+
|
| 149 |
// Truncate database
|
| 150 |
$this->connection->truncateDatabase();
|
| 151 |
|
| 152 |
+
// Import database
|
| 153 |
$this->connection->setOldTablePrefix( AI1WM_TABLE_PREFIX )
|
| 154 |
+
->setNewTablePrefix( $wpdb->prefix )
|
| 155 |
+
->import( $extract_to . Ai1wm_Export::EXPORT_DATABASE_NAME );
|
| 156 |
}
|
| 157 |
|
| 158 |
+
// Media import
|
| 159 |
+
if ( is_dir( $extract_to . Ai1wm_Export::EXPORT_MEDIA_NAME ) ) {
|
| 160 |
+
// Backup media files
|
| 161 |
+
$backup_media_to = $storage->makeDirectory()->getAs( 'string' );
|
| 162 |
+
|
| 163 |
+
$this->copy_dir( $upload_basedir, $backup_media_to );
|
| 164 |
+
|
| 165 |
// Truncate media files
|
| 166 |
$this->truncate_dir( $upload_basedir );
|
| 167 |
|
| 168 |
+
// Import media files
|
| 169 |
+
$this->copy_dir( $extract_to . Ai1wm_Export::EXPORT_MEDIA_NAME, $upload_basedir );
|
| 170 |
}
|
| 171 |
|
| 172 |
+
// Themes import
|
| 173 |
+
if ( is_dir( $extract_to . Ai1wm_Export::EXPORT_THEMES_NAME ) ) {
|
| 174 |
+
// Backup themes files
|
| 175 |
+
$backup_themes_to = $storage->makeDirectory()->getAs( 'string' );
|
| 176 |
+
|
| 177 |
+
$this->copy_dir( $themes_basedir, $backup_themes_to );
|
| 178 |
+
|
| 179 |
// Truncate themes files
|
| 180 |
$this->truncate_dir( $themes_basedir );
|
| 181 |
|
| 182 |
+
// Import themes files
|
| 183 |
+
$this->copy_dir( $extract_to . Ai1wm_Export::EXPORT_THEMES_NAME, $themes_basedir );
|
| 184 |
}
|
| 185 |
|
| 186 |
+
// Plugins import
|
| 187 |
+
if ( is_dir( $extract_to . Ai1wm_Export::EXPORT_PLUGINS_NAME ) ) {
|
| 188 |
+
// Backup plugin files
|
| 189 |
+
$backup_plugins_to = $storage->makeDirectory()->getAs( 'string' );
|
| 190 |
+
|
| 191 |
+
$this->copy_dir( WP_PLUGIN_DIR, $backup_plugins_to, array( AI1WM_PLUGIN_NAME ) );
|
| 192 |
+
|
| 193 |
// Truncate plugin files
|
| 194 |
+
$this->truncate_dir( WP_PLUGIN_DIR, array( AI1WM_PLUGIN_NAME ) );
|
| 195 |
|
| 196 |
+
// Import plugin files
|
| 197 |
+
$this->copy_dir( $extract_to . Ai1wm_Export::EXPORT_PLUGINS_NAME, WP_PLUGIN_DIR );
|
| 198 |
}
|
|
|
|
| 199 |
|
| 200 |
+
// Test website
|
| 201 |
+
if ( ! $this->test_website( get_option( 'siteurl' ) ) ) {
|
| 202 |
+
|
| 203 |
+
// Database import
|
| 204 |
+
if ( file_exists( $extract_to . Ai1wm_Export::EXPORT_DATABASE_NAME ) ) {
|
| 205 |
+
// Truncate database
|
| 206 |
+
$this->connection->truncateDatabase();
|
| 207 |
+
|
| 208 |
+
// Import "OLD" database
|
| 209 |
+
$this->connection->setOldTablePrefix( AI1WM_TABLE_PREFIX )
|
| 210 |
+
->setNewTablePrefix( $wpdb->prefix )
|
| 211 |
+
->import( $database_file->getAs( 'string' ) );
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
// Media import
|
| 215 |
+
if ( is_dir( $extract_to . Ai1wm_Export::EXPORT_MEDIA_NAME ) ) {
|
| 216 |
+
// Truncate media files
|
| 217 |
+
$this->truncate_dir( $upload_basedir );
|
| 218 |
+
|
| 219 |
+
// Import "OLD" media files
|
| 220 |
+
$this->copy_dir( $backup_media_to, $upload_basedir );
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
// Themes import
|
| 224 |
+
if ( is_dir( $extract_to . Ai1wm_Export::EXPORT_THEMES_NAME ) ) {
|
| 225 |
+
// Truncate themes files
|
| 226 |
+
$this->truncate_dir( $themes_basedir );
|
| 227 |
+
|
| 228 |
+
// Import "OLD" themes files
|
| 229 |
+
$this->copy_dir( $backup_themes_to, $themes_basedir );
|
| 230 |
+
}
|
| 231 |
+
|
| 232 |
+
// Plugins import
|
| 233 |
+
if ( is_dir( $extract_to . Ai1wm_Export::EXPORT_PLUGINS_NAME ) ) {
|
| 234 |
+
// Truncate plugin files
|
| 235 |
+
$this->truncate_dir( WP_PLUGIN_DIR, array( AI1WM_PLUGIN_NAME ) );
|
| 236 |
+
|
| 237 |
+
// Import "OLD" plugin files
|
| 238 |
+
$this->copy_dir( $backup_plugins_to, WP_PLUGIN_DIR, array( AI1WM_PLUGIN_NAME ) );
|
| 239 |
+
}
|
| 240 |
+
}
|
| 241 |
+
|
| 242 |
+
// Disable maintenance mode
|
| 243 |
+
$this->maintenance_mode( false );
|
| 244 |
+
} else {
|
| 245 |
+
$errors[] = _( 'File is not compatible with "All In One WP Migration" plugin! Please verify your archive file.' );
|
| 246 |
+
}
|
| 247 |
}
|
| 248 |
+
|
| 249 |
+
// Clear storage
|
| 250 |
+
$storage->flush();
|
| 251 |
}
|
| 252 |
} else {
|
| 253 |
$errors[] = $this->code_to_message( $input_file['error'] );
|
| 270 |
/**
|
| 271 |
* Copy files from directory to directory
|
| 272 |
*
|
| 273 |
+
* @param string $from Copy files and directories FROM
|
| 274 |
+
* @param string $to Copy files and directories TO
|
| 275 |
+
* @param array $exclude List of directories to exclude
|
| 276 |
* @return void
|
| 277 |
*/
|
| 278 |
+
public function copy_dir( $from, $to, $exclude = array() ) {
|
| 279 |
$from = trailingslashit( $from );
|
| 280 |
$to = trailingslashit( $to );
|
| 281 |
|
| 282 |
$iterator = new RecursiveIteratorIterator(
|
| 283 |
+
new RecursiveDirectoryIterator( $from ),
|
| 284 |
RecursiveIteratorIterator::SELF_FIRST
|
| 285 |
);
|
| 286 |
|
| 287 |
+
// Prepare filter pattern
|
| 288 |
+
$filter_pattern = null;
|
| 289 |
+
if ( is_array( $exclude ) ) {
|
| 290 |
+
$filters = array();
|
| 291 |
+
foreach ( $exclude as $filter ) {
|
| 292 |
+
$filters[] = sprintf(
|
| 293 |
+
'(%s(%s.*)?)',
|
| 294 |
+
preg_quote( $filter, '/' ),
|
| 295 |
+
preg_quote( DIRECTORY_SEPARATOR, '/' )
|
| 296 |
+
);
|
| 297 |
+
}
|
| 298 |
+
|
| 299 |
+
$filter_pattern = implode( '|', $filters );
|
| 300 |
+
}
|
| 301 |
+
|
| 302 |
foreach ( $iterator as $item ) {
|
| 303 |
// Skip dots
|
| 304 |
+
if ( $iterator->isDot() ) {
|
| 305 |
+
continue;
|
| 306 |
+
}
|
| 307 |
+
|
| 308 |
+
// Validate filter pattern
|
| 309 |
+
if ( $filter_pattern ) {
|
| 310 |
+
if ( preg_match( '/^' . $filter_pattern . '$/', $iterator->getSubPathName() ) ) {
|
| 311 |
+
continue;
|
| 312 |
+
}
|
| 313 |
+
}
|
| 314 |
|
| 315 |
if ( $item->isDir() ) {
|
| 316 |
mkdir( $to . $iterator->getSubPathName() );
|
| 323 |
/**
|
| 324 |
* Truncate all files from specific directory
|
| 325 |
*
|
| 326 |
+
* @param string $dir Path to directory
|
| 327 |
+
* @param array $exclude List of directories to exclude
|
| 328 |
* @return void
|
| 329 |
*/
|
| 330 |
+
public function truncate_dir( $dir, $exclude = array() ) {
|
| 331 |
$dir = trailingslashit( $dir );
|
| 332 |
$iterator = new RecursiveIteratorIterator(
|
| 333 |
+
new RecursiveDirectoryIterator( $dir ),
|
| 334 |
RecursiveIteratorIterator::CHILD_FIRST
|
| 335 |
);
|
| 336 |
|
| 337 |
+
// Prepare filter pattern
|
| 338 |
+
$filter_pattern = null;
|
| 339 |
+
if ( is_array( $exclude ) ) {
|
| 340 |
+
$filters = array();
|
| 341 |
+
foreach ( $exclude as $filter ) {
|
| 342 |
+
$filters[] = sprintf(
|
| 343 |
+
'(%s(%s.*)?)',
|
| 344 |
+
preg_quote( $filter, '/' ),
|
| 345 |
+
preg_quote( DIRECTORY_SEPARATOR, '/' )
|
| 346 |
+
);
|
| 347 |
+
}
|
| 348 |
+
|
| 349 |
+
$filter_pattern = implode( '|', $filters );
|
| 350 |
+
}
|
| 351 |
+
|
| 352 |
foreach ( $iterator as $item ) {
|
| 353 |
// Skip dots
|
| 354 |
+
if ( $iterator->isDot() ) {
|
| 355 |
+
continue;
|
| 356 |
+
}
|
| 357 |
+
|
| 358 |
+
// Validate filter pattern
|
| 359 |
+
if ( $filter_pattern ) {
|
| 360 |
+
if ( preg_match( '/^' . $filter_pattern . '$/', $iterator->getSubPathName() ) ) {
|
| 361 |
+
continue;
|
| 362 |
+
}
|
| 363 |
+
}
|
| 364 |
|
| 365 |
if ( $item->isDir() ) {
|
| 366 |
rmdir( $dir . $iterator->getSubPathName() );
|
lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpPDO.php
CHANGED
|
@@ -543,11 +543,14 @@ class MysqlDumpPDO implements MysqlDumpInterface
|
|
| 543 |
$query = "SELECT * FROM `$tableName` ";
|
| 544 |
|
| 545 |
// Apply additional query clauses
|
| 546 |
-
|
| 547 |
-
|
| 548 |
-
|
| 549 |
-
|
| 550 |
-
|
|
|
|
|
|
|
|
|
|
| 551 |
}
|
| 552 |
|
| 553 |
// Replace table prefix
|
| 543 |
$query = "SELECT * FROM `$tableName` ";
|
| 544 |
|
| 545 |
// Apply additional query clauses
|
| 546 |
+
$clauses = $this->getQueryClauses();
|
| 547 |
+
if (isset($clauses[$tableName]) && ($queryClause = $clauses[$tableName])) {
|
| 548 |
+
$query .= $queryClause;
|
| 549 |
+
}
|
| 550 |
+
|
| 551 |
+
// No table data
|
| 552 |
+
if ($this->getNoTableData() && !isset($clauses[$tableName])) {
|
| 553 |
+
return;
|
| 554 |
}
|
| 555 |
|
| 556 |
// Replace table prefix
|
lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpSQL.php
CHANGED
|
@@ -536,11 +536,14 @@ class MysqlDumpSQL implements MysqlDumpInterface
|
|
| 536 |
$query = "SELECT * FROM `$tableName` ";
|
| 537 |
|
| 538 |
// Apply additional query clauses
|
| 539 |
-
|
| 540 |
-
|
| 541 |
-
|
| 542 |
-
|
| 543 |
-
|
|
|
|
|
|
|
|
|
|
| 544 |
}
|
| 545 |
|
| 546 |
// Replace table prefix
|
| 536 |
$query = "SELECT * FROM `$tableName` ";
|
| 537 |
|
| 538 |
// Apply additional query clauses
|
| 539 |
+
$clauses = $this->getQueryClauses();
|
| 540 |
+
if (isset($clauses[$tableName]) && ($queryClause = $clauses[$tableName])) {
|
| 541 |
+
$query .= $queryClause;
|
| 542 |
+
}
|
| 543 |
+
|
| 544 |
+
// No table data
|
| 545 |
+
if ($this->getNoTableData() && !isset($clauses[$tableName])) {
|
| 546 |
+
return;
|
| 547 |
}
|
| 548 |
|
| 549 |
// Replace table prefix
|
lib/vendor/storage-factory/storage-factory/.editorconfig
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# top-most EditorConfig file
|
| 2 |
+
root = true
|
| 3 |
+
|
| 4 |
+
# Unix-style newlines with a newline ending every file
|
| 5 |
+
[*]
|
| 6 |
+
end_of_line = lf
|
| 7 |
+
charset = utf-8
|
| 8 |
+
trim_trailing_whitespace = true
|
| 9 |
+
insert_final_newline = true
|
| 10 |
+
indent_style = space
|
| 11 |
+
|
| 12 |
+
# PHP
|
| 13 |
+
[*.php]
|
| 14 |
+
indent_style = space
|
| 15 |
+
indent_size = 4
|
| 16 |
+
max_line_length = 120
|
| 17 |
+
|
| 18 |
+
# YAML
|
| 19 |
+
[*.yml]
|
| 20 |
+
indent_style = space
|
| 21 |
+
indent_size = 4
|
| 22 |
+
|
| 23 |
+
# XML
|
| 24 |
+
[*.xml]
|
| 25 |
+
indent_style = space
|
| 26 |
+
indent_size = 4
|
lib/vendor/storage-factory/storage-factory/.travil.yml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
language: php
|
| 2 |
+
|
| 3 |
+
php:
|
| 4 |
+
- 5.5
|
| 5 |
+
- 5.4
|
| 6 |
+
- 5.3
|
| 7 |
+
- 5.2
|
| 8 |
+
|
| 9 |
+
script: phpunit
|
| 10 |
+
|
lib/vendor/storage-factory/storage-factory/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
The MIT License (MIT)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2013 Yani Iliev, Bobby Angelov
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
| 6 |
+
this software and associated documentation files (the "Software"), to deal in
|
| 7 |
+
the Software without restriction, including without limitation the rights to
|
| 8 |
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
| 9 |
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
| 10 |
+
subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
| 17 |
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
| 18 |
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
| 19 |
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
| 20 |
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
lib/vendor/storage-factory/storage-factory/README.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Storage Factory
|
| 2 |
+
|
| 3 |
+
[](https://travis-ci.org/borislav-angelov/storage-factory)
|
| 4 |
+
[](https://packagist.org/packages/storage-factory/storage-factory)
|
| 5 |
+
[](https://packagist.org/packages/storage-factory/storage-factory)
|
| 6 |
+
|
| 7 |
+
Factory class that creates either File Storage or Directory Storage
|
| 8 |
+
|
| 9 |
+
### Requirements
|
| 10 |
+
PHP v5.2 and up. Tested on PHP v5.2.17, v5.3, v5.4, v5.5
|
| 11 |
+
|
| 12 |
+
### Usage
|
| 13 |
+
```php
|
| 14 |
+
```
|
| 15 |
+
|
| 16 |
+
### Tests
|
| 17 |
+
Coverage reports are stored inside the coverage folder.
|
| 18 |
+
```bash
|
| 19 |
+
phpunit
|
| 20 |
+
```
|
| 21 |
+
|
| 22 |
+
### Contributing
|
| 23 |
+
For code guidelines refer to `.editorconfig`. This project is following PEAR code standard - http://pear.php.net/manual/en/standards.php
|
| 24 |
+
The project is following Vincent Driessen's branching model aka git flow - http://nvie.com/git-model/
|
| 25 |
+
Make sure to submit your pull requests against the **develop** branch
|
| 26 |
+
|
| 27 |
+
### License
|
| 28 |
+
MIT
|
| 29 |
+
|
| 30 |
+
### Authors
|
| 31 |
+
* Bobby Angelov
|
| 32 |
+
* Yani Iliev
|
lib/vendor/storage-factory/storage-factory/bump-version.sh
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
if [ -z "$1" ]; then
|
| 4 |
+
echo -e "\033[0;31mUsage:\033[0m $0 (major|minor|patch)\033[0m"
|
| 5 |
+
echo -e "\033[4;32mCurrent version\033[0m:\033[0m \033[33m`git describe master`\033[0m"
|
| 6 |
+
exit -1
|
| 7 |
+
fi
|
| 8 |
+
|
| 9 |
+
# increment version depending on passed parameter
|
| 10 |
+
case "$1" in
|
| 11 |
+
major)
|
| 12 |
+
currentVersion=`git describe master`
|
| 13 |
+
bumpedVersion=`echo $currentVersion | ( IFS=".$IFS" ; read a b c && echo $((a + 1)).0.0 )`
|
| 14 |
+
;;
|
| 15 |
+
minor)
|
| 16 |
+
currentVersion=`git describe master`
|
| 17 |
+
bumpedVersion=`echo $currentVersion | ( IFS=".$IFS" ; read a b c && echo $a.$((b + 1)).0 )`
|
| 18 |
+
;;
|
| 19 |
+
patch)
|
| 20 |
+
currentVersion=`git describe master`
|
| 21 |
+
bumpedVersion=`echo $currentVersion | ( IFS=".$IFS" ; read a b c && echo $a.$b.$((c + 1)) )`
|
| 22 |
+
;;
|
| 23 |
+
*)
|
| 24 |
+
echo -e "\033[0;31mUsage:\033[0m $0 (major|minor|patch)\033[0m"
|
| 25 |
+
echo -e "\033[4;32mCurrent version\033[0m:\033[0m \033[33m`git describe master`\033[0m"
|
| 26 |
+
exit -1
|
| 27 |
+
esac
|
| 28 |
+
|
| 29 |
+
# let's start a new release
|
| 30 |
+
git flow release start $bumpedVersion
|
| 31 |
+
|
| 32 |
+
# bump version in all files
|
| 33 |
+
for file in `find . -path ./coverage -prune -o -path ./.git -prune -o -type f`
|
| 34 |
+
do
|
| 35 |
+
filename=$(basename "$file")
|
| 36 |
+
ext="${filename##*.}"
|
| 37 |
+
if [ $ext != "png" -a $ext != "jpg" -a $ext != "jpeg" -a $ext != "gif" ]; then
|
| 38 |
+
if [ $ext != "DS_Store" -a $ext != "ttf" -a $ext != "node_modules" -a $ext != "git" ]; then
|
| 39 |
+
sed -i '' "s/GIT: ..11.0.0$currentVersion/GIT: ..11.0.0$bumpedVersion/g" $file
|
| 40 |
+
fi
|
| 41 |
+
fi
|
| 42 |
+
done
|
| 43 |
+
|
| 44 |
+
# bump version in package.json
|
| 45 |
+
sed -i '' "s/\"version\": \"$currentVersion\"/\"version\": \"$bumpedVersion\"/g" package.json
|
| 46 |
+
|
| 47 |
+
# add changed files to git
|
| 48 |
+
git add . && git commit -m "Bumped version from $currentVersion to $bumpedVersion"
|
| 49 |
+
|
| 50 |
+
# finish the release
|
| 51 |
+
git flow release finish -F -m "$bumpedVersion" $bumpedVersion
|
| 52 |
+
|
| 53 |
+
# publish develop branch
|
| 54 |
+
git checkout develop && git push origin develop
|
| 55 |
+
|
| 56 |
+
# publish master
|
| 57 |
+
git checkout master && git push origin master
|
| 58 |
+
|
| 59 |
+
# publish tags
|
| 60 |
+
git push origin --tags
|
| 61 |
+
|
| 62 |
+
# Announce the result
|
| 63 |
+
echo -e "\033[4;32mSuccessfully released\033[0m:\033[0m \033[33m$bumpedVersion\033[0m"
|
lib/vendor/storage-factory/storage-factory/composer.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "storage-factory/storage-factory",
|
| 3 |
+
"type": "library",
|
| 4 |
+
"description": "Factory class that creates either File Storage or Directory Storage PHP 5.2.17 and up",
|
| 5 |
+
"keywords": ["file storage", "directory storage"],
|
| 6 |
+
"homepage": "http://github.com/borislav-angelov/storage-factory",
|
| 7 |
+
"license": "MIT",
|
| 8 |
+
"authors": [
|
| 9 |
+
{
|
| 10 |
+
"name": "Bobby Angelov",
|
| 11 |
+
"email": "borislav.angelov@gmail.com",
|
| 12 |
+
"homepage": "https://servmask.com",
|
| 13 |
+
"role": "developer"
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"name": "Yani Iliev",
|
| 17 |
+
"email": "yani@iliev.me",
|
| 18 |
+
"homepage": "https://yani.iliev.me",
|
| 19 |
+
"role": "developer"
|
| 20 |
+
}
|
| 21 |
+
],
|
| 22 |
+
"require": {
|
| 23 |
+
"php": ">=5.2.0"
|
| 24 |
+
}
|
| 25 |
+
}
|
lib/vendor/storage-factory/storage-factory/lib/StorageAbstract.php
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
| 3 |
+
|
| 4 |
+
/**
|
| 5 |
+
* StorageAbstract class
|
| 6 |
+
*
|
| 7 |
+
* PHP version 5
|
| 8 |
+
*
|
| 9 |
+
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining
|
| 10 |
+
* a copy of this software and associated documentation files (the "Software"), to
|
| 11 |
+
* deal in the Software without restriction, including without limitation the rights
|
| 12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
| 13 |
+
* of the Software, and to permit persons to whom the Software is furnished to do so,
|
| 14 |
+
* subject to the following conditions:
|
| 15 |
+
*
|
| 16 |
+
* The above copyright notice and this permission notice shall be included in all
|
| 17 |
+
* copies or substantial portions of the Software.
|
| 18 |
+
*
|
| 19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
| 21 |
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
| 22 |
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
| 23 |
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
| 24 |
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 25 |
+
*
|
| 26 |
+
* @category FileSystem
|
| 27 |
+
* @package StorageFactory
|
| 28 |
+
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
+
* @author Bobby Angelov <bobby@servmask.com>
|
| 30 |
+
* @copyright 2014 Yani Iliev, Bobby Angelov
|
| 31 |
+
* @license https://raw.github.com/borislav-angelov/storage-factory/master/LICENSE The MIT License (MIT)
|
| 32 |
+
* @version GIT: 1.0.0
|
| 33 |
+
* @link https://github.com/borislav-angelov/storage-factory/
|
| 34 |
+
*/
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* StorageAbstract class
|
| 38 |
+
*
|
| 39 |
+
* @category FileSystem
|
| 40 |
+
* @package StorageFactory
|
| 41 |
+
* @author Yani Iliev <yani@iliev.me>
|
| 42 |
+
* @author Bobby Angelov <bobby@servmask.com>
|
| 43 |
+
* @copyright 2014 Yani Iliev, Bobby Angelov
|
| 44 |
+
* @license https://raw.github.com/borislav-angelov/storage-factory/master/LICENSE The MIT License (MIT)
|
| 45 |
+
* @version GIT: 1.0.0
|
| 46 |
+
* @link https://github.com/borislav-angelov/storage-factory/
|
| 47 |
+
*/
|
| 48 |
+
abstract class StorageAbstract
|
| 49 |
+
{
|
| 50 |
+
/**
|
| 51 |
+
* Get a file or directory as resource
|
| 52 |
+
*
|
| 53 |
+
* @param string Get a file or directory as resource or absolute path
|
| 54 |
+
* @return mixed
|
| 55 |
+
*/
|
| 56 |
+
abstract public function getAs($type = 'string');
|
| 57 |
+
|
| 58 |
+
/**
|
| 59 |
+
* Delete a file or directory
|
| 60 |
+
*
|
| 61 |
+
* @return string
|
| 62 |
+
*/
|
| 63 |
+
abstract public function delete();
|
| 64 |
+
|
| 65 |
+
/**
|
| 66 |
+
* Get storage absolute path
|
| 67 |
+
*
|
| 68 |
+
* @return mixed
|
| 69 |
+
*/
|
| 70 |
+
public function getRootPath() {
|
| 71 |
+
if (defined('AI1WM_STORAGE_PATH') && self::isAccessible(AI1WM_STORAGE_PATH)) {
|
| 72 |
+
return AI1WM_STORAGE_PATH;
|
| 73 |
+
} else if (self::isAccessible(sys_get_temp_dir())) {
|
| 74 |
+
return sys_get_temp_dir();
|
| 75 |
+
} else {
|
| 76 |
+
throw new Exception('Storage directory is not accessible (read/write).');
|
| 77 |
+
}
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
/**
|
| 81 |
+
* Is path accessible (read/write)
|
| 82 |
+
*
|
| 83 |
+
* @param string Absolute path
|
| 84 |
+
* @return boolean Path is accessible or not
|
| 85 |
+
*/
|
| 86 |
+
public static function isAccessible($path) {
|
| 87 |
+
return is_readable($path) && is_writable($path);
|
| 88 |
+
}
|
| 89 |
+
}
|
lib/vendor/storage-factory/storage-factory/lib/StorageArea.php
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
| 3 |
+
|
| 4 |
+
/**
|
| 5 |
+
* StorageArea class main file
|
| 6 |
+
*
|
| 7 |
+
* PHP version 5
|
| 8 |
+
*
|
| 9 |
+
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining
|
| 10 |
+
* a copy of this software and associated documentation files (the "Software"), to
|
| 11 |
+
* deal in the Software without restriction, including without limitation the rights
|
| 12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
| 13 |
+
* of the Software, and to permit persons to whom the Software is furnished to do so,
|
| 14 |
+
* subject to the following conditions:
|
| 15 |
+
*
|
| 16 |
+
* The above copyright notice and this permission notice shall be included in all
|
| 17 |
+
* copies or substantial portions of the Software.
|
| 18 |
+
*
|
| 19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
| 21 |
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
| 22 |
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
| 23 |
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
| 24 |
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 25 |
+
*
|
| 26 |
+
* @category FileSystem
|
| 27 |
+
* @package StorageFactory
|
| 28 |
+
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
+
* @author Bobby Angelov <bobby@servmask.com>
|
| 30 |
+
* @copyright 2014 Yani Iliev, Bobby Angelov
|
| 31 |
+
* @license https://raw.github.com/borislav-angelov/storage-factory/master/LICENSE The MIT License (MIT)
|
| 32 |
+
* @version GIT: 1.0.0
|
| 33 |
+
* @link https://github.com/borislav-angelov/storage-factory/
|
| 34 |
+
*/
|
| 35 |
+
|
| 36 |
+
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'StorageFile.php';
|
| 37 |
+
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'StorageDirectory.php';
|
| 38 |
+
|
| 39 |
+
/**
|
| 40 |
+
* StorageArea Main class
|
| 41 |
+
*
|
| 42 |
+
* @category FileSystem
|
| 43 |
+
* @package StorageFactory
|
| 44 |
+
* @author Yani Iliev <yani@iliev.me>
|
| 45 |
+
* @author Bobby Angelov <bobby@servmask.com>
|
| 46 |
+
* @copyright 2014 Yani Iliev, Bobby Angelov
|
| 47 |
+
* @license https://raw.github.com/borislav-angelov/storage-factory/master/LICENSE The MIT License (MIT)
|
| 48 |
+
* @version GIT: 1.0.0
|
| 49 |
+
* @link https://github.com/borislav-angelov/storage-factory/
|
| 50 |
+
*/
|
| 51 |
+
class StorageArea
|
| 52 |
+
{
|
| 53 |
+
protected $nodes = array();
|
| 54 |
+
|
| 55 |
+
/**
|
| 56 |
+
* Create a file with unique name
|
| 57 |
+
*
|
| 58 |
+
* @param string $name Custom file name
|
| 59 |
+
* @return StorageFile StorageFile instance
|
| 60 |
+
*/
|
| 61 |
+
public function makeFile($name = null) {
|
| 62 |
+
$this->nodes[] = $node = new StorageFile($name);
|
| 63 |
+
|
| 64 |
+
return $node;
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
/**
|
| 68 |
+
* Create a directory with unique name
|
| 69 |
+
*
|
| 70 |
+
* @param string $name Custom directory name
|
| 71 |
+
* @return StorageDirectory StorageDirectory instance
|
| 72 |
+
*/
|
| 73 |
+
public function makeDirectory($name = null) {
|
| 74 |
+
$this->nodes[] = $node = new StorageDirectory($name);
|
| 75 |
+
|
| 76 |
+
return $node;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
/**
|
| 80 |
+
* Remove all files and directories in the current storage
|
| 81 |
+
*
|
| 82 |
+
* @return void
|
| 83 |
+
*/
|
| 84 |
+
public function flush() {
|
| 85 |
+
foreach ($this->nodes as $node) {
|
| 86 |
+
$node->delete();
|
| 87 |
+
}
|
| 88 |
+
}
|
| 89 |
+
}
|
lib/vendor/storage-factory/storage-factory/lib/StorageDirectory.php
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
| 3 |
+
|
| 4 |
+
/**
|
| 5 |
+
* StorageDirectory class
|
| 6 |
+
*
|
| 7 |
+
* PHP version 5
|
| 8 |
+
*
|
| 9 |
+
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining
|
| 10 |
+
* a copy of this software and associated documentation files (the "Software"), to
|
| 11 |
+
* deal in the Software without restriction, including without limitation the rights
|
| 12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
| 13 |
+
* of the Software, and to permit persons to whom the Software is furnished to do so,
|
| 14 |
+
* subject to the following conditions:
|
| 15 |
+
*
|
| 16 |
+
* The above copyright notice and this permission notice shall be included in all
|
| 17 |
+
* copies or substantial portions of the Software.
|
| 18 |
+
*
|
| 19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
| 21 |
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
| 22 |
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
| 23 |
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
| 24 |
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 25 |
+
*
|
| 26 |
+
* @category FileSystem
|
| 27 |
+
* @package StorageFactory
|
| 28 |
+
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
+
* @author Bobby Angelov <bobby@servmask.com>
|
| 30 |
+
* @copyright 2014 Yani Iliev, Bobby Angelov
|
| 31 |
+
* @license https://raw.github.com/borislav-angelov/storage-factory/master/LICENSE The MIT License (MIT)
|
| 32 |
+
* @version GIT: 1.0.0
|
| 33 |
+
* @link https://github.com/borislav-angelov/storage-factory/
|
| 34 |
+
*/
|
| 35 |
+
|
| 36 |
+
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'StorageAbstract.php';
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* StorageDirectory class
|
| 40 |
+
*
|
| 41 |
+
* @category FileSystem
|
| 42 |
+
* @package StorageFactory
|
| 43 |
+
* @author Yani Iliev <yani@iliev.me>
|
| 44 |
+
* @author Bobby Angelov <bobby@servmask.com>
|
| 45 |
+
* @copyright 2014 Yani Iliev, Bobby Angelov
|
| 46 |
+
* @license https://raw.github.com/borislav-angelov/storage-factory/master/LICENSE The MIT License (MIT)
|
| 47 |
+
* @version GIT: 1.0.0
|
| 48 |
+
* @link https://github.com/borislav-angelov/storage-factory/
|
| 49 |
+
*/
|
| 50 |
+
class StorageDirectory extends StorageAbstract
|
| 51 |
+
{
|
| 52 |
+
protected $directory = null;
|
| 53 |
+
|
| 54 |
+
/**
|
| 55 |
+
* CTOR
|
| 56 |
+
*/
|
| 57 |
+
public function __construct($name = null) {
|
| 58 |
+
if (empty($name)) {
|
| 59 |
+
$this->directory = $this->getRootPath() . DIRECTORY_SEPARATOR . uniqid() . DIRECTORY_SEPARATOR;
|
| 60 |
+
} else {
|
| 61 |
+
$this->directory = $this->getRootPath() . DIRECTORY_SEPARATOR . $name . DIRECTORY_SEPARATOR;
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
// Create directory
|
| 65 |
+
if (!is_dir($this->directory)) {
|
| 66 |
+
mkdir($this->directory);
|
| 67 |
+
}
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
/**
|
| 71 |
+
* Get a file or directory as resource
|
| 72 |
+
*
|
| 73 |
+
* @param string Get a file or directory as resource or absolute path
|
| 74 |
+
* @return mixed
|
| 75 |
+
*/
|
| 76 |
+
public function getAs($type = 'string') {
|
| 77 |
+
if ($type === 'string') {
|
| 78 |
+
return $this->directory;
|
| 79 |
+
} else {
|
| 80 |
+
throw new Exception('Unable to retrieve directory as ' . $type . '. Make sure the method is implemented');
|
| 81 |
+
}
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
/**
|
| 85 |
+
* Delete a file or directory
|
| 86 |
+
*
|
| 87 |
+
* @return void
|
| 88 |
+
*/
|
| 89 |
+
public function delete() {
|
| 90 |
+
$iterator = new RecursiveIteratorIterator(
|
| 91 |
+
new RecursiveDirectoryIterator( $this->directory ),
|
| 92 |
+
RecursiveIteratorIterator::CHILD_FIRST
|
| 93 |
+
);
|
| 94 |
+
|
| 95 |
+
foreach ( $iterator as $item ) {
|
| 96 |
+
// Skip dots
|
| 97 |
+
if ( $iterator->isDot() ) continue;
|
| 98 |
+
|
| 99 |
+
if ( $item->isDir() ) {
|
| 100 |
+
rmdir( $this->directory . $iterator->getSubPathName() );
|
| 101 |
+
} else {
|
| 102 |
+
unlink( $this->directory . $iterator->getSubPathName() );
|
| 103 |
+
}
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
rmdir( $this->directory );
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
}
|
lib/vendor/storage-factory/storage-factory/lib/StorageFile.php
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
| 3 |
+
|
| 4 |
+
/**
|
| 5 |
+
* StorageFile class
|
| 6 |
+
*
|
| 7 |
+
* PHP version 5
|
| 8 |
+
*
|
| 9 |
+
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining
|
| 10 |
+
* a copy of this software and associated documentation files (the "Software"), to
|
| 11 |
+
* deal in the Software without restriction, including without limitation the rights
|
| 12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
| 13 |
+
* of the Software, and to permit persons to whom the Software is furnished to do so,
|
| 14 |
+
* subject to the following conditions:
|
| 15 |
+
*
|
| 16 |
+
* The above copyright notice and this permission notice shall be included in all
|
| 17 |
+
* copies or substantial portions of the Software.
|
| 18 |
+
*
|
| 19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
| 21 |
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
| 22 |
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
| 23 |
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
| 24 |
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 25 |
+
*
|
| 26 |
+
* @category FileSystem
|
| 27 |
+
* @package StorageFactory
|
| 28 |
+
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
+
* @author Bobby Angelov <bobby@servmask.com>
|
| 30 |
+
* @copyright 2014 Yani Iliev, Bobby Angelov
|
| 31 |
+
* @license https://raw.github.com/borislav-angelov/storage-factory/master/LICENSE The MIT License (MIT)
|
| 32 |
+
* @version GIT: 1.0.0
|
| 33 |
+
* @link https://github.com/borislav-angelov/storage-factory/
|
| 34 |
+
*/
|
| 35 |
+
|
| 36 |
+
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'StorageAbstract.php';
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* StorageFile class
|
| 40 |
+
*
|
| 41 |
+
* @category FileSystem
|
| 42 |
+
* @package StorageFactory
|
| 43 |
+
* @author Yani Iliev <yani@iliev.me>
|
| 44 |
+
* @author Bobby Angelov <bobby@servmask.com>
|
| 45 |
+
* @copyright 2014 Yani Iliev, Bobby Angelov
|
| 46 |
+
* @license https://raw.github.com/borislav-angelov/storage-factory/master/LICENSE The MIT License (MIT)
|
| 47 |
+
* @version GIT: 1.0.0
|
| 48 |
+
* @link https://github.com/borislav-angelov/storage-factory/
|
| 49 |
+
*/
|
| 50 |
+
class StorageFile extends StorageAbstract
|
| 51 |
+
{
|
| 52 |
+
protected $file = null;
|
| 53 |
+
|
| 54 |
+
/**
|
| 55 |
+
* CTOR
|
| 56 |
+
*/
|
| 57 |
+
public function __construct($name = null) {
|
| 58 |
+
if (empty($name)) {
|
| 59 |
+
$this->file = tempnam(
|
| 60 |
+
$this->getRootPath(),
|
| 61 |
+
(defined('AI1WM_STORAGE_PREFIX') ? AI1WM_STORAGE_PREFIX : 'sm_')
|
| 62 |
+
);
|
| 63 |
+
} else {
|
| 64 |
+
$this->file = $this->getRootPath() . DIRECTORY_SEPARATOR . $name;
|
| 65 |
+
}
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* Get absolute file path or file resource
|
| 70 |
+
*
|
| 71 |
+
* @return mixed
|
| 72 |
+
*/
|
| 73 |
+
public function getAs($type = 'string') {
|
| 74 |
+
return ($type === 'string' ? $this->file : fopen($this->file, 'a+'));
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
/**
|
| 78 |
+
* Delete file
|
| 79 |
+
*
|
| 80 |
+
* @return boolean
|
| 81 |
+
*/
|
| 82 |
+
public function delete() {
|
| 83 |
+
return unlink($this->file);
|
| 84 |
+
}
|
| 85 |
+
}
|
lib/vendor/storage-factory/storage-factory/phpunit.xml
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<phpunit
|
| 2 |
+
bootstrap="test/bootstrap.php"
|
| 3 |
+
backupGlobals="false"
|
| 4 |
+
colors="true"
|
| 5 |
+
convertErrorsToExceptions="true"
|
| 6 |
+
convertNoticesToExceptions="true"
|
| 7 |
+
convertWarningsToExceptions="true"
|
| 8 |
+
>
|
| 9 |
+
<testsuites>
|
| 10 |
+
<testsuite>
|
| 11 |
+
<directory prefix="test-" suffix=".php">./test/</directory>
|
| 12 |
+
</testsuite>
|
| 13 |
+
</testsuites>
|
| 14 |
+
<filter>
|
| 15 |
+
<whitelist processUncoveredFilesFromWhitelist="true">
|
| 16 |
+
<directory suffix=".php">lib/</directory>
|
| 17 |
+
</whitelist>
|
| 18 |
+
</filter>
|
| 19 |
+
<logging>
|
| 20 |
+
<log
|
| 21 |
+
type="coverage-html"
|
| 22 |
+
target="coverage"
|
| 23 |
+
charset="UTF-8"
|
| 24 |
+
highlight="false"
|
| 25 |
+
lowUpperBound="35"
|
| 26 |
+
highLowerBound="70"
|
| 27 |
+
/>
|
| 28 |
+
</logging>
|
| 29 |
+
</phpunit>
|
lib/vendor/storage-factory/storage-factory/test/bootstrap.php
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
| 3 |
+
|
| 4 |
+
/**
|
| 5 |
+
* Bootstrap file for unit tests used in Storage Factory
|
| 6 |
+
*
|
| 7 |
+
* PHP version 5
|
| 8 |
+
*
|
| 9 |
+
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining
|
| 10 |
+
* a copy of this software and associated documentation files (the "Software"), to
|
| 11 |
+
* deal in the Software without restriction, including without limitation the rights
|
| 12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
| 13 |
+
* of the Software, and to permit persons to whom the Software is furnished to do so,
|
| 14 |
+
* subject to the following conditions:
|
| 15 |
+
*
|
| 16 |
+
* The above copyright notice and this permission notice shall be included in all
|
| 17 |
+
* copies or substantial portions of the Software.
|
| 18 |
+
*
|
| 19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
| 21 |
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
| 22 |
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
| 23 |
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
| 24 |
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 25 |
+
*
|
| 26 |
+
* @category FileSystem
|
| 27 |
+
* @package StorageFactory
|
| 28 |
+
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
+
* @author Bobby Angelov <bobby@servmask.com>
|
| 30 |
+
* @copyright 2014 Yani Iliev, Bobby Angelov
|
| 31 |
+
* @license https://raw.github.com/borislav-angelov/storage-factory/master/LICENSE The MIT License (MIT)
|
| 32 |
+
* @version GIT: 1.0.0
|
| 33 |
+
* @link https://github.com/borislav-angelov/storage-factory/
|
| 34 |
+
*/
|
| 35 |
+
|
| 36 |
+
require_once
|
| 37 |
+
dirname(__FILE__) .
|
| 38 |
+
DIRECTORY_SEPARATOR . '..' .
|
| 39 |
+
DIRECTORY_SEPARATOR . 'lib' .
|
| 40 |
+
DIRECTORY_SEPARATOR . 'StorageFactory.php';
|
lib/vendor/storage-factory/storage-factory/test/test-storage-factory.php
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
| 3 |
+
|
| 4 |
+
/**
|
| 5 |
+
* Bootstrap file for unit tests used in Storage Factory
|
| 6 |
+
*
|
| 7 |
+
* PHP version 5
|
| 8 |
+
*
|
| 9 |
+
* LICENSE: Permission is hereby granted, free of charge, to any person obtaining
|
| 10 |
+
* a copy of this software and associated documentation files (the "Software"), to
|
| 11 |
+
* deal in the Software without restriction, including without limitation the rights
|
| 12 |
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
| 13 |
+
* of the Software, and to permit persons to whom the Software is furnished to do so,
|
| 14 |
+
* subject to the following conditions:
|
| 15 |
+
*
|
| 16 |
+
* The above copyright notice and this permission notice shall be included in all
|
| 17 |
+
* copies or substantial portions of the Software.
|
| 18 |
+
*
|
| 19 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 20 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
| 21 |
+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
| 22 |
+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
| 23 |
+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
| 24 |
+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
| 25 |
+
*
|
| 26 |
+
* @category FileSystem
|
| 27 |
+
* @package StorageFactory
|
| 28 |
+
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
+
* @author Bobby Angelov <bobby@servmask.com>
|
| 30 |
+
* @copyright 2014 Yani Iliev, Bobby Angelov
|
| 31 |
+
* @license https://raw.github.com/borislav-angelov/storage-factory/master/LICENSE The MIT License (MIT)
|
| 32 |
+
* @version GIT: 1.0.0
|
| 33 |
+
* @link https://github.com/borislav-angelov/storage-factory/
|
| 34 |
+
*/
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* Unit test class
|
| 38 |
+
*
|
| 39 |
+
* @category Tests
|
| 40 |
+
* @package ZipFactory
|
| 41 |
+
* @author Yani Iliev <yani@iliev.me>
|
| 42 |
+
* @author Bobby Angelov <bobby@servmask.com>
|
| 43 |
+
* @copyright 2014 Yani Iliev, Bobby Angelov
|
| 44 |
+
* @license https://raw.github.com/borislav-angelov/storage-factory/master/LICENSE The MIT License (MIT)
|
| 45 |
+
* @version GIT: 1.0.0
|
| 46 |
+
* @link https://github.com/borislav-angelov/storage-factory/
|
| 47 |
+
*/
|
| 48 |
+
class StorageFactoryTest extends PHPUnit_Framework_TestCase
|
| 49 |
+
{
|
| 50 |
+
/**
|
| 51 |
+
* @return [type] [description]
|
| 52 |
+
*/
|
| 53 |
+
public function testMakeFileStorage()
|
| 54 |
+
{
|
| 55 |
+
$fileStorage = StorageFactory::make();
|
| 56 |
+
$this->assertTrue($fileStorage instanceof StorageFile);
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
/**
|
| 60 |
+
* @return [type] [description]
|
| 61 |
+
*/
|
| 62 |
+
public function testMakeDirectoryStorage()
|
| 63 |
+
{
|
| 64 |
+
$fileStorage = StorageFactory::make(true);
|
| 65 |
+
$this->assertTrue($fileStorage instanceof StorageDirectory);
|
| 66 |
+
}
|
| 67 |
+
}
|
lib/vendor/zip-factory/zip-factory/lib/ArchiverPclZip.php
CHANGED
|
@@ -28,7 +28,7 @@
|
|
| 28 |
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
* @copyright 2014 Yani Iliev
|
| 30 |
* @license https://raw.github.com/yani-/zip-factory/master/LICENSE The MIT License (MIT)
|
| 31 |
-
* @version GIT: 1.
|
| 32 |
* @link https://github.com/yani-/zip-factory/
|
| 33 |
*/
|
| 34 |
|
|
@@ -121,23 +121,45 @@ if (function_exists('gzopen')) {
|
|
| 121 |
}
|
| 122 |
|
| 123 |
/**
|
| 124 |
-
*
|
| 125 |
*
|
| 126 |
-
* @param
|
| 127 |
-
* @param
|
| 128 |
-
* @param array $include
|
| 129 |
*
|
| 130 |
-
* @return
|
| 131 |
*/
|
| 132 |
-
public function addDir($path, $
|
| 133 |
{
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
$
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 141 |
}
|
| 142 |
|
| 143 |
/**
|
| 28 |
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
* @copyright 2014 Yani Iliev
|
| 30 |
* @license https://raw.github.com/yani-/zip-factory/master/LICENSE The MIT License (MIT)
|
| 31 |
+
* @version GIT: 1.2.0
|
| 32 |
* @link https://github.com/yani-/zip-factory/
|
| 33 |
*/
|
| 34 |
|
| 121 |
}
|
| 122 |
|
| 123 |
/**
|
| 124 |
+
* Add directory to archive
|
| 125 |
*
|
| 126 |
+
* @param string $path Path to directory
|
| 127 |
+
* @param string $parent_dir Parent path name
|
| 128 |
+
* @param array $include Include specific directories
|
| 129 |
*
|
| 130 |
+
* @return void
|
| 131 |
*/
|
| 132 |
+
public function addDir($path, $parent_dir = null, $include = array())
|
| 133 |
{
|
| 134 |
+
// Prepare filter pattern
|
| 135 |
+
$filter_pattern = null;
|
| 136 |
+
if (is_array($include)) {
|
| 137 |
+
$filters = array();
|
| 138 |
+
foreach ($include as $filter) {
|
| 139 |
+
$filters[] = $path . DIRECTORY_SEPARATOR . $filter;
|
| 140 |
+
}
|
| 141 |
+
|
| 142 |
+
$filter_pattern = implode(',', $filters);
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
// Validate filter pattern
|
| 146 |
+
if ($filter_pattern) {
|
| 147 |
+
$this->pclzip->add(
|
| 148 |
+
$filter_pattern,
|
| 149 |
+
PCLZIP_OPT_REMOVE_PATH,
|
| 150 |
+
$path,
|
| 151 |
+
PCLZIP_OPT_ADD_PATH,
|
| 152 |
+
$parent_dir
|
| 153 |
+
);
|
| 154 |
+
} else {
|
| 155 |
+
$this->pclzip->add(
|
| 156 |
+
$path,
|
| 157 |
+
PCLZIP_OPT_REMOVE_PATH,
|
| 158 |
+
$path,
|
| 159 |
+
PCLZIP_OPT_ADD_PATH,
|
| 160 |
+
$parent_dir
|
| 161 |
+
);
|
| 162 |
+
}
|
| 163 |
}
|
| 164 |
|
| 165 |
/**
|
lib/vendor/zip-factory/zip-factory/lib/ArchiverZipArchive.php
CHANGED
|
@@ -28,7 +28,7 @@
|
|
| 28 |
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
* @copyright 2014 Yani Iliev
|
| 30 |
* @license https://raw.github.com/yani-/zip-factory/master/LICENSE The MIT License (MIT)
|
| 31 |
-
* @version GIT: 1.
|
| 32 |
* @link https://github.com/yani-/zip-factory/
|
| 33 |
*/
|
| 34 |
|
|
@@ -112,13 +112,13 @@ if (class_exists('ZipArchive')) {
|
|
| 112 |
}
|
| 113 |
|
| 114 |
/**
|
| 115 |
-
*
|
| 116 |
*
|
| 117 |
-
* @param
|
| 118 |
-
* @param
|
| 119 |
-
* @param array $include
|
| 120 |
*
|
| 121 |
-
* @return
|
| 122 |
*/
|
| 123 |
public function addDir($path, $parent_dir = null, $include = array())
|
| 124 |
{
|
|
@@ -128,18 +128,19 @@ if (class_exists('ZipArchive')) {
|
|
| 128 |
RecursiveIteratorIterator::SELF_FIRST
|
| 129 |
);
|
| 130 |
|
| 131 |
-
// Prepare
|
| 132 |
-
$
|
| 133 |
if (is_array($include)) {
|
| 134 |
$filters = array();
|
| 135 |
-
foreach ($include as $
|
| 136 |
-
$filters[] =
|
| 137 |
-
'
|
| 138 |
-
preg_quote($
|
|
|
|
| 139 |
);
|
| 140 |
}
|
| 141 |
|
| 142 |
-
$
|
| 143 |
}
|
| 144 |
|
| 145 |
foreach ($iterator as $item) {
|
|
@@ -148,12 +149,9 @@ if (class_exists('ZipArchive')) {
|
|
| 148 |
continue;
|
| 149 |
}
|
| 150 |
|
| 151 |
-
// Validate
|
| 152 |
-
if ($
|
| 153 |
-
if (!preg_match(
|
| 154 |
-
'/^(' . $file_pattern . ')$/',
|
| 155 |
-
$iterator->getSubPathName()
|
| 156 |
-
)) {
|
| 157 |
continue;
|
| 158 |
}
|
| 159 |
}
|
| 28 |
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
* @copyright 2014 Yani Iliev
|
| 30 |
* @license https://raw.github.com/yani-/zip-factory/master/LICENSE The MIT License (MIT)
|
| 31 |
+
* @version GIT: 1.2.0
|
| 32 |
* @link https://github.com/yani-/zip-factory/
|
| 33 |
*/
|
| 34 |
|
| 112 |
}
|
| 113 |
|
| 114 |
/**
|
| 115 |
+
* Add directory to archive
|
| 116 |
*
|
| 117 |
+
* @param string $path Path to directory
|
| 118 |
+
* @param string $parent_dir Parent path name
|
| 119 |
+
* @param array $include Include specific directories
|
| 120 |
*
|
| 121 |
+
* @return void
|
| 122 |
*/
|
| 123 |
public function addDir($path, $parent_dir = null, $include = array())
|
| 124 |
{
|
| 128 |
RecursiveIteratorIterator::SELF_FIRST
|
| 129 |
);
|
| 130 |
|
| 131 |
+
// Prepare filter pattern
|
| 132 |
+
$filter_pattern = null;
|
| 133 |
if (is_array($include)) {
|
| 134 |
$filters = array();
|
| 135 |
+
foreach ($include as $filter) {
|
| 136 |
+
$filters[] = sprintf(
|
| 137 |
+
'(%s(%s.*)?)',
|
| 138 |
+
preg_quote( $filter, '/' ),
|
| 139 |
+
preg_quote( DIRECTORY_SEPARATOR, '/' )
|
| 140 |
);
|
| 141 |
}
|
| 142 |
|
| 143 |
+
$filter_pattern = implode( '|', $filters );
|
| 144 |
}
|
| 145 |
|
| 146 |
foreach ($iterator as $item) {
|
| 149 |
continue;
|
| 150 |
}
|
| 151 |
|
| 152 |
+
// Validate filter pattern
|
| 153 |
+
if ($filter_pattern) {
|
| 154 |
+
if (!preg_match('/^' . $filter_pattern . '$/', $iterator->getSubPathName())) {
|
|
|
|
|
|
|
|
|
|
| 155 |
continue;
|
| 156 |
}
|
| 157 |
}
|
lib/vendor/zip-factory/zip-factory/lib/ZipFactory.php
CHANGED
|
@@ -28,7 +28,7 @@
|
|
| 28 |
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
* @copyright 2014 Yani Iliev
|
| 30 |
* @license https://raw.github.com/yani-/zip-factory/master/LICENSE The MIT License (MIT)
|
| 31 |
-
* @version GIT: 1.
|
| 32 |
* @link https://github.com/yani-/zip-factory/
|
| 33 |
*/
|
| 34 |
|
| 28 |
* @author Yani Iliev <yani@iliev.me>
|
| 29 |
* @copyright 2014 Yani Iliev
|
| 30 |
* @license https://raw.github.com/yani-/zip-factory/master/LICENSE The MIT License (MIT)
|
| 31 |
+
* @version GIT: 1.2.0
|
| 32 |
* @link https://github.com/yani-/zip-factory/
|
| 33 |
*/
|
| 34 |
|
lib/view/export/index.php
CHANGED
|
@@ -149,7 +149,7 @@
|
|
| 149 |
</div>
|
| 150 |
|
| 151 |
<div class="ai1wm-field">
|
| 152 |
-
<?php if ( $
|
| 153 |
<div class="ai1wm-buttons">
|
| 154 |
<button type="submit" name="options[action]" value="export" class="ai1wm-button-green">
|
| 155 |
<i class="ai1wm-icon-arrow-down"></i>
|
|
@@ -162,10 +162,9 @@
|
|
| 162 |
printf(
|
| 163 |
_(
|
| 164 |
'Site could not be exported!<br />
|
| 165 |
-
Please make sure that
|
| 166 |
-
<a href="https://servmask.com/blog/setting-permissions-for-temp-folder-on-windows" target="_blank">See how to do it?</a>'
|
| 167 |
),
|
| 168 |
-
|
| 169 |
);
|
| 170 |
?>
|
| 171 |
</div>
|
| 149 |
</div>
|
| 150 |
|
| 151 |
<div class="ai1wm-field">
|
| 152 |
+
<?php if ( $is_accessible ): ?>
|
| 153 |
<div class="ai1wm-buttons">
|
| 154 |
<button type="submit" name="options[action]" value="export" class="ai1wm-button-green">
|
| 155 |
<i class="ai1wm-icon-arrow-down"></i>
|
| 162 |
printf(
|
| 163 |
_(
|
| 164 |
'Site could not be exported!<br />
|
| 165 |
+
Please make sure that storage directory <strong>%s</strong> has read and write permissions.'
|
|
|
|
| 166 |
),
|
| 167 |
+
AI1WM_STORAGE_PATH
|
| 168 |
);
|
| 169 |
?>
|
| 170 |
</div>
|
lib/view/import/index.php
CHANGED
|
@@ -59,7 +59,7 @@
|
|
| 59 |
<?php _e( 'When the file is uploaded successfully it will be automatically restored on the current WordPress instance.' ); ?>
|
| 60 |
</p>
|
| 61 |
|
| 62 |
-
<?php if ( $
|
| 63 |
<div class="ai1wm-upload-file-message ai1wm-message"></div>
|
| 64 |
|
| 65 |
<form action="" method="post" enctype="multipart/form-data">
|
|
@@ -89,10 +89,9 @@
|
|
| 89 |
printf(
|
| 90 |
_(
|
| 91 |
'Site could not be imported!<br />
|
| 92 |
-
Please make sure that
|
| 93 |
-
<a href="https://servmask.com/blog/setting-permissions-for-temp-folder-on-windows" target="_blank">See how to do it?</a>'
|
| 94 |
),
|
| 95 |
-
|
| 96 |
);
|
| 97 |
?>
|
| 98 |
</div>
|
| 59 |
<?php _e( 'When the file is uploaded successfully it will be automatically restored on the current WordPress instance.' ); ?>
|
| 60 |
</p>
|
| 61 |
|
| 62 |
+
<?php if ( $is_accessible ): ?>
|
| 63 |
<div class="ai1wm-upload-file-message ai1wm-message"></div>
|
| 64 |
|
| 65 |
<form action="" method="post" enctype="multipart/form-data">
|
| 89 |
printf(
|
| 90 |
_(
|
| 91 |
'Site could not be imported!<br />
|
| 92 |
+
Please make sure that storage directory <strong>%s</strong> has read and write permissions.'
|
|
|
|
| 93 |
),
|
| 94 |
+
AI1WM_STORAGE_PATH
|
| 95 |
);
|
| 96 |
?>
|
| 97 |
</div>
|
loader.php
CHANGED
|
@@ -54,6 +54,16 @@ require_once AI1WM_VENDOR_PATH .
|
|
| 54 |
DIRECTORY_SEPARATOR .
|
| 55 |
'ZipFactory.php';
|
| 56 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
require_once AI1WM_CONTROLLER_PATH .
|
| 58 |
DIRECTORY_SEPARATOR .
|
| 59 |
'class-ai1wm-main-controller.php';
|
|
@@ -101,3 +111,4 @@ require_once AI1WM_MODEL_PATH .
|
|
| 101 |
require_once AI1WM_MODEL_PATH .
|
| 102 |
DIRECTORY_SEPARATOR .
|
| 103 |
'class-ai1wm-report.php';
|
|
|
| 54 |
DIRECTORY_SEPARATOR .
|
| 55 |
'ZipFactory.php';
|
| 56 |
|
| 57 |
+
require_once AI1WM_VENDOR_PATH .
|
| 58 |
+
DIRECTORY_SEPARATOR .
|
| 59 |
+
'storage-factory' .
|
| 60 |
+
DIRECTORY_SEPARATOR .
|
| 61 |
+
'storage-factory' .
|
| 62 |
+
DIRECTORY_SEPARATOR .
|
| 63 |
+
'lib' .
|
| 64 |
+
DIRECTORY_SEPARATOR .
|
| 65 |
+
'StorageArea.php';
|
| 66 |
+
|
| 67 |
require_once AI1WM_CONTROLLER_PATH .
|
| 68 |
DIRECTORY_SEPARATOR .
|
| 69 |
'class-ai1wm-main-controller.php';
|
| 111 |
require_once AI1WM_MODEL_PATH .
|
| 112 |
DIRECTORY_SEPARATOR .
|
| 113 |
'class-ai1wm-report.php';
|
| 114 |
+
|
readme.txt
CHANGED
|
@@ -2,8 +2,8 @@
|
|
| 2 |
Contributors: yani.iliev, bangelov, mirkov
|
| 3 |
Tags: db migration, migration, wordpress migration, db backup, db restore, website backup, website restore, website migration, website deploy, wordpress deploy, db backup, database export, database serialization, database find replace
|
| 4 |
Requires at least: 3.3
|
| 5 |
-
Tested up to: 3.
|
| 6 |
-
Stable tag: 1.
|
| 7 |
License: GPLv2 or later
|
| 8 |
|
| 9 |
All-in-One WP Migration is the only tools that you will ever needs when you need to perform site migration of your WordPress blog.
|
|
@@ -40,7 +40,7 @@ All in One WP Plugin is the first plugin to offer true mobile experience on Word
|
|
| 40 |
* Your export files are archived using the fast ZipArchive pecl extension. If your server doesn't have it, we fall back to PclZIP which is included in WordPress
|
| 41 |
|
| 42 |
= True WordPress v3.3 Support =
|
| 43 |
-
* We tested every single WordPress version from `3.3` up to `3.
|
| 44 |
|
| 45 |
= Coming soon in a commercial version =
|
| 46 |
* A new, slicker design
|
|
@@ -70,6 +70,12 @@ All in One WP Plugin is the first plugin to offer true mobile experience on Word
|
|
| 70 |
3. Plugin Menu
|
| 71 |
|
| 72 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
= 1.6.0 =
|
| 74 |
* Added additional check for directory's permissions
|
| 75 |
* Added additional check for output buffering when exporting a file
|
| 2 |
Contributors: yani.iliev, bangelov, mirkov
|
| 3 |
Tags: db migration, migration, wordpress migration, db backup, db restore, website backup, website restore, website migration, website deploy, wordpress deploy, db backup, database export, database serialization, database find replace
|
| 4 |
Requires at least: 3.3
|
| 5 |
+
Tested up to: 3.9
|
| 6 |
+
Stable tag: 1.7.0
|
| 7 |
License: GPLv2 or later
|
| 8 |
|
| 9 |
All-in-One WP Migration is the only tools that you will ever needs when you need to perform site migration of your WordPress blog.
|
| 40 |
* Your export files are archived using the fast ZipArchive pecl extension. If your server doesn't have it, we fall back to PclZIP which is included in WordPress
|
| 41 |
|
| 42 |
= True WordPress v3.3 Support =
|
| 43 |
+
* We tested every single WordPress version from `3.3` up to `3.9`
|
| 44 |
|
| 45 |
= Coming soon in a commercial version =
|
| 46 |
* A new, slicker design
|
| 70 |
3. Plugin Menu
|
| 71 |
|
| 72 |
== Changelog ==
|
| 73 |
+
= 1.7.0 =
|
| 74 |
+
* Added storage layer to avoid permission issues with OS's directory used for temporary storage
|
| 75 |
+
* Added additional checks to verify the consistency of the imported archive
|
| 76 |
+
* Fixed a bug that caused the database to be exported without data
|
| 77 |
+
* Removed unused variables from package.json file
|
| 78 |
+
|
| 79 |
= 1.6.0 =
|
| 80 |
* Added additional check for directory's permissions
|
| 81 |
* Added additional check for output buffering when exporting a file
|
