All-in-One WP Migration - Version 1.7.2

Version Description

  • Added support for automatically switching database adapters for better performance and optimization
  • Fixed a bug when using host:port syntax with MySQL PDO
  • Fixed a bug when using find and replace functionality
Download this release

Release Info

Developer bangelov
Plugin Icon 128x128 All-in-One WP Migration
Version 1.7.2
Comparing to
See all releases

Code changes from version 1.7.1 to 1.7.2

Files changed (25) hide show
  1. all-in-one-wp-migration.php +1 -1
  2. constants.php +1 -1
  3. lib/model/class-ai1wm-export.php +32 -27
  4. lib/model/class-ai1wm-file.php +7 -5
  5. lib/model/class-ai1wm-import.php +39 -185
  6. lib/vendor/mysqldump-factory/mysqldump-factory/README.md +1 -1
  7. lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpFactory.php +2 -2
  8. lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpInterface.php +2 -2
  9. lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpPDO.php +53 -4
  10. lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpSQL.php +2 -2
  11. lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlFileAdapter.php +2 -2
  12. lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlQueryAdapter.php +2 -2
  13. lib/vendor/storage-factory/storage-factory/.editorconfig +0 -26
  14. lib/vendor/storage-factory/storage-factory/.travil.yml +0 -10
  15. lib/vendor/storage-factory/storage-factory/composer.json +0 -25
  16. lib/vendor/storage-factory/storage-factory/lib/StorageAbstract.php +3 -3
  17. lib/vendor/storage-factory/storage-factory/lib/StorageArea.php +3 -2
  18. lib/vendor/storage-factory/storage-factory/lib/StorageDirectory.php +101 -11
  19. lib/vendor/storage-factory/storage-factory/lib/StorageFile.php +2 -2
  20. lib/vendor/storage-factory/storage-factory/phpunit.xml +0 -29
  21. lib/vendor/storage-factory/storage-factory/test/bootstrap.php +0 -40
  22. lib/vendor/storage-factory/storage-factory/test/test-storage-factory.php +0 -67
  23. lib/view/assets/css/import.min.css +1 -1
  24. lib/view/assets/javascript/import.min.js +1 -1
  25. readme.txt +6 -1
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.7.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.2
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.7.1' );
30
 
31
  // ===============
32
  // = Plugin Name =
26
  // ==================
27
  // = Plugin VERSION =
28
  // ==================
29
+ define( 'AI1WM_VERSION', '1.7.2' );
30
 
31
  // ===============
32
  // = Plugin Name =
lib/model/class-ai1wm-export.php CHANGED
@@ -33,22 +33,6 @@ class Ai1wm_Export
33
  const EXPORT_THEMES_NAME = 'themes';
34
  const EXPORT_LAST_OPTIONS = 'ai1wm_export_last_options';
35
 
36
- protected $connection = null;
37
-
38
- public function __construct() {
39
- $this->connection = MysqlDumpFactory::makeMysqlDump(
40
- DB_HOST,
41
- DB_USER,
42
- DB_PASSWORD,
43
- DB_NAME,
44
- (
45
- class_exists(
46
- 'PDO'
47
- ) && in_array( 'mysql', PDO::getAvailableDrivers() )
48
- )
49
- );
50
- }
51
-
52
  /**
53
  * Export archive file (database, media, package.json)
54
  *
@@ -70,6 +54,9 @@ class Ai1wm_Export
70
  // Export last options
71
  update_option( self::EXPORT_LAST_OPTIONS, $options );
72
 
 
 
 
73
  // Create output file
74
  $output_file = $storage->makeFile();
75
 
@@ -180,18 +167,36 @@ class Ai1wm_Export
180
  $clauses[ $wpdb->usermeta ] = ' WHERE user_id = 1 ';
181
  }
182
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  // Set dump options
184
- $this->connection
185
- ->setFileName( $output_file->getAs( 'string' ) )
186
- ->setIncludeTables( $includeTables )
187
- ->setExcludeTables( $excludeTables )
188
- ->setNoTableData( $noTableData )
189
- ->setOldTablePrefix( $wpdb->prefix )
190
- ->setNewTablePrefix( AI1WM_TABLE_PREFIX )
191
- ->setQueryClauses( $clauses );
192
 
193
  // Make dump
194
- $this->connection->dump();
195
 
196
  // Replace Old/New Values
197
  if ( isset( $options['replace'] ) && ( $replace = $options['replace'] ) ) {
@@ -317,8 +322,8 @@ class Ai1wm_Export
317
 
318
  $plugins = array();
319
  foreach ( get_plugins() as $key => $plugin ) {
320
- $directory = current( explode( DIRECTORY_SEPARATOR, $key ) );
321
- if ( ! in_array( $directory, $exclude ) ) {
322
  $plugins[] = $directory;
323
  }
324
  }
33
  const EXPORT_THEMES_NAME = 'themes';
34
  const EXPORT_LAST_OPTIONS = 'ai1wm_export_last_options';
35
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  /**
37
  * Export archive file (database, media, package.json)
38
  *
54
  // Export last options
55
  update_option( self::EXPORT_LAST_OPTIONS, $options );
56
 
57
+ // Flush storage directory
58
+ StorageDirectory::flush( AI1WM_STORAGE_PATH, array( '.gitignore' ) );
59
+
60
  // Create output file
61
  $output_file = $storage->makeFile();
62
 
167
  $clauses[ $wpdb->usermeta ] = ' WHERE user_id = 1 ';
168
  }
169
 
170
+ // Make connection
171
+ try {
172
+ $db = MysqlDumpFactory::makeMysqlDump(
173
+ DB_HOST,
174
+ DB_USER,
175
+ DB_PASSWORD,
176
+ DB_NAME,
177
+ (
178
+ class_exists(
179
+ 'PDO'
180
+ ) && in_array( 'mysql', PDO::getAvailableDrivers() )
181
+ )
182
+ );
183
+ $db->getConnection();
184
+ } catch ( Exception $e ) {
185
+ // Use "old" mysql adapter
186
+ $db = MysqlDumpFactory::makeMysqlDump( DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, false );
187
+ }
188
+
189
  // Set dump options
190
+ $db->setFileName( $output_file->getAs( 'string' ) )
191
+ ->setIncludeTables( $includeTables )
192
+ ->setExcludeTables( $excludeTables )
193
+ ->setNoTableData( $noTableData )
194
+ ->setOldTablePrefix( $wpdb->prefix )
195
+ ->setNewTablePrefix( AI1WM_TABLE_PREFIX )
196
+ ->setQueryClauses( $clauses );
 
197
 
198
  // Make dump
199
+ $db->dump();
200
 
201
  // Replace Old/New Values
202
  if ( isset( $options['replace'] ) && ( $replace = $options['replace'] ) ) {
322
 
323
  $plugins = array();
324
  foreach ( get_plugins() as $key => $plugin ) {
325
+ $directory = dirname( $key );
326
+ if ( $directory !== '.' && ! in_array( $directory, $exclude ) ) {
327
  $plugins[] = $directory;
328
  }
329
  }
lib/model/class-ai1wm-file.php CHANGED
@@ -41,11 +41,11 @@ class Ai1wm_File
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 ) ) ) {
@@ -76,10 +76,11 @@ class Ai1wm_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 );
@@ -90,6 +91,7 @@ class Ai1wm_File
90
  );
91
  }
92
  }
 
93
  return $new_file;
94
  }
95
 
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 ) ) ) {
76
  rewind( $current_file );
77
 
78
  while ( ! feof( $current_file ) ) {
79
+ $line = stream_get_line( $current_file, 1000000, "\n" );
80
+
81
  // Append new line at the end of the line
82
  if ( strlen( $line ) < 1000000 && ! feof( $current_file ) ) {
83
+ $line .= "\n";
84
  }
85
 
86
  $replaced = $this->_preg_replace( $line, $pattern );
91
  );
92
  }
93
  }
94
+
95
  return $new_file;
96
  }
97
 
lib/model/class-ai1wm-import.php CHANGED
@@ -30,20 +30,6 @@ class Ai1wm_Import
30
  const MAX_CHUNK_RETRIES = 10;
31
  const MAINTENANCE_MODE = 'ai1wm_maintenance_mode';
32
 
33
- public function __construct() {
34
- $this->connection = MysqlDumpFactory::makeMysqlDump(
35
- DB_HOST,
36
- DB_USER,
37
- DB_PASSWORD,
38
- DB_NAME,
39
- (
40
- class_exists(
41
- 'PDO'
42
- ) && in_array( 'mysql', PDO::getAvailableDrivers() )
43
- )
44
- );
45
- }
46
-
47
  /**
48
  * Import archive file (database, media, package.json)
49
  *
@@ -59,6 +45,11 @@ class Ai1wm_Import
59
  try {
60
  $storage = new StorageArea;
61
 
 
 
 
 
 
62
  // Partial file path
63
  $upload_file = $storage->makeFile( $options['name'] )->getAs( 'string' );
64
 
@@ -146,13 +137,31 @@ class Ai1wm_Import
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
@@ -160,13 +169,13 @@ class Ai1wm_Import
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
@@ -174,13 +183,13 @@ class Ai1wm_Import
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
@@ -188,55 +197,13 @@ class Ai1wm_Import
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
@@ -267,119 +234,6 @@ class Ai1wm_Import
267
  return update_option( self::MAINTENANCE_MODE, $enabled );
268
  }
269
 
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() );
317
- } else {
318
- copy( $item, $to . $iterator->getSubPathName() );
319
- }
320
- }
321
- }
322
-
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() );
367
- } else {
368
- unlink( $dir . $iterator->getSubPathName() );
369
- }
370
- }
371
- }
372
-
373
- /**
374
- * Test webside whether everything is installed properly (Not implemented yet)
375
- *
376
- * @param string $url Current URL address
377
- * @return boolean Pass or not pass website tests
378
- */
379
- public function test_website( $url ) {
380
- return true;
381
- }
382
-
383
  /**
384
  * Verify whether directory contains necessary archive files
385
  *
30
  const MAX_CHUNK_RETRIES = 10;
31
  const MAINTENANCE_MODE = 'ai1wm_maintenance_mode';
32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  /**
34
  * Import archive file (database, media, package.json)
35
  *
45
  try {
46
  $storage = new StorageArea;
47
 
48
+ // Flush storage directory
49
+ if ( $options['chunk'] === 0 ) {
50
+ StorageDirectory::flush( AI1WM_STORAGE_PATH, array( '.gitignore' ) );
51
+ }
52
+
53
  // Partial file path
54
  $upload_file = $storage->makeFile( $options['name'] )->getAs( 'string' );
55
 
137
  $model = new Ai1wm_Export;
138
  $database_file = $model->prepare_database( $storage );
139
 
140
+ try {
141
+ $db = MysqlDumpFactory::makeMysqlDump(
142
+ DB_HOST,
143
+ DB_USER,
144
+ DB_PASSWORD,
145
+ DB_NAME,
146
+ (
147
+ class_exists(
148
+ 'PDO'
149
+ ) && in_array( 'mysql', PDO::getAvailableDrivers() )
150
+ )
151
+ );
152
+ $db->getConnection();
153
+ } catch (Exception $e) {
154
+ // Use "old" mysql adapter
155
+ $db = MysqlDumpFactory::makeMysqlDump( DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, false );
156
+ }
157
+
158
  // Truncate database
159
+ $db->truncateDatabase();
160
 
161
  // Import database
162
+ $db->setOldTablePrefix( AI1WM_TABLE_PREFIX )
163
+ ->setNewTablePrefix( $wpdb->prefix )
164
+ ->import( $extract_to . Ai1wm_Export::EXPORT_DATABASE_NAME );
165
  }
166
 
167
  // Media import
169
  // Backup media files
170
  $backup_media_to = $storage->makeDirectory()->getAs( 'string' );
171
 
172
+ StorageDirectory::copy( $upload_basedir, $backup_media_to );
173
 
174
+ // Flush media files
175
+ StorageDirectory::flush( $upload_basedir );
176
 
177
  // Import media files
178
+ StorageDirectory::copy( $extract_to . Ai1wm_Export::EXPORT_MEDIA_NAME, $upload_basedir );
179
  }
180
 
181
  // Themes import
183
  // Backup themes files
184
  $backup_themes_to = $storage->makeDirectory()->getAs( 'string' );
185
 
186
+ StorageDirectory::copy( $themes_basedir, $backup_themes_to );
187
 
188
+ // Flush themes files
189
+ StorageDirectory::flush( $themes_basedir );
190
 
191
  // Import themes files
192
+ StorageDirectory::copy( $extract_to . Ai1wm_Export::EXPORT_THEMES_NAME, $themes_basedir );
193
  }
194
 
195
  // Plugins import
197
  // Backup plugin files
198
  $backup_plugins_to = $storage->makeDirectory()->getAs( 'string' );
199
 
200
+ StorageDirectory::copy( WP_PLUGIN_DIR, $backup_plugins_to, array( AI1WM_PLUGIN_NAME ) );
201
 
202
+ // Flush plugin files
203
+ StorageDirectory::flush( WP_PLUGIN_DIR, array( AI1WM_PLUGIN_NAME ) );
204
 
205
  // Import plugin files
206
+ StorageDirectory::copy( $extract_to . Ai1wm_Export::EXPORT_PLUGINS_NAME, WP_PLUGIN_DIR );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  }
208
 
209
  // Disable maintenance mode
234
  return update_option( self::MAINTENANCE_MODE, $enabled );
235
  }
236
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
  /**
238
  * Verify whether directory contains necessary archive files
239
  *
lib/vendor/mysqldump-factory/mysqldump-factory/README.md CHANGED
@@ -12,7 +12,7 @@ PHP v5.2 and up. Tested on PHP v5.2.17, v5.3, v5.4, v5.5
12
  ### Usage
13
  ```php
14
  require_once 'lib/MysqlDumpFactory.php';
15
- $mc = MysqlDumpFactory::makeMysqlDump('dbhost', 'dbuser', 'dbpass', 'dbname',class_exists('PDO'));
16
  ```
17
 
18
  ### Tests
12
  ### Usage
13
  ```php
14
  require_once 'lib/MysqlDumpFactory.php';
15
+ $mc = MysqlDumpFactory::makeMysqlDump('dbhost', 'dbuser', 'dbpass', 'dbname', class_exists('PDO'));
16
  ```
17
 
18
  ### Tests
lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpFactory.php CHANGED
@@ -29,7 +29,7 @@
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
- * @version GIT: 1.0.10
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
@@ -42,7 +42,7 @@
42
  * @author Bobby Angelov <bobby@servmask.com>
43
  * @copyright 2014 Yani Iliev, Bobby Angelov
44
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
45
- * @version GIT: 1.0.10
46
  * @link https://github.com/yani-/mysqldump-factory/
47
  */
48
  class MysqlDumpFactory
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
+ * @version GIT: 1.1.0
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
42
  * @author Bobby Angelov <bobby@servmask.com>
43
  * @copyright 2014 Yani Iliev, Bobby Angelov
44
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
45
+ * @version GIT: 1.1.0
46
  * @link https://github.com/yani-/mysqldump-factory/
47
  */
48
  class MysqlDumpFactory
lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpInterface.php CHANGED
@@ -29,7 +29,7 @@
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
- * @version GIT: 1.0.10
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
@@ -42,7 +42,7 @@
42
  * @author Bobby Angelov <bobby@servmask.com>
43
  * @copyright 2014 Yani Iliev, Bobby Angelov
44
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
45
- * @version GIT: 1.0.10
46
  * @link https://github.com/yani-/mysqldump-factory/
47
  */
48
  interface MysqlDumpInterface
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
+ * @version GIT: 1.1.0
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
42
  * @author Bobby Angelov <bobby@servmask.com>
43
  * @copyright 2014 Yani Iliev, Bobby Angelov
44
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
45
+ * @version GIT: 1.1.0
46
  * @link https://github.com/yani-/mysqldump-factory/
47
  */
48
  interface MysqlDumpInterface
lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpPDO.php CHANGED
@@ -29,7 +29,7 @@
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
- * @version GIT: 1.0.10
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
@@ -46,13 +46,17 @@ require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'MysqlFileAdapter.php';
46
  * @author Bobby Angelov <bobby@servmask.com>
47
  * @copyright 2014 Yani Iliev, Bobby Angelov
48
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
49
- * @version GIT: 1.0.10
50
  * @link https://github.com/yani-/mysqldump-factory/
51
  */
52
  class MysqlDumpPDO implements MysqlDumpInterface
53
  {
54
  protected $hostname = null;
55
 
 
 
 
 
56
  protected $username = null;
57
 
58
  protected $password = null;
@@ -94,8 +98,12 @@ class MysqlDumpPDO implements MysqlDumpInterface
94
  */
95
  public function __construct($hostname = 'localhost', $username = '', $password = '', $database = '')
96
  {
 
 
97
  // Set MySQL credentials
98
- $this->hostname = $hostname;
 
 
99
  $this->username = $username;
100
  $this->password = $password;
101
  $this->database = $database;
@@ -454,9 +462,18 @@ class MysqlDumpPDO implements MysqlDumpInterface
454
  // Use Socket or TCP
455
  $hostname = ($useSocket ? $this->hostname : gethostbyname($this->hostname));
456
 
 
 
 
 
 
 
 
 
 
457
  // Make connection
458
  $connection = new PDO(
459
- sprintf('mysql:host=%s;dbname=%s', $hostname, $this->database),
460
  $this->username,
461
  $this->password,
462
  array(
@@ -609,4 +626,36 @@ class MysqlDumpPDO implements MysqlDumpInterface
609
  return preg_replace('/' . $pattern . '/i', $this->getNewTablePrefix(), $tableName);
610
  }
611
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
612
  }
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
+ * @version GIT: 1.1.0
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
46
  * @author Bobby Angelov <bobby@servmask.com>
47
  * @copyright 2014 Yani Iliev, Bobby Angelov
48
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
49
+ * @version GIT: 1.1.0
50
  * @link https://github.com/yani-/mysqldump-factory/
51
  */
52
  class MysqlDumpPDO implements MysqlDumpInterface
53
  {
54
  protected $hostname = null;
55
 
56
+ protected $port = null;
57
+
58
+ protected $socket = null;
59
+
60
  protected $username = null;
61
 
62
  protected $password = null;
98
  */
99
  public function __construct($hostname = 'localhost', $username = '', $password = '', $database = '')
100
  {
101
+ $dsn = $this->parseDSN($hostname);
102
+
103
  // Set MySQL credentials
104
+ $this->hostname = $dsn['host'];
105
+ $this->port = $dsn['port'];
106
+ $this->socket = $dsn['socket'];
107
  $this->username = $username;
108
  $this->password = $password;
109
  $this->database = $database;
462
  // Use Socket or TCP
463
  $hostname = ($useSocket ? $this->hostname : gethostbyname($this->hostname));
464
 
465
+ // Use default or custom port
466
+ if ($this->port === 3306 || empty($this->port)) {
467
+ $dsn = sprintf('mysql:host=%s;dbname=%s', $hostname, $this->database);
468
+ } else if (!empty($this->socket)) {
469
+ $dsn = sprintf('mysql:host=%s;unix_socket=%s;dbname=%s', $hostname, $this->socket, $this->database);
470
+ } else {
471
+ $dsn = sprintf('mysql:host=%s;port=%s;dbname=%s', $hostname, $this->port, $this->database);
472
+ }
473
+
474
  // Make connection
475
  $connection = new PDO(
476
+ $dsn,
477
  $this->username,
478
  $this->password,
479
  array(
626
  return preg_replace('/' . $pattern . '/i', $this->getNewTablePrefix(), $tableName);
627
  }
628
  }
629
+
630
+ /**
631
+ * Parse data source name
632
+ *
633
+ * @param string $input Data source name
634
+ * @return array List of host, port and socket
635
+ */
636
+ protected function parseDSN($input) {
637
+ $data = explode(':', $input);
638
+
639
+ // Set hostname
640
+ $host = 'localhost';
641
+ if (!empty($data[0])) {
642
+ $host = $data[0];
643
+ }
644
+
645
+ // Set port and socket
646
+ $port = $socket = null;
647
+ if (!empty($data[1])) {
648
+ if (is_numeric($data[1])) {
649
+ $port = $data[1];
650
+ } else {
651
+ $socket = $data[1];
652
+ }
653
+ }
654
+
655
+ return array(
656
+ 'host' => $host,
657
+ 'port' => $port,
658
+ 'socket' => $socket,
659
+ );
660
+ }
661
  }
lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlDumpSQL.php CHANGED
@@ -29,7 +29,7 @@
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
- * @version GIT: 1.0.10
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
@@ -46,7 +46,7 @@ require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'MysqlFileAdapter.php';
46
  * @author Bobby Angelov <bobby@servmask.com>
47
  * @copyright 2014 Yani Iliev, Bobby Angelov
48
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
49
- * @version GIT: 1.0.10
50
  * @link https://github.com/yani-/mysqldump-factory/
51
  */
52
  class MysqlDumpSQL implements MysqlDumpInterface
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
+ * @version GIT: 1.1.0
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
46
  * @author Bobby Angelov <bobby@servmask.com>
47
  * @copyright 2014 Yani Iliev, Bobby Angelov
48
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
49
+ * @version GIT: 1.1.0
50
  * @link https://github.com/yani-/mysqldump-factory/
51
  */
52
  class MysqlDumpSQL implements MysqlDumpInterface
lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlFileAdapter.php CHANGED
@@ -29,7 +29,7 @@
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
- * @version GIT: 1.0.10
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
@@ -42,7 +42,7 @@
42
  * @author Bobby Angelov <bobby@servmask.com>
43
  * @copyright 2014 Yani Iliev, Bobby Angelov
44
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
45
- * @version GIT: 1.0.10
46
  * @link https://github.com/yani-/mysqldump-factory/
47
  */
48
  class MysqlFileAdapter
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
+ * @version GIT: 1.1.0
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
42
  * @author Bobby Angelov <bobby@servmask.com>
43
  * @copyright 2014 Yani Iliev, Bobby Angelov
44
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
45
+ * @version GIT: 1.1.0
46
  * @link https://github.com/yani-/mysqldump-factory/
47
  */
48
  class MysqlFileAdapter
lib/vendor/mysqldump-factory/mysqldump-factory/lib/MysqlQueryAdapter.php CHANGED
@@ -29,7 +29,7 @@
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
- * @version GIT: 1.0.10
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
@@ -42,7 +42,7 @@
42
  * @author Bobby Angelov <bobby@servmask.com>
43
  * @copyright 2014 Yani Iliev, Bobby Angelov
44
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
45
- * @version GIT: 1.0.10
46
  * @link https://github.com/yani-/mysqldump-factory/
47
  */
48
  class MysqlQueryAdapter
29
  * @author Bobby Angelov <bobby@servmask.com>
30
  * @copyright 2014 Yani Iliev, Bobby Angelov
31
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
32
+ * @version GIT: 1.1.0
33
  * @link https://github.com/yani-/mysqldump-factory/
34
  */
35
 
42
  * @author Bobby Angelov <bobby@servmask.com>
43
  * @copyright 2014 Yani Iliev, Bobby Angelov
44
  * @license https://raw.github.com/yani-/mysqldump-factory/master/LICENSE The MIT License (MIT)
45
+ * @version GIT: 1.1.0
46
  * @link https://github.com/yani-/mysqldump-factory/
47
  */
48
  class MysqlQueryAdapter
lib/vendor/storage-factory/storage-factory/.editorconfig DELETED
@@ -1,26 +0,0 @@
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 DELETED
@@ -1,10 +0,0 @@
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/composer.json DELETED
@@ -1,25 +0,0 @@
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 CHANGED
@@ -29,7 +29,7 @@
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
 
@@ -42,7 +42,7 @@
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
@@ -69,7 +69,7 @@ abstract class StorageAbstract
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 {
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.9.0
33
  * @link https://github.com/borislav-angelov/storage-factory/
34
  */
35
 
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.9.0
46
  * @link https://github.com/borislav-angelov/storage-factory/
47
  */
48
  abstract class StorageAbstract
69
  */
70
  public function getRootPath() {
71
  if (defined('AI1WM_STORAGE_PATH') && self::isAccessible(AI1WM_STORAGE_PATH)) {
72
+ return realpath(AI1WM_STORAGE_PATH);
73
  } else if (self::isAccessible(sys_get_temp_dir())) {
74
  return sys_get_temp_dir();
75
  } else {
lib/vendor/storage-factory/storage-factory/lib/StorageArea.php CHANGED
@@ -29,7 +29,7 @@
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
 
@@ -45,7 +45,7 @@ require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'StorageDirectory.php';
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
@@ -79,6 +79,7 @@ class StorageArea
79
  /**
80
  * Remove all files and directories in the current storage
81
  *
 
82
  * @return void
83
  */
84
  public function flush() {
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.9.0
33
  * @link https://github.com/borislav-angelov/storage-factory/
34
  */
35
 
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.9.0
49
  * @link https://github.com/borislav-angelov/storage-factory/
50
  */
51
  class StorageArea
79
  /**
80
  * Remove all files and directories in the current storage
81
  *
82
+ * @param string $path Remove all files and directories from given path
83
  * @return void
84
  */
85
  public function flush() {
lib/vendor/storage-factory/storage-factory/lib/StorageDirectory.php CHANGED
@@ -29,7 +29,7 @@
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
 
@@ -44,7 +44,7 @@ require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'StorageAbstract.php';
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
@@ -81,29 +81,119 @@ class StorageDirectory extends StorageAbstract
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
  }
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.9.0
33
  * @link https://github.com/borislav-angelov/storage-factory/
34
  */
35
 
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.9.0
48
  * @link https://github.com/borislav-angelov/storage-factory/
49
  */
50
  class StorageDirectory extends StorageAbstract
81
  }
82
  }
83
 
84
+
85
  /**
86
+ * Copy a file or directory from source to destination path
87
  *
88
+ * @param string $from Copy files and directories FROM
89
+ * @param string $to Copy files and directories TO
90
+ * @param array $exclude List of directories to exclude
91
  * @return void
92
  */
93
+ public static function copy($from, $to, $exclude = array()) {
94
+ // Use Recursive functions
95
+ $iterator = new RecursiveIteratorIterator(
96
+ new RecursiveDirectoryIterator($from),
97
+ RecursiveIteratorIterator::SELF_FIRST
98
+ );
99
+
100
+ // Prepare filter pattern
101
+ $filter_pattern = null;
102
+ if (is_array($exclude)) {
103
+ $filters = array();
104
+ foreach ($exclude as $filter) {
105
+ $filters[] = sprintf(
106
+ '(%s(%s.*)?)',
107
+ preg_quote($filter, '/'),
108
+ preg_quote(DIRECTORY_SEPARATOR, '/')
109
+ );
110
+ }
111
+
112
+ $filter_pattern = implode('|', $filters);
113
+ }
114
+
115
+ foreach ($iterator as $item) {
116
+ // Skip dots
117
+ if ($iterator->isDot()) {
118
+ continue;
119
+ }
120
+
121
+ // Validate filter pattern
122
+ if ($filter_pattern) {
123
+ if (preg_match('/^' . $filter_pattern . '$/', $iterator->getSubPathName())) {
124
+ continue;
125
+ }
126
+ }
127
+
128
+ if ($item->isDir()) {
129
+ mkdir($to . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
130
+ } else {
131
+ copy($item, $to . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
132
+ }
133
+ }
134
+ }
135
+
136
+ /**
137
+ * Delete a file or directory from a given path
138
+ *
139
+ * @param string $path Absolute path
140
+ * @param array $exclude Exclude files and directories
141
+ * @return boolean
142
+ */
143
+ public static function flush($path, $exclude = array()) {
144
+ // Use Recursive functions
145
  $iterator = new RecursiveIteratorIterator(
146
+ new RecursiveDirectoryIterator($path),
147
  RecursiveIteratorIterator::CHILD_FIRST
148
  );
149
 
150
+ // Prepare filter pattern
151
+ $filter_pattern = null;
152
+ if (is_array($exclude)) {
153
+ $filters = array();
154
+ foreach ($exclude as $filter) {
155
+ $filters[] = sprintf(
156
+ '(%s(%s.*)?)',
157
+ preg_quote($filter, '/'),
158
+ preg_quote(DIRECTORY_SEPARATOR, '/')
159
+ );
160
+ }
161
+
162
+ $filter_pattern = implode('|', $filters);
163
+ }
164
+
165
+ foreach ($iterator as $item) {
166
  // Skip dots
167
+ if ($iterator->isDot()) {
168
+ continue;
169
+ }
170
 
171
+ // Validate filter pattern
172
+ if ($filter_pattern) {
173
+ if (preg_match('/^' . $filter_pattern . '$/', $iterator->getSubPathName())) {
174
+ continue;
175
+ }
176
+ }
177
+
178
+ if ($item->isDir()) {
179
+ rmdir($path . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
180
  } else {
181
+ unlink($path . DIRECTORY_SEPARATOR . $iterator->getSubPathName());
182
  }
183
  }
184
+ }
185
+
186
+ /**
187
+ * Delete a file or directory
188
+ *
189
+ * @return void
190
+ */
191
+ public function delete() {
192
+ // Remove child files and directories
193
+ self::flush($this->directory);
194
 
195
+ // Remove parent directory
196
+ rmdir($this->directory);
197
  }
198
 
199
  }
lib/vendor/storage-factory/storage-factory/lib/StorageFile.php CHANGED
@@ -29,7 +29,7 @@
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
 
@@ -44,7 +44,7 @@ require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'StorageAbstract.php';
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
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.9.0
33
  * @link https://github.com/borislav-angelov/storage-factory/
34
  */
35
 
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.9.0
48
  * @link https://github.com/borislav-angelov/storage-factory/
49
  */
50
  class StorageFile extends StorageAbstract
lib/vendor/storage-factory/storage-factory/phpunit.xml DELETED
@@ -1,29 +0,0 @@
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 DELETED
@@ -1,40 +0,0 @@
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 DELETED
@@ -1,67 +0,0 @@
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/view/assets/css/import.min.css CHANGED
@@ -1 +1 @@
1
- .ai1wm-divider{margin:1rem 0rem;border-top:1px solid rgba(0,0,0,0.1);border-bottom:1px solid rgba(255,255,255,0.8);line-height:1;height:0em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:absolute;border:none;height:0em;margin:0em;background-color:transparent;font-size:0.875rem;font-weight:bold;text-align:center;text-transform:uppercase;color:rgba(0,0,0,0.8)}.ai1wm-divider{position:relative;top:0%;left:0%;margin:1rem 2.5rem;height:auto;padding:0em;line-height:1}.ai1wm-divider:before,.ai1wm-divider:after{position:absolute;top:50%;content:" ";z-index:3;width:50%;top:50%;height:0%;border-top:1px solid rgba(0,0,0,0.1);border-bottom:1px solid rgba(255,255,255,0.8)}.ai1wm-divider:before{left:0%;margin-left:-2.5rem}.ai1wm-divider:after{left:auto;right:0%;margin-right:-2.5rem}@font-face{font-family:'servmask';src:url("../font/servmask.eot");src:url("../font/servmask.eot?#iefix") format("embedded-opentype"),url("../font/servmask.woff") format("woff"),url("../font/servmask.ttf") format("truetype"),url("../font/servmask.svg#servmask") format("svg");font-weight:normal;font-style:normal}[class^="ai1wm-icon-"],[class*=" ai1wm-icon-"]{font-family:'servmask';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai1wm-icon-plus:before{content:"\e600"}.ai1wm-icon-plus2:before{content:"\e601"}.ai1wm-icon-plus3:before{content:"\e602"}.ai1wm-icon-history:before{content:"\e603"}.ai1wm-icon-arrow-down:before{content:"\e604"}.ai1wm-icon-arrow-right:before{content:"\e605"}.ai1wm-icon-arrow-down2:before{content:"\e606"}.ai1wm-icon-plus:before{content:"\e607"}.ai1wm-icon-paperplane:before{content:"\e608"}.ai1wm-icon-help:before{content:"\e609"}.ai1wm-icon-file:before{content:"\e60a"}.ai1wm-icon-twitter:before{content:"\e60b"}.ai1wm-icon-facebook:before{content:"\e60c"}.ai1wm-icon-exclamation:before{content:"\e619"}@media (min-width: 855px){.ai1wm-row{margin-right:399px}.ai1wm-row:before,.ai1wm-row:after{content:" ";display:table}.ai1wm-row:after{clear:both}.ai1wm-left{float:left;width:100%}.ai1wm-right{float:right;width:377px;margin-right:-399px}.ai1wm-right .ai1wm-sidebar{width:100%}.ai1wm-right .ai1wm-segment{width:333px;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 white;color:#333333;background-color:#f9f9f9;padding:22px;text-decoration:none;text-shadow:0 1px 0 white;background-clip:padding-box}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:normal;font-size:0.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:0.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:0.7rem;line-height:1rem;margin:4px 0 8px 0}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-holder{position:relative;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 white;padding:22px;background:#f9f9f9}.ai1wm-holder h1{margin-top:0 !important}.ai1wm-segment>.ai1wm-divider:first-child{margin-top:0 !important}@media (max-width: 854px){.ai1wm-container{margin-left:10px !important}.ai1wm-row{margin-right:0px !important}.ai1wm-right{float:left !important;width:100% !important;margin-top:18px;margin-right:0 !important}.ai1wm-right .ai1wm-sidebar{width:auto !important;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 white;padding:22px;background:#f9f9f9}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:normal;font-size:0.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:0.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:0.7rem;line-height:1rem;margin:4px 0 8px 0;border-radius:3px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-container{margin:20px 20px 0px 2px}.ai1wm-container:before,.ai1wm-container:after{content:" ";display:table}.ai1wm-container:after{clear:both}.ai1wm-replace-row{width:100%;box-shadow:outset 0 1px 0 0 white;border-radius:3px;color:#333333;font-size:11px;font-weight:bold;background-color:#f9f9f9;text-decoration:none;text-shadow:0 1px 0 white;background-clip:padding-box;margin-bottom:10px}.ai1wm-replace-row .ai1wm-field-inline{float:left;width:100%}.ai1wm-replace-row .ai1wm-field-inline input{width:100%;font-weight:normal;font-size:0.8rem;padding:0 10px;height:2.3rem;line-height:2.3rem;margin-bottom:4px}.ai1wm-field{margin-bottom:4px}.ai1wm-field input[type="text"],.ai1wm-field textarea{width:100%;font-weight:normal}.ai1wm-message{-moz-box-sizing:border-box;background-color:#EFEFEF;border-radius:4px;color:rgba(0,0,0,0.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative;transition:opacity 0.1s ease 0s, color 0.1s ease 0s, background 0.1s ease 0s, box-shadow 0.1s ease 0s}.ai1wm-message.ai1wm-green-message{background-color:#F2F8F0;color:#119000}.ai1wm-message.ai1wm-blue-message{background-color:#E6F4F9;color:#4D8796}.ai1wm-message.ai1wm-red-message{background-color:#F1D7D7;color:#A95252}.ai1wm-message p{margin:4px 0}.ai1wm-button-gray{border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;color:#333;display:inline-block;font-size:11px;font-weight:bold;background-color:#fafafa;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa),color-stop(100%, #dedede));background-image:-webkit-linear-gradient(#fafafa,#dedede);background-image:linear-gradient(#fafafa,#dedede);padding:7px 18px;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box}.ai1wm-button-gray:hover:not(:disabled){box-shadow:inset 0 1px 0 0 #fff;cursor:pointer;background-color:#ededed;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ededed),color-stop(100%, #d6d6d6));background-image:-webkit-linear-gradient(#ededed,#d6d6d6);background-image:linear-gradient(#ededed,#d6d6d6)}.ai1wm-button-gray:active:not(:disabled){border:1px solid #d6d6d6;box-shadow:inset 0 0 8px 4px #cfcfcf,inset 0 0 8px 4px #cfcfcf,0 1px 1px 0 #eee}.ai1wm-button-gray:disabled{opacity:0.5;cursor:not-allowed}.ai1wm-button-green{border:1px solid #4d8b2c;border-radius:3px;box-shadow:inset 0 1px 0 0 #9cc587;color:#fff;display:inline-block;font-size:11px;font-weight:bold;background-color:#6eb649;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #6eb649),color-stop(100%, #539730));background-image:-webkit-linear-gradient(#6eb649,#539730);background-image:linear-gradient(#6eb649,#539730);padding:7px 18px;text-decoration:none;text-shadow:0 1px 0 #428122;background-clip:padding-box}.ai1wm-button-green:hover:not(:disabled){box-shadow:inset 0 1px 0 0 #7fb563;cursor:pointer;background-color:#649f46;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #649f46),color-stop(100%, #4d8a2d));background-image:-webkit-linear-gradient(#649f46,#4d8a2d);background-image:linear-gradient(#649f46,#4d8a2d)}.ai1wm-button-green:active:not(:disabled){border:1px solid #4d8b2c;box-shadow:inset 0 0 8px 4px #477e2a,inset 0 0 8px 4px #477e2a,0 1px 1px 0 #eee}.ai1wm-button-green:disabled{opacity:0.5;cursor:not-allowed}.ai1wm-button-blue{border:1px solid #007ba9;border-radius:3px;box-shadow:inset 0 1px 0 0 #45c7f7;color:#fff;display:inline-block;font-size:11px;font-weight:bold;background-color:#00aff0;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #00aff0),color-stop(100%, #0086b8));background-image:-webkit-linear-gradient(#00aff0,#0086b8);background-image:linear-gradient(#00aff0,#0086b8);padding:7px 18px;text-decoration:none;text-shadow:0 1px 0 #006c94;background-clip:padding-box}.ai1wm-button-blue:hover:not(:disabled){box-shadow:inset 0 1px 0 0 #13b9f6;cursor:pointer;background-color:#049ad2;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049ad2),color-stop(100%, #007ba9));background-image:-webkit-linear-gradient(#049ad2,#007ba9);background-image:linear-gradient(#049ad2,#007ba9)}.ai1wm-button-blue:active:not(:disabled){border:1px solid #007ba9;box-shadow:inset 0 0 8px 4px #007099,inset 0 0 8px 4px #007099,0 1px 1px 0 #eee}.ai1wm-button-blue:disabled{opacity:0.5;cursor:not-allowed}.ai1wm-button-gray i,.ai1wm-button-green i,.ai1wm-button-blue i{margin-left:-0.5em;margin-right:0.2em}.ai1wm-button-gray i.ai1wm-alone,.ai1wm-button-green i.ai1wm-alone,.ai1wm-button-blue i.ai1wm-alone{margin-right:-0.5em !important}.ai1wm-button-gray i.ai1wm-icon-plus,.ai1wm-button-green i.ai1wm-icon-plus,.ai1wm-button-blue i.ai1wm-icon-plus{margin-right:0.4em;font-size:12px}.ai1wm-clear{*zoom:1}.ai1wm-clear:before,.ai1wm-clear:after{content:" ";display:table}.ai1wm-clear:after{clear:both}.ai1wm-field-inline input{border-radius:5px}.ai1wm-toggle-checkbox label{color:#333333;display:inline-block;font-size:11px;font-weight:bold;text-decoration:none;text-shadow:0 1px 0 white}.ai1wm-share-button-container{text-align:center}.ai1wm-share-button-container .ai1wm-share-button{text-decoration:none;margin:10px;font-size:30px}.ai1wm-report-problem{position:absolute;top:22px;right:22px;font-size:0.7rem}.ai1wm-report-problem-button:link,.ai1wm-report-problem-button:visited,.ai1wm-report-problem-button:active{text-decoration:none;outline:0}.ai1wm-report-problem-button:link .ai1wm-icon-exclamation,.ai1wm-report-problem-button:visited .ai1wm-icon-exclamation,.ai1wm-report-problem-button:active .ai1wm-icon-exclamation{position:relative;top:1px;left:-1px;font-size:0.875rem}.ai1wm-report-problem-dialog{position:absolute;z-index:999;width:280px;right:-1px;border:1px solid blue;background-color:#fff;margin:6px 0 0 0;padding:10px 10px 6px 10px;border:1px solid #D6D6D6;border-radius:3px;box-shadow:0 1px 0 0 #FFFFFF inset;display:none}.ai1wm-report-email{width:100%;font-weight:normal;font-size:0.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-report-message{width:100%;border-radius:3px;font-size:0.8rem;padding:6px 10px;resize:none}.ai1wm-report-cancel:link,.ai1wm-report-cancel:visited,.ai1wm-report-cancel:active{float:right;line-height:34px;outline:0;text-decoration:none}.ai1wm-report-active{display:block}.ai1wm-report-terms-segment{font-size:0.7rem;line-height:1rem;margin:4px 0 8px 0}.ai1wm-report-terms-segment>.ai1wm-report-terms{border-radius:3px}.ai1wm-drag-drop-area{border:4px dashed #DDDDDD;height:200px;margin:20px 0 16px 0;background:#fff}.ai1wm-drag-drop-area.dragover{background:rgba(255,255,255,0.4);border-color:green}.ai1wm-drag-drop-area .ai1wm-drag-drop-inside{margin:70px auto 0;width:250px}.ai1wm-drag-drop-inside p{display:block;text-align:center;color:#AAAAAA;font-size:14px;margin:5px 0}.ai1wm-drag-drop-inside p.ai1wm-drag-drop-info{font-size:20px}.ai1wm-drag-drop-inside p.ai1wm-upload-progress{margin:-15px 0 15px 0;display:none;color:#000;font-size:20px}.ai1wm-drag-over #ai1wm-drag-drop-area{border-color:#83b4d8}.ai1wm-upload-file-message{display:none}
1
+ .ai1wm-divider{margin:1rem 0rem;border-top:1px solid rgba(0,0,0,0.1);border-bottom:1px solid rgba(255,255,255,0.8);line-height:1;height:0em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:absolute;border:none;height:0em;margin:0em;background-color:transparent;font-size:0.875rem;font-weight:bold;text-align:center;text-transform:uppercase;color:rgba(0,0,0,0.8)}.ai1wm-divider{position:relative;top:0%;left:0%;margin:1rem 2.5rem;height:auto;padding:0em;line-height:1}.ai1wm-divider:before,.ai1wm-divider:after{position:absolute;top:50%;content:" ";z-index:3;width:50%;top:50%;height:0%;border-top:1px solid rgba(0,0,0,0.1);border-bottom:1px solid rgba(255,255,255,0.8)}.ai1wm-divider:before{left:0%;margin-left:-2.5rem}.ai1wm-divider:after{left:auto;right:0%;margin-right:-2.5rem}@font-face{font-family:'servmask';src:url("../font/servmask.eot");src:url("../font/servmask.eot?#iefix") format("embedded-opentype"),url("../font/servmask.woff") format("woff"),url("../font/servmask.ttf") format("truetype"),url("../font/servmask.svg#servmask") format("svg");font-weight:normal;font-style:normal}[class^="ai1wm-icon-"],[class*=" ai1wm-icon-"]{font-family:'servmask';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ai1wm-icon-plus:before{content:"\e600"}.ai1wm-icon-plus2:before{content:"\e601"}.ai1wm-icon-plus3:before{content:"\e602"}.ai1wm-icon-history:before{content:"\e603"}.ai1wm-icon-arrow-down:before{content:"\e604"}.ai1wm-icon-arrow-right:before{content:"\e605"}.ai1wm-icon-arrow-down2:before{content:"\e606"}.ai1wm-icon-plus:before{content:"\e607"}.ai1wm-icon-paperplane:before{content:"\e608"}.ai1wm-icon-help:before{content:"\e609"}.ai1wm-icon-file:before{content:"\e60a"}.ai1wm-icon-twitter:before{content:"\e60b"}.ai1wm-icon-facebook:before{content:"\e60c"}.ai1wm-icon-exclamation:before{content:"\e619"}@media (min-width: 855px){.ai1wm-row{margin-right:399px}.ai1wm-row:before,.ai1wm-row:after{content:" ";display:table}.ai1wm-row:after{clear:both}.ai1wm-left{float:left;width:100%}.ai1wm-right{float:right;width:377px;margin-right:-399px}.ai1wm-right .ai1wm-sidebar{width:100%}.ai1wm-right .ai1wm-segment{width:333px;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 white;color:#333333;background-color:#f9f9f9;padding:22px;text-decoration:none;text-shadow:0 1px 0 white;background-clip:padding-box}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:normal;font-size:0.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:0.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:0.7rem;line-height:1rem;margin:4px 0 8px 0}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-holder{position:relative;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 white;padding:22px;background:#f9f9f9}.ai1wm-holder h1{margin-top:0 !important}.ai1wm-segment>.ai1wm-divider:first-child{margin-top:0 !important}@media (max-width: 854px){.ai1wm-container{margin-left:10px !important}.ai1wm-row{margin-right:0px !important}.ai1wm-right{float:left !important;width:100% !important;margin-top:18px;margin-right:0 !important}.ai1wm-right .ai1wm-sidebar{width:auto !important;border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 white;padding:22px;background:#f9f9f9}.ai1wm-right .ai1wm-feedback-email{width:100%;font-weight:normal;font-size:0.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-right .ai1wm-feedback-message{width:100%;border-radius:3px;font-size:0.8rem;padding:6px 10px;resize:none}.ai1wm-right .ai1wm-feedback-terms-segment{font-size:0.7rem;line-height:1rem;margin:4px 0 8px 0;border-radius:3px}.ai1wm-right .ai1wm-feedback-terms-segment>.ai1wm-feedback-terms{border-radius:3px}}.ai1wm-container{margin:20px 20px 0px 2px}.ai1wm-container:before,.ai1wm-container:after{content:" ";display:table}.ai1wm-container:after{clear:both}.ai1wm-replace-row{width:100%;box-shadow:outset 0 1px 0 0 white;border-radius:3px;color:#333333;font-size:11px;font-weight:bold;background-color:#f9f9f9;text-decoration:none;text-shadow:0 1px 0 white;background-clip:padding-box;margin-bottom:10px}.ai1wm-replace-row .ai1wm-field-inline{float:left;width:100%}.ai1wm-replace-row .ai1wm-field-inline input{width:100%;font-weight:normal;font-size:0.8rem;padding:0 10px;height:2.3rem;line-height:2.3rem;margin-bottom:4px}.ai1wm-field{margin-bottom:4px}.ai1wm-field input[type="text"],.ai1wm-field textarea{width:100%;font-weight:normal}.ai1wm-message{-moz-box-sizing:border-box;background-color:#EFEFEF;border-radius:4px;color:rgba(0,0,0,0.6);height:auto;margin:10px 0;min-height:18px;padding:6px 10px;position:relative;transition:opacity 0.1s ease 0s, color 0.1s ease 0s, background 0.1s ease 0s, box-shadow 0.1s ease 0s}.ai1wm-message.ai1wm-green-message{background-color:#F2F8F0;color:#119000}.ai1wm-message.ai1wm-blue-message{background-color:#E6F4F9;color:#4D8796}.ai1wm-message.ai1wm-red-message{background-color:#F1D7D7;color:#A95252}.ai1wm-message p{margin:4px 0}.ai1wm-button-gray{border:1px solid #d6d6d6;border-radius:3px;box-shadow:inset 0 1px 0 0 #fff;color:#333;display:inline-block;font-size:11px;font-weight:bold;background-color:#fafafa;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fafafa),color-stop(100%, #dedede));background-image:-webkit-linear-gradient(#fafafa,#dedede);background-image:linear-gradient(#fafafa,#dedede);padding:7px 18px;text-decoration:none;text-shadow:0 1px 0 #fff;background-clip:padding-box}.ai1wm-button-gray:hover:not(:disabled){box-shadow:inset 0 1px 0 0 #fff;cursor:pointer;background-color:#ededed;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ededed),color-stop(100%, #d6d6d6));background-image:-webkit-linear-gradient(#ededed,#d6d6d6);background-image:linear-gradient(#ededed,#d6d6d6)}.ai1wm-button-gray:active:not(:disabled){border:1px solid #d6d6d6;box-shadow:inset 0 0 8px 4px #cfcfcf,inset 0 0 8px 4px #cfcfcf,0 1px 1px 0 #eee}.ai1wm-button-gray:disabled{opacity:0.5;cursor:not-allowed}.ai1wm-button-green{border:1px solid #4d8b2c;border-radius:3px;box-shadow:inset 0 1px 0 0 #9cc587;color:#fff;display:inline-block;font-size:11px;font-weight:bold;background-color:#6eb649;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #6eb649),color-stop(100%, #539730));background-image:-webkit-linear-gradient(#6eb649,#539730);background-image:linear-gradient(#6eb649,#539730);padding:7px 18px;text-decoration:none;text-shadow:0 1px 0 #428122;background-clip:padding-box}.ai1wm-button-green:hover:not(:disabled){box-shadow:inset 0 1px 0 0 #7fb563;cursor:pointer;background-color:#649f46;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #649f46),color-stop(100%, #4d8a2d));background-image:-webkit-linear-gradient(#649f46,#4d8a2d);background-image:linear-gradient(#649f46,#4d8a2d)}.ai1wm-button-green:active:not(:disabled){border:1px solid #4d8b2c;box-shadow:inset 0 0 8px 4px #477e2a,inset 0 0 8px 4px #477e2a,0 1px 1px 0 #eee}.ai1wm-button-green:disabled{opacity:0.5;cursor:not-allowed}.ai1wm-button-blue{border:1px solid #007ba9;border-radius:3px;box-shadow:inset 0 1px 0 0 #45c7f7;color:#fff;display:inline-block;font-size:11px;font-weight:bold;background-color:#00aff0;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #00aff0),color-stop(100%, #0086b8));background-image:-webkit-linear-gradient(#00aff0,#0086b8);background-image:linear-gradient(#00aff0,#0086b8);padding:7px 18px;text-decoration:none;text-shadow:0 1px 0 #006c94;background-clip:padding-box}.ai1wm-button-blue:hover:not(:disabled){box-shadow:inset 0 1px 0 0 #13b9f6;cursor:pointer;background-color:#049ad2;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049ad2),color-stop(100%, #007ba9));background-image:-webkit-linear-gradient(#049ad2,#007ba9);background-image:linear-gradient(#049ad2,#007ba9)}.ai1wm-button-blue:active:not(:disabled){border:1px solid #007ba9;box-shadow:inset 0 0 8px 4px #007099,inset 0 0 8px 4px #007099,0 1px 1px 0 #eee}.ai1wm-button-blue:disabled{opacity:0.5;cursor:not-allowed}.ai1wm-button-gray i,.ai1wm-button-green i,.ai1wm-button-blue i{margin-left:-0.5em;margin-right:0.2em}.ai1wm-button-gray i.ai1wm-alone,.ai1wm-button-green i.ai1wm-alone,.ai1wm-button-blue i.ai1wm-alone{margin-right:-0.5em !important}.ai1wm-button-gray i.ai1wm-icon-plus,.ai1wm-button-green i.ai1wm-icon-plus,.ai1wm-button-blue i.ai1wm-icon-plus{margin-right:0.4em;font-size:12px}.ai1wm-clear{*zoom:1}.ai1wm-clear:before,.ai1wm-clear:after{content:" ";display:table}.ai1wm-clear:after{clear:both}.ai1wm-field-inline input{border-radius:5px}.ai1wm-toggle-checkbox label{color:#333333;display:inline-block;font-size:11px;font-weight:bold;text-decoration:none;text-shadow:0 1px 0 white}.ai1wm-share-button-container{text-align:center}.ai1wm-share-button-container .ai1wm-share-button{text-decoration:none;margin:10px;font-size:30px}.ai1wm-report-problem{position:absolute;top:22px;right:22px;font-size:0.7rem}.ai1wm-report-problem-button:link,.ai1wm-report-problem-button:visited,.ai1wm-report-problem-button:active{text-decoration:none;outline:0}.ai1wm-report-problem-button:link .ai1wm-icon-exclamation,.ai1wm-report-problem-button:visited .ai1wm-icon-exclamation,.ai1wm-report-problem-button:active .ai1wm-icon-exclamation{position:relative;top:1px;left:-1px;font-size:0.875rem}.ai1wm-report-problem-dialog{position:absolute;z-index:999;width:280px;right:-1px;border:1px solid blue;background-color:#fff;margin:6px 0 0 0;padding:10px 10px 6px 10px;border:1px solid #D6D6D6;border-radius:3px;box-shadow:0 1px 0 0 #FFFFFF inset;display:none}.ai1wm-report-email{width:100%;font-weight:normal;font-size:0.8rem;height:2.3rem;line-height:2.3rem;border-radius:5px;margin-bottom:4px;padding:0 10px}.ai1wm-report-message{width:100%;border-radius:3px;font-size:0.8rem;padding:6px 10px;resize:none}.ai1wm-report-cancel:link,.ai1wm-report-cancel:visited,.ai1wm-report-cancel:active{float:right;line-height:34px;outline:0;text-decoration:none}.ai1wm-report-active{display:block}.ai1wm-report-terms-segment{font-size:0.7rem;line-height:1rem;margin:4px 0 8px 0}.ai1wm-report-terms-segment>.ai1wm-report-terms{border-radius:3px}.ai1wm-drag-drop-area{border:4px dashed #DDDDDD;height:200px;margin:20px 0 16px 0;background:#fff}.ai1wm-drag-drop-area.dragover{background:rgba(255,255,255,0.4);border-color:green}.ai1wm-drag-drop-area .ai1wm-drag-drop-inside{margin:70px auto 0;width:250px}.ai1wm-drag-drop-inside p{display:block;text-align:center;color:#AAAAAA;font-size:14px;margin:5px 0}.ai1wm-drag-drop-inside p.ai1wm-drag-drop-info{font-size:20px}.ai1wm-drag-drop-inside p.ai1wm-upload-progress{margin:-35px 0 15px 0;display:none;color:#000;font-size:20px}.ai1wm-drag-over #ai1wm-drag-drop-area{border-color:#83b4d8}.ai1wm-upload-file-message{display:none}
lib/view/assets/javascript/import.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function($){"use strict";$("#ai1wm-feedback-submit").click(function(){var url=ai1wm_feedback.ajax.url,email=$(".ai1wm-feedback-email").val(),message=$(".ai1wm-feedback-message").val(),terms=$(".ai1wm-feedback-terms").is(":checked");$.ajax({type:"POST",url:url,data:{email:email,message:message,terms:+terms},success:function(data){var errors=data.errors;if(errors.length>0){$(".ai1wm-feedback .ai1wm-message").remove();var content=$("<div />").addClass("ai1wm-message ai1wm-red-message");$.each(errors,function(key,value){content.append("<p>"+value+"</p>")}),$(".ai1wm-feedback").prepend(content)}else{var content=$("<div />").addClass("ai1wm-message ai1wm-green-message").append("<p>Thanks for submitting your feedback!</p>");$(".ai1wm-feedback").html(content)}},dataType:"json",async:!1})})}),jQuery(document).ready(function($){"use strict";$("#ai1wm-report-problem-button").click(function(e){$(this).next(".ai1wm-report-problem-dialog").toggleClass("ai1wm-report-active"),e.preventDefault()}),$("#ai1wm-report-cancel").click(function(e){$(this).closest(".ai1wm-report-problem-dialog").removeClass("ai1wm-report-active"),e.preventDefault()}),$("#ai1wm-report-submit").click(function(){var url=ai1wm_report.ajax.url,email=$(".ai1wm-report-email").val(),message=$(".ai1wm-report-message").val(),terms=$(".ai1wm-report-terms").is(":checked");$.ajax({type:"POST",url:url,data:{email:email,message:message,terms:+terms},success:function(data){var errors=data.errors;if(errors.length>0){$(".ai1wm-report-problem-dialog .ai1wm-message").remove();var content=$("<div />").addClass("ai1wm-message ai1wm-red-message");$.each(errors,function(key,value){content.append("<p>"+value+"</p>")}),$(".ai1wm-report-problem-dialog").prepend(content)}else{var content=$("<div />").addClass("ai1wm-message ai1wm-green-message").append("<p>Thanks for submitting your request!</p>");$(".ai1wm-report-problem-dialog").html(content),setTimeout(function(){$(".ai1wm-report-problem-dialog").removeClass("ai1wm-report-active")},2e3)}},dataType:"json",async:!1})})}),jQuery(document).ready(function($){"use strict";var display_upload_errors=function(errors){var box=$(".ai1wm-upload-file-message");box.removeClass("ai1wm-green-message").addClass("ai1wm-red-message"),box.find("p").remove(),errors.length>0?($.each(errors,function(index,value){box.append("<p>"+value+"</p>")}),box.show()):box.hide()},display_upload_messages=function(messages){var box=$(".ai1wm-upload-file-message");box.removeClass("ai1wm-red-message").addClass("ai1wm-green-message"),box.find("p").remove(),messages.length>0?($.each(messages,function(index,value){box.append("<p>"+value+"</p>")}),box.show()):box.hide()},upload_progress=function(up,file){var box=$(".ai1wm-upload-progress");box.text(file.percent+"%"),box.show()},upload_error=function(up,error){var message=null;message=-601===error.code?"File extension error! Please ensure that the file is in <strong>ZIP</strong> archive format.":error.message,display_upload_errors([message]),up.refresh()},file_uploaded=function(up,file,result){var json=$.parseJSON(result.response);display_upload_errors(json.errors)},upload_complete=function(){var errors=$(".ai1wm-upload-file-message.ai1wm-red-message p");0==errors.length&&display_upload_messages(["Archive was successfully uploaded and imported into WordPress."])},uploader=new plupload.Uploader(ai1wm_uploader);uploader.bind("Init",function(up){var uploaddiv=$("#ai1wm-plupload-upload-ui");up.features.dragdrop&&!$(document.body).hasClass("mobile")?$("#ai1wm-drag-drop-area").bind("dragover.wp-uploader",function(){uploaddiv.addClass("ai1wm-drag-over")}).bind("dragleave.wp-uploader, drop.wp-uploader",function(){uploaddiv.removeClass("ai1wm-drag-over")}):$("#ai1wm-drag-drop-area").unbind(".wp-uploader"),"html4"==up.runtime&&$(".upload-flash-bypass").hide()}),uploader.init(),uploader.bind("FilesAdded",function(up){up.refresh(),up.start()}),uploader.bind("BeforeUpload",function(){var box=$(".ai1wm-upload-file-message");box.hide()}),uploader.bind("UploadFile",function(){}),uploader.bind("UploadProgress",upload_progress),uploader.bind("Error",upload_error),uploader.bind("FileUploaded",file_uploaded),uploader.bind("UploadComplete",upload_complete)});
1
+ jQuery(document).ready(function($){"use strict";$("#ai1wm-feedback-submit").click(function(){var url=ai1wm_feedback.ajax.url,email=$(".ai1wm-feedback-email").val(),message=$(".ai1wm-feedback-message").val(),terms=$(".ai1wm-feedback-terms").is(":checked");$.ajax({type:"POST",url:url,data:{email:email,message:message,terms:+terms},success:function(data){var errors=data.errors;if(errors.length>0){$(".ai1wm-feedback .ai1wm-message").remove();var content=$("<div />").addClass("ai1wm-message ai1wm-red-message");$.each(errors,function(key,value){content.append("<p>"+value+"</p>")}),$(".ai1wm-feedback").prepend(content)}else{var content=$("<div />").addClass("ai1wm-message ai1wm-green-message").append("<p>Thanks for submitting your feedback!</p>");$(".ai1wm-feedback").html(content)}},dataType:"json",async:!1})})}),jQuery(document).ready(function($){"use strict";$("#ai1wm-report-problem-button").click(function(e){$(this).next(".ai1wm-report-problem-dialog").toggleClass("ai1wm-report-active"),e.preventDefault()}),$("#ai1wm-report-cancel").click(function(e){$(this).closest(".ai1wm-report-problem-dialog").removeClass("ai1wm-report-active"),e.preventDefault()}),$("#ai1wm-report-submit").click(function(){var url=ai1wm_report.ajax.url,email=$(".ai1wm-report-email").val(),message=$(".ai1wm-report-message").val(),terms=$(".ai1wm-report-terms").is(":checked");$.ajax({type:"POST",url:url,data:{email:email,message:message,terms:+terms},success:function(data){var errors=data.errors;if(errors.length>0){$(".ai1wm-report-problem-dialog .ai1wm-message").remove();var content=$("<div />").addClass("ai1wm-message ai1wm-red-message");$.each(errors,function(key,value){content.append("<p>"+value+"</p>")}),$(".ai1wm-report-problem-dialog").prepend(content)}else{var content=$("<div />").addClass("ai1wm-message ai1wm-green-message").append("<p>Thanks for submitting your request!</p>");$(".ai1wm-report-problem-dialog").html(content),setTimeout(function(){$(".ai1wm-report-problem-dialog").removeClass("ai1wm-report-active")},2e3)}},dataType:"json",async:!1})})}),jQuery(document).ready(function($){"use strict";var display_upload_errors=function(errors){var box=$(".ai1wm-upload-file-message");box.removeClass("ai1wm-green-message").addClass("ai1wm-red-message"),box.find("p").remove(),errors.length>0?($.each(errors,function(index,value){box.append("<p>"+value+"</p>")}),box.show()):box.hide()},display_upload_messages=function(messages){var box=$(".ai1wm-upload-file-message");box.removeClass("ai1wm-red-message").addClass("ai1wm-green-message"),box.find("p").remove(),messages.length>0?($.each(messages,function(index,value){box.append("<p>"+value+"</p>")}),box.show()):box.hide()},upload_progress=function(up,file){var box=$(".ai1wm-upload-progress");box.text(file.percent-1+"%"),box.show()},upload_error=function(up,error){var message=null;message=-601===error.code?"File extension error! Please ensure that the file is in <strong>ZIP</strong> archive format.":error.message,display_upload_errors([message]),up.refresh()},file_uploaded=function(up,file,result){var json=$.parseJSON(result.response);display_upload_errors(json.errors)},upload_complete=function(){var errors=$(".ai1wm-upload-file-message.ai1wm-red-message p");0==errors.length&&($(".ai1wm-upload-progress").text("100%"),display_upload_messages(["Archive was successfully uploaded and imported into WordPress."]))},uploader=new plupload.Uploader(ai1wm_uploader);uploader.bind("Init",function(up){var uploaddiv=$("#ai1wm-plupload-upload-ui");up.features.dragdrop&&!$(document.body).hasClass("mobile")?$("#ai1wm-drag-drop-area").bind("dragover.wp-uploader",function(){uploaddiv.addClass("ai1wm-drag-over")}).bind("dragleave.wp-uploader, drop.wp-uploader",function(){uploaddiv.removeClass("ai1wm-drag-over")}):$("#ai1wm-drag-drop-area").unbind(".wp-uploader"),"html4"==up.runtime&&$(".upload-flash-bypass").hide()}),uploader.init(),uploader.bind("FilesAdded",function(up){up.refresh(),up.start()}),uploader.bind("BeforeUpload",function(){var box=$(".ai1wm-upload-file-message");box.hide()}),uploader.bind("UploadFile",function(){}),uploader.bind("UploadProgress",upload_progress),uploader.bind("Error",upload_error),uploader.bind("FileUploaded",file_uploaded),uploader.bind("UploadComplete",upload_complete)});
readme.txt CHANGED
@@ -3,7 +3,7 @@ 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.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.
@@ -70,6 +70,11 @@ 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.7.1 =
74
  * Fixed a bug when exporting WordPress plugins directory
75
 
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.2
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.
70
  3. Plugin Menu
71
 
72
  == Changelog ==
73
+ = 1.7.2 =
74
+ * Added support for automatically switching database adapters for better performance and optimization
75
+ * Fixed a bug when using host:port syntax with MySQL PDO
76
+ * Fixed a bug when using find and replace functionality
77
+
78
  = 1.7.1 =
79
  * Fixed a bug when exporting WordPress plugins directory
80