BackUpWordPress - Version 3.6.4

Version Description

= 3.4 =

  • This version introduces a major refactoring of the code responsible for the core backup engine. We made sure to write unit tests for the new code, and we have tested it on several user's sites. It fixes a lot of old bugs, and Windows users should see major improvements to reliability.

= 3.3.4 =

  • WordPress 4.4 compatibility.

= 3.3.1 =

  • Fixes a bug that would prevent downloading backups since 3.3.0 - please update.

= 3.2.5 =

  • Security fixes related to add_query_arg

= 3.2.1 =

  • Important bug fixes. Please upgrade to this version to avoid incomplete or broken backups.

= 3.1.3 =

  • Fixes backwards compatibility for add-ons and avoids a Fatal Error. Please upgrade straight to this version before upgrading your add-ons.

= 3.0.4 =

  • Fixes a few minor bugs. Immediate update is recommended.

= 3.0.2 =

  • Important: we have dropped support for PHP 5.2, you will not be able to activate BackUpWordPress on a server running PHP versions older than PHP 5.3.29

= 3.0.1 =

  • This is a critical update. Fixes a bug in the core backup library. Please update immediately.
Download this release

Release Info

Developer katmoody
Plugin Icon 128x128 BackUpWordPress
Version 3.6.4
Comparing to
See all releases

Code changes from version 3.6.3.1 to 3.6.4

Files changed (65) hide show
  1. admin/actions.php +46 -0
  2. admin/filesystem-credentials.php +8 -0
  3. admin/page.php +10 -4
  4. admin/upsell.php +8 -8
  5. assets/hmbkp.css +3 -3
  6. assets/hmbkp.min.css +1 -1
  7. assets/hmbkp.min.js +1 -1
  8. backupwordpress.php +1 -1
  9. classes/class-excludes.php +2 -1
  10. classes/class-path.php +24 -8
  11. classes/class-plugin.php +2 -2
  12. classes/class-requirement.php +4 -1
  13. classes/class-site-size.php +1 -1
  14. composer.json +0 -26
  15. composer.lock +0 -169
  16. functions/core.php +19 -4
  17. functions/interface.php +97 -34
  18. languages/backupwordpress.pot +99 -103
  19. package-lock.json +2199 -0
  20. readme.txt +9 -3
  21. vendor/autoload.php +2 -2
  22. vendor/composer/ClassLoader.php +38 -8
  23. vendor/composer/LICENSE +1 -1
  24. vendor/composer/autoload_real.php +5 -5
  25. vendor/composer/autoload_static.php +3 -3
  26. vendor/composer/installed.json +18 -18
  27. vendor/ifsnop/mysqldump-php/.gitignore +0 -4
  28. vendor/ifsnop/mysqldump-php/.scrutinizer.yml +0 -43
  29. vendor/ifsnop/mysqldump-php/.travis.yml +0 -22
  30. vendor/ifsnop/mysqldump-php/README.md +0 -266
  31. vendor/ifsnop/mysqldump-php/phpunit.xml +0 -18
  32. vendor/ifsnop/mysqldump-php/src/Ifsnop/Mysqldump/Mysqldump.php +182 -29
  33. vendor/ifsnop/mysqldump-php/tests/test.php +0 -67
  34. vendor/ifsnop/mysqldump-php/tests/test.sh +0 -132
  35. vendor/ifsnop/mysqldump-php/tests/test001.src.sql +0 -136
  36. vendor/ifsnop/mysqldump-php/tests/test002.src.sql +0 -14
  37. vendor/ifsnop/mysqldump-php/tests/test005.src.sql +0 -12
  38. vendor/ifsnop/mysqldump-php/tests/test006.src.sql +0 -107
  39. vendor/symfony/finder/Adapter/AdapterInterface.php +15 -15
  40. vendor/symfony/finder/Comparator/NumberComparator.php +1 -1
  41. vendor/symfony/finder/Expression/Expression.php +1 -1
  42. vendor/symfony/finder/Expression/Regex.php +8 -8
  43. vendor/symfony/finder/Expression/ValueInterface.php +2 -2
  44. vendor/symfony/finder/Finder.php +33 -33
  45. vendor/symfony/finder/LICENSE +1 -1
  46. vendor/symfony/finder/Shell/Command.php +10 -10
  47. vendor/symfony/finder/phpunit.xml.dist +2 -0
  48. vendor/symfony/process/.gitignore +0 -3
  49. vendor/symfony/process/ExecutableFinder.php +1 -1
  50. vendor/symfony/process/LICENSE +1 -1
  51. vendor/symfony/process/Pipes/UnixPipes.php +1 -1
  52. vendor/symfony/process/Pipes/WindowsPipes.php +1 -1
  53. vendor/symfony/process/Process.php +17 -10
  54. vendor/symfony/process/ProcessBuilder.php +13 -13
  55. vendor/symfony/process/ProcessUtils.php +1 -1
  56. vendor/symfony/process/README.md +0 -13
  57. vendor/symfony/process/Tests/ExecutableFinderTest.php +2 -1
  58. vendor/symfony/process/Tests/PhpExecutableFinderTest.php +2 -1
  59. vendor/symfony/process/Tests/PhpProcessTest.php +2 -1
  60. vendor/symfony/process/Tests/ProcessBuilderTest.php +2 -1
  61. vendor/symfony/process/Tests/ProcessFailedExceptionTest.php +6 -17
  62. vendor/symfony/process/Tests/ProcessTest.php +26 -6
  63. vendor/symfony/process/Tests/ProcessUtilsTest.php +3 -1
  64. vendor/symfony/process/Tests/SignalListener.php +1 -1
  65. vendor/symfony/process/phpunit.xml.dist +2 -0
admin/actions.php CHANGED
@@ -57,6 +57,52 @@ function request_delete_schedule() {
57
  }
58
  add_action( 'admin_post_hmbkp_request_delete_schedule', 'HM\BackUpWordPress\request_delete_schedule' );
59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  /**
61
  * Perform a manual backup
62
  *
57
  }
58
  add_action( 'admin_post_hmbkp_request_delete_schedule', 'HM\BackUpWordPress\request_delete_schedule' );
59
 
60
+ add_action( 'admin_post_hmbkp_request_credentials', function() {
61
+
62
+ global $wp_filesystem;
63
+
64
+ ob_start();
65
+ $creds = request_filesystem_credentials( '' );
66
+ ob_end_clean();
67
+
68
+ // Default to showing an error if we're not able to connect.
69
+ $url = add_query_arg( 'connection_error', 1, get_settings_url() );
70
+
71
+ /**
72
+ * If we have valid filesystem credentials then let's attempt
73
+ * to use them to create the backups directory. If we can't create it in
74
+ * WP_CONTENT_DIR then we fallback to trying in uploads.
75
+ */
76
+ if ( WP_Filesystem( $creds ) ) {
77
+
78
+ // If we're able to connect then no need to redirect with an error.
79
+ $url = get_settings_url();
80
+
81
+ // If the backup path exists then let's just try to chmod it to the correct permissions.
82
+ if (
83
+ is_dir( Path::get_instance()->get_default_path() ) &&
84
+ ! $wp_filesystem->chmod( Path::get_instance()->get_default_path(), FS_CHMOD_DIR )
85
+ ) {
86
+ $url = add_query_arg( 'creation_error', 1, get_settings_url() );
87
+ } else {
88
+
89
+ // If the path doesn't exist then try to correct the permission for the parent directory and create it.
90
+ $wp_filesystem->chmod( dirname( Path::get_instance()->get_default_path() ), FS_CHMOD_DIR );
91
+
92
+ if (
93
+ ! $wp_filesystem->mkdir( Path::get_instance()->get_default_path(), FS_CHMOD_DIR ) &&
94
+ ! $wp_filesystem->mkdir( Path::get_instance()->get_fallback_path(), FS_CHMOD_DIR )
95
+ ) {
96
+ $url = add_query_arg( 'creation_error', 1, get_settings_url() );
97
+ }
98
+ }
99
+ }
100
+
101
+ wp_safe_redirect( $url , 303 );
102
+ die;
103
+
104
+ } );
105
+
106
  /**
107
  * Perform a manual backup
108
  *
admin/filesystem-credentials.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $_POST['action'] = 'hmbkp_request_credentials';
4
+ $extra_fields = array( 'action' );
5
+
6
+ if ( ! isset( $_GET['creation_error'] ) ) {
7
+ request_filesystem_credentials( admin_url( 'admin-post.php' ), '', isset( $_GET['connection_error'] ), false, $extra_fields );
8
+ }
admin/page.php CHANGED
@@ -10,7 +10,7 @@ namespace HM\BackUpWordPress;
10
 
11
  BackUpWordPress
12
 
13
- <a class="page-title-action" href="<?php echo esc_url( get_settings_url( HMBKP_PLUGIN_SLUG . '_extensions' ) ); ?>">Extensions</a>
14
 
15
  <?php if ( get_option( 'hmbkp_enable_support' ) ) : ?>
16
 
@@ -25,10 +25,16 @@ namespace HM\BackUpWordPress;
25
 
26
  </h1>
27
 
28
- <?php include_once( HMBKP_PLUGIN_PATH . 'admin/backups.php' ); ?>
29
 
30
- <p class="howto"><?php printf( __( 'If you\'re finding BackUpWordPress useful, please %1$s rate it on the plugin directory%2$s.', 'backupwordpress' ), '<a target="_blank" href="http://wordpress.org/support/view/plugin-reviews/backupwordpress">', '</a>' ); ?></p>
 
 
31
 
32
- <?php include_once( HMBKP_PLUGIN_PATH . 'admin/upsell.php' ); ?>
 
 
 
 
33
 
34
  </div>
10
 
11
  BackUpWordPress
12
 
13
+ <a class="page-title-action" href="https://bwp.hmn.md/" target="_blank">Extensions</a>
14
 
15
  <?php if ( get_option( 'hmbkp_enable_support' ) ) : ?>
16
 
25
 
26
  </h1>
27
 
28
+ <?php if ( has_server_permissions() ) : ?>
29
 
30
+ <?php include_once( HMBKP_PLUGIN_PATH . 'admin/backups.php' ); ?>
31
+
32
+ <?php include_once( HMBKP_PLUGIN_PATH . 'admin/upsell.php' ); ?>
33
 
34
+ <?php else : ?>
35
+
36
+ <?php include_once( HMBKP_PLUGIN_PATH . 'admin/filesystem-credentials.php' ); ?>
37
+
38
+ <?php endif; ?>
39
 
40
  </div>
admin/upsell.php CHANGED
@@ -1,17 +1,17 @@
1
  <?php namespace HM\BackUpWordPress; ?>
2
  <div class="hmbkp-upsell">
3
 
4
- <p>
5
-
6
  <?php
7
- /** translators: the 1st placeholder is the first part of the anchor tag with the link to the extensions admin page and the second is the closing anchor tag */
8
- printf(
9
- __( 'Store your backups securely in the Cloud with %1$sour extensions%2$s', 'backupwordpress' ),
10
- '<a href="' . esc_url( get_settings_url( HMBKP_PLUGIN_SLUG . '_extensions' ) ) . '">',
11
  '</a>'
12
  );
13
  ?>
14
-
15
- </p>
 
 
16
 
17
  </div>
1
  <?php namespace HM\BackUpWordPress; ?>
2
  <div class="hmbkp-upsell">
3
 
 
 
4
  <?php
5
+ /** translators: the 1st placeholder is the first part of the anchor tag with the link to the plugin review page and the second is the closing anchor tag */
6
+ $cta_message = sprintf(
7
+ __( 'If you\'re finding BackUpWordPress useful, please %1$s rate it on the plugin directory%2$s.', 'backupwordpress' ),
8
+ '<a target="_blank" href="http://wordpress.org/support/view/plugin-reviews/backupwordpress">',
9
  '</a>'
10
  );
11
  ?>
12
+ <div id="hmbkp-cta-message" class="updated notice is-dismissible">
13
+ <p><?php echo wp_kses_post( $cta_message ); ?></p>
14
+ <button type="button" class="notice-dismiss"><span class="screen-reader-text"><?php esc_html_e( 'Dismiss this notice.', 'backupwordpress' ); ?></span></button>
15
+ </div>
16
 
17
  </div>
assets/hmbkp.css CHANGED
@@ -20,7 +20,7 @@ li a.hmbkp-running:not(.current):before { width: 20px; height: 20px; margin: -1p
20
  .hmbkp-schedule-sentence *:not(a)[title] { border-bottom: 1px dotted #CCC; cursor: help; }
21
  .hmbkp-schedule-sentence .hmbkp-status[title] { border-bottom: none; }
22
  .hmbkp-schedule-sentence .submit { padding: 0; }
23
- .hmbkp-schedule-sentence .hmbkp-schedule-actions { visibility: visible; font-size: 12px; margin: 0 0 0 26px; }
24
  .hmbkp-schedule-actions a { white-space: nowrap; }
25
  .hmbkp-schedule-sentence .row-actions { position: static; }
26
 
@@ -29,8 +29,8 @@ li a.hmbkp-running:not(.current):before { width: 20px; height: 20px; margin: -1p
29
  .hmbkp-ajax-loading, button.hmbkp-ajax-loading { padding-left: 20px; position: relative; }
30
  .hmbkp-ajax-loading::after { content: ""; width: 16px; height: 16px; background-image: url('spinner-2x.gif'); background-size: 16px 16px; background-repeat: no-repeat; background-position: 0 0; position: absolute; right: -30px; top: 5px; }
31
 
32
- .delete-action { color: #a00; -webkit-transition: all 300ms ease; transition: all 300ms ease; }
33
- .delete-action:hover .delete-action:focus { color: red; -webkit-transition: all 300ms ease; transition: all 300ms ease; }
34
 
35
  .strikethrough { text-decoration: line-through; }
36
 
20
  .hmbkp-schedule-sentence *:not(a)[title] { border-bottom: 1px dotted #CCC; cursor: help; }
21
  .hmbkp-schedule-sentence .hmbkp-status[title] { border-bottom: none; }
22
  .hmbkp-schedule-sentence .submit { padding: 0; }
23
+ .hmbkp-schedule-sentence .hmbkp-schedule-actions { visibility: visible; font-size: 12px; margin: 0 0 0 26px; padding: 10px 0 0; }
24
  .hmbkp-schedule-actions a { white-space: nowrap; }
25
  .hmbkp-schedule-sentence .row-actions { position: static; }
26
 
29
  .hmbkp-ajax-loading, button.hmbkp-ajax-loading { padding-left: 20px; position: relative; }
30
  .hmbkp-ajax-loading::after { content: ""; width: 16px; height: 16px; background-image: url('spinner-2x.gif'); background-size: 16px 16px; background-repeat: no-repeat; background-position: 0 0; position: absolute; right: -30px; top: 5px; }
31
 
32
+ .delete-action { color: #a00; transition: all 300ms ease; }
33
+ .delete-action:hover .delete-action:focus { color: red; transition: all 300ms ease; }
34
 
35
  .strikethrough { text-decoration: line-through; }
36
 
assets/hmbkp.min.css CHANGED
@@ -1 +1 @@
1
- .hmbkp-schedule-actions a,.hmbkp-schedule-settings .column-format code{white-space:nowrap}.hmbkp_active td:first-child>code:before{content:"\00a0 \2713 ";font-size:11px}.hmbkp_active{background:#E5F7E8}div#hmbkp-warning,h2.nav-tab-wrapper+div[id^=hmbkp]{margin:20px 0 15px}h2+div[id^=hmbkp] input{max-width:100%}li a.hmbkp-running:not(.current):before{width:20px;height:20px;margin:-1px 10px -5px 0;content:"";background:url(spinner-2x.gif) no-repeat;background-size:20px;display:inline-block}.hmbkp-upsell{margin-top:40px;padding-top:16px;border-top:1px solid #ccc}.hmbkp-schedule-sentence{font-size:16px;margin:0 0 20px;background-color:#FBFBFB;padding:20px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.hmbkp-schedule-sentence::before{content:"\2714";margin-right:10px;width:16px;height:60px;display:block;float:left}.hmbkp-schedule-sentence.hmbkp-error:before{content:"\2718"}.hmbkp-schedule-sentence.hmbkp-running:before{width:20px;height:80px;margin:-1px 10px 0 0;content:"";background:url(spinner-2x.gif) no-repeat;background-size:20px;display:inline-block}.hmbkp-schedule-sentence .hmbkp-status{display:none;font-size:12px;color:#666;margin:2px 0 0 30px}.hmbkp-schedule-sentence.hmbkp-running .hmbkp-status{display:block}.hmbkp-schedule-sentence.hmbkp-running .hmbkp-schedule-actions{display:none}.hmbkp-schedule-sentence :not(a)[title]{border-bottom:1px dotted #CCC;cursor:help}.hmbkp-schedule-sentence .hmbkp-status[title]{border-bottom:none}.hmbkp-schedule-sentence .submit{padding:0}.hmbkp-schedule-sentence .hmbkp-schedule-actions{visibility:visible;font-size:12px;margin:0 0 0 26px}.hmbkp-schedule-sentence .row-actions{position:static}.hmbkp-schedule-settings{border-top:1px solid #e5e5e5;margin:20px -20px -20px;background-color:#f5f5f5;padding:0 20px 20px}.hmbkp-exclude-settings thead tr:last-child,table.widefat tbody tr:nth-child(odd){background-color:#f9f9f9}.hmbkp-ajax-loading,button.hmbkp-ajax-loading{padding-left:20px;position:relative}.hmbkp-ajax-loading::after{content:"";width:16px;height:16px;background-image:url(spinner-2x.gif);background-size:16px 16px;background-repeat:no-repeat;background-position:0 0;position:absolute;right:-30px;top:5px}.delete-action{color:#a00;-webkit-transition:all .3s ease;transition:all .3s ease}.delete-action:hover .delete-action:focus{color:red;-webkit-transition:all .3s ease;transition:all .3s ease}.strikethrough{text-decoration:line-through}.hmbkp-exclude-settings td:first-child,.hmbkp-exclude-settings th:first-child{width:20px;padding-right:0}.hmbkp-exclude-settings table .button-secondary{line-height:18px;height:20px}thead td{border-bottom:1px solid #e1e1e1}.hmbkp-exclude-settings table .spinner{display:block;float:left;margin:0}.column-filesize code{position:relative}.column-filesize .dashicons-update{display:none;overflow:hidden;position:absolute;width:100%;left:0;text-align:center;background-color:rgba(255,255,255,.8)}.column-filesize .dashicons-update span{display:none}.column-filesize:hover .dashicons-update{display:inline-block}.hmbkp-exclude-settings td span.reason{color:#CCC}.server-info{overflow:auto;max-height:50%;outline:#000 solid 1px}.server-info pre{max-height:100px;overflow-x:hidden}.page-title-action span.dashicons-admin-users{position:relative;display:inline-block;vertical-align:middle;top:-2px}pre{background-color:#eee;padding:10px;white-space:pre;max-height:320px;overflow:auto;word-wrap:normal!important}@media screen and (max-width:768px){.wrap h2{padding:10px 0 0}.hmbkp-schedule-sentence::before{height:80px}h2 .nav-tab{display:block;padding:10px;margin:0}#intercom-info,.hmbkp-exclude-settings tr>:first-child,.hmbkp-schedule-settings thead tr:nth-child(2),.hmbkp-schedule-settings tr :nth-child(4),.hmbkp-schedule-settings tr :nth-child(5){display:none}.hmbkp-schedule-sentence{margin:10px 0;padding:10px}.hmbkp-exclude-settings table{margin:0 -10px;border-left:none;border-right:none;width:calc(100% + 20px)}.hmbkp-schedule-settings{padding:0 10px 10px;margin-left:-10px;margin-right:-10px;margin-bottom:-10px}table.widefat tbody tr:nth-child(even){background-color:#fff}table.widefat tbody tr:nth-child(odd){background-color:#f9f9f9}}
1
+ .hmbkp_active td:first-child>code:before{content:"\00a0 \2713 ";font-size:11px}.hmbkp_active{background:#e5f7e8}div#hmbkp-warning,h2.nav-tab-wrapper+div[id^=hmbkp]{margin:20px 0 15px}h2+div[id^=hmbkp] input{max-width:100%}li a.hmbkp-running:not(.current):before{width:20px;height:20px;margin:-1px 10px -5px 0;content:"";background:transparent url(spinner-2x.gif) no-repeat 0 0;background-size:20px;display:inline-block}.hmbkp-upsell{margin-top:40px;padding-top:16px;border-top:1px solid #ccc}.hmbkp-schedule-sentence{font-size:16px;margin:0 0 20px 0;background-color:#fbfbfb;padding:20px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.hmbkp-schedule-sentence::before{content:"\2714";margin-right:10px;width:16px;height:60px;display:block;float:left}.hmbkp-schedule-sentence.hmbkp-error:before{content:"\2718"}.hmbkp-schedule-sentence.hmbkp-running:before{width:20px;height:80px;margin:-1px 10px 0 0;content:"";background:transparent url(spinner-2x.gif) no-repeat 0 0;background-size:20px;display:inline-block}.hmbkp-schedule-sentence .hmbkp-status{display:none;font-size:12px;color:#666;margin:2px 0 0 30px}.hmbkp-schedule-sentence.hmbkp-running .hmbkp-status{display:block}.hmbkp-schedule-sentence.hmbkp-running .hmbkp-schedule-actions{display:none}.hmbkp-schedule-sentence :not(a)[title]{border-bottom:1px dotted #ccc;cursor:help}.hmbkp-schedule-sentence .hmbkp-status[title]{border-bottom:none}.hmbkp-schedule-sentence .submit{padding:0}.hmbkp-schedule-sentence .hmbkp-schedule-actions{visibility:visible;font-size:12px;margin:0 0 0 26px;padding:10px 0 0}.hmbkp-schedule-actions a{white-space:nowrap}.hmbkp-schedule-sentence .row-actions{position:static}.hmbkp-schedule-settings{border-top:1px solid #e5e5e5;margin:20px -20px -20px;background-color:#f5f5f5;padding:0 20px 20px}.hmbkp-ajax-loading,button.hmbkp-ajax-loading{padding-left:20px;position:relative}.hmbkp-ajax-loading::after{content:"";width:16px;height:16px;background-image:url(spinner-2x.gif);background-size:16px 16px;background-repeat:no-repeat;background-position:0 0;position:absolute;right:-30px;top:5px}.delete-action{color:#a00;transition:all .3s ease}.delete-action:hover .delete-action:focus{color:red;transition:all .3s ease}.strikethrough{text-decoration:line-through}table.widefat tbody tr:nth-child(odd){background-color:#f9f9f9}.hmbkp-exclude-settings td:first-child,.hmbkp-exclude-settings th:first-child{width:20px;padding-right:0}.hmbkp-exclude-settings thead tr:last-child{background-color:#f9f9f9}.hmbkp-exclude-settings table .button-secondary{line-height:18px;height:20px}thead td{border-bottom:1px solid #e1e1e1}.hmbkp-exclude-settings table .spinner{display:block;float:left;margin:0}.hmbkp-schedule-settings .column-format code{white-space:nowrap}.column-filesize code{position:relative}.column-filesize .dashicons-update{display:none;overflow:hidden;position:absolute;width:100%;left:0;text-align:center;background-color:rgba(255,255,255,.8)}.column-filesize .dashicons-update span{display:none}.column-filesize:hover .dashicons-update{display:inline-block}.hmbkp-exclude-settings td span.reason{color:#ccc}.server-info{overflow:auto;max-height:50%;outline:#000 1px solid}.server-info pre{max-height:100px;overflow-x:hidden}.page-title-action span.dashicons-admin-users{position:relative;display:inline-block;vertical-align:middle;top:-2px}pre{background-color:#eee;padding:10px;white-space:pre;max-height:320px;overflow:auto;word-wrap:normal!important}@media screen and (max-width:768px){.wrap h2{padding:10px 0 0 0}.hmbkp-schedule-sentence::before{height:80px}h2 .nav-tab{display:block;padding:10px;margin:0}.hmbkp-schedule-sentence{margin:10px 0;padding:10px}#intercom-info{display:none}.hmbkp-schedule-settings{padding:0 10px 10px}.hmbkp-exclude-settings table{margin:0 -10px;border-left:none;border-right:none;width:calc(100% + 20px)}.hmbkp-exclude-settings tr>:first-child{display:none}.hmbkp-schedule-settings tr :nth-child(4),.hmbkp-schedule-settings tr :nth-child(5){display:none}.hmbkp-schedule-settings thead tr:nth-child(2){display:none}.hmbkp-schedule-settings{margin-left:-10px;margin-right:-10px;margin-bottom:-10px}table.widefat tbody tr:nth-child(even){background-color:#fff}table.widefat tbody tr:nth-child(odd){background-color:#f9f9f9}}
assets/hmbkp.min.js CHANGED
@@ -1 +1 @@
1
- var BackUpWordPressAdmin=function(a){"use strict";function b(){d=a("select#hmbkp_schedule_recurrence_type"),a.ajaxSetup({cache:!1}),d.length&&(c(d.val()),a(document).on("change","select#hmbkp_schedule_recurrence_type",function(){c(a(this).val())})),a(".notice.is-dismissible").on("click",".notice-dismiss",function(){a.post(ajaxurl,{action:"hmbkp_dismiss_notice"})}),a(document).on("click",".hmbkp-schedule-actions .delete-action",function(a){confirm(hmbkp.delete_schedule)||a.preventDefault()}),a(document).on("click",".hmbkp_manage_backups_row .delete-action",function(a){confirm(hmbkp.delete_backup)||a.preventDefault()}),a(document).on("click",".hmbkp-edit-schedule-excludes-form .delete-action",function(a){confirm(hmbkp.remove_exclude_rule)||a.preventDefault()}),a.post(ajaxurl,{nonce:hmbkp.nonce,action:"hmbkp_cron_test"},function(b){"1"!==b&&a(".wrap > h2").after(b)}),a(document).on("click",".hmbkp-run",function(b){wp.heartbeat.interval("fast"),a(this).closest(".hmbkp-schedule-sentence").addClass("hmbkp-running"),a(".hmbkp-error").removeClass("hmbkp-error");var c=a("[data-hmbkp-schedule-id]").attr("data-hmbkp-schedule-id");a.post(ajaxurl,{hmbkp_run_schedule_nonce:hmbkp.hmbkp_run_schedule_nonce,action:"hmbkp_run_schedule",hmbkp_schedule_id:c}),b.preventDefault()}),a(document).on("heartbeat-send",function(b,c){c.hmbkp_schedule_id=a("[data-hmbkp-schedule-id]").attr("data-hmbkp-schedule-id"),a(".hmbkp-schedule-sentence.hmbkp-running").length?c.hmbkp_is_in_progress=!0:c.hmbkp_client_request="site_size"}),a(document).on("heartbeat-tick",function(b,c){if(0!==c.hmbkp_schedule_status||a(".hmbkp-error").length||location.reload(!0),0!==c.hmbkp_schedule_status&&void 0!==c.hmbkp_schedule_status&&a(".hmbkp-status").replaceWith(c.hmbkp_schedule_status),void 0!==c.hmbkp_site_size&&a("code.calculating").length){a("code.calculating").text(c.hmbkp_site_size);var d=a(".hmbkp-exclude-settings");d.length&&d.replaceWith(c.hmbkp_dir_sizes)}}),a(document).on("click",".hmbkp-thickbox-close",function(a){a.preventDefault(),window.parent.tb_remove()}),a(document).on("click",'[id^="hmbkp-warning-"] .notice-dismiss',function(){a.post(ajaxurl,{action:"hmbkp_dismiss_error"})})}function c(a){a="undefined"!=typeof a?a:"manually";var b=jQuery(".recurring-setting"),c=jQuery("#schedule-start"),d=jQuery(".twice-js");switch(a){case"manually":b.hide();break;case"hourly":b.hide();break;case"daily":b.hide(),c.show(),d.hide();break;case"twicedaily":b.hide(),c.show(),d.show();break;case"weekly":case"fortnightly":b.hide(),jQuery("#start-day").show(),c.show(),d.hide();break;case"monthly":b.hide(),c.show(),jQuery("#start-date").show(),d.hide()}}var d;return{init:b}}(jQuery);jQuery(document).ready(BackUpWordPressAdmin.init);
1
+ var BackUpWordPressAdmin=function(e){"use strict";function t(){n=e("select#hmbkp_schedule_recurrence_type"),e.ajaxSetup({cache:!1}),n.length&&(c(n.val()),e(document).on("change","select#hmbkp_schedule_recurrence_type",function(){c(e(this).val())})),e(".notice.is-dismissible").on("click",".notice-dismiss",function(){e.post(ajaxurl,{action:"hmbkp_dismiss_notice"})}),e(document).on("click",".hmbkp-schedule-actions .delete-action",function(e){confirm(hmbkp.delete_schedule)||e.preventDefault()}),e(document).on("click",".hmbkp_manage_backups_row .delete-action",function(e){confirm(hmbkp.delete_backup)||e.preventDefault()}),e(document).on("click",".hmbkp-edit-schedule-excludes-form .delete-action",function(e){confirm(hmbkp.remove_exclude_rule)||e.preventDefault()}),e.post(ajaxurl,{nonce:hmbkp.nonce,action:"hmbkp_cron_test"},function(t){"1"!==t&&e(".wrap > h2").after(t)}),e(document).on("click",".hmbkp-run",function(t){wp.heartbeat.interval("fast"),e(this).closest(".hmbkp-schedule-sentence").addClass("hmbkp-running"),e(".hmbkp-error").removeClass("hmbkp-error");var c=e("[data-hmbkp-schedule-id]").attr("data-hmbkp-schedule-id");e.post(ajaxurl,{hmbkp_run_schedule_nonce:hmbkp.hmbkp_run_schedule_nonce,action:"hmbkp_run_schedule",hmbkp_schedule_id:c}),t.preventDefault()}),e(document).on("heartbeat-send",function(t,c){c.hmbkp_schedule_id=e("[data-hmbkp-schedule-id]").attr("data-hmbkp-schedule-id"),e(".hmbkp-schedule-sentence.hmbkp-running").length?c.hmbkp_is_in_progress=!0:c.hmbkp_client_request="site_size"}),e(document).on("heartbeat-tick",function(t,c){if(0!==c.hmbkp_schedule_status||e(".hmbkp-error").length||location.reload(!0),0!==c.hmbkp_schedule_status&&void 0!==c.hmbkp_schedule_status&&e(".hmbkp-status").replaceWith(c.hmbkp_schedule_status),void 0!==c.hmbkp_site_size&&e("code.calculating").length){e("code.calculating").text(c.hmbkp_site_size);var n=e(".hmbkp-exclude-settings");n.length&&n.replaceWith(c.hmbkp_dir_sizes)}}),e(document).on("click",".hmbkp-thickbox-close",function(e){e.preventDefault(),window.parent.tb_remove()}),e(document).on("click",'[id^="hmbkp-warning-"] .notice-dismiss',function(){e.post(ajaxurl,{action:"hmbkp_dismiss_error"})})}function c(e){e=void 0!==e?e:"manually";var t=jQuery(".recurring-setting"),c=jQuery("#schedule-start"),n=jQuery(".twice-js");switch(e){case"manually":case"hourly":t.hide();break;case"daily":t.hide(),c.show(),n.hide();break;case"twicedaily":t.hide(),c.show(),n.show();break;case"weekly":case"fortnightly":t.hide(),jQuery("#start-day").show(),c.show(),n.hide();break;case"monthly":t.hide(),c.show(),jQuery("#start-date").show(),n.hide()}}var n;return{init:t}}(jQuery);jQuery(document).ready(BackUpWordPressAdmin.init);
backupwordpress.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: BackUpWordPress
4
  Plugin URI: http://bwp.hmn.md/
5
  Description: Simple automated backups of your WordPress powered website. Once activated you'll find me under <strong>Tools &rarr; Backups</strong>. On multisite, you'll find me under the Network Settings menu.
6
- Version: 3.6.3.1
7
  Author: Human Made Limited
8
  Author URI: http://hmn.md/
9
  License: GPL-2+
3
  Plugin Name: BackUpWordPress
4
  Plugin URI: http://bwp.hmn.md/
5
  Description: Simple automated backups of your WordPress powered website. Once activated you'll find me under <strong>Tools &rarr; Backups</strong>. On multisite, you'll find me under the Network Settings menu.
6
+ Version: 3.6.4
7
  Author: Human Made Limited
8
  Author URI: http://hmn.md/
9
  License: GPL-2+
classes/class-excludes.php CHANGED
@@ -29,10 +29,11 @@ class Excludes {
29
  '.bzr',
30
  '.git',
31
  '.hg',
 
32
  'backupwp',
33
  'backwpup-*',
34
  'updraft',
35
- '(?:wp-)?snapshots?', // wp-snapshots, snapshots, snapshot
36
  'backupbuddy_backups',
37
  'pb_backupbuddy',
38
  'backup-db',
29
  '.bzr',
30
  '.git',
31
  '.hg',
32
+ '.log',
33
  'backupwp',
34
  'backwpup-*',
35
  'updraft',
36
+ 'wp-snapshots',
37
  'backupbuddy_backups',
38
  'pb_backupbuddy',
39
  'backup-db',
classes/class-path.php CHANGED
@@ -275,6 +275,29 @@ class Path {
275
  */
276
  public function calculate_path() {
277
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278
  $paths = array();
279
 
280
  // If we have a custom path then try to use it.
@@ -293,13 +316,7 @@ class Path {
293
  // If that didn't work then fallback to a new directory in uploads.
294
  $paths[] = $this->get_fallback_path();
295
 
296
- // Loop through possible paths, use the first one that exists/can be created and is writable.
297
- foreach ( $paths as $path ) {
298
- if ( wp_mkdir_p( $path ) && file_exists( $path ) && wp_is_writable( $path ) ) { // Also handles fixing perms / directory already exists.
299
- $this->path = $path;
300
- break;
301
- }
302
- }
303
  }
304
 
305
  /**
@@ -410,7 +427,6 @@ class Path {
410
  if ( false !== strpos( $from, WP_CONTENT_DIR ) && Path::get_path() !== $from ) {
411
  rmdirtree( $from );
412
  }
413
-
414
  }
415
 
416
  /**
275
  */
276
  public function calculate_path() {
277
 
278
+ $paths = $this->get_possible_paths();
279
+
280
+ // Loop through possible paths, use the first one that exists/can be created and is writable.
281
+ foreach ( $paths as $path ) {
282
+ // Also handles fixing perms / directory already exists.
283
+ if ( wp_mkdir_p( $path ) && wp_is_writable( $path ) ) {
284
+ break;
285
+ }
286
+ }
287
+
288
+ /**
289
+ * If we managed to create a writable path then use that,
290
+ * otherwise just return the unwritable path.
291
+ */
292
+ if ( file_exists( $path ) && wp_is_writable( $path ) ) {
293
+ $this->path = $path;
294
+ } else {
295
+ $this->path = reset( $paths );
296
+ }
297
+ }
298
+
299
+ public function get_possible_paths() {
300
+
301
  $paths = array();
302
 
303
  // If we have a custom path then try to use it.
316
  // If that didn't work then fallback to a new directory in uploads.
317
  $paths[] = $this->get_fallback_path();
318
 
319
+ return $paths;
 
 
 
 
 
 
320
  }
321
 
322
  /**
427
  if ( false !== strpos( $from, WP_CONTENT_DIR ) && Path::get_path() !== $from ) {
428
  rmdirtree( $from );
429
  }
 
430
  }
431
 
432
  /**
classes/class-plugin.php CHANGED
@@ -6,7 +6,7 @@ namespace HM\BackUpWordPress;
6
  * Class Plugin
7
  */
8
  final class Plugin {
9
- const PLUGIN_VERSION = '3.6.3.1';
10
 
11
  /**
12
  * @var Plugin The singleton instance.
@@ -443,7 +443,7 @@ final class Plugin {
443
  /* translators: %1$s and %2$s expand to anchor tags linking to the new extensions page. */
444
  $info_message = sprintf(
445
  __( 'Thanks for updating BackUpWordPress, why not check out %1$sour extensions?%2$s', 'backupwordpress' ),
446
- '<a href="' . esc_url( get_settings_url( HMBKP_PLUGIN_SLUG . '_extensions' ) ) . '">',
447
  '</a>'
448
  );
449
  ?>
6
  * Class Plugin
7
  */
8
  final class Plugin {
9
+ const PLUGIN_VERSION = '3.6.4';
10
 
11
  /**
12
  * @var Plugin The singleton instance.
443
  /* translators: %1$s and %2$s expand to anchor tags linking to the new extensions page. */
444
  $info_message = sprintf(
445
  __( 'Thanks for updating BackUpWordPress, why not check out %1$sour extensions?%2$s', 'backupwordpress' ),
446
+ '<a href="https://bwp.hmn.md/" target="_blank">',
447
  '</a>'
448
  );
449
  ?>
classes/class-requirement.php CHANGED
@@ -281,7 +281,10 @@ class Requirement_Backup_Path_Permissions extends Requirement {
281
  * @return string
282
  */
283
  public static function test() {
284
- return substr( sprintf( '%o', fileperms( Path::get_path() ) ), - 4 );
 
 
 
285
  }
286
  }
287
  Requirements::register( 'HM\BackUpWordPress\Requirement_Backup_Path_Permissions', 'Site' );
281
  * @return string
282
  */
283
  public static function test() {
284
+ if ( is_readable( PATH::get_path() ) ) {
285
+ return substr( sprintf( '%o', fileperms( Path::get_path() ) ), - 4 );
286
+ }
287
+ return 'Unreadable';
288
  }
289
  }
290
  Requirements::register( 'HM\BackUpWordPress\Requirement_Backup_Path_Permissions', 'Site' );
classes/class-site-size.php CHANGED
@@ -8,7 +8,7 @@ use Symfony\Component\Finder\Finder;
8
  /**
9
  * Site Size class
10
  *
11
- * Use to calculate the total or partial size of the sites database and files.
12
  */
13
  class Site_Size {
14
 
8
  /**
9
  * Site Size class
10
  *
11
+ * Use to calculate the total or partial size of the site's database and files.
12
  */
13
  class Site_Size {
14
 
composer.json DELETED
@@ -1,26 +0,0 @@
1
- {
2
- "name" : "humanmade/backupwordpress",
3
- "description": "Simple automated backups of your WordPress powered website.",
4
- "keywords" : [
5
- "wordpress",
6
- "backup"
7
- ],
8
- "type" : "wordpress-plugin",
9
- "homepage" : "https://github.com/humanmade/backupwordpress",
10
- "license" : "GPL-2.0",
11
- "authors" : [
12
- {
13
- "name" : "Human Made Limited",
14
- "email" : "backupwordpress@hmn.md",
15
- "homepage": "https://bwp.hmn.md/"
16
- }
17
- ],
18
- "support" : {
19
- "issues": "https://github.com/humanmade/backupwordpress/issues"
20
- },
21
- "require": {
22
- "symfony/finder": "~2.8",
23
- "symfony/process": "~2.8",
24
- "ifsnop/mysqldump-php":"~2.1"
25
- }
26
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
composer.lock DELETED
@@ -1,169 +0,0 @@
1
- {
2
- "_readme": [
3
- "This file locks the dependencies of your project to a known state",
4
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5
- "This file is @generated automatically"
6
- ],
7
- "hash": "931f56cb09266580e6ee25c07195beed",
8
- "content-hash": "178e95a25ce4467f191024f0a677b2df",
9
- "packages": [
10
- {
11
- "name": "ifsnop/mysqldump-php",
12
- "version": "v2.2",
13
- "source": {
14
- "type": "git",
15
- "url": "https://github.com/ifsnop/mysqldump-php.git",
16
- "reference": "6c1b84c5b05d862d15ba9ddf92c7d99a3d81e439"
17
- },
18
- "dist": {
19
- "type": "zip",
20
- "url": "https://api.github.com/repos/ifsnop/mysqldump-php/zipball/6c1b84c5b05d862d15ba9ddf92c7d99a3d81e439",
21
- "reference": "6c1b84c5b05d862d15ba9ddf92c7d99a3d81e439",
22
- "shasum": ""
23
- },
24
- "require": {
25
- "php": ">=5.3.0"
26
- },
27
- "require-dev": {
28
- "phpunit/phpunit": "3.7.*",
29
- "squizlabs/php_codesniffer": "1.*"
30
- },
31
- "type": "library",
32
- "autoload": {
33
- "psr-4": {
34
- "Ifsnop\\": "src/Ifsnop/"
35
- }
36
- },
37
- "notification-url": "https://packagist.org/downloads/",
38
- "license": [
39
- "MIT"
40
- ],
41
- "authors": [
42
- {
43
- "name": "Diego Torres",
44
- "homepage": "https://github.com/ifsnop",
45
- "role": "Developer"
46
- }
47
- ],
48
- "description": "This is a php version of linux's mysqldump in terminal \"$ mysqldump -u username -p...\"",
49
- "homepage": "https://github.com/ifsnop/mysqldump-php",
50
- "keywords": [
51
- "backup",
52
- "database",
53
- "dump",
54
- "export",
55
- "mysql",
56
- "mysqldump",
57
- "pdo",
58
- "sqlite"
59
- ],
60
- "time": "2016-09-07 06:56:07"
61
- },
62
- {
63
- "name": "symfony/finder",
64
- "version": "v2.8.14",
65
- "source": {
66
- "type": "git",
67
- "url": "https://github.com/symfony/finder.git",
68
- "reference": "0023b024363dfc0cd21262e556f25a291fe8d7fd"
69
- },
70
- "dist": {
71
- "type": "zip",
72
- "url": "https://api.github.com/repos/symfony/finder/zipball/0023b024363dfc0cd21262e556f25a291fe8d7fd",
73
- "reference": "0023b024363dfc0cd21262e556f25a291fe8d7fd",
74
- "shasum": ""
75
- },
76
- "require": {
77
- "php": ">=5.3.9"
78
- },
79
- "type": "library",
80
- "extra": {
81
- "branch-alias": {
82
- "dev-master": "2.8-dev"
83
- }
84
- },
85
- "autoload": {
86
- "psr-4": {
87
- "Symfony\\Component\\Finder\\": ""
88
- },
89
- "exclude-from-classmap": [
90
- "/Tests/"
91
- ]
92
- },
93
- "notification-url": "https://packagist.org/downloads/",
94
- "license": [
95
- "MIT"
96
- ],
97
- "authors": [
98
- {
99
- "name": "Fabien Potencier",
100
- "email": "fabien@symfony.com"
101
- },
102
- {
103
- "name": "Symfony Community",
104
- "homepage": "https://symfony.com/contributors"
105
- }
106
- ],
107
- "description": "Symfony Finder Component",
108
- "homepage": "https://symfony.com",
109
- "time": "2016-11-03 07:52:58"
110
- },
111
- {
112
- "name": "symfony/process",
113
- "version": "v2.8.14",
114
- "source": {
115
- "type": "git",
116
- "url": "https://github.com/symfony/process.git",
117
- "reference": "024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f"
118
- },
119
- "dist": {
120
- "type": "zip",
121
- "url": "https://api.github.com/repos/symfony/process/zipball/024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f",
122
- "reference": "024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f",
123
- "shasum": ""
124
- },
125
- "require": {
126
- "php": ">=5.3.9"
127
- },
128
- "type": "library",
129
- "extra": {
130
- "branch-alias": {
131
- "dev-master": "2.8-dev"
132
- }
133
- },
134
- "autoload": {
135
- "psr-4": {
136
- "Symfony\\Component\\Process\\": ""
137
- },
138
- "exclude-from-classmap": [
139
- "/Tests/"
140
- ]
141
- },
142
- "notification-url": "https://packagist.org/downloads/",
143
- "license": [
144
- "MIT"
145
- ],
146
- "authors": [
147
- {
148
- "name": "Fabien Potencier",
149
- "email": "fabien@symfony.com"
150
- },
151
- {
152
- "name": "Symfony Community",
153
- "homepage": "https://symfony.com/contributors"
154
- }
155
- ],
156
- "description": "Symfony Process Component",
157
- "homepage": "https://symfony.com",
158
- "time": "2016-09-29 14:03:54"
159
- }
160
- ],
161
- "packages-dev": [],
162
- "aliases": [],
163
- "minimum-stability": "stable",
164
- "stability-flags": [],
165
- "prefer-stable": false,
166
- "prefer-lowest": false,
167
- "platform": [],
168
- "platform-dev": []
169
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
functions/core.php CHANGED
@@ -393,17 +393,17 @@ function rmdirtree( $dir ) {
393
  @rmdir( $dir );
394
 
395
  return true;
 
396
  }
397
 
398
  /**
399
- * Check if a backup is possible with regards to file
400
- * permissions etc.
401
  *
402
  * @return bool
403
  */
404
- function is_backup_possible() {
405
 
406
- if ( ! wp_is_writable( Path::get_path() ) || ! is_dir( Path::get_path() ) ) {
407
  return false;
408
  }
409
 
@@ -411,6 +411,21 @@ function is_backup_possible() {
411
  return false;
412
  }
413
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
414
  if ( ! Requirement_Mysqldump_Command_Path::test() && ! Requirement_PDO::test() ) {
415
  return false;
416
  }
393
  @rmdir( $dir );
394
 
395
  return true;
396
+
397
  }
398
 
399
  /**
400
+ * Check if we have read and write permission on the server
 
401
  *
402
  * @return bool
403
  */
404
+ function has_server_permissions() {
405
 
406
+ if ( ! wp_is_writable( Path::get_path() ) ) {
407
  return false;
408
  }
409
 
411
  return false;
412
  }
413
 
414
+ return true;
415
+ }
416
+
417
+ /**
418
+ * Check if a backup is possible with regards to file
419
+ * permissions etc.
420
+ *
421
+ * @return bool
422
+ */
423
+ function is_backup_possible() {
424
+
425
+ if ( ! has_server_permissions() || ! is_dir( Path::get_path() ) ) {
426
+ return false;
427
+ }
428
+
429
  if ( ! Requirement_Mysqldump_Command_Path::test() && ! Requirement_PDO::test() ) {
430
  return false;
431
  }
functions/interface.php CHANGED
@@ -33,7 +33,19 @@ function get_backup_row( $file, Scheduled_Backup $schedule ) {
33
  <a href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'hmbkp_backup_archive' => $encoded_file, 'hmbkp_schedule_id' => $schedule->get_id(), 'action' => 'hmbkp_request_download_backup' ), admin_url( 'admin-post.php' ) ), 'hmbkp_download_backup', 'hmbkp_download_backup_nonce' ) ); ?>" class="download-action"><?php _e( 'Download', 'backupwordpress' ); ?></a> |
34
  <?php endif; ?>
35
 
36
- <a href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'hmbkp_backup_archive' => $encoded_file, 'hmbkp_schedule_id' => $schedule->get_id(), 'action' => 'hmbkp_request_delete_backup' ), admin_url( 'admin-post.php' ) ), 'hmbkp_delete_backup', 'hmbkp_delete_backup_nonce' ) ); ?>" class="delete-action"><?php _e( 'Delete', 'backupwordpress' ); ?></a>
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
  </td>
39
 
@@ -42,8 +54,7 @@ function get_backup_row( $file, Scheduled_Backup $schedule ) {
42
  <?php }
43
 
44
  /**
45
- * Displays admin notices for various error / warning
46
- * conditions
47
  *
48
  * @return void
49
  */
@@ -78,9 +89,7 @@ function admin_notices() {
78
  <ul>
79
 
80
  <?php foreach ( $notices['backup_errors'] as $notice ) : ?>
81
-
82
  <li><pre><?php echo esc_html( $notice ); ?></pre></li>
83
-
84
  <?php endforeach; ?>
85
 
86
  </ul>
@@ -97,7 +106,12 @@ function admin_notices() {
97
 
98
  <?php foreach ( $notices['server_config'] as $notice ) : ?>
99
 
100
- <li><?php echo wp_kses_data( $notice ); ?></li>
 
 
 
 
 
101
 
102
  <?php endforeach; ?>
103
 
@@ -139,65 +153,110 @@ add_action( 'network_admin_notices', 'HM\BackUpWordPress\admin_notices' );
139
 
140
  function set_server_config_notices() {
141
 
142
- $notices = Notices::get_instance();
143
-
144
  $messages = array();
145
 
146
- if ( ! is_dir( Path::get_path() ) ) {
147
- $messages[] = sprintf( __( 'The backups directory can\'t be created because your %s directory isn\'t writable. Please create the folder manually.', 'backupwordpress' ), '<code>' . esc_html( dirname( Path::get_path() ) ) . '</code>' );
148
- }
149
-
150
- if ( is_dir( Path::get_path() ) && ! wp_is_writable( Path::get_path() ) ) {
151
- $messages[] = __( 'The backups directory isn\'t writable. Please fix the permissions.', 'backupwordpress' );
152
- }
153
-
154
  if ( Backup_Utilities::is_safe_mode_on() ) {
155
- $messages[] = sprintf( __( '%1$s is running in %2$s, please contact your host and ask them to disable it. BackUpWordPress may not work correctly whilst %3$s is on.', 'backupwordpress' ), '<code>PHP</code>', sprintf( '<a href="%1$s">%2$s</a>', __( 'http://php.net/manual/en/features.safe-mode.php', 'backupwordpress' ), __( 'Safe Mode', 'backupwordpress' ) ), '<code>' . __( 'Safe Mode', 'backupwordpress' ) . '</code>' );
 
 
 
 
 
156
  }
157
 
158
  if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH ) {
159
 
160
  // Suppress open_basedir warning https://bugs.php.net/bug.php?id=53041
161
  if ( ! path_in_php_open_basedir( HMBKP_PATH ) ) {
162
- $messages[] = sprintf( __( 'Your server has an %1$s restriction in effect and your custom backups directory (%2$s) is not within the allowed path(s): (%3$s).', 'backupwordpress' ), '<code>open_basedir</code>', '<code>' . esc_html( HMBKP_PATH ) . '</code>', '<code>' . esc_html( @ini_get( 'open_basedir' ) ) . '</code>' );
163
 
164
- } elseif ( ! file_exists( HMBKP_PATH ) ) {
165
- $messages[] = sprintf( __( 'Your custom path does not exist', 'backupwordpress' ) );
 
 
 
 
166
 
167
- } else {
168
 
169
- if ( ! is_dir( HMBKP_PATH ) ) {
170
- $messages[] = sprintf( __( 'Your custom backups directory %1$s doesn\'t exist and can\'t be created, your backups will be saved to %2$s instead.', 'backupwordpress' ), '<code>' . esc_html( HMBKP_PATH ) . '</code>', '<code>' . esc_html( Path::get_path() ) . '</code>' );
171
- }
 
 
172
 
173
- if ( is_dir( HMBKP_PATH ) && ! wp_is_writable( HMBKP_PATH ) ) {
174
- $messages[] = sprintf( __( 'Your custom backups directory %1$s isn\'t writable, new backups will be saved to %2$s instead.', 'backupwordpress' ), '<code>' . esc_html( HMBKP_PATH ) . '</code>', '<code>' . esc_html( Path::get_path() ) . '</code>' );
175
 
176
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  }
178
  }
179
 
180
  if ( ! is_readable( Path::get_root() ) ) {
181
- $messages[] = sprintf( __( 'Your site root path %s isn\'t readable.', 'backupwordpress' ), '<code>' . Path::get_root() . '</code>' );
 
 
 
 
182
  }
183
 
184
  if ( ! Requirement_Mysqldump_Command_Path::test() && ! Requirement_PDO::test() ) {
185
- $messages[] = sprintf( __( 'Your site cannot be backed up because your server doesn\'t support %1$s or %2$s. Please contact your host and ask them to enable them.', 'backupwordpress' ), '<code>mysqldump</code>', '<code>PDO::mysql</code>' );
 
 
 
 
 
 
186
  }
187
 
188
  if ( ! Requirement_Zip_Command_Path::test() && ! Requirement_Zip_Archive::test() ) {
189
- $messages[] = sprintf( __( 'Your site cannot be backed up because your server doesn\'t support %1$s or %2$s. Please contact your host and ask them to enable them.', 'backupwordpress' ), '<code>zip</code>', '<code>ZipArchive</code>' );
 
 
 
 
 
 
190
  }
191
 
192
  if ( disk_space_low() ) {
193
- $messages[] = sprintf( __( 'Your server only has %s of disk space left which probably isn\'t enough to complete a backup. Try deleting some existing backups or other files to free up space.', 'backupwordpress' ), '<code>' . size_format( disk_free_space( Path::get_path() ) ) . '</code>' );
 
 
 
 
194
  }
195
 
196
  if ( count( $messages ) > 0 ) {
197
  $notices->set_notices( 'server_config', $messages, false );
198
  }
199
-
200
  }
 
201
  add_action( 'admin_init', 'HM\BackUpWordPress\set_server_config_notices' );
202
 
203
  /**
@@ -217,7 +276,6 @@ function plugin_row( $plugins ) {
217
  return $plugins;
218
 
219
  }
220
-
221
  add_filter( 'all_plugins', 'HM\BackUpWordPress\plugin_row', 10 );
222
 
223
  /**
@@ -460,6 +518,11 @@ function disk_space_low( $backup_size = false ) {
460
 
461
  }
462
 
463
- return $backup_size >= $disk_space;
 
 
 
 
464
 
 
465
  }
33
  <a href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'hmbkp_backup_archive' => $encoded_file, 'hmbkp_schedule_id' => $schedule->get_id(), 'action' => 'hmbkp_request_download_backup' ), admin_url( 'admin-post.php' ) ), 'hmbkp_download_backup', 'hmbkp_download_backup_nonce' ) ); ?>" class="download-action"><?php _e( 'Download', 'backupwordpress' ); ?></a> |
34
  <?php endif; ?>
35
 
36
+ <a href="<?php echo esc_url( wp_nonce_url(
37
+ add_query_arg( array(
38
+ 'hmbkp_backup_archive' => $encoded_file,
39
+ 'hmbkp_schedule_id' => $schedule->get_id(),
40
+ 'action' => 'hmbkp_request_delete_backup',
41
+ ),
42
+ admin_url( 'admin-post.php' )
43
+ ),
44
+ 'hmbkp_delete_backup',
45
+ 'hmbkp_delete_backup_nonce'
46
+ ) ); ?>" class="delete-action">
47
+ <?php esc_html_e( 'Delete', 'backupwordpress' ); ?>
48
+ </a>
49
 
50
  </td>
51
 
54
  <?php }
55
 
56
  /**
57
+ * Displays admin notices for various error / warning conditions.
 
58
  *
59
  * @return void
60
  */
89
  <ul>
90
 
91
  <?php foreach ( $notices['backup_errors'] as $notice ) : ?>
 
92
  <li><pre><?php echo esc_html( $notice ); ?></pre></li>
 
93
  <?php endforeach; ?>
94
 
95
  </ul>
106
 
107
  <?php foreach ( $notices['server_config'] as $notice ) : ?>
108
 
109
+ <li>
110
+ <?php print_whitelist_html(
111
+ $notice,
112
+ 'strong, b, i, em, code, a'
113
+ ); ?>
114
+ </li>
115
 
116
  <?php endforeach; ?>
117
 
153
 
154
  function set_server_config_notices() {
155
 
156
+ $notices = Notices::get_instance();
 
157
  $messages = array();
158
 
 
 
 
 
 
 
 
 
159
  if ( Backup_Utilities::is_safe_mode_on() ) {
160
+
161
+ $messages[] = sprintf(
162
+ /* translators: 1: The `PHP` abbreviation. */
163
+ __( '%1$s is running in <a href="http://php.net/manual/en/features.safe-mode.php">Safe Mode</a>, please contact your host and ask them to disable it. BackUpWordPress may not work correctly whilst <code>Safe Mode</code> is on.', 'backupwordpress' ),
164
+ '<code>PHP</code>'
165
+ );
166
  }
167
 
168
  if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH ) {
169
 
170
  // Suppress open_basedir warning https://bugs.php.net/bug.php?id=53041
171
  if ( ! path_in_php_open_basedir( HMBKP_PATH ) ) {
 
172
 
173
+ $messages[] = sprintf(
174
+ __( 'Your server has an %1$s restriction in effect and your custom backups directory (%2$s) is not within the allowed path(s): (%3$s).', 'backupwordpress' ),
175
+ '<code>open_basedir</code>',
176
+ '<code>' . esc_html( HMBKP_PATH ) . '</code>',
177
+ '<code>' . esc_html( @ini_get( 'open_basedir' ) ) . '</code>'
178
+ );
179
 
180
+ } elseif ( ! is_dir( HMBKP_PATH ) ) {
181
 
182
+ $messages[] = sprintf(
183
+ __( 'Your custom backups directory (%1$s) doesn&apos;t exist, your backups will be saved to %2$s instead.', 'backupwordpress' ),
184
+ '<code>' . esc_html( HMBKP_PATH ) . '</code>',
185
+ '<code>' . esc_html( Path::get_path() ) . '</code>'
186
+ );
187
 
188
+ } elseif ( is_dir( HMBKP_PATH ) && ! wp_is_writable( HMBKP_PATH ) ) {
 
189
 
190
+ $messages[] = sprintf(
191
+ __( 'Your custom backups directory (%1$s) isn&apos;t writable, new backups will be saved to %2$s instead.', 'backupwordpress' ),
192
+ '<code>' . esc_html( HMBKP_PATH ) . '</code>',
193
+ '<code>' . esc_html( Path::get_path() ) . '</code>'
194
+ );
195
+ }
196
+ }
197
+
198
+ if ( ! is_dir( Path::get_path() ) || is_dir( Path::get_path() ) && ! wp_is_writable( Path::get_path() ) ) {
199
+
200
+ if ( isset( $_GET['creation_error'] ) ) {
201
+
202
+ $messages[] = sprintf(
203
+ /* translators: 1: URL to BackupWordPress docs. */
204
+ __( 'We connected to your server successfully but still weren&apos;t able to automatically create the directory. You&apos;ll need to <a href="%1$s">manually specify a valid directory</a>', 'backupwordpress' ),
205
+ 'https://bwp.hmn.md/support-center/backupwordpress-faqs/#where'
206
+ );
207
+
208
+ } else {
209
+
210
+ $messages[] = sprintf(
211
+ /* translators: 1: Path to backup directory. 2: URL to BackupWordPress docs. */
212
+ __( 'We couldn&apos;t create the backups directory (%1$s). You&apos;ll need to <a href="%2$s">manually specify a valid directory</a> or you can have WordPress do it automatically by entering your server details below. This is a one time thing.', 'backupwordpress' ),
213
+ '<code>' . esc_html( Path::get_path() ) . '</code>',
214
+ 'https://bwp.hmn.md/support-center/backupwordpress-faqs/#where'
215
+ );
216
  }
217
  }
218
 
219
  if ( ! is_readable( Path::get_root() ) ) {
220
+
221
+ $messages[] = sprintf(
222
+ __( 'Your site&apos;s root path (%s) isn&apos;t readable. Please contact support.', 'backupwordpress' ),
223
+ '<code>' . Path::get_root() . '</code>'
224
+ );
225
  }
226
 
227
  if ( ! Requirement_Mysqldump_Command_Path::test() && ! Requirement_PDO::test() ) {
228
+
229
+ $messages[] = sprintf(
230
+ /* translators: FYI: specified MySQL features. */
231
+ __( 'Your site cannot be backed up because your server doesn&apos;t support %1$s or %2$s. Please contact your host and ask them to enable them.', 'backupwordpress' ),
232
+ '<code>mysqldump</code>',
233
+ '<code>PDO::mysql</code>'
234
+ );
235
  }
236
 
237
  if ( ! Requirement_Zip_Command_Path::test() && ! Requirement_Zip_Archive::test() ) {
238
+
239
+ $messages[] = sprintf(
240
+ /* translators: FYI: specified zip archiving features. */
241
+ __( 'Your site cannot be backed up because your server doesn&apos;t support %1$s or %2$s. Please contact your host and ask them to enable them.', 'backupwordpress' ),
242
+ '<code>zip</code>',
243
+ '<code>ZipArchive</code>'
244
+ );
245
  }
246
 
247
  if ( disk_space_low() ) {
248
+
249
+ $messages[] = sprintf(
250
+ __( 'Your server only has %s of disk space left which probably isn&apos;t enough to complete a backup. Try deleting some existing backups or other files to free up space.', 'backupwordpress' ),
251
+ '<code>' . size_format( disk_free_space( Path::get_path() ) ) . '</code>'
252
+ );
253
  }
254
 
255
  if ( count( $messages ) > 0 ) {
256
  $notices->set_notices( 'server_config', $messages, false );
257
  }
 
258
  }
259
+
260
  add_action( 'admin_init', 'HM\BackUpWordPress\set_server_config_notices' );
261
 
262
  /**
276
  return $plugins;
277
 
278
  }
 
279
  add_filter( 'all_plugins', 'HM\BackUpWordPress\plugin_row', 10 );
280
 
281
  /**
518
 
519
  }
520
 
521
+ if ( ! is_readable( Path::get_path() ) ) {
522
+ return false;
523
+ }
524
+
525
+ $disk_space = disk_free_space( Path::get_path() );
526
 
527
+ return $disk_space && $backup_size >= $disk_space;
528
  }
languages/backupwordpress.pot CHANGED
@@ -1,84 +1,84 @@
1
- # Copyright (C) 2016 Human Made Limited
2
  # This file is distributed under the GPL-2+.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: BackUpWordPress 3.6.3\n"
6
  "Report-Msgid-Bugs-To: backupwordpress@hmn.md\n"
7
- "POT-Creation-Date: 2016-11-28 17:11:19+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: Human Made Limited\n"
13
  "Language-Team: Human Made Limited\n"
14
- "X-Generator: grunt-wp-i18n 0.5.4\n"
15
 
16
- #: admin/actions.php:188
17
  msgid "The schedule ID was not provided. Aborting."
18
  msgstr ""
19
 
20
- #: admin/actions.php:243
21
  msgid "Backup type cannot be empty"
22
  msgstr ""
23
 
24
- #: admin/actions.php:245
25
  msgid "Invalid backup type"
26
  msgstr ""
27
 
28
- #: admin/actions.php:256
29
  msgid "Schedule cannot be empty"
30
  msgstr ""
31
 
32
- #: admin/actions.php:258
33
  msgid "Invalid schedule"
34
  msgstr ""
35
 
36
- #: admin/actions.php:269
37
  msgid "Day of the week must be a valid, lowercase day name"
38
  msgstr ""
39
 
40
- #: admin/actions.php:285
41
  msgid "Day of month must be between 1 and 31"
42
  msgstr ""
43
 
44
- #: admin/actions.php:301
45
  msgid "Hours must be between 0 and 23"
46
  msgstr ""
47
 
48
- #: admin/actions.php:317
49
  msgid "Minutes must be between 0 and 59"
50
  msgstr ""
51
 
52
- #: admin/actions.php:328
53
  msgid "Max backups can't be empty"
54
  msgstr ""
55
 
56
- #: admin/actions.php:330
57
  msgid "Max backups must be a number"
58
  msgstr ""
59
 
60
- #: admin/actions.php:332
61
  msgid "Max backups must be greater than 0"
62
  msgstr ""
63
 
64
- #: admin/actions.php:334
65
  msgid ""
66
  "Storing %s backups would use %s of disk space but your server only has %s "
67
  "free."
68
  msgstr ""
69
 
70
- #: admin/actions.php:636 admin/actions.php:642
71
  msgid "BackUpWordPress has detected a problem."
72
  msgstr ""
73
 
74
- #: admin/actions.php:636
75
  msgid ""
76
  "%1$s is returning a %2$s response which could mean cron jobs aren't getting "
77
  "fired properly. BackUpWordPress relies on wp-cron to run scheduled backups. "
78
  "See the %3$s for more details."
79
  msgstr ""
80
 
81
- #: admin/actions.php:642
82
  msgid ""
83
  "%1$s is returning a %2$s response which could mean cron jobs aren't getting "
84
  "fired properly. BackUpWordPress relies on wp-cron to run scheduled backups, "
@@ -478,12 +478,6 @@ msgstr ""
478
  msgid "Enable Support"
479
  msgstr ""
480
 
481
- #: admin/page.php:30
482
- msgid ""
483
- "If you're finding BackUpWordPress useful, please %1$s rate it on the plugin "
484
- "directory%2$s."
485
- msgstr ""
486
-
487
  #: admin/schedule-form-excludes.php:11
488
  msgid "Currently Excluded"
489
  msgstr ""
@@ -744,12 +738,18 @@ msgstr ""
744
  msgid "Excludes"
745
  msgstr ""
746
 
747
- #: admin/schedule-settings.php:34 functions/interface.php:36
748
  msgid "Delete"
749
  msgstr ""
750
 
751
- #: admin/upsell.php:9
752
- msgid "Store your backups securely in the Cloud with %1$sour extensions%2$s"
 
 
 
 
 
 
753
  msgstr ""
754
 
755
  #: classes/backup/class-backup.php:57
@@ -859,7 +859,7 @@ msgstr ""
859
  msgid "Unfortunately, the backup file was too large to attach to this email."
860
  msgstr ""
861
 
862
- #: classes/class-path.php:338
863
  msgid "This %s file ensures that other people cannot download your backup files."
864
  msgstr ""
865
 
@@ -905,15 +905,11 @@ msgid ""
905
  "extensions?%2$s"
906
  msgstr ""
907
 
908
- #: classes/class-plugin.php:455
909
- msgid "Dismiss this notice."
910
- msgstr ""
911
-
912
  #: classes/class-scheduled-backup.php:321
913
  msgid "Argument 1 for %s must be a valid cron recurrence or \"manually\""
914
  msgstr ""
915
 
916
- #: classes/class-scheduled-backup.php:427 functions/interface.php:267
917
  msgid "Starting backup..."
918
  msgstr ""
919
 
@@ -1015,182 +1011,182 @@ msgstr ""
1015
  msgid "Download"
1016
  msgstr ""
1017
 
1018
- #: functions/interface.php:75
1019
  msgid "BackUpWordPress detected issues with your last backup."
1020
  msgstr ""
1021
 
1022
- #: functions/interface.php:147
 
1023
  msgid ""
1024
- "The backups directory can't be created because your %s directory isn't "
1025
- "writable. Please create the folder manually."
1026
- msgstr ""
1027
-
1028
- #: functions/interface.php:151
1029
- msgid "The backups directory isn't writable. Please fix the permissions."
1030
  msgstr ""
1031
 
1032
- #: functions/interface.php:155
1033
  msgid ""
1034
- "%1$s is running in %2$s, please contact your host and ask them to disable "
1035
- "it. BackUpWordPress may not work correctly whilst %3$s is on."
1036
- msgstr ""
1037
-
1038
- #: functions/interface.php:155
1039
- msgid "http://php.net/manual/en/features.safe-mode.php"
1040
- msgstr ""
1041
-
1042
- #: functions/interface.php:155
1043
- msgid "Safe Mode"
1044
  msgstr ""
1045
 
1046
- #: functions/interface.php:162
1047
  msgid ""
1048
- "Your server has an %1$s restriction in effect and your custom backups "
1049
- "directory (%2$s) is not within the allowed path(s): (%3$s)."
1050
  msgstr ""
1051
 
1052
- #: functions/interface.php:165
1053
- msgid "Your custom path does not exist"
 
 
1054
  msgstr ""
1055
 
1056
- #: functions/interface.php:170
 
1057
  msgid ""
1058
- "Your custom backups directory %1$s doesn't exist and can't be created, your "
1059
- "backups will be saved to %2$s instead."
 
1060
  msgstr ""
1061
 
1062
- #: functions/interface.php:174
 
1063
  msgid ""
1064
- "Your custom backups directory %1$s isn't writable, new backups will be "
1065
- "saved to %2$s instead."
 
 
1066
  msgstr ""
1067
 
1068
- #: functions/interface.php:181
1069
- msgid "Your site root path %s isn't readable."
1070
  msgstr ""
1071
 
1072
- #: functions/interface.php:185 functions/interface.php:189
 
 
1073
  msgid ""
1074
- "Your site cannot be backed up because your server doesn't support %1$s or "
1075
- "%2$s. Please contact your host and ask them to enable them."
1076
  msgstr ""
1077
 
1078
- #: functions/interface.php:193
1079
  msgid ""
1080
- "Your server only has %s of disk space left which probably isn't enough to "
1081
- "complete a backup. Try deleting some existing backups or other files to "
1082
  "free up space."
1083
  msgstr ""
1084
 
1085
- #: functions/interface.php:234
1086
  msgid "Database and Files"
1087
  msgstr ""
1088
 
1089
- #: functions/interface.php:238
1090
  msgid "Files"
1091
  msgstr ""
1092
 
1093
- #: functions/interface.php:242
1094
  msgid "Database"
1095
  msgstr ""
1096
 
1097
- #: functions/interface.php:249
1098
  msgid "Legacy"
1099
  msgstr ""
1100
 
1101
- #: functions/interface.php:266
1102
  msgid "Started %s ago"
1103
  msgstr ""
1104
 
1105
- #: functions/interface.php:268
1106
  msgid "cancel"
1107
  msgstr ""
1108
 
1109
- #: functions/interface.php:286
1110
  msgid "No backups completed"
1111
  msgstr ""
1112
 
1113
- #: functions/interface.php:297
1114
  msgid "Complete Hourly"
1115
  msgstr ""
1116
 
1117
- #: functions/interface.php:298
1118
  msgid "File Hourly"
1119
  msgstr ""
1120
 
1121
- #: functions/interface.php:299
1122
  msgid "Database Hourly"
1123
  msgstr ""
1124
 
1125
- #: functions/interface.php:300
1126
  msgid "Complete Twice Daily"
1127
  msgstr ""
1128
 
1129
- #: functions/interface.php:301
1130
  msgid "File Twice Daily"
1131
  msgstr ""
1132
 
1133
- #: functions/interface.php:302
1134
  msgid "Database Twice Daily"
1135
  msgstr ""
1136
 
1137
- #: functions/interface.php:303
1138
  msgid "Complete Daily"
1139
  msgstr ""
1140
 
1141
- #: functions/interface.php:304
1142
  msgid "File Daily"
1143
  msgstr ""
1144
 
1145
- #: functions/interface.php:305
1146
  msgid "Database Daily"
1147
  msgstr ""
1148
 
1149
- #: functions/interface.php:306
1150
  msgid "Complete Weekly"
1151
  msgstr ""
1152
 
1153
- #: functions/interface.php:307
1154
  msgid "File Weekly"
1155
  msgstr ""
1156
 
1157
- #: functions/interface.php:308
1158
  msgid "Database Weekly"
1159
  msgstr ""
1160
 
1161
- #: functions/interface.php:309
1162
  msgid "Complete Every Two Weeks"
1163
  msgstr ""
1164
 
1165
- #: functions/interface.php:310
1166
  msgid "File Every Two Weeks"
1167
  msgstr ""
1168
 
1169
- #: functions/interface.php:311
1170
  msgid "Database Every Two Weeks"
1171
  msgstr ""
1172
 
1173
- #: functions/interface.php:312
1174
  msgid "Complete Monthly"
1175
  msgstr ""
1176
 
1177
- #: functions/interface.php:313
1178
  msgid "File Monthly"
1179
  msgstr ""
1180
 
1181
- #: functions/interface.php:314
1182
  msgid "Database Monthly"
1183
  msgstr ""
1184
 
1185
- #: functions/interface.php:315
1186
  msgid "Complete Manually"
1187
  msgstr ""
1188
 
1189
- #: functions/interface.php:316
1190
  msgid "File Manually"
1191
  msgstr ""
1192
 
1193
- #: functions/interface.php:317
1194
  msgid "Database Manually"
1195
  msgstr ""
1196
 
@@ -1225,7 +1221,7 @@ msgctxt ""
1225
  msgid "Backup my %1$s %2$s %3$s, %4$s."
1226
  msgstr ""
1227
 
1228
- #: functions/interface.php:288
1229
  msgctxt "backups count"
1230
  msgid "One backup completed"
1231
  msgid_plural "%1$s backups completed"
1
+ # Copyright (C) 2017 Human Made Limited
2
  # This file is distributed under the GPL-2+.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: BackUpWordPress 3.6.3.1\n"
6
  "Report-Msgid-Bugs-To: backupwordpress@hmn.md\n"
7
+ "POT-Creation-Date: 2017-06-02 14:11:45+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: Human Made Limited\n"
13
  "Language-Team: Human Made Limited\n"
14
+ "X-Generator: grunt-wp-i18n1.0.0\n"
15
 
16
+ #: admin/actions.php:234
17
  msgid "The schedule ID was not provided. Aborting."
18
  msgstr ""
19
 
20
+ #: admin/actions.php:289
21
  msgid "Backup type cannot be empty"
22
  msgstr ""
23
 
24
+ #: admin/actions.php:291
25
  msgid "Invalid backup type"
26
  msgstr ""
27
 
28
+ #: admin/actions.php:302
29
  msgid "Schedule cannot be empty"
30
  msgstr ""
31
 
32
+ #: admin/actions.php:304
33
  msgid "Invalid schedule"
34
  msgstr ""
35
 
36
+ #: admin/actions.php:315
37
  msgid "Day of the week must be a valid, lowercase day name"
38
  msgstr ""
39
 
40
+ #: admin/actions.php:331
41
  msgid "Day of month must be between 1 and 31"
42
  msgstr ""
43
 
44
+ #: admin/actions.php:347
45
  msgid "Hours must be between 0 and 23"
46
  msgstr ""
47
 
48
+ #: admin/actions.php:363
49
  msgid "Minutes must be between 0 and 59"
50
  msgstr ""
51
 
52
+ #: admin/actions.php:374
53
  msgid "Max backups can't be empty"
54
  msgstr ""
55
 
56
+ #: admin/actions.php:376
57
  msgid "Max backups must be a number"
58
  msgstr ""
59
 
60
+ #: admin/actions.php:378
61
  msgid "Max backups must be greater than 0"
62
  msgstr ""
63
 
64
+ #: admin/actions.php:380
65
  msgid ""
66
  "Storing %s backups would use %s of disk space but your server only has %s "
67
  "free."
68
  msgstr ""
69
 
70
+ #: admin/actions.php:682 admin/actions.php:688
71
  msgid "BackUpWordPress has detected a problem."
72
  msgstr ""
73
 
74
+ #: admin/actions.php:682
75
  msgid ""
76
  "%1$s is returning a %2$s response which could mean cron jobs aren't getting "
77
  "fired properly. BackUpWordPress relies on wp-cron to run scheduled backups. "
78
  "See the %3$s for more details."
79
  msgstr ""
80
 
81
+ #: admin/actions.php:688
82
  msgid ""
83
  "%1$s is returning a %2$s response which could mean cron jobs aren't getting "
84
  "fired properly. BackUpWordPress relies on wp-cron to run scheduled backups, "
478
  msgid "Enable Support"
479
  msgstr ""
480
 
 
 
 
 
 
 
481
  #: admin/schedule-form-excludes.php:11
482
  msgid "Currently Excluded"
483
  msgstr ""
738
  msgid "Excludes"
739
  msgstr ""
740
 
741
+ #: admin/schedule-settings.php:34 functions/interface.php:47
742
  msgid "Delete"
743
  msgstr ""
744
 
745
+ #: admin/upsell.php:7
746
+ msgid ""
747
+ "If you're finding BackUpWordPress useful, please %1$s rate it on the plugin "
748
+ "directory%2$s."
749
+ msgstr ""
750
+
751
+ #: admin/upsell.php:14 classes/class-plugin.php:455
752
+ msgid "Dismiss this notice."
753
  msgstr ""
754
 
755
  #: classes/backup/class-backup.php:57
859
  msgid "Unfortunately, the backup file was too large to attach to this email."
860
  msgstr ""
861
 
862
+ #: classes/class-path.php:355
863
  msgid "This %s file ensures that other people cannot download your backup files."
864
  msgstr ""
865
 
905
  "extensions?%2$s"
906
  msgstr ""
907
 
 
 
 
 
908
  #: classes/class-scheduled-backup.php:321
909
  msgid "Argument 1 for %s must be a valid cron recurrence or \"manually\""
910
  msgstr ""
911
 
912
+ #: classes/class-scheduled-backup.php:427 functions/interface.php:325
913
  msgid "Starting backup..."
914
  msgstr ""
915
 
1011
  msgid "Download"
1012
  msgstr ""
1013
 
1014
+ #: functions/interface.php:86
1015
  msgid "BackUpWordPress detected issues with your last backup."
1016
  msgstr ""
1017
 
1018
+ #: functions/interface.php:163
1019
+ #. translators: 1: The `PHP` abbreviation.
1020
  msgid ""
1021
+ "%1$s is running in <a "
1022
+ "href=\"http://php.net/manual/en/features.safe-mode.php\">Safe Mode</a>, "
1023
+ "please contact your host and ask them to disable it. BackUpWordPress may "
1024
+ "not work correctly whilst <code>Safe Mode</code> is on."
 
 
1025
  msgstr ""
1026
 
1027
+ #: functions/interface.php:174
1028
  msgid ""
1029
+ "Your server has an %1$s restriction in effect and your custom backups "
1030
+ "directory (%2$s) is not within the allowed path(s): (%3$s)."
 
 
 
 
 
 
 
 
1031
  msgstr ""
1032
 
1033
+ #: functions/interface.php:183
1034
  msgid ""
1035
+ "Your custom backups directory (%1$s) doesn&apos;t exist, your backups will "
1036
+ "be saved to %2$s instead."
1037
  msgstr ""
1038
 
1039
+ #: functions/interface.php:191
1040
+ msgid ""
1041
+ "Your custom backups directory (%1$s) isn&apos;t writable, new backups will "
1042
+ "be saved to %2$s instead."
1043
  msgstr ""
1044
 
1045
+ #: functions/interface.php:204
1046
+ #. translators: 1: URL to BackupWordPress docs.
1047
  msgid ""
1048
+ "We connected to your server successfully but still weren&apos;t able to "
1049
+ "automatically create the directory. You&apos;ll need to <a "
1050
+ "href=\"%1$s\">manually specify a valid directory</a>"
1051
  msgstr ""
1052
 
1053
+ #: functions/interface.php:212
1054
+ #. translators: 1: Path to backup directory. 2: URL to BackupWordPress docs.
1055
  msgid ""
1056
+ "We couldn&apos;t create the backups directory (%1$s). You&apos;ll need to "
1057
+ "<a href=\"%2$s\">manually specify a valid directory</a> or you can have "
1058
+ "WordPress do it automatically by entering your server details below. This "
1059
+ "is a one time thing."
1060
  msgstr ""
1061
 
1062
+ #: functions/interface.php:222
1063
+ msgid "Your site&apos;s root path (%s) isn&apos;t readable. Please contact support."
1064
  msgstr ""
1065
 
1066
+ #: functions/interface.php:231 functions/interface.php:241
1067
+ #. translators: FYI: specified MySQL features.
1068
+ #. translators: FYI: specified zip archiving features.
1069
  msgid ""
1070
+ "Your site cannot be backed up because your server doesn&apos;t support %1$s "
1071
+ "or %2$s. Please contact your host and ask them to enable them."
1072
  msgstr ""
1073
 
1074
+ #: functions/interface.php:250
1075
  msgid ""
1076
+ "Your server only has %s of disk space left which probably isn&apos;t enough "
1077
+ "to complete a backup. Try deleting some existing backups or other files to "
1078
  "free up space."
1079
  msgstr ""
1080
 
1081
+ #: functions/interface.php:292
1082
  msgid "Database and Files"
1083
  msgstr ""
1084
 
1085
+ #: functions/interface.php:296
1086
  msgid "Files"
1087
  msgstr ""
1088
 
1089
+ #: functions/interface.php:300
1090
  msgid "Database"
1091
  msgstr ""
1092
 
1093
+ #: functions/interface.php:307
1094
  msgid "Legacy"
1095
  msgstr ""
1096
 
1097
+ #: functions/interface.php:324
1098
  msgid "Started %s ago"
1099
  msgstr ""
1100
 
1101
+ #: functions/interface.php:326
1102
  msgid "cancel"
1103
  msgstr ""
1104
 
1105
+ #: functions/interface.php:344
1106
  msgid "No backups completed"
1107
  msgstr ""
1108
 
1109
+ #: functions/interface.php:355
1110
  msgid "Complete Hourly"
1111
  msgstr ""
1112
 
1113
+ #: functions/interface.php:356
1114
  msgid "File Hourly"
1115
  msgstr ""
1116
 
1117
+ #: functions/interface.php:357
1118
  msgid "Database Hourly"
1119
  msgstr ""
1120
 
1121
+ #: functions/interface.php:358
1122
  msgid "Complete Twice Daily"
1123
  msgstr ""
1124
 
1125
+ #: functions/interface.php:359
1126
  msgid "File Twice Daily"
1127
  msgstr ""
1128
 
1129
+ #: functions/interface.php:360
1130
  msgid "Database Twice Daily"
1131
  msgstr ""
1132
 
1133
+ #: functions/interface.php:361
1134
  msgid "Complete Daily"
1135
  msgstr ""
1136
 
1137
+ #: functions/interface.php:362
1138
  msgid "File Daily"
1139
  msgstr ""
1140
 
1141
+ #: functions/interface.php:363
1142
  msgid "Database Daily"
1143
  msgstr ""
1144
 
1145
+ #: functions/interface.php:364
1146
  msgid "Complete Weekly"
1147
  msgstr ""
1148
 
1149
+ #: functions/interface.php:365
1150
  msgid "File Weekly"
1151
  msgstr ""
1152
 
1153
+ #: functions/interface.php:366
1154
  msgid "Database Weekly"
1155
  msgstr ""
1156
 
1157
+ #: functions/interface.php:367
1158
  msgid "Complete Every Two Weeks"
1159
  msgstr ""
1160
 
1161
+ #: functions/interface.php:368
1162
  msgid "File Every Two Weeks"
1163
  msgstr ""
1164
 
1165
+ #: functions/interface.php:369
1166
  msgid "Database Every Two Weeks"
1167
  msgstr ""
1168
 
1169
+ #: functions/interface.php:370
1170
  msgid "Complete Monthly"
1171
  msgstr ""
1172
 
1173
+ #: functions/interface.php:371
1174
  msgid "File Monthly"
1175
  msgstr ""
1176
 
1177
+ #: functions/interface.php:372
1178
  msgid "Database Monthly"
1179
  msgstr ""
1180
 
1181
+ #: functions/interface.php:373
1182
  msgid "Complete Manually"
1183
  msgstr ""
1184
 
1185
+ #: functions/interface.php:374
1186
  msgid "File Manually"
1187
  msgstr ""
1188
 
1189
+ #: functions/interface.php:375
1190
  msgid "Database Manually"
1191
  msgstr ""
1192
 
1221
  msgid "Backup my %1$s %2$s %3$s, %4$s."
1222
  msgstr ""
1223
 
1224
+ #: functions/interface.php:346
1225
  msgctxt "backups count"
1226
  msgid "One backup completed"
1227
  msgid_plural "%1$s backups completed"
package-lock.json ADDED
@@ -0,0 +1,2199 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "BackUpWordPress",
3
+ "version": "3.6.3.1",
4
+ "lockfileVersion": 1,
5
+ "dependencies": {
6
+ "abbrev": {
7
+ "version": "1.1.0",
8
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
9
+ "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
10
+ "dev": true
11
+ },
12
+ "amdefine": {
13
+ "version": "1.0.1",
14
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
15
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
16
+ "dev": true
17
+ },
18
+ "ansi-regex": {
19
+ "version": "2.1.1",
20
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
21
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
22
+ "dev": true
23
+ },
24
+ "ansi-styles": {
25
+ "version": "2.2.1",
26
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
27
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
28
+ "dev": true
29
+ },
30
+ "archiver": {
31
+ "version": "1.3.0",
32
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz",
33
+ "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=",
34
+ "dev": true,
35
+ "dependencies": {
36
+ "async": {
37
+ "version": "2.4.1",
38
+ "resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz",
39
+ "integrity": "sha1-YqVrJ5yYoR0JhwlqAcw+6463u9c=",
40
+ "dev": true
41
+ },
42
+ "lodash": {
43
+ "version": "4.17.4",
44
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
45
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
46
+ "dev": true
47
+ }
48
+ }
49
+ },
50
+ "archiver-utils": {
51
+ "version": "1.3.0",
52
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
53
+ "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
54
+ "dev": true,
55
+ "dependencies": {
56
+ "lodash": {
57
+ "version": "4.17.4",
58
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
59
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
60
+ "dev": true
61
+ }
62
+ }
63
+ },
64
+ "argparse": {
65
+ "version": "1.0.9",
66
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
67
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
68
+ "dev": true
69
+ },
70
+ "array-differ": {
71
+ "version": "1.0.0",
72
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
73
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
74
+ "dev": true
75
+ },
76
+ "array-find-index": {
77
+ "version": "1.0.2",
78
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
79
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
80
+ "dev": true
81
+ },
82
+ "array-union": {
83
+ "version": "1.0.2",
84
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
85
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
86
+ "dev": true
87
+ },
88
+ "array-uniq": {
89
+ "version": "1.0.3",
90
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
91
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
92
+ "dev": true
93
+ },
94
+ "arrify": {
95
+ "version": "1.0.1",
96
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
97
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
98
+ "dev": true
99
+ },
100
+ "async": {
101
+ "version": "1.5.2",
102
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
103
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
104
+ "dev": true
105
+ },
106
+ "autoprefixer-core": {
107
+ "version": "5.2.1",
108
+ "resolved": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-5.2.1.tgz",
109
+ "integrity": "sha1-5kDEFK5Bmq4hwa1DyOoPPbgqVm0=",
110
+ "dev": true
111
+ },
112
+ "balanced-match": {
113
+ "version": "0.4.2",
114
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
115
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
116
+ "dev": true
117
+ },
118
+ "bl": {
119
+ "version": "1.2.1",
120
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
121
+ "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
122
+ "dev": true
123
+ },
124
+ "bluebird": {
125
+ "version": "3.5.0",
126
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
127
+ "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=",
128
+ "dev": true
129
+ },
130
+ "brace-expansion": {
131
+ "version": "1.1.7",
132
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
133
+ "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
134
+ "dev": true
135
+ },
136
+ "browserify-zlib": {
137
+ "version": "0.1.4",
138
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
139
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
140
+ "dev": true
141
+ },
142
+ "browserslist": {
143
+ "version": "0.4.0",
144
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-0.4.0.tgz",
145
+ "integrity": "sha1-O9SrkZncG5FQ1NbbpNnTqrvIbdQ=",
146
+ "dev": true
147
+ },
148
+ "buffer-crc32": {
149
+ "version": "0.2.13",
150
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
151
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
152
+ "dev": true
153
+ },
154
+ "builtin-modules": {
155
+ "version": "1.1.1",
156
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
157
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
158
+ "dev": true
159
+ },
160
+ "camelcase": {
161
+ "version": "2.1.1",
162
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
163
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
164
+ "dev": true
165
+ },
166
+ "camelcase-keys": {
167
+ "version": "2.1.0",
168
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
169
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
170
+ "dev": true
171
+ },
172
+ "caniuse-db": {
173
+ "version": "1.0.30000676",
174
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000676.tgz",
175
+ "integrity": "sha1-gupXgjdjfI/zSiisqt43O2JMTqg=",
176
+ "dev": true
177
+ },
178
+ "chalk": {
179
+ "version": "1.1.3",
180
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
181
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
182
+ "dev": true
183
+ },
184
+ "clean-css": {
185
+ "version": "4.1.3",
186
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.3.tgz",
187
+ "integrity": "sha1-B8/omA7bINRV3cI6rc8eBMblCc4=",
188
+ "dev": true,
189
+ "dependencies": {
190
+ "source-map": {
191
+ "version": "0.5.6",
192
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
193
+ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
194
+ "dev": true
195
+ }
196
+ }
197
+ },
198
+ "cli": {
199
+ "version": "1.0.1",
200
+ "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz",
201
+ "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=",
202
+ "dev": true,
203
+ "dependencies": {
204
+ "glob": {
205
+ "version": "7.1.2",
206
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
207
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
208
+ "dev": true
209
+ }
210
+ }
211
+ },
212
+ "cli-color": {
213
+ "version": "0.2.3",
214
+ "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-0.2.3.tgz",
215
+ "integrity": "sha1-CiXOrlpqFgK+f3fShWPDZwAnTog=",
216
+ "dev": true
217
+ },
218
+ "coffee-script": {
219
+ "version": "1.10.0",
220
+ "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz",
221
+ "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=",
222
+ "dev": true
223
+ },
224
+ "colors": {
225
+ "version": "1.1.2",
226
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
227
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
228
+ "dev": true
229
+ },
230
+ "commander": {
231
+ "version": "2.9.0",
232
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
233
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
234
+ "dev": true
235
+ },
236
+ "compress-commons": {
237
+ "version": "1.2.0",
238
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.0.tgz",
239
+ "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=",
240
+ "dev": true
241
+ },
242
+ "concat-map": {
243
+ "version": "0.0.1",
244
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
245
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
246
+ "dev": true
247
+ },
248
+ "concat-stream": {
249
+ "version": "1.6.0",
250
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
251
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
252
+ "dev": true
253
+ },
254
+ "console-browserify": {
255
+ "version": "1.1.0",
256
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
257
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
258
+ "dev": true
259
+ },
260
+ "core-util-is": {
261
+ "version": "1.0.2",
262
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
263
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
264
+ "dev": true
265
+ },
266
+ "crc": {
267
+ "version": "3.4.4",
268
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz",
269
+ "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=",
270
+ "dev": true
271
+ },
272
+ "crc32-stream": {
273
+ "version": "2.0.0",
274
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
275
+ "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
276
+ "dev": true
277
+ },
278
+ "cson": {
279
+ "version": "3.0.2",
280
+ "resolved": "https://registry.npmjs.org/cson/-/cson-3.0.2.tgz",
281
+ "integrity": "sha1-g+6Qids8JUvsHpjkmNmqzxGtzFQ=",
282
+ "dev": true
283
+ },
284
+ "cson-parser": {
285
+ "version": "1.3.5",
286
+ "resolved": "https://registry.npmjs.org/cson-parser/-/cson-parser-1.3.5.tgz",
287
+ "integrity": "sha1-fsZ14DkUVTO/KmqFYHPxWZ2cLSQ=",
288
+ "dev": true
289
+ },
290
+ "currently-unhandled": {
291
+ "version": "0.4.1",
292
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
293
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
294
+ "dev": true
295
+ },
296
+ "date-now": {
297
+ "version": "0.1.4",
298
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
299
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
300
+ "dev": true
301
+ },
302
+ "dateformat": {
303
+ "version": "1.0.12",
304
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
305
+ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
306
+ "dev": true
307
+ },
308
+ "decamelize": {
309
+ "version": "1.2.0",
310
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
311
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
312
+ "dev": true
313
+ },
314
+ "diff": {
315
+ "version": "1.3.2",
316
+ "resolved": "https://registry.npmjs.org/diff/-/diff-1.3.2.tgz",
317
+ "integrity": "sha1-/Qeh8fiRUZ2ZBaTJqJ3PWnC2YDc=",
318
+ "dev": true
319
+ },
320
+ "dom-serializer": {
321
+ "version": "0.1.0",
322
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
323
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
324
+ "dev": true,
325
+ "dependencies": {
326
+ "domelementtype": {
327
+ "version": "1.1.3",
328
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
329
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
330
+ "dev": true
331
+ },
332
+ "entities": {
333
+ "version": "1.1.1",
334
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
335
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
336
+ "dev": true
337
+ }
338
+ }
339
+ },
340
+ "domelementtype": {
341
+ "version": "1.3.0",
342
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
343
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
344
+ "dev": true
345
+ },
346
+ "domhandler": {
347
+ "version": "2.3.0",
348
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
349
+ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
350
+ "dev": true
351
+ },
352
+ "domutils": {
353
+ "version": "1.5.1",
354
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
355
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
356
+ "dev": true
357
+ },
358
+ "duplexer": {
359
+ "version": "0.1.1",
360
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
361
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
362
+ "dev": true
363
+ },
364
+ "eachr": {
365
+ "version": "3.2.0",
366
+ "resolved": "https://registry.npmjs.org/eachr/-/eachr-3.2.0.tgz",
367
+ "integrity": "sha1-LDXkPqCGUW95l8+At6pk1VpKRIQ=",
368
+ "dev": true
369
+ },
370
+ "editions": {
371
+ "version": "1.3.3",
372
+ "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.3.tgz",
373
+ "integrity": "sha1-CQcQG92iD6w8vjNMJ8vQaI3Jmls=",
374
+ "dev": true
375
+ },
376
+ "encoding": {
377
+ "version": "0.1.12",
378
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
379
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
380
+ "dev": true
381
+ },
382
+ "end-of-stream": {
383
+ "version": "1.4.0",
384
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
385
+ "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
386
+ "dev": true
387
+ },
388
+ "entities": {
389
+ "version": "1.0.0",
390
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
391
+ "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
392
+ "dev": true
393
+ },
394
+ "error-ex": {
395
+ "version": "1.3.1",
396
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
397
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
398
+ "dev": true
399
+ },
400
+ "es5-ext": {
401
+ "version": "0.9.2",
402
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.9.2.tgz",
403
+ "integrity": "sha1-0uMJ0fIjsHGGSINaz1uII6gGH4o=",
404
+ "dev": true
405
+ },
406
+ "es6-promise": {
407
+ "version": "2.3.0",
408
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz",
409
+ "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=",
410
+ "dev": true
411
+ },
412
+ "escape-string-regexp": {
413
+ "version": "1.0.5",
414
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
415
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
416
+ "dev": true
417
+ },
418
+ "esprima": {
419
+ "version": "2.7.3",
420
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
421
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
422
+ "dev": true
423
+ },
424
+ "event-emitter": {
425
+ "version": "0.2.2",
426
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.2.2.tgz",
427
+ "integrity": "sha1-yB43JOtVQHxaDV7jKZQR9wD1QpE=",
428
+ "dev": true
429
+ },
430
+ "eventemitter2": {
431
+ "version": "0.4.14",
432
+ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
433
+ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
434
+ "dev": true
435
+ },
436
+ "exit": {
437
+ "version": "0.1.2",
438
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
439
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
440
+ "dev": true
441
+ },
442
+ "extract-opts": {
443
+ "version": "3.3.1",
444
+ "resolved": "https://registry.npmjs.org/extract-opts/-/extract-opts-3.3.1.tgz",
445
+ "integrity": "sha1-WrvtyYwNUgLjJ4cn+Rktfghsa+E=",
446
+ "dev": true
447
+ },
448
+ "figures": {
449
+ "version": "1.7.0",
450
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
451
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
452
+ "dev": true
453
+ },
454
+ "file-sync-cmp": {
455
+ "version": "0.1.1",
456
+ "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz",
457
+ "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=",
458
+ "dev": true
459
+ },
460
+ "find-up": {
461
+ "version": "1.1.2",
462
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
463
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
464
+ "dev": true
465
+ },
466
+ "findup-sync": {
467
+ "version": "0.3.0",
468
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
469
+ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
470
+ "dev": true,
471
+ "dependencies": {
472
+ "glob": {
473
+ "version": "5.0.15",
474
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
475
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
476
+ "dev": true
477
+ }
478
+ }
479
+ },
480
+ "fs.realpath": {
481
+ "version": "1.0.0",
482
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
483
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
484
+ "dev": true
485
+ },
486
+ "get-stdin": {
487
+ "version": "4.0.1",
488
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
489
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
490
+ "dev": true
491
+ },
492
+ "getobject": {
493
+ "version": "0.1.0",
494
+ "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
495
+ "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
496
+ "dev": true
497
+ },
498
+ "gettext-parser": {
499
+ "version": "1.2.2",
500
+ "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.2.2.tgz",
501
+ "integrity": "sha1-HvDadcHnWa4wicc++k0Z5AKYdI4=",
502
+ "dev": true
503
+ },
504
+ "glob": {
505
+ "version": "7.0.6",
506
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
507
+ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
508
+ "dev": true
509
+ },
510
+ "graceful-fs": {
511
+ "version": "4.1.11",
512
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
513
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
514
+ "dev": true
515
+ },
516
+ "graceful-readlink": {
517
+ "version": "1.0.1",
518
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
519
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
520
+ "dev": true
521
+ },
522
+ "grunt": {
523
+ "version": "1.0.1",
524
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz",
525
+ "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=",
526
+ "dev": true,
527
+ "dependencies": {
528
+ "grunt-cli": {
529
+ "version": "1.2.0",
530
+ "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
531
+ "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
532
+ "dev": true
533
+ }
534
+ }
535
+ },
536
+ "grunt-autoprefixer": {
537
+ "version": "3.0.4",
538
+ "resolved": "https://registry.npmjs.org/grunt-autoprefixer/-/grunt-autoprefixer-3.0.4.tgz",
539
+ "integrity": "sha1-/kLiR7z6ucKSoSwGLa1PNb3pAsU=",
540
+ "dev": true,
541
+ "dependencies": {
542
+ "ansi-regex": {
543
+ "version": "1.1.1",
544
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz",
545
+ "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=",
546
+ "dev": true
547
+ },
548
+ "chalk": {
549
+ "version": "1.0.0",
550
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz",
551
+ "integrity": "sha1-s89O0P9Tl8mcdbj2edsvUoMfltw=",
552
+ "dev": true
553
+ },
554
+ "has-ansi": {
555
+ "version": "1.0.3",
556
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz",
557
+ "integrity": "sha1-wLWxYV2eOCsP9nFp2We0JeSMpTg=",
558
+ "dev": true
559
+ },
560
+ "strip-ansi": {
561
+ "version": "2.0.1",
562
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
563
+ "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=",
564
+ "dev": true
565
+ },
566
+ "supports-color": {
567
+ "version": "1.3.1",
568
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz",
569
+ "integrity": "sha1-FXWN8J2P87SswwdTn6vicJXhBC0=",
570
+ "dev": true
571
+ }
572
+ }
573
+ },
574
+ "grunt-bumpup": {
575
+ "version": "0.6.3",
576
+ "resolved": "https://registry.npmjs.org/grunt-bumpup/-/grunt-bumpup-0.6.3.tgz",
577
+ "integrity": "sha1-dU6Wu2pTN9C5VInl3EmWuvyLtBQ=",
578
+ "dev": true,
579
+ "dependencies": {
580
+ "semver": {
581
+ "version": "4.3.6",
582
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
583
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
584
+ "dev": true
585
+ }
586
+ }
587
+ },
588
+ "grunt-checktextdomain": {
589
+ "version": "1.0.1",
590
+ "resolved": "https://registry.npmjs.org/grunt-checktextdomain/-/grunt-checktextdomain-1.0.1.tgz",
591
+ "integrity": "sha1-slTQHh3pEwBdTbHFMD2QI7mD4Zs=",
592
+ "dev": true,
593
+ "dependencies": {
594
+ "ansi-styles": {
595
+ "version": "0.2.0",
596
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-0.2.0.tgz",
597
+ "integrity": "sha1-NZq0sV3NZLptdHNLcsNjYKmvLBk=",
598
+ "dev": true
599
+ },
600
+ "chalk": {
601
+ "version": "0.2.1",
602
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.2.1.tgz",
603
+ "integrity": "sha1-dhPhV1FFshOGSD9/SFql/6jL0Qw=",
604
+ "dev": true
605
+ }
606
+ }
607
+ },
608
+ "grunt-checkwpversion": {
609
+ "version": "0.3.0",
610
+ "resolved": "https://registry.npmjs.org/grunt-checkwpversion/-/grunt-checkwpversion-0.3.0.tgz",
611
+ "integrity": "sha1-o/6hDVDy6beMv7hgckwVy2G/m+E=",
612
+ "dev": true,
613
+ "dependencies": {
614
+ "ansi-styles": {
615
+ "version": "0.2.0",
616
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-0.2.0.tgz",
617
+ "integrity": "sha1-NZq0sV3NZLptdHNLcsNjYKmvLBk=",
618
+ "dev": true
619
+ },
620
+ "chalk": {
621
+ "version": "0.2.1",
622
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.2.1.tgz",
623
+ "integrity": "sha1-dhPhV1FFshOGSD9/SFql/6jL0Qw=",
624
+ "dev": true
625
+ }
626
+ }
627
+ },
628
+ "grunt-contrib-clean": {
629
+ "version": "1.1.0",
630
+ "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz",
631
+ "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=",
632
+ "dev": true,
633
+ "dependencies": {
634
+ "rimraf": {
635
+ "version": "2.6.1",
636
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
637
+ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
638
+ "dev": true
639
+ }
640
+ }
641
+ },
642
+ "grunt-contrib-compress": {
643
+ "version": "1.4.3",
644
+ "resolved": "https://registry.npmjs.org/grunt-contrib-compress/-/grunt-contrib-compress-1.4.3.tgz",
645
+ "integrity": "sha1-Ac7/ucY39S5wgfRjdQmD0KOw+nM=",
646
+ "dev": true,
647
+ "dependencies": {
648
+ "lodash": {
649
+ "version": "4.17.4",
650
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
651
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
652
+ "dev": true
653
+ }
654
+ }
655
+ },
656
+ "grunt-contrib-concat": {
657
+ "version": "1.0.1",
658
+ "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-1.0.1.tgz",
659
+ "integrity": "sha1-YVCYYwhOhx1+ht5IwBUlntl3Rb0=",
660
+ "dev": true,
661
+ "dependencies": {
662
+ "source-map": {
663
+ "version": "0.5.6",
664
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
665
+ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
666
+ "dev": true
667
+ }
668
+ }
669
+ },
670
+ "grunt-contrib-copy": {
671
+ "version": "1.0.0",
672
+ "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz",
673
+ "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=",
674
+ "dev": true
675
+ },
676
+ "grunt-contrib-cssmin": {
677
+ "version": "2.2.0",
678
+ "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-2.2.0.tgz",
679
+ "integrity": "sha1-ct70BijujiE62adoBNEx22ZgSkE=",
680
+ "dev": true
681
+ },
682
+ "grunt-contrib-jshint": {
683
+ "version": "1.1.0",
684
+ "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.1.0.tgz",
685
+ "integrity": "sha1-Np2QmyWTxA6L55lAshNAhQx5Oaw=",
686
+ "dev": true
687
+ },
688
+ "grunt-contrib-uglify": {
689
+ "version": "3.0.1",
690
+ "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-3.0.1.tgz",
691
+ "integrity": "sha1-/etfk4pMgEL46Grkb2NVTo6VEcs=",
692
+ "dev": true,
693
+ "dependencies": {
694
+ "gzip-size": {
695
+ "version": "1.0.0",
696
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz",
697
+ "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=",
698
+ "dev": true
699
+ },
700
+ "maxmin": {
701
+ "version": "1.1.0",
702
+ "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz",
703
+ "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=",
704
+ "dev": true
705
+ },
706
+ "pretty-bytes": {
707
+ "version": "1.0.4",
708
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
709
+ "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
710
+ "dev": true
711
+ }
712
+ }
713
+ },
714
+ "grunt-known-options": {
715
+ "version": "1.1.0",
716
+ "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz",
717
+ "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=",
718
+ "dev": true
719
+ },
720
+ "grunt-legacy-log": {
721
+ "version": "1.0.0",
722
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz",
723
+ "integrity": "sha1-+4bxgJhHvAfcR4Q/ns1srLYt8tU=",
724
+ "dev": true
725
+ },
726
+ "grunt-legacy-log-utils": {
727
+ "version": "1.0.0",
728
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz",
729
+ "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=",
730
+ "dev": true,
731
+ "dependencies": {
732
+ "lodash": {
733
+ "version": "4.3.0",
734
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz",
735
+ "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=",
736
+ "dev": true
737
+ }
738
+ }
739
+ },
740
+ "grunt-legacy-util": {
741
+ "version": "1.0.0",
742
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz",
743
+ "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=",
744
+ "dev": true,
745
+ "dependencies": {
746
+ "lodash": {
747
+ "version": "4.3.0",
748
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz",
749
+ "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=",
750
+ "dev": true
751
+ }
752
+ }
753
+ },
754
+ "grunt-po2mo": {
755
+ "version": "0.1.2",
756
+ "resolved": "https://registry.npmjs.org/grunt-po2mo/-/grunt-po2mo-0.1.2.tgz",
757
+ "integrity": "sha1-kI9zwcAAhjhazIPAdA7jYO9SdBs=",
758
+ "dev": true
759
+ },
760
+ "grunt-pot": {
761
+ "version": "0.3.0",
762
+ "resolved": "https://registry.npmjs.org/grunt-pot/-/grunt-pot-0.3.0.tgz",
763
+ "integrity": "sha1-vHgF1dxsXjiZjMlUupdsYZu3Xh8=",
764
+ "dev": true
765
+ },
766
+ "grunt-shell": {
767
+ "version": "2.1.0",
768
+ "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-2.1.0.tgz",
769
+ "integrity": "sha1-Q595FZ7RHmSmUaacyKPQK+v17MI=",
770
+ "dev": true
771
+ },
772
+ "grunt-text-replace": {
773
+ "version": "0.4.0",
774
+ "resolved": "https://registry.npmjs.org/grunt-text-replace/-/grunt-text-replace-0.4.0.tgz",
775
+ "integrity": "sha1-252c5Z4v5J2id+nbwZXD4Rz7FsI=",
776
+ "dev": true
777
+ },
778
+ "grunt-wp-deploy": {
779
+ "version": "1.2.1",
780
+ "resolved": "https://registry.npmjs.org/grunt-wp-deploy/-/grunt-wp-deploy-1.2.1.tgz",
781
+ "integrity": "sha1-fVwoQVehgcEGxFvgUrqapxo8JHQ=",
782
+ "dev": true
783
+ },
784
+ "grunt-wp-i18n": {
785
+ "version": "1.0.0",
786
+ "resolved": "https://registry.npmjs.org/grunt-wp-i18n/-/grunt-wp-i18n-1.0.0.tgz",
787
+ "integrity": "sha1-ks0J6DXkV+4jiSYo6yNRYcxKZ5A=",
788
+ "dev": true
789
+ },
790
+ "gzip-size": {
791
+ "version": "3.0.0",
792
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
793
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
794
+ "dev": true
795
+ },
796
+ "has-ansi": {
797
+ "version": "2.0.0",
798
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
799
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
800
+ "dev": true
801
+ },
802
+ "has-color": {
803
+ "version": "0.1.7",
804
+ "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
805
+ "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=",
806
+ "dev": true
807
+ },
808
+ "hooker": {
809
+ "version": "0.2.3",
810
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
811
+ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
812
+ "dev": true
813
+ },
814
+ "hosted-git-info": {
815
+ "version": "2.4.2",
816
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.4.2.tgz",
817
+ "integrity": "sha1-AHa59GonBQbduq6lZJaJdGBhKmc=",
818
+ "dev": true
819
+ },
820
+ "htmlparser2": {
821
+ "version": "3.8.3",
822
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
823
+ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
824
+ "dev": true,
825
+ "dependencies": {
826
+ "isarray": {
827
+ "version": "0.0.1",
828
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
829
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
830
+ "dev": true
831
+ },
832
+ "readable-stream": {
833
+ "version": "1.1.14",
834
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
835
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
836
+ "dev": true
837
+ },
838
+ "string_decoder": {
839
+ "version": "0.10.31",
840
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
841
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
842
+ "dev": true
843
+ }
844
+ }
845
+ },
846
+ "iconv-lite": {
847
+ "version": "0.4.17",
848
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.17.tgz",
849
+ "integrity": "sha1-T9qjs4rLwsAxsEXQ7c3+HsqxjI0=",
850
+ "dev": true
851
+ },
852
+ "iltorb": {
853
+ "version": "1.3.1",
854
+ "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-1.3.1.tgz",
855
+ "integrity": "sha512-sduf4Kgg7INvWtxGYIOALqfLesJZdWJhzPvpl6nOEHLhPkDZZma8tdl6Ejf+uOZlWPZcGBd9girvcNDxjpMa8g==",
856
+ "dev": true,
857
+ "optional": true,
858
+ "dependencies": {
859
+ "abbrev": {
860
+ "version": "1.1.0",
861
+ "bundled": true,
862
+ "dev": true,
863
+ "optional": true
864
+ },
865
+ "ajv": {
866
+ "version": "4.11.8",
867
+ "bundled": true,
868
+ "dev": true,
869
+ "optional": true
870
+ },
871
+ "ansi-regex": {
872
+ "version": "2.1.1",
873
+ "bundled": true,
874
+ "dev": true
875
+ },
876
+ "aproba": {
877
+ "version": "1.1.1",
878
+ "bundled": true,
879
+ "dev": true,
880
+ "optional": true
881
+ },
882
+ "are-we-there-yet": {
883
+ "version": "1.1.4",
884
+ "bundled": true,
885
+ "dev": true,
886
+ "optional": true
887
+ },
888
+ "asn1": {
889
+ "version": "0.2.3",
890
+ "bundled": true,
891
+ "dev": true,
892
+ "optional": true
893
+ },
894
+ "assert-plus": {
895
+ "version": "0.2.0",
896
+ "bundled": true,
897
+ "dev": true,
898
+ "optional": true
899
+ },
900
+ "asynckit": {
901
+ "version": "0.4.0",
902
+ "bundled": true,
903
+ "dev": true,
904
+ "optional": true
905
+ },
906
+ "aws-sign2": {
907
+ "version": "0.6.0",
908
+ "bundled": true,
909
+ "dev": true,
910
+ "optional": true
911
+ },
912
+ "aws4": {
913
+ "version": "1.6.0",
914
+ "bundled": true,
915
+ "dev": true,
916
+ "optional": true
917
+ },
918
+ "balanced-match": {
919
+ "version": "0.4.2",
920
+ "bundled": true,
921
+ "dev": true
922
+ },
923
+ "bcrypt-pbkdf": {
924
+ "version": "1.0.1",
925
+ "bundled": true,
926
+ "dev": true,
927
+ "optional": true
928
+ },
929
+ "block-stream": {
930
+ "version": "0.0.9",
931
+ "bundled": true,
932
+ "dev": true
933
+ },
934
+ "boom": {
935
+ "version": "2.10.1",
936
+ "bundled": true,
937
+ "dev": true
938
+ },
939
+ "brace-expansion": {
940
+ "version": "1.1.7",
941
+ "bundled": true,
942
+ "dev": true
943
+ },
944
+ "buffer-shims": {
945
+ "version": "1.0.0",
946
+ "bundled": true,
947
+ "dev": true
948
+ },
949
+ "caseless": {
950
+ "version": "0.12.0",
951
+ "bundled": true,
952
+ "dev": true,
953
+ "optional": true
954
+ },
955
+ "co": {
956
+ "version": "4.6.0",
957
+ "bundled": true,
958
+ "dev": true,
959
+ "optional": true
960
+ },
961
+ "code-point-at": {
962
+ "version": "1.1.0",
963
+ "bundled": true,
964
+ "dev": true
965
+ },
966
+ "combined-stream": {
967
+ "version": "1.0.5",
968
+ "bundled": true,
969
+ "dev": true
970
+ },
971
+ "concat-map": {
972
+ "version": "0.0.1",
973
+ "bundled": true,
974
+ "dev": true
975
+ },
976
+ "console-control-strings": {
977
+ "version": "1.1.0",
978
+ "bundled": true,
979
+ "dev": true
980
+ },
981
+ "core-util-is": {
982
+ "version": "1.0.2",
983
+ "bundled": true,
984
+ "dev": true
985
+ },
986
+ "cryptiles": {
987
+ "version": "2.0.5",
988
+ "bundled": true,
989
+ "dev": true,
990
+ "optional": true
991
+ },
992
+ "dashdash": {
993
+ "version": "1.14.1",
994
+ "bundled": true,
995
+ "dev": true,
996
+ "optional": true,
997
+ "dependencies": {
998
+ "assert-plus": {
999
+ "version": "1.0.0",
1000
+ "bundled": true,
1001
+ "dev": true,
1002
+ "optional": true
1003
+ }
1004
+ }
1005
+ },
1006
+ "debug": {
1007
+ "version": "2.6.8",
1008
+ "bundled": true,
1009
+ "dev": true,
1010
+ "optional": true
1011
+ },
1012
+ "deep-extend": {
1013
+ "version": "0.4.2",
1014
+ "bundled": true,
1015
+ "dev": true,
1016
+ "optional": true
1017
+ },
1018
+ "delayed-stream": {
1019
+ "version": "1.0.0",
1020
+ "bundled": true,
1021
+ "dev": true
1022
+ },
1023
+ "delegates": {
1024
+ "version": "1.0.0",
1025
+ "bundled": true,
1026
+ "dev": true,
1027
+ "optional": true
1028
+ },
1029
+ "ecc-jsbn": {
1030
+ "version": "0.1.1",
1031
+ "bundled": true,
1032
+ "dev": true,
1033
+ "optional": true
1034
+ },
1035
+ "extend": {
1036
+ "version": "3.0.1",
1037
+ "bundled": true,
1038
+ "dev": true,
1039
+ "optional": true
1040
+ },
1041
+ "extsprintf": {
1042
+ "version": "1.0.2",
1043
+ "bundled": true,
1044
+ "dev": true
1045
+ },
1046
+ "forever-agent": {
1047
+ "version": "0.6.1",
1048
+ "bundled": true,
1049
+ "dev": true,
1050
+ "optional": true
1051
+ },
1052
+ "form-data": {
1053
+ "version": "2.1.4",
1054
+ "bundled": true,
1055
+ "dev": true,
1056
+ "optional": true
1057
+ },
1058
+ "fs.realpath": {
1059
+ "version": "1.0.0",
1060
+ "bundled": true,
1061
+ "dev": true
1062
+ },
1063
+ "fstream": {
1064
+ "version": "1.0.11",
1065
+ "bundled": true,
1066
+ "dev": true
1067
+ },
1068
+ "fstream-ignore": {
1069
+ "version": "1.0.5",
1070
+ "bundled": true,
1071
+ "dev": true,
1072
+ "optional": true
1073
+ },
1074
+ "gauge": {
1075
+ "version": "2.7.4",
1076
+ "bundled": true,
1077
+ "dev": true,
1078
+ "optional": true
1079
+ },
1080
+ "getpass": {
1081
+ "version": "0.1.7",
1082
+ "bundled": true,
1083
+ "dev": true,
1084
+ "optional": true,
1085
+ "dependencies": {
1086
+ "assert-plus": {
1087
+ "version": "1.0.0",
1088
+ "bundled": true,
1089
+ "dev": true,
1090
+ "optional": true
1091
+ }
1092
+ }
1093
+ },
1094
+ "glob": {
1095
+ "version": "7.1.2",
1096
+ "bundled": true,
1097
+ "dev": true
1098
+ },
1099
+ "graceful-fs": {
1100
+ "version": "4.1.11",
1101
+ "bundled": true,
1102
+ "dev": true
1103
+ },
1104
+ "har-schema": {
1105
+ "version": "1.0.5",
1106
+ "bundled": true,
1107
+ "dev": true,
1108
+ "optional": true
1109
+ },
1110
+ "har-validator": {
1111
+ "version": "4.2.1",
1112
+ "bundled": true,
1113
+ "dev": true,
1114
+ "optional": true
1115
+ },
1116
+ "has-unicode": {
1117
+ "version": "2.0.1",
1118
+ "bundled": true,
1119
+ "dev": true,
1120
+ "optional": true
1121
+ },
1122
+ "hawk": {
1123
+ "version": "3.1.3",
1124
+ "bundled": true,
1125
+ "dev": true,
1126
+ "optional": true
1127
+ },
1128
+ "hoek": {
1129
+ "version": "2.16.3",
1130
+ "bundled": true,
1131
+ "dev": true
1132
+ },
1133
+ "http-signature": {
1134
+ "version": "1.1.1",
1135
+ "bundled": true,
1136
+ "dev": true,
1137
+ "optional": true
1138
+ },
1139
+ "inflight": {
1140
+ "version": "1.0.6",
1141
+ "bundled": true,
1142
+ "dev": true
1143
+ },
1144
+ "inherits": {
1145
+ "version": "2.0.3",
1146
+ "bundled": true,
1147
+ "dev": true
1148
+ },
1149
+ "ini": {
1150
+ "version": "1.3.4",
1151
+ "bundled": true,
1152
+ "dev": true,
1153
+ "optional": true
1154
+ },
1155
+ "is-fullwidth-code-point": {
1156
+ "version": "1.0.0",
1157
+ "bundled": true,
1158
+ "dev": true
1159
+ },
1160
+ "is-typedarray": {
1161
+ "version": "1.0.0",
1162
+ "bundled": true,
1163
+ "dev": true,
1164
+ "optional": true
1165
+ },
1166
+ "isarray": {
1167
+ "version": "1.0.0",
1168
+ "bundled": true,
1169
+ "dev": true
1170
+ },
1171
+ "isstream": {
1172
+ "version": "0.1.2",
1173
+ "bundled": true,
1174
+ "dev": true,
1175
+ "optional": true
1176
+ },
1177
+ "jodid25519": {
1178
+ "version": "1.0.2",
1179
+ "bundled": true,
1180
+ "dev": true,
1181
+ "optional": true
1182
+ },
1183
+ "jsbn": {
1184
+ "version": "0.1.1",
1185
+ "bundled": true,
1186
+ "dev": true,
1187
+ "optional": true
1188
+ },
1189
+ "json-schema": {
1190
+ "version": "0.2.3",
1191
+ "bundled": true,
1192
+ "dev": true,
1193
+ "optional": true
1194
+ },
1195
+ "json-stable-stringify": {
1196
+ "version": "1.0.1",
1197
+ "bundled": true,
1198
+ "dev": true,
1199
+ "optional": true
1200
+ },
1201
+ "json-stringify-safe": {
1202
+ "version": "5.0.1",
1203
+ "bundled": true,
1204
+ "dev": true,
1205
+ "optional": true
1206
+ },
1207
+ "jsonify": {
1208
+ "version": "0.0.0",
1209
+ "bundled": true,
1210
+ "dev": true,
1211
+ "optional": true
1212
+ },
1213
+ "jsprim": {
1214
+ "version": "1.4.0",
1215
+ "bundled": true,
1216
+ "dev": true,
1217
+ "optional": true,
1218
+ "dependencies": {
1219
+ "assert-plus": {
1220
+ "version": "1.0.0",
1221
+ "bundled": true,
1222
+ "dev": true,
1223
+ "optional": true
1224
+ }
1225
+ }
1226
+ },
1227
+ "mime-db": {
1228
+ "version": "1.27.0",
1229
+ "bundled": true,
1230
+ "dev": true
1231
+ },
1232
+ "mime-types": {
1233
+ "version": "2.1.15",
1234
+ "bundled": true,
1235
+ "dev": true
1236
+ },
1237
+ "minimatch": {
1238
+ "version": "3.0.4",
1239
+ "bundled": true,
1240
+ "dev": true
1241
+ },
1242
+ "minimist": {
1243
+ "version": "0.0.8",
1244
+ "bundled": true,
1245
+ "dev": true
1246
+ },
1247
+ "mkdirp": {
1248
+ "version": "0.5.1",
1249
+ "bundled": true,
1250
+ "dev": true
1251
+ },
1252
+ "ms": {
1253
+ "version": "2.0.0",
1254
+ "bundled": true,
1255
+ "dev": true,
1256
+ "optional": true
1257
+ },
1258
+ "node-pre-gyp": {
1259
+ "version": "0.6.34",
1260
+ "bundled": true,
1261
+ "dev": true,
1262
+ "optional": true
1263
+ },
1264
+ "nopt": {
1265
+ "version": "4.0.1",
1266
+ "bundled": true,
1267
+ "dev": true,
1268
+ "optional": true
1269
+ },
1270
+ "npmlog": {
1271
+ "version": "4.1.0",
1272
+ "bundled": true,
1273
+ "dev": true,
1274
+ "optional": true
1275
+ },
1276
+ "number-is-nan": {
1277
+ "version": "1.0.1",
1278
+ "bundled": true,
1279
+ "dev": true
1280
+ },
1281
+ "oauth-sign": {
1282
+ "version": "0.8.2",
1283
+ "bundled": true,
1284
+ "dev": true,
1285
+ "optional": true
1286
+ },
1287
+ "object-assign": {
1288
+ "version": "4.1.1",
1289
+ "bundled": true,
1290
+ "dev": true,
1291
+ "optional": true
1292
+ },
1293
+ "once": {
1294
+ "version": "1.4.0",
1295
+ "bundled": true,
1296
+ "dev": true
1297
+ },
1298
+ "os-homedir": {
1299
+ "version": "1.0.2",
1300
+ "bundled": true,
1301
+ "dev": true,
1302
+ "optional": true
1303
+ },
1304
+ "os-tmpdir": {
1305
+ "version": "1.0.2",
1306
+ "bundled": true,
1307
+ "dev": true,
1308
+ "optional": true
1309
+ },
1310
+ "osenv": {
1311
+ "version": "0.1.4",
1312
+ "bundled": true,
1313
+ "dev": true,
1314
+ "optional": true
1315
+ },
1316
+ "path-is-absolute": {
1317
+ "version": "1.0.1",
1318
+ "bundled": true,
1319
+ "dev": true
1320
+ },
1321
+ "performance-now": {
1322
+ "version": "0.2.0",
1323
+ "bundled": true,
1324
+ "dev": true,
1325
+ "optional": true
1326
+ },
1327
+ "process-nextick-args": {
1328
+ "version": "1.0.7",
1329
+ "bundled": true,
1330
+ "dev": true
1331
+ },
1332
+ "punycode": {
1333
+ "version": "1.4.1",
1334
+ "bundled": true,
1335
+ "dev": true,
1336
+ "optional": true
1337
+ },
1338
+ "qs": {
1339
+ "version": "6.4.0",
1340
+ "bundled": true,
1341
+ "dev": true,
1342
+ "optional": true
1343
+ },
1344
+ "rc": {
1345
+ "version": "1.2.1",
1346
+ "bundled": true,
1347
+ "dev": true,
1348
+ "optional": true,
1349
+ "dependencies": {
1350
+ "minimist": {
1351
+ "version": "1.2.0",
1352
+ "bundled": true,
1353
+ "dev": true,
1354
+ "optional": true
1355
+ }
1356
+ }
1357
+ },
1358
+ "readable-stream": {
1359
+ "version": "2.2.9",
1360
+ "bundled": true,
1361
+ "dev": true
1362
+ },
1363
+ "request": {
1364
+ "version": "2.81.0",
1365
+ "bundled": true,
1366
+ "dev": true,
1367
+ "optional": true
1368
+ },
1369
+ "rimraf": {
1370
+ "version": "2.6.1",
1371
+ "bundled": true,
1372
+ "dev": true
1373
+ },
1374
+ "safe-buffer": {
1375
+ "version": "5.0.1",
1376
+ "bundled": true,
1377
+ "dev": true
1378
+ },
1379
+ "semver": {
1380
+ "version": "5.3.0",
1381
+ "bundled": true,
1382
+ "dev": true,
1383
+ "optional": true
1384
+ },
1385
+ "set-blocking": {
1386
+ "version": "2.0.0",
1387
+ "bundled": true,
1388
+ "dev": true,
1389
+ "optional": true
1390
+ },
1391
+ "signal-exit": {
1392
+ "version": "3.0.2",
1393
+ "bundled": true,
1394
+ "dev": true,
1395
+ "optional": true
1396
+ },
1397
+ "sntp": {
1398
+ "version": "1.0.9",
1399
+ "bundled": true,
1400
+ "dev": true,
1401
+ "optional": true
1402
+ },
1403
+ "sshpk": {
1404
+ "version": "1.13.0",
1405
+ "bundled": true,
1406
+ "dev": true,
1407
+ "optional": true,
1408
+ "dependencies": {
1409
+ "assert-plus": {
1410
+ "version": "1.0.0",
1411
+ "bundled": true,
1412
+ "dev": true,
1413
+ "optional": true
1414
+ }
1415
+ }
1416
+ },
1417
+ "string_decoder": {
1418
+ "version": "1.0.1",
1419
+ "bundled": true,
1420
+ "dev": true
1421
+ },
1422
+ "string-width": {
1423
+ "version": "1.0.2",
1424
+ "bundled": true,
1425
+ "dev": true
1426
+ },
1427
+ "stringstream": {
1428
+ "version": "0.0.5",
1429
+ "bundled": true,
1430
+ "dev": true,
1431
+ "optional": true
1432
+ },
1433
+ "strip-ansi": {
1434
+ "version": "3.0.1",
1435
+ "bundled": true,
1436
+ "dev": true
1437
+ },
1438
+ "strip-json-comments": {
1439
+ "version": "2.0.1",
1440
+ "bundled": true,
1441
+ "dev": true,
1442
+ "optional": true
1443
+ },
1444
+ "tar": {
1445
+ "version": "2.2.1",
1446
+ "bundled": true,
1447
+ "dev": true
1448
+ },
1449
+ "tar-pack": {
1450
+ "version": "3.4.0",
1451
+ "bundled": true,
1452
+ "dev": true,
1453
+ "optional": true
1454
+ },
1455
+ "tough-cookie": {
1456
+ "version": "2.3.2",
1457
+ "bundled": true,
1458
+ "dev": true,
1459
+ "optional": true
1460
+ },
1461
+ "tunnel-agent": {
1462
+ "version": "0.6.0",
1463
+ "bundled": true,
1464
+ "dev": true,
1465
+ "optional": true
1466
+ },
1467
+ "tweetnacl": {
1468
+ "version": "0.14.5",
1469
+ "bundled": true,
1470
+ "dev": true,
1471
+ "optional": true
1472
+ },
1473
+ "uid-number": {
1474
+ "version": "0.0.6",
1475
+ "bundled": true,
1476
+ "dev": true,
1477
+ "optional": true
1478
+ },
1479
+ "util-deprecate": {
1480
+ "version": "1.0.2",
1481
+ "bundled": true,
1482
+ "dev": true
1483
+ },
1484
+ "uuid": {
1485
+ "version": "3.0.1",
1486
+ "bundled": true,
1487
+ "dev": true,
1488
+ "optional": true
1489
+ },
1490
+ "verror": {
1491
+ "version": "1.3.6",
1492
+ "bundled": true,
1493
+ "dev": true,
1494
+ "optional": true
1495
+ },
1496
+ "wide-align": {
1497
+ "version": "1.1.2",
1498
+ "bundled": true,
1499
+ "dev": true,
1500
+ "optional": true
1501
+ },
1502
+ "wrappy": {
1503
+ "version": "1.0.2",
1504
+ "bundled": true,
1505
+ "dev": true
1506
+ }
1507
+ }
1508
+ },
1509
+ "indent-string": {
1510
+ "version": "2.1.0",
1511
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
1512
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
1513
+ "dev": true
1514
+ },
1515
+ "inflight": {
1516
+ "version": "1.0.6",
1517
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1518
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1519
+ "dev": true
1520
+ },
1521
+ "inherit": {
1522
+ "version": "2.2.6",
1523
+ "resolved": "https://registry.npmjs.org/inherit/-/inherit-2.2.6.tgz",
1524
+ "integrity": "sha1-8WFLBshUToEo5CKchjR9tzrZeI0=",
1525
+ "dev": true
1526
+ },
1527
+ "inherits": {
1528
+ "version": "2.0.3",
1529
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1530
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
1531
+ "dev": true
1532
+ },
1533
+ "inquirer": {
1534
+ "version": "0.2.5",
1535
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.2.5.tgz",
1536
+ "integrity": "sha1-a0mpy+A953YSIhHxdO+f4oIsCPY=",
1537
+ "dev": true,
1538
+ "dependencies": {
1539
+ "async": {
1540
+ "version": "0.2.10",
1541
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
1542
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
1543
+ "dev": true
1544
+ },
1545
+ "lodash": {
1546
+ "version": "1.2.1",
1547
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.2.1.tgz",
1548
+ "integrity": "sha1-7UexbkbwaytAMJto6RY8F+k+owQ=",
1549
+ "dev": true
1550
+ }
1551
+ }
1552
+ },
1553
+ "is-arrayish": {
1554
+ "version": "0.2.1",
1555
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1556
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
1557
+ "dev": true
1558
+ },
1559
+ "is-builtin-module": {
1560
+ "version": "1.0.0",
1561
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
1562
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
1563
+ "dev": true
1564
+ },
1565
+ "is-finite": {
1566
+ "version": "1.0.2",
1567
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
1568
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
1569
+ "dev": true
1570
+ },
1571
+ "is-utf8": {
1572
+ "version": "0.2.1",
1573
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
1574
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
1575
+ "dev": true
1576
+ },
1577
+ "isarray": {
1578
+ "version": "1.0.0",
1579
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1580
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1581
+ "dev": true
1582
+ },
1583
+ "isexe": {
1584
+ "version": "2.0.0",
1585
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1586
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1587
+ "dev": true
1588
+ },
1589
+ "jit-grunt": {
1590
+ "version": "0.10.0",
1591
+ "resolved": "https://registry.npmjs.org/jit-grunt/-/jit-grunt-0.10.0.tgz",
1592
+ "integrity": "sha1-AIw6f+Hpa9DYTiYOofoXg0V/ecI=",
1593
+ "dev": true
1594
+ },
1595
+ "js-base64": {
1596
+ "version": "2.1.9",
1597
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz",
1598
+ "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=",
1599
+ "dev": true
1600
+ },
1601
+ "js-yaml": {
1602
+ "version": "3.5.5",
1603
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz",
1604
+ "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=",
1605
+ "dev": true
1606
+ },
1607
+ "jshint": {
1608
+ "version": "2.9.4",
1609
+ "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.4.tgz",
1610
+ "integrity": "sha1-XjupeEjVKQJz21FK7kf+JM9ZKTQ=",
1611
+ "dev": true,
1612
+ "dependencies": {
1613
+ "lodash": {
1614
+ "version": "3.7.0",
1615
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz",
1616
+ "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=",
1617
+ "dev": true
1618
+ }
1619
+ }
1620
+ },
1621
+ "lazystream": {
1622
+ "version": "1.0.0",
1623
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
1624
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
1625
+ "dev": true
1626
+ },
1627
+ "load-grunt-config": {
1628
+ "version": "0.19.2",
1629
+ "resolved": "https://registry.npmjs.org/load-grunt-config/-/load-grunt-config-0.19.2.tgz",
1630
+ "integrity": "sha1-UgkNSiDG5j90p2SPJJsZ57f87CQ=",
1631
+ "dev": true,
1632
+ "dependencies": {
1633
+ "glob": {
1634
+ "version": "5.0.15",
1635
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
1636
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
1637
+ "dev": true
1638
+ },
1639
+ "js-yaml": {
1640
+ "version": "3.4.6",
1641
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.4.6.tgz",
1642
+ "integrity": "sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA=",
1643
+ "dev": true
1644
+ },
1645
+ "load-grunt-tasks": {
1646
+ "version": "3.3.0",
1647
+ "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.3.0.tgz",
1648
+ "integrity": "sha1-vliSkJRY2T3fdp60vGhRAggMYyE=",
1649
+ "dev": true
1650
+ }
1651
+ }
1652
+ },
1653
+ "load-grunt-tasks": {
1654
+ "version": "3.5.2",
1655
+ "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.5.2.tgz",
1656
+ "integrity": "sha1-ByhWEYD9IP+KaSdQWFL8WKrqDIg=",
1657
+ "dev": true
1658
+ },
1659
+ "load-json-file": {
1660
+ "version": "1.1.0",
1661
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
1662
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
1663
+ "dev": true
1664
+ },
1665
+ "lodash": {
1666
+ "version": "3.10.1",
1667
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
1668
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
1669
+ "dev": true
1670
+ },
1671
+ "loud-rejection": {
1672
+ "version": "1.6.0",
1673
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
1674
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
1675
+ "dev": true
1676
+ },
1677
+ "map-obj": {
1678
+ "version": "1.0.1",
1679
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
1680
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
1681
+ "dev": true
1682
+ },
1683
+ "maxmin": {
1684
+ "version": "2.1.0",
1685
+ "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz",
1686
+ "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=",
1687
+ "dev": true,
1688
+ "dependencies": {
1689
+ "pretty-bytes": {
1690
+ "version": "3.0.1",
1691
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
1692
+ "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
1693
+ "dev": true
1694
+ }
1695
+ }
1696
+ },
1697
+ "memoizee": {
1698
+ "version": "0.2.6",
1699
+ "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.2.6.tgz",
1700
+ "integrity": "sha1-u0WnrQJTAILxYSZx2rNSGc0uB0E=",
1701
+ "dev": true
1702
+ },
1703
+ "meow": {
1704
+ "version": "3.7.0",
1705
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
1706
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
1707
+ "dev": true
1708
+ },
1709
+ "minimatch": {
1710
+ "version": "3.0.4",
1711
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1712
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1713
+ "dev": true
1714
+ },
1715
+ "minimist": {
1716
+ "version": "1.2.0",
1717
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1718
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1719
+ "dev": true
1720
+ },
1721
+ "mkdirp": {
1722
+ "version": "0.5.1",
1723
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1724
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1725
+ "dev": true,
1726
+ "dependencies": {
1727
+ "minimist": {
1728
+ "version": "0.0.8",
1729
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1730
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1731
+ "dev": true
1732
+ }
1733
+ }
1734
+ },
1735
+ "moment": {
1736
+ "version": "2.18.1",
1737
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz",
1738
+ "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=",
1739
+ "dev": true
1740
+ },
1741
+ "multimatch": {
1742
+ "version": "2.1.0",
1743
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz",
1744
+ "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=",
1745
+ "dev": true
1746
+ },
1747
+ "mute-stream": {
1748
+ "version": "0.0.3",
1749
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.3.tgz",
1750
+ "integrity": "sha1-8JwJDTM7MGP2Fcu8ynGzSYk/AVI=",
1751
+ "dev": true
1752
+ },
1753
+ "nan": {
1754
+ "version": "2.6.2",
1755
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
1756
+ "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=",
1757
+ "dev": true,
1758
+ "optional": true
1759
+ },
1760
+ "next-tick": {
1761
+ "version": "0.1.0",
1762
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.1.0.tgz",
1763
+ "integrity": "sha1-GRLM6OubaX1kD7upT48A3sO5Qlk=",
1764
+ "dev": true
1765
+ },
1766
+ "node-wp-i18n": {
1767
+ "version": "1.0.2",
1768
+ "resolved": "https://registry.npmjs.org/node-wp-i18n/-/node-wp-i18n-1.0.2.tgz",
1769
+ "integrity": "sha1-fwKe9busKlzBazCwkG7R4OVykHA=",
1770
+ "dev": true,
1771
+ "dependencies": {
1772
+ "lodash": {
1773
+ "version": "4.17.4",
1774
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
1775
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
1776
+ "dev": true
1777
+ }
1778
+ }
1779
+ },
1780
+ "nopt": {
1781
+ "version": "3.0.6",
1782
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
1783
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
1784
+ "dev": true
1785
+ },
1786
+ "normalize-package-data": {
1787
+ "version": "2.3.8",
1788
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz",
1789
+ "integrity": "sha1-2Bntoqne29H/pWPqQHHZNngilbs=",
1790
+ "dev": true
1791
+ },
1792
+ "normalize-path": {
1793
+ "version": "2.1.1",
1794
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
1795
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
1796
+ "dev": true
1797
+ },
1798
+ "npm-run-path": {
1799
+ "version": "2.0.2",
1800
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
1801
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
1802
+ "dev": true
1803
+ },
1804
+ "num2fraction": {
1805
+ "version": "1.2.2",
1806
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
1807
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
1808
+ "dev": true
1809
+ },
1810
+ "number-is-nan": {
1811
+ "version": "1.0.1",
1812
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1813
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1814
+ "dev": true
1815
+ },
1816
+ "object-assign": {
1817
+ "version": "4.1.1",
1818
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1819
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1820
+ "dev": true
1821
+ },
1822
+ "once": {
1823
+ "version": "1.4.0",
1824
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1825
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1826
+ "dev": true
1827
+ },
1828
+ "os-tmpdir": {
1829
+ "version": "1.0.2",
1830
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1831
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1832
+ "dev": true
1833
+ },
1834
+ "pako": {
1835
+ "version": "0.2.9",
1836
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
1837
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
1838
+ "dev": true
1839
+ },
1840
+ "parse-json": {
1841
+ "version": "2.2.0",
1842
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
1843
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
1844
+ "dev": true
1845
+ },
1846
+ "path-exists": {
1847
+ "version": "2.1.0",
1848
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
1849
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
1850
+ "dev": true
1851
+ },
1852
+ "path-is-absolute": {
1853
+ "version": "1.0.1",
1854
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1855
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1856
+ "dev": true
1857
+ },
1858
+ "path-key": {
1859
+ "version": "2.0.1",
1860
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
1861
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
1862
+ "dev": true
1863
+ },
1864
+ "path-type": {
1865
+ "version": "1.1.0",
1866
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
1867
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
1868
+ "dev": true
1869
+ },
1870
+ "pify": {
1871
+ "version": "2.3.0",
1872
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1873
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1874
+ "dev": true
1875
+ },
1876
+ "pinkie": {
1877
+ "version": "2.0.4",
1878
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
1879
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
1880
+ "dev": true
1881
+ },
1882
+ "pinkie-promise": {
1883
+ "version": "2.0.1",
1884
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
1885
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
1886
+ "dev": true
1887
+ },
1888
+ "pkg-up": {
1889
+ "version": "1.0.0",
1890
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz",
1891
+ "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=",
1892
+ "dev": true
1893
+ },
1894
+ "postcss": {
1895
+ "version": "4.1.16",
1896
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-4.1.16.tgz",
1897
+ "integrity": "sha1-TESbTIr53zyvbTf44eV10DYXWNw=",
1898
+ "dev": true
1899
+ },
1900
+ "pretty-bytes": {
1901
+ "version": "4.0.2",
1902
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
1903
+ "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=",
1904
+ "dev": true
1905
+ },
1906
+ "process-nextick-args": {
1907
+ "version": "1.0.7",
1908
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
1909
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
1910
+ "dev": true
1911
+ },
1912
+ "read-pkg": {
1913
+ "version": "1.1.0",
1914
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
1915
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
1916
+ "dev": true
1917
+ },
1918
+ "read-pkg-up": {
1919
+ "version": "1.0.1",
1920
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
1921
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
1922
+ "dev": true
1923
+ },
1924
+ "readable-stream": {
1925
+ "version": "2.2.10",
1926
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz",
1927
+ "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==",
1928
+ "dev": true
1929
+ },
1930
+ "redent": {
1931
+ "version": "1.0.0",
1932
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
1933
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
1934
+ "dev": true
1935
+ },
1936
+ "remove-trailing-separator": {
1937
+ "version": "1.0.1",
1938
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz",
1939
+ "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ=",
1940
+ "dev": true
1941
+ },
1942
+ "repeating": {
1943
+ "version": "2.0.1",
1944
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
1945
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
1946
+ "dev": true
1947
+ },
1948
+ "requirefresh": {
1949
+ "version": "2.1.0",
1950
+ "resolved": "https://registry.npmjs.org/requirefresh/-/requirefresh-2.1.0.tgz",
1951
+ "integrity": "sha1-dC3Mwg86lpGNZsbxWX3I/+vE9vU=",
1952
+ "dev": true
1953
+ },
1954
+ "resolve": {
1955
+ "version": "1.1.7",
1956
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
1957
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
1958
+ "dev": true
1959
+ },
1960
+ "resolve-from": {
1961
+ "version": "2.0.0",
1962
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
1963
+ "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=",
1964
+ "dev": true
1965
+ },
1966
+ "resolve-pkg": {
1967
+ "version": "0.1.0",
1968
+ "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-0.1.0.tgz",
1969
+ "integrity": "sha1-AsyZNBDik2livZcWahsHfalyVTE=",
1970
+ "dev": true
1971
+ },
1972
+ "rimraf": {
1973
+ "version": "2.2.8",
1974
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
1975
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
1976
+ "dev": true
1977
+ },
1978
+ "safe-buffer": {
1979
+ "version": "5.0.1",
1980
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
1981
+ "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=",
1982
+ "dev": true
1983
+ },
1984
+ "safefs": {
1985
+ "version": "4.1.0",
1986
+ "resolved": "https://registry.npmjs.org/safefs/-/safefs-4.1.0.tgz",
1987
+ "integrity": "sha1-+CrrS9165R9lPrIPZyizBYyNZEU=",
1988
+ "dev": true
1989
+ },
1990
+ "semver": {
1991
+ "version": "5.3.0",
1992
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
1993
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
1994
+ "dev": true
1995
+ },
1996
+ "shelljs": {
1997
+ "version": "0.3.0",
1998
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz",
1999
+ "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=",
2000
+ "dev": true
2001
+ },
2002
+ "signal-exit": {
2003
+ "version": "3.0.2",
2004
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
2005
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
2006
+ "dev": true
2007
+ },
2008
+ "source-map": {
2009
+ "version": "0.4.4",
2010
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
2011
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
2012
+ "dev": true
2013
+ },
2014
+ "spdx-correct": {
2015
+ "version": "1.0.2",
2016
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
2017
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
2018
+ "dev": true
2019
+ },
2020
+ "spdx-expression-parse": {
2021
+ "version": "1.0.4",
2022
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
2023
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
2024
+ "dev": true
2025
+ },
2026
+ "spdx-license-ids": {
2027
+ "version": "1.2.2",
2028
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
2029
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
2030
+ "dev": true
2031
+ },
2032
+ "sprintf-js": {
2033
+ "version": "1.0.3",
2034
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2035
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
2036
+ "dev": true
2037
+ },
2038
+ "stream-buffers": {
2039
+ "version": "2.2.0",
2040
+ "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
2041
+ "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=",
2042
+ "dev": true
2043
+ },
2044
+ "string_decoder": {
2045
+ "version": "1.0.1",
2046
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
2047
+ "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
2048
+ "dev": true
2049
+ },
2050
+ "strip-ansi": {
2051
+ "version": "3.0.1",
2052
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
2053
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
2054
+ "dev": true
2055
+ },
2056
+ "strip-bom": {
2057
+ "version": "2.0.0",
2058
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
2059
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
2060
+ "dev": true
2061
+ },
2062
+ "strip-indent": {
2063
+ "version": "1.0.1",
2064
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
2065
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
2066
+ "dev": true
2067
+ },
2068
+ "strip-json-comments": {
2069
+ "version": "1.0.4",
2070
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
2071
+ "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
2072
+ "dev": true
2073
+ },
2074
+ "supports-color": {
2075
+ "version": "2.0.0",
2076
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
2077
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
2078
+ "dev": true
2079
+ },
2080
+ "sync-exec": {
2081
+ "version": "0.4.0",
2082
+ "resolved": "https://registry.npmjs.org/sync-exec/-/sync-exec-0.4.0.tgz",
2083
+ "integrity": "sha1-N1guegT684zW5T6iBEW5n5kvaTM=",
2084
+ "dev": true
2085
+ },
2086
+ "tar-stream": {
2087
+ "version": "1.5.4",
2088
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz",
2089
+ "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=",
2090
+ "dev": true
2091
+ },
2092
+ "text-table": {
2093
+ "version": "0.2.0",
2094
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
2095
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
2096
+ "dev": true
2097
+ },
2098
+ "tmp": {
2099
+ "version": "0.0.28",
2100
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz",
2101
+ "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=",
2102
+ "dev": true
2103
+ },
2104
+ "trim-newlines": {
2105
+ "version": "1.0.0",
2106
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
2107
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
2108
+ "dev": true
2109
+ },
2110
+ "typechecker": {
2111
+ "version": "4.4.1",
2112
+ "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.4.1.tgz",
2113
+ "integrity": "sha1-+XuV9RsDhBchLWd9RaNz7nvO1+Y=",
2114
+ "dev": true
2115
+ },
2116
+ "typedarray": {
2117
+ "version": "0.0.6",
2118
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
2119
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
2120
+ "dev": true
2121
+ },
2122
+ "uglify-js": {
2123
+ "version": "3.0.15",
2124
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.15.tgz",
2125
+ "integrity": "sha1-qssyOoRrI0YCJw3q2KMkQaiAb0I=",
2126
+ "dev": true,
2127
+ "dependencies": {
2128
+ "source-map": {
2129
+ "version": "0.5.6",
2130
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
2131
+ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
2132
+ "dev": true
2133
+ }
2134
+ }
2135
+ },
2136
+ "underscore.string": {
2137
+ "version": "3.2.3",
2138
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz",
2139
+ "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=",
2140
+ "dev": true
2141
+ },
2142
+ "uri-path": {
2143
+ "version": "1.0.0",
2144
+ "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz",
2145
+ "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=",
2146
+ "dev": true
2147
+ },
2148
+ "util-deprecate": {
2149
+ "version": "1.0.2",
2150
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2151
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
2152
+ "dev": true
2153
+ },
2154
+ "validate-npm-package-license": {
2155
+ "version": "3.0.1",
2156
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
2157
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
2158
+ "dev": true
2159
+ },
2160
+ "walkdir": {
2161
+ "version": "0.0.11",
2162
+ "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz",
2163
+ "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=",
2164
+ "dev": true
2165
+ },
2166
+ "which": {
2167
+ "version": "1.2.14",
2168
+ "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
2169
+ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
2170
+ "dev": true
2171
+ },
2172
+ "wrappy": {
2173
+ "version": "1.0.2",
2174
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2175
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2176
+ "dev": true
2177
+ },
2178
+ "xtend": {
2179
+ "version": "4.0.1",
2180
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
2181
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
2182
+ "dev": true
2183
+ },
2184
+ "zip-stream": {
2185
+ "version": "1.1.1",
2186
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.1.1.tgz",
2187
+ "integrity": "sha1-Uha0i7tNJlH2TVxubwnrSnOZ1Vc=",
2188
+ "dev": true,
2189
+ "dependencies": {
2190
+ "lodash": {
2191
+ "version": "4.17.4",
2192
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
2193
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
2194
+ "dev": true
2195
+ }
2196
+ }
2197
+ }
2198
+ }
2199
+ }
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === BackUpWordPress ===
2
  Contributors: humanmade, willmot, dashaluna, pauldewouters, joehoyle, mattheu, tcrsavage, cuvelier, katmoody, sambulance
3
- Tags: back up, backup, backups, schedule, restore, restoration, migrate, migration, duplicate, copy, sftp, ftp, database, mysql, sql, dump, zip, db, files, archive, wp-cli, email, e-mail, cloud, dropbox, google drive, amazon, s3, dreamhost, dreamobjects, rackspace, microsoft, azure
4
  Requires at least: 3.9
5
- Tested up to: 4.7
6
- Stable tag: 3.6.2
7
 
8
  Simple automated backups of your WordPress-powered website.
9
 
@@ -158,6 +158,12 @@ users should see major improvements to reliability.
158
 
159
  == Changelog ==
160
 
 
 
 
 
 
 
161
  ### 3.6.3.1 / 2016-12-14
162
 
163
  * Fix issue where low disk space caused the admin interface to be unavailable
1
  === BackUpWordPress ===
2
  Contributors: humanmade, willmot, dashaluna, pauldewouters, joehoyle, mattheu, tcrsavage, cuvelier, katmoody, sambulance
3
+ Tags: back up, backup, backups, database, zip, db, files, archive, wp-cli, humanmade
4
  Requires at least: 3.9
5
+ Tested up to: 4.9.2
6
+ Stable tag: 3.6.4
7
 
8
  Simple automated backups of your WordPress-powered website.
9
 
158
 
159
  == Changelog ==
160
 
161
+ ### 3.6.4 / 2016-06-02
162
+
163
+ * Various improvements to exclusion handling.
164
+ * i18n improvements.
165
+ * Misc. UI improvements.
166
+
167
  ### 3.6.3.1 / 2016-12-14
168
 
169
  * Fix issue where low disk space caused the admin interface to be unavailable
vendor/autoload.php CHANGED
@@ -2,6 +2,6 @@
2
 
3
  // autoload.php @generated by Composer
4
 
5
- require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitad035600fdf4e2767aebf7cd5f7d027e::getLoader();
2
 
3
  // autoload.php @generated by Composer
4
 
5
+ require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit9504fdc00a45139861e6154617ee7782::getLoader();
vendor/composer/ClassLoader.php CHANGED
@@ -55,6 +55,7 @@ class ClassLoader
55
  private $classMap = array();
56
  private $classMapAuthoritative = false;
57
  private $missingClasses = array();
 
58
 
59
  public function getPrefixes()
60
  {
@@ -271,6 +272,26 @@ class ClassLoader
271
  return $this->classMapAuthoritative;
272
  }
273
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
  /**
275
  * Registers this instance as an autoloader.
276
  *
@@ -313,11 +334,6 @@ class ClassLoader
313
  */
314
  public function findFile($class)
315
  {
316
- // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
317
- if ('\\' == $class[0]) {
318
- $class = substr($class, 1);
319
- }
320
-
321
  // class map lookup
322
  if (isset($this->classMap[$class])) {
323
  return $this->classMap[$class];
@@ -325,6 +341,12 @@ class ClassLoader
325
  if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
326
  return false;
327
  }
 
 
 
 
 
 
328
 
329
  $file = $this->findFileWithExtension($class, '.php');
330
 
@@ -333,6 +355,10 @@ class ClassLoader
333
  $file = $this->findFileWithExtension($class, '.hh');
334
  }
335
 
 
 
 
 
336
  if (false === $file) {
337
  // Remember that this class does not exist.
338
  $this->missingClasses[$class] = true;
@@ -348,9 +374,13 @@ class ClassLoader
348
 
349
  $first = $class[0];
350
  if (isset($this->prefixLengthsPsr4[$first])) {
351
- foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
352
- if (0 === strpos($class, $prefix)) {
353
- foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
 
 
 
 
354
  if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
355
  return $file;
356
  }
55
  private $classMap = array();
56
  private $classMapAuthoritative = false;
57
  private $missingClasses = array();
58
+ private $apcuPrefix;
59
 
60
  public function getPrefixes()
61
  {
272
  return $this->classMapAuthoritative;
273
  }
274
 
275
+ /**
276
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
277
+ *
278
+ * @param string|null $apcuPrefix
279
+ */
280
+ public function setApcuPrefix($apcuPrefix)
281
+ {
282
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
283
+ }
284
+
285
+ /**
286
+ * The APCu prefix in use, or null if APCu caching is not enabled.
287
+ *
288
+ * @return string|null
289
+ */
290
+ public function getApcuPrefix()
291
+ {
292
+ return $this->apcuPrefix;
293
+ }
294
+
295
  /**
296
  * Registers this instance as an autoloader.
297
  *
334
  */
335
  public function findFile($class)
336
  {
 
 
 
 
 
337
  // class map lookup
338
  if (isset($this->classMap[$class])) {
339
  return $this->classMap[$class];
341
  if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
342
  return false;
343
  }
344
+ if (null !== $this->apcuPrefix) {
345
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
346
+ if ($hit) {
347
+ return $file;
348
+ }
349
+ }
350
 
351
  $file = $this->findFileWithExtension($class, '.php');
352
 
355
  $file = $this->findFileWithExtension($class, '.hh');
356
  }
357
 
358
+ if (null !== $this->apcuPrefix) {
359
+ apcu_add($this->apcuPrefix.$class, $file);
360
+ }
361
+
362
  if (false === $file) {
363
  // Remember that this class does not exist.
364
  $this->missingClasses[$class] = true;
374
 
375
  $first = $class[0];
376
  if (isset($this->prefixLengthsPsr4[$first])) {
377
+ $subPath = $class;
378
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
379
+ $subPath = substr($subPath, 0, $lastPos);
380
+ $search = $subPath.'\\';
381
+ if (isset($this->prefixDirsPsr4[$search])) {
382
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
383
+ $length = $this->prefixLengthsPsr4[$first][$search];
384
  if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
385
  return $file;
386
  }
vendor/composer/LICENSE CHANGED
@@ -1,5 +1,5 @@
1
 
2
- Copyright (c) 2016 Nils Adermann, Jordi Boggiano
3
 
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
  of this software and associated documentation files (the "Software"), to deal
1
 
2
+ Copyright (c) Nils Adermann, Jordi Boggiano
3
 
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
  of this software and associated documentation files (the "Software"), to deal
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitad035600fdf4e2767aebf7cd5f7d027e
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInitad035600fdf4e2767aebf7cd5f7d027e
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInitad035600fdf4e2767aebf7cd5f7d027e', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInitad035600fdf4e2767aebf7cd5f7d027e', 'loadClassLoader'));
25
 
26
- $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION');
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInitad035600fdf4e2767aebf7cd5f7d027e::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit9504fdc00a45139861e6154617ee7782
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit9504fdc00a45139861e6154617ee7782', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit9504fdc00a45139861e6154617ee7782', 'loadClassLoader'));
25
 
26
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit9504fdc00a45139861e6154617ee7782::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInitad035600fdf4e2767aebf7cd5f7d027e
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'S' =>
@@ -36,8 +36,8 @@ class ComposerStaticInitad035600fdf4e2767aebf7cd5f7d027e
36
  public static function getInitializer(ClassLoader $loader)
37
  {
38
  return \Closure::bind(function () use ($loader) {
39
- $loader->prefixLengthsPsr4 = ComposerStaticInitad035600fdf4e2767aebf7cd5f7d027e::$prefixLengthsPsr4;
40
- $loader->prefixDirsPsr4 = ComposerStaticInitad035600fdf4e2767aebf7cd5f7d027e::$prefixDirsPsr4;
41
 
42
  }, null, ClassLoader::class);
43
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit9504fdc00a45139861e6154617ee7782
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'S' =>
36
  public static function getInitializer(ClassLoader $loader)
37
  {
38
  return \Closure::bind(function () use ($loader) {
39
+ $loader->prefixLengthsPsr4 = ComposerStaticInit9504fdc00a45139861e6154617ee7782::$prefixLengthsPsr4;
40
+ $loader->prefixDirsPsr4 = ComposerStaticInit9504fdc00a45139861e6154617ee7782::$prefixDirsPsr4;
41
 
42
  }, null, ClassLoader::class);
43
  }
vendor/composer/installed.json CHANGED
@@ -1,23 +1,23 @@
1
  [
2
  {
3
  "name": "symfony/finder",
4
- "version": "v2.8.14",
5
- "version_normalized": "2.8.14.0",
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/symfony/finder.git",
9
- "reference": "0023b024363dfc0cd21262e556f25a291fe8d7fd"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/symfony/finder/zipball/0023b024363dfc0cd21262e556f25a291fe8d7fd",
14
- "reference": "0023b024363dfc0cd21262e556f25a291fe8d7fd",
15
  "shasum": ""
16
  },
17
  "require": {
18
  "php": ">=5.3.9"
19
  },
20
- "time": "2016-11-03 07:52:58",
21
  "type": "library",
22
  "extra": {
23
  "branch-alias": {
@@ -52,23 +52,23 @@
52
  },
53
  {
54
  "name": "symfony/process",
55
- "version": "v2.8.14",
56
- "version_normalized": "2.8.14.0",
57
  "source": {
58
  "type": "git",
59
  "url": "https://github.com/symfony/process.git",
60
- "reference": "024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f"
61
  },
62
  "dist": {
63
  "type": "zip",
64
- "url": "https://api.github.com/repos/symfony/process/zipball/024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f",
65
- "reference": "024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f",
66
  "shasum": ""
67
  },
68
  "require": {
69
  "php": ">=5.3.9"
70
  },
71
- "time": "2016-09-29 14:03:54",
72
  "type": "library",
73
  "extra": {
74
  "branch-alias": {
@@ -103,17 +103,17 @@
103
  },
104
  {
105
  "name": "ifsnop/mysqldump-php",
106
- "version": "v2.2",
107
- "version_normalized": "2.2.0.0",
108
  "source": {
109
  "type": "git",
110
  "url": "https://github.com/ifsnop/mysqldump-php.git",
111
- "reference": "6c1b84c5b05d862d15ba9ddf92c7d99a3d81e439"
112
  },
113
  "dist": {
114
  "type": "zip",
115
- "url": "https://api.github.com/repos/ifsnop/mysqldump-php/zipball/6c1b84c5b05d862d15ba9ddf92c7d99a3d81e439",
116
- "reference": "6c1b84c5b05d862d15ba9ddf92c7d99a3d81e439",
117
  "shasum": ""
118
  },
119
  "require": {
@@ -123,7 +123,7 @@
123
  "phpunit/phpunit": "3.7.*",
124
  "squizlabs/php_codesniffer": "1.*"
125
  },
126
- "time": "2016-09-07 06:56:07",
127
  "type": "library",
128
  "installation-source": "dist",
129
  "autoload": {
1
  [
2
  {
3
  "name": "symfony/finder",
4
+ "version": "v2.8.21",
5
+ "version_normalized": "2.8.21.0",
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/symfony/finder.git",
9
+ "reference": "b058a6f0cb6ee9b6b727aae03d5a62474a308528"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/symfony/finder/zipball/b058a6f0cb6ee9b6b727aae03d5a62474a308528",
14
+ "reference": "b058a6f0cb6ee9b6b727aae03d5a62474a308528",
15
  "shasum": ""
16
  },
17
  "require": {
18
  "php": ">=5.3.9"
19
  },
20
+ "time": "2017-05-25T22:57:22+00:00",
21
  "type": "library",
22
  "extra": {
23
  "branch-alias": {
52
  },
53
  {
54
  "name": "symfony/process",
55
+ "version": "v2.8.21",
56
+ "version_normalized": "2.8.21.0",
57
  "source": {
58
  "type": "git",
59
  "url": "https://github.com/symfony/process.git",
60
+ "reference": "d54232f5682fda2f8bbebff7c81b864646867ab9"
61
  },
62
  "dist": {
63
  "type": "zip",
64
+ "url": "https://api.github.com/repos/symfony/process/zipball/d54232f5682fda2f8bbebff7c81b864646867ab9",
65
+ "reference": "d54232f5682fda2f8bbebff7c81b864646867ab9",
66
  "shasum": ""
67
  },
68
  "require": {
69
  "php": ">=5.3.9"
70
  },
71
+ "time": "2017-05-08T01:19:21+00:00",
72
  "type": "library",
73
  "extra": {
74
  "branch-alias": {
103
  },
104
  {
105
  "name": "ifsnop/mysqldump-php",
106
+ "version": "v2.3.1",
107
+ "version_normalized": "2.3.1.0",
108
  "source": {
109
  "type": "git",
110
  "url": "https://github.com/ifsnop/mysqldump-php.git",
111
+ "reference": "1806317c2ce897cb38fbae5283f17d1451308244"
112
  },
113
  "dist": {
114
  "type": "zip",
115
+ "url": "https://api.github.com/repos/ifsnop/mysqldump-php/zipball/1806317c2ce897cb38fbae5283f17d1451308244",
116
+ "reference": "1806317c2ce897cb38fbae5283f17d1451308244",
117
  "shasum": ""
118
  },
119
  "require": {
123
  "phpunit/phpunit": "3.7.*",
124
  "squizlabs/php_codesniffer": "1.*"
125
  },
126
+ "time": "2017-05-07T22:27:29+00:00",
127
  "type": "library",
128
  "installation-source": "dist",
129
  "autoload": {
vendor/ifsnop/mysqldump-php/.gitignore DELETED
@@ -1,4 +0,0 @@
1
- /.project
2
- /composer.phar
3
- /.settings
4
- /vendor/
 
 
 
 
vendor/ifsnop/mysqldump-php/.scrutinizer.yml DELETED
@@ -1,43 +0,0 @@
1
- before_commands:
2
- - 'composer install --dev --prefer-source'
3
-
4
- checks:
5
- php: true
6
-
7
- filter:
8
- excluded_paths: [vendor/*, tests/*]
9
-
10
- tools:
11
- php_mess_detector:
12
- enabled: true
13
- config:
14
- controversial_rules:
15
- camel_case_method_name: false
16
-
17
- sensiolabs_security_checker: true
18
-
19
- # Analyzes the size and structure of a PHP project.
20
- php_pdepend: true
21
- php_loc:
22
- enabled: true
23
-
24
- # We recommend to use PHP Code Similarity Analyzer instead as it is
25
- # robust against code modifications and provides better targets for
26
- # refactoring.
27
- php_cpd: false
28
- php_sim: true
29
-
30
- # PHP Analyzer is our own analysis tool for PHP code. It’s latest
31
- # version is exclusively available through the hosted version on
32
- # scrutinizer-ci.com.
33
- php_analyzer: true
34
- php_code_sniffer:
35
- enabled: true
36
- config:
37
- standard: "PSR1"
38
- sniffs:
39
- generic:
40
- naming_conventions:
41
- camel_caps_function_name_sniff: false
42
- files:
43
- one_class_per_file_sniff: false
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/ifsnop/mysqldump-php/.travis.yml DELETED
@@ -1,22 +0,0 @@
1
- sudo: false
2
-
3
- language: php
4
-
5
- php:
6
- - 5.6
7
- - 5.5
8
- - 5.4
9
- - 5.3
10
- - hhvm
11
- - nightly
12
-
13
- services:
14
- - mysql
15
-
16
- before_script:
17
- - curl -s http://getcomposer.org/installer | php
18
- - php composer.phar install --dev
19
-
20
- script:
21
- - php src/Ifsnop/Mysqldump/Mysqldump.php
22
- - cd tests && ./test.sh
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/ifsnop/mysqldump-php/README.md DELETED
@@ -1,266 +0,0 @@
1
- MySQLDump - PHP
2
- =========
3
-
4
- [Requirements](https://github.com/ifsnop/mysqldump-php#requirements) |
5
- [Installing](https://github.com/ifsnop/mysqldump-php#installing) |
6
- [Getting started](https://github.com/ifsnop/mysqldump-php#getting-started) |
7
- [API](https://github.com/ifsnop/mysqldump-php#constructor-and-default-parameters) |
8
- [Settings](https://github.com/ifsnop/mysqldump-php#dump-settings) |
9
- [PDO Settings](https://github.com/ifsnop/mysqldump-php#pdo-settings) |
10
- [TODO](https://github.com/ifsnop/mysqldump-php#todo) |
11
- [License](https://github.com/ifsnop/mysqldump-php#license) |
12
- [Credits](https://github.com/ifsnop/mysqldump-php#credits)
13
-
14
- [![Build Status](https://travis-ci.org/ifsnop/mysqldump-php.svg?branch=devel)](https://travis-ci.org/ifsnop/mysqldump-php)
15
- [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/ifsnop/mysqldump-php/badges/quality-score.png?s=d02891e196a3ca1298619032a538ce8ae8cafd2b)](https://scrutinizer-ci.com/g/ifsnop/mysqldump-php/)
16
- [![Latest Stable Version](https://poser.pugx.org/ifsnop/mysqldump-php/v/stable.png)](https://packagist.org/packages/ifsnop/mysqldump-php)
17
-
18
- This is a php version of linux's mysqldump in terminal "$ mysqldump -u username -p...", without dependencies, output compression and sane defaults.
19
-
20
- Out of the box, MySQLDump-PHP supports backing up table structures, the data itself, views and triggers.
21
-
22
- MySQLDump-PHP is the only library that supports:
23
- * output binary blobs as hex.
24
- * resolves view dependencies (using Stand-In tables).
25
- * output compared against original mysqldump. Linked to travis-ci testing system.
26
- * dumps stored procedures.
27
-
28
- ## Important
29
-
30
- From version 2.0, connections to database are made using the standard DSN, documented in [PDO connection string](http://php.net/manual/en/ref.pdo-mysql.connection.php).
31
-
32
- ## Requirements
33
-
34
- - PHP 5.3.0 or newer
35
- - MySQL 4.1.0 or newer
36
- - [PDO](http://php.net/pdo)
37
-
38
- ## Installing
39
-
40
- Using [Composer](http://getcomposer.org):
41
-
42
- ```
43
- $ composer require ifsnop/mysqldump-php:2.*
44
-
45
- ```
46
-
47
- Or via json file:
48
-
49
- ````
50
- "require": {
51
- "ifsnop/mysqldump-php":"2.*"
52
- }
53
- ````
54
-
55
- Using [Curl](http://curl.haxx.se):
56
-
57
- ```
58
- $ curl --silent --location https://github.com/ifsnop/mysqldump-php/archive/v2.0.0.tar.gz | tar xvfz -
59
- ```
60
-
61
- ## Getting started
62
-
63
- With [Autoloader](http://www.php-fig.org/psr/psr-4/)/[Composer](http://getcomposer.org):
64
-
65
- ```
66
- <?php
67
-
68
- use Ifsnop\Mysqldump as IMysqldump;
69
-
70
- try {
71
- $dump = new IMysqldump\Mysqldump('mysql:host=localhost;dbname=testdb', 'username', 'password');
72
- $dump->start('storage/work/dump.sql');
73
- } catch (\Exception $e) {
74
- echo 'mysqldump-php error: ' . $e->getMessage();
75
- }
76
-
77
- ?>
78
- ```
79
-
80
- Plain old PHP:
81
-
82
- ```
83
- <?php
84
-
85
- include_once(dirname(__FILE__) . '/mysqldump-php-2.0.0/src/Ifsnop/Mysqldump/Mysqldump.php');
86
- $dump = new Ifsnop\Mysqldump\Mysqldump('mysql:host=localhost;dbname=testdb', 'username', 'password');
87
- $dump->start('storage/work/dump.sql');
88
-
89
- ?>
90
- ```
91
-
92
- Refer to the [wiki](https://github.com/ifsnop/mysqldump-php/wiki/full-example) for some examples and a comparision between mysqldump and mysqldump-php dumps.
93
-
94
- ## Constructor and default parameters
95
- /**
96
- * Constructor of Mysqldump. Note that in the case of an SQLite database
97
- * connection, the filename must be in the $db parameter.
98
- *
99
- * @param string $dsn PDO DSN connection string
100
- * @param string $user SQL account username
101
- * @param string $pass SQL account password
102
- * @param array $dumpSettings SQL database settings
103
- * @param array $pdoSettings PDO configured attributes
104
- */
105
- public function __construct(
106
- $dsn = '',
107
- $user = '',
108
- $pass = '',
109
- $dumpSettings = array(),
110
- $pdoSettings = array()
111
- )
112
-
113
- $dumpSettingsDefault = array(
114
- 'include-tables' => array(),
115
- 'exclude-tables' => array(),
116
- 'compress' => 'None',
117
- 'no-data' => false,
118
- 'add-drop-table' => false,
119
- 'single-transaction' => true,
120
- 'lock-tables' => false,
121
- 'add-locks' => true,
122
- 'extended-insert' => true,
123
- 'disable-keys' => true,
124
- 'where' => '',
125
- 'no-create-info' => false,
126
- 'skip-triggers' => false,
127
- 'add-drop-trigger' => true,
128
- 'routines' => false,
129
- 'hex-blob' => true,
130
- 'databases' => false,
131
- 'add-drop-database' => false,
132
- 'skip-tz-utc' => false,
133
- 'no-autocommit' => true,
134
- 'default-character-set' => 'utf8',
135
- 'skip-comments' => false,
136
- 'skip-dump-date' => false,
137
- );
138
-
139
- $pdoSettingsDefaults = array(
140
- PDO::ATTR_PERSISTENT => true,
141
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
142
- PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false
143
- );
144
-
145
- // missing settings in constructor will be replaced by default options
146
- $this->_pdoSettings = self::array_replace_recursive($pdoSettingsDefault, $pdoSettings);
147
- $this->_dumpSettings = self::array_replace_recursive($dumpSettingsDefault, $dumpSettings);
148
-
149
- ## Dump Settings
150
-
151
- - **include-tables**
152
- - Only include these tables (array of table names)
153
- - **exclude-tables**
154
- - Exclude these tables (array of table names)
155
- - **compress**
156
- - Gzip, Bzip2, None.
157
- - Could be specified using the declared consts: IMysqldump\Mysqldump::GZIP, IMysqldump\Mysqldump::BZIP2 or IMysqldump\Mysqldump::NONE
158
- - **no-data**
159
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_no-data
160
- - **add-drop-table**
161
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_add-drop-table
162
- - **single-transaction**
163
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
164
- - **lock-tables**
165
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_lock-tables
166
- - **add-locks**
167
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_add-locks
168
- - **extended-insert**
169
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_extended-insert
170
- - **disable-keys**
171
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_disable-keys
172
- - **where**
173
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_where
174
- - **no-create-info**
175
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_no-create-info
176
- - **skip-triggers**
177
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_triggers
178
- - **add-drop-triggers**
179
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_add-drop-trigger
180
- - **routines**
181
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_routines
182
- - **hex-blob**
183
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_hex-blob
184
- - **databases**
185
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_databases
186
- - **add-drop-database**
187
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_add-drop-database
188
- - **skip-tz-utc**
189
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_tz-utc
190
- - **no-autocommit**
191
- - Option to disable autocommit (faster inserts, no problems with index keys)
192
- - http://dev.mysql.com/doc/refman/4.1/en/commit.html
193
- - **default-character-set**
194
- - utf8 (default, compatible option), utf8mb4 (for full utf8 compliance)
195
- - Could be specified using the declared consts: IMysqldump\Mysqldump::UTF8 or IMysqldump\Mysqldump::UTF8MB4BZIP2
196
- - http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
197
- - https://mathiasbynens.be/notes/mysql-utf8mb4
198
- - **skip-comments**
199
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_comments
200
- - **skip-dump-date**
201
- - http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_dump-date
202
-
203
- The following options are now enabled by default, and there is no way to disable them since
204
- they should always be used.
205
-
206
- - **disable-foreign-keys-check**
207
- - http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html
208
-
209
- ## PDO Settings
210
-
211
- - **PDO::ATTR_PERSISTENT**
212
- - **PDO::ATTR_ERRMODE**
213
- - **PDO::MYSQL_ATTR_INIT_COMMAND**
214
- - **PDO::MYSQL_ATTR_USE_BUFFERED_QUERY**
215
- - http://www.php.net/manual/en/ref.pdo-mysql.php
216
- - http://stackoverflow.com/questions/13728106/unexpectedly-hitting-php-memory-limit-with-a-single-pdo-query/13729745#13729745
217
- - http://www.php.net/manual/en/mysqlinfo.concepts.buffering.php
218
-
219
- ## Errors
220
-
221
- To dump a database, you need the following privileges :
222
-
223
- - **SELECT**
224
- - In order to dump table structures and data.
225
- - **SHOW VIEW**
226
- - If any databases has views, else you will get an error.
227
- - **TRIGGER**
228
- - If any table has one or more triggers.
229
- - **LOCK TABLES**
230
- - If "lock tables" option was enabled.
231
-
232
- Use **SHOW GRANTS FOR user@host;** to know what privileges user has. See the following link for more information:
233
-
234
- [Which are the minimum privileges required to get a backup of a MySQL database schema?](http://dba.stackexchange.com/questions/55546/which-are-the-minimum-privileges-required-to-get-a-backup-of-a-mysql-database-sc/55572#55572)
235
-
236
- ## Tests
237
-
238
- Current code for testing is an ugly hack. Probably there are much better ways
239
- of doing them using PHPUnit, so PR's are welcomed. The testing script creates
240
- and populates a database using all possible datatypes. Then it exports it
241
- using both mysqldump-php and mysqldump, and compares the output. Only if
242
- it is identical tests are OK.
243
-
244
- ## TODO
245
-
246
- ...
247
-
248
- ## Contributing
249
-
250
- Format all code to PHP-FIG standards.
251
- http://www.php-fig.org/
252
-
253
- ## License
254
-
255
- This project is open-sourced software licensed under the [GPL license](http://www.gnu.org/copyleft/gpl.html)
256
-
257
- ## Credits
258
-
259
- Originally based on James Elliott's script from 2009.
260
- http://code.google.com/p/db-mysqldump/
261
-
262
- Adapted and extended by Michael J. Calkins.
263
- https://github.com/clouddueling
264
-
265
- Currently maintained and developed by Diego Torres.
266
- https://github.com/ifsnop
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/ifsnop/mysqldump-php/phpunit.xml DELETED
@@ -1,18 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <phpunit backupGlobals="false"
3
- backupStaticAttributes="false"
4
- bootstrap="vendor/autoload.php"
5
- colors="true"
6
- convertErrorsToExceptions="true"
7
- convertNoticesToExceptions="true"
8
- convertWarningsToExceptions="true"
9
- processIsolation="false"
10
- stopOnFailure="false"
11
- syntaxCheck="false"
12
- >
13
- <testsuites>
14
- <testsuite name="Package Test Suite">
15
- <directory suffix=".php">./tests/</directory>
16
- </testsuite>
17
- </testsuites>
18
- </phpunit>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/ifsnop/mysqldump-php/src/Ifsnop/Mysqldump/Mysqldump.php CHANGED
@@ -71,7 +71,8 @@ class Mysqldump
71
  private $views = array();
72
  private $triggers = array();
73
  private $procedures = array();
74
- private $dbHandler;
 
75
  private $dbType;
76
  private $compressManager;
77
  private $typeAdapter;
@@ -116,28 +117,31 @@ class Mysqldump
116
  'include-tables' => array(),
117
  'exclude-tables' => array(),
118
  'compress' => Mysqldump::NONE,
119
- 'no-data' => false,
 
 
 
120
  'add-drop-table' => false,
121
- 'single-transaction' => true,
122
- 'lock-tables' => true,
123
  'add-locks' => true,
124
- 'extended-insert' => true,
125
  'complete-insert' => false,
 
 
126
  'disable-keys' => true,
127
- 'where' => '',
 
 
 
 
128
  'no-create-info' => false,
129
- 'skip-triggers' => false,
130
- 'add-drop-trigger' => true,
131
  'routines' => false,
132
- 'hex-blob' => true, /* faster than escaped content */
133
- 'databases' => false,
134
- 'add-drop-database' => false,
135
  'skip-tz-utc' => false,
136
- 'no-autocommit' => true,
137
- 'default-character-set' => Mysqldump::UTF8,
138
  'skip-comments' => false,
139
  'skip-dump-date' => false,
140
- 'init_commands' => array(),
141
  /* deprecated */
142
  'disable-foreign-keys-check' => true
143
  );
@@ -296,6 +300,10 @@ class Mysqldump
296
  );
297
  }
298
 
 
 
 
 
299
  $this->dbHandler->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_NATURAL);
300
  $this->typeAdapter = TypeAdapterFactory::create($this->dbType, $this->dbHandler);
301
  }
@@ -360,6 +368,7 @@ class Mysqldump
360
  $this->exportViews();
361
  $this->exportTriggers();
362
  $this->exportProcedures();
 
363
 
364
  // Restore saved parameters
365
  $this->compressManager->write(
@@ -477,6 +486,13 @@ class Mysqldump
477
  array_push($this->procedures, $row['procedure_name']);
478
  }
479
  }
 
 
 
 
 
 
 
480
  }
481
 
482
  /**
@@ -513,7 +529,12 @@ class Mysqldump
513
  continue;
514
  }
515
  $this->getTableStructure($table);
516
- if ( false === $this->dumpSettings['no-data'] ) {
 
 
 
 
 
517
  $this->listValues($table);
518
  }
519
  }
@@ -570,6 +591,19 @@ class Mysqldump
570
  }
571
  }
572
 
 
 
 
 
 
 
 
 
 
 
 
 
 
573
  /**
574
  * Table structure extractor
575
  *
@@ -624,7 +658,8 @@ class Mysqldump
624
  'is_numeric'=> $types['is_numeric'],
625
  'is_blob' => $types['is_blob'],
626
  'type' => $types['type'],
627
- 'type_sql' => $col['Type']
 
628
  );
629
  }
630
 
@@ -759,6 +794,29 @@ class Mysqldump
759
  }
760
  }
761
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
762
  /**
763
  * Escape values with quotes when needed
764
  *
@@ -804,7 +862,7 @@ class Mysqldump
804
  $lineSize = 0;
805
 
806
  $colStmt = $this->getColumnStmt($tableName);
807
- $stmt = "SELECT $colStmt FROM `$tableName`";
808
 
809
  if ($this->dumpSettings['where']) {
810
  $stmt .= " WHERE {$this->dumpSettings['where']}";
@@ -818,9 +876,9 @@ class Mysqldump
818
 
819
  if ($this->dumpSettings['complete-insert']) {
820
  $lineSize += $this->compressManager->write(
821
- "INSERT INTO `$tableName` (`" .
822
- implode("`, `", array_keys($this->tableColumnTypes[$tableName])) .
823
- "`) VALUES (" . implode(",", $vals) . ")"
824
  );
825
  } else {
826
  $lineSize += $this->compressManager->write(
@@ -831,7 +889,7 @@ class Mysqldump
831
  } else {
832
  $lineSize += $this->compressManager->write(",(" . implode(",", $vals) . ")");
833
  }
834
- if (($lineSize > self::MAXLINESIZE) ||
835
  !$this->dumpSettings['extended-insert']) {
836
  $onlyOnce = true;
837
  $lineSize = $this->compressManager->write(";" . PHP_EOL);
@@ -950,11 +1008,13 @@ class Mysqldump
950
  $colStmt[] = "LPAD(HEX(`${colName}`),2,'0') AS `${colName}`";
951
  } else if ($colType['is_blob'] && $this->dumpSettings['hex-blob']) {
952
  $colStmt[] = "HEX(`${colName}`) AS `${colName}`";
 
 
 
953
  } else {
954
  $colStmt[] = "`${colName}`";
955
  }
956
  }
957
- $colStmt = implode($colStmt, ",");
958
 
959
  return $colStmt;
960
  }
@@ -1248,6 +1308,11 @@ abstract class TypeAdapterFactory
1248
  return "";
1249
  }
1250
 
 
 
 
 
 
1251
  public function setup_transaction()
1252
  {
1253
  return "";
@@ -1446,15 +1511,27 @@ class TypeAdapterMysql extends TypeAdapterFactory
1446
  return "SHOW CREATE PROCEDURE `$procedureName`";
1447
  }
1448
 
1449
- public function create_table($row, $dumpSettings)
 
 
 
 
 
1450
  {
1451
- if (!isset($row['Create Table'])) {
1452
  throw new Exception("Error getting table code, unknown output");
1453
  }
1454
 
 
 
 
 
 
 
 
1455
  $ret = "/*!40101 SET @saved_cs_client = @@character_set_client */;" . PHP_EOL .
1456
  "/*!40101 SET character_set_client = " . $dumpSettings['default-character-set'] . " */;" . PHP_EOL .
1457
- $row['Create Table'] . ";" . PHP_EOL .
1458
  "/*!40101 SET character_set_client = @saved_cs_client */;" . PHP_EOL .
1459
  PHP_EOL;
1460
  return $ret;
@@ -1515,11 +1592,11 @@ class TypeAdapterMysql extends TypeAdapterFactory
1515
  $triggerStmtReplaced
1516
  );
1517
  if ( false === $triggerStmtReplaced ) {
1518
- $triggerStmtReplaced = $triggerStmt;
1519
  }
1520
 
1521
  $ret .= "DELIMITER ;;" . PHP_EOL .
1522
- $triggerStmtReplaced . "*/;;" . PHP_EOL .
1523
  "DELIMITER ;" . PHP_EOL . PHP_EOL;
1524
  return $ret;
1525
  }
@@ -1545,6 +1622,59 @@ class TypeAdapterMysql extends TypeAdapterFactory
1545
  return $ret;
1546
  }
1547
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1548
  public function show_tables()
1549
  {
1550
  $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__);
@@ -1586,6 +1716,21 @@ class TypeAdapterMysql extends TypeAdapterFactory
1586
  "WHERE ROUTINE_TYPE='PROCEDURE' AND ROUTINE_SCHEMA='${args[0]}'";
1587
  }
1588
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1589
  public function setup_transaction()
1590
  {
1591
  return "SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ";
@@ -1618,7 +1763,6 @@ class TypeAdapterMysql extends TypeAdapterFactory
1618
  {
1619
  $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__);
1620
  $args = func_get_args();
1621
-
1622
  return "LOCK TABLES `${args[0]}` WRITE;" . PHP_EOL;
1623
  }
1624
 
@@ -1657,7 +1801,6 @@ class TypeAdapterMysql extends TypeAdapterFactory
1657
  {
1658
  $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__);
1659
  $args = func_get_args();
1660
-
1661
  return "/*!40000 DROP DATABASE IF EXISTS `${args[0]}`*/;" .
1662
  PHP_EOL . PHP_EOL;
1663
  }
@@ -1717,6 +1860,8 @@ class TypeAdapterMysql extends TypeAdapterFactory
1717
  }
1718
  $colInfo['is_numeric'] = in_array($colInfo['type'], $this->mysqlTypes['numerical']);
1719
  $colInfo['is_blob'] = in_array($colInfo['type'], $this->mysqlTypes['blob']);
 
 
1720
 
1721
  return $colInfo;
1722
  }
@@ -1766,6 +1911,14 @@ class TypeAdapterMysql extends TypeAdapterFactory
1766
  return $ret;
1767
  }
1768
 
 
 
 
 
 
 
 
 
1769
  private function check_parameters($num_args, $expected_num_args, $method_name)
1770
  {
1771
  if ( $num_args != $expected_num_args ) {
71
  private $views = array();
72
  private $triggers = array();
73
  private $procedures = array();
74
+ private $events = array();
75
+ private $dbHandler = null;
76
  private $dbType;
77
  private $compressManager;
78
  private $typeAdapter;
117
  'include-tables' => array(),
118
  'exclude-tables' => array(),
119
  'compress' => Mysqldump::NONE,
120
+ 'init_commands' => array(),
121
+ 'no-data' => array(),
122
+ 'reset-auto-increment' => false,
123
+ 'add-drop-database' => false,
124
  'add-drop-table' => false,
125
+ 'add-drop-trigger' => true,
 
126
  'add-locks' => true,
 
127
  'complete-insert' => false,
128
+ 'databases' => false,
129
+ 'default-character-set' => Mysqldump::UTF8,
130
  'disable-keys' => true,
131
+ 'extended-insert' => true,
132
+ 'events' => false,
133
+ 'hex-blob' => true, /* faster than escaped content */
134
+ 'net_buffer_length' => self::MAXLINESIZE,
135
+ 'no-autocommit' => true,
136
  'no-create-info' => false,
137
+ 'lock-tables' => true,
 
138
  'routines' => false,
139
+ 'single-transaction' => true,
140
+ 'skip-triggers' => false,
 
141
  'skip-tz-utc' => false,
 
 
142
  'skip-comments' => false,
143
  'skip-dump-date' => false,
144
+ 'where' => '',
145
  /* deprecated */
146
  'disable-foreign-keys-check' => true
147
  );
300
  );
301
  }
302
 
303
+ if ( is_null($this->dbHandler) ) {
304
+ throw new Exception("Connection to ". $this->dbType . "failed");
305
+ }
306
+
307
  $this->dbHandler->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_NATURAL);
308
  $this->typeAdapter = TypeAdapterFactory::create($this->dbType, $this->dbHandler);
309
  }
368
  $this->exportViews();
369
  $this->exportTriggers();
370
  $this->exportProcedures();
371
+ $this->exportEvents();
372
 
373
  // Restore saved parameters
374
  $this->compressManager->write(
486
  array_push($this->procedures, $row['procedure_name']);
487
  }
488
  }
489
+
490
+ // Listing all events from database
491
+ if ($this->dumpSettings['events']) {
492
+ foreach ($this->dbHandler->query($this->typeAdapter->show_events($this->dbName)) as $row) {
493
+ array_push($this->events, $row['event_name']);
494
+ }
495
+ }
496
  }
497
 
498
  /**
529
  continue;
530
  }
531
  $this->getTableStructure($table);
532
+ if ( false === $this->dumpSettings['no-data'] ) { // don't break compatibility with old trigger
533
+ $this->listValues($table);
534
+ } else if ( true === $this->dumpSettings['no-data']
535
+ || $this->matches($table, $this->dumpSettings['no-data']) ) {
536
+ continue;
537
+ } else {
538
  $this->listValues($table);
539
  }
540
  }
591
  }
592
  }
593
 
594
+ /**
595
+ * Exports all the events found in database
596
+ *
597
+ * @return null
598
+ */
599
+ private function exportEvents()
600
+ {
601
+ // Exporting triggers one by one
602
+ foreach ($this->events as $event) {
603
+ $this->getEventStructure($event);
604
+ }
605
+ }
606
+
607
  /**
608
  * Table structure extractor
609
  *
658
  'is_numeric'=> $types['is_numeric'],
659
  'is_blob' => $types['is_blob'],
660
  'type' => $types['type'],
661
+ 'type_sql' => $col['Type'],
662
+ 'is_virtual' => $types['is_virtual']
663
  );
664
  }
665
 
794
  }
795
  }
796
 
797
+ /**
798
+ * Event structure extractor
799
+ *
800
+ * @param string $eventName Name of event to export
801
+ * @return null
802
+ */
803
+ private function getEventStructure($eventName)
804
+ {
805
+ if (!$this->dumpSettings['skip-comments']) {
806
+ $ret = "--" . PHP_EOL .
807
+ "-- Dumping events for database '" . $this->dbName . "'" . PHP_EOL .
808
+ "--" . PHP_EOL . PHP_EOL;
809
+ $this->compressManager->write($ret);
810
+ }
811
+ $stmt = $this->typeAdapter->show_create_event($eventName);
812
+ foreach ($this->dbHandler->query($stmt) as $r) {
813
+ $this->compressManager->write(
814
+ $this->typeAdapter->create_event($r, $this->dumpSettings)
815
+ );
816
+ return;
817
+ }
818
+ }
819
+
820
  /**
821
  * Escape values with quotes when needed
822
  *
862
  $lineSize = 0;
863
 
864
  $colStmt = $this->getColumnStmt($tableName);
865
+ $stmt = "SELECT " . implode(",", $colStmt) . " FROM `$tableName`";
866
 
867
  if ($this->dumpSettings['where']) {
868
  $stmt .= " WHERE {$this->dumpSettings['where']}";
876
 
877
  if ($this->dumpSettings['complete-insert']) {
878
  $lineSize += $this->compressManager->write(
879
+ "INSERT INTO `$tableName` (" .
880
+ implode(", ", $colStmt) .
881
+ ") VALUES (" . implode(",", $vals) . ")"
882
  );
883
  } else {
884
  $lineSize += $this->compressManager->write(
889
  } else {
890
  $lineSize += $this->compressManager->write(",(" . implode(",", $vals) . ")");
891
  }
892
+ if (($lineSize > $this->dumpSettings['net_buffer_length']) ||
893
  !$this->dumpSettings['extended-insert']) {
894
  $onlyOnce = true;
895
  $lineSize = $this->compressManager->write(";" . PHP_EOL);
1008
  $colStmt[] = "LPAD(HEX(`${colName}`),2,'0') AS `${colName}`";
1009
  } else if ($colType['is_blob'] && $this->dumpSettings['hex-blob']) {
1010
  $colStmt[] = "HEX(`${colName}`) AS `${colName}`";
1011
+ } else if ($colType['is_virtual']) {
1012
+ $this->dumpSettings['complete-insert'] = true;
1013
+ continue;
1014
  } else {
1015
  $colStmt[] = "`${colName}`";
1016
  }
1017
  }
 
1018
 
1019
  return $colStmt;
1020
  }
1308
  return "";
1309
  }
1310
 
1311
+ public function show_events()
1312
+ {
1313
+ return "";
1314
+ }
1315
+
1316
  public function setup_transaction()
1317
  {
1318
  return "";
1511
  return "SHOW CREATE PROCEDURE `$procedureName`";
1512
  }
1513
 
1514
+ public function show_create_event($eventName)
1515
+ {
1516
+ return "SHOW CREATE EVENT `$eventName`";
1517
+ }
1518
+
1519
+ public function create_table( $row, $dumpSettings )
1520
  {
1521
+ if ( !isset($row['Create Table']) ) {
1522
  throw new Exception("Error getting table code, unknown output");
1523
  }
1524
 
1525
+ $createTable = $row['Create Table'];
1526
+ if ( $dumpSettings['reset-auto-increment'] ) {
1527
+ $match = "/AUTO_INCREMENT=[0-9]+/s";
1528
+ $replace = "";
1529
+ $createTable = preg_replace($match, $replace, $createTable);
1530
+ }
1531
+
1532
  $ret = "/*!40101 SET @saved_cs_client = @@character_set_client */;" . PHP_EOL .
1533
  "/*!40101 SET character_set_client = " . $dumpSettings['default-character-set'] . " */;" . PHP_EOL .
1534
+ $createTable . ";" . PHP_EOL .
1535
  "/*!40101 SET character_set_client = @saved_cs_client */;" . PHP_EOL .
1536
  PHP_EOL;
1537
  return $ret;
1592
  $triggerStmtReplaced
1593
  );
1594
  if ( false === $triggerStmtReplaced ) {
1595
+ $triggerStmtReplaced = $triggerStmt . " /* ";
1596
  }
1597
 
1598
  $ret .= "DELIMITER ;;" . PHP_EOL .
1599
+ $triggerStmtReplaced . " */ ;;" . PHP_EOL .
1600
  "DELIMITER ;" . PHP_EOL . PHP_EOL;
1601
  return $ret;
1602
  }
1622
  return $ret;
1623
  }
1624
 
1625
+ public function create_event($row)
1626
+ {
1627
+ $ret = "";
1628
+ if ( !isset($row['Create Event']) ) {
1629
+ throw new Exception("Error getting event code, unknown output. " .
1630
+ "Please check 'http://stackoverflow.com/questions/10853826/mysql-5-5-create-event-gives-syntax-error'");
1631
+ }
1632
+ $eventName = $row['Event'];
1633
+ $eventStmt = $row['Create Event'];
1634
+ $sqlMode = $row['sql_mode'];
1635
+
1636
+ $eventStmtReplaced = str_replace(
1637
+ "CREATE DEFINER",
1638
+ "/*!50106 CREATE*/ /*!50117 DEFINER",
1639
+ $eventStmt
1640
+ );
1641
+ $eventStmtReplaced = str_replace(
1642
+ " EVENT ",
1643
+ "*/ /*!50106 EVENT ",
1644
+ $eventStmtReplaced
1645
+ );
1646
+
1647
+ if ( false === $eventStmtReplaced ) {
1648
+ $eventStmtReplaced = $eventStmt . " /* ";
1649
+ }
1650
+
1651
+ $ret .= "/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;" . PHP_EOL .
1652
+ "/*!50106 DROP EVENT IF EXISTS `" . $eventName . "` */;" . PHP_EOL .
1653
+ "DELIMITER ;;" . PHP_EOL .
1654
+ "/*!50003 SET @saved_cs_client = @@character_set_client */ ;;" . PHP_EOL .
1655
+ "/*!50003 SET @saved_cs_results = @@character_set_results */ ;;" . PHP_EOL .
1656
+ "/*!50003 SET @saved_col_connection = @@collation_connection */ ;;" . PHP_EOL .
1657
+ "/*!50003 SET character_set_client = utf8 */ ;;" . PHP_EOL .
1658
+ "/*!50003 SET character_set_results = utf8 */ ;;" . PHP_EOL .
1659
+ "/*!50003 SET collation_connection = utf8_general_ci */ ;;" . PHP_EOL .
1660
+ "/*!50003 SET @saved_sql_mode = @@sql_mode */ ;;" . PHP_EOL .
1661
+ "/*!50003 SET sql_mode = '" . $sqlMode . "' */ ;;" . PHP_EOL .
1662
+ "/*!50003 SET @saved_time_zone = @@time_zone */ ;;" . PHP_EOL .
1663
+ "/*!50003 SET time_zone = 'SYSTEM' */ ;;" . PHP_EOL .
1664
+ $eventStmtReplaced . " */ ;;" . PHP_EOL .
1665
+ "/*!50003 SET time_zone = @saved_time_zone */ ;;" . PHP_EOL .
1666
+ "/*!50003 SET sql_mode = @saved_sql_mode */ ;;" . PHP_EOL .
1667
+ "/*!50003 SET character_set_client = @saved_cs_client */ ;;" . PHP_EOL .
1668
+ "/*!50003 SET character_set_results = @saved_cs_results */ ;;" . PHP_EOL .
1669
+ "/*!50003 SET collation_connection = @saved_col_connection */ ;;" . PHP_EOL .
1670
+ "DELIMITER ;" . PHP_EOL .
1671
+ "/*!50106 SET TIME_ZONE= @save_time_zone */ ;" . PHP_EOL . PHP_EOL;
1672
+ // Commented because we are doing this in restore_parameters()
1673
+ // "/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;" . PHP_EOL . PHP_EOL;
1674
+
1675
+ return $ret;
1676
+ }
1677
+
1678
  public function show_tables()
1679
  {
1680
  $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__);
1716
  "WHERE ROUTINE_TYPE='PROCEDURE' AND ROUTINE_SCHEMA='${args[0]}'";
1717
  }
1718
 
1719
+ /**
1720
+ * Get query string to ask for names of events from current database.
1721
+ *
1722
+ * @param string Name of database
1723
+ * @return string
1724
+ */
1725
+ public function show_events()
1726
+ {
1727
+ $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__);
1728
+ $args = func_get_args();
1729
+ return "SELECT EVENT_NAME AS event_name " .
1730
+ "FROM INFORMATION_SCHEMA.EVENTS " .
1731
+ "WHERE EVENT_SCHEMA='${args[0]}'";
1732
+ }
1733
+
1734
  public function setup_transaction()
1735
  {
1736
  return "SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ";
1763
  {
1764
  $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__);
1765
  $args = func_get_args();
 
1766
  return "LOCK TABLES `${args[0]}` WRITE;" . PHP_EOL;
1767
  }
1768
 
1801
  {
1802
  $this->check_parameters(func_num_args(), $expected_num_args = 1, __METHOD__);
1803
  $args = func_get_args();
 
1804
  return "/*!40000 DROP DATABASE IF EXISTS `${args[0]}`*/;" .
1805
  PHP_EOL . PHP_EOL;
1806
  }
1860
  }
1861
  $colInfo['is_numeric'] = in_array($colInfo['type'], $this->mysqlTypes['numerical']);
1862
  $colInfo['is_blob'] = in_array($colInfo['type'], $this->mysqlTypes['blob']);
1863
+ // for virtual 'Extra' -> "STORED GENERATED"
1864
+ $colInfo['is_virtual'] = strpos($colType['Extra'], "STORED GENERATED") === false ? false : true;
1865
 
1866
  return $colInfo;
1867
  }
1911
  return $ret;
1912
  }
1913
 
1914
+ /**
1915
+ * Check number of parameters passed to function, useful when inheriting.
1916
+ * Raise exception if unexpected.
1917
+ *
1918
+ * @param integer $num_args
1919
+ * @param integer $expected_num_args
1920
+ * @param string $method_name
1921
+ */
1922
  private function check_parameters($num_args, $expected_num_args, $method_name)
1923
  {
1924
  if ( $num_args != $expected_num_args ) {
vendor/ifsnop/mysqldump-php/tests/test.php DELETED
@@ -1,67 +0,0 @@
1
- <?php
2
- /*
3
- for($i=0;$i<128;$i++) {
4
- echo "$i>" . bin2hex(chr($i)) . "<" . PHP_EOL;
5
- }
6
- */
7
-
8
- error_reporting(E_ALL);
9
-
10
- include_once(dirname(__FILE__) . "/../src/Ifsnop/Mysqldump/Mysqldump.php");
11
-
12
- use Ifsnop\Mysqldump as IMysqldump;
13
-
14
- $dumpSettings = array(
15
- 'compress' => IMysqldump\Mysqldump::NONE,
16
- 'no-data' => false,
17
- 'add-drop-table' => true,
18
- 'single-transaction' => true,
19
- 'lock-tables' => true,
20
- 'add-locks' => true,
21
- 'extended-insert' => false,
22
- 'disable-keys' => true,
23
- 'skip-triggers' => false,
24
- 'add-drop-trigger' => true,
25
- 'routines' => true,
26
- 'databases' => false,
27
- 'add-drop-database' => false,
28
- 'hex-blob' => true,
29
- 'no-create-info' => false,
30
- 'where' => ''
31
- );
32
-
33
- $dump = new IMysqldump\Mysqldump(
34
- "mysql:host=localhost;dbname=test001",
35
- "travis",
36
- "",
37
- $dumpSettings);
38
-
39
- $dump->start("mysqldump-php_test001.sql");
40
-
41
- $dumpSettings['default-character-set'] = IMysqldump\Mysqldump::UTF8MB4;
42
-
43
- $dump = new IMysqldump\Mysqldump(
44
- "mysql:host=localhost;dbname=test002",
45
- "travis",
46
- "",
47
- $dumpSettings);
48
-
49
- $dump->start("mysqldump-php_test002.sql");
50
-
51
- $dump = new IMysqldump\Mysqldump(
52
- "mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=test005",
53
- "travis",
54
- "",
55
- $dumpSettings);
56
-
57
- $dump->start("mysqldump-php_test005.sql");
58
-
59
- $dump = new IMysqldump\Mysqldump(
60
- "mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=test006a",
61
- "travis",
62
- "",
63
- array("no-data" => true, "add-drop-table" => true));
64
-
65
- $dump->start("mysqldump-php_test006.sql");
66
-
67
- exit;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/ifsnop/mysqldump-php/tests/test.sh DELETED
@@ -1,132 +0,0 @@
1
- #!/bin/bash
2
-
3
- function checksum_test001() {
4
- for i in 000 001 002 003 010 011 015 027 029 033 200; do
5
- mysql -B -e "CHECKSUM TABLE test${i}" test001 | grep -v -i checksum
6
- done
7
- }
8
-
9
- function checksum_test002() {
10
- for i in 201; do
11
- mysql --default-character-set=utf8mb4 -B -e "CHECKSUM TABLE test${i}" test002 | grep -v -i checksum
12
- done
13
- }
14
-
15
- function checksum_test005() {
16
- for i in 000; do
17
- mysql -B -e "CHECKSUM TABLE test${i}" test001 | grep -v -i checksum
18
- done
19
- }
20
-
21
- for i in $(seq 0 20) ; do
22
- ret[$i]=0
23
- done
24
-
25
- index=0
26
-
27
- mysql -e "CREATE USER 'travis'@'localhost' IDENTIFIED BY '';" 2> /dev/null
28
- mysql -e "CREATE DATABASE test001;" 2> /dev/null
29
- mysql -e "CREATE DATABASE test002;" 2> /dev/null
30
- mysql -e "CREATE DATABASE test005;" 2> /dev/null
31
- mysql -e "CREATE DATABASE test006a;" 2> /dev/null
32
- mysql -e "CREATE DATABASE test006b;" 2> /dev/null
33
- mysql -e "GRANT ALL PRIVILEGES ON test001.* TO 'travis'@'localhost';" 2> /dev/null
34
- mysql -e "GRANT SELECT ON mysql.proc to 'travis'@'localhost';" 2> /dev/null
35
- mysql -e "GRANT ALL PRIVILEGES ON test002.* TO 'travis'@'localhost';" 2> /dev/null
36
- mysql -e "GRANT ALL PRIVILEGES ON test005.* TO 'travis'@'localhost';" 2> /dev/null
37
- mysql -e "GRANT ALL PRIVILEGES ON test006a.* TO 'travis'@'localhost';" 2> /dev/null
38
- mysql -e "GRANT ALL PRIVILEGES ON test00ba.* TO 'travis'@'localhost';" 2> /dev/null
39
- mysql -e "FLUSH PRIVILEGES;" 2> /dev/null
40
-
41
- mysql -uroot < test001.src.sql; ret[((index++))]=$?
42
- mysql -uroot --default-character-set=utf8mb4 < test002.src.sql; ret[((index++))]=$?
43
- mysql -uroot < test005.src.sql; ret[((index++))]=$?
44
- mysql -uroot < test006.src.sql; ret[((index++))]=$?
45
-
46
- checksum_test001 > test001.src.checksum
47
- checksum_test002 > test002.src.checksum
48
- checksum_test005 > test005.src.checksum
49
-
50
- mysqldump -uroot test001 \
51
- --no-autocommit \
52
- --extended-insert=false \
53
- --hex-blob=true \
54
- --routines=true \
55
- > mysqldump_test001.sql
56
- ret[((index++))]=$?
57
-
58
- mysqldump -uroot test002 \
59
- --no-autocommit \
60
- --extended-insert=false \
61
- --hex-blob=true \
62
- --default-character-set=utf8mb4 \
63
- > mysqldump_test002.sql
64
- ret[((index++))]=$?
65
-
66
- mysqldump -uroot test005 \
67
- --no-autocommit \
68
- --extended-insert=false \
69
- --hex-blob=true \
70
- > mysqldump_test005.sql
71
- ret[((index++))]=$?
72
-
73
- php test.php
74
- ret[((index++))]=$?
75
-
76
- mysql -uroot test001 < mysqldump-php_test001.sql
77
- ret[((index++))]=$?
78
- mysql -uroot test002 < mysqldump-php_test002.sql
79
- ret[((index++))]=$?
80
- mysql -uroot test005 < mysqldump-php_test005.sql
81
- ret[((index++))]=$?
82
-
83
- mysql -uroot test006b < mysqldump-php_test006.sql
84
- ret[((index++))]=$?
85
-
86
- checksum_test001 > mysqldump-php_test001.checksum
87
- checksum_test002 > mysqldump-php_test002.checksum
88
- checksum_test005 > mysqldump-php_test005.checksum
89
-
90
- cat test001.src.sql | grep ^INSERT > test001.filtered.sql
91
- cat test002.src.sql | grep ^INSERT > test002.filtered.sql
92
- cat test005.src.sql | grep ^INSERT > test005.filtered.sql
93
- cat mysqldump_test001.sql | grep ^INSERT > mysqldump_test001.filtered.sql
94
- cat mysqldump_test002.sql | grep ^INSERT > mysqldump_test002.filtered.sql
95
- cat mysqldump_test005.sql | grep ^INSERT > mysqldump_test005.filtered.sql
96
- cat mysqldump-php_test001.sql | grep ^INSERT > mysqldump-php_test001.filtered.sql
97
- cat mysqldump-php_test002.sql | grep ^INSERT > mysqldump-php_test002.filtered.sql
98
- cat mysqldump-php_test005.sql | grep ^INSERT > mysqldump-php_test005.filtered.sql
99
-
100
- diff test001.filtered.sql mysqldump_test001.filtered.sql
101
- ret[((index++))]=$?
102
- diff test002.filtered.sql mysqldump_test002.filtered.sql
103
- ret[((index++))]=$?
104
-
105
- diff test001.filtered.sql mysqldump-php_test001.filtered.sql
106
- ret[((index++))]=$?
107
- diff test002.filtered.sql mysqldump-php_test002.filtered.sql
108
- ret[((index++))]=$?
109
-
110
- diff test001.src.checksum mysqldump-php_test001.checksum
111
- ret[((index++))]=$?
112
- diff test002.src.checksum mysqldump-php_test002.checksum
113
- ret[((index++))]=$?
114
- diff test005.src.checksum mysqldump-php_test005.checksum
115
- ret[((index++))]=$?
116
-
117
- diff mysqldump_test005.filtered.sql mysqldump-php_test005.filtered.sql
118
- ret[((index++))]=$?
119
- rm *.checksum 2> /dev/null
120
- rm *.filtered.sql 2> /dev/null
121
- rm mysqldump* 2> /dev/null
122
-
123
- echo "Done $index tests"
124
-
125
- total=0
126
- for i in $(seq 0 20) ; do
127
- total=$((${ret[$i]} + $total))
128
- done
129
-
130
- echo "Exiting with code $total"
131
-
132
- exit $total
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/ifsnop/mysqldump-php/tests/test001.src.sql DELETED
@@ -1,136 +0,0 @@
1
- DROP DATABASE IF EXISTS `test001`;
2
- CREATE DATABASE `test001`;
3
- USE `test001`;
4
-
5
- DROP TABLE IF EXISTS `test000`;
6
- CREATE TABLE `test000` (
7
- `id` int,
8
- `col01` bit(6) DEFAULT NULL,
9
- `col02` tinyint(4) DEFAULT NULL,
10
- `col03` tinyint(4) UNSIGNED DEFAULT NULL,
11
- `col10` bigint DEFAULT NULL,
12
- `col11` bigint UNSIGNED DEFAULT NULL,
13
- `col15` double DEFAULT NULL,
14
- `col27` varchar(6) DEFAULT NULL
15
- );
16
- INSERT INTO `test000` VALUES (1,0x21,-128,255,-9223372036854775808,18446744073709551615,-2.2250738585072014e-308,'0abcde');
17
-
18
- DROP TABLE IF EXISTS `test001`;
19
- CREATE TABLE `test001` (
20
- `id` int,
21
- `col` bit(1) DEFAULT NULL
22
- );
23
- INSERT INTO `test001` VALUES (1,NULL);
24
- INSERT INTO `test001` VALUES (2,0x00);
25
- INSERT INTO `test001` VALUES (3,0x01);
26
-
27
- DROP TABLE IF EXISTS `test002`;
28
- CREATE TABLE `test002` (
29
- `id` int,
30
- `col` tinyint(4) DEFAULT NULL
31
- );
32
- INSERT INTO `test002` VALUES (1,NULL);
33
- INSERT INTO `test002` VALUES (2,-128);
34
- INSERT INTO `test002` VALUES (3,0);
35
- INSERT INTO `test002` VALUES (4,127);
36
-
37
- DROP TABLE IF EXISTS `test003`;
38
- CREATE TABLE `test003` (
39
- `id` int,
40
- `col` tinyint(4) UNSIGNED DEFAULT NULL
41
- );
42
- INSERT INTO `test003` VALUES (1,NULL);
43
- INSERT INTO `test003` VALUES (2,0);
44
- INSERT INTO `test003` VALUES (3,255);
45
-
46
- DROP TABLE IF EXISTS `test010`;
47
- CREATE TABLE `test010` (
48
- `id` int,
49
- `col` bigint DEFAULT NULL
50
- );
51
- INSERT INTO `test010` VALUES (1,NULL);
52
- INSERT INTO `test010` VALUES (2,-9223372036854775808);
53
- INSERT INTO `test010` VALUES (3,0);
54
- INSERT INTO `test010` VALUES (4,9223372036854775807);
55
-
56
- DROP TABLE IF EXISTS `test011`;
57
- CREATE TABLE `test011` (
58
- `id` int,
59
- `col` bigint UNSIGNED DEFAULT NULL
60
- );
61
- INSERT INTO `test011` VALUES (1,NULL);
62
- INSERT INTO `test011` VALUES (3,0);
63
- INSERT INTO `test011` VALUES (4,18446744073709551615);
64
-
65
-
66
- DROP TABLE IF EXISTS `test015`;
67
- CREATE TABLE `test015` (
68
- `id` int,
69
- `col` double DEFAULT NULL
70
- );
71
- INSERT INTO `test015` VALUES (1,NULL);
72
- INSERT INTO `test015` VALUES (2,-1.7976931348623157e308);
73
- INSERT INTO `test015` VALUES (3,-2.2250738585072014e-308);
74
- INSERT INTO `test015` VALUES (4,0);
75
- INSERT INTO `test015` VALUES (5,2.2250738585072014e-308);
76
- INSERT INTO `test015` VALUES (6,1.7976931348623157e308);
77
-
78
-
79
- DROP TABLE IF EXISTS `test027`;
80
- CREATE TABLE `test027` (
81
- `id` int,
82
- `col` varchar(6) DEFAULT NULL
83
- );
84
- INSERT INTO `test027` VALUES (1,NULL);
85
- INSERT INTO `test027` VALUES (2,'');
86
- INSERT INTO `test027` VALUES (3,'0');
87
- INSERT INTO `test027` VALUES (4,'2e308');
88
- INSERT INTO `test027` VALUES (5,'999.99');
89
- INSERT INTO `test027` VALUES (6,'-2e-30');
90
- INSERT INTO `test027` VALUES (7,'-99.99');
91
- INSERT INTO `test027` VALUES (8,'0');
92
- INSERT INTO `test027` VALUES (9,'0abcde');
93
- INSERT INTO `test027` VALUES (10,'123');
94
-
95
- DROP TABLE IF EXISTS `test029`;
96
- CREATE TABLE `test029` (
97
- `id` int,
98
- `col` blob NOT NULL
99
- );
100
- INSERT INTO `test029` VALUES (1,0x00010203040506070809909192939495969798A9);
101
- INSERT INTO `test029` VALUES (2,'');
102
-
103
- DROP TABLE IF EXISTS `test033`;
104
- CREATE TABLE `test033` (
105
- `id` int,
106
- `col` text NOT NULL
107
- );
108
- INSERT INTO `test033` VALUES (1,'test test test');
109
-
110
-
111
- DROP VIEW IF EXISTS `test100`;
112
- CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test100` AS select `test000`.`id` AS `id`,`test000`.`col01` AS `col01`,`test000`.`col02` AS `col02`,`test000`.`col03` AS `col03`,`test000`.`col10` AS `col10`,`test000`.`col11` AS `col11`,`test000`.`col15` AS `col15`,`test000`.`col27` AS `col27` from `test000`;
113
-
114
- DROP VIEW IF EXISTS `test127`;
115
- CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test127` AS select `test027`.`id` AS `id`,`test027`.`col` AS `col` from `test027`;
116
-
117
-
118
- DROP TABLE IF EXISTS `test200`;
119
- CREATE TABLE `test200` (
120
- `id` int,
121
- `col` tinyint(4) DEFAULT NULL
122
- );
123
-
124
- CREATE TRIGGER before_test200_insert
125
- BEFORE insert ON `test200`
126
- FOR EACH ROW set NEW.col = NEW.col + 1;
127
-
128
- -- INSERT INTO `test200` VALUES (1,1); -- trigger tests
129
-
130
- /*!50003 DROP PROCEDURE IF EXISTS `GetAllFromTest000` */;
131
- DELIMITER //
132
- CREATE PROCEDURE GetAllFromTest000()
133
- BEGIN
134
- SELECT * FROM test000;
135
- END //
136
- DELIMITER ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/ifsnop/mysqldump-php/tests/test002.src.sql DELETED
@@ -1,14 +0,0 @@
1
- DROP DATABASE IF EXISTS `test002`;
2
- CREATE DATABASE `test002`;
3
- USE `test002`;
4
-
5
- DROP TABLE IF EXISTS `test201`;
6
- CREATE TABLE `test201` (
7
- `col` text COLLATE utf8mb4_unicode_ci
8
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
9
-
10
- INSERT INTO `test201` VALUES ('áéíóú');
11
- INSERT INTO `test201` VALUES ('🎲');
12
- INSERT INTO `test201` VALUES ('🎭');
13
- INSERT INTO `test201` VALUES ('💩');
14
- INSERT INTO `test201` VALUES ('🐈');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/ifsnop/mysqldump-php/tests/test005.src.sql DELETED
@@ -1,12 +0,0 @@
1
- DROP DATABASE IF EXISTS `test005`;
2
- CREATE DATABASE `test005`;
3
- USE `test005`;
4
-
5
- SET TIME_ZONE='+07:00';
6
- DROP TABLE IF EXISTS `test000`;
7
- CREATE TABLE `test000`(
8
- `id` int,
9
- `col` TIMESTAMP NOT NULL
10
- );
11
- INSERT INTO `test000` VALUES (1,'2014-01-01 00:00:00');
12
- SET TIME_ZONE='+00:00';
 
 
 
 
 
 
 
 
 
 
 
 
vendor/ifsnop/mysqldump-php/tests/test006.src.sql DELETED
@@ -1,107 +0,0 @@
1
- -- phpMyAdmin SQL Dump
2
- -- version 4.4.0
3
- -- http://www.phpmyadmin.net
4
- --
5
- -- Servidor: localhost
6
- -- Tiempo de generación: 31-08-2015 a las 19:26:58
7
- -- Versión del servidor: 5.5.42
8
- -- Versión de PHP: 5.6.7
9
-
10
- DROP DATABASE IF EXISTS `test006a`;
11
- CREATE DATABASE `test006a`;
12
-
13
- DROP DATABASE IF EXISTS `test006b`;
14
- CREATE DATABASE `test006b`;
15
-
16
- USE `test006a`;
17
-
18
- SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
19
- SET time_zone = "+00:00";
20
-
21
-
22
- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
23
- /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
24
- /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
25
- /*!40101 SET NAMES utf8 */;
26
-
27
- --
28
- -- Base de datos: `my_test_db`
29
- --
30
-
31
- -- --------------------------------------------------------
32
-
33
- --
34
- -- Estructura de tabla para la tabla `my_table`
35
- --
36
-
37
- CREATE TABLE IF NOT EXISTS `my_table` (
38
- `id` int(11) NOT NULL,
39
- `name` varchar(300) DEFAULT NULL,
40
- `lastname` varchar(300) DEFAULT NULL,
41
- `username` varchar(300) DEFAULT NULL
42
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
43
-
44
- -- --------------------------------------------------------
45
-
46
- --
47
- -- Estructura Stand-in para la vista `my_view`
48
- --
49
- CREATE TABLE IF NOT EXISTS `my_view` (
50
- `id` int(11)
51
- ,`name` varchar(300)
52
- ,`lastname` varchar(300)
53
- ,`username` varchar(300)
54
- );
55
-
56
- -- --------------------------------------------------------
57
-
58
- --
59
- -- Estructura Stand-in para la vista `view_of_my_table`
60
- --
61
- CREATE TABLE IF NOT EXISTS `view_of_my_table` (
62
- `id` int(11)
63
- ,`name` varchar(300)
64
- ,`lastname` varchar(300)
65
- ,`username` varchar(300)
66
- );
67
-
68
- -- --------------------------------------------------------
69
-
70
- --
71
- -- Estructura para la vista `my_view`
72
- --
73
- DROP TABLE IF EXISTS `my_view`;
74
-
75
- CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `my_view` AS select `view_of_my_table`.`id` AS `id`,`view_of_my_table`.`name` AS `name`,`view_of_my_table`.`lastname` AS `lastname`,`view_of_my_table`.`username` AS `username` from `view_of_my_table`;
76
-
77
- -- --------------------------------------------------------
78
-
79
- --
80
- -- Estructura para la vista `view_of_my_table`
81
- --
82
- DROP TABLE IF EXISTS `view_of_my_table`;
83
-
84
- CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_of_my_table` AS select `my_table`.`id` AS `id`,`my_table`.`name` AS `name`,`my_table`.`lastname` AS `lastname`,`my_table`.`username` AS `username` from `my_table`;
85
-
86
- --
87
- -- Índices para tablas volcadas
88
- --
89
-
90
- --
91
- -- Indices de la tabla `my_table`
92
- --
93
- ALTER TABLE `my_table`
94
- ADD PRIMARY KEY (`id`);
95
-
96
- --
97
- -- AUTO_INCREMENT de las tablas volcadas
98
- --
99
-
100
- --
101
- -- AUTO_INCREMENT de la tabla `my_table`
102
- --
103
- ALTER TABLE `my_table`
104
- MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
105
- /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
106
- /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
107
- /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/symfony/finder/Adapter/AdapterInterface.php CHANGED
@@ -21,105 +21,105 @@ interface AdapterInterface
21
  /**
22
  * @param bool $followLinks
23
  *
24
- * @return AdapterInterface Current instance
25
  */
26
  public function setFollowLinks($followLinks);
27
 
28
  /**
29
  * @param int $mode
30
  *
31
- * @return AdapterInterface Current instance
32
  */
33
  public function setMode($mode);
34
 
35
  /**
36
  * @param array $exclude
37
  *
38
- * @return AdapterInterface Current instance
39
  */
40
  public function setExclude(array $exclude);
41
 
42
  /**
43
  * @param array $depths
44
  *
45
- * @return AdapterInterface Current instance
46
  */
47
  public function setDepths(array $depths);
48
 
49
  /**
50
  * @param array $names
51
  *
52
- * @return AdapterInterface Current instance
53
  */
54
  public function setNames(array $names);
55
 
56
  /**
57
  * @param array $notNames
58
  *
59
- * @return AdapterInterface Current instance
60
  */
61
  public function setNotNames(array $notNames);
62
 
63
  /**
64
  * @param array $contains
65
  *
66
- * @return AdapterInterface Current instance
67
  */
68
  public function setContains(array $contains);
69
 
70
  /**
71
  * @param array $notContains
72
  *
73
- * @return AdapterInterface Current instance
74
  */
75
  public function setNotContains(array $notContains);
76
 
77
  /**
78
  * @param array $sizes
79
  *
80
- * @return AdapterInterface Current instance
81
  */
82
  public function setSizes(array $sizes);
83
 
84
  /**
85
  * @param array $dates
86
  *
87
- * @return AdapterInterface Current instance
88
  */
89
  public function setDates(array $dates);
90
 
91
  /**
92
  * @param array $filters
93
  *
94
- * @return AdapterInterface Current instance
95
  */
96
  public function setFilters(array $filters);
97
 
98
  /**
99
  * @param \Closure|int $sort
100
  *
101
- * @return AdapterInterface Current instance
102
  */
103
  public function setSort($sort);
104
 
105
  /**
106
  * @param array $paths
107
  *
108
- * @return AdapterInterface Current instance
109
  */
110
  public function setPath(array $paths);
111
 
112
  /**
113
  * @param array $notPaths
114
  *
115
- * @return AdapterInterface Current instance
116
  */
117
  public function setNotPath(array $notPaths);
118
 
119
  /**
120
  * @param bool $ignore
121
  *
122
- * @return AdapterInterface Current instance
123
  */
124
  public function ignoreUnreadableDirs($ignore = true);
125
 
21
  /**
22
  * @param bool $followLinks
23
  *
24
+ * @return $this
25
  */
26
  public function setFollowLinks($followLinks);
27
 
28
  /**
29
  * @param int $mode
30
  *
31
+ * @return $this
32
  */
33
  public function setMode($mode);
34
 
35
  /**
36
  * @param array $exclude
37
  *
38
+ * @return $this
39
  */
40
  public function setExclude(array $exclude);
41
 
42
  /**
43
  * @param array $depths
44
  *
45
+ * @return $this
46
  */
47
  public function setDepths(array $depths);
48
 
49
  /**
50
  * @param array $names
51
  *
52
+ * @return $this
53
  */
54
  public function setNames(array $names);
55
 
56
  /**
57
  * @param array $notNames
58
  *
59
+ * @return $this
60
  */
61
  public function setNotNames(array $notNames);
62
 
63
  /**
64
  * @param array $contains
65
  *
66
+ * @return $this
67
  */
68
  public function setContains(array $contains);
69
 
70
  /**
71
  * @param array $notContains
72
  *
73
+ * @return $this
74
  */
75
  public function setNotContains(array $notContains);
76
 
77
  /**
78
  * @param array $sizes
79
  *
80
+ * @return $this
81
  */
82
  public function setSizes(array $sizes);
83
 
84
  /**
85
  * @param array $dates
86
  *
87
+ * @return $this
88
  */
89
  public function setDates(array $dates);
90
 
91
  /**
92
  * @param array $filters
93
  *
94
+ * @return $this
95
  */
96
  public function setFilters(array $filters);
97
 
98
  /**
99
  * @param \Closure|int $sort
100
  *
101
+ * @return $this
102
  */
103
  public function setSort($sort);
104
 
105
  /**
106
  * @param array $paths
107
  *
108
+ * @return $this
109
  */
110
  public function setPath(array $paths);
111
 
112
  /**
113
  * @param array $notPaths
114
  *
115
+ * @return $this
116
  */
117
  public function setNotPath(array $notPaths);
118
 
119
  /**
120
  * @param bool $ignore
121
  *
122
+ * @return $this
123
  */
124
  public function ignoreUnreadableDirs($ignore = true);
125
 
vendor/symfony/finder/Comparator/NumberComparator.php CHANGED
@@ -37,7 +37,7 @@ class NumberComparator extends Comparator
37
  /**
38
  * Constructor.
39
  *
40
- * @param string $test A comparison string
41
  *
42
  * @throws \InvalidArgumentException If the test is not understood
43
  */
37
  /**
38
  * Constructor.
39
  *
40
+ * @param string|int $test A comparison string or an integer
41
  *
42
  * @throws \InvalidArgumentException If the test is not understood
43
  */
vendor/symfony/finder/Expression/Expression.php CHANGED
@@ -29,7 +29,7 @@ class Expression implements ValueInterface
29
  /**
30
  * @param string $expr
31
  *
32
- * @return Expression
33
  */
34
  public static function create($expr)
35
  {
29
  /**
30
  * @param string $expr
31
  *
32
+ * @return self
33
  */
34
  public static function create($expr)
35
  {
vendor/symfony/finder/Expression/Regex.php CHANGED
@@ -57,7 +57,7 @@ class Regex implements ValueInterface
57
  /**
58
  * @param string $expr
59
  *
60
- * @return Regex
61
  *
62
  * @throws \InvalidArgumentException
63
  */
@@ -175,7 +175,7 @@ class Regex implements ValueInterface
175
  /**
176
  * @param string $option
177
  *
178
- * @return Regex
179
  */
180
  public function addOption($option)
181
  {
@@ -189,7 +189,7 @@ class Regex implements ValueInterface
189
  /**
190
  * @param string $option
191
  *
192
- * @return Regex
193
  */
194
  public function removeOption($option)
195
  {
@@ -201,7 +201,7 @@ class Regex implements ValueInterface
201
  /**
202
  * @param bool $startFlag
203
  *
204
- * @return Regex
205
  */
206
  public function setStartFlag($startFlag)
207
  {
@@ -221,7 +221,7 @@ class Regex implements ValueInterface
221
  /**
222
  * @param bool $endFlag
223
  *
224
- * @return Regex
225
  */
226
  public function setEndFlag($endFlag)
227
  {
@@ -241,7 +241,7 @@ class Regex implements ValueInterface
241
  /**
242
  * @param bool $startJoker
243
  *
244
- * @return Regex
245
  */
246
  public function setStartJoker($startJoker)
247
  {
@@ -261,7 +261,7 @@ class Regex implements ValueInterface
261
  /**
262
  * @param bool $endJoker
263
  *
264
- * @return Regex
265
  */
266
  public function setEndJoker($endJoker)
267
  {
@@ -281,7 +281,7 @@ class Regex implements ValueInterface
281
  /**
282
  * @param array $replacement
283
  *
284
- * @return Regex
285
  */
286
  public function replaceJokers($replacement)
287
  {
57
  /**
58
  * @param string $expr
59
  *
60
+ * @return self
61
  *
62
  * @throws \InvalidArgumentException
63
  */
175
  /**
176
  * @param string $option
177
  *
178
+ * @return $this
179
  */
180
  public function addOption($option)
181
  {
189
  /**
190
  * @param string $option
191
  *
192
+ * @return $this
193
  */
194
  public function removeOption($option)
195
  {
201
  /**
202
  * @param bool $startFlag
203
  *
204
+ * @return $this
205
  */
206
  public function setStartFlag($startFlag)
207
  {
221
  /**
222
  * @param bool $endFlag
223
  *
224
+ * @return $this
225
  */
226
  public function setEndFlag($endFlag)
227
  {
241
  /**
242
  * @param bool $startJoker
243
  *
244
+ * @return $this
245
  */
246
  public function setStartJoker($startJoker)
247
  {
261
  /**
262
  * @param bool $endJoker
263
  *
264
+ * @return $this
265
  */
266
  public function setEndJoker($endJoker)
267
  {
281
  /**
282
  * @param array $replacement
283
  *
284
+ * @return $this
285
  */
286
  public function replaceJokers($replacement)
287
  {
vendor/symfony/finder/Expression/ValueInterface.php CHANGED
@@ -49,14 +49,14 @@ interface ValueInterface
49
  /**
50
  * @param string $expr
51
  *
52
- * @return ValueInterface
53
  */
54
  public function prepend($expr);
55
 
56
  /**
57
  * @param string $expr
58
  *
59
- * @return ValueInterface
60
  */
61
  public function append($expr);
62
  }
49
  /**
50
  * @param string $expr
51
  *
52
+ * @return $this
53
  */
54
  public function prepend($expr);
55
 
56
  /**
57
  * @param string $expr
58
  *
59
+ * @return $this
60
  */
61
  public function append($expr);
62
  }
vendor/symfony/finder/Finder.php CHANGED
@@ -78,7 +78,7 @@ class Finder implements \IteratorAggregate, \Countable
78
  /**
79
  * Creates a new Finder.
80
  *
81
- * @return Finder A new Finder instance
82
  */
83
  public static function create()
84
  {
@@ -91,7 +91,7 @@ class Finder implements \IteratorAggregate, \Countable
91
  * @param AdapterInterface $adapter An adapter instance
92
  * @param int $priority Highest is selected first
93
  *
94
- * @return Finder The current Finder instance
95
  *
96
  * @deprecated since 2.8, to be removed in 3.0.
97
  */
@@ -113,7 +113,7 @@ class Finder implements \IteratorAggregate, \Countable
113
  /**
114
  * Sets the selected adapter to the best one according to the current platform the code is run on.
115
  *
116
- * @return Finder The current Finder instance
117
  *
118
  * @deprecated since 2.8, to be removed in 3.0.
119
  */
@@ -133,7 +133,7 @@ class Finder implements \IteratorAggregate, \Countable
133
  *
134
  * @param string $name
135
  *
136
- * @return Finder The current Finder instance
137
  *
138
  * @throws \InvalidArgumentException
139
  *
@@ -158,7 +158,7 @@ class Finder implements \IteratorAggregate, \Countable
158
  /**
159
  * Removes all adapters registered in the finder.
160
  *
161
- * @return Finder The current Finder instance
162
  *
163
  * @deprecated since 2.8, to be removed in 3.0.
164
  */
@@ -192,7 +192,7 @@ class Finder implements \IteratorAggregate, \Countable
192
  /**
193
  * Restricts the matching to directories only.
194
  *
195
- * @return Finder|SplFileInfo[] The current Finder instance
196
  */
197
  public function directories()
198
  {
@@ -204,7 +204,7 @@ class Finder implements \IteratorAggregate, \Countable
204
  /**
205
  * Restricts the matching to files only.
206
  *
207
- * @return Finder|SplFileInfo[] The current Finder instance
208
  */
209
  public function files()
210
  {
@@ -221,9 +221,9 @@ class Finder implements \IteratorAggregate, \Countable
221
  * $finder->depth('> 1') // the Finder will start matching at level 1.
222
  * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point.
223
  *
224
- * @param int $level The depth level expression
225
  *
226
- * @return Finder|SplFileInfo[] The current Finder instance
227
  *
228
  * @see DepthRangeFilterIterator
229
  * @see NumberComparator
@@ -247,7 +247,7 @@ class Finder implements \IteratorAggregate, \Countable
247
  *
248
  * @param string $date A date range string
249
  *
250
- * @return Finder|SplFileInfo[] The current Finder instance
251
  *
252
  * @see strtotime
253
  * @see DateRangeFilterIterator
@@ -271,7 +271,7 @@ class Finder implements \IteratorAggregate, \Countable
271
  *
272
  * @param string $pattern A pattern (a regexp, a glob, or a string)
273
  *
274
- * @return Finder|SplFileInfo[] The current Finder instance
275
  *
276
  * @see FilenameFilterIterator
277
  */
@@ -287,7 +287,7 @@ class Finder implements \IteratorAggregate, \Countable
287
  *
288
  * @param string $pattern A pattern (a regexp, a glob, or a string)
289
  *
290
- * @return Finder|SplFileInfo[] The current Finder instance
291
  *
292
  * @see FilenameFilterIterator
293
  */
@@ -308,7 +308,7 @@ class Finder implements \IteratorAggregate, \Countable
308
  *
309
  * @param string $pattern A pattern (string or regexp)
310
  *
311
- * @return Finder|SplFileInfo[] The current Finder instance
312
  *
313
  * @see FilecontentFilterIterator
314
  */
@@ -329,7 +329,7 @@ class Finder implements \IteratorAggregate, \Countable
329
  *
330
  * @param string $pattern A pattern (string or regexp)
331
  *
332
- * @return Finder|SplFileInfo[] The current Finder instance
333
  *
334
  * @see FilecontentFilterIterator
335
  */
@@ -352,7 +352,7 @@ class Finder implements \IteratorAggregate, \Countable
352
  *
353
  * @param string $pattern A pattern (a regexp or a string)
354
  *
355
- * @return Finder|SplFileInfo[] The current Finder instance
356
  *
357
  * @see FilenameFilterIterator
358
  */
@@ -375,7 +375,7 @@ class Finder implements \IteratorAggregate, \Countable
375
  *
376
  * @param string $pattern A pattern (a regexp or a string)
377
  *
378
- * @return Finder|SplFileInfo[] The current Finder instance
379
  *
380
  * @see FilenameFilterIterator
381
  */
@@ -393,9 +393,9 @@ class Finder implements \IteratorAggregate, \Countable
393
  * $finder->size('<= 1Ki');
394
  * $finder->size(4);
395
  *
396
- * @param string $size A size range string
397
  *
398
- * @return Finder|SplFileInfo[] The current Finder instance
399
  *
400
  * @see SizeRangeFilterIterator
401
  * @see NumberComparator
@@ -412,7 +412,7 @@ class Finder implements \IteratorAggregate, \Countable
412
  *
413
  * @param string|array $dirs A directory path or an array of directories
414
  *
415
- * @return Finder|SplFileInfo[] The current Finder instance
416
  *
417
  * @see ExcludeDirectoryFilterIterator
418
  */
@@ -428,7 +428,7 @@ class Finder implements \IteratorAggregate, \Countable
428
  *
429
  * @param bool $ignoreDotFiles Whether to exclude "hidden" files or not
430
  *
431
- * @return Finder|SplFileInfo[] The current Finder instance
432
  *
433
  * @see ExcludeDirectoryFilterIterator
434
  */
@@ -448,7 +448,7 @@ class Finder implements \IteratorAggregate, \Countable
448
  *
449
  * @param bool $ignoreVCS Whether to exclude VCS files or not
450
  *
451
- * @return Finder|SplFileInfo[] The current Finder instance
452
  *
453
  * @see ExcludeDirectoryFilterIterator
454
  */
@@ -488,7 +488,7 @@ class Finder implements \IteratorAggregate, \Countable
488
  *
489
  * @param \Closure $closure An anonymous function
490
  *
491
- * @return Finder|SplFileInfo[] The current Finder instance
492
  *
493
  * @see SortableIterator
494
  */
@@ -504,7 +504,7 @@ class Finder implements \IteratorAggregate, \Countable
504
  *
505
  * This can be slow as all the matching files and directories must be retrieved for comparison.
506
  *
507
- * @return Finder|SplFileInfo[] The current Finder instance
508
  *
509
  * @see SortableIterator
510
  */
@@ -520,7 +520,7 @@ class Finder implements \IteratorAggregate, \Countable
520
  *
521
  * This can be slow as all the matching files and directories must be retrieved for comparison.
522
  *
523
- * @return Finder|SplFileInfo[] The current Finder instance
524
  *
525
  * @see SortableIterator
526
  */
@@ -538,7 +538,7 @@ class Finder implements \IteratorAggregate, \Countable
538
  *
539
  * This can be slow as all the matching files and directories must be retrieved for comparison.
540
  *
541
- * @return Finder|SplFileInfo[] The current Finder instance
542
  *
543
  * @see SortableIterator
544
  */
@@ -558,7 +558,7 @@ class Finder implements \IteratorAggregate, \Countable
558
  *
559
  * This can be slow as all the matching files and directories must be retrieved for comparison.
560
  *
561
- * @return Finder|SplFileInfo[] The current Finder instance
562
  *
563
  * @see SortableIterator
564
  */
@@ -576,7 +576,7 @@ class Finder implements \IteratorAggregate, \Countable
576
  *
577
  * This can be slow as all the matching files and directories must be retrieved for comparison.
578
  *
579
- * @return Finder|SplFileInfo[] The current Finder instance
580
  *
581
  * @see SortableIterator
582
  */
@@ -595,7 +595,7 @@ class Finder implements \IteratorAggregate, \Countable
595
  *
596
  * @param \Closure $closure An anonymous function
597
  *
598
- * @return Finder|SplFileInfo[] The current Finder instance
599
  *
600
  * @see CustomFilterIterator
601
  */
@@ -609,7 +609,7 @@ class Finder implements \IteratorAggregate, \Countable
609
  /**
610
  * Forces the following of symlinks.
611
  *
612
- * @return Finder|SplFileInfo[] The current Finder instance
613
  */
614
  public function followLinks()
615
  {
@@ -625,7 +625,7 @@ class Finder implements \IteratorAggregate, \Countable
625
  *
626
  * @param bool $ignore
627
  *
628
- * @return Finder|SplFileInfo[] The current Finder instance
629
  */
630
  public function ignoreUnreadableDirs($ignore = true)
631
  {
@@ -639,7 +639,7 @@ class Finder implements \IteratorAggregate, \Countable
639
  *
640
  * @param string|array $dirs A directory path or an array of directories
641
  *
642
- * @return Finder|SplFileInfo[] The current Finder instance
643
  *
644
  * @throws \InvalidArgumentException if one of the directories does not exist
645
  */
@@ -700,7 +700,7 @@ class Finder implements \IteratorAggregate, \Countable
700
  *
701
  * @param mixed $iterator
702
  *
703
- * @return Finder|SplFileInfo[] The finder
704
  *
705
  * @throws \InvalidArgumentException When the given argument is not iterable.
706
  */
@@ -734,7 +734,7 @@ class Finder implements \IteratorAggregate, \Countable
734
  }
735
 
736
  /**
737
- * @return Finder The current Finder instance
738
  */
739
  private function sortAdapters()
740
  {
78
  /**
79
  * Creates a new Finder.
80
  *
81
+ * @return static
82
  */
83
  public static function create()
84
  {
91
  * @param AdapterInterface $adapter An adapter instance
92
  * @param int $priority Highest is selected first
93
  *
94
+ * @return $this
95
  *
96
  * @deprecated since 2.8, to be removed in 3.0.
97
  */
113
  /**
114
  * Sets the selected adapter to the best one according to the current platform the code is run on.
115
  *
116
+ * @return $this
117
  *
118
  * @deprecated since 2.8, to be removed in 3.0.
119
  */
133
  *
134
  * @param string $name
135
  *
136
+ * @return $this
137
  *
138
  * @throws \InvalidArgumentException
139
  *
158
  /**
159
  * Removes all adapters registered in the finder.
160
  *
161
+ * @return $this
162
  *
163
  * @deprecated since 2.8, to be removed in 3.0.
164
  */
192
  /**
193
  * Restricts the matching to directories only.
194
  *
195
+ * @return $this
196
  */
197
  public function directories()
198
  {
204
  /**
205
  * Restricts the matching to files only.
206
  *
207
+ * @return $this
208
  */
209
  public function files()
210
  {
221
  * $finder->depth('> 1') // the Finder will start matching at level 1.
222
  * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point.
223
  *
224
+ * @param string|int $level The depth level expression
225
  *
226
+ * @return $this
227
  *
228
  * @see DepthRangeFilterIterator
229
  * @see NumberComparator
247
  *
248
  * @param string $date A date range string
249
  *
250
+ * @return $this
251
  *
252
  * @see strtotime
253
  * @see DateRangeFilterIterator
271
  *
272
  * @param string $pattern A pattern (a regexp, a glob, or a string)
273
  *
274
+ * @return $this
275
  *
276
  * @see FilenameFilterIterator
277
  */
287
  *
288
  * @param string $pattern A pattern (a regexp, a glob, or a string)
289
  *
290
+ * @return $this
291
  *
292
  * @see FilenameFilterIterator
293
  */
308
  *
309
  * @param string $pattern A pattern (string or regexp)
310
  *
311
+ * @return $this
312
  *
313
  * @see FilecontentFilterIterator
314
  */
329
  *
330
  * @param string $pattern A pattern (string or regexp)
331
  *
332
+ * @return $this
333
  *
334
  * @see FilecontentFilterIterator
335
  */
352
  *
353
  * @param string $pattern A pattern (a regexp or a string)
354
  *
355
+ * @return $this
356
  *
357
  * @see FilenameFilterIterator
358
  */
375
  *
376
  * @param string $pattern A pattern (a regexp or a string)
377
  *
378
+ * @return $this
379
  *
380
  * @see FilenameFilterIterator
381
  */
393
  * $finder->size('<= 1Ki');
394
  * $finder->size(4);
395
  *
396
+ * @param string|int $size A size range string or an integer
397
  *
398
+ * @return $this
399
  *
400
  * @see SizeRangeFilterIterator
401
  * @see NumberComparator
412
  *
413
  * @param string|array $dirs A directory path or an array of directories
414
  *
415
+ * @return $this
416
  *
417
  * @see ExcludeDirectoryFilterIterator
418
  */
428
  *
429
  * @param bool $ignoreDotFiles Whether to exclude "hidden" files or not
430
  *
431
+ * @return $this
432
  *
433
  * @see ExcludeDirectoryFilterIterator
434
  */
448
  *
449
  * @param bool $ignoreVCS Whether to exclude VCS files or not
450
  *
451
+ * @return $this
452
  *
453
  * @see ExcludeDirectoryFilterIterator
454
  */
488
  *
489
  * @param \Closure $closure An anonymous function
490
  *
491
+ * @return $this
492
  *
493
  * @see SortableIterator
494
  */
504
  *
505
  * This can be slow as all the matching files and directories must be retrieved for comparison.
506
  *
507
+ * @return $this
508
  *
509
  * @see SortableIterator
510
  */
520
  *
521
  * This can be slow as all the matching files and directories must be retrieved for comparison.
522
  *
523
+ * @return $this
524
  *
525
  * @see SortableIterator
526
  */
538
  *
539
  * This can be slow as all the matching files and directories must be retrieved for comparison.
540
  *
541
+ * @return $this
542
  *
543
  * @see SortableIterator
544
  */
558
  *
559
  * This can be slow as all the matching files and directories must be retrieved for comparison.
560
  *
561
+ * @return $this
562
  *
563
  * @see SortableIterator
564
  */
576
  *
577
  * This can be slow as all the matching files and directories must be retrieved for comparison.
578
  *
579
+ * @return $this
580
  *
581
  * @see SortableIterator
582
  */
595
  *
596
  * @param \Closure $closure An anonymous function
597
  *
598
+ * @return $this
599
  *
600
  * @see CustomFilterIterator
601
  */
609
  /**
610
  * Forces the following of symlinks.
611
  *
612
+ * @return $this
613
  */
614
  public function followLinks()
615
  {
625
  *
626
  * @param bool $ignore
627
  *
628
+ * @return $this
629
  */
630
  public function ignoreUnreadableDirs($ignore = true)
631
  {
639
  *
640
  * @param string|array $dirs A directory path or an array of directories
641
  *
642
+ * @return $this
643
  *
644
  * @throws \InvalidArgumentException if one of the directories does not exist
645
  */
700
  *
701
  * @param mixed $iterator
702
  *
703
+ * @return $this
704
  *
705
  * @throws \InvalidArgumentException When the given argument is not iterable.
706
  */
734
  }
735
 
736
  /**
737
+ * @return $this
738
  */
739
  private function sortAdapters()
740
  {
vendor/symfony/finder/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2004-2016 Fabien Potencier
2
 
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
  of this software and associated documentation files (the "Software"), to deal
1
+ Copyright (c) 2004-2017 Fabien Potencier
2
 
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
  of this software and associated documentation files (the "Software"), to deal
vendor/symfony/finder/Shell/Command.php CHANGED
@@ -65,7 +65,7 @@ class Command
65
  *
66
  * @param Command|null $parent Parent command
67
  *
68
- * @return Command New Command instance
69
  */
70
  public static function create(Command $parent = null)
71
  {
@@ -101,7 +101,7 @@ class Command
101
  *
102
  * @param string|Command $bit
103
  *
104
- * @return Command The current Command instance
105
  */
106
  public function add($bit)
107
  {
@@ -115,7 +115,7 @@ class Command
115
  *
116
  * @param string|Command $bit
117
  *
118
- * @return Command The current Command instance
119
  */
120
  public function top($bit)
121
  {
@@ -133,7 +133,7 @@ class Command
133
  *
134
  * @param string $arg
135
  *
136
- * @return Command The current Command instance
137
  */
138
  public function arg($arg)
139
  {
@@ -147,7 +147,7 @@ class Command
147
  *
148
  * @param string $esc
149
  *
150
- * @return Command The current Command instance
151
  */
152
  public function cmd($esc)
153
  {
@@ -161,7 +161,7 @@ class Command
161
  *
162
  * @param string $label The unique label
163
  *
164
- * @return Command The current Command instance
165
  *
166
  * @throws \RuntimeException If label already exists
167
  */
@@ -182,7 +182,7 @@ class Command
182
  *
183
  * @param string $label
184
  *
185
- * @return Command The labeled command
186
  *
187
  * @throws \RuntimeException
188
  */
@@ -198,7 +198,7 @@ class Command
198
  /**
199
  * Returns parent command (if any).
200
  *
201
- * @return Command Parent command
202
  *
203
  * @throws \RuntimeException If command has no parent
204
  */
@@ -224,7 +224,7 @@ class Command
224
  /**
225
  * @param \Closure $errorHandler
226
  *
227
- * @return Command
228
  */
229
  public function setErrorHandler(\Closure $errorHandler)
230
  {
@@ -287,7 +287,7 @@ class Command
287
  * @param string|Command $bit
288
  * @param int $index
289
  *
290
- * @return Command The current Command instance
291
  */
292
  public function addAtIndex($bit, $index)
293
  {
65
  *
66
  * @param Command|null $parent Parent command
67
  *
68
+ * @return self
69
  */
70
  public static function create(Command $parent = null)
71
  {
101
  *
102
  * @param string|Command $bit
103
  *
104
+ * @return $this
105
  */
106
  public function add($bit)
107
  {
115
  *
116
  * @param string|Command $bit
117
  *
118
+ * @return $this
119
  */
120
  public function top($bit)
121
  {
133
  *
134
  * @param string $arg
135
  *
136
+ * @return $this
137
  */
138
  public function arg($arg)
139
  {
147
  *
148
  * @param string $esc
149
  *
150
+ * @return $this
151
  */
152
  public function cmd($esc)
153
  {
161
  *
162
  * @param string $label The unique label
163
  *
164
+ * @return self|string
165
  *
166
  * @throws \RuntimeException If label already exists
167
  */
182
  *
183
  * @param string $label
184
  *
185
+ * @return self|string
186
  *
187
  * @throws \RuntimeException
188
  */
198
  /**
199
  * Returns parent command (if any).
200
  *
201
+ * @return self
202
  *
203
  * @throws \RuntimeException If command has no parent
204
  */
224
  /**
225
  * @param \Closure $errorHandler
226
  *
227
+ * @return $this
228
  */
229
  public function setErrorHandler(\Closure $errorHandler)
230
  {
287
  * @param string|Command $bit
288
  * @param int $index
289
  *
290
+ * @return $this
291
  */
292
  public function addAtIndex($bit, $index)
293
  {
vendor/symfony/finder/phpunit.xml.dist CHANGED
@@ -5,6 +5,8 @@
5
  backupGlobals="false"
6
  colors="true"
7
  bootstrap="vendor/autoload.php"
 
 
8
  >
9
  <php>
10
  <ini name="error_reporting" value="-1" />
5
  backupGlobals="false"
6
  colors="true"
7
  bootstrap="vendor/autoload.php"
8
+ failOnRisky="true"
9
+ failOnWarning="true"
10
  >
11
  <php>
12
  <ini name="error_reporting" value="-1" />
vendor/symfony/process/.gitignore DELETED
@@ -1,3 +0,0 @@
1
- vendor/
2
- composer.lock
3
- phpunit.xml
 
 
 
vendor/symfony/process/ExecutableFinder.php CHANGED
@@ -75,7 +75,7 @@ class ExecutableFinder
75
  $suffixes = array('');
76
  if ('\\' === DIRECTORY_SEPARATOR) {
77
  $pathExt = getenv('PATHEXT');
78
- $suffixes = $pathExt ? explode(PATH_SEPARATOR, $pathExt) : $this->suffixes;
79
  }
80
  foreach ($suffixes as $suffix) {
81
  foreach ($dirs as $dir) {
75
  $suffixes = array('');
76
  if ('\\' === DIRECTORY_SEPARATOR) {
77
  $pathExt = getenv('PATHEXT');
78
+ $suffixes = array_merge($suffixes, $pathExt ? explode(PATH_SEPARATOR, $pathExt) : $this->suffixes);
79
  }
80
  foreach ($suffixes as $suffix) {
81
  foreach ($dirs as $dir) {
vendor/symfony/process/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2004-2016 Fabien Potencier
2
 
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
  of this software and associated documentation files (the "Software"), to deal
1
+ Copyright (c) 2004-2017 Fabien Potencier
2
 
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
  of this software and associated documentation files (the "Software"), to deal
vendor/symfony/process/Pipes/UnixPipes.php CHANGED
@@ -149,7 +149,7 @@ class UnixPipes extends AbstractPipes
149
  * @param Process $process
150
  * @param string|resource $input
151
  *
152
- * @return UnixPipes
153
  */
154
  public static function create(Process $process, $input)
155
  {
149
  * @param Process $process
150
  * @param string|resource $input
151
  *
152
+ * @return static
153
  */
154
  public static function create(Process $process, $input)
155
  {
vendor/symfony/process/Pipes/WindowsPipes.php CHANGED
@@ -183,7 +183,7 @@ class WindowsPipes extends AbstractPipes
183
  * @param Process $process The process
184
  * @param $input
185
  *
186
- * @return WindowsPipes
187
  */
188
  public static function create(Process $process, $input)
189
  {
183
  * @param Process $process The process
184
  * @param $input
185
  *
186
+ * @return static
187
  */
188
  public static function create(Process $process, $input)
189
  {
vendor/symfony/process/Process.php CHANGED
@@ -162,7 +162,6 @@ class Process
162
  $this->setTimeout($timeout);
163
  $this->useFileHandles = '\\' === DIRECTORY_SEPARATOR;
164
  $this->pty = false;
165
- $this->enhanceWindowsCompatibility = true;
166
  $this->enhanceSigchildCompatibility = '\\' !== DIRECTORY_SEPARATOR && $this->isSigchildEnabled();
167
  $this->options = array_replace(array('suppress_errors' => true, 'binary_pipes' => true), $options);
168
  }
@@ -314,7 +313,7 @@ class Process
314
  * @param callable|null $callback A PHP callback to run whenever there is some
315
  * output available on STDOUT or STDERR
316
  *
317
- * @return Process The new process
318
  *
319
  * @throws RuntimeException When process can't be launched
320
  * @throws RuntimeException When process is already running
@@ -389,7 +388,7 @@ class Process
389
  *
390
  * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
391
  *
392
- * @return Process
393
  *
394
  * @throws LogicException In case the process is not running
395
  * @throws RuntimeException In case --enable-sigchild is activated and the process can't be killed
@@ -405,7 +404,7 @@ class Process
405
  /**
406
  * Disables fetching output and error output from the underlying process.
407
  *
408
- * @return Process
409
  *
410
  * @throws RuntimeException In case the process is already running
411
  * @throws LogicException if an idle timeout is set
@@ -427,7 +426,7 @@ class Process
427
  /**
428
  * Enables fetching output and error output from the underlying process.
429
  *
430
- * @return Process
431
  *
432
  * @throws RuntimeException In case the process is already running
433
  */
@@ -499,7 +498,7 @@ class Process
499
  /**
500
  * Clears the process output.
501
  *
502
- * @return Process
503
  */
504
  public function clearOutput()
505
  {
@@ -558,7 +557,7 @@ class Process
558
  /**
559
  * Clears the process output.
560
  *
561
- * @return Process
562
  */
563
  public function clearErrorOutput()
564
  {
@@ -911,8 +910,16 @@ class Process
911
  if ('\\' === DIRECTORY_SEPARATOR && $tty) {
912
  throw new RuntimeException('TTY mode is not supported on Windows platform.');
913
  }
914
- if ($tty && (!file_exists('/dev/tty') || !is_readable('/dev/tty'))) {
915
- throw new RuntimeException('TTY mode requires /dev/tty to be readable.');
 
 
 
 
 
 
 
 
916
  }
917
 
918
  $this->tty = (bool) $tty;
@@ -1214,7 +1221,7 @@ class Process
1214
  return $result = false;
1215
  }
1216
 
1217
- return $result = (bool) @proc_open('echo 1', array(array('pty'), array('pty'), array('pty')), $pipes);
1218
  }
1219
 
1220
  /**
162
  $this->setTimeout($timeout);
163
  $this->useFileHandles = '\\' === DIRECTORY_SEPARATOR;
164
  $this->pty = false;
 
165
  $this->enhanceSigchildCompatibility = '\\' !== DIRECTORY_SEPARATOR && $this->isSigchildEnabled();
166
  $this->options = array_replace(array('suppress_errors' => true, 'binary_pipes' => true), $options);
167
  }
313
  * @param callable|null $callback A PHP callback to run whenever there is some
314
  * output available on STDOUT or STDERR
315
  *
316
+ * @return $this
317
  *
318
  * @throws RuntimeException When process can't be launched
319
  * @throws RuntimeException When process is already running
388
  *
389
  * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
390
  *
391
+ * @return $this
392
  *
393
  * @throws LogicException In case the process is not running
394
  * @throws RuntimeException In case --enable-sigchild is activated and the process can't be killed
404
  /**
405
  * Disables fetching output and error output from the underlying process.
406
  *
407
+ * @return $this
408
  *
409
  * @throws RuntimeException In case the process is already running
410
  * @throws LogicException if an idle timeout is set
426
  /**
427
  * Enables fetching output and error output from the underlying process.
428
  *
429
+ * @return $this
430
  *
431
  * @throws RuntimeException In case the process is already running
432
  */
498
  /**
499
  * Clears the process output.
500
  *
501
+ * @return $this
502
  */
503
  public function clearOutput()
504
  {
557
  /**
558
  * Clears the process output.
559
  *
560
+ * @return $this
561
  */
562
  public function clearErrorOutput()
563
  {
910
  if ('\\' === DIRECTORY_SEPARATOR && $tty) {
911
  throw new RuntimeException('TTY mode is not supported on Windows platform.');
912
  }
913
+ if ($tty) {
914
+ static $isTtySupported;
915
+
916
+ if (null === $isTtySupported) {
917
+ $isTtySupported = (bool) @proc_open('echo 1 >/dev/null', array(array('file', '/dev/tty', 'r'), array('file', '/dev/tty', 'w'), array('file', '/dev/tty', 'w')), $pipes);
918
+ }
919
+
920
+ if (!$isTtySupported) {
921
+ throw new RuntimeException('TTY mode requires /dev/tty to be read/writable.');
922
+ }
923
  }
924
 
925
  $this->tty = (bool) $tty;
1221
  return $result = false;
1222
  }
1223
 
1224
+ return $result = (bool) @proc_open('echo 1 >/dev/null', array(array('pty'), array('pty'), array('pty')), $pipes);
1225
  }
1226
 
1227
  /**
vendor/symfony/process/ProcessBuilder.php CHANGED
@@ -46,7 +46,7 @@ class ProcessBuilder
46
  *
47
  * @param string[] $arguments An array of arguments
48
  *
49
- * @return ProcessBuilder
50
  */
51
  public static function create(array $arguments = array())
52
  {
@@ -58,7 +58,7 @@ class ProcessBuilder
58
  *
59
  * @param string $argument A command argument
60
  *
61
- * @return ProcessBuilder
62
  */
63
  public function add($argument)
64
  {
@@ -74,7 +74,7 @@ class ProcessBuilder
74
  *
75
  * @param string|array $prefix A command prefix or an array of command prefixes
76
  *
77
- * @return ProcessBuilder
78
  */
79
  public function setPrefix($prefix)
80
  {
@@ -91,7 +91,7 @@ class ProcessBuilder
91
  *
92
  * @param string[] $arguments
93
  *
94
- * @return ProcessBuilder
95
  */
96
  public function setArguments(array $arguments)
97
  {
@@ -105,7 +105,7 @@ class ProcessBuilder
105
  *
106
  * @param null|string $cwd The working directory
107
  *
108
- * @return ProcessBuilder
109
  */
110
  public function setWorkingDirectory($cwd)
111
  {
@@ -119,7 +119,7 @@ class ProcessBuilder
119
  *
120
  * @param bool $inheritEnv
121
  *
122
- * @return ProcessBuilder
123
  */
124
  public function inheritEnvironmentVariables($inheritEnv = true)
125
  {
@@ -137,7 +137,7 @@ class ProcessBuilder
137
  * @param string $name The variable name
138
  * @param null|string $value The variable value
139
  *
140
- * @return ProcessBuilder
141
  */
142
  public function setEnv($name, $value)
143
  {
@@ -155,7 +155,7 @@ class ProcessBuilder
155
  *
156
  * @param array $variables The variables
157
  *
158
- * @return ProcessBuilder
159
  */
160
  public function addEnvironmentVariables(array $variables)
161
  {
@@ -169,7 +169,7 @@ class ProcessBuilder
169
  *
170
  * @param mixed $input The input as a string
171
  *
172
- * @return ProcessBuilder
173
  *
174
  * @throws InvalidArgumentException In case the argument is invalid
175
  *
@@ -189,7 +189,7 @@ class ProcessBuilder
189
  *
190
  * @param float|null $timeout
191
  *
192
- * @return ProcessBuilder
193
  *
194
  * @throws InvalidArgumentException
195
  */
@@ -218,7 +218,7 @@ class ProcessBuilder
218
  * @param string $name The option name
219
  * @param string $value The option value
220
  *
221
- * @return ProcessBuilder
222
  */
223
  public function setOption($name, $value)
224
  {
@@ -230,7 +230,7 @@ class ProcessBuilder
230
  /**
231
  * Disables fetching output and error output from the underlying process.
232
  *
233
- * @return ProcessBuilder
234
  */
235
  public function disableOutput()
236
  {
@@ -242,7 +242,7 @@ class ProcessBuilder
242
  /**
243
  * Enables fetching output and error output from the underlying process.
244
  *
245
- * @return ProcessBuilder
246
  */
247
  public function enableOutput()
248
  {
46
  *
47
  * @param string[] $arguments An array of arguments
48
  *
49
+ * @return static
50
  */
51
  public static function create(array $arguments = array())
52
  {
58
  *
59
  * @param string $argument A command argument
60
  *
61
+ * @return $this
62
  */
63
  public function add($argument)
64
  {
74
  *
75
  * @param string|array $prefix A command prefix or an array of command prefixes
76
  *
77
+ * @return $this
78
  */
79
  public function setPrefix($prefix)
80
  {
91
  *
92
  * @param string[] $arguments
93
  *
94
+ * @return $this
95
  */
96
  public function setArguments(array $arguments)
97
  {
105
  *
106
  * @param null|string $cwd The working directory
107
  *
108
+ * @return $this
109
  */
110
  public function setWorkingDirectory($cwd)
111
  {
119
  *
120
  * @param bool $inheritEnv
121
  *
122
+ * @return $this
123
  */
124
  public function inheritEnvironmentVariables($inheritEnv = true)
125
  {
137
  * @param string $name The variable name
138
  * @param null|string $value The variable value
139
  *
140
+ * @return $this
141
  */
142
  public function setEnv($name, $value)
143
  {
155
  *
156
  * @param array $variables The variables
157
  *
158
+ * @return $this
159
  */
160
  public function addEnvironmentVariables(array $variables)
161
  {
169
  *
170
  * @param mixed $input The input as a string
171
  *
172
+ * @return $this
173
  *
174
  * @throws InvalidArgumentException In case the argument is invalid
175
  *
189
  *
190
  * @param float|null $timeout
191
  *
192
+ * @return $this
193
  *
194
  * @throws InvalidArgumentException
195
  */
218
  * @param string $name The option name
219
  * @param string $value The option value
220
  *
221
+ * @return $this
222
  */
223
  public function setOption($name, $value)
224
  {
230
  /**
231
  * Disables fetching output and error output from the underlying process.
232
  *
233
+ * @return $this
234
  */
235
  public function disableOutput()
236
  {
242
  /**
243
  * Enables fetching output and error output from the underlying process.
244
  *
245
+ * @return $this
246
  */
247
  public function enableOutput()
248
  {
vendor/symfony/process/ProcessUtils.php CHANGED
@@ -71,7 +71,7 @@ class ProcessUtils
71
  return $escapedArgument;
72
  }
73
 
74
- return escapeshellarg($argument);
75
  }
76
 
77
  /**
71
  return $escapedArgument;
72
  }
73
 
74
+ return "'".str_replace("'", "'\\''", $argument)."'";
75
  }
76
 
77
  /**
vendor/symfony/process/README.md DELETED
@@ -1,13 +0,0 @@
1
- Process Component
2
- =================
3
-
4
- The Process component executes commands in sub-processes.
5
-
6
- Resources
7
- ---------
8
-
9
- * [Documentation](https://symfony.com/doc/current/components/process.html)
10
- * [Contributing](https://symfony.com/doc/current/contributing/index.html)
11
- * [Report issues](https://github.com/symfony/symfony/issues) and
12
- [send Pull Requests](https://github.com/symfony/symfony/pulls)
13
- in the [main Symfony repository](https://github.com/symfony/symfony)
 
 
 
 
 
 
 
 
 
 
 
 
 
vendor/symfony/process/Tests/ExecutableFinderTest.php CHANGED
@@ -11,12 +11,13 @@
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
 
14
  use Symfony\Component\Process\ExecutableFinder;
15
 
16
  /**
17
  * @author Chris Smith <chris@cs278.org>
18
  */
19
- class ExecutableFinderTest extends \PHPUnit_Framework_TestCase
20
  {
21
  private $path;
22
 
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
14
+ use PHPUnit\Framework\TestCase;
15
  use Symfony\Component\Process\ExecutableFinder;
16
 
17
  /**
18
  * @author Chris Smith <chris@cs278.org>
19
  */
20
+ class ExecutableFinderTest extends TestCase
21
  {
22
  private $path;
23
 
vendor/symfony/process/Tests/PhpExecutableFinderTest.php CHANGED
@@ -11,12 +11,13 @@
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
 
14
  use Symfony\Component\Process\PhpExecutableFinder;
15
 
16
  /**
17
  * @author Robert Schönthal <seroscho@googlemail.com>
18
  */
19
- class PhpExecutableFinderTest extends \PHPUnit_Framework_TestCase
20
  {
21
  /**
22
  * tests find() with the env var PHP_PATH.
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
14
+ use PHPUnit\Framework\TestCase;
15
  use Symfony\Component\Process\PhpExecutableFinder;
16
 
17
  /**
18
  * @author Robert Schönthal <seroscho@googlemail.com>
19
  */
20
+ class PhpExecutableFinderTest extends TestCase
21
  {
22
  /**
23
  * tests find() with the env var PHP_PATH.
vendor/symfony/process/Tests/PhpProcessTest.php CHANGED
@@ -11,10 +11,11 @@
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
 
14
  use Symfony\Component\Process\PhpExecutableFinder;
15
  use Symfony\Component\Process\PhpProcess;
16
 
17
- class PhpProcessTest extends \PHPUnit_Framework_TestCase
18
  {
19
  public function testNonBlockingWorks()
20
  {
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
14
+ use PHPUnit\Framework\TestCase;
15
  use Symfony\Component\Process\PhpExecutableFinder;
16
  use Symfony\Component\Process\PhpProcess;
17
 
18
+ class PhpProcessTest extends TestCase
19
  {
20
  public function testNonBlockingWorks()
21
  {
vendor/symfony/process/Tests/ProcessBuilderTest.php CHANGED
@@ -11,9 +11,10 @@
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
 
14
  use Symfony\Component\Process\ProcessBuilder;
15
 
16
- class ProcessBuilderTest extends \PHPUnit_Framework_TestCase
17
  {
18
  public function testInheritEnvironmentVars()
19
  {
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
14
+ use PHPUnit\Framework\TestCase;
15
  use Symfony\Component\Process\ProcessBuilder;
16
 
17
+ class ProcessBuilderTest extends TestCase
18
  {
19
  public function testInheritEnvironmentVars()
20
  {
vendor/symfony/process/Tests/ProcessFailedExceptionTest.php CHANGED
@@ -11,28 +11,25 @@
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
 
14
  use Symfony\Component\Process\Exception\ProcessFailedException;
15
 
16
  /**
17
  * @author Sebastian Marek <proofek@gmail.com>
18
  */
19
- class ProcessFailedExceptionTest extends \PHPUnit_Framework_TestCase
20
  {
21
  /**
22
  * tests ProcessFailedException throws exception if the process was successful.
23
  */
24
  public function testProcessFailedExceptionThrowsException()
25
  {
26
- $process = $this->getMock(
27
- 'Symfony\Component\Process\Process',
28
- array('isSuccessful'),
29
- array('php')
30
- );
31
  $process->expects($this->once())
32
  ->method('isSuccessful')
33
  ->will($this->returnValue(true));
34
 
35
- $this->setExpectedException(
36
  '\InvalidArgumentException',
37
  'Expected a failed process, but the given process was successful.'
38
  );
@@ -53,11 +50,7 @@ class ProcessFailedExceptionTest extends \PHPUnit_Framework_TestCase
53
  $errorOutput = 'FATAL: Unexpected error';
54
  $workingDirectory = getcwd();
55
 
56
- $process = $this->getMock(
57
- 'Symfony\Component\Process\Process',
58
- array('isSuccessful', 'getOutput', 'getErrorOutput', 'getExitCode', 'getExitCodeText', 'isOutputDisabled', 'getWorkingDirectory'),
59
- array($cmd)
60
- );
61
  $process->expects($this->once())
62
  ->method('isSuccessful')
63
  ->will($this->returnValue(false));
@@ -105,11 +98,7 @@ class ProcessFailedExceptionTest extends \PHPUnit_Framework_TestCase
105
  $exitText = 'General error';
106
  $workingDirectory = getcwd();
107
 
108
- $process = $this->getMock(
109
- 'Symfony\Component\Process\Process',
110
- array('isSuccessful', 'isOutputDisabled', 'getExitCode', 'getExitCodeText', 'getOutput', 'getErrorOutput', 'getWorkingDirectory'),
111
- array($cmd)
112
- );
113
  $process->expects($this->once())
114
  ->method('isSuccessful')
115
  ->will($this->returnValue(false));
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
14
+ use PHPUnit\Framework\TestCase;
15
  use Symfony\Component\Process\Exception\ProcessFailedException;
16
 
17
  /**
18
  * @author Sebastian Marek <proofek@gmail.com>
19
  */
20
+ class ProcessFailedExceptionTest extends TestCase
21
  {
22
  /**
23
  * tests ProcessFailedException throws exception if the process was successful.
24
  */
25
  public function testProcessFailedExceptionThrowsException()
26
  {
27
+ $process = $this->getMockBuilder('Symfony\Component\Process\Process')->setMethods(array('isSuccessful'))->setConstructorArgs(array('php'))->getMock();
 
 
 
 
28
  $process->expects($this->once())
29
  ->method('isSuccessful')
30
  ->will($this->returnValue(true));
31
 
32
+ $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}(
33
  '\InvalidArgumentException',
34
  'Expected a failed process, but the given process was successful.'
35
  );
50
  $errorOutput = 'FATAL: Unexpected error';
51
  $workingDirectory = getcwd();
52
 
53
+ $process = $this->getMockBuilder('Symfony\Component\Process\Process')->setMethods(array('isSuccessful', 'getOutput', 'getErrorOutput', 'getExitCode', 'getExitCodeText', 'isOutputDisabled', 'getWorkingDirectory'))->setConstructorArgs(array($cmd))->getMock();
 
 
 
 
54
  $process->expects($this->once())
55
  ->method('isSuccessful')
56
  ->will($this->returnValue(false));
98
  $exitText = 'General error';
99
  $workingDirectory = getcwd();
100
 
101
+ $process = $this->getMockBuilder('Symfony\Component\Process\Process')->setMethods(array('isSuccessful', 'isOutputDisabled', 'getExitCode', 'getExitCodeText', 'getOutput', 'getErrorOutput', 'getWorkingDirectory'))->setConstructorArgs(array($cmd))->getMock();
 
 
 
 
102
  $process->expects($this->once())
103
  ->method('isSuccessful')
104
  ->will($this->returnValue(false));
vendor/symfony/process/Tests/ProcessTest.php CHANGED
@@ -11,6 +11,7 @@
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
 
14
  use Symfony\Component\Process\Exception\LogicException;
15
  use Symfony\Component\Process\Exception\ProcessTimedOutException;
16
  use Symfony\Component\Process\Exception\RuntimeException;
@@ -21,7 +22,7 @@ use Symfony\Component\Process\Process;
21
  /**
22
  * @author Robert Schönthal <seroscho@googlemail.com>
23
  */
24
- class ProcessTest extends \PHPUnit_Framework_TestCase
25
  {
26
  private static $phpBin;
27
  private static $process;
@@ -724,8 +725,8 @@ class ProcessTest extends \PHPUnit_Framework_TestCase
724
  // Ensure that both processed finished and the output is numeric
725
  $this->assertFalse($process1->isRunning());
726
  $this->assertFalse($process2->isRunning());
727
- $this->assertTrue(is_numeric($process1->getOutput()));
728
- $this->assertTrue(is_numeric($process2->getOutput()));
729
 
730
  // Ensure that restart returned a new process by check that the output is different
731
  $this->assertNotEquals($process1->getOutput(), $process2->getOutput());
@@ -926,7 +927,14 @@ class ProcessTest extends \PHPUnit_Framework_TestCase
926
  public function testMethodsThatNeedARunningProcess($method)
927
  {
928
  $process = $this->getProcess('foo');
929
- $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', sprintf('Process must be started before calling %s.', $method));
 
 
 
 
 
 
 
930
  $process->{$method}();
931
  }
932
 
@@ -1080,7 +1088,14 @@ class ProcessTest extends \PHPUnit_Framework_TestCase
1080
  {
1081
  $p = $this->getProcess('foo');
1082
  $p->disableOutput();
1083
- $this->setExpectedException($exception, $exceptionMessage);
 
 
 
 
 
 
 
1084
  if ('mustRun' === $startMethod) {
1085
  $this->skipIfNotEnhancedSigchild();
1086
  }
@@ -1249,7 +1264,12 @@ class ProcessTest extends \PHPUnit_Framework_TestCase
1249
  if (!$expectException) {
1250
  $this->markTestSkipped('PHP is compiled with --enable-sigchild.');
1251
  } elseif (self::$notEnhancedSigchild) {
1252
- $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild.');
 
 
 
 
 
1253
  }
1254
  }
1255
  }
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
14
+ use PHPUnit\Framework\TestCase;
15
  use Symfony\Component\Process\Exception\LogicException;
16
  use Symfony\Component\Process\Exception\ProcessTimedOutException;
17
  use Symfony\Component\Process\Exception\RuntimeException;
22
  /**
23
  * @author Robert Schönthal <seroscho@googlemail.com>
24
  */
25
+ class ProcessTest extends TestCase
26
  {
27
  private static $phpBin;
28
  private static $process;
725
  // Ensure that both processed finished and the output is numeric
726
  $this->assertFalse($process1->isRunning());
727
  $this->assertFalse($process2->isRunning());
728
+ $this->assertInternalType('numeric', $process1->getOutput());
729
+ $this->assertInternalType('numeric', $process2->getOutput());
730
 
731
  // Ensure that restart returned a new process by check that the output is different
732
  $this->assertNotEquals($process1->getOutput(), $process2->getOutput());
927
  public function testMethodsThatNeedARunningProcess($method)
928
  {
929
  $process = $this->getProcess('foo');
930
+
931
+ if (method_exists($this, 'expectException')) {
932
+ $this->expectException('Symfony\Component\Process\Exception\LogicException');
933
+ $this->expectExceptionMessage(sprintf('Process must be started before calling %s.', $method));
934
+ } else {
935
+ $this->setExpectedException('Symfony\Component\Process\Exception\LogicException', sprintf('Process must be started before calling %s.', $method));
936
+ }
937
+
938
  $process->{$method}();
939
  }
940
 
1088
  {
1089
  $p = $this->getProcess('foo');
1090
  $p->disableOutput();
1091
+
1092
+ if (method_exists($this, 'expectException')) {
1093
+ $this->expectException($exception);
1094
+ $this->expectExceptionMessage($exceptionMessage);
1095
+ } else {
1096
+ $this->setExpectedException($exception, $exceptionMessage);
1097
+ }
1098
+
1099
  if ('mustRun' === $startMethod) {
1100
  $this->skipIfNotEnhancedSigchild();
1101
  }
1264
  if (!$expectException) {
1265
  $this->markTestSkipped('PHP is compiled with --enable-sigchild.');
1266
  } elseif (self::$notEnhancedSigchild) {
1267
+ if (method_exists($this, 'expectException')) {
1268
+ $this->expectException('Symfony\Component\Process\Exception\RuntimeException');
1269
+ $this->expectExceptionMessage('This PHP has been compiled with --enable-sigchild.');
1270
+ } else {
1271
+ $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild.');
1272
+ }
1273
  }
1274
  }
1275
  }
vendor/symfony/process/Tests/ProcessUtilsTest.php CHANGED
@@ -11,9 +11,10 @@
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
 
14
  use Symfony\Component\Process\ProcessUtils;
15
 
16
- class ProcessUtilsTest extends \PHPUnit_Framework_TestCase
17
  {
18
  /**
19
  * @dataProvider dataArguments
@@ -43,6 +44,7 @@ class ProcessUtilsTest extends \PHPUnit_Framework_TestCase
43
  array("'<|>\" \"'\\''f'", '<|>" "\'f'),
44
  array("''", ''),
45
  array("'with\\trailingbs\\'", 'with\trailingbs\\'),
 
46
  );
47
  }
48
  }
11
 
12
  namespace Symfony\Component\Process\Tests;
13
 
14
+ use PHPUnit\Framework\TestCase;
15
  use Symfony\Component\Process\ProcessUtils;
16
 
17
+ class ProcessUtilsTest extends TestCase
18
  {
19
  /**
20
  * @dataProvider dataArguments
44
  array("'<|>\" \"'\\''f'", '<|>" "\'f'),
45
  array("''", ''),
46
  array("'with\\trailingbs\\'", 'with\trailingbs\\'),
47
+ array("'withNonAsciiAccentLikeéÉèÈàÀöä'", 'withNonAsciiAccentLikeéÉèÈàÀöä'),
48
  );
49
  }
50
  }
vendor/symfony/process/Tests/SignalListener.php CHANGED
@@ -9,7 +9,7 @@
9
  * file that was distributed with this source code.
10
  */
11
 
12
- pcntl_signal(SIGUSR1, function () {echo 'SIGUSR1'; exit;});
13
 
14
  echo 'Caught ';
15
 
9
  * file that was distributed with this source code.
10
  */
11
 
12
+ pcntl_signal(SIGUSR1, function () { echo 'SIGUSR1'; exit; });
13
 
14
  echo 'Caught ';
15
 
vendor/symfony/process/phpunit.xml.dist CHANGED
@@ -5,6 +5,8 @@
5
  backupGlobals="false"
6
  colors="true"
7
  bootstrap="vendor/autoload.php"
 
 
8
  >
9
  <php>
10
  <ini name="error_reporting" value="-1" />
5
  backupGlobals="false"
6
  colors="true"
7
  bootstrap="vendor/autoload.php"
8
+ failOnRisky="true"
9
+ failOnWarning="true"
10
  >
11
  <php>
12
  <ini name="error_reporting" value="-1" />