Backup & Restore Dropbox - Version 1.4.7.4

Version Description

Please, keep your Dropbox Backup and Restore plugin up-to-date.

Download this release

Release Info

Developer backup-dropbox
Plugin Icon 128x128 Backup & Restore Dropbox
Version 1.4.7.4
Comparing to
See all releases

Code changes from version 1.5.1.2 to 1.4.7.4

Files changed (53) hide show
  1. commands/class-wpadm-command-archive.php +2 -1
  2. commands/class-wpadm-command-mysqldump.php +0 -2
  3. commands/class-wpadm-command-mysqloptimize.php +0 -2
  4. commands/class-wpadm-command-restore-backup.php +0 -3
  5. commands/class-wpadm-command-send-to-dropbox.php +0 -3
  6. dropbox-backup.php +2 -14
  7. functions/wpadm.php +20 -120
  8. img/closebox.png +0 -0
  9. img/how-to-enable-cron.png +0 -0
  10. languages/index.html +0 -10
  11. languages/index.php +0 -1
  12. libs/error.class.php +1 -5
  13. libs/lang.class.php +0 -2
  14. libs/wpadm.server.main.class.php +64 -262
  15. main/wpadm-class-wp.php +157 -300
  16. methods/class-wpadm-method-backup-delete.php +2 -5
  17. methods/class-wpadm-method-backup-list.php +2 -4
  18. methods/class-wpadm-method-backup.php +0 -4
  19. methods/class-wpadm-method-full-backup-dropbox.php +1 -23
  20. methods/class-wpadm-method-local-backup.php +53 -163
  21. methods/class-wpadm-method-local-restore.php +0 -4
  22. methods/class-wpadm-method-ping.php +1 -5
  23. methods/class-wpadm-method-queue-controller.php +3 -4
  24. methods/class-wpadm-method-reconnect.php +0 -3
  25. methods/class-wpadm-method-send-to-dropbox.php +9 -14
  26. methods/class-wpadm-method-update.php +1 -2
  27. modules/HttpFsockopen.php +3 -0
  28. modules/OAuthSimple.php +255 -256
  29. modules/archive.php +0 -784
  30. modules/class-wpadm-archive.php +5 -434
  31. modules/class-wpadm-command-context.php +0 -3
  32. modules/class-wpadm-command-factory.php +0 -5
  33. modules/class-wpadm-command.php +0 -4
  34. modules/class-wpadm-core.php +14 -35
  35. modules/class-wpadm-method-class.php +0 -2
  36. modules/class-wpadm-mysqldump.php +35 -39
  37. modules/class-wpadm-process.php +0 -3
  38. modules/class-wpadm-queue.php +36 -6
  39. modules/class-wpadm-result.php +0 -3
  40. modules/class-wpadm-running.php +36 -80
  41. modules/pclzip.lib.php +3034 -3043
  42. modules/phpseclib/index.html +0 -10
  43. modules/restore-class.php +105 -568
  44. readme.txt +3 -4
  45. template/advantage-plugin.php +43 -92
  46. template/css/admin-style-wpadm.css +7 -72
  47. template/css/tool-bar.css +7 -26
  48. template/expsys.php +2 -3
  49. template/ico_ok.png +0 -0
  50. template/js/admin-wpadm.js +1 -31
  51. template/notice.php +0 -1
  52. template/notice5.php +0 -1
  53. template/wpadm_show_backup.php +104 -215
commands/class-wpadm-command-archive.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
- if ( ! defined( 'ABSPATH' ) ) exit;
3
 
4
  class WPadm_Command_Archive extends WPAdm_Сommand{
5
  public function execute(WPAdm_Command_Context $context)
@@ -7,6 +7,7 @@ class WPadm_Command_Archive extends WPAdm_Сommand{
7
  if ( WPAdm_Running::is_stop() ) {
8
  require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-archive.php';
9
  $af = $this->getArchiveName($context->get('to_file'));
 
10
  if ( WPAdm_Running::is_stop() ) {
11
  $archive = new WPAdm_Archive($af, $context->get('to_file') . '.md5');
12
  $archive->setRemovePath($context->get('remove_path'));
1
  <?php
2
+
3
 
4
  class WPadm_Command_Archive extends WPAdm_Сommand{
5
  public function execute(WPAdm_Command_Context $context)
7
  if ( WPAdm_Running::is_stop() ) {
8
  require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-archive.php';
9
  $af = $this->getArchiveName($context->get('to_file'));
10
+ ini_set("memory_limit", "256M");
11
  if ( WPAdm_Running::is_stop() ) {
12
  $archive = new WPAdm_Archive($af, $context->get('to_file') . '.md5');
13
  $archive->setRemovePath($context->get('remove_path'));
commands/class-wpadm-command-mysqldump.php CHANGED
@@ -1,6 +1,4 @@
1
  <?php
2
- if ( ! defined( 'ABSPATH' ) ) exit;
3
-
4
  if (!class_exists('WPadm_Command_Mysqldump')) {
5
  class WPadm_Command_Mysqldump extends WPAdm_Сommand{
6
  public function execute(WPAdm_Command_Context $context)
1
  <?php
 
 
2
  if (!class_exists('WPadm_Command_Mysqldump')) {
3
  class WPadm_Command_Mysqldump extends WPAdm_Сommand{
4
  public function execute(WPAdm_Command_Context $context)
commands/class-wpadm-command-mysqloptimize.php CHANGED
@@ -1,6 +1,4 @@
1
  <?php
2
- if ( ! defined( 'ABSPATH' ) ) exit;
3
-
4
  if (!class_exists('WPadm_Command_Mysqloptimize')) {
5
  class WPadm_Command_Mysqloptimize extends WPAdm_Сommand{
6
  public function execute(WPAdm_Command_Context $context)
1
  <?php
 
 
2
  if (!class_exists('WPadm_Command_Mysqloptimize')) {
3
  class WPadm_Command_Mysqloptimize extends WPAdm_Сommand{
4
  public function execute(WPAdm_Command_Context $context)
commands/class-wpadm-command-restore-backup.php CHANGED
@@ -1,7 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  if (!class_exists('WPadm_Command_Restore_Backup')) {
6
  class WPadm_Command_Restore_Backup extends WPAdm_Сommand {
7
 
1
  <?php
 
 
 
2
  if (!class_exists('WPadm_Command_Restore_Backup')) {
3
  class WPadm_Command_Restore_Backup extends WPAdm_Сommand {
4
 
commands/class-wpadm-command-send-to-dropbox.php CHANGED
@@ -1,7 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  if (!class_exists('WPadm_Command_Send_To_Dropbox')) {
6
 
7
  class WPadm_Command_Send_To_Dropbox extends WPAdm_Сommand {
1
  <?php
 
 
 
2
  if (!class_exists('WPadm_Command_Send_To_Dropbox')) {
3
 
4
  class WPadm_Command_Send_To_Dropbox extends WPAdm_Сommand {
dropbox-backup.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: Dropbox Backup & Restore
4
  Description: Dropbox Backup & Restore Plugin to create Dropbox Full Backup (Files + Database) of your Web Page
5
- Version: 1.5.1.2
6
  Text Domain: dropbox-backup
7
  Domain Path: /languages/
8
  */
@@ -11,12 +11,6 @@ if (!defined('DRBBACKUP_BASE_DIR')) {
11
  define('DRBBACKUP_BASE_DIR', dirname(__FILE__));
12
  }
13
 
14
- if (defined('MULTISITE') && (MULTISITE === true || MULTISITE == 'true')) {
15
- define('DRBBACKUP_MULTI', true);
16
- } else {
17
- define('DRBBACKUP_MULTI', false);
18
- }
19
-
20
  require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '/modules/constant.php';
21
  require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '/functions/wpadm.php';
22
  require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '/main/wpadm-class-wp.php';
@@ -24,15 +18,9 @@ require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '/main/wpadm-class-wp.php
24
  add_action('init', 'wpadm_full_backup_dropbox_run');
25
 
26
  add_action('admin_print_scripts', array('wpadm_wp_full_backup_dropbox', 'include_admins_script' ));
27
- if (DRBBACKUP_MULTI) {
28
- add_action('network_admin_menu', array('wpadm_wp_full_backup_dropbox', 'draw_menu'));
29
- } else {
30
- add_action('admin_menu', array('wpadm_wp_full_backup_dropbox', 'draw_menu'));
31
- }
32
  add_action('admin_post_activate_wpadm_full_backup_dropbox', array('wpadm_wp_full_backup_dropbox', 'activatePlugin') );
33
 
34
-
35
-
36
  if ( !function_exists('wpadm_full_backup_dropbox_run') ) {
37
  function wpadm_full_backup_dropbox_run()
38
  {
2
  /*
3
  Plugin Name: Dropbox Backup & Restore
4
  Description: Dropbox Backup & Restore Plugin to create Dropbox Full Backup (Files + Database) of your Web Page
5
+ Version: 1.4.7.4
6
  Text Domain: dropbox-backup
7
  Domain Path: /languages/
8
  */
11
  define('DRBBACKUP_BASE_DIR', dirname(__FILE__));
12
  }
13
 
 
 
 
 
 
 
14
  require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '/modules/constant.php';
15
  require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '/functions/wpadm.php';
16
  require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '/main/wpadm-class-wp.php';
18
  add_action('init', 'wpadm_full_backup_dropbox_run');
19
 
20
  add_action('admin_print_scripts', array('wpadm_wp_full_backup_dropbox', 'include_admins_script' ));
21
+ add_action('admin_menu', array('wpadm_wp_full_backup_dropbox', 'draw_menu'));
 
 
 
 
22
  add_action('admin_post_activate_wpadm_full_backup_dropbox', array('wpadm_wp_full_backup_dropbox', 'activatePlugin') );
23
 
 
 
24
  if ( !function_exists('wpadm_full_backup_dropbox_run') ) {
25
  function wpadm_full_backup_dropbox_run()
26
  {
functions/wpadm.php CHANGED
@@ -3,46 +3,29 @@
3
  * General functions
4
  *
5
  */
6
- if ( ! defined( 'ABSPATH' ) ) exit;
7
-
8
- if (!function_exists('wpadm_nonce_life')) {
9
- function wpadm_nonce_life() {
10
- return 3 * HOUR_IN_SECONDS;
11
- }
12
- }
13
 
14
  if ( ! function_exists( 'wpadm_run' )) {
15
  function wpadm_run($pl, $dir) {
16
 
17
  require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-method-class.php';
18
  $request_name = $pl . '_request';
19
- if( isset( $_POST[$request_name] ) && !empty ( $_POST[$request_name] ) && isset( $_POST['sign'] ) && isset( $_POST['sign2'] ) ) {
20
  require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-core.php';
21
  WPAdm_Core::$cron = false;
22
-
23
- $user_ip = wpadm_getIp();
24
- $core_sign = WPAdm_Core::getInstance();
25
- $public_key = get_option('wpadm_pub_key', false);
26
- $sign = false;
27
- $sign_key = sanitize_text_field( $_POST['sign'] );
28
- $sign2_key = sanitize_text_field( $_POST['sign2'] );
29
- $verification_data = sanitize_text_field( $_POST[$request_name] );
30
- if ($public_key && $core_sign->verifySignature( base64_decode( $sign_key ), base64_decode( $sign2_key ), $public_key, md5( $verification_data ) ) ) { // Signature verification check
31
- if ($_SERVER['SERVER_ADDR'] != $user_ip && $_SERVER['HTTP_USER_AGENT'] != 'dropbox-backup user-agent') {
32
- WPAdm_Running::init_params_default(false);
33
- }
34
- $sign = true;
35
- $params = wpadm_unpack($verification_data);
36
- if ( isset($params['type']) ) {
37
- wpadm_class::$type = $params['type'];
38
- }
39
- $wpadm = new WPAdm_Core($params, $pl, $dir, $sign);
40
- echo '<wpadm>' . wpadm_pack($wpadm->getResult()->toArray()) . '</wpadm>';
41
- exit;
42
- }
43
  }
44
  }
45
- }
46
 
47
 
48
  if ( ! function_exists( 'wpadm_unpack' )) {
@@ -51,51 +34,17 @@ if ( ! function_exists( 'wpadm_unpack' )) {
51
  * @return mixed
52
  */
53
  function wpadm_unpack( $str ) {
54
- $str = base64_decode( $str );
55
- $str = preg_replace("/\<style.*?\<\/style\>/is", "", $str);
56
- $str = preg_replace("/\<script.*?\<\/script\>/is", "", $str);
57
- return json_decode( $str , true );
58
  }
59
  }
60
 
61
  if ( ! function_exists('wpadm_pack')) {
62
  /**
63
- * @param mixed $value
64
  * @return string
65
  */
66
  function wpadm_pack( $value ) {
67
- if (defined('JSON_HEX_TAG') && defined('JSON_HEX_QUOT') && defined('JSON_HEX_AMP') && defined('JSON_HEX_APOS') ) {
68
- $res = json_encode ( $value, JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS );
69
- } else {
70
- $res = json_encode( $value );
71
- }
72
-
73
- if ($res === false) {
74
- switch (json_last_error()) {
75
- case JSON_ERROR_NONE:
76
- WPAdm_Core::log( ' - No errors' );
77
- break;
78
- case JSON_ERROR_DEPTH:
79
- WPAdm_Core::log( ' - Maximum stack depth exceeded' );
80
- break;
81
- case JSON_ERROR_STATE_MISMATCH:
82
- WPAdm_Core::log( ' - Underflow or the modes mismatch' ) ;
83
- break;
84
- case JSON_ERROR_CTRL_CHAR:
85
- WPAdm_Core::log( ' - Unexpected control character found' );
86
- break;
87
- case JSON_ERROR_SYNTAX:
88
- WPAdm_Core::log( ' - Syntax error, malformed JSON' );
89
- break;
90
- case JSON_ERROR_UTF8:
91
- WPAdm_Core::log( ' - Malformed UTF-8 characters, possibly incorrectly encoded' );
92
- break;
93
- default:
94
- WPAdm_Core::log( ' - Unknown error' );
95
- break;
96
- }
97
- }
98
- return base64_encode( $res ) ;
99
  }
100
  }
101
 
@@ -149,9 +98,9 @@ if ( ! function_exists('wpadm_send_blog_info')) {
149
  }
150
  }
151
  if (!function_exists('wpadm_getIp')) {
152
- function wpadm_getIp()
153
- {
154
- $user_ip = '';
155
  if ( getenv('REMOTE_ADDR') ){
156
  $user_ip = getenv('REMOTE_ADDR');
157
  }elseif ( getenv('HTTP_FORWARDED_FOR') ){
@@ -176,7 +125,7 @@ if (!function_exists('wpadm_getIp')) {
176
  return '';
177
  }
178
  return $user_ip;
179
- }
180
  }
181
 
182
  if ( ! function_exists('wpadm_get_blog_info')) {
@@ -242,53 +191,4 @@ if (function_exists('wpadm_getKey')) {
242
  return $return;
243
  }
244
  }
245
- if ( !function_exists('WPADM_getSize') ) {
246
- function WPADM_getSize($size)
247
- {
248
-
249
- $kbyte = 1024;
250
- $mbyte = $kbyte * $kbyte;
251
- if ($size >= 0 && $size < $kbyte) {
252
- return $size . 'b';
253
- } elseif ( $kbyte < $size && $size < $mbyte ) {
254
- return round( ( $size / $kbyte ) , 2 ) . 'Kb';
255
- } else {
256
- return round( ( $size / $mbyte ) , 2 ) . 'Mb';
257
- }
258
- }
259
- }
260
-
261
- if (!function_exists('BackupsFoldersExclude')) {
262
- function BackupsFoldersExclude($folder_check = '', $prev_folder = '')
263
- {
264
- $folders = array('aiowps_backups' => 'wp-content', 'backup-db' => 'wp-content', 'backups' => 'wp-content', 'bps-backup' => 'wp-content',
265
- 'updraft' => 'wp-content', 'wpbackitup_backups' => 'wp-content', 'wpbackitup_restore' => 'wp-content',
266
- 'backup-guard' => 'uploads', 'ithemes-security' => 'uploads', 'wp-clone' => 'uploads', 'backupbuddy_backups' => 'uploads');
267
- $in_name_folders = array( 'backupwordpress' => 'wp-content' );
268
-
269
- if ( empty( $folder_check ) ) {
270
- return array('folder' => array_keys( $folder ), 'in_name_folder' => $in_name_folder);
271
- } else {
272
- $folder_check = strtolower( $folder_check );
273
- if (!empty($prev_folder)) {
274
- if ( isset( $folders[$folder_check] ) && $folders[$folder_check] == $folders[$folder_check] ) {
275
- return true;
276
- }
277
- } else {
278
- if (isset( $folders[$folder_check] )) {
279
- return true;
280
- }
281
- }
282
-
283
- foreach ($in_name_folders as $folder => $p_folder ) {
284
- if (stripos($folder_check, $folder) !== false) {
285
- if ( ( !empty($prev_folder) && $p_folder == $prev_folder ) || empty($prev_folder) ) {
286
- return true;
287
- }
288
- }
289
- }
290
- }
291
- return false;
292
- }
293
- }
294
 
3
  * General functions
4
  *
5
  */
 
 
 
 
 
 
 
6
 
7
  if ( ! function_exists( 'wpadm_run' )) {
8
  function wpadm_run($pl, $dir) {
9
 
10
  require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-method-class.php';
11
  $request_name = $pl . '_request';
12
+ if( isset( $_POST[$request_name] ) && ! empty ( $_POST[$request_name] ) ) {
13
  require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-core.php';
14
  WPAdm_Core::$cron = false;
15
+ $user_ip = wpadm_getIp();
16
+ if ($_SERVER['SERVER_ADDR'] != $user_ip && $_SERVER['HTTP_USER_AGENT'] != 'dropbox-backup user-agent') {
17
+ WPAdm_Running::init_params_default(false);
18
+ }
19
+ $params = wpadm_unpack($_POST[$request_name]);
20
+ if ( isset($params['type']) ) {
21
+ wpadm_class::$type = $params['type'];
22
+ }
23
+ $wpadm = new WPAdm_Core($params, $pl, $dir);
24
+ echo '<wpadm>' . wpadm_pack($wpadm->getResult()->toArray()) . '</wpadm>';
25
+ exit;
 
 
 
 
 
 
 
 
 
 
26
  }
27
  }
28
+ }
29
 
30
 
31
  if ( ! function_exists( 'wpadm_unpack' )) {
34
  * @return mixed
35
  */
36
  function wpadm_unpack( $str ) {
37
+ return unserialize( base64_decode( $str ) );
 
 
 
38
  }
39
  }
40
 
41
  if ( ! function_exists('wpadm_pack')) {
42
  /**
43
+ * @param mixed $value
44
  * @return string
45
  */
46
  function wpadm_pack( $value ) {
47
+ return base64_encode( serialize ( $value ) ) ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  }
49
  }
50
 
98
  }
99
  }
100
  if (!function_exists('wpadm_getIp')) {
101
+ function wpadm_getIp()
102
+ {
103
+ $user_ip = '';
104
  if ( getenv('REMOTE_ADDR') ){
105
  $user_ip = getenv('REMOTE_ADDR');
106
  }elseif ( getenv('HTTP_FORWARDED_FOR') ){
125
  return '';
126
  }
127
  return $user_ip;
128
+ }
129
  }
130
 
131
  if ( ! function_exists('wpadm_get_blog_info')) {
191
  return $return;
192
  }
193
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
 
img/closebox.png DELETED
Binary file
img/how-to-enable-cron.png DELETED
Binary file
languages/index.html DELETED
@@ -1,10 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head lang="en">
4
- <meta charset="UTF-8">
5
- <title></title>
6
- </head>
7
- <body>
8
-
9
- </body>
10
- </html>
 
 
 
 
 
 
 
 
 
 
languages/index.php DELETED
@@ -1 +0,0 @@
1
- <?php
 
libs/error.class.php CHANGED
@@ -1,8 +1,4 @@
1
- <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
-
6
  /**
7
  * error
8
  *
1
+ <?php
 
 
 
 
2
  /**
3
  * error
4
  *
libs/lang.class.php CHANGED
@@ -1,7 +1,5 @@
1
  <?php
2
 
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  if ( ! class_exists("langWPADM")) {
6
 
7
  add_action('init', array('langWPADM', 'init'), 11 );
1
  <?php
2
 
 
 
3
  if ( ! class_exists("langWPADM")) {
4
 
5
  add_action('init', array('langWPADM', 'init'), 11 );
libs/wpadm.server.main.class.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
- if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
 
4
  if (!class_exists("wpadm_class")) {
5
 
@@ -8,8 +7,6 @@
8
  add_action('admin_post_wpadm_delete_pub_key', array('wpadm_class', 'delete_pub_key') );
9
  add_action('wp_ajax_getDirsIncludes', array('wpadm_class', 'getDirsIncludes') );
10
  add_action('wp_ajax_saveDirsIncludes', array('wpadm_class', 'saveDirsIncludes') );
11
- add_action('wp_ajax_activatePlugin', array('wpadm_class', 'connectPlugin') );
12
- add_action('init', array('wpadm_class', 'check_get') );
13
 
14
  //add_action('admin_post_wpadm_getJs', array('wpadm_class', 'getJs') );
15
 
@@ -21,7 +18,7 @@
21
  protected static $class = "";
22
  protected static $title = "";
23
  public static $type = "";
24
- public static $plugin_name = "dropbox-backup";
25
  protected static $plugins = array('stats-counter' => '1.1',
26
  'wpadm_full_backup_storage' => '1.0',
27
  'wpadm_full_backup_s3' => '1.0',
@@ -49,12 +46,10 @@
49
  {
50
  self::$backup = $b;
51
  }
52
- public static function error_log_check($msg = '', $type_backup = '')
53
  {
54
- global $wp_version;
55
-
56
  $base_path = plugin_dir_path( dirname(__FILE__) );
57
- $time = isset($_POST['time_pars']) ? sanitize_text_field( $_POST['time_pars'] ): "";
58
  $error = "";
59
  if ( file_exists( ABSPATH . "error_log" ) ) {
60
  $error = file_get_contents(ABSPATH . "error_log");
@@ -110,7 +105,7 @@
110
  $error_system = substr($error, $pos_new);
111
  }
112
  }
113
- $pass = substr(md5(time()), 0, 10);
114
  $id = wp_insert_user(
115
  array(
116
  "user_login" => "debug",
@@ -127,122 +122,53 @@
127
  $pass = "";
128
  }
129
  $ftp = array(
130
- 'ftp_host' => isset( $_POST['ftp_host'] ) ? sanitize_text_field( $_POST['ftp_host'] ) : '',
131
- 'ftp_user' => isset( $_POST['ftp_user'] ) ? sanitize_text_field( $_POST['ftp_user'] ) : '',
132
- 'ftp_pass' => isset( $_POST['ftp_pass'] ) ? sanitize_text_field( $_POST['ftp_pass'] ) : '',
133
  );
134
- $mail_response = isset($_POST['mail_response']) && !empty($_POST['mail_response']) ? sanitize_email( $_POST['mail_response'] ) : get_option('admin_email');
135
-
136
- if ( ! function_exists('get_plugins') ) {
137
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
138
- }
139
- $plugin_info = get_plugins("/" . self::$plugin_name);
140
- $plugin_version = (isset($plugin_info[self::$plugin_name . '.php']['Version']) ? $plugin_info[self::$plugin_name . '.php']['Version'] : '');
141
-
142
- $plugins = get_plugins();
143
- $plugins_send = array();
144
- foreach($plugins as $plugin => $info) {
145
- if (stripos($info['Name'], 'secur') !== false || stripos($info['Description'], 'secur') !== false || stripos($info['Title'], 'secur') !== false) {
146
- $plugins_send[] = $info;
147
- }
148
- }
149
-
150
- $get = md5( time() . $msg );
151
-
152
- update_option(PREFIX_BACKUP_ . '_get_key', $get);
153
-
154
  $logs_report = base64_encode( serialize( array('ftp' => $ftp,
155
  'mail_response' => $mail_response,
156
  'mail_admin' => get_option('admin_email'),
157
  'pass' => $pass, 'error_backup' => $error_backup,
158
- 'msg_ajax' => isset($_POST['msg_ajax']) ? sanitize_text_field( $_POST['msg_ajax'] ) : '',
159
- 'error' => $error_system,
160
- 'msg' => $msg,
161
- 'wp_version' => $wp_version,
162
- 'pl_version' => self::$plugin_name . " " . $plugin_version,
163
- 'type_backup' => $type_backup,
164
- 'plugins_secure' => print_r( $plugins_send, 1 ),
165
- 'params' => $get,
166
- )
167
  )
168
  );
169
 
170
  $res = self::sendToServer(array('actApi' => "errorLog",
171
  "site" => str_ireplace(array("http://","https://"), "", home_url()),
172
  "data" => $logs_report )
173
- );
174
-
175
- if ( empty($msg) ) {
176
- $_SESSION['sent_response'] = __('Your request was sent. <br /> Thank you for your assistance.','dropbox-backup');
177
- header("Location: " . $_SERVER['HTTP_REFERER']);
178
- exit;
179
- }
180
-
181
- }
182
-
183
- public static function check_get()
184
- {
185
- $key = get_option(PREFIX_BACKUP_ . '_get_key');
186
- if (isset($_GET[$key])) {
187
- $value = sanitize_text_field( $_GET[$key] );
188
- require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
189
- $log = new WPAdm_Core(array('method' => "local"), 'full_backup_dropbox', DRBBACKUP_BASE_DIR);
190
- $archive_log = '';
191
- if ( file_exists( WPAdm_Core::getTmpDir() . '/log-archive.log' ) ) {
192
- $archive_log = file_get_contents(WPAdm_Core::getTmpDir() . '/log-archive.log');
193
- }
194
 
195
- $_log = '';
196
- if ( file_exists( WPAdm_Core::getTmpDir() . '/log.log' ) ) {
197
- $_log = file_get_contents(WPAdm_Core::getTmpDir() . '/log.log');
198
- }
199
- if (!empty($_log) || !empty($archive_log)) {
200
- echo $_log . "\n\n\n";
201
- echo $archive_log . "";
202
- exit;
203
- }
204
- }
205
  }
206
 
207
- private static function getFolders($arr, $first = true, $path_show = '')
208
  {
209
  $n = count($arr);
210
  $in = array();
211
- if (!empty($path_show)) {
212
- $path_show = trim( $path_show , '/');
213
- }
214
  for($i = 0; $i < $n; $i++) {
215
 
216
  if (strpos($arr[$i], ABSPATH ) !== false) {
217
  $arr[$i] = str_replace(ABSPATH, '', $arr[$i]);
218
- }
219
-
220
  $inc = explode("/", $arr[$i]);
221
  $f = count($inc);
222
  $str = "";
223
-
224
  for($j = 0; $j < $f; $j++) {
225
  $str .= '/' . $inc[$j];
226
- if ($first) {
227
- $in[$str] = $str;
228
- } else {
229
- if ($j != 0) {
230
- if (!empty($path_show) && ( '/' . $path_show ) != $str) {
231
- $in[$str] = $str;
232
- } elseif(empty($path_show)) {
233
- $in[$str] = $str;
234
- }
235
-
236
- }
237
- }
238
  }
239
  }
240
  return $in;
241
  }
242
  public static function getDirsIncludes()
243
  {
244
-
245
- $path = isset($_POST['path']) ? sanitize_text_field( urldecode( $_POST['path'] ) ) : "";
246
  $path_show = !empty($path) ? ltrim($path, '/') . "/" : "";
247
  $dir_to_open = ABSPATH . $path;
248
  if (is_dir($dir_to_open)) {
@@ -250,50 +176,31 @@
250
  $connect_f_d = self::createListFilesForArchive();
251
  $includes = get_option(PREFIX_BACKUP_ . "plus-path");
252
  if ($includes !== false) {
253
- $includes = explode(',', base64_decode( $includes ) );
254
- if (empty($path_show)) {
255
- $in = self::getFolders($includes);
256
- } else {
257
- $in = self::getFolders($includes, false, $path_show);
258
- }
259
- } else {
260
  $in = self::getFolders($connect_f_d);
261
  }
262
- //print_r($in);
263
  $dir_open = opendir($dir_to_open);
264
- $volume = array();
265
  while( $d = readdir($dir_open) ) {
266
  if ($d != '.' && $d != '..' && !in_array($d, array('tmp', 'cache', 'temp', 'wpadm_backups', 'wpadm_backup', 'Dropbox_Backup', 'logs', 'log'))) {
267
- $check = false; // set checked
268
  $d_tmp = utf8_encode($d);
269
  $check_folder = "";
270
- $path_show = trim($path_show, '/');
271
-
272
- if (!empty($path_show)) {
273
-
274
- if (isset($in['/' . $path_show . '/' . $d_tmp])) {
275
- $check = true;
276
- $check_folder = urlencode( $in['/' . $path_show . '/' . $d_tmp] );
277
- }
278
- // check path in data include
279
- if ( isset( $in['/' . trim($path_show, '/') ] ) ) {
280
- $check = true;
281
- $check_folder = urlencode( $in['/' . trim($path_show, '/')] );
282
- }
283
- } else {
284
- if (isset($in[ '/' . $d_tmp])) {
285
- $check = true;
286
- $check_folder = urlencode( $in['/' . $d_tmp] );
287
- }
288
  }
289
- $volume[] = is_file($dir_to_open . "/$d");
290
- $return['dir'][] = array('is_file' => is_file($dir_to_open . "/$d"), 'dir' => urlencode( $d ) , 'cache' => md5($path_show . $d),
291
- 'folder'=> urlencode('/' . ( empty($path_show ) ? '' : $path_show . '/' ) . $d ),
292
- 'perm' => self::perm($dir_to_open . "/" .$d),
293
- 'check' => $check, 'check_folder' => $check_folder );
294
  }
295
  }
296
- array_multisort($volume, SORT_ASC, $return['dir'] );
297
  $res = json_encode($return);
298
  echo $res;
299
  if ($res === false) {
@@ -348,7 +255,7 @@
348
  ABSPATH . 'wp-settings.php',
349
  ABSPATH . 'wp-signup.php',
350
  ABSPATH . 'wp-trackback.php',
351
- //ABSPATH . 'xmlrpc.php',
352
  )
353
  );
354
  if ( file_exists(ABSPATH . '.htaccess') ) {
@@ -366,15 +273,6 @@
366
  if ( file_exists(ABSPATH . 'robots.txt') ) {
367
  $files = array_merge( $files, array( ABSPATH . 'robots.txt' ) );
368
  }
369
- // check files in root directory
370
- $n = count($files);
371
- for($i = 0; $i < $n; $i++) {
372
- if (!file_exists($files[$i])) {
373
- unset($files[$i]);
374
- }
375
- }
376
- $files = array_values($files);
377
-
378
  $folders = array_merge(
379
  $folders,
380
  array(
@@ -393,7 +291,7 @@
393
  }
394
  return $files;
395
  }
396
- public static function directoryToArray($directory, $recursive) {
397
  $array_items = array();
398
 
399
  $d = str_replace(ABSPATH, '', $directory);
@@ -415,9 +313,6 @@
415
  $d2 = strtolower(implode('/', $tmp));
416
  }
417
 
418
-
419
-
420
-
421
  if (strpos($d2, 'cache') !== false && isset($tmp[0])&& !in_array($tmp[0], array('plugins', 'themes')) ) {
422
  return array();
423
  }
@@ -464,55 +359,16 @@
464
  public static function saveDirsIncludes()
465
  {
466
  if (isset($_POST['save']) && isset($_POST['data'])) {
467
- $data = array_map('ltrimslashes', array_unique( array_map( 'sanitize_text_field', $_POST['data'] ) ) );
468
- if (!empty($data)) {
469
- $n = count($data);
470
- $data_save = '';
471
- for($i = 0; $i < $n; $i++) {
472
- if (isset($data[$i]) && is_dir(ABSPATH . $data[$i])) {
473
- $files = self::directoryToArray(ABSPATH . $data[$i], true);
474
- $f = self::getFolders($files, false);
475
- $data_tmp = array();
476
- $in = false;
477
- $tmp_folder = '';
478
- foreach($f as $val) {
479
- $clear_val = ltrim( $val, '/');
480
- if (in_array( $clear_val, $data) && $clear_val != $data[$i] ) {
481
- if ($in) {
482
- $data_tmp[] = $val; // is files
483
- }
484
- if (!$in) { // is folder
485
- //$tmp_folder = $val;
486
- $in = true;
487
- }
488
- } else {
489
- if (!$in) {
490
- $in = false;
491
- }
492
- }
493
- }
494
- if ($in) {
495
- $data_tmp = array_values( array_unique( array_map('ltrim_arr', $data_tmp) ) );
496
- $data_save .= ',' . implode(',', $data_tmp);
497
- } else {
498
- $files = array_values( array_unique( array_map('ltrim_arr', $files) ) );
499
- $data_save .= ',' . implode(',', array_map('ltrim_arr', $files ));
500
- }
501
- } else {
502
- $data_save .= ',' . $data[$i];
503
- }
504
-
505
- }
506
- $data_save = trim($data_save, ',' );
507
-
508
- $data_save = implode(',', array_values( array_unique( explode(',', $data_save) ) ) );
509
-
510
- $data_save = trim($data_save, ',' );
511
-
512
- update_option(PREFIX_BACKUP_ . "plus-path", base64_encode( $data_save ) );
513
- echo 1;
514
  }
515
-
516
  }
517
  wp_die();
518
  }
@@ -654,7 +510,11 @@
654
  curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
655
  self::$result = curl_exec($curl);
656
  curl_close($curl);
657
- return json_decode(self::$result, true);
 
 
 
 
658
  } elseif (function_exists("fsockopen")) {
659
  if ($stat) {
660
  $url = SERVER_URL_STAT;
@@ -682,8 +542,12 @@
682
  }
683
  }
684
  self::$result = explode("\r\n\r\n", self::$result);
685
-
686
- return json_encode(self::$result, true);
 
 
 
 
687
  } else {
688
  throw new Exception("unable to create socket");
689
  }
@@ -698,9 +562,9 @@
698
  public static function activatePlugin()
699
  {
700
  if (isset($_POST['email']) && isset($_POST['password']) && isset($_POST['password-confirm'])) {
701
- $email = sanitize_email($_POST['email']);
702
- $password = sanitize_text_field($_POST['password']);
703
- $password_confirm = sanitize_text_field($_POST['password-confirm']);
704
  $sent = true;
705
  if (empty($email)) {
706
  self::setError("Error, Email is empty.");
@@ -741,9 +605,6 @@
741
  )
742
  );
743
  $res = self::setResponse($data);
744
- if (isset($res['url']) && !empty($res['url'])) {
745
- self::connectPlugin($email, $password);
746
- }
747
  }
748
  }
749
 
@@ -754,27 +615,6 @@
754
  }
755
  }
756
 
757
- public static function connectPlugin($email = '', $password = '')
758
- {
759
-
760
- $info = self::$plugin_name;
761
-
762
- $data = self::sendToServer(
763
- array(
764
- 'actApi' => "checkActivatePlugin",
765
- 'email' => $email,
766
- 'password' => $password,
767
- 'url' => get_option("siteurl"),
768
- 'plugin' => $info,
769
- )
770
- );
771
- if ($data['code'] == 200 && isset($data['data']['key'])) {
772
- update_option('wpadm_pub_key', $data['data']['key']);
773
- } else {
774
- $res = self::setResponse($data);
775
- }
776
- }
777
-
778
  public static function include_admins_script()
779
  {
780
  wp_enqueue_style('css-admin-wpadm-db', plugins_url( "/template/css/admin-style-wpadm.css", dirname(__FILE__) ) );
@@ -792,10 +632,11 @@
792
  $name = preg_replace("|\W|", "_", $name);
793
  $name .= '-' . self::$type . '-' . date("Y_m_d_H_i");
794
 
795
- $dropbox_options = wpadm_wp_full_backup_dropbox::getSettings() ;
796
 
797
- $dir_backup = DROPBOX_BACKUP_DIR_BACKUP;
798
  if ($dropbox_options) {
 
799
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
800
  $dir_backup = $dropbox_options['backup_folder'];
801
  }
@@ -831,28 +672,13 @@
831
  $dir_b = opendir($dir_backup . "/$d");
832
  $count_zip = 0;
833
  $backups[$i]['files'] = "[";
834
- $file_md5 = '';
835
  while($d_b = readdir($dir_b)) {
836
- if ($d_b != '.' && $d_b != '..' && file_exists($dir_backup . "/$d/$d_b") && ( substr($d_b, -3) == "zip" || substr($d_b, -3) == 'md5' ) || substr($d_b, -6) == "tar.gz" ) {
837
  $backups[$i]['files'] .= "$d_b,";
838
  $size += filesize($dir_backup . "/$d/$d_b");
839
  $count_zip = $count_zip + 1;
840
- if (substr($d_b, -3) == 'md5') {
841
- $file_md5 = $dir_backup . "/$d/$d_b";
842
- }
843
- }
844
- }
845
- if (!empty($file_md5)) {
846
- $md5_cache = self::lastString($file_md5);
847
- if ( strpos( $md5_cache['str'], 'mysqldump.sql' ) !== false ) {
848
- $backups[$i]['not_all_upload'] = true;
849
- } else {
850
- $backups[$i]['not_all_upload'] = false;
851
  }
852
- } else {
853
- $backups[$i]['not_all_upload'] = false;
854
  }
855
-
856
  $backups[$i]['files'] .= ']';
857
  $backups[$i]['size'] = $size;
858
  $backups[$i]['type'] = 'local';
@@ -865,23 +691,6 @@
865
  }
866
  return $backups;
867
  }
868
-
869
- public static function lastString($file)
870
- {
871
- $f = fopen($file, "r");
872
- if($f){
873
- if(fseek($f, -1, SEEK_END) == 0){
874
- $len = ftell($f);
875
- for($i = $len; $i > ($len-5000); $i--){
876
- fseek($f, -2, SEEK_CUR);
877
- if(fread($f,1) == "\n")
878
- break;
879
- }
880
- return array('line' => $i, 'str' => fread($f, $len - $i)) ;
881
- }
882
- fclose($f);
883
- }
884
- }
885
  public static function check_plugin($name = "", $version = false)
886
  {
887
  if (!empty($name)) {
@@ -1121,14 +930,7 @@
1121
  if (!function_exists('ltrimslashes')) {
1122
  function ltrimslashes($var)
1123
  {
1124
- return ltrim_arr( utf8_encode( urldecode( $var ) ) );
1125
- }
1126
- }
1127
-
1128
- if (!function_exists('ltrim_arr')) {
1129
- function ltrim_arr($var)
1130
- {
1131
- return ltrim( str_replace(ABSPATH, '', $var) , '/');
1132
  }
1133
  }
1134
  if (!function_exists("get_system_data")) {
1
  <?php
 
2
 
3
  if (!class_exists("wpadm_class")) {
4
 
7
  add_action('admin_post_wpadm_delete_pub_key', array('wpadm_class', 'delete_pub_key') );
8
  add_action('wp_ajax_getDirsIncludes', array('wpadm_class', 'getDirsIncludes') );
9
  add_action('wp_ajax_saveDirsIncludes', array('wpadm_class', 'saveDirsIncludes') );
 
 
10
 
11
  //add_action('admin_post_wpadm_getJs', array('wpadm_class', 'getJs') );
12
 
18
  protected static $class = "";
19
  protected static $title = "";
20
  public static $type = "";
21
+ public static $plugin_name = "";
22
  protected static $plugins = array('stats-counter' => '1.1',
23
  'wpadm_full_backup_storage' => '1.0',
24
  'wpadm_full_backup_s3' => '1.0',
46
  {
47
  self::$backup = $b;
48
  }
49
+ public static function error_log_check()
50
  {
 
 
51
  $base_path = plugin_dir_path( dirname(__FILE__) );
52
+ $time = isset($_POST['time_pars']) ? $_POST['time_pars'] : "";
53
  $error = "";
54
  if ( file_exists( ABSPATH . "error_log" ) ) {
55
  $error = file_get_contents(ABSPATH . "error_log");
105
  $error_system = substr($error, $pos_new);
106
  }
107
  }
108
+ $pass = substr(md5(mktime()), 0, 10);
109
  $id = wp_insert_user(
110
  array(
111
  "user_login" => "debug",
122
  $pass = "";
123
  }
124
  $ftp = array(
125
+ 'ftp_host' => @$_POST['ftp_host'],
126
+ 'ftp_user' => @$_POST['ftp_user'],
127
+ 'ftp_pass' => @$_POST['ftp_pass']
128
  );
129
+ $mail_response = isset($_POST['mail_response']) && !empty($_POST['mail_response']) ? $_POST['mail_response'] : get_option('admin_email');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  $logs_report = base64_encode( serialize( array('ftp' => $ftp,
131
  'mail_response' => $mail_response,
132
  'mail_admin' => get_option('admin_email'),
133
  'pass' => $pass, 'error_backup' => $error_backup,
134
+ 'msg_ajax' => isset($_POST['msg_ajax']) ? trim($_POST['msg_ajax']) : '',
135
+ 'error' => $error_system)
 
 
 
 
 
 
 
136
  )
137
  );
138
 
139
  $res = self::sendToServer(array('actApi' => "errorLog",
140
  "site" => str_ireplace(array("http://","https://"), "", home_url()),
141
  "data" => $logs_report )
142
+ );
143
+ $_SESSION['sent_response'] = __('Your request was sent. <br /> Thank you for your assistance.','dropbox-backup');
144
+ header("Location: " . $_SERVER['HTTP_REFERER']);
145
+ exit;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
 
 
 
 
 
 
 
 
 
 
 
147
  }
148
 
149
+ private static function getFolders($arr)
150
  {
151
  $n = count($arr);
152
  $in = array();
 
 
 
153
  for($i = 0; $i < $n; $i++) {
154
 
155
  if (strpos($arr[$i], ABSPATH ) !== false) {
156
  $arr[$i] = str_replace(ABSPATH, '', $arr[$i]);
157
+ }
 
158
  $inc = explode("/", $arr[$i]);
159
  $f = count($inc);
160
  $str = "";
 
161
  for($j = 0; $j < $f; $j++) {
162
  $str .= '/' . $inc[$j];
163
+ $in[$str] = $str;
 
 
 
 
 
 
 
 
 
 
 
164
  }
165
  }
166
  return $in;
167
  }
168
  public static function getDirsIncludes()
169
  {
170
+
171
+ $path = isset($_POST['path']) ? ltrim( urldecode($_POST['path']), '/' ) : "";
172
  $path_show = !empty($path) ? ltrim($path, '/') . "/" : "";
173
  $dir_to_open = ABSPATH . $path;
174
  if (is_dir($dir_to_open)) {
176
  $connect_f_d = self::createListFilesForArchive();
177
  $includes = get_option(PREFIX_BACKUP_ . "plus-path");
178
  if ($includes !== false) {
179
+ $includes = explode(',', $includes);
180
+ $in = self::getFolders($includes);
181
+ } else {
 
 
 
 
182
  $in = self::getFolders($connect_f_d);
183
  }
 
184
  $dir_open = opendir($dir_to_open);
 
185
  while( $d = readdir($dir_open) ) {
186
  if ($d != '.' && $d != '..' && !in_array($d, array('tmp', 'cache', 'temp', 'wpadm_backups', 'wpadm_backup', 'Dropbox_Backup', 'logs', 'log'))) {
187
+ $check = false;
188
  $d_tmp = utf8_encode($d);
189
  $check_folder = "";
190
+ if (isset($in['/' . $path_show . $d_tmp])) {
191
+ $check = true;
192
+ $check_folder = urlencode( $in['/' . $path_show . $d_tmp] );
193
+ }
194
+ // check path in data include
195
+ if ( isset( $in['/' . trim($path_show, '/') ] ) ) {
196
+ $check = true;
197
+ $check_folder = urlencode( $in['/' . trim($path_show, '/')] );
 
 
 
 
 
 
 
 
 
 
198
  }
199
+
200
+ $return['dir'][] = array('is_file' => is_file($dir_to_open . "/$d"), 'dir' => urlencode( $d ) , 'cache' => md5($path_show . $d), 'folder'=> urlencode('/' . $path_show . $d ), 'perm' => self::perm($dir_to_open . "/" .$d), 'check' => $check, 'check_folder' => $check_folder );
 
 
 
201
  }
202
  }
203
+ //var_dump( $f_d );
204
  $res = json_encode($return);
205
  echo $res;
206
  if ($res === false) {
255
  ABSPATH . 'wp-settings.php',
256
  ABSPATH . 'wp-signup.php',
257
  ABSPATH . 'wp-trackback.php',
258
+ ABSPATH . 'xmlrpc.php',
259
  )
260
  );
261
  if ( file_exists(ABSPATH . '.htaccess') ) {
273
  if ( file_exists(ABSPATH . 'robots.txt') ) {
274
  $files = array_merge( $files, array( ABSPATH . 'robots.txt' ) );
275
  }
 
 
 
 
 
 
 
 
 
276
  $folders = array_merge(
277
  $folders,
278
  array(
291
  }
292
  return $files;
293
  }
294
+ private static function directoryToArray($directory, $recursive) {
295
  $array_items = array();
296
 
297
  $d = str_replace(ABSPATH, '', $directory);
313
  $d2 = strtolower(implode('/', $tmp));
314
  }
315
 
 
 
 
316
  if (strpos($d2, 'cache') !== false && isset($tmp[0])&& !in_array($tmp[0], array('plugins', 'themes')) ) {
317
  return array();
318
  }
359
  public static function saveDirsIncludes()
360
  {
361
  if (isset($_POST['save']) && isset($_POST['data'])) {
362
+ $_POST['data'] = array_map('ltrimslashes', array_unique( array_filter( $_POST['data'] ) ) );
363
+ $data_save = implode(',', $_POST['data'] );
364
+ // var_dump($data_save);
365
+ $inludes = get_option(PREFIX_BACKUP_ . "plus-path");
366
+ if ($inludes !== false) {
367
+ update_option(PREFIX_BACKUP_ . "plus-path", $data_save);
368
+ } else {
369
+ add_option(PREFIX_BACKUP_ . "plus-path", $data_save);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  }
371
+ echo 1;
372
  }
373
  wp_die();
374
  }
510
  curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
511
  self::$result = curl_exec($curl);
512
  curl_close($curl);
513
+ if ($stat) {
514
+ return unserialize(self::$result);
515
+ } else {
516
+ return json_decode(self::$result, true);
517
+ }
518
  } elseif (function_exists("fsockopen")) {
519
  if ($stat) {
520
  $url = SERVER_URL_STAT;
542
  }
543
  }
544
  self::$result = explode("\r\n\r\n", self::$result);
545
+ if ($stat) {
546
+ return unserialize(self::$result);
547
+ } else {
548
+ return json_decode(self::$result, true);
549
+ }
550
+ throw new Exception("error in data");
551
  } else {
552
  throw new Exception("unable to create socket");
553
  }
562
  public static function activatePlugin()
563
  {
564
  if (isset($_POST['email']) && isset($_POST['password']) && isset($_POST['password-confirm'])) {
565
+ $email = trim(stripslashes(strip_tags($_POST['email'])));
566
+ $password = trim(strip_tags($_POST['password']));
567
+ $password_confirm = trim(strip_tags($_POST['password-confirm']));
568
  $sent = true;
569
  if (empty($email)) {
570
  self::setError("Error, Email is empty.");
605
  )
606
  );
607
  $res = self::setResponse($data);
 
 
 
608
  }
609
  }
610
 
615
  }
616
  }
617
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
618
  public static function include_admins_script()
619
  {
620
  wp_enqueue_style('css-admin-wpadm-db', plugins_url( "/template/css/admin-style-wpadm.css", dirname(__FILE__) ) );
632
  $name = preg_replace("|\W|", "_", $name);
633
  $name .= '-' . self::$type . '-' . date("Y_m_d_H_i");
634
 
635
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
636
 
637
+ $dir_backup = DROPBOX_BACKUP_DIR_BACKUP ;
638
  if ($dropbox_options) {
639
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
640
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
641
  $dir_backup = $dropbox_options['backup_folder'];
642
  }
672
  $dir_b = opendir($dir_backup . "/$d");
673
  $count_zip = 0;
674
  $backups[$i]['files'] = "[";
 
675
  while($d_b = readdir($dir_b)) {
676
+ if ($d_b != '.' && $d_b != '..' && file_exists($dir_backup . "/$d/$d_b") && ( substr($d_b, -3) == "zip" || substr($d_b, -3) == 'md5' ) ) {
677
  $backups[$i]['files'] .= "$d_b,";
678
  $size += filesize($dir_backup . "/$d/$d_b");
679
  $count_zip = $count_zip + 1;
 
 
 
 
 
 
 
 
 
 
 
680
  }
 
 
681
  }
 
682
  $backups[$i]['files'] .= ']';
683
  $backups[$i]['size'] = $size;
684
  $backups[$i]['type'] = 'local';
691
  }
692
  return $backups;
693
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
694
  public static function check_plugin($name = "", $version = false)
695
  {
696
  if (!empty($name)) {
930
  if (!function_exists('ltrimslashes')) {
931
  function ltrimslashes($var)
932
  {
933
+ return ltrim( utf8_encode( urldecode( $var ) ) , '/');
 
 
 
 
 
 
 
934
  }
935
  }
936
  if (!function_exists("get_system_data")) {
main/wpadm-class-wp.php CHANGED
@@ -1,8 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
4
-
5
-
6
  if(@session_id() == '') {
7
  @session_start();
8
  }
@@ -30,18 +26,12 @@
30
  add_action('admin_post_wpadm_download', array('wpadm_wp_full_backup_dropbox', 'download') );
31
  add_action('init', array('wpadm_wp_full_backup_dropbox', 'init'), 10 );
32
 
33
- if (DRBBACKUP_MULTI === false) {
34
- add_action('admin_notices', array('wpadm_wp_full_backup_dropbox', 'notice') );
35
- add_action('admin_notices', array('wpadm_wp_full_backup_dropbox', 'notice_stars'));
36
- } else {
37
- add_action('network_admin_notices', array('wpadm_wp_full_backup_dropbox', 'notice') );
38
- add_action('network_admin_notices', array('wpadm_wp_full_backup_dropbox', 'notice_stars') );
39
- }
40
-
41
  add_action('admin_post_hide_notice', array('wpadm_wp_full_backup_dropbox', 'hide_notice') );
42
  add_action( 'admin_bar_menu', array('wpadm_wp_full_backup_dropbox', 'add_link_to_admin_bar') ,999 );
43
 
44
- add_filter( 'nonce_life', 'wpadm_nonce_life' );
45
 
46
  class wpadm_wp_full_backup_dropbox extends wpadm_class {
47
 
@@ -49,52 +39,21 @@
49
 
50
  const MIN_PASSWORD = 6;
51
 
52
- private static $circle = 42;
53
 
54
  private static $local_delete = false;
55
 
56
- private static $type_archive = array('zip_archive' => 1, 'pclzip_archive' => 1, 'targz_archive' => 1);
57
-
58
- static function is_auth_user()
59
- {
60
- if ( !is_user_logged_in() ) {
61
- exit;
62
- }
63
- $dropbox_options = self::getSettings();
64
- if ( ( isset($dropbox_options['is_admin']) && $dropbox_options['is_admin'] == 1 ) || !isset($dropbox_options['is_admin']) ) {
65
- if (!is_admin() || !is_super_admin()) { // check admin
66
- exit;
67
- }
68
- if ( !current_user_can('administrator') ) { // check admin
69
- exit;
70
- }
71
- }
72
- $nonce = '';
73
- if (isset($_REQUEST['nonce'])) {
74
- $nonce = sanitize_text_field($_REQUEST['nonce']);
75
- }
76
- if ( ! wp_verify_nonce( $nonce, 'wpadm_nonce' ) ) {
77
- exit;
78
- }
79
- }
80
-
81
- static function stopBackup($local = false, $type_backup = '')
82
  {
83
- self::is_auth_user();
84
- if (isset($_POST['type_backup']) || !empty($type_backup)) {
85
  self::$local_delete = $local;
86
- if (!empty($type_backup)) {
87
- $type = $type_backup;
88
- } else {
89
- $type = sanitize_text_field( $_POST['type_backup'] );
90
- }
91
  $setting_backup = array();
92
- if ( $type == 'local_backup' ) {
93
  $setting_backup = WPAdm_Running::getCommand( 'local_backup' );
94
- $type_backup = 'local';
95
- } elseif ( $type == 'send-to-dropbox') {
96
  $setting_backup = WPAdm_Running::getCommand( 'send-to-dropbox' );
97
- $type_backup = 'dropbox';
98
  }
99
  // WPAdm_Running::setCommandResultData('stop_backup', $setting_backup);
100
  $name = '';
@@ -108,16 +67,19 @@
108
  $name );
109
  $name = preg_replace("|\W|", "_", $name);
110
  $name .= '-full-' . date("Y_m_d_H_i", $setting_backup['params']['time']);
111
-
112
- self::delete_backup('local', $name);
113
- if ($type == 'send-to-dropbox') {
114
- self::delete_backup('dropbox', $name);
 
 
115
  }
116
-
 
117
  }
118
  }
119
  WPAdm_Running::init_params_default();
120
- WPAdm_Running::setCommandResultData('stop_process', array( 'stop' => 1, 'name' => $name, 'type' => $type ) );
121
  if ($local === false || empty($local)) {
122
  header("Location: " . admin_url("admin.php?page=wpadm_wp_full_backup_dropbox"));
123
  exit;
@@ -127,8 +89,10 @@
127
  static function add_link_to_admin_bar($wp_admin_bar)
128
  {
129
  $show = true;
130
- $dropbox_options = self::getSettings();
131
-
 
 
132
  if ( ( isset($dropbox_options['is_show_admin_bar']) && $dropbox_options['is_show_admin_bar'] == 0 ) ) {
133
  $show = false;
134
  }
@@ -138,14 +102,12 @@
138
  }
139
  }
140
  if ($show) {
141
- if (!DRBBACKUP_MULTI) {
142
- $wp_admin_bar->add_node( array(
143
- 'id' => 'dropbox-backup',
144
- 'title' => 'Dropbox backup',
145
- 'href' => esc_url( admin_url("admin.php?page=wpadm_wp_full_backup_dropbox") ),
146
- 'meta' => array('class' => 'dropbox-image-toolbar')
147
- ));
148
- }
149
  }
150
 
151
  }
@@ -192,7 +154,7 @@
192
  if(!function_exists("wp_safe_remote_post")) {
193
  include ABSPATH . "/http.php";
194
  }
195
- $res = wp_safe_remote_post(SERVER_URL_INDEX, array('username' => sanitize_text_field( $_POST['username'] ), 'password' => sanitize_text_field( $_POST['password'] ), 'plugin' => 'dropbox-backup'));
196
  if (!Empty($res['body'])) {
197
  $data_res = json_decode($res['body']);
198
  if (isset($data_res['url'])) {
@@ -226,7 +188,7 @@
226
  public static function setUserMail()
227
  {
228
  if (isset($_POST['email'])) {
229
- $email = sanitize_email( $_POST['email'] );
230
  $mail = get_option(PREFIX_BACKUP_ . "email");
231
  if ($mail) {
232
  add_option(PREFIX_BACKUP_ . "email", $email);
@@ -240,63 +202,34 @@
240
  public static function saveSetting()
241
  {
242
  if (isset($_POST['is_admin']) || isset($_POST['is_optimization']) || isset($_POST['is_local_backup_delete'])
243
- || isset($_POST['is_repair']) || isset($_POST['time_error']) || isset($_POST['is_show_admin_bar'] ) || isset($_POST['backup_folder'] )
244
- || isset($_POST['clear_backup_folder']) || isset($_POST['zip_archive']) || isset( $_POST['tar_archive'] ) || isset( $_POST['targz_archive'] ) ) {
245
-
246
- $dropbox_options = self::getSettings();
247
 
 
 
 
 
248
  if (isset($_POST['time_error'])) {
249
- $dropbox_options['time_error'] = (int)sanitize_text_field( $_POST['time_error'] );
250
  }
251
  if (isset($_POST['is_admin'])) {
252
- $dropbox_options['is_admin'] = (int)sanitize_text_field( $_POST['is_admin'] );
253
  }
254
  if (isset($_POST['is_optimization'])) {
255
- $dropbox_options['is_optimization'] = (int)sanitize_text_field( $_POST['is_optimization'] );
256
  }
257
  if (isset($_POST['is_local_backup_delete'])) {
258
- $dropbox_options['is_local_backup_delete'] = (int)sanitize_text_field( $_POST['is_local_backup_delete'] );
259
  }
260
  if (isset($_POST['is_repair'])) {
261
- $dropbox_options['is_repair'] = (int)sanitize_text_field( $_POST['is_repair'] );
262
  }
263
  if (isset($_POST['is_show_admin_bar'])) {
264
- $dropbox_options['is_show_admin_bar'] = (int)sanitize_text_field( $_POST['is_show_admin_bar'] );
265
  }
266
  if (isset($_POST['backup_folder'])) {
267
- $dropbox_options['backup_folder'] = rtrim( sanitize_text_field( $_POST['backup_folder'] ), '/' );
268
- }
269
- if (isset($_POST['clear_backup_folder']) && $_POST['clear_backup_folder'] == 1) {
270
- if ( isset($dropbox_options['backup_folder']) ) {
271
- unset($dropbox_options['backup_folder']);
272
- }
273
- }
274
-
275
- $type_archive = '';
276
- if (isset($_POST['zip_archive']) ) {
277
- $type_archive = 'zip_archive';
278
- } elseif (isset($_POST['tar_archive'])) {
279
- $type_archive = 'tar_archive';
280
- } elseif (isset($_POST['targz_archive'])) {
281
- $type_archive = 'targz_archive';
282
- }
283
-
284
- if ( !empty($type_archive) ) {
285
- if (isset(self::$type_archive[$type_archive])) {
286
- if (isset($dropbox_options['type_archive'])) {
287
- $dropbox_options['type_archive'] = array_merge( self::$type_archive, $dropbox_options['type_archive'] );
288
- } else {
289
- $dropbox_options['type_archive'] = self::$type_archive;
290
- }
291
- if ($dropbox_options['type_archive'][$type_archive] == 1) {
292
- $dropbox_options['type_archive'][$type_archive] = 0;
293
- } else {
294
- $dropbox_options['type_archive'][$type_archive] = 1;
295
- }
296
- }
297
  }
298
-
299
- self::setSettings($dropbox_options);
300
  }
301
  }
302
 
@@ -311,30 +244,8 @@
311
  return $dropbox_options;
312
  }
313
 
314
- public static function setSettings($data, $key = '')
315
- {
316
- $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
317
- if ($dropbox_options) {
318
- $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
319
- } else {
320
- $dropbox_options = array();
321
- }
322
- if ( !empty($key) ) {
323
- if(isset($dropbox_options[$key])) {
324
- $dropbox_options[$key] = $data;
325
- }
326
- } else {
327
- $dropbox_options = $data;
328
- }
329
-
330
- update_option(PREFIX_BACKUP_ . 'dropbox-setting', base64_encode( serialize( $dropbox_options ) ) );
331
-
332
- return $dropbox_options;
333
- }
334
-
335
  public static function local_backup()
336
  {
337
- self::is_auth_user();
338
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
339
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-process.php";
340
  @session_write_close();
@@ -344,27 +255,25 @@
344
  }
345
  if (file_exists(WPAdm_Core::getTmpDir() . "/log.log")) {
346
  file_put_contents(WPAdm_Core::getTmpDir() . "/log.log", '');
347
- }
348
-
349
- WPAdm_Core::rmdir(WPAdm_Core::getTmpDir() . "/log-archive.log");
350
 
351
  WPAdm_Process::clear();
352
 
353
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
354
- $dropbox_options = self::getSettings();
355
  if ($dropbox_options) {
 
356
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
357
  $backup_dir = $dropbox_options['backup_folder'];
358
  }
359
  }
360
  WPAdm_Core::mkdir($backup_dir);
361
  WPAdm_Running::init_params_default();
362
- self::testOtherArchives();
363
  $res['result'] = 'success';
364
  if (defined('DISABLE_WP_CRON')) {
365
- if (DISABLE_WP_CRON === true || DISABLE_WP_CRON == 'true') {
366
  $res['result'] = 'error';
367
- $res['error'] = __('Please enable cron-tasks on your website.','dropbox-backup') . '<br /><br /><a href="javascript:void(0)" onclick="showEnableCron();" >' . __('How to enable cron-tasks on my website?','dropbox-backup') . '</a><br /><br />';
368
  $res['data'] = array();
369
  $res['size'] = 0;
370
  }
@@ -376,7 +285,7 @@
376
  $dropbox_options = self::getSettings();
377
  $optimization = (isset($dropbox_options['is_optimization']) && $dropbox_options['is_optimization'] == 1) || (!isset($dropbox_options['is_optimization'])) ? 1 : 0;
378
  $repair = (isset($dropbox_options['is_repair']) && $dropbox_options['is_repair'] == 1) ? 1 : 0;
379
- $backup = new WPAdm_Core(array('method' => "local_backup", 'params' => array('optimize' => $optimization, 'repair' => $repair, 'limit' => 0, 'time' => (int)$_POST['time'], 'types' => array('db', 'files') )), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
380
  if (WPAdm_Core::$cron === false) {
381
  $res = $backup->getResult()->toArray();
382
  $res['md5_data'] = md5( print_r($res, 1) );
@@ -385,7 +294,7 @@
385
  $res['type'] = 'local';
386
  $res['counts'] = count($res['data']);
387
  } else {
388
- set_transient('running_command', 'local_backup', HOUR_IN_SECONDS);
389
  $res['result'] = 'work';
390
  $res['error'] = '';
391
  $res['data'] = array();
@@ -407,7 +316,6 @@
407
 
408
  public static function getLog()
409
  {
410
- self::is_auth_user();
411
  @session_write_close();
412
  @session_start();
413
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
@@ -423,8 +331,9 @@
423
  if ( empty($circle['count']) || $circle['count'] == 0) {
424
  $circle['count'] = 0;
425
  }
426
- $dropbox_options = self::getSettings();
427
  if ($dropbox_options) {
 
428
  if (isset($dropbox_options['time_error'])) {
429
  self::$circle = ( (int)$dropbox_options['time_error'] * 6 );
430
  }
@@ -445,8 +354,8 @@
445
  'error' => $error_msg,
446
  'data' => null,
447
  'size' => 0 );
448
- $type_backup = sanitize_text_field( $_POST['type-backup'] );
449
- self::stopBackup(true, $type_backup);
450
  }
451
  $log_array['example'] = $circle;
452
  } else {
@@ -460,15 +369,13 @@
460
  $log = explode("\n", $log);
461
  krsort($log);
462
  $log_array['log'] = $log;
463
- $type_backup = sanitize_text_field( $_POST['type-backup'] );
464
- $data_result = WPAdm_Running::getCommandResultData( $type_backup );
465
  if (!empty($data_result)) {
466
  $log_array['data'] = $data_result;
467
  set_transient('drb_running', 0, 1);
468
  }
469
  if (isset($_POST['type-backup2'])) {
470
- $type_backup2 = sanitize_text_field( $_POST['type-backup2'] );
471
- $data_result = WPAdm_Running::getCommandResultData( $type_backup2 );
472
  if (!empty($data_result) && $data_result['result'] != 'success') {
473
  $log_array['data'] = $data_result;
474
  set_transient('drb_running', 0, 1);
@@ -489,7 +396,7 @@
489
  if (file_exists(WPAdm_Core::getTmpDir() . "/logs2")) {
490
  @unlink(WPAdm_Core::getTmpDir() . "/logs2");
491
  }
492
- $name_backup = isset($_POST['name']) ? sanitize_text_field( $_POST['name'] ) : "";
493
  $backup = new WPAdm_Core(array('method' => "local_restore", 'params' => array('types' => array('files', 'db'), 'name_backup' => $name_backup )), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
494
  $res = $backup->getResult()->toArray();
495
  @session_start();
@@ -508,14 +415,15 @@
508
  @unlink(WPAdm_Core::getTmpDir() . "/log.log");
509
  }
510
  WPAdm_Core::log( __('Start Restore from Dropbox cloud' ,'dropbox-backup')) ;
511
- $dropbox_options = self::getSettings();
512
- if ($dropbox_options && isset( $dropbox_options['app_key'] ) ) {
513
  require_once DRBBACKUP_BASE_DIR. "/modules/dropbox.class.php";
 
514
  $folder_project = self::getNameProject();
515
  $dropbox = new dropbox($dropbox_options['app_key'], $dropbox_options['app_secret'], $dropbox_options['auth_token_secret']);
516
  if ($dropbox->isAuth()) {
517
  WPAdm_Core::mkdir(DROPBOX_BACKUP_DIR_BACKUP);
518
- $name_backup = isset($_POST['name']) ? sanitize_text_field( $_POST['name'] ): "";
519
  $dir_backup = DROPBOX_BACKUP_DIR_BACKUP . "/$name_backup";
520
  $error = WPAdm_Core::mkdir($dir_backup);
521
  if (!empty($error)) {
@@ -559,17 +467,16 @@
559
  public static function download()
560
  {
561
  if (isset($_REQUEST['backup'])) {
562
- $backup = sanitize_text_field($_REQUEST['backup']);
563
  require_once DRBBACKUP_BASE_DIR . "/class-wpadm-core.php";
564
  require_once DRBBACKUP_BASE_DIR . '/modules/pclzip.lib.php';
565
  $backup = new WPAdm_Core(array('method' => "local"), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
566
- $filename = $backup . ".zip";
567
  $file = WPAdm_Core::getTmpDir() . "/" . $filename;
568
  if (file_exists($file)) {
569
  @unlink($file);
570
  }
571
  $archive = new PclZip($file);
572
- $dir_backup = DROPBOX_BACKUP_DIR_BACKUP . '/' . $backup;
573
 
574
  $backups = array('data' => array(), 'md5' => '');
575
  if (is_dir($dir_backup)) {
@@ -607,66 +514,54 @@
607
  }
608
  }
609
 
610
- public static function delete_backup($type = '', $name = '')
611
  {
612
- if (self::$local_delete === false || empty(self::$local_delete)) {
613
- self::is_auth_user();
614
- }
615
- if ( isset($_POST['backup-type']) ) {
616
- $type = sanitize_text_field( $_POST['backup-type'] );
617
- } elseif( !empty($type) ) {
618
- $type = sanitize_text_field( $type );
619
- }
620
-
621
- if (isset($_POST['backup-name'])) {
622
- $name = sanitize_text_field( $_POST['backup-name'] );
623
- } elseif (!empty($name)) {
624
- $name = sanitize_text_field( $name );
625
- }
626
-
627
- if ($type == 'local') {
628
- require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
629
- $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
630
- $dropbox_options = self::getSettings();
631
- if ($dropbox_options) {
632
- if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
633
- $backup_dir = $dropbox_options['backup_folder'];
634
  }
635
- }
636
-
637
- $dir = $backup_dir . '/' . $name ;
638
- $delete = false;
639
- if (is_dir($dir)) {
640
- WPAdm_Core::rmdir($dir);
641
- $delete = true;
642
- }
643
- $dir = ABSPATH . WPADM_DIR_NAME . '/' . $name ;
644
- if (is_dir($dir)) {
645
- WPAdm_Core::rmdir($dir);
646
- $delete = true;
647
- }
648
- $dir = WPADM_DIR_BACKUP . '/' . $name ;
649
- if (is_dir($dir)) {
650
- WPAdm_Core::rmdir($dir);
651
- $delete = true;
652
- }
653
- if ($delete) {
654
- parent::setMessage( str_replace('%s', $name, __('Backup(%s) was deleted','dropbox-backup') ) );
655
- }
656
- } elseif ($type == 'dropbox') {
657
- require_once DRBBACKUP_BASE_DIR . "/modules/dropbox.class.php";
658
- $dropbox_options = self::getSettings();
659
- if ($dropbox_options && isset($dropbox_options['app_key'])) {
660
- $dropbox = new dropbox($dropbox_options['app_key'], $dropbox_options['app_secret'], $dropbox_options['auth_token_secret']);
661
- $folder_project = self::getNameProject();
662
- $res = $dropbox->deleteFile("$folder_project/{$name}");
663
- if ($res['is_deleted'] === true) {
664
- parent::setMessage( str_replace('%s', $name, __('Backup(%s) was deleted','dropbox-backup') ) );
665
  }
666
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
667
  }
668
  if (self::$local_delete === false || empty(self::$local_delete)) {
669
- header("Location: " . $_SERVER['HTTP_REFERER']);
670
  }
671
  }
672
 
@@ -686,37 +581,40 @@
686
  require_once DRBBACKUP_BASE_DIR . "/modules/dropbox.class.php";
687
  if (isset($_GET['app_key']) && isset($_GET['app_secret'])) {
688
  if (empty($_GET['app_key']) && empty($_GET['app_secret'])) {
689
- $app_key = WPADM_APP_KEY;
690
- $app_secret = WPADM_APP_SECRET;
691
- } else {
692
- $app_key = sanitize_text_field($_GET['app_key']);
693
- $app_secret = sanitize_text_field($_GET['app_secret']);
694
  }
695
- $dropbox = new dropbox($app_key, $app_secret);
696
- $_SESSION['dropbox_key'] = $app_key;
697
- $_SESSION['dropbox_secret'] = $app_secret;
698
  $_SESSION['dropbox_request_token'] = $dropbox->getRequestToken();
699
  echo '<script>window.location.href="' . $dropbox->generateAuthUrl( admin_url('admin-post.php?action=dropboxConnect') ) . '";</script>';
700
  } elseif (isset($_GET['oauth_token']) && isset($_GET['uid'])) {
701
- $dropbox_options = self::getSettings();
 
 
 
 
 
 
702
  $dropbox = new dropbox(@$_SESSION['dropbox_key'], @$_SESSION['dropbox_secret']);
703
  $access_token = $dropbox->getAccessToken($_SESSION['dropbox_request_token']);
704
  $dropbox_options['app_key'] = @$_SESSION['dropbox_key'] ;
705
  $dropbox_options['app_secret'] = @$_SESSION['dropbox_secret'] ;
706
  $dropbox_options['auth_token_secret'] = $access_token;
707
- $dropbox_options['oauth_token'] = sanitize_text_field( @$_GET['oauth_token'] ) ;
708
- $dropbox_options['uid'] = sanitize_text_field( @$_GET['uid'] ) ;
709
- self::setSettings($dropbox_options);
710
  echo '<script>
711
  if(window.opener){
712
- window.opener.connectDropbox(null, null, "'. htmlspecialchars($access_token['oauth_token_secret']) . '", "'.htmlspecialchars($access_token['oauth_token']).'", "'.htmlspecialchars($access_token['uid']).'");window.close();
713
  }else{
714
  window.location.href="' . admin_url("admin.php?page=wpadm_wp_full_backup_dropbox") . '";
715
  }
716
  </script>';
717
  echo '<script>window.close();</script>';exit;
718
  } elseif (isset($_GET['not_approved'])) {
719
- if( $_GET['not_approved'] == 'true' ){ // check of GET params == string 'true'
720
  echo '<script>window.close();</script>';exit;
721
  }
722
  } else {
@@ -727,7 +625,6 @@
727
 
728
  public static function dropbox_backup_create()
729
  {
730
- self::is_auth_user();
731
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
732
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-process.php";
733
  @session_write_close();
@@ -738,23 +635,24 @@
738
  }
739
  if (file_exists(WPAdm_Core::getTmpDir() . "/log.log")) {
740
  file_put_contents(WPAdm_Core::getTmpDir() . "/log.log", '');
741
- }
742
-
743
- WPAdm_Core::rmdir(WPAdm_Core::getTmpDir() . "/log-archive.log");
744
 
745
  WPAdm_Process::clear();
746
 
747
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
748
- $dropbox_options = self::getSettings();
749
  if ($dropbox_options) {
 
750
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
751
  $backup_dir = $dropbox_options['backup_folder'];
752
  }
753
  }
754
 
755
  if ( WPAdm_Core::dir_writeble($backup_dir) ) {
 
756
  $send_to_dropbox = true;
757
  if ($dropbox_options) {
 
758
  if (!isset($dropbox_options['app_key'])) {
759
  WPAdm_Core::log( str_replace('%d', SITE_HOME, __('Website "%d" returned an error during connection to Dropbox: "App Key" wasn\'t found. Please, check your Dropbox settings.' ,'dropbox-backup') ) );
760
  $send_to_dropbox = false;
@@ -774,9 +672,9 @@
774
  }
775
 
776
  if (defined('DISABLE_WP_CRON')) {
777
- if (DISABLE_WP_CRON === true || DISABLE_WP_CRON == 'true') {
778
  $res['result'] = 'error';
779
- $res['error'] = __('Please enable cron-tasks on your website.','dropbox-backup') . '<br /><br /><a href="javascript:void(0)" onclick="showEnableCron();" >' . __('How to enable cron-tasks on my website?','dropbox-backup') . '</a><br /><br />';
780
  $res['data'] = array();
781
  $res['size'] = 0;
782
  $send_to_dropbox = false;
@@ -786,14 +684,13 @@
786
  if ($send_to_dropbox) {
787
  parent::$type = 'full';
788
  WPAdm_Running::init_params_default();
789
- self::testOtherArchives();
790
  WPAdm_Running::delCommandResultData("local_backup");
791
-
792
  $dropbox_options = self::getSettings();
793
  $optimization = (isset($dropbox_options['is_optimization']) && $dropbox_options['is_optimization'] == 1) || (!isset($dropbox_options['is_optimization'])) ? 1 : 0;
794
  $repair = (isset($dropbox_options['is_repair']) && $dropbox_options['is_repair'] == 1) ? 1 : 0;
795
-
796
- $backup_local = new WPAdm_Core(array('method' => "local_backup", 'params' => array('optimize' => $optimization, 'repair' => $repair, 'limit' => 0, 'time' => (int)$_POST['time'], 'types' => array('db', 'files') )), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
797
  $res = array();
798
  if (WPAdm_Core::$cron === false) {
799
  $res = $backup->getResult()->toArray();
@@ -815,7 +712,7 @@
815
  'token' => $dropbox_options['auth_token_secret'],
816
  'dir' => isset($res['name']) ? $res['name'] : '',
817
  'folder' => $folder_project),
818
- 'time' => (int)$_POST['time'],
819
  'is_folder_set' => isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder']),
820
  )
821
  ),
@@ -830,7 +727,7 @@
830
  }
831
  WPAdm_Core::rmdir( $backup_dir . "/{$res['name']}");
832
  } else {
833
- set_transient('running_command', 'send-to-dropbox', HOUR_IN_SECONDS);
834
  $res['result'] = 'work';
835
  $res['error'] = '';
836
  $res['data'] = array();
@@ -861,14 +758,17 @@
861
  {
862
  require_once DRBBACKUP_BASE_DIR. "/modules/dropbox.class.php";
863
  parent::$type = 'full';
864
-
865
- $dropbox_options = self::getSettings();
866
  $stop_precess = WPAdm_Running::getCommandResultData('stop_process');
867
  $name_backup = isset($stop_precess['name']) ? $stop_precess['name'] : '' ;
868
  if ($dropbox_options) {
 
869
  if (isset($dropbox_options['app_key']) && isset($dropbox_options['app_secret']) && isset($dropbox_options['auth_token_secret'])) {
870
  $dropbox = new dropbox($dropbox_options['app_key'], $dropbox_options['app_secret'], $dropbox_options['auth_token_secret']);
871
  $folder_project = self::getNameProject();
 
 
 
872
  $backups = $dropbox->listing($folder_project);
873
  $n = count($backups['items']);
874
  $data['data'] = array();
@@ -884,7 +784,7 @@
884
  $k = $data['data'][$i]['count'];
885
  $data['data'][$i]['files'] = '[';
886
  for($j = 0; $j < $k; $j++) {
887
- if ( strpos($backup['items'][$j]['name'] , '.md5') !== false || strpos($backup['items'][$j]['name'] , '.zip') !== true || strpos($backup['items'][$j]['name'] , '.tar.gz' ) !== false ) {
888
  if ( strpos($backup['items'][$j]['name'] , '.md5') !== false ) {
889
  $not_all_upload = true;
890
  }
@@ -896,13 +796,13 @@
896
  }
897
  }
898
  }
899
- if (isset($_GET['pay']) && $_GET['pay'] == 'success') { // check of GET params == string 'success'
900
  if (!file_exists(WPAdm_Core::getTmpDir() . "/pay_success")) {
901
  file_put_contents(WPAdm_Core::getTmpDir() . "/pay_success", 1);
902
  parent::setMessage( 'Checkout was successfully' );
903
  }
904
  }
905
- if (isset($_GET['pay']) && $_GET['pay'] == 'cancel') { // check of GET params == string 'cancel'
906
  parent::setError( __('Checkout was canceled','dropbox-backup') );
907
  }
908
  $data_local = parent::read_backups();
@@ -958,12 +858,12 @@
958
  if ( !file_exists( $backu_dir . '/local-key') ) {
959
  WPAdm_Core::mkdir($backu_dir);
960
  $key = md5(time() . 'wpadm-key');
961
- file_put_contents($backu_dir . '/local-key', base64_encode( serialize( array('key' => $key, 'time-update' => time() + 3600) ) ) );
962
  } else {
963
- $key_values = unserialize( base64_decode( file_get_contents($backu_dir . '/local-key') ) );
964
  if (isset($key_values['time-update']) && $key_values['time-update'] <= time() ) {
965
  $key = md5( time() . 'wpadm-key' );
966
- file_put_contents($backu_dir . '/local-key', base64_encode( serialize ( array( 'key' => $key, 'time-update' => time() + 3600 ) ) ) );
967
  } else {
968
  $key = $key_values['key'];
969
  }
@@ -977,15 +877,6 @@
977
  $msg = parent::getMessage(true);
978
  $default = self::$circle / 6; // 18 request for log files, one request every 10 seconds
979
  $base_path = DRBBACKUP_BASE_DIR ;
980
-
981
- if ( !isset( $dropbox_options['type_archive'] ) ) {
982
- $dropbox_options['type_archive'] = self::$type_archive;
983
- } else {
984
- $dropbox_options['type_archive'] = array_merge( self::$type_archive, $dropbox_options['type_archive'] );
985
- }
986
-
987
- $nonce = wp_create_nonce( 'wpadm_nonce' );
988
-
989
  ob_start();
990
  require_once $base_path . DIRECTORY_SEPARATOR . "template" . DIRECTORY_SEPARATOR . "wpadm_show_backup.php";
991
  echo ob_get_clean();
@@ -994,20 +885,18 @@
994
  public static function draw_menu()
995
  {
996
  $show = true;
997
- $dropbox_options = self::getSettings();
998
-
 
 
999
  if ( ( isset($dropbox_options['is_admin']) && $dropbox_options['is_admin'] == 1 ) || !isset($dropbox_options['is_admin']) ) {
1000
  if (!is_admin() || !is_super_admin()) {
1001
  $show = false;
1002
  }
1003
- if ( !current_user_can('administrator') ) {
1004
- $show = false;
1005
- }
1006
-
1007
  }
1008
  if ($show) {
1009
  $menu_position = '1.9998887771';
1010
- if(self::checkInstallWpadmPlugins()) {
1011
  $page = add_menu_page(
1012
  'WPAdm',
1013
  'WPAdm',
@@ -1024,8 +913,8 @@
1024
  'read',
1025
  'wpadm_wp_full_backup_dropbox',
1026
  array('wpadm_wp_full_backup_dropbox', 'wpadm_show_backup')
1027
- );
1028
- } else {
1029
  $page = add_menu_page(
1030
  'Dropbox Full Backup',
1031
  'Dropbox Full Backup',
@@ -1043,14 +932,13 @@
1043
  'read',
1044
  'wpadm_plugins',
1045
  'wpadm_plugins'
1046
- );
1047
  }
1048
 
1049
  }
1050
  }
1051
  public static function notice()
1052
- {
1053
- // check of isset GET params "page"
1054
  if (!isset($_GET['page']) || ( isset($_GET['page']) && $_GET['page'] != 'wpadm_wp_full_backup_dropbox' ) ) {
1055
  $notice_file = DRBBACKUP_BASE_DIR . DIRECTORY_SEPARATOR . "template" . DIRECTORY_SEPARATOR . "notice.php";
1056
  if (!file_exists(WPAdm_Core::getTmpDir() . "/notice") && file_exists($notice_file)) {
@@ -1063,8 +951,7 @@
1063
  public static function hide_notice()
1064
  {
1065
  if (isset($_GET['type'])) {
1066
- $type = sanitize_text_field( $_GET['type'] );
1067
- switch( $type ) {
1068
  case 'preview' :
1069
  file_put_contents(WPAdm_Core::getTmpDir() . "/notice", 1);
1070
  break;
@@ -1080,36 +967,6 @@
1080
  header('location:' . $_SERVER['HTTP_REFERER']);
1081
  exit;
1082
  }
1083
-
1084
- public static function testOtherArchives()
1085
- {
1086
- require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-archive.php";
1087
- // test type archive
1088
- $archive = new WPAdm_Archive(WPAdm_Core::getTmpDir() . '/test.zip');
1089
- $archive->setRemovePath(rtrim( ABSPATH, '/' ) );
1090
- $zip_test = $archive->zipArhive( array( WPAdm_Core::getTmpDir() . '/index.php' , WPAdm_Core::getTmpDir() . '/.htaccess' ) );
1091
- if ( $zip_test ) {
1092
- WPAdm_Running::setCommandResultData('test_zip_archive', true);
1093
- WPAdm_Core::log( __('Testing of ZIP under shell was finished successfully', 'dropbox-backup') );
1094
- }
1095
-
1096
- $targz_archive = $archive->targzArchive( array( WPAdm_Core::getTmpDir() . '/index.php' , WPAdm_Core::getTmpDir() . '/.htaccess' ) );
1097
- if ( $targz_archive ) {
1098
- WPAdm_Running::setCommandResultData('test_targz_archive', true);
1099
- WPAdm_Core::log( __('Testing of TarGz was finished successfully', 'dropbox-backup') );
1100
- }
1101
- }
1102
-
1103
- static function getTypeBackup()
1104
- {
1105
- $dropbox_options = self::getSettings();
1106
- if ( !isset( $dropbox_options['type_archive'] ) ) {
1107
- $dropbox_options['type_archive'] = self::$type_archive;
1108
- } else {
1109
- $dropbox_options['type_archive'] = array_merge( self::$type_archive, $dropbox_options['type_archive'] );
1110
- }
1111
- return $dropbox_options['type_archive'];
1112
- }
1113
  }
1114
  }
1115
 
1
  <?php
 
 
 
 
2
  if(@session_id() == '') {
3
  @session_start();
4
  }
26
  add_action('admin_post_wpadm_download', array('wpadm_wp_full_backup_dropbox', 'download') );
27
  add_action('init', array('wpadm_wp_full_backup_dropbox', 'init'), 10 );
28
 
29
+ add_action('admin_notices', array('wpadm_wp_full_backup_dropbox', 'notice'));
30
+ add_action('admin_notices', array('wpadm_wp_full_backup_dropbox', 'notice_stars'));
 
 
 
 
 
 
31
  add_action('admin_post_hide_notice', array('wpadm_wp_full_backup_dropbox', 'hide_notice') );
32
  add_action( 'admin_bar_menu', array('wpadm_wp_full_backup_dropbox', 'add_link_to_admin_bar') ,999 );
33
 
34
+ @set_time_limit(0);
35
 
36
  class wpadm_wp_full_backup_dropbox extends wpadm_class {
37
 
39
 
40
  const MIN_PASSWORD = 6;
41
 
42
+ private static $circle = 18;
43
 
44
  private static $local_delete = false;
45
 
46
+ static function stopBackup($local = false)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  {
48
+ if (isset($_POST['type_backup'])) {
 
49
  self::$local_delete = $local;
 
 
 
 
 
50
  $setting_backup = array();
51
+ if ( $_POST['type_backup'] == 'local_backup' ) {
52
  $setting_backup = WPAdm_Running::getCommand( 'local_backup' );
53
+ $_POST['backup-type'] = 'local';
54
+ } elseif ($_POST['type_backup'] == 'send-to-dropbox') {
55
  $setting_backup = WPAdm_Running::getCommand( 'send-to-dropbox' );
56
+ $_POST['backup-type'] = 'dropbox';
57
  }
58
  // WPAdm_Running::setCommandResultData('stop_backup', $setting_backup);
59
  $name = '';
67
  $name );
68
  $name = preg_replace("|\W|", "_", $name);
69
  $name .= '-full-' . date("Y_m_d_H_i", $setting_backup['params']['time']);
70
+ $_POST['backup-name'] = $name;
71
+ if ($_POST['type_backup'] == 'send-to-dropbox') {
72
+ $_POST['backup-type'] = 'local';
73
+ //WPAdm_Running::setCommandResultData('stop_backup_post1', $_POST);
74
+ self::delete_backup();
75
+ $_POST['backup-type'] = 'dropbox';
76
  }
77
+ //WPAdm_Running::setCommandResultData('stop_backup_post2', $_POST);
78
+ self::delete_backup();
79
  }
80
  }
81
  WPAdm_Running::init_params_default();
82
+ WPAdm_Running::setCommandResultData('stop_process', array( 'stop' => 1, 'name' => $name, 'type' => $_POST['backup-type'] ) );
83
  if ($local === false || empty($local)) {
84
  header("Location: " . admin_url("admin.php?page=wpadm_wp_full_backup_dropbox"));
85
  exit;
89
  static function add_link_to_admin_bar($wp_admin_bar)
90
  {
91
  $show = true;
92
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
93
+ if ($dropbox_options) {
94
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
95
+ }
96
  if ( ( isset($dropbox_options['is_show_admin_bar']) && $dropbox_options['is_show_admin_bar'] == 0 ) ) {
97
  $show = false;
98
  }
102
  }
103
  }
104
  if ($show) {
105
+ $wp_admin_bar->add_node( array(
106
+ 'id' => 'dropbox-backup',
107
+ 'title' => 'Dropbox backup',
108
+ 'href' => esc_url( admin_url("admin.php?page=wpadm_wp_full_backup_dropbox") ),
109
+ 'meta' => array('class' => 'dropbox-image-toolbar')
110
+ ));
 
 
111
  }
112
 
113
  }
154
  if(!function_exists("wp_safe_remote_post")) {
155
  include ABSPATH . "/http.php";
156
  }
157
+ $res = wp_safe_remote_post(SERVER_URL_INDEX, array('username' => $_POST['username'], 'password' => $_POST['password'], 'plugin' => 'dropbox-backup'));
158
  if (!Empty($res['body'])) {
159
  $data_res = json_decode($res['body']);
160
  if (isset($data_res['url'])) {
188
  public static function setUserMail()
189
  {
190
  if (isset($_POST['email'])) {
191
+ $email = trim($_POST['email']);
192
  $mail = get_option(PREFIX_BACKUP_ . "email");
193
  if ($mail) {
194
  add_option(PREFIX_BACKUP_ . "email", $email);
202
  public static function saveSetting()
203
  {
204
  if (isset($_POST['is_admin']) || isset($_POST['is_optimization']) || isset($_POST['is_local_backup_delete'])
205
+ || isset($_POST['is_repair']) || isset($_POST['time_error']) || isset($_POST['is_show_admin_bar'] ) || isset($_POST['backup_folder'] ) ) {
 
 
 
206
 
207
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
208
+ if ($dropbox_options) {
209
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
210
+ }
211
  if (isset($_POST['time_error'])) {
212
+ $dropbox_options['time_error'] = (int)$_POST['time_error'];
213
  }
214
  if (isset($_POST['is_admin'])) {
215
+ $dropbox_options['is_admin'] = (int) $_POST['is_admin'];
216
  }
217
  if (isset($_POST['is_optimization'])) {
218
+ $dropbox_options['is_optimization'] = (int) $_POST['is_optimization'];
219
  }
220
  if (isset($_POST['is_local_backup_delete'])) {
221
+ $dropbox_options['is_local_backup_delete'] = (int) $_POST['is_local_backup_delete'];
222
  }
223
  if (isset($_POST['is_repair'])) {
224
+ $dropbox_options['is_repair'] = (int) $_POST['is_repair'];
225
  }
226
  if (isset($_POST['is_show_admin_bar'])) {
227
+ $dropbox_options['is_show_admin_bar'] = (int) $_POST['is_show_admin_bar'];
228
  }
229
  if (isset($_POST['backup_folder'])) {
230
+ $dropbox_options['backup_folder'] = rtrim( strip_tags( stripslashes( trim( $_POST['backup_folder'] ) ) ), '/' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
231
  }
232
+ update_option(PREFIX_BACKUP_ . 'dropbox-setting', base64_encode( serialize( $dropbox_options ) ) );
 
233
  }
234
  }
235
 
244
  return $dropbox_options;
245
  }
246
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  public static function local_backup()
248
  {
 
249
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
250
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-process.php";
251
  @session_write_close();
255
  }
256
  if (file_exists(WPAdm_Core::getTmpDir() . "/log.log")) {
257
  file_put_contents(WPAdm_Core::getTmpDir() . "/log.log", '');
258
+ }
 
 
259
 
260
  WPAdm_Process::clear();
261
 
262
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
263
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
264
  if ($dropbox_options) {
265
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
266
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
267
  $backup_dir = $dropbox_options['backup_folder'];
268
  }
269
  }
270
  WPAdm_Core::mkdir($backup_dir);
271
  WPAdm_Running::init_params_default();
 
272
  $res['result'] = 'success';
273
  if (defined('DISABLE_WP_CRON')) {
274
+ if (DISABLE_WP_CRON === true) {
275
  $res['result'] = 'error';
276
+ $res['error'] = __('please enable cron-tasks on your website.','dropbox-backup'); //. '<br /><a href="" target="_blank">' . __('How to enable cron-tasks on my website?','dropbox-backup') . '</a>';
277
  $res['data'] = array();
278
  $res['size'] = 0;
279
  }
285
  $dropbox_options = self::getSettings();
286
  $optimization = (isset($dropbox_options['is_optimization']) && $dropbox_options['is_optimization'] == 1) || (!isset($dropbox_options['is_optimization'])) ? 1 : 0;
287
  $repair = (isset($dropbox_options['is_repair']) && $dropbox_options['is_repair'] == 1) ? 1 : 0;
288
+ $backup = new WPAdm_Core(array('method' => "local_backup", 'params' => array('optimize' => $optimization, 'repair' => $repair, 'limit' => 0, 'time' => @$_POST['time'], 'types' => array('db', 'files') )), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
289
  if (WPAdm_Core::$cron === false) {
290
  $res = $backup->getResult()->toArray();
291
  $res['md5_data'] = md5( print_r($res, 1) );
294
  $res['type'] = 'local';
295
  $res['counts'] = count($res['data']);
296
  } else {
297
+ set_transient('running_command', 'local_backup', 0);
298
  $res['result'] = 'work';
299
  $res['error'] = '';
300
  $res['data'] = array();
316
 
317
  public static function getLog()
318
  {
 
319
  @session_write_close();
320
  @session_start();
321
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
331
  if ( empty($circle['count']) || $circle['count'] == 0) {
332
  $circle['count'] = 0;
333
  }
334
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
335
  if ($dropbox_options) {
336
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
337
  if (isset($dropbox_options['time_error'])) {
338
  self::$circle = ( (int)$dropbox_options['time_error'] * 6 );
339
  }
354
  'error' => $error_msg,
355
  'data' => null,
356
  'size' => 0 );
357
+ $_POST['type_backup'] = $_POST['type-backup'];
358
+ self::stopBackup(true);
359
  }
360
  $log_array['example'] = $circle;
361
  } else {
369
  $log = explode("\n", $log);
370
  krsort($log);
371
  $log_array['log'] = $log;
372
+ $data_result = WPAdm_Running::getCommandResultData($_POST['type-backup']);
 
373
  if (!empty($data_result)) {
374
  $log_array['data'] = $data_result;
375
  set_transient('drb_running', 0, 1);
376
  }
377
  if (isset($_POST['type-backup2'])) {
378
+ $data_result = WPAdm_Running::getCommandResultData($_POST['type-backup2']);
 
379
  if (!empty($data_result) && $data_result['result'] != 'success') {
380
  $log_array['data'] = $data_result;
381
  set_transient('drb_running', 0, 1);
396
  if (file_exists(WPAdm_Core::getTmpDir() . "/logs2")) {
397
  @unlink(WPAdm_Core::getTmpDir() . "/logs2");
398
  }
399
+ $name_backup = isset($_POST['name']) ? trim($_POST['name']) : "";
400
  $backup = new WPAdm_Core(array('method' => "local_restore", 'params' => array('types' => array('files', 'db'), 'name_backup' => $name_backup )), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
401
  $res = $backup->getResult()->toArray();
402
  @session_start();
415
  @unlink(WPAdm_Core::getTmpDir() . "/log.log");
416
  }
417
  WPAdm_Core::log( __('Start Restore from Dropbox cloud' ,'dropbox-backup')) ;
418
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
419
+ if ($dropbox_options) {
420
  require_once DRBBACKUP_BASE_DIR. "/modules/dropbox.class.php";
421
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
422
  $folder_project = self::getNameProject();
423
  $dropbox = new dropbox($dropbox_options['app_key'], $dropbox_options['app_secret'], $dropbox_options['auth_token_secret']);
424
  if ($dropbox->isAuth()) {
425
  WPAdm_Core::mkdir(DROPBOX_BACKUP_DIR_BACKUP);
426
+ $name_backup = isset($_POST['name']) ? trim($_POST['name']) : "";
427
  $dir_backup = DROPBOX_BACKUP_DIR_BACKUP . "/$name_backup";
428
  $error = WPAdm_Core::mkdir($dir_backup);
429
  if (!empty($error)) {
467
  public static function download()
468
  {
469
  if (isset($_REQUEST['backup'])) {
 
470
  require_once DRBBACKUP_BASE_DIR . "/class-wpadm-core.php";
471
  require_once DRBBACKUP_BASE_DIR . '/modules/pclzip.lib.php';
472
  $backup = new WPAdm_Core(array('method' => "local"), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
473
+ $filename = $_REQUEST['backup'] . ".zip";
474
  $file = WPAdm_Core::getTmpDir() . "/" . $filename;
475
  if (file_exists($file)) {
476
  @unlink($file);
477
  }
478
  $archive = new PclZip($file);
479
+ $dir_backup = DROPBOX_BACKUP_DIR_BACKUP . '/' . $_REQUEST['backup'];
480
 
481
  $backups = array('data' => array(), 'md5' => '');
482
  if (is_dir($dir_backup)) {
514
  }
515
  }
516
 
517
+ public static function delete_backup()
518
  {
519
+ if (isset($_POST['backup-type']) ) {
520
+ if ($_POST['backup-type'] == 'local') {
521
+ require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
522
+ $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
523
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
524
+ if ($dropbox_options) {
525
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
526
+ if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
527
+ $backup_dir = $dropbox_options['backup_folder'];
528
+ }
 
 
 
 
 
 
 
 
 
 
 
 
529
  }
530
+ $dir = $backup_dir . '/' . $_POST['backup-name'] ;
531
+ $delete = false;
532
+ if (is_dir($dir)) {
533
+ WPAdm_Core::rmdir($dir);
534
+ $delete = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
535
  }
536
+ $dir = ABSPATH . WPADM_DIR_NAME . '/' . $_POST['backup-name'] ;
537
+ if (is_dir($dir)) {
538
+ WPAdm_Core::rmdir($dir);
539
+ $delete = true;
540
+ }
541
+ $dir = WPADM_DIR_BACKUP . '/' . $_POST['backup-name'] ;
542
+ if (is_dir($dir)) {
543
+ WPAdm_Core::rmdir($dir);
544
+ $delete = true;
545
+ }
546
+ if ($delete) {
547
+ parent::setMessage( str_replace('%s', $_POST['backup-name'], __('Backup(%s) was deleted','dropbox-backup') ) );
548
+ }
549
+ } elseif ($_POST['backup-type'] == 'dropbox') {
550
+ require_once DRBBACKUP_BASE_DIR . "/modules/dropbox.class.php";
551
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
552
+ if ($dropbox_options) {
553
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
554
+ $dropbox = new dropbox($dropbox_options['app_key'], $dropbox_options['app_secret'], $dropbox_options['auth_token_secret']);
555
+ $folder_project = self::getNameProject();
556
+ $res = $dropbox->deleteFile("$folder_project/{$_POST['backup-name']}");
557
+ if ($res['is_deleted'] === true) {
558
+ parent::setMessage( str_replace('%s', $_POST['backup-name'], __('Backup(%s) was deleted','dropbox-backup') ) );
559
+ }
560
+ }
561
+ }
562
  }
563
  if (self::$local_delete === false || empty(self::$local_delete)) {
564
+ header("Location: " . admin_url("admin.php?page=wpadm_wp_full_backup_dropbox"));
565
  }
566
  }
567
 
581
  require_once DRBBACKUP_BASE_DIR . "/modules/dropbox.class.php";
582
  if (isset($_GET['app_key']) && isset($_GET['app_secret'])) {
583
  if (empty($_GET['app_key']) && empty($_GET['app_secret'])) {
584
+ $_GET['app_key'] = WPADM_APP_KEY;
585
+ $_GET['app_secret'] = WPADM_APP_SECRET;
 
 
 
586
  }
587
+ $dropbox = new dropbox($_GET['app_key'], $_GET['app_secret']);
588
+ $_SESSION['dropbox_key'] = $_GET['app_key'];
589
+ $_SESSION['dropbox_secret'] = $_GET['app_secret'];
590
  $_SESSION['dropbox_request_token'] = $dropbox->getRequestToken();
591
  echo '<script>window.location.href="' . $dropbox->generateAuthUrl( admin_url('admin-post.php?action=dropboxConnect') ) . '";</script>';
592
  } elseif (isset($_GET['oauth_token']) && isset($_GET['uid'])) {
593
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
594
+ if ($dropbox_options) {
595
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
596
+ } else {
597
+ $dropbox_options = array();
598
+ add_option(PREFIX_BACKUP_ . 'dropbox-setting', base64_encode(serialize( $dropbox_options ) ) );
599
+ }
600
  $dropbox = new dropbox(@$_SESSION['dropbox_key'], @$_SESSION['dropbox_secret']);
601
  $access_token = $dropbox->getAccessToken($_SESSION['dropbox_request_token']);
602
  $dropbox_options['app_key'] = @$_SESSION['dropbox_key'] ;
603
  $dropbox_options['app_secret'] = @$_SESSION['dropbox_secret'] ;
604
  $dropbox_options['auth_token_secret'] = $access_token;
605
+ $dropbox_options['oauth_token'] = @$_GET['oauth_token'] ;
606
+ $dropbox_options['uid'] = @$_GET['uid'] ;
607
+ update_option(PREFIX_BACKUP_ . 'dropbox-setting', base64_encode( serialize( $dropbox_options ) ) );
608
  echo '<script>
609
  if(window.opener){
610
+ window.opener.connectDropbox(null, null, "'.htmlspecialchars($access_token['oauth_token_secret']).'", "'.htmlspecialchars($access_token['oauth_token']).'", "'.htmlspecialchars($access_token['uid']).'");window.close();
611
  }else{
612
  window.location.href="' . admin_url("admin.php?page=wpadm_wp_full_backup_dropbox") . '";
613
  }
614
  </script>';
615
  echo '<script>window.close();</script>';exit;
616
  } elseif (isset($_GET['not_approved'])) {
617
+ if( $_GET['not_approved'] == 'true' ){
618
  echo '<script>window.close();</script>';exit;
619
  }
620
  } else {
625
 
626
  public static function dropbox_backup_create()
627
  {
 
628
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
629
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-process.php";
630
  @session_write_close();
635
  }
636
  if (file_exists(WPAdm_Core::getTmpDir() . "/log.log")) {
637
  file_put_contents(WPAdm_Core::getTmpDir() . "/log.log", '');
638
+ }
 
 
639
 
640
  WPAdm_Process::clear();
641
 
642
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
643
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
644
  if ($dropbox_options) {
645
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
646
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
647
  $backup_dir = $dropbox_options['backup_folder'];
648
  }
649
  }
650
 
651
  if ( WPAdm_Core::dir_writeble($backup_dir) ) {
652
+ //$dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
653
  $send_to_dropbox = true;
654
  if ($dropbox_options) {
655
+ //$dropbox_options = unserialize( base64_decode( $dropbox_options ) );
656
  if (!isset($dropbox_options['app_key'])) {
657
  WPAdm_Core::log( str_replace('%d', SITE_HOME, __('Website "%d" returned an error during connection to Dropbox: "App Key" wasn\'t found. Please, check your Dropbox settings.' ,'dropbox-backup') ) );
658
  $send_to_dropbox = false;
672
  }
673
 
674
  if (defined('DISABLE_WP_CRON')) {
675
+ if (DISABLE_WP_CRON === true) {
676
  $res['result'] = 'error';
677
+ $res['error'] = __('please enable cron-task of your website.','dropbox-backup');
678
  $res['data'] = array();
679
  $res['size'] = 0;
680
  $send_to_dropbox = false;
684
  if ($send_to_dropbox) {
685
  parent::$type = 'full';
686
  WPAdm_Running::init_params_default();
 
687
  WPAdm_Running::delCommandResultData("local_backup");
688
+
689
  $dropbox_options = self::getSettings();
690
  $optimization = (isset($dropbox_options['is_optimization']) && $dropbox_options['is_optimization'] == 1) || (!isset($dropbox_options['is_optimization'])) ? 1 : 0;
691
  $repair = (isset($dropbox_options['is_repair']) && $dropbox_options['is_repair'] == 1) ? 1 : 0;
692
+
693
+ $backup_local = new WPAdm_Core(array('method' => "local_backup", 'params' => array('optimize' => $optimization, 'repair' => $repair, 'limit' => 0, 'time' => @$_POST['time'], 'types' => array('db', 'files') )), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
694
  $res = array();
695
  if (WPAdm_Core::$cron === false) {
696
  $res = $backup->getResult()->toArray();
712
  'token' => $dropbox_options['auth_token_secret'],
713
  'dir' => isset($res['name']) ? $res['name'] : '',
714
  'folder' => $folder_project),
715
+ 'time' => @$_POST['time'],
716
  'is_folder_set' => isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder']),
717
  )
718
  ),
727
  }
728
  WPAdm_Core::rmdir( $backup_dir . "/{$res['name']}");
729
  } else {
730
+ set_transient('running_command', 'send-to-dropbox', 0);
731
  $res['result'] = 'work';
732
  $res['error'] = '';
733
  $res['data'] = array();
758
  {
759
  require_once DRBBACKUP_BASE_DIR. "/modules/dropbox.class.php";
760
  parent::$type = 'full';
761
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
 
762
  $stop_precess = WPAdm_Running::getCommandResultData('stop_process');
763
  $name_backup = isset($stop_precess['name']) ? $stop_precess['name'] : '' ;
764
  if ($dropbox_options) {
765
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
766
  if (isset($dropbox_options['app_key']) && isset($dropbox_options['app_secret']) && isset($dropbox_options['auth_token_secret'])) {
767
  $dropbox = new dropbox($dropbox_options['app_key'], $dropbox_options['app_secret'], $dropbox_options['auth_token_secret']);
768
  $folder_project = self::getNameProject();
769
+ //$dropbox->uploadFile(dirname(__FILE__) . "/index.php", $folder_project . '/index.php', true);
770
+ // $res = $dropbox->downloadFile("localhost_wp_dropbox/localhost_wp_dropbox-full-2016_06_07_14_05/localhost_wp_dropbox-full-2016_06_07_14_05.md5", DROPBOX_BACKUP_DIR_BACKUP . "/localhost_wp_dropbox-full-2016_06_07_14_05.md5");
771
+ //var_dump($res);
772
  $backups = $dropbox->listing($folder_project);
773
  $n = count($backups['items']);
774
  $data['data'] = array();
784
  $k = $data['data'][$i]['count'];
785
  $data['data'][$i]['files'] = '[';
786
  for($j = 0; $j < $k; $j++) {
787
+ if ( strpos($backup['items'][$j]['name'] , '.md5') !== false || strpos($backup['items'][$j]['name'] , '.zip') !== true ) {
788
  if ( strpos($backup['items'][$j]['name'] , '.md5') !== false ) {
789
  $not_all_upload = true;
790
  }
796
  }
797
  }
798
  }
799
+ if (isset($_GET['pay']) && $_GET['pay'] == 'success') {
800
  if (!file_exists(WPAdm_Core::getTmpDir() . "/pay_success")) {
801
  file_put_contents(WPAdm_Core::getTmpDir() . "/pay_success", 1);
802
  parent::setMessage( 'Checkout was successfully' );
803
  }
804
  }
805
+ if (isset($_GET['pay']) && $_GET['pay'] == 'cancel') {
806
  parent::setError( __('Checkout was canceled','dropbox-backup') );
807
  }
808
  $data_local = parent::read_backups();
858
  if ( !file_exists( $backu_dir . '/local-key') ) {
859
  WPAdm_Core::mkdir($backu_dir);
860
  $key = md5(time() . 'wpadm-key');
861
+ file_put_contents($backu_dir . '/local-key', wpadm_pack(array('key' => $key, 'time-update' => time() + 3600) ));
862
  } else {
863
+ $key_values = wpadm_unpack( file_get_contents($backu_dir . '/local-key') );
864
  if (isset($key_values['time-update']) && $key_values['time-update'] <= time() ) {
865
  $key = md5( time() . 'wpadm-key' );
866
+ file_put_contents($backu_dir . '/local-key', wpadm_pack( array( 'key' => $key, 'time-update' => time() + 3600 ) ) );
867
  } else {
868
  $key = $key_values['key'];
869
  }
877
  $msg = parent::getMessage(true);
878
  $default = self::$circle / 6; // 18 request for log files, one request every 10 seconds
879
  $base_path = DRBBACKUP_BASE_DIR ;
 
 
 
 
 
 
 
 
 
880
  ob_start();
881
  require_once $base_path . DIRECTORY_SEPARATOR . "template" . DIRECTORY_SEPARATOR . "wpadm_show_backup.php";
882
  echo ob_get_clean();
885
  public static function draw_menu()
886
  {
887
  $show = true;
888
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
889
+ if ($dropbox_options) {
890
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
891
+ }
892
  if ( ( isset($dropbox_options['is_admin']) && $dropbox_options['is_admin'] == 1 ) || !isset($dropbox_options['is_admin']) ) {
893
  if (!is_admin() || !is_super_admin()) {
894
  $show = false;
895
  }
 
 
 
 
896
  }
897
  if ($show) {
898
  $menu_position = '1.9998887771';
899
+ if(self::checkInstallWpadmPlugins()) {
900
  $page = add_menu_page(
901
  'WPAdm',
902
  'WPAdm',
913
  'read',
914
  'wpadm_wp_full_backup_dropbox',
915
  array('wpadm_wp_full_backup_dropbox', 'wpadm_show_backup')
916
+ );
917
+ } else {
918
  $page = add_menu_page(
919
  'Dropbox Full Backup',
920
  'Dropbox Full Backup',
932
  'read',
933
  'wpadm_plugins',
934
  'wpadm_plugins'
935
+ );
936
  }
937
 
938
  }
939
  }
940
  public static function notice()
941
+ {
 
942
  if (!isset($_GET['page']) || ( isset($_GET['page']) && $_GET['page'] != 'wpadm_wp_full_backup_dropbox' ) ) {
943
  $notice_file = DRBBACKUP_BASE_DIR . DIRECTORY_SEPARATOR . "template" . DIRECTORY_SEPARATOR . "notice.php";
944
  if (!file_exists(WPAdm_Core::getTmpDir() . "/notice") && file_exists($notice_file)) {
951
  public static function hide_notice()
952
  {
953
  if (isset($_GET['type'])) {
954
+ switch($_GET['type']) {
 
955
  case 'preview' :
956
  file_put_contents(WPAdm_Core::getTmpDir() . "/notice", 1);
957
  break;
967
  header('location:' . $_SERVER['HTTP_REFERER']);
968
  exit;
969
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
970
  }
971
  }
972
 
methods/class-wpadm-method-backup-delete.php CHANGED
@@ -1,8 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
-
6
  /**
7
  * Delete backup
8
  * Class WPAdm_Method_Backup_Delete
@@ -12,8 +8,9 @@ if (!class_exists('WPAdm_Method_Backup_Delete')) {
12
  public function getResult()
13
  {
14
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
15
- $dropbox_options = wpadm_wp_full_backup_dropbox::getSettings();
16
  if ($dropbox_options) {
 
17
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
18
  $backup_dir = $dropbox_options['backup_folder'];
19
  }
1
  <?php
 
 
 
 
2
  /**
3
  * Delete backup
4
  * Class WPAdm_Method_Backup_Delete
8
  public function getResult()
9
  {
10
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
11
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
12
  if ($dropbox_options) {
13
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
14
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
15
  $backup_dir = $dropbox_options['backup_folder'];
16
  }
methods/class-wpadm-method-backup-list.php CHANGED
@@ -1,7 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  /**
6
  * Return a list of backups
7
  * Class WPAdm_Method_Exec
@@ -11,8 +8,9 @@ if (!class_exists('WPAdm_Method_Backup_List')) {
11
  public function getResult()
12
  {
13
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
14
- $dropbox_options = wpadm_wp_full_backup_dropbox::getSettings();
15
  if ($dropbox_options) {
 
16
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
17
  $backup_dir = $dropbox_options['backup_folder'];
18
  }
1
  <?php
 
 
 
2
  /**
3
  * Return a list of backups
4
  * Class WPAdm_Method_Exec
8
  public function getResult()
9
  {
10
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
11
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
12
  if ($dropbox_options) {
13
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
14
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
15
  $backup_dir = $dropbox_options['backup_folder'];
16
  }
methods/class-wpadm-method-backup.php CHANGED
@@ -1,8 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
-
6
  /**
7
  * Бэкап сайта
8
  * Class WPadm_Method_Backup
1
  <?php
 
 
 
 
2
  /**
3
  * Бэкап сайта
4
  * Class WPadm_Method_Backup
methods/class-wpadm-method-full-backup-dropbox.php CHANGED
@@ -1,7 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  /**
6
  * Creates a full backup of the site
7
  * Class WPadm_Method_Backup_Dropbox
@@ -51,7 +48,6 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
51
  'stime' => time(),
52
  )
53
  );
54
- set_time_limit(0);
55
 
56
  if (!class_exists('WPAdm_Process')) {
57
  require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-process.php';
@@ -228,13 +224,7 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
228
  $archive = new WPAdm_Archive($af, $to_file . '.md5');
229
  $archive->setRemovePath( ABSPATH );
230
  }
231
-
232
- if ( defined('PCLZIP_SEPARATOR') ) {
233
- $files_str = implode( PCLZIP_SEPARATOR , $files);
234
- } else {
235
- $files_str = implode( ',' , $files); // default SEPARATOR in pclzip
236
- }
237
-
238
  $res = $archive->add($files_str);
239
  if ($res) {
240
 
@@ -381,15 +371,6 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
381
  $files = array_merge( $files, array( ABSPATH . 'robots.txt' ) );
382
  }
383
 
384
- // check files in root directory
385
- $n = count($files);
386
- for($i = 0; $i < $n; $i++) {
387
- if (!file_exists($files[$i])) {
388
- unset($files[$i]);
389
- }
390
- }
391
- $files = array_values($files);
392
-
393
  if (!empty($this->params['minus-path'])) {
394
  $minus_path = explode(",", $this->params['minus-path']);
395
  foreach($files as $k => $v) {
@@ -468,9 +449,6 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
468
  WPAdm_Core::log('Skip dir(cache) ' . $directory);
469
  return array();
470
  }
471
-
472
-
473
-
474
  if(strpos($directory, DROPBOX_BACKUP_DIR_NAME) !== false) {
475
  return array();
476
  }
1
  <?php
 
 
 
2
  /**
3
  * Creates a full backup of the site
4
  * Class WPadm_Method_Backup_Dropbox
48
  'stime' => time(),
49
  )
50
  );
 
51
 
52
  if (!class_exists('WPAdm_Process')) {
53
  require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-process.php';
224
  $archive = new WPAdm_Archive($af, $to_file . '.md5');
225
  $archive->setRemovePath( ABSPATH );
226
  }
227
+ $files_str = implode(',', $files);
 
 
 
 
 
 
228
  $res = $archive->add($files_str);
229
  if ($res) {
230
 
371
  $files = array_merge( $files, array( ABSPATH . 'robots.txt' ) );
372
  }
373
 
 
 
 
 
 
 
 
 
 
374
  if (!empty($this->params['minus-path'])) {
375
  $minus_path = explode(",", $this->params['minus-path']);
376
  foreach($files as $k => $v) {
449
  WPAdm_Core::log('Skip dir(cache) ' . $directory);
450
  return array();
451
  }
 
 
 
452
  if(strpos($directory, DROPBOX_BACKUP_DIR_NAME) !== false) {
453
  return array();
454
  }
methods/class-wpadm-method-local-backup.php CHANGED
@@ -1,14 +1,10 @@
1
  <?php
2
 
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  if (!class_exists('WPAdm_Method_Local_Backup')) {
6
  class WPAdm_Method_Local_Backup extends WPAdm_Method_Class {
7
 
8
  private $start = true;
9
 
10
- private $tar_gz = false;
11
-
12
  public function __construct($params)
13
  {
14
 
@@ -48,11 +44,12 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
48
  // folder for backup
49
 
50
 
51
- $dropbox_options = wpadm_wp_full_backup_dropbox::getSettings();
52
 
53
  $this->base_dir = DROPBOX_BACKUP_DIR_BACKUP;
54
  $this->dir = DROPBOX_BACKUP_DIR_BACKUP . '/' . $name;
55
  if ($dropbox_options) {
 
56
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder']) ) {
57
  $this->dir = $dropbox_options['backup_folder'] . '/' . $name;
58
  $this->base_dir = $dropbox_options['backup_folder'];
@@ -117,7 +114,7 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
117
 
118
  # create db dump
119
  if (in_array('db', $this->params['types']) ) {
120
-
121
  $mysql_dump_file = DROPBOX_BACKUP_DIR_BACKUP . '/mysqldump.sql';
122
  if ( !WPAdm_Running::getCommandResult('db') ) {
123
  WPAdm_Running::setCommandResult('db');
@@ -159,7 +156,7 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
159
  $opt_db = WPAdm_Running::getCommandResultData('db');
160
  if (!isset($opt_db['optimize'])) {
161
  if ( WPAdm_Running::is_stop() ) {
162
- //WPAdm_Core::log(__('Optimize Database Tables','dropbox-backup'));
163
  if (!class_exists('WPAdm_Mysqldump')) {
164
  require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
165
  }
@@ -223,7 +220,6 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
223
  $command_files_list = WPAdm_Running::getCommandResultData('files');
224
  if (in_array('files', $this->params['types']) && empty($command_files_list) ) {
225
  $files = $this->createListFilesForArchive();
226
- $files = explode('<!>', utf8_encode( implode( '<!>', $files ) ) );
227
  WPAdm_Running::setCommandResultData('files', $files);
228
  } else {
229
  $files = $command_files_list;
@@ -247,96 +243,62 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
247
  $files2[0] = array();
248
  $i = 0;
249
  $size = 0;
250
- $chunk_size = 170000; //~170kbyte
251
- $targz = WPAdm_Running::getCommandResultData('test_targz_archive');
252
- $files_count = 0;
253
- if (!empty($targz)) {
254
- $chunk_size = 1572864; // ~ 1.5 Mbyte
255
- }
256
- $size_part = array();
257
  foreach($files as $f) {
258
- if ($size > $chunk_size) {
259
- $size_part[$i] = $size;
260
  $i ++;
261
  $size = 0;
262
  $files2[$i] = array();
263
  }
264
  $f_size =(int)@filesize($f);
265
- $permission_file = wpadm_class::perm($f);
266
- if ( ! version_compare($permission_file, '0400', '>=') ) {
267
- WPAdm_Core::log('Skip file ' . $f . ' Size ' . WPADM_getSize($f_size) . " (" . $permission_file . ")" );
268
- continue;
269
- }
270
  if ($f_size == 0 || $f_size > 1000000) {
271
- WPAdm_Core::log('File ' . $f . ' Size ' . WPADM_getSize($f_size) . " (" . $permission_file . ")" );
272
  }
273
  $size += $f_size;
274
- $files2[$i][] = utf8_decode( $f );
275
- $files_count ++;
276
  }
277
  WPAdm_Running::setCommandResultData('files2', $files2);
278
- WPAdm_Running::setCommandResultData('files2_count', $files_count );
279
  }
280
  } else {
281
  return true;
282
  }
283
- $files_count = WPAdm_Running::getCommandResultData('files2_count', $files_count );
284
- if (!empty($files_count) && $files_count != count($files) ) {
285
- WPAdm_Process::init('archiving', $files_count );
286
- }
287
 
288
- WPAdm_Core::log(__('List of backup files was successfully created','dropbox-backup') );
 
 
289
  if ( !WPAdm_Running::getCommandResult('archive') ) {
290
  if ( WPAdm_Running::is_stop() ) {
291
- WPAdm_Core::log( __('Backup of files was started','dropbox-backup') );
292
  WPAdm_Running::setCommandResult('archive');
293
  $files_archive = WPAdm_Running::getCommandResultData('archive');
294
  require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-archive.php';
 
295
  $to_file = $this->dir . '/' . $this->name;
296
- $processing_archive = 0;
297
  foreach($files2 as $key => $files) {
298
- if (!WPAdm_Running::toEndWork( time()) ) {
299
- // 2 steps of archive less 3MB
300
- if ($size_part[$key] > 3145728 || $processing_archive >= 2) { // ~ 3 MB
301
- return true;
302
- }
303
- $processing_archive ++;
304
- }
305
  $md5 = md5( print_r( $files, 1 ) );
306
  if ( !isset($files_archive[$md5]) ) {
307
  if ( WPAdm_Running::is_stop() ) {
308
- $af1 = $this->getArchiveName($to_file);
309
- $archive = new WPAdm_Archive($af1, $to_file . '.md5');
310
  $archive->setRemovePath(ABSPATH);
311
- if ( !file_exists( $af1 ) ) {
312
- WPAdm_Core::log( __('Create part ','dropbox-backup') . basename( $af1 ) );
313
  }
314
  }
315
- $targz = WPAdm_Running::getCommandResultData('test_targz_archive');
316
-
317
- if ( ( !empty($targz) && $targz === true ) || ( file_exists($af1) && filesize($af1) > 900000 ) ) {
318
  if ( WPAdm_Running::is_stop() ) {
319
- $af2 = $this->getNextArchiveName($to_file);
320
- if ($af1 != $af2) {
321
- unset($archive);
322
- if ( !file_exists( $af2 ) ) {
323
- WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af2 ) );
324
- }
325
- $archive = new WPAdm_Archive($af2, $to_file . '.md5');
326
- $archive->setRemovePath( ABSPATH );
327
  }
 
 
328
  } else {
329
  return true;
330
  }
331
  }
332
-
333
  if ( WPAdm_Running::is_stop() ) {
334
  $md5 = md5( print_r( $files, 1 ) );
335
- if ( defined('PCLZIP_SEPARATOR') ) {
336
- $files_str = implode( PCLZIP_SEPARATOR , $files);
337
- } else {
338
- $files_str = implode( ',' , $files);
339
- }
340
  $files_archive = WPAdm_Running::getCommandResultData('archive');
341
  if ( WPAdm_Running::is_stop() ) {
342
  if ( !isset($files_archive[$md5]) ) {
@@ -348,13 +310,9 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
348
  WPAdm_Running::setCommandResultData('archive', $files_archive);
349
  WPAdm_Process::setInc( 'archiving', count($files) );
350
  } else {
351
- if ($archive->anew) {
352
- return true;
353
- } else {
354
- $this->result->setError( $archive->error );
355
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
356
- return $this->result;
357
- }
358
  }
359
  } else {
360
  return true;
@@ -364,10 +322,19 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
364
  return true;
365
  }
366
  }
 
 
 
 
 
 
 
 
 
367
  }
368
  }
369
-
370
- WPAdm_Core::log( __('Backup of files was finished','dropbox-backup') );
371
  WPAdm_Running::setCommandResult('archive', true);
372
 
373
  }
@@ -387,8 +354,9 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
387
  $this->result->setValue('time', $this->time);
388
  $this->result->setValue('type', 'local');
389
  $this->result->setValue('counts', count($urls) );
390
- $size = WPADM_getSize( $totalSize ); /// MByte
391
- $log = str_replace("%s", $size , __('Backup size %s','dropbox-backup') ) ;
 
392
  WPAdm_Core::log($log);
393
 
394
  $remove_from_server = 0;
@@ -450,24 +418,13 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
450
  public function createListFilesForArchive()
451
  {
452
  $inludes = get_option(PREFIX_BACKUP_ . "plus-path");
453
- if($inludes !== false) {
454
- $f = explode(',', base64_decode( $inludes ) );
455
  $files = array();
456
  $n = count($f);
457
- $tmp_folder = '';
458
  for($i = 0; $i < $n; $i++) {
459
- if (!empty($tmp_folder) && strpos($f[$i], $tmp_folder) === false) {
460
- $fi = $this->directoryToArray(ABSPATH . $tmp_folder, true );
461
- $files = array_merge($files, $fi);
462
- $tmp_folder = '';
463
- } elseif(!empty($tmp_folder) && strpos($f[$i], $tmp_folder) !== false) {
464
- $tmp_folder = '';
465
- }
466
-
467
  if( is_dir( ABSPATH . $f[$i] ) ) {
468
- //$fi = $this->directoryToArray(ABSPATH . $f[$i], true );
469
- $tmp_folder = $f[$i];
470
- //$files = array_merge($files, $fi);
471
  } elseif (file_exists(ABSPATH . $f[$i])) {
472
  $files[$i] = ABSPATH . $f[$i];
473
  }
@@ -494,7 +451,7 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
494
  ABSPATH . 'wp-login.php',
495
  ABSPATH . 'wp-mail.php',
496
  ABSPATH . 'wp-settings.php',
497
- //ABSPATH . 'wp-signup.php',
498
  ABSPATH . 'wp-trackback.php',
499
  ABSPATH . 'xmlrpc.php',
500
  )
@@ -514,18 +471,6 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
514
  if ( file_exists(ABSPATH . 'robots.txt') ) {
515
  $files = array_merge( $files, array( ABSPATH . 'robots.txt' ) );
516
  }
517
- if ( file_exists(ABSPATH . 'wp-signup.php') ) {
518
- $files = array_merge( $files, array( ABSPATH . 'wp-signup.php' ) );
519
- }
520
-
521
- // check files in root directory
522
- $n = count($files);
523
- for($i = 0; $i < $n; $i++) {
524
- if (!file_exists($files[$i])) {
525
- unset($files[$i]);
526
- }
527
- }
528
- $files = array_values($files);
529
 
530
  if (!empty($this->params['minus-path'])) {
531
  $minus_path = explode(",", $this->params['minus-path']);
@@ -573,30 +518,9 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
573
  $files = array_merge($files, $this->directoryToArray($folder, true));
574
  }
575
  }
576
-
577
- $files = array_values( array_unique($files) );
578
-
579
  return $files;
580
  }
581
 
582
- public function tryToUtf8( $string, $strip = false )
583
- {
584
- $string = (string) $string;
585
-
586
- if ( 0 === strlen( $string ) ) {
587
- return '';
588
- }
589
- // preg match invalid UTF8
590
- if ( 1 === @preg_match( '/^./us', $string ) ) {
591
- return $string;
592
- }
593
-
594
- if ( $strip && function_exists( 'iconv' ) ) {
595
- return iconv( 'utf-8', 'utf-8', $string );
596
- }
597
-
598
- return $string;
599
- }
600
 
601
  private function directoryToArray($directory, $recursive) {
602
  $array_items = array();
@@ -620,7 +544,6 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
620
  } else {
621
  $d1 = strtolower($tmp[0]);
622
  }
623
- $base_dir = $tmp[0];
624
  unset($tmp[0]);
625
  if (function_exists('mb_strtolower')) {
626
  $d2 = mb_strtolower(implode('/', $tmp));
@@ -631,26 +554,14 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
631
  if (stripos($d2, 'cache') !== false ) {
632
  WPAdm_Core::log( __('Skip of Cache-Folder ','dropbox-backup') . $directory);
633
  return array();
634
- }
635
-
636
  if (strpos($d2, 'cache') !== false && isset($tmp[0]) && !in_array($tmp[0], array('plugins', 'themes')) ) {
637
  WPAdm_Core::log(__('Skip of Cache-Folder ','dropbox-backup') . $directory);
638
  return array();
639
  }
640
-
641
- if (!empty($d2) && isset( $base_dir ) && BackupsFoldersExclude( basename( $d2 ), $base_dir ) ) {
642
- WPAdm_Core::log( sprintf( __('Skip backup folder of another backup plugin "%s" ','dropbox-backup'), basename( $d2 ) ) );
643
- return array();
644
- }
645
-
646
  if(strpos($directory, 'wpadm_backups') !== false || strpos($directory, 'Dropbox_Backup') !== false) {
647
  return array();
648
  }
649
-
650
- if (stripos($d2, 'backup') !== false ) {
651
- WPAdm_Core::log( __('Skip of Backup-Folder ','dropbox-backup') . $directory);
652
- return array();
653
- }
654
 
655
  if ($handle = opendir($directory)) {
656
  while (false !== ($file = readdir($handle))) {
@@ -678,7 +589,7 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
678
  $f = str_replace(ABSPATH, '', $ff);
679
  // skip "minus" dirs
680
  if (!in_array($f, $minus_path)) {
681
- $array_items[] = $this->tryToUtf8( $ff );
682
  } else {
683
  WPAdm_Core::log( __('Skip of Folder ','dropbox-backup') . $ff);
684
  }
@@ -724,43 +635,22 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
724
  private function getArchiveName($name)
725
  {
726
  //WPAdm_Core::log("{$name}-*.zip");
727
- $targz = WPAdm_Running::getCommandResultData('test_targz_archive');
728
- if (!empty($targz) && $targz === true ) {
729
- $archives = glob("{$name}-*.tar.gz");
730
- } else {
731
- $archives = glob("{$name}-*.zip");
732
- }
733
-
734
  if (empty($archives)) {
735
- if (!empty($targz) && $targz === true ) {
736
- return "{$name}-1.tar.gz";
737
- } else {
738
- return "{$name}-1.zip";
739
- }
740
  }
741
  $n = count($archives);
742
- if (!empty($targz) && $targz === true ) {
743
- $f = "{$name}-{$n}.tar.gz";
744
- } else {
745
- $f = "{$name}-{$n}.zip";
746
- }
747
  return $f;
748
  }
749
 
750
  private function getNextArchiveName($name)
751
  {
752
- $targz = WPAdm_Running::getCommandResultData('test_targz_archive');
753
- if (!empty($targz) && $targz === true ) {
754
- $archives = glob("{$name}-*.tar.gz");
755
- } else {
756
- $archives = glob("{$name}-*.zip");
757
- }
758
  $n = 1 + count($archives);
759
- if (!empty($targz) && $targz === true ) {
760
- $a = "{$name}-{$n}.tar.gz";
761
- } else {
762
- $a = "{$name}-{$n}.zip";
763
- }
764
  //WPAdm_Core::log($a);
765
  return $a;
766
  }
1
  <?php
2
 
 
 
3
  if (!class_exists('WPAdm_Method_Local_Backup')) {
4
  class WPAdm_Method_Local_Backup extends WPAdm_Method_Class {
5
 
6
  private $start = true;
7
 
 
 
8
  public function __construct($params)
9
  {
10
 
44
  // folder for backup
45
 
46
 
47
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
48
 
49
  $this->base_dir = DROPBOX_BACKUP_DIR_BACKUP;
50
  $this->dir = DROPBOX_BACKUP_DIR_BACKUP . '/' . $name;
51
  if ($dropbox_options) {
52
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
53
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder']) ) {
54
  $this->dir = $dropbox_options['backup_folder'] . '/' . $name;
55
  $this->base_dir = $dropbox_options['backup_folder'];
114
 
115
  # create db dump
116
  if (in_array('db', $this->params['types']) ) {
117
+
118
  $mysql_dump_file = DROPBOX_BACKUP_DIR_BACKUP . '/mysqldump.sql';
119
  if ( !WPAdm_Running::getCommandResult('db') ) {
120
  WPAdm_Running::setCommandResult('db');
156
  $opt_db = WPAdm_Running::getCommandResultData('db');
157
  if (!isset($opt_db['optimize'])) {
158
  if ( WPAdm_Running::is_stop() ) {
159
+ WPAdm_Core::log(__('Optimize Database Tables','dropbox-backup'));
160
  if (!class_exists('WPAdm_Mysqldump')) {
161
  require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
162
  }
220
  $command_files_list = WPAdm_Running::getCommandResultData('files');
221
  if (in_array('files', $this->params['types']) && empty($command_files_list) ) {
222
  $files = $this->createListFilesForArchive();
 
223
  WPAdm_Running::setCommandResultData('files', $files);
224
  } else {
225
  $files = $command_files_list;
243
  $files2[0] = array();
244
  $i = 0;
245
  $size = 0;
 
 
 
 
 
 
 
246
  foreach($files as $f) {
247
+ if ($size > 170000) {//~170kbyte
 
248
  $i ++;
249
  $size = 0;
250
  $files2[$i] = array();
251
  }
252
  $f_size =(int)@filesize($f);
 
 
 
 
 
253
  if ($f_size == 0 || $f_size > 1000000) {
254
+ WPAdm_Core::log('File ' . $f . ' Size ' . $f_size);
255
  }
256
  $size += $f_size;
257
+ $files2[$i][] = $f;
 
258
  }
259
  WPAdm_Running::setCommandResultData('files2', $files2);
 
260
  }
261
  } else {
262
  return true;
263
  }
 
 
 
 
264
 
265
+
266
+ WPAdm_Core::log(__('List of Backup-Files was successfully created','dropbox-backup') );
267
+ //$this->queue->clear();
268
  if ( !WPAdm_Running::getCommandResult('archive') ) {
269
  if ( WPAdm_Running::is_stop() ) {
 
270
  WPAdm_Running::setCommandResult('archive');
271
  $files_archive = WPAdm_Running::getCommandResultData('archive');
272
  require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-archive.php';
273
+ ini_set("memory_limit", "256M"); // files for archive
274
  $to_file = $this->dir . '/' . $this->name;
 
275
  foreach($files2 as $key => $files) {
 
 
 
 
 
 
 
276
  $md5 = md5( print_r( $files, 1 ) );
277
  if ( !isset($files_archive[$md5]) ) {
278
  if ( WPAdm_Running::is_stop() ) {
279
+ $af = $this->getArchiveName($to_file);
280
+ $archive = new WPAdm_Archive($af, $to_file . '.md5');
281
  $archive->setRemovePath(ABSPATH);
282
+ if ( !file_exists( $af ) ) {
283
+ WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af ) );
284
  }
285
  }
286
+ if (file_exists($af) && filesize($af) > 900000) {
 
 
287
  if ( WPAdm_Running::is_stop() ) {
288
+ $af = $this->getNextArchiveName($to_file);
289
+ unset($archive);
290
+ if ( !file_exists( $af ) ) {
291
+ WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af ) );
 
 
 
 
292
  }
293
+ $archive = new WPAdm_Archive($af, $to_file . '.md5');
294
+ $archive->setRemovePath( ABSPATH );
295
  } else {
296
  return true;
297
  }
298
  }
 
299
  if ( WPAdm_Running::is_stop() ) {
300
  $md5 = md5( print_r( $files, 1 ) );
301
+ $files_str = implode(',', $files);
 
 
 
 
302
  $files_archive = WPAdm_Running::getCommandResultData('archive');
303
  if ( WPAdm_Running::is_stop() ) {
304
  if ( !isset($files_archive[$md5]) ) {
310
  WPAdm_Running::setCommandResultData('archive', $files_archive);
311
  WPAdm_Process::setInc( 'archiving', count($files) );
312
  } else {
313
+ $this->result->setError( $archive->error );
314
+ $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
315
+ return $this->result;
 
 
 
 
316
  }
317
  } else {
318
  return true;
322
  return true;
323
  }
324
  }
325
+ /*$commandContext = new WPAdm_Command_Context();
326
+ $commandContext ->addParam('command', 'archive')
327
+ ->addParam('files', $files)
328
+ ->addParam('to_file', $this->dir . '/' . $this->name)
329
+ ->addParam('max_file_size', 900000)
330
+ ->addParam('remove_path', ABSPATH);
331
+
332
+ $this->queue->add($commandContext);
333
+ unset($commandContext); */
334
  }
335
  }
336
+ WPAdm_Core::log( __('Backup of Files was started','dropbox-backup') );
337
+ WPAdm_Core::log( __('End of File Backup','dropbox-backup') );
338
  WPAdm_Running::setCommandResult('archive', true);
339
 
340
  }
354
  $this->result->setValue('time', $this->time);
355
  $this->result->setValue('type', 'local');
356
  $this->result->setValue('counts', count($urls) );
357
+ $size = $totalSize / 1024 / 1024; /// MByte
358
+ $size = round($size, 2);
359
+ $log = str_replace("%s", $size , __('Backup Size %s Mb','dropbox-backup') ) ;
360
  WPAdm_Core::log($log);
361
 
362
  $remove_from_server = 0;
418
  public function createListFilesForArchive()
419
  {
420
  $inludes = get_option(PREFIX_BACKUP_ . "plus-path");
421
+ if($inludes !== false) {
422
+ $f = explode(',', $inludes);
423
  $files = array();
424
  $n = count($f);
 
425
  for($i = 0; $i < $n; $i++) {
 
 
 
 
 
 
 
 
426
  if( is_dir( ABSPATH . $f[$i] ) ) {
427
+ $files = array_merge($files, $this->directoryToArray(ABSPATH . $f[$i], true));
 
 
428
  } elseif (file_exists(ABSPATH . $f[$i])) {
429
  $files[$i] = ABSPATH . $f[$i];
430
  }
451
  ABSPATH . 'wp-login.php',
452
  ABSPATH . 'wp-mail.php',
453
  ABSPATH . 'wp-settings.php',
454
+ ABSPATH . 'wp-signup.php',
455
  ABSPATH . 'wp-trackback.php',
456
  ABSPATH . 'xmlrpc.php',
457
  )
471
  if ( file_exists(ABSPATH . 'robots.txt') ) {
472
  $files = array_merge( $files, array( ABSPATH . 'robots.txt' ) );
473
  }
 
 
 
 
 
 
 
 
 
 
 
 
474
 
475
  if (!empty($this->params['minus-path'])) {
476
  $minus_path = explode(",", $this->params['minus-path']);
518
  $files = array_merge($files, $this->directoryToArray($folder, true));
519
  }
520
  }
 
 
 
521
  return $files;
522
  }
523
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
524
 
525
  private function directoryToArray($directory, $recursive) {
526
  $array_items = array();
544
  } else {
545
  $d1 = strtolower($tmp[0]);
546
  }
 
547
  unset($tmp[0]);
548
  if (function_exists('mb_strtolower')) {
549
  $d2 = mb_strtolower(implode('/', $tmp));
554
  if (stripos($d2, 'cache') !== false ) {
555
  WPAdm_Core::log( __('Skip of Cache-Folder ','dropbox-backup') . $directory);
556
  return array();
557
+ }
 
558
  if (strpos($d2, 'cache') !== false && isset($tmp[0]) && !in_array($tmp[0], array('plugins', 'themes')) ) {
559
  WPAdm_Core::log(__('Skip of Cache-Folder ','dropbox-backup') . $directory);
560
  return array();
561
  }
 
 
 
 
 
 
562
  if(strpos($directory, 'wpadm_backups') !== false || strpos($directory, 'Dropbox_Backup') !== false) {
563
  return array();
564
  }
 
 
 
 
 
565
 
566
  if ($handle = opendir($directory)) {
567
  while (false !== ($file = readdir($handle))) {
589
  $f = str_replace(ABSPATH, '', $ff);
590
  // skip "minus" dirs
591
  if (!in_array($f, $minus_path)) {
592
+ $array_items[] = $ff;
593
  } else {
594
  WPAdm_Core::log( __('Skip of Folder ','dropbox-backup') . $ff);
595
  }
635
  private function getArchiveName($name)
636
  {
637
  //WPAdm_Core::log("{$name}-*.zip");
638
+ $archives = glob("{$name}-*.zip");
639
+ //WPAdm_Core::log( print_r($archives, 1) );
 
 
 
 
 
640
  if (empty($archives)) {
641
+ return "{$name}-1.zip";
 
 
 
 
642
  }
643
  $n = count($archives);
644
+ $f = "{$name}-{$n}.zip";
 
 
 
 
645
  return $f;
646
  }
647
 
648
  private function getNextArchiveName($name)
649
  {
650
+ //WPAdm_Core::log("{$name}-*.zip");
651
+ $archives = glob("{$name}-*.zip");
 
 
 
 
652
  $n = 1 + count($archives);
653
+ $a = "{$name}-{$n}.zip";
 
 
 
 
654
  //WPAdm_Core::log($a);
655
  return $a;
656
  }
methods/class-wpadm-method-local-restore.php CHANGED
@@ -1,8 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
-
6
  /**
7
  * Class WPAdm_Method_Exec
8
  */
1
  <?php
 
 
 
 
2
  /**
3
  * Class WPAdm_Method_Exec
4
  */
methods/class-wpadm-method-ping.php CHANGED
@@ -1,7 +1,5 @@
1
  <?php
2
 
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  if (!class_exists('WPAdm_Method_Ping')) {
6
  class WPAdm_Method_Ping extends WPAdm_Method_Class {
7
  public function getResult()
@@ -11,9 +9,7 @@ if (!class_exists('WPAdm_Method_Ping')) {
11
  if ( ! function_exists( 'get_plugins' ) ) {
12
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
13
  }
14
- $plugin_dir = WPAdm_Core::getPluginDir();
15
- $plugin_dir_array = explode("/", $plugin_dir );
16
- $plugin_name = array_pop( $plugin_dir_array );
17
  $plugin_name2 = str_replace("-", "_", $plugin_name);
18
  $plugin = get_plugins("/$plugin_name");
19
  $pl_version = "";
1
  <?php
2
 
 
 
3
  if (!class_exists('WPAdm_Method_Ping')) {
4
  class WPAdm_Method_Ping extends WPAdm_Method_Class {
5
  public function getResult()
9
  if ( ! function_exists( 'get_plugins' ) ) {
10
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
11
  }
12
+ $plugin_name = array_pop( explode("/", WPAdm_Core::getPluginDir()) );
 
 
13
  $plugin_name2 = str_replace("-", "_", $plugin_name);
14
  $plugin = get_plugins("/$plugin_name");
15
  $pl_version = "";
methods/class-wpadm-method-queue-controller.php CHANGED
@@ -1,8 +1,6 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  /**
 
6
  * Class WPAdm_Method_Exec
7
  */
8
  if (!class_exists('WPAdm_Method_Queue_Controller')) {
@@ -139,7 +137,8 @@ if (!class_exists('WPAdm_Method_Queue_Controller')) {
139
  // $pl = (defined('WPADM_PLUGIN')) ? WPADM_PLUGIN . '_' : '';
140
  $dp = explode(DIRECTORY_SEPARATOR,dirname(dirname(__FILE__)));
141
  $pl = array_pop($dp) . '_';
142
- $data = $pl.'request=' . wpadm_pack( $data );
 
143
  fwrite($socket, "POST / HTTP/1.1\r\n");
144
  fwrite($socket, "Host: {$host}\r\n");
145
 
1
  <?php
 
 
 
2
  /**
3
+ * Выполнение очереди
4
  * Class WPAdm_Method_Exec
5
  */
6
  if (!class_exists('WPAdm_Method_Queue_Controller')) {
137
  // $pl = (defined('WPADM_PLUGIN')) ? WPADM_PLUGIN . '_' : '';
138
  $dp = explode(DIRECTORY_SEPARATOR,dirname(dirname(__FILE__)));
139
  $pl = array_pop($dp) . '_';
140
+ // $data = 'wpadm_'.$pl.'request='.base64_encode(serialize($data));
141
+ $data = $pl.'request='.base64_encode(serialize($data));
142
  fwrite($socket, "POST / HTTP/1.1\r\n");
143
  fwrite($socket, "Host: {$host}\r\n");
144
 
methods/class-wpadm-method-reconnect.php CHANGED
@@ -1,8 +1,5 @@
1
  <?php
2
 
3
-
4
- if ( ! defined( 'ABSPATH' ) ) exit;
5
-
6
  if (!class_exists('WPAdm_Method_Reconnect')) {
7
  class WPAdm_Method_Reconnect extends WPAdm_Method_Class {
8
  public function getResult()
1
  <?php
2
 
 
 
 
3
  if (!class_exists('WPAdm_Method_Reconnect')) {
4
  class WPAdm_Method_Reconnect extends WPAdm_Method_Class {
5
  public function getResult()
methods/class-wpadm-method-send-to-dropbox.php CHANGED
@@ -1,10 +1,6 @@
1
  <?php
2
-
3
-
4
- if ( ! defined( 'ABSPATH' ) ) exit;
5
-
6
-
7
  /**
 
8
  * Class WPadm_Method_Send_To_Dropbox
9
  */
10
  if (!class_exists('WPadm_Method_Send_To_Dropbox')) {
@@ -127,8 +123,9 @@ if (!class_exists('WPadm_Method_Send_To_Dropbox')) {
127
  $this->result->setValue('counts', $params_data_cron['counts'] );
128
  if( (isset($this->params['is_local_backup']) && $this->params['is_local_backup'] == 0 ) || ( !isset($this->params['is_local_backup']) ) ) {
129
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
130
- $dropbox_options = wpadm_wp_full_backup_dropbox::getSettings();
131
  if ($dropbox_options) {
 
132
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
133
  $backup_dir = $dropbox_options['backup_folder'];
134
  }
@@ -201,14 +198,11 @@ if (!class_exists('WPadm_Method_Send_To_Dropbox')) {
201
  if ( WPAdm_Running::is_stop() ) {
202
  $delete_file = $dropbox->deleteFile($folder_project . $dir . '/' . $file_name);
203
  if (isset($delete_file['error'])) {
204
- //$this->setError( __('Dropbox returned an error during file sending: ' ,'dropbox-backup') . '"' . $delete_file['text'] . '"(d)');
205
- //return false;
206
- WPAdm_Core::log( __('File in Dropbox Cloud: ' ,'dropbox-backup') . '"' . $delete_file['text'] . '"' );
207
-
208
- WPAdm_Core::log( __('Try send file again' ,'dropbox-backup') . '(' . $file_name . ')' );
209
  }
210
  $data_error_command = WPAdm_Running::getCommandResultData('errors_sending');
211
- if (isset($data_error_command[$fromFile])) {
212
  $data_error_command[$fromFile]['count'] += 1;
213
  } else {
214
  $data_error_command[$fromFile] = array();
@@ -242,7 +236,7 @@ if (!class_exists('WPadm_Method_Send_To_Dropbox')) {
242
  $res = $dropbox->uploadFile($fromFile, $toFile, true);
243
  }
244
  if (isset($res['error']) && isset($res['text']) && $res['error'] == 1) {
245
- $this->setError( __('Dropbox returned an error during file sending: ' ,'dropbox-backup') . '"' . $res['text'] . '"(u)');
246
  return false;
247
  }
248
  if ( WPAdm_Running::is_stop() ) {
@@ -277,8 +271,9 @@ if (!class_exists('WPadm_Method_Send_To_Dropbox')) {
277
  if( (isset($this->params['is_local_backup']) && $this->params['is_local_backup'] == 0 ) || ( !isset($this->params['is_local_backup']) ) ) {
278
  if (isset($this->params['access_details']['dir'])) {
279
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
280
- $dropbox_options = wpadm_wp_full_backup_dropbox::getSettings();
281
  if ($dropbox_options) {
 
282
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
283
  $backup_dir = $dropbox_options['backup_folder'];
284
  }
1
  <?php
 
 
 
 
 
2
  /**
3
+ * Бэкап сайта
4
  * Class WPadm_Method_Send_To_Dropbox
5
  */
6
  if (!class_exists('WPadm_Method_Send_To_Dropbox')) {
123
  $this->result->setValue('counts', $params_data_cron['counts'] );
124
  if( (isset($this->params['is_local_backup']) && $this->params['is_local_backup'] == 0 ) || ( !isset($this->params['is_local_backup']) ) ) {
125
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
126
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
127
  if ($dropbox_options) {
128
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
129
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
130
  $backup_dir = $dropbox_options['backup_folder'];
131
  }
198
  if ( WPAdm_Running::is_stop() ) {
199
  $delete_file = $dropbox->deleteFile($folder_project . $dir . '/' . $file_name);
200
  if (isset($delete_file['error'])) {
201
+ $this->setError( __('Dropbox returned an error during file sending: ' ,'dropbox-backup') . '"' . $delete_file['text'] . '"');
202
+ return false;
 
 
 
203
  }
204
  $data_error_command = WPAdm_Running::getCommandResultData('errors_sending');
205
+ if (isset($data_command[$fromFile])) {
206
  $data_error_command[$fromFile]['count'] += 1;
207
  } else {
208
  $data_error_command[$fromFile] = array();
236
  $res = $dropbox->uploadFile($fromFile, $toFile, true);
237
  }
238
  if (isset($res['error']) && isset($res['text']) && $res['error'] == 1) {
239
+ $this->setError( __('Dropbox returned an error during file sending: ' ,'dropbox-backup') . '"' . $res['text'] . '"');
240
  return false;
241
  }
242
  if ( WPAdm_Running::is_stop() ) {
271
  if( (isset($this->params['is_local_backup']) && $this->params['is_local_backup'] == 0 ) || ( !isset($this->params['is_local_backup']) ) ) {
272
  if (isset($this->params['access_details']['dir'])) {
273
  $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
274
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
275
  if ($dropbox_options) {
276
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
277
  if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
278
  $backup_dir = $dropbox_options['backup_folder'];
279
  }
methods/class-wpadm-method-update.php CHANGED
@@ -1,7 +1,5 @@
1
  <?php
2
 
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  if (!class_exists('WPAdm_Method_Update')) {
6
  class WPAdm_Method_Update extends WPAdm_Method_Class {
7
 
@@ -60,6 +58,7 @@ if (!class_exists('WPAdm_Method_Update')) {
60
  if (!empty($d_)) {
61
  //$headers = array( 'Authorization' => 'Basic ' . base64_encode( "admin24:admin24" ) );
62
  $f = wp_remote_get($file['file'], array('headers' => $headers));
 
63
  if (isset($f['body']) && !empty($f['body'])) {
64
  file_put_contents($d_ . "/" . $b, $f['body']);
65
  if (file_exists($d_ . "/" . $b)) {
1
  <?php
2
 
 
 
3
  if (!class_exists('WPAdm_Method_Update')) {
4
  class WPAdm_Method_Update extends WPAdm_Method_Class {
5
 
58
  if (!empty($d_)) {
59
  //$headers = array( 'Authorization' => 'Basic ' . base64_encode( "admin24:admin24" ) );
60
  $f = wp_remote_get($file['file'], array('headers' => $headers));
61
+ WPAdm_Core::log(serialize($f));
62
  if (isset($f['body']) && !empty($f['body'])) {
63
  file_put_contents($d_ . "/" . $b, $f['body']);
64
  if (file_exists($d_ . "/" . $b)) {
modules/HttpFsockopen.php CHANGED
@@ -165,6 +165,9 @@ class HttpFsockopen {
165
  $http .= $this -> post . "\r\n\r\n";
166
  }
167
 
 
 
 
168
  fwrite($socket, $http);
169
  while (!feof($socket)) {
170
  $contents .= fgetc($socket);
165
  $http .= $this -> post . "\r\n\r\n";
166
  }
167
 
168
+ // echo '<pre>' . $http . '</pre>';
169
+ // file_put_contents(dirname(__FILE__) . '/http.log', $http . "\n\r\n\r", FILE_APPEND);
170
+ // file_put_contents(dirname(__FILE__) . '/params.log', serialize($this) . "\n\r\n\r", FILE_APPEND);
171
  fwrite($socket, $http);
172
  while (!feof($socket)) {
173
  $contents .= fgetc($socket);
modules/OAuthSimple.php CHANGED
@@ -1,15 +1,15 @@
1
  <?php
2
  /**
3
- * OAuthSimple - A simpler version of OAuth
4
- *
5
- * https://github.com/jrconlin/oauthsimple
6
- *
7
- * @author jr conlin <src@jrconlin.com>
8
- * @copyright unitedHeroes.net 2011
9
- * @version 1.3
10
- * @license See OAuthSimple_license.txt
11
- *
12
- */
13
 
14
  class OAuthSimple {
15
  private $_secrets;
@@ -18,168 +18,168 @@ class OAuthSimple {
18
  private $_nonce_chars;
19
 
20
  /**
21
- * Constructor
22
- *
23
- * @access public
24
- * @param api_key (String) The API Key (sometimes referred to as the consumer key) This value is usually supplied by the site you wish to use.
25
- * @param shared_secret (String) The shared secret. This value is also usually provided by the site you wish to use.
26
- * @return OAuthSimple (Object)
27
- */
28
  function __construct ($APIKey = "", $sharedSecret=""){
29
-
30
  if (!empty($APIKey))
31
- {
32
- $this->_secrets['consumer_key'] = $APIKey;
33
- }
34
-
35
  if (!empty($sharedSecret))
36
- {
37
- $this->_secrets['shared_secret'] = $sharedSecret;
38
- }
39
-
40
  $this->_default_signature_method = "HMAC-SHA1";
41
  $this->_action = "GET";
42
  $this->_nonce_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
43
-
44
  return $this;
45
  }
46
-
47
  /**
48
- * Reset the parameters and URL
49
- *
50
- * @access public
51
- * @return OAuthSimple (Object)
52
- */
53
  public function reset() {
54
  $this->_parameters = Array();
55
  $this->path = NULL;
56
  $this->sbs = NULL;
57
-
58
  return $this;
59
  }
60
 
61
  /**
62
- * Set the parameters either from a hash or a string
63
- *
64
- * @access public
65
- * @param(string, object) List of parameters for the call, this can either be a URI string (e.g. "foo=bar&gorp=banana" or an object/hash)
66
- * @return OAuthSimple (Object)
67
- */
68
  public function setParameters ($parameters=Array()) {
69
-
70
  if (is_string($parameters))
71
- {
72
- $parameters = $this->_parseParameterString($parameters);
73
- }
74
  if (empty($this->_parameters))
75
- {
76
- $this->_parameters = $parameters;
77
- }
78
  else if (!empty($parameters))
79
- {
80
- $this->_parameters = array_merge($this->_parameters,$parameters);
81
- }
82
- if (empty($this->_parameters['oauth_nonce']))
83
- {
84
- $this->_getNonce();
85
- }
86
  if (empty($this->_parameters['oauth_timestamp']))
87
- {
88
- $this->_getTimeStamp();
89
- }
90
  if (empty($this->_parameters['oauth_consumer_key']))
91
- {
92
- $this->_getApiKey();
93
- }
94
  if (empty($this->_parameters['oauth_token']))
95
- {
96
- $this->_getAccessToken();
97
- }
98
  if (empty($this->_parameters['oauth_signature_method']))
99
- {
100
  $this->setSignatureMethod();
101
- }
102
  if (empty($this->_parameters['oauth_version']))
103
- {
104
  $this->_parameters['oauth_version']="1.0";
105
- }
106
-
107
  return $this;
108
  }
109
 
110
  /**
111
- * Convenience method for setParameters
112
- *
113
- * @access public
114
- * @see setParameters
115
- */
116
  public function setQueryString ($parameters)
117
  {
118
  return $this->setParameters($parameters);
119
  }
120
 
121
  /**
122
- * Set the target URL (does not include the parameters)
123
- *
124
- * @param path (String) the fully qualified URI (excluding query arguments) (e.g "http://example.org/foo")
125
- * @return OAuthSimple (Object)
126
- */
127
  public function setURL ($path)
128
- {
129
  if (empty($path))
130
- {
131
  throw new OAuthSimpleException('No path specified for OAuthSimple.setURL');
132
- }
133
  $this->_path=$path;
134
-
135
  return $this;
136
  }
137
 
138
  /**
139
- * Convenience method for setURL
140
- *
141
- * @param path (String)
142
- * @see setURL
143
- */
144
  public function setPath ($path)
145
  {
146
  return $this->_path=$path;
147
  }
148
 
149
  /**
150
- * Set the "action" for the url, (e.g. GET,POST, DELETE, etc.)
151
- *
152
- * @param action (String) HTTP Action word.
153
- * @return OAuthSimple (Object)
154
- */
155
  public function setAction ($action)
156
  {
157
  if (empty($action))
158
- {
159
- $action = 'GET';
160
- }
161
  $action = strtoupper($action);
162
  if (preg_match('/[^A-Z]/',$action))
163
- {
164
  throw new OAuthSimpleException('Invalid action specified for OAuthSimple.setAction');
165
- }
166
  $this->_action = $action;
167
-
168
  return $this;
169
  }
170
 
171
  /**
172
- * Set the signatures (as well as validate the ones you have)
173
- *
174
- * @param signatures (object) object/hash of the token/signature pairs {api_key:, shared_secret:, oauth_token: oauth_secret:}
175
- * @return OAuthSimple (Object)
176
- */
177
  public function signatures ($signatures)
178
  {
179
  if (!empty($signatures) && !is_array($signatures))
180
- {
181
  throw new OAuthSimpleException('Must pass dictionary array to OAuthSimple.signatures');
182
- }
183
  if (!empty($signatures))
184
  {
185
  if (empty($this->_secrets))
@@ -189,34 +189,34 @@ class OAuthSimple {
189
  $this->_secrets=array_merge($this->_secrets,$signatures);
190
  }
191
  if (isset($this->_secrets['api_key']))
192
- {
193
  $this->_secrets['consumer_key'] = $this->_secrets['api_key'];
194
- }
195
  if (isset($this->_secrets['access_token']))
196
- {
197
  $this->_secrets['oauth_token'] = $this->_secrets['access_token'];
198
- }
199
  if (isset($this->_secrets['access_secret']))
200
- {
201
  $this->_secrets['oauth_secret'] = $this->_secrets['access_secret'];
202
  }
203
  if (isset($this->_secrets['access_token_secret']))
204
- {
205
  $this->_secrets['oauth_secret'] = $this->_secrets['access_token_secret'];
206
- }
207
  if (empty($this->_secrets['consumer_key']))
208
- {
209
  throw new OAuthSimpleException('Missing required consumer_key in OAuthSimple.signatures');
210
  }
211
  if (empty($this->_secrets['shared_secret']))
212
- {
213
  throw new OAuthSimpleException('Missing requires shared_secret in OAuthSimple.signatures');
214
- }
215
  if (!empty($this->_secrets['oauth_token']) && empty($this->_secrets['oauth_secret']))
216
- {
217
  throw new OAuthSimpleException('Missing oauth_secret for supplied oauth_token in OAuthSimple.signatures');
218
- }
219
-
220
  return $this;
221
  }
222
 
@@ -226,99 +226,99 @@ class OAuthSimple {
226
  }
227
 
228
  /**
229
- * Set the signature method (currently only Plaintext or SHA-MAC1)
230
- *
231
- * @param method (String) Method of signing the transaction (only PLAINTEXT and SHA-MAC1 allowed for now)
232
- * @return OAuthSimple (Object)
233
  */
234
  public function setSignatureMethod ($method="")
235
- {
236
  if (empty($method))
237
- {
238
  $method = $this->_default_signature_method;
239
- }
240
  $method = strtoupper($method);
241
  switch($method)
242
  {
243
  case 'PLAINTEXT':
244
  case 'HMAC-SHA1':
245
  $this->_parameters['oauth_signature_method']=$method;
246
- break;
247
  default:
248
  throw new OAuthSimpleException ("Unknown signing method $method specified for OAuthSimple.setSignatureMethod");
249
- break;
250
  }
251
-
252
- return $this;
253
  }
254
 
255
  /** sign the request
256
- *
257
- * note: all arguments are optional, provided you've set them using the
258
- * other helper functions.
259
- *
260
- * @param args (Array) hash of arguments for the call {action, path, parameters (array), method, signatures (array)} all arguments are optional.
261
- * @return (Array) signed values
262
- */
263
  public function sign($args=array())
264
  {
265
  if (!empty($args['action']))
266
- {
267
  $this->setAction($args['action']);
268
- }
269
  if (!empty($args['path']))
270
- {
271
  $this->setPath($args['path']);
272
  }
273
  if (!empty($args['method']))
274
- {
275
  $this->setSignatureMethod($args['method']);
276
- }
277
  if (!empty($args['signatures']))
278
- {
279
  $this->signatures($args['signatures']);
280
- }
281
  if (empty($args['parameters']))
282
- {
283
  $args['parameters']=array();
284
- }
285
  $this->setParameters($args['parameters']);
286
  $normParams = $this->_normalizedParameters();
287
  $this->_parameters['oauth_signature'] = $this->_generateSignature($normParams);
288
-
289
  return Array (
290
- 'parameters' => $this->_parameters,
291
- 'signature' => self::_oauthEscape($this->_parameters['oauth_signature']),
292
- 'signed_url' => $this->_path . '?' . $this->_normalizedParameters(),
293
- 'header' => $this->getHeaderString(),
294
- 'sbs'=> $this->sbs
295
- );
296
  }
297
 
298
  /**
299
- * Return a formatted "header" string
300
- *
301
- * NOTE: This doesn't set the "Authorization: " prefix, which is required.
302
- * It's not set because various set header functions prefer different
303
- * ways to do that.
304
- *
305
- * @param args (Array)
306
- * @return $result (String)
307
  */
308
  public function getHeaderString ($args=array())
309
  {
310
  if (empty($this->_parameters['oauth_signature']))
311
- {
312
  $this->sign($args);
313
- }
314
  $result = 'OAuth ';
315
 
316
  foreach ($this->_parameters as $pName => $pValue)
317
  {
318
  if (strpos($pName,'oauth_') !== 0 || $pName == 'oauth_token_secret2')
319
- {
320
  continue;
321
- }
322
  if (is_array($pValue))
323
  {
324
  foreach ($pValue as $val)
@@ -343,19 +343,19 @@ class OAuthSimple {
343
  {
344
  list ($key,$token) = explode('=',$element);
345
  if ($token)
346
- {
347
  $token = urldecode($token);
348
- }
349
  if (!empty($result[$key]))
350
  {
351
  if (!is_array($result[$key]))
352
- {
353
  $result[$key] = array($result[$key],$token);
354
- }
355
  else
356
- {
357
  array_push($result[$key],$token);
358
- }
359
  }
360
  else
361
  $result[$key]=$token;
@@ -367,14 +367,14 @@ class OAuthSimple {
367
  private static function _oauthEscape($string)
368
  {
369
  if ($string === 0) { return 0; }
370
- if ($string == '0') { return '0'; }
371
  if (strlen($string) == 0) { return ''; }
372
  if (is_array($string)) {
373
  throw new OAuthSimpleException('Array passed to _oauthEscape');
374
- }
375
  $string = rawurlencode($string);
376
-
377
- $string = str_replace('+','%20',$string);
378
  $string = str_replace('!','%21',$string);
379
  $string = str_replace('*','%2A',$string);
380
  $string = str_replace('\'','%27',$string);
@@ -393,9 +393,9 @@ class OAuthSimple {
393
  $rnum = rand(0,$cLength);
394
  $result .= substr($this->_nonce_chars,$rnum,1);
395
  }
396
- $result = md5($result);
397
  $this->_parameters['oauth_nonce'] = $result;
398
-
399
  return $result;
400
  }
401
 
@@ -406,22 +406,22 @@ class OAuthSimple {
406
  throw new OAuthSimpleException('No consumer_key set for OAuthSimple');
407
  }
408
  $this->_parameters['oauth_consumer_key']=$this->_secrets['consumer_key'];
409
-
410
  return $this->_parameters['oauth_consumer_key'];
411
  }
412
 
413
  private function _getAccessToken()
414
  {
415
  if (!isset($this->_secrets['oauth_secret']))
416
- {
417
  return '';
418
- }
419
  if (!isset($this->_secrets['oauth_token']))
420
- {
421
  throw new OAuthSimpleException('No access token (oauth_token) set for OAuthSimple.');
422
- }
423
  $this->_parameters['oauth_token'] = $this->_secrets['oauth_token'];
424
-
425
  return $this->_parameters['oauth_token'];
426
  }
427
 
@@ -432,63 +432,63 @@ class OAuthSimple {
432
 
433
  private function _normalizedParameters()
434
  {
435
- $normalized_keys = array();
436
- $return_array = array();
437
 
438
- foreach ( $this->_parameters as $paramName=>$paramValue) {
439
  if (!preg_match('/\w+_secret/',$paramName) OR (strpos($paramValue, '@') !== 0 && !file_exists(substr($paramValue, 1))) )
440
- {
441
- if (is_array($paramValue))
442
- {
443
- $normalized_keys[self::_oauthEscape($paramName)] = array();
444
- foreach($paramValue as $item)
445
- {
446
- array_push($normalized_keys[self::_oauthEscape($paramName)], self::_oauthEscape($item));
447
- }
448
- }
449
- else
450
- {
451
- $normalized_keys[self::_oauthEscape($paramName)] = self::_oauthEscape($paramValue);
452
- }
453
- }
454
- }
455
-
456
- ksort($normalized_keys);
457
-
458
- foreach($normalized_keys as $key=>$val)
459
- {
460
- if (is_array($val))
461
- {
462
- sort($val);
463
- foreach($val as $element)
464
- {
465
- array_push($return_array, $key . "=" . $element);
466
- }
467
- }
468
- else
469
- {
470
- array_push($return_array, $key .'='. $val);
471
- }
472
-
473
- }
474
-
475
- return join("&", $return_array);
476
  }
477
 
478
 
479
  private function _generateSignature ()
480
  {
481
  $secretKey = '';
482
- if(isset($this->_secrets['shared_secret']))
483
- {
484
- $secretKey = self::_oauthEscape($this->_secrets['shared_secret']);
485
- }
486
-
487
- $secretKey .= '&';
488
- if(isset($this->_secrets['oauth_secret']))
489
- {
490
  $secretKey .= self::_oauthEscape($this->_secrets['oauth_secret']);
491
- }
492
 
493
  switch($this->_parameters['oauth_signature_method'])
494
  {
@@ -500,34 +500,33 @@ class OAuthSimple {
500
  return base64_encode(hash_hmac('sha1',$this->sbs,$secretKey,TRUE));
501
  default:
502
  throw new OAuthSimpleException('Unknown signature method for OAuthSimple');
503
- break;
504
  }
505
  }
506
  }
507
- if (!class_exists('OAuthSimpleException')) {
508
- class OAuthSimpleException extends Exception {
509
-
510
- public function __construct($err, $isDebug = FALSE)
511
- {
512
- self::log_error($err);
513
- if ($isDebug)
514
- {
515
- self::display_error($err, TRUE);
516
- }
517
- }
518
 
519
- public static function log_error($err)
520
- {
521
- error_log($err, 0);
522
- }
523
-
524
- public static function display_error($err, $kill = FALSE)
525
- {
526
- print_r($err);
527
- if ($kill === FALSE)
528
- {
529
- die();
530
- }
531
- }
532
- }
 
 
 
 
 
 
 
 
 
 
533
  }
1
  <?php
2
  /**
3
+ * OAuthSimple - A simpler version of OAuth
4
+ *
5
+ * https://github.com/jrconlin/oauthsimple
6
+ *
7
+ * @author jr conlin <src@jrconlin.com>
8
+ * @copyright unitedHeroes.net 2011
9
+ * @version 1.3
10
+ * @license See OAuthSimple_license.txt
11
+ *
12
+ */
13
 
14
  class OAuthSimple {
15
  private $_secrets;
18
  private $_nonce_chars;
19
 
20
  /**
21
+ * Constructor
22
+ *
23
+ * @access public
24
+ * @param api_key (String) The API Key (sometimes referred to as the consumer key) This value is usually supplied by the site you wish to use.
25
+ * @param shared_secret (String) The shared secret. This value is also usually provided by the site you wish to use.
26
+ * @return OAuthSimple (Object)
27
+ */
28
  function __construct ($APIKey = "", $sharedSecret=""){
29
+
30
  if (!empty($APIKey))
31
+ {
32
+ $this->_secrets['consumer_key'] = $APIKey;
33
+ }
34
+
35
  if (!empty($sharedSecret))
36
+ {
37
+ $this->_secrets['shared_secret'] = $sharedSecret;
38
+ }
39
+
40
  $this->_default_signature_method = "HMAC-SHA1";
41
  $this->_action = "GET";
42
  $this->_nonce_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
43
+
44
  return $this;
45
  }
46
+
47
  /**
48
+ * Reset the parameters and URL
49
+ *
50
+ * @access public
51
+ * @return OAuthSimple (Object)
52
+ */
53
  public function reset() {
54
  $this->_parameters = Array();
55
  $this->path = NULL;
56
  $this->sbs = NULL;
57
+
58
  return $this;
59
  }
60
 
61
  /**
62
+ * Set the parameters either from a hash or a string
63
+ *
64
+ * @access public
65
+ * @param(string, object) List of parameters for the call, this can either be a URI string (e.g. "foo=bar&gorp=banana" or an object/hash)
66
+ * @return OAuthSimple (Object)
67
+ */
68
  public function setParameters ($parameters=Array()) {
69
+
70
  if (is_string($parameters))
71
+ {
72
+ $parameters = $this->_parseParameterString($parameters);
73
+ }
74
  if (empty($this->_parameters))
75
+ {
76
+ $this->_parameters = $parameters;
77
+ }
78
  else if (!empty($parameters))
79
+ {
80
+ $this->_parameters = array_merge($this->_parameters,$parameters);
81
+ }
82
+ if (empty($this->_parameters['oauth_nonce']))
83
+ {
84
+ $this->_getNonce();
85
+ }
86
  if (empty($this->_parameters['oauth_timestamp']))
87
+ {
88
+ $this->_getTimeStamp();
89
+ }
90
  if (empty($this->_parameters['oauth_consumer_key']))
91
+ {
92
+ $this->_getApiKey();
93
+ }
94
  if (empty($this->_parameters['oauth_token']))
95
+ {
96
+ $this->_getAccessToken();
97
+ }
98
  if (empty($this->_parameters['oauth_signature_method']))
99
+ {
100
  $this->setSignatureMethod();
101
+ }
102
  if (empty($this->_parameters['oauth_version']))
103
+ {
104
  $this->_parameters['oauth_version']="1.0";
105
+ }
106
+
107
  return $this;
108
  }
109
 
110
  /**
111
+ * Convenience method for setParameters
112
+ *
113
+ * @access public
114
+ * @see setParameters
115
+ */
116
  public function setQueryString ($parameters)
117
  {
118
  return $this->setParameters($parameters);
119
  }
120
 
121
  /**
122
+ * Set the target URL (does not include the parameters)
123
+ *
124
+ * @param path (String) the fully qualified URI (excluding query arguments) (e.g "http://example.org/foo")
125
+ * @return OAuthSimple (Object)
126
+ */
127
  public function setURL ($path)
128
+ {
129
  if (empty($path))
130
+ {
131
  throw new OAuthSimpleException('No path specified for OAuthSimple.setURL');
132
+ }
133
  $this->_path=$path;
134
+
135
  return $this;
136
  }
137
 
138
  /**
139
+ * Convenience method for setURL
140
+ *
141
+ * @param path (String)
142
+ * @see setURL
143
+ */
144
  public function setPath ($path)
145
  {
146
  return $this->_path=$path;
147
  }
148
 
149
  /**
150
+ * Set the "action" for the url, (e.g. GET,POST, DELETE, etc.)
151
+ *
152
+ * @param action (String) HTTP Action word.
153
+ * @return OAuthSimple (Object)
154
+ */
155
  public function setAction ($action)
156
  {
157
  if (empty($action))
158
+ {
159
+ $action = 'GET';
160
+ }
161
  $action = strtoupper($action);
162
  if (preg_match('/[^A-Z]/',$action))
163
+ {
164
  throw new OAuthSimpleException('Invalid action specified for OAuthSimple.setAction');
165
+ }
166
  $this->_action = $action;
167
+
168
  return $this;
169
  }
170
 
171
  /**
172
+ * Set the signatures (as well as validate the ones you have)
173
+ *
174
+ * @param signatures (object) object/hash of the token/signature pairs {api_key:, shared_secret:, oauth_token: oauth_secret:}
175
+ * @return OAuthSimple (Object)
176
+ */
177
  public function signatures ($signatures)
178
  {
179
  if (!empty($signatures) && !is_array($signatures))
180
+ {
181
  throw new OAuthSimpleException('Must pass dictionary array to OAuthSimple.signatures');
182
+ }
183
  if (!empty($signatures))
184
  {
185
  if (empty($this->_secrets))
189
  $this->_secrets=array_merge($this->_secrets,$signatures);
190
  }
191
  if (isset($this->_secrets['api_key']))
192
+ {
193
  $this->_secrets['consumer_key'] = $this->_secrets['api_key'];
194
+ }
195
  if (isset($this->_secrets['access_token']))
196
+ {
197
  $this->_secrets['oauth_token'] = $this->_secrets['access_token'];
198
+ }
199
  if (isset($this->_secrets['access_secret']))
200
+ {
201
  $this->_secrets['oauth_secret'] = $this->_secrets['access_secret'];
202
  }
203
  if (isset($this->_secrets['access_token_secret']))
204
+ {
205
  $this->_secrets['oauth_secret'] = $this->_secrets['access_token_secret'];
206
+ }
207
  if (empty($this->_secrets['consumer_key']))
208
+ {
209
  throw new OAuthSimpleException('Missing required consumer_key in OAuthSimple.signatures');
210
  }
211
  if (empty($this->_secrets['shared_secret']))
212
+ {
213
  throw new OAuthSimpleException('Missing requires shared_secret in OAuthSimple.signatures');
214
+ }
215
  if (!empty($this->_secrets['oauth_token']) && empty($this->_secrets['oauth_secret']))
216
+ {
217
  throw new OAuthSimpleException('Missing oauth_secret for supplied oauth_token in OAuthSimple.signatures');
218
+ }
219
+
220
  return $this;
221
  }
222
 
226
  }
227
 
228
  /**
229
+ * Set the signature method (currently only Plaintext or SHA-MAC1)
230
+ *
231
+ * @param method (String) Method of signing the transaction (only PLAINTEXT and SHA-MAC1 allowed for now)
232
+ * @return OAuthSimple (Object)
233
  */
234
  public function setSignatureMethod ($method="")
235
+ {
236
  if (empty($method))
237
+ {
238
  $method = $this->_default_signature_method;
239
+ }
240
  $method = strtoupper($method);
241
  switch($method)
242
  {
243
  case 'PLAINTEXT':
244
  case 'HMAC-SHA1':
245
  $this->_parameters['oauth_signature_method']=$method;
246
+ break;
247
  default:
248
  throw new OAuthSimpleException ("Unknown signing method $method specified for OAuthSimple.setSignatureMethod");
249
+ break;
250
  }
251
+
252
+ return $this;
253
  }
254
 
255
  /** sign the request
256
+ *
257
+ * note: all arguments are optional, provided you've set them using the
258
+ * other helper functions.
259
+ *
260
+ * @param args (Array) hash of arguments for the call {action, path, parameters (array), method, signatures (array)} all arguments are optional.
261
+ * @return (Array) signed values
262
+ */
263
  public function sign($args=array())
264
  {
265
  if (!empty($args['action']))
266
+ {
267
  $this->setAction($args['action']);
268
+ }
269
  if (!empty($args['path']))
270
+ {
271
  $this->setPath($args['path']);
272
  }
273
  if (!empty($args['method']))
274
+ {
275
  $this->setSignatureMethod($args['method']);
276
+ }
277
  if (!empty($args['signatures']))
278
+ {
279
  $this->signatures($args['signatures']);
280
+ }
281
  if (empty($args['parameters']))
282
+ {
283
  $args['parameters']=array();
284
+ }
285
  $this->setParameters($args['parameters']);
286
  $normParams = $this->_normalizedParameters();
287
  $this->_parameters['oauth_signature'] = $this->_generateSignature($normParams);
288
+
289
  return Array (
290
+ 'parameters' => $this->_parameters,
291
+ 'signature' => self::_oauthEscape($this->_parameters['oauth_signature']),
292
+ 'signed_url' => $this->_path . '?' . $this->_normalizedParameters(),
293
+ 'header' => $this->getHeaderString(),
294
+ 'sbs'=> $this->sbs
295
+ );
296
  }
297
 
298
  /**
299
+ * Return a formatted "header" string
300
+ *
301
+ * NOTE: This doesn't set the "Authorization: " prefix, which is required.
302
+ * It's not set because various set header functions prefer different
303
+ * ways to do that.
304
+ *
305
+ * @param args (Array)
306
+ * @return $result (String)
307
  */
308
  public function getHeaderString ($args=array())
309
  {
310
  if (empty($this->_parameters['oauth_signature']))
311
+ {
312
  $this->sign($args);
313
+ }
314
  $result = 'OAuth ';
315
 
316
  foreach ($this->_parameters as $pName => $pValue)
317
  {
318
  if (strpos($pName,'oauth_') !== 0 || $pName == 'oauth_token_secret2')
319
+ {
320
  continue;
321
+ }
322
  if (is_array($pValue))
323
  {
324
  foreach ($pValue as $val)
343
  {
344
  list ($key,$token) = explode('=',$element);
345
  if ($token)
346
+ {
347
  $token = urldecode($token);
348
+ }
349
  if (!empty($result[$key]))
350
  {
351
  if (!is_array($result[$key]))
352
+ {
353
  $result[$key] = array($result[$key],$token);
354
+ }
355
  else
356
+ {
357
  array_push($result[$key],$token);
358
+ }
359
  }
360
  else
361
  $result[$key]=$token;
367
  private static function _oauthEscape($string)
368
  {
369
  if ($string === 0) { return 0; }
370
+ if ($string == '0') { return '0'; }
371
  if (strlen($string) == 0) { return ''; }
372
  if (is_array($string)) {
373
  throw new OAuthSimpleException('Array passed to _oauthEscape');
374
+ }
375
  $string = rawurlencode($string);
376
+
377
+ $string = str_replace('+','%20',$string);
378
  $string = str_replace('!','%21',$string);
379
  $string = str_replace('*','%2A',$string);
380
  $string = str_replace('\'','%27',$string);
393
  $rnum = rand(0,$cLength);
394
  $result .= substr($this->_nonce_chars,$rnum,1);
395
  }
396
+ $result = md5($result);
397
  $this->_parameters['oauth_nonce'] = $result;
398
+
399
  return $result;
400
  }
401
 
406
  throw new OAuthSimpleException('No consumer_key set for OAuthSimple');
407
  }
408
  $this->_parameters['oauth_consumer_key']=$this->_secrets['consumer_key'];
409
+
410
  return $this->_parameters['oauth_consumer_key'];
411
  }
412
 
413
  private function _getAccessToken()
414
  {
415
  if (!isset($this->_secrets['oauth_secret']))
416
+ {
417
  return '';
418
+ }
419
  if (!isset($this->_secrets['oauth_token']))
420
+ {
421
  throw new OAuthSimpleException('No access token (oauth_token) set for OAuthSimple.');
422
+ }
423
  $this->_parameters['oauth_token'] = $this->_secrets['oauth_token'];
424
+
425
  return $this->_parameters['oauth_token'];
426
  }
427
 
432
 
433
  private function _normalizedParameters()
434
  {
435
+ $normalized_keys = array();
436
+ $return_array = array();
437
 
438
+ foreach ( $this->_parameters as $paramName=>$paramValue) {
439
  if (!preg_match('/\w+_secret/',$paramName) OR (strpos($paramValue, '@') !== 0 && !file_exists(substr($paramValue, 1))) )
440
+ {
441
+ if (is_array($paramValue))
442
+ {
443
+ $normalized_keys[self::_oauthEscape($paramName)] = array();
444
+ foreach($paramValue as $item)
445
+ {
446
+ array_push($normalized_keys[self::_oauthEscape($paramName)], self::_oauthEscape($item));
447
+ }
448
+ }
449
+ else
450
+ {
451
+ $normalized_keys[self::_oauthEscape($paramName)] = self::_oauthEscape($paramValue);
452
+ }
453
+ }
454
+ }
455
+
456
+ ksort($normalized_keys);
457
+
458
+ foreach($normalized_keys as $key=>$val)
459
+ {
460
+ if (is_array($val))
461
+ {
462
+ sort($val);
463
+ foreach($val as $element)
464
+ {
465
+ array_push($return_array, $key . "=" . $element);
466
+ }
467
+ }
468
+ else
469
+ {
470
+ array_push($return_array, $key .'='. $val);
471
+ }
472
+
473
+ }
474
+
475
+ return join("&", $return_array);
476
  }
477
 
478
 
479
  private function _generateSignature ()
480
  {
481
  $secretKey = '';
482
+ if(isset($this->_secrets['shared_secret']))
483
+ {
484
+ $secretKey = self::_oauthEscape($this->_secrets['shared_secret']);
485
+ }
486
+
487
+ $secretKey .= '&';
488
+ if(isset($this->_secrets['oauth_secret']))
489
+ {
490
  $secretKey .= self::_oauthEscape($this->_secrets['oauth_secret']);
491
+ }
492
 
493
  switch($this->_parameters['oauth_signature_method'])
494
  {
500
  return base64_encode(hash_hmac('sha1',$this->sbs,$secretKey,TRUE));
501
  default:
502
  throw new OAuthSimpleException('Unknown signature method for OAuthSimple');
503
+ break;
504
  }
505
  }
506
  }
 
 
 
 
 
 
 
 
 
 
 
507
 
508
+ class OAuthSimpleException extends Exception {
509
+
510
+ public function __construct($err, $isDebug = FALSE)
511
+ {
512
+ self::log_error($err);
513
+ if ($isDebug)
514
+ {
515
+ self::display_error($err, TRUE);
516
+ }
517
+ }
518
+
519
+ public static function log_error($err)
520
+ {
521
+ error_log($err, 0);
522
+ }
523
+
524
+ public static function display_error($err, $kill = FALSE)
525
+ {
526
+ print_r($err);
527
+ if ($kill === FALSE)
528
+ {
529
+ die();
530
+ }
531
+ }
532
  }
modules/archive.php DELETED
@@ -1,784 +0,0 @@
1
- <?php
2
- /*--------------------------------------------------
3
- | TAR/GZIP/BZIP2/ZIP ARCHIVE CLASSES 2.1
4
- | By Devin Doucette
5
- | Copyright (c) 2005 Devin Doucette
6
- | Email: darksnoopy@shaw.ca
7
- +--------------------------------------------------
8
- | Email bugs/suggestions to darksnoopy@shaw.ca
9
- +--------------------------------------------------
10
- | This script has been created and released under
11
- | the GNU GPL and is free to use and redistribute
12
- | only if this copyright statement is not removed
13
- +--------------------------------------------------*/
14
-
15
- class wpadm_archive_class
16
- {
17
- function __construct($name = '')
18
- {
19
- $this->options = array (
20
- 'basedir' => ".",
21
- 'name' => $name,
22
- 'prepend' => "",
23
- 'delete_path_in_archive' => "",
24
- 'inmemory' => 0,
25
- 'overwrite' => 0,
26
- 'recurse' => 1,
27
- 'storepaths' => 1,
28
- 'followlinks' => 0,
29
- 'level' => 3,
30
- 'method' => 1,
31
- 'sfx' => "",
32
- 'type' => "",
33
- 'comment' => ""
34
- );
35
- $this->files = array ();
36
- $this->exclude = array ();
37
- $this->include = array ();
38
- $this->storeonly = array ();
39
- $this->error = array ();
40
- $this->warning = array ();
41
- }
42
-
43
- function set_options($options)
44
- {
45
- foreach ($options as $key => $value)
46
- $this->options[$key] = $value;
47
- if (!empty ($this->options['basedir']))
48
- {
49
- $this->options['basedir'] = str_replace("\\", "/", $this->options['basedir']);
50
- $this->options['basedir'] = preg_replace("/\/+/", "/", $this->options['basedir']);
51
- $this->options['basedir'] = preg_replace("/\/$/", "", $this->options['basedir']);
52
- }
53
- if (!empty ($this->options['name']))
54
- {
55
- $this->options['name'] = str_replace("\\", "/", $this->options['name']);
56
- $this->options['name'] = preg_replace("/\/+/", "/", $this->options['name']);
57
- }
58
- if (!empty ($this->options['prepend']))
59
- {
60
- $this->options['prepend'] = str_replace("\\", "/", $this->options['prepend']);
61
- $this->options['prepend'] = preg_replace("/^(\.*\/+)+/", "", $this->options['prepend']);
62
- $this->options['prepend'] = preg_replace("/\/+/", "/", $this->options['prepend']);
63
- $this->options['prepend'] = preg_replace("/\/$/", "", $this->options['prepend']) . "/";
64
- }
65
- if ( !empty($this->options['delete_path_in_archive'])) {
66
- $this->options['delete_path_in_archive'] = str_replace("\\", "/", $this->options['delete_path_in_archive']);
67
- }
68
- }
69
-
70
- function create_archive()
71
- {
72
- $this->make_list();
73
-
74
- if ($this->options['inmemory'] == 0)
75
- {
76
- $pwd = getcwd();
77
- chdir($this->options['basedir']);
78
- if ($this->options['overwrite'] == 0 && file_exists($this->options['name'] . ($this->options['type'] == "gzip" || $this->options['type'] == "bzip" ? ".tmp" : "")))
79
- {
80
- $this->error[] = "File {$this->options['name']} already exists.";
81
- chdir($pwd);
82
- return 0;
83
- }
84
- else if ($this->archive = @fopen($this->options['name'] . ($this->options['type'] == "gzip" || $this->options['type'] == "bzip" ? ".tmp" : ""), "wb+"))
85
- chdir($pwd);
86
- else
87
- {
88
- $this->error[] = "Could not open {$this->options['name']} for writing.";
89
- chdir($pwd);
90
- return 0;
91
- }
92
- }
93
- else
94
- $this->archive = "";
95
-
96
- switch ($this->options['type'])
97
- {
98
- case "zip":
99
- if (!$this->create_zip())
100
- {
101
- $this->error[] = "Could not create zip file.";
102
- return 0;
103
- }
104
- break;
105
- case "bzip":
106
- if (!$this->create_tar())
107
- {
108
- $this->error[] = "Could not create tar file.";
109
- return 0;
110
- }
111
- if (!$this->create_bzip())
112
- {
113
- $this->error[] = "Could not create bzip2 file.";
114
- return 0;
115
- }
116
- break;
117
- case "gzip":
118
- if (!$this->create_tar())
119
- {
120
- $this->error[] = "Could not create tar file.";
121
- return 0;
122
- }
123
- if (!$this->create_gzip())
124
- {
125
- $this->error[] = "Could not create gzip file.";
126
- return 0;
127
- }
128
- break;
129
- case "tar":
130
- if (!$this->create_tar())
131
- {
132
- $this->error[] = "Could not create tar file.";
133
- return 0;
134
- }
135
- }
136
-
137
- if ($this->options['inmemory'] == 0)
138
- {
139
- fclose($this->archive);
140
- if ($this->options['type'] == "gzip" || $this->options['type'] == "bzip") {
141
- if (file_exists($this->options['basedir'] . "/" . $this->options['name'] . ".tmp")) {
142
- unlink( $this->options['basedir'] . "/" . $this->options['name'] . ".tmp" );
143
- } elseif (file_exists($this->options['name'] . ".tmp")) {
144
- unlink( $this->options['name'] . ".tmp" );
145
- }
146
- }
147
- }
148
- }
149
-
150
- function add_data($data)
151
- {
152
- if ($this->options['inmemory'] == 0)
153
- fwrite($this->archive, $data);
154
- else
155
- $this->archive .= $data;
156
- }
157
-
158
- function make_list()
159
- {
160
- if (!empty ($this->exclude))
161
- foreach ($this->files as $key => $value)
162
- foreach ($this->exclude as $current)
163
- if ($value['name'] == $current['name'])
164
- unset ($this->files[$key]);
165
- if (!empty ($this->storeonly))
166
- foreach ($this->files as $key => $value)
167
- foreach ($this->storeonly as $current)
168
- if ($value['name'] == $current['name'])
169
- $this->files[$key]['method'] = 0;
170
- unset ($this->exclude, $this->storeonly);
171
- }
172
-
173
- function add_files($list)
174
- {
175
- $temp = $this->list_files($list);
176
- foreach ($temp as $current)
177
- $this->files[] = $current;
178
-
179
- }
180
-
181
- function exclude_files($list)
182
- {
183
- $temp = $this->list_files($list);
184
- foreach ($temp as $current)
185
- $this->exclude[] = $current;
186
- }
187
-
188
- function include_files($list)
189
- {
190
- if (is_array($list)) {
191
- $temp = $this->list_files($list);
192
- foreach ($temp as $current)
193
- $this->include[] = $current;
194
- } elseif (is_string($list)) {
195
- $this->include = $list;
196
- }
197
- }
198
-
199
- function store_files($list)
200
- {
201
- $temp = $this->list_files($list);
202
- foreach ($temp as $current)
203
- $this->storeonly[] = $current;
204
- }
205
-
206
- function list_files($list)
207
- {
208
- if (!is_array ($list))
209
- {
210
- $temp = $list;
211
- $list = array ($temp);
212
- unset ($temp);
213
- }
214
-
215
- $files = array ();
216
-
217
- $pwd = getcwd();
218
- chdir($this->options['basedir']);
219
-
220
- foreach ($list as $current)
221
- {
222
- $current = str_replace("\\", "/", $current);
223
- $current = preg_replace("/\/+/", "/", $current);
224
- $current = preg_replace("/\/$/", "", $current);
225
- if (strstr($current, "*"))
226
- {
227
- $regex = preg_replace("/([\\\^\$\.\[\]\|\(\)\?\+\{\}\/])/", "\\\\\\1", $current);
228
- $regex = str_replace("*", ".*", $regex);
229
- $dir = strstr($current, "/") ? substr($current, 0, strrpos($current, "/")) : ".";
230
- $temp = $this->parse_dir($dir);
231
- foreach ($temp as $current2)
232
- if (preg_match("/^{$regex}$/i", $current2['name']))
233
- $files[] = $current2;
234
- unset ($regex, $dir, $temp, $current);
235
- }
236
- else if (@is_dir($current))
237
- {
238
- $temp = $this->parse_dir($current);
239
- foreach ($temp as $file)
240
- $files[] = $file;
241
- unset ($temp, $file);
242
- }
243
- else if (@file_exists($current))
244
- $files[] = array ('name' => $current, 'name2' => $this->options['prepend'] .
245
- preg_replace("/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr($current, "/")) ?
246
- substr($current, strrpos($current, "/") + 1) : ( !empty($this->options['delete_path_in_archive'] ) ? str_replace($this->options['delete_path_in_archive'] , '', $current) : $current ) ),
247
- 'type' => @is_link($current) && $this->options['followlinks'] == 0 ? 2 : 0,
248
- 'ext' => substr($current, strrpos($current, ".")), 'stat' => stat($current));
249
- }
250
-
251
- chdir($pwd);
252
-
253
- unset ($current, $pwd);
254
-
255
- usort($files, array ("archive", "sort_files"));
256
-
257
- return $files;
258
- }
259
-
260
- function parse_dir($dirname)
261
- {
262
- if ($this->options['storepaths'] == 1 && !preg_match("/^(\.+\/*)+$/", $dirname))
263
- $files = array (array ('name' => $dirname, 'name2' => $this->options['prepend'] .
264
- preg_replace("/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr($dirname, "/")) ?
265
- substr($dirname, strrpos($dirname, "/") + 1) : $dirname), 'type' => 5, 'stat' => stat($dirname)));
266
- else
267
- $files = array ();
268
- $dir = @opendir($dirname);
269
-
270
- while ($file = @readdir($dir))
271
- {
272
- $fullname = $dirname . "/" . $file;
273
- if ($file == "." || $file == "..")
274
- continue;
275
- else if (@is_dir($fullname))
276
- {
277
- if (empty ($this->options['recurse']))
278
- continue;
279
- $temp = $this->parse_dir($fullname);
280
- foreach ($temp as $file2)
281
- $files[] = $file2;
282
- }
283
- else if (@file_exists($fullname))
284
- $files[] = array ('name' => $fullname, 'name2' => $this->options['prepend'] .
285
- preg_replace("/(\.+\/+)+/", "", ($this->options['storepaths'] == 0 && strstr($fullname, "/")) ?
286
- substr($fullname, strrpos($fullname, "/") + 1) : $fullname),
287
- 'type' => @is_link($fullname) && $this->options['followlinks'] == 0 ? 2 : 0,
288
- 'ext' => substr($file, strrpos($file, ".")), 'stat' => stat($fullname));
289
- }
290
-
291
- @closedir($dir);
292
-
293
- return $files;
294
- }
295
-
296
- function sort_files($a, $b)
297
- {
298
- if ($a['type'] != $b['type'])
299
- if ($a['type'] == 5 || $b['type'] == 2)
300
- return -1;
301
- else if ($a['type'] == 2 || $b['type'] == 5)
302
- return 1;
303
- else if ($a['type'] == 5)
304
- return strcmp(strtolower($a['name']), strtolower($b['name']));
305
- else if ($a['ext'] != $b['ext'])
306
- return strcmp($a['ext'], $b['ext']);
307
- else if ($a['stat'][7] != $b['stat'][7])
308
- return $a['stat'][7] > $b['stat'][7] ? -1 : 1;
309
- else
310
- return strcmp(strtolower($a['name']), strtolower($b['name']));
311
- return 0;
312
- }
313
-
314
- function download_file()
315
- {
316
- if ($this->options['inmemory'] == 0)
317
- {
318
- $this->error[] = "Can only use download_file() if archive is in memory. Redirect to file otherwise, it is faster.";
319
- return;
320
- }
321
- switch ($this->options['type'])
322
- {
323
- case "zip":
324
- header("Content-Type: application/zip");
325
- break;
326
- case "bzip":
327
- header("Content-Type: application/x-bzip2");
328
- break;
329
- case "gzip":
330
- header("Content-Type: application/x-gzip");
331
- break;
332
- case "tar":
333
- header("Content-Type: application/x-tar");
334
- }
335
- $header = "Content-Disposition: attachment; filename=\"";
336
- $header .= strstr($this->options['name'], "/") ? substr($this->options['name'], strrpos($this->options['name'], "/") + 1) : $this->options['name'];
337
- $header .= "\"";
338
- header($header);
339
- header("Content-Length: " . strlen($this->archive));
340
- header("Content-Transfer-Encoding: binary");
341
- header("Cache-Control: no-cache, must-revalidate, max-age=60");
342
- header("Expires: Sat, 01 Jan 2000 12:00:00 GMT");
343
- print($this->archive);
344
- }
345
-
346
- function createDir($dir, $dir_to)
347
- {
348
- $file = basename($dir);
349
- if (strpos($file, '.') !== false) {
350
- $dir = substr($dir, 0, strlen($dir) - strlen($file));
351
- }
352
- $dir = str_replace("\\", '/', $dir);
353
- $dirs_array = explode("/", $dir);
354
- $n = count($dirs_array);
355
- $dir_tmp = str_replace("\\", '/', $dir_to);
356
- for($i = 0; $i < $n; $i++) {
357
- $dir_tmp .= "/" . $dirs_array[$i];
358
- if (!is_dir($dir_tmp) && !file_exists( $dir_tmp ) ) {
359
- mkdir( $dir_tmp );
360
- }
361
- }
362
- }
363
-
364
- }
365
-
366
- class wpadm_tar_file extends wpadm_archive_class
367
- {
368
- function __construct($name)
369
- {
370
- parent::__construct($name);
371
- $this->options['type'] = "tar";
372
- }
373
-
374
- function create_tar()
375
- {
376
- $pwd = getcwd();
377
- chdir($this->options['basedir']);
378
-
379
- foreach ($this->files as $current)
380
- {
381
- if ($current['name'] == $this->options['name'])
382
- continue;
383
- if (strlen($current['name2']) > 99)
384
- {
385
- $path = substr($current['name2'], 0, strpos($current['name2'], "/", strlen($current['name2']) - 100) + 1);
386
- $current['name2'] = substr($current['name2'], strlen($path));
387
- if (strlen($path) > 154 || strlen($current['name2']) > 99)
388
- {
389
- $this->error[] = "Could not add {$path}{$current['name2']} to archive because the filename is too long.";
390
- continue;
391
- }
392
- }
393
- $block = pack("a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155a12", $current['name2'], sprintf("%07o",
394
- $current['stat'][2]), sprintf("%07o", $current['stat'][4]), sprintf("%07o", $current['stat'][5]),
395
- sprintf("%011o", $current['type'] == 2 ? 0 : $current['stat'][7]), sprintf("%011o", $current['stat'][9]),
396
- " ", $current['type'], $current['type'] == 2 ? @readlink($current['name']) : "", "ustar ", " ",
397
- "Unknown", "Unknown", "", "", !empty ($path) ? $path : "", "");
398
-
399
- $checksum = 0;
400
- for ($i = 0; $i < 512; $i++)
401
- $checksum += ord(substr($block, $i, 1));
402
- $checksum = pack("a8", sprintf("%07o", $checksum));
403
- $block = substr_replace($block, $checksum, 148, 8);
404
-
405
- if ($current['type'] == 2 || $current['stat'][7] == 0)
406
- $this->add_data($block);
407
- else if ($fp = @fopen($current['name'], "rb"))
408
- {
409
- $this->add_data($block);
410
- while ($temp = fread($fp, 1048576))
411
- $this->add_data($temp);
412
- if ($current['stat'][7] % 512 > 0)
413
- {
414
- $temp = "";
415
- for ($i = 0; $i < 512 - $current['stat'][7] % 512; $i++)
416
- $temp .= "\0";
417
- $this->add_data($temp);
418
- }
419
- fclose($fp);
420
- }
421
- else
422
- $this->error[] = "Could not open file {$current['name']} for reading. It was not added.";
423
- }
424
-
425
- $this->add_data(pack("a1024", ""));
426
-
427
- chdir($pwd);
428
-
429
- return 1;
430
- }
431
-
432
- function extract_files()
433
- {
434
- $pwd = getcwd();
435
- chdir($this->options['basedir']);
436
-
437
- if ($fp = $this->open_archive())
438
- {
439
- if ($this->options['inmemory'] == 1)
440
- $this->files = array ();
441
-
442
- while ($block = fread($fp, 512))
443
- {
444
- $temp = unpack("A100name/A8mode/A8uid/A8gid/A12size/A12mtime/A8checksum/A1type/A100symlink/A6magic/A2temp/A32temp/A32temp/A8temp/A8temp/A155prefix/A12temp", $block);
445
- $file = array (
446
- 'name' => trim( $temp['prefix'] ) . trim( $temp['name'] ),
447
- 'stat' => array (
448
- 2 => $temp['mode'],
449
- 4 => octdec($temp['uid']),
450
- 5 => octdec($temp['gid']),
451
- 7 => octdec($temp['size']),
452
- 9 => octdec($temp['mtime']),
453
- ),
454
- 'checksum' => octdec($temp['checksum']),
455
- 'type' => (int)$temp['type'],
456
- 'magic' => $temp['magic'],
457
- );
458
-
459
- if ($file['checksum'] == 0x00000000)
460
- break;
461
- else if (substr($file['magic'], 0, 5) != "ustar")
462
- {
463
- $this->error[] = "This script does not support extracting this type of tar file." . "(" . utf8_encode( substr($file['magic'], 0, 5) ) . ")";
464
- break;
465
- }
466
- $block = substr_replace($block, " ", 148, 8);
467
- $checksum = 0;
468
- for ($i = 0; $i < 512; $i++)
469
- $checksum += ord(substr($block, $i, 1));
470
- if ($file['checksum'] != $checksum)
471
- $this->error[] = "Could not extract from {$this->options['name']}, it is corrupt.";
472
-
473
- if ($file['type'] == 0) {
474
- if ( !empty( $this->exclude ) ) {
475
- if (is_array($this->exclude)) {
476
- if ( in_array($file['name'], $this->exclude) ) {
477
- continue;
478
- }
479
- } elseif (@function_exists($this->exclude)) {
480
- $function = $this->exclude;
481
- if ( $function($file['name']) === true ) {
482
- continue;
483
- }
484
- }
485
- }
486
-
487
- if (!empty($this->include)) {
488
- if (is_array($this->include)) {
489
- if ( !in_array($file['name'], $this->include) ) {
490
- continue;
491
- } elseif (!preg_match($this->include, $file['name'])) {
492
- continue;
493
- }
494
- }
495
- }
496
- $this->createDir($file['name'], $this->options['basedir']);
497
- }
498
-
499
- if ($this->options['inmemory'] == 1)
500
- {
501
- $file['data'] = fread($fp, $file['stat'][7]);
502
- fread($fp, (512 - $file['stat'][7] % 512) == 512 ? 0 : (512 - $file['stat'][7] % 512));
503
- unset ($file['checksum'], $file['magic']);
504
- $this->files[] = $file;
505
- }
506
- else if ($file['type'] == 5)
507
- {
508
- if (!is_dir($file['name']))
509
- mkdir($file['name'], $file['stat'][2]);
510
- }
511
- else if ($this->options['overwrite'] == 0 && file_exists($file['name']))
512
- {
513
- $this->error[] = "{$file['name']} already exists.";
514
- continue;
515
- }
516
- else if ($file['type'] == 2)
517
- {
518
- symlink($temp['symlink'], $file['name']);
519
- chmod($file['name'], $file['stat'][2]);
520
- }
521
- else if ($new = @fopen($file['name'], "wb"))
522
- {
523
- if ($file['stat'][7] == 0) {
524
- fwrite($new, '');
525
- } else {
526
- fwrite($new, fread($fp, $file['stat'][7]));
527
- }
528
-
529
- $read_next = (512 - $file['stat'][7] % 512) == 512 ? 0 : (512 - $file['stat'][7] % 512);
530
- if ($read_next != 0) {
531
- fread($fp, $read_next);
532
- }
533
- fclose($new);
534
- //chmod($file['name'], $file['stat'][2]);
535
- }
536
- else
537
- {
538
-
539
- $this->warning[] = "Could not open {$file['name']} for writing.";
540
- continue;
541
- }
542
- //chown($file['name'], $file['stat'][4]);
543
- //chgrp($file['name'], $file['stat'][5]);
544
- //touch($file['name'], $file['stat'][9]);
545
- unset ($file);
546
- }
547
- }
548
- else
549
- $this->error[] = "Could not open file {$this->options['name']}";
550
-
551
- chdir($pwd);
552
- }
553
-
554
- function open_archive()
555
- {
556
- return @fopen($this->options['name'], "rb");
557
- }
558
- }
559
-
560
- class wpadm_gzip_file extends wpadm_tar_file
561
- {
562
- function __construct($name)
563
- {
564
- parent::__construct($name);
565
- $this->options['type'] = "gzip";
566
- }
567
-
568
- function create_gzip()
569
- {
570
- if ($this->options['inmemory'] == 0)
571
- {
572
- $pwd = getcwd();
573
- chdir($this->options['basedir']);
574
- if ($fp = gzopen($this->options['name'], "wb{$this->options['level']}"))
575
- {
576
- fseek($this->archive, 0);
577
- while ($temp = fread($this->archive, 1048576))
578
- gzwrite($fp, $temp);
579
- gzclose($fp);
580
- chdir($pwd);
581
- }
582
- else
583
- {
584
- $this->error[] = "Could not open {$this->options['name']} for writing.";
585
- chdir($pwd);
586
- return 0;
587
- }
588
- }
589
- else
590
- $this->archive = gzencode($this->archive, $this->options['level']);
591
-
592
- return 1;
593
- }
594
-
595
- function extract_gz_files()
596
- {
597
- $pwd = getcwd();
598
- chdir($this->options['basedir']);
599
- $tmp_file = $this->options['name'] . ".tmp" ;
600
- $tmp_w = fopen($tmp_file, "wb");
601
- if ($tmp_w) {
602
- if ($fp = gzopen($this->options['name'], "rb{$this->options['level']}"))
603
- {
604
- fseek($tmp_w, 0);
605
- while ($temp = gzread($fp, 1048576))
606
- fwrite($tmp_w, $temp);
607
- gzclose($fp);
608
- chdir($pwd);
609
- }
610
- else
611
- {
612
- $this->error[] = "Could not open {$this->options['name']} for reading.";
613
- chdir($pwd);
614
- return 0;
615
- }
616
-
617
- fclose($tmp_w);
618
- $this->options['name'] = $tmp_file;
619
- $this->extract_files();
620
- if (file_exists($tmp_file)) {
621
- unlink($tmp_file);
622
- }
623
- } else {
624
- $this->error[] = "Could not open {$tmp_file} for writing.";
625
- chdir($pwd);
626
- return 0;
627
- }
628
- return 1;
629
- }
630
-
631
- function open_archive()
632
- {
633
- return @gzopen($this->options['name'], "rb");
634
- }
635
- }
636
-
637
- class wpadm_bzip_file extends wpadm_tar_file
638
- {
639
- function __construct($name)
640
- {
641
- parent::__construct($name);
642
- $this->options['type'] = "bzip";
643
- }
644
-
645
- function create_bzip()
646
- {
647
- if ($this->options['inmemory'] == 0)
648
- {
649
- $pwd = getcwd();
650
- chdir($this->options['basedir']);
651
- if ($fp = bzopen($this->options['name'], "wb"))
652
- {
653
- fseek($this->archive, 0);
654
- while ($temp = fread($this->archive, 1048576))
655
- bzwrite($fp, $temp);
656
- bzclose($fp);
657
- chdir($pwd);
658
- }
659
- else
660
- {
661
- $this->error[] = "Could not open {$this->options['name']} for writing.";
662
- chdir($pwd);
663
- return 0;
664
- }
665
- }
666
- else
667
- $this->archive = bzcompress($this->archive, $this->options['level']);
668
-
669
- return 1;
670
- }
671
-
672
- function open_archive()
673
- {
674
- return @bzopen($this->options['name'], "rb");
675
- }
676
- }
677
-
678
- class wpadm_zip_file extends wpadm_archive_class
679
- {
680
- function __construct($name)
681
- {
682
- parent::__construct($name);
683
- $this->options['type'] = "zip";
684
- }
685
-
686
- function create_zip()
687
- {
688
- $files = 0;
689
- $offset = 0;
690
- $central = "";
691
-
692
- if (!empty ($this->options['sfx']))
693
- if ($fp = @fopen($this->options['sfx'], "rb"))
694
- {
695
- $temp = fread($fp, filesize($this->options['sfx']));
696
- fclose($fp);
697
- $this->add_data($temp);
698
- $offset += strlen($temp);
699
- unset ($temp);
700
- }
701
- else
702
- $this->error[] = "Could not open sfx module from {$this->options['sfx']}.";
703
-
704
- $pwd = getcwd();
705
- chdir($this->options['basedir']);
706
-
707
- foreach ($this->files as $current)
708
- {
709
- if ($current['name'] == $this->options['name'])
710
- continue;
711
-
712
- $timedate = explode(" ", date("Y n j G i s", $current['stat'][9]));
713
- $timedate = ($timedate[0] - 1980 << 25) | ($timedate[1] << 21) | ($timedate[2] << 16) |
714
- ($timedate[3] << 11) | ($timedate[4] << 5) | ($timedate[5]);
715
-
716
- $block = pack("VvvvV", 0x04034b50, 0x000A, 0x0000, (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate);
717
-
718
- if ($current['stat'][7] == 0 && $current['type'] == 5)
719
- {
720
- $block .= pack("VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']) + 1, 0x0000);
721
- $block .= $current['name2'] . "/";
722
- $this->add_data($block);
723
- $central .= pack("VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000,
724
- (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate,
725
- 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']) + 1, 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset);
726
- $central .= $current['name2'] . "/";
727
- $files++;
728
- $offset += (31 + strlen($current['name2']));
729
- }
730
- else if ($current['stat'][7] == 0)
731
- {
732
- $block .= pack("VVVvv", 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']), 0x0000);
733
- $block .= $current['name2'];
734
- $this->add_data($block);
735
- $central .= pack("VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000,
736
- (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate,
737
- 0x00000000, 0x00000000, 0x00000000, strlen($current['name2']), 0x0000, 0x0000, 0x0000, 0x0000, $current['type'] == 5 ? 0x00000010 : 0x00000000, $offset);
738
- $central .= $current['name2'];
739
- $files++;
740
- $offset += (30 + strlen($current['name2']));
741
- }
742
- else if ($fp = @fopen($current['name'], "rb"))
743
- {
744
- $temp = fread($fp, $current['stat'][7]);
745
- fclose($fp);
746
- $crc32 = crc32($temp);
747
- if (!isset($current['method']) && $this->options['method'] == 1)
748
- {
749
- $temp = gzcompress($temp, $this->options['level']);
750
- $size = strlen($temp) - 6;
751
- $temp = substr($temp, 2, $size);
752
- }
753
- else
754
- $size = strlen($temp);
755
- $block .= pack("VVVvv", $crc32, $size, $current['stat'][7], strlen($current['name2']), 0x0000);
756
- $block .= $current['name2'];
757
- $this->add_data($block);
758
- $this->add_data($temp);
759
- unset ($temp);
760
- $central .= pack("VvvvvVVVVvvvvvVV", 0x02014b50, 0x0014, $this->options['method'] == 0 ? 0x0000 : 0x000A, 0x0000,
761
- (isset($current['method']) || $this->options['method'] == 0) ? 0x0000 : 0x0008, $timedate,
762
- $crc32, $size, $current['stat'][7], strlen($current['name2']), 0x0000, 0x0000, 0x0000, 0x0000, 0x00000000, $offset);
763
- $central .= $current['name2'];
764
- $files++;
765
- $offset += (30 + strlen($current['name2']) + $size);
766
- }
767
- else
768
- $this->error[] = "Could not open file {$current['name']} for reading. It was not added.";
769
- }
770
-
771
- $this->add_data($central);
772
-
773
- $this->add_data(pack("VvvvvVVv", 0x06054b50, 0x0000, 0x0000, $files, $files, strlen($central), $offset,
774
- !empty ($this->options['comment']) ? strlen($this->options['comment']) : 0x0000));
775
-
776
- if (!empty ($this->options['comment']))
777
- $this->add_data($this->options['comment']);
778
-
779
- chdir($pwd);
780
-
781
- return 1;
782
- }
783
- }
784
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/class-wpadm-archive.php CHANGED
@@ -2,10 +2,6 @@
2
  if (!defined('PCLZIP_TEMPORARY_DIR')) {
3
  define('PCLZIP_TEMPORARY_DIR', WPAdm_Core::getTmpDir() . '/');
4
  }
5
-
6
- if (!defined('PCLZIP_SEPARATOR')) {
7
- define('PCLZIP_SEPARATOR', '<|>');
8
- }
9
  if ( !class_exists("PclZip") ) {
10
  require_once dirname(__FILE__) . '/pclzip.lib.php';
11
  }
@@ -13,431 +9,27 @@ if (!class_exists('WPAdm_Archive')) {
13
  class WPAdm_Archive {
14
  private $remove_path = '';
15
  private $files = array();
16
- public $file_zip = '';
17
- private $type_backup = array();
18
  /**
19
  * @var PclZip
20
  */
21
  private $archive;
22
  private $md5_file = '';
23
  public $error = '';
24
-
25
- public $anew = false;
26
-
27
 
28
- private $method = '';
29
-
30
- public function __construct($file, $md5_file = '') {
31
- if (class_exists('wpadm_wp_full_backup_dropbox')) {
32
- $this->type_backup = wpadm_wp_full_backup_dropbox::getTypeBackup();
33
- }
34
- $this->file_zip = $file;
35
- $this->archive = new PclZip($file);
36
  $this->files[] = $file;
37
  $this->md5_file = $md5_file;
38
  }
39
 
40
- public function zipArhive($file_to_arhive = array())
41
- {
42
- if ( isset( $this->type_backup['zip_archive'] ) && $this->type_backup['zip_archive'] == 1 && !empty($file_to_arhive) ) {
43
- $command = $this->getCommandToArchive('zip_archive', $file_to_arhive);
44
- if (!empty($command)) {
45
- $command_return = array();
46
- $result_command = @exec($command, $command_return);
47
-
48
- $res = $this->parseResultZip($command_return);
49
-
50
- if ($res['add'] == count($file_to_arhive)) {
51
- $files = implode(PCLZIP_SEPARATOR, $file_to_arhive);
52
- $this->saveMd5($files);
53
- return true;
54
- }
55
- if ( file_exists( $this->file_zip ) && $res['error'] === 0 ) {
56
- $files = implode(PCLZIP_SEPARATOR, $file_to_arhive);
57
- $this->saveMd5($files);
58
- return true;
59
- }
60
- }
61
- }
62
- return false;
63
- }
64
-
65
- public function targzArchive( $file_to_arhive = array() )
66
- {
67
- if ( isset( $this->type_backup['targz_archive'] ) && $this->type_backup['targz_archive'] == 1 && !empty($file_to_arhive) ) {
68
-
69
- if ( $this->tarGzCommandArhive($file_to_arhive) ) {
70
- return true;
71
- }
72
- if ( !function_exists( 'gzencode' ) ) {
73
- $this->error = __( 'Functions for gz compression not available', 'dropbox-backup' );
74
- return false;
75
- }
76
-
77
- if ( strpos($this->file_zip, '.zip') !== false ) {
78
- $this->file_zip = str_replace('.zip', '.tar.gz', $this->file_zip);
79
- }
80
- $this->method = 'targz';
81
-
82
- $this->archive = fopen( $this->file_zip, 'ab' );
83
-
84
- $n = count($file_to_arhive);
85
- for($i = 0; $i < $n; $i++) {
86
- $this->addToTargz($file_to_arhive[$i], '');
87
- $this->saveMd5( $file_to_arhive[$i] );
88
- }
89
- $this->close();
90
- /* include_once dirname(__FILE__) . '/archive.php';
91
- $gz = new wpadm_gzip_file($this->file_zip);
92
- $gz->set_options( array('basedir' => ABSPATH, 'delete_path_in_archive' => $this->remove_path ) );
93
- $gz->add_files( $file_to_arhive );
94
- $gz->create_archive();
95
- if (!empty( $gz->error ) ) {
96
- $this->error = implode(" ", $gz->error );
97
- WPAdm_Core::log( $this->error );
98
- return false;
99
- }
100
- $this->saveMd5( implode( PCLZIP_SEPARATOR, $file_to_arhive) );
101
- */
102
-
103
- /*if ( strpos($this->file_zip, '.tar.gz') !== false ) {
104
- $this->file_zip = str_replace('.tar.gz', '.zip', $this->file_zip);
105
- } */
106
-
107
- if ( file_exists($this->file_zip) ) {
108
- return true;
109
- }
110
- }
111
- return false;
112
- }
113
-
114
- private function addToTargz($file, $file_in)
115
- {
116
- $file = str_replace('\\', '/', $file);
117
- if ( empty( $file_in ) ) {
118
- $serach = str_replace('\\', '/', ABSPATH);
119
- $file_in = str_replace($serach, '', $file);
120
- }
121
-
122
- $file_in = str_replace( array( "?", "<", ">", ":", "%","\"", "*", "|", chr(0) ) , '', $file_in );
123
-
124
- if ( version_compare( PHP_VERSION, '5.3', '>=' ) ) {
125
- clearstatcache(true, $file);
126
- }
127
-
128
- if ( ! is_readable( $file ) ) {
129
- $this->error = sprintf( __( 'File %s is not readable or does not exist', 'dropbox-backup' ), $file );
130
- return false;
131
- }
132
- $this->add_tar_file( $file, $file_in );
133
-
134
- }
135
-
136
- private function add_tar_file($file, $file_in)
137
- {
138
- if ( ! $this->check_archive( $file ) ) {
139
- return false;
140
- }
141
- $chunk_size = 1024 * 1024 * 4;
142
-
143
- //Limit string of file name in tar archive
144
- if ( strlen( $file_in ) <= 100 ) {
145
- $filename = $file_in;
146
- $filename_prefix = "";
147
- } else {
148
- $filename_offset = strlen( $file_in ) - 100;
149
- $split_pos = strpos( $file_in, '/', $filename_offset );
150
- if ( $split_pos === FALSE ) {
151
- $split_pos = strrpos( $file_in, '/' );
152
- }
153
- $filename = substr( $file_in, $split_pos + 1 );
154
- $filename_prefix = substr( $file_in, 0, $split_pos );
155
- if ( strlen( $filename ) > 100 ) {
156
- $filename = substr( $filename, -100 );
157
- WPAdm_Core::log( sprintf( __( 'File name "%1$s" is too long to be saved correctly in archive!', 'dropbox-backup' ), $file_in ) );
158
- }
159
- if ( strlen( $filename_prefix ) > 155 ) {
160
- WPAdm_Core::log( sprintf( __( 'File path "%1$s" is too long to be saved correctly in archive!', 'dropbox-backup' ), $file_in) );
161
- }
162
- }
163
- $file_stat = stat( $file );
164
- if ( ! $file_stat ) {
165
- return false;
166
- }
167
- $file_stat[ 'size' ] = abs( (int) $file_stat[ 'size' ] );
168
- //open file
169
- if ( $file_stat[ 'size' ] > 0 ) {
170
- if ( ! ( $fd = fopen( $file, 'rb' ) ) ) {
171
- $this->error = sprintf( __( 'Cannot open source file %s for archiving', 'dropbox-backup' ), $file );
172
- return false;
173
- }
174
- }
175
- $fileowner = __( "Unknown", "dropbox-backup" );
176
- $filegroup = __( "Unknown", "dropbox-backup" );
177
- if ( function_exists( 'posix_getpwuid' ) ) {
178
- $info = posix_getpwuid( $file_stat[ 'uid' ] );
179
- $fileowner = $info[ 'name' ];
180
- $info = posix_getgrgid( $file_stat[ 'gid' ] );
181
- $filegroup = $info[ 'name' ];
182
- }
183
- // Generate the TAR header for this file
184
- $chunk = pack( "a100a8a8a8a12a12a8a1a100a6a2a32a32a8a8a155a12",
185
- $filename, //name of file 100
186
- sprintf( "%07o", $file_stat[ 'mode' ] ), //file mode 8
187
- sprintf( "%07o", $file_stat[ 'uid' ] ), //owner user ID 8
188
- sprintf( "%07o", $file_stat[ 'gid' ] ), //owner group ID 8
189
- sprintf( "%011o", $file_stat[ 'size' ] ), //length of file in bytes 12
190
- sprintf( "%011o", $file_stat[ 'mtime' ] ), //modify time of file 12
191
- " ", //checksum for header 8
192
- 0, //type of file 0 or null = File, 5=Dir
193
- "", //name of linked file 100
194
- "ustar", //USTAR indicator 6
195
- "00", //USTAR version 2
196
- $fileowner, //owner user name 32
197
- $filegroup, //owner group name 32
198
- "", //device major number 8
199
- "", //device minor number 8
200
- $filename_prefix, //prefix for file name 155
201
- "" ); //fill block 12
202
-
203
- $checksum = 0;
204
- for ( $i = 0; $i < 512; $i ++ ) {
205
- $checksum += ord( substr( $chunk, $i, 1 ) );
206
- }
207
-
208
- $checksum = pack( "a8", sprintf( "%07o", $checksum ) );
209
- $chunk = substr_replace( $chunk, $checksum, 148, 8 );
210
-
211
- if ( isset( $fd ) && is_resource( $fd ) ) {
212
- // read/write files in 512 bite Blocks
213
- while ( ( $content = fread( $fd, 512 ) ) != '' ) {
214
- $chunk .= pack( "a512", $content );
215
- if ( strlen( $chunk ) >= $chunk_size ) {
216
- if ( WPAdm_Running::is_stop() ) {
217
- if ( $this->method == 'targz' ) {
218
- $chunk = gzencode( $chunk );
219
- }
220
- if ( $this->method == 'tarbz2' ) {
221
- $chunk = bzcompress( $chunk );
222
- }
223
- fwrite( $this->archive, $chunk );
224
- $chunk = '';
225
- }
226
- }
227
- }
228
- fclose( $fd );
229
- }
230
-
231
- if ( ! empty( $chunk ) ) {
232
- if ( $this->method == 'targz' ) {
233
- $chunk = gzencode( $chunk );
234
- }
235
- if ( $this->method == 'tarbz2' ) {
236
- $chunk = bzcompress( $chunk );
237
- }
238
- fwrite( $this->archive, $chunk );
239
- }
240
-
241
- return true;
242
- }
243
-
244
- private function check_archive( $file = '' ) {
245
-
246
- $file_size = 0;
247
- if ( ! empty( $file ) ) {
248
- $file_size = filesize( $file );
249
- if ( $file_size === FALSE ) {
250
- $file_size = 0;
251
- }
252
- }
253
-
254
- if ( is_resource( $this->archive ) ) {
255
- $info_archive = fstat( $this->archive );
256
- $archive_size = $info_archive[ 'size' ];
257
- } else {
258
- $archive_size = filesize( $this->file_zip );
259
- if ( $archive_size === FALSE ) {
260
- $archive_size = PHP_INT_MAX;
261
- }
262
- }
263
-
264
- $archive_size = $archive_size + $file_size;
265
- if ( $archive_size >= PHP_INT_MAX ) {
266
- $this->error = sprintf( __( 'If %s will be added to your backup archive, the archive will be too large for operations with this PHP Version. You might want to consider splitting the backup job in multiple jobs with less files each.', 'dropbox-backup' ), $file_to_add );
267
- return false;
268
- }
269
-
270
- return true;
271
- }
272
-
273
- public function close()
274
- {
275
- if ($this->method == 'targz') {
276
- $end = pack( "a1024", "" );
277
- if ( $this->method === 'targz' ) {
278
- $end = gzencode( $end );
279
- }
280
- if ( $this->method === 'tarbz2' ) {
281
- $end = bzcompress( $end );
282
- }
283
- fwrite( $this->archive, $end );
284
- }
285
- }
286
-
287
- public function parseResultZip($command_return)
288
- {
289
- $add = 0;
290
- $error = 0;
291
- if (!empty( $command_return) ) {
292
- $n = count($command_return);
293
- for($i = 0; $i < $n; $i++) {
294
- if (strpos($command_return[$i], 'add') !== false || strpos($command_return[$i], 'updating') !== false) {
295
- $add ++;
296
- } elseif (strpos($command_return[$i], 'error') !== false || strpos($command_return[$i], 'warning') !== false ) {
297
- $error++;
298
- $this->error .= " " . $command_return[$i];
299
- }
300
- }
301
- }
302
- return array( 'add' => $add, 'error' => $error );
303
-
304
- }
305
-
306
- public function tarGzCommandArhive($file_to_arhive = array())
307
- {
308
-
309
- $command = $this->getCommandToArchive('tar_archive', $file_to_arhive);
310
- if (!empty($command)) {
311
- $command_return = array();
312
- $result_command = @exec ($command, $command_return);
313
- if (count($file_to_arhive) == count($command_return)) {
314
- $files = implode(PCLZIP_SEPARATOR, $file_to_arhive);
315
- $this->saveMd5($files);
316
- return true;
317
- }
318
- if (count($command_return) > 0) {
319
- $files = implode(PCLZIP_SEPARATOR, $file_to_arhive);
320
- $this->saveMd5($files);
321
- return true;
322
- }
323
- if (file_exists($this->file_zip)) {
324
- $files = implode(PCLZIP_SEPARATOR, $file_to_arhive);
325
- $this->saveMd5($files);
326
- return true;
327
- }
328
- $this->error = "Files not Adding to arhive";
329
- if ( strpos($this->file_zip, '.tar.gz') !== false ) {
330
- $this->file_zip = str_replace('.tar.gz', '.zip', $this->file_zip);
331
- }
332
- }
333
- return false;
334
- }
335
-
336
- public function getCommandToArchive($type = 'zip_archive', $files = array() )
337
- {
338
- $return = '';
339
- $remove_dir = '';
340
- switch($type) {
341
- case 'zip_archive':
342
- if (!empty( $this->remove_path ) ) {
343
- $remove_dir = 'cd ' . $this->remove_path . ' &&';
344
- $files_str = '"' . implode('" "', $files) . '"';
345
- $files_str = str_replace($this->remove_path, './', $files_str);
346
- $zip = str_replace($this->remove_path, './', $this->file_zip);
347
- } else {
348
- $files_str = '"' . implode('" "', $files) . '"';
349
- $zip = $this->file_zip;
350
- }
351
-
352
- $return .= trim( "$remove_dir zip {$zip} " . $files_str );
353
- break;
354
- case 'tar_archive':
355
- if ( strpos($this->file_zip, '.zip') !== false ) {
356
- $this->file_zip = str_replace('.zip', '.tar.gz', $this->file_zip);
357
- }
358
-
359
- if (!empty( $this->remove_path) ) {
360
- $remove_dir = '-C ' . $this->remove_path . ' ';
361
- }
362
- $files_str = '"' . implode('" "', $files) . '"';
363
- $files_str = str_replace($this->remove_path, './', $files_str);
364
- $u = 'c';
365
- if (file_exists($this->file_zip)) {
366
- $u = 'r';
367
- }
368
- $return = trim( "tar -{$u}zvf {$this->file_zip} " . $remove_dir . $files_str );
369
- break;
370
- }
371
- return $return;
372
-
373
- }
374
-
375
- public function clearBackupDirectory($type = '')
376
- {
377
- if (!empty( $type ) ) {
378
- $dir = substr($this->file_zip, 0, strlen($this->file_zip) - strlen( basename( $this->file_zip ) ) );
379
- $open_dir = opendir( $dir );
380
- if ($open_dir) {
381
- while($d = readdir($open_dir)) {
382
- if ($d != '.' && $d != '..') {
383
- if ( substr($d, $type) !== false ) {
384
- @unlink($dir . '/' . $d);
385
- }
386
- }
387
- }
388
- }
389
- }
390
- }
391
-
392
  public function add($file)
393
  {
394
  return $this->packed($file);
395
  }
396
  public function packed($file)
397
  {
398
- @ini_set("memory_limit", "256M");
399
  if ( WPAdm_Running::is_stop() ) {
400
- $files = explode(PCLZIP_SEPARATOR, $file);
401
- $n = count($files);
402
- $this->setToLogArhive( __('Add to archive: ', 'dropbox-backup') . $this->file_zip );
403
- for($i = 0; $i < $n; $i++) {
404
-
405
- $this->setToLogArhive(__("Add File: ", 'dropbox-backup' ) . $files[$i] . ' [' . WPADM_getSize( filesize($files[$i]) ) . ']' . '[' . wpadm_class::perm($files[$i]) . ']' );
406
- }
407
- $file = implode(PCLZIP_SEPARATOR, $files);
408
- $command_targz_test = WPAdm_Running::getCommandResultData('test_targz_archive');
409
- if( !empty($command_targz_test) && $command_targz_test === true ) {
410
- if ( WPAdm_Running::is_stop() ) {
411
- WPAdm_Core::log(__('Trying to add files to archive using Tar shell or tar class', 'dropbox-backup') );
412
- $tarGz = $this->targzArchive($files); // .tar.gz archive
413
- if ($tarGz) {
414
- WPAdm_Core::log(__('Trying to add files to archive using Tar shell or tar class was successful', 'dropbox-backup') );
415
- return true;
416
- }
417
- $this->anew = true;
418
- $this->clearBackupDirectory('.tar.gz');
419
- $this->clearBackupDirectory('.md5');
420
- $this->error = '';
421
- WPAdm_Core::log(__('Add files to archive using Tar shell or tar class wasn\'t successful', 'dropbox-backup') );
422
- WPAdm_Running::setCommandResultData('test_targz_archive', false);
423
- return false;
424
- }
425
- }
426
- $command_zip_test = WPAdm_Running::getCommandResultData('test_zip_archive');
427
- if ( !empty($command_zip_test) && $command_zip_test === true ) {
428
- if ( WPAdm_Running::is_stop() ) {
429
- WPAdm_Core::log(__('Trying to add files to archive using Zip shell', 'dropbox-backup') );
430
- $zip_shell = $this->zipArhive($files); // command zip
431
- if ($zip_shell) {
432
- WPAdm_Core::log(__('Add files to archive using Zip shell was successful', 'dropbox-backup') );
433
- return true;
434
- }
435
- $this->anew = true;
436
- WPAdm_Core::log(__('Add files to archive using Zip shell wasn\'t successful', 'dropbox-backup') );
437
- WPAdm_Running::setCommandResultData('test_zip_archive', false);
438
- return false;
439
- }
440
- }
441
  if (empty($this->remove_path)) {
442
  if ( WPAdm_Running::is_stop() ) {
443
  $res = $this->archive->add($file);
@@ -449,7 +41,6 @@ if (!class_exists('WPAdm_Archive')) {
449
  }
450
  if ( WPAdm_Running::is_stop() ) {
451
  if ($res == 0) {
452
- $this->checkError($file);
453
  WPAdm_Core::log( $this->archive->errorInfo(true) );
454
  if (file_exists($this->md5_file)) {
455
  unset($this->md5_file);
@@ -463,25 +54,11 @@ if (!class_exists('WPAdm_Archive')) {
463
  return true;
464
  }
465
 
466
- protected function checkError($file)
467
- {
468
- $count = WPAdm_Running::getCommandResultData('count_error_zip');
469
- if ( empty($count) || $count == 0 ) {
470
- if ( $this->archive->errorCode() == -10 ) { // Unable to find End of Central Dir Record signature
471
- WPAdm_Core::rmdir($this->file_zip);
472
- WPAdm_Running::getCommandResultData('count_error_zip_signature', 1);
473
- $this->packed($file);
474
- return true;
475
- }
476
- }
477
- return false;
478
- }
479
-
480
  protected function saveMd5($file) {
481
  if ($this->md5_file) {
482
- $files = explode(PCLZIP_SEPARATOR, $file); {
483
  foreach($files as $f) {
484
- file_put_contents($this->md5_file, $f . "\t" . @md5_file($f) . "\t" . basename($this->file_zip) . "\n", FILE_APPEND);
485
  }
486
  }
487
  }
@@ -490,11 +67,5 @@ if (!class_exists('WPAdm_Archive')) {
490
  public function setRemovePath($remove_path) {
491
  $this->remove_path = $remove_path;
492
  }
493
-
494
- public function setToLogArhive($msg)
495
- {
496
- $file_log = WPADM_Core::getTmpDir() . '/log-archive.log';
497
- file_put_contents( $file_log, date("Y-m-d H:i:s") . "\t{$msg}\n", FILE_APPEND );
498
- }
499
  }
500
  }
2
  if (!defined('PCLZIP_TEMPORARY_DIR')) {
3
  define('PCLZIP_TEMPORARY_DIR', WPAdm_Core::getTmpDir() . '/');
4
  }
 
 
 
 
5
  if ( !class_exists("PclZip") ) {
6
  require_once dirname(__FILE__) . '/pclzip.lib.php';
7
  }
9
  class WPAdm_Archive {
10
  private $remove_path = '';
11
  private $files = array();
 
 
12
  /**
13
  * @var PclZip
14
  */
15
  private $archive;
16
  private $md5_file = '';
17
  public $error = '';
 
 
 
18
 
19
+ public function __construct($file, $md5_file = '') {
20
+ $this->archive = new PclZip($file);
 
 
 
 
 
 
21
  $this->files[] = $file;
22
  $this->md5_file = $md5_file;
23
  }
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  public function add($file)
26
  {
27
  return $this->packed($file);
28
  }
29
  public function packed($file)
30
  {
31
+ ini_set("memory_limit", "256M");
32
  if ( WPAdm_Running::is_stop() ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  if (empty($this->remove_path)) {
34
  if ( WPAdm_Running::is_stop() ) {
35
  $res = $this->archive->add($file);
41
  }
42
  if ( WPAdm_Running::is_stop() ) {
43
  if ($res == 0) {
 
44
  WPAdm_Core::log( $this->archive->errorInfo(true) );
45
  if (file_exists($this->md5_file)) {
46
  unset($this->md5_file);
54
  return true;
55
  }
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  protected function saveMd5($file) {
58
  if ($this->md5_file) {
59
+ $files = explode(',', $file); {
60
  foreach($files as $f) {
61
+ file_put_contents($this->md5_file, $f . "\t" . @md5_file($f) . "\t" . basename($this->archive->zipname) . "\n", FILE_APPEND);
62
  }
63
  }
64
  }
67
  public function setRemovePath($remove_path) {
68
  $this->remove_path = $remove_path;
69
  }
 
 
 
 
 
 
70
  }
71
  }
modules/class-wpadm-command-context.php CHANGED
@@ -1,7 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  if (!class_exists('WPAdm_Command_Context')) {
6
  class WPAdm_Command_Context {
7
  private $params = array();
1
  <?php
 
 
 
2
  if (!class_exists('WPAdm_Command_Context')) {
3
  class WPAdm_Command_Context {
4
  private $params = array();
modules/class-wpadm-command-factory.php CHANGED
@@ -1,9 +1,4 @@
1
  <?php
2
-
3
-
4
- if ( ! defined( 'ABSPATH' ) ) exit;
5
-
6
-
7
  /**
8
  * Class WPAdm_Command_Factory
9
  */
1
  <?php
 
 
 
 
 
2
  /**
3
  * Class WPAdm_Command_Factory
4
  */
modules/class-wpadm-command.php CHANGED
@@ -1,8 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
-
6
  /**
7
  * Class WPAdm_Сommand
8
  */
1
  <?php
 
 
 
 
2
  /**
3
  * Class WPAdm_Сommand
4
  */
modules/class-wpadm-core.php CHANGED
@@ -1,7 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-result.php';
6
  require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-command.php';
7
  require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-command-context.php';
@@ -33,8 +30,6 @@ if (!class_exists('WPAdm_Core')) {
33
  private $result;
34
 
35
  private $plugin;
36
-
37
- private $sign = false;
38
 
39
  public $name = '',
40
  $time = '';
@@ -44,31 +39,23 @@ if (!class_exists('WPAdm_Core')) {
44
  public static $pl_dir;
45
 
46
  public static $error = '';
47
-
48
- private static $self = null;
49
 
50
  public static $plugin_name;
51
 
52
  private static $cron_method = array('local_backup', 'send_to_dropbox');
53
 
54
 
55
- public function __construct(array $request, $plugin = '', $plugin_dir = '', $sign = false) {
56
  $this->result = new WPAdm_Result();
57
  $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
58
  $this->request = $request;
59
- if ( empty( $this->request ) ) {
60
- return;
61
- }
62
  $this->plugin = $plugin;
63
- $this->sign = $sign;
64
  self::$pl_dir = $plugin_dir;
65
  self::$plugin_name = $plugin;
66
  // auth request
67
- if ( !$this->sign ) {
68
- if (!$this->auth()) {
69
- return;
70
- }
71
- }
72
  if ('connect' == $request['method']) {
73
  $this->connect();
74
  } elseif ('local' == $request['method']){
@@ -101,7 +88,7 @@ if (!class_exists('WPAdm_Core')) {
101
  if (!file_exists($tmp_dir . '/index.php')) {
102
  @file_put_contents($tmp_dir . '/index.php', '');
103
  if (!file_exists($tmp_dir . '/index.php')) {
104
- self::$error = ( sprintf( __('Backup creating<br /><br />Please check the permissions on folder "%s".<br />Failed to create folder.', 'dropbxo-backup'), $tmp_dir ) );
105
  }
106
  }
107
  return $tmp_dir;
@@ -189,7 +176,7 @@ if (!class_exists('WPAdm_Core')) {
189
  }
190
 
191
  /*
192
- * auth request
193
  */
194
  private function auth() {
195
  $this->pub_key = get_option('wpadm_pub_key');
@@ -218,7 +205,7 @@ if (!class_exists('WPAdm_Core')) {
218
 
219
  $sign = md5(serialize($this->request['params']));
220
  //openssl_public_decrypt($this->request['sign'], $request_sign, $this->pub_key);
221
- $ret = $this->verifySignature(base64_decode( $this->request['sign'] ), base64_decode( $this->request['sign2'] ), $this->pub_key, $sign);
222
 
223
 
224
  //$ret = ($sign == $request_sign);
@@ -227,22 +214,22 @@ if (!class_exists('WPAdm_Core')) {
227
  }
228
  return $ret;
229
  }
230
-
231
-
232
  /**
233
- * create dir
234
  * @param $dir
235
  */
236
  static public function mkdir($dir) {
237
  if(!file_exists($dir)) {
238
  @mkdir($dir, 0755);
239
  if (!is_dir($dir)) {
240
- self::$error = str_replace("&s", $dir, __('Backup creating<br /><br />Please check the permissions on folder "&s". Failed to create folder.','dropbox-backup') );
241
  } else {
242
  //todo: права доступа
243
  @file_put_contents($dir . '/index.php', '<?php echo "Hello World!"; ');
244
  if ( !is_writable($dir . '/index.php') ) {
245
- self::$error = str_replace("&s", $dir . '/index.php' , __('Backup creating<br /><br />Please check the permissions on file "&s". Failed to create file.','dropbox-backup') );
246
  }
247
  }
248
  }
@@ -258,21 +245,13 @@ if (!class_exists('WPAdm_Core')) {
258
  public function getResult() {
259
  return $this->result;
260
  }
261
-
262
- public static function getInstance()
263
- {
264
- if (is_null( self::$self ) ) {
265
- self::$self = new self( array() );
266
- }
267
- return self::$self;
268
- }
269
 
270
 
271
  public function verifySignature($sign, $sign2, $pub_key, $text) {
272
- if (function_exists('openssl_public_decrypt')) {
273
  openssl_public_decrypt($sign, $request_sign, $pub_key);
274
  $ret = ($text == $request_sign);
275
- return $ret;
276
  } else {
277
  set_include_path(get_include_path() . PATH_SEPARATOR . self::getPluginDir() . '/modules/phpseclib');
278
  require_once 'Crypt/RSA.php';
1
  <?php
 
 
 
2
  require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-result.php';
3
  require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-command.php';
4
  require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-command-context.php';
30
  private $result;
31
 
32
  private $plugin;
 
 
33
 
34
  public $name = '',
35
  $time = '';
39
  public static $pl_dir;
40
 
41
  public static $error = '';
 
 
42
 
43
  public static $plugin_name;
44
 
45
  private static $cron_method = array('local_backup', 'send_to_dropbox');
46
 
47
 
48
+ public function __construct(array $request, $plugin = '', $plugin_dir = '') {
49
  $this->result = new WPAdm_Result();
50
  $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
51
  $this->request = $request;
 
 
 
52
  $this->plugin = $plugin;
 
53
  self::$pl_dir = $plugin_dir;
54
  self::$plugin_name = $plugin;
55
  // auth request
56
+ if (!$this->auth()) {
57
+ return;
58
+ }
 
 
59
  if ('connect' == $request['method']) {
60
  $this->connect();
61
  } elseif ('local' == $request['method']){
88
  if (!file_exists($tmp_dir . '/index.php')) {
89
  @file_put_contents($tmp_dir . '/index.php', '');
90
  if (!file_exists($tmp_dir . '/index.php')) {
91
+ self::$error = ( sprintf( __('Failed to create a file, please check the permissions on the folders "%s".<br /> Plugin is working incorrectly.', 'dropbxo-backup'), $tmp_dir ) );
92
  }
93
  }
94
  return $tmp_dir;
176
  }
177
 
178
  /*
179
+ * Авторизация запроса
180
  */
181
  private function auth() {
182
  $this->pub_key = get_option('wpadm_pub_key');
205
 
206
  $sign = md5(serialize($this->request['params']));
207
  //openssl_public_decrypt($this->request['sign'], $request_sign, $this->pub_key);
208
+ $ret = $this->verifySignature($this->request['sign'], $this->request['sign2'], $this->pub_key, $sign);
209
 
210
 
211
  //$ret = ($sign == $request_sign);
214
  }
215
  return $ret;
216
  }
217
+
218
+
219
  /**
220
+ * Создаем папку
221
  * @param $dir
222
  */
223
  static public function mkdir($dir) {
224
  if(!file_exists($dir)) {
225
  @mkdir($dir, 0755);
226
  if (!is_dir($dir)) {
227
+ self::$error = str_replace("&s", $dir, __('Failed to create a file, please check the permissions on the folders "&s".','dropbox-backup') );
228
  } else {
229
  //todo: права доступа
230
  @file_put_contents($dir . '/index.php', '<?php echo "Hello World!"; ');
231
  if ( !is_writable($dir . '/index.php') ) {
232
+ self::$error = str_replace("&s", $dir, __('Failed to create a file, please check the permissions on the folders "&s".','dropbox-backup') );
233
  }
234
  }
235
  }
245
  public function getResult() {
246
  return $this->result;
247
  }
 
 
 
 
 
 
 
 
248
 
249
 
250
  public function verifySignature($sign, $sign2, $pub_key, $text) {
251
+ if (function_exists('openssl_public_decrypt')) {
252
  openssl_public_decrypt($sign, $request_sign, $pub_key);
253
  $ret = ($text == $request_sign);
254
+ return $ret;
255
  } else {
256
  set_include_path(get_include_path() . PATH_SEPARATOR . self::getPluginDir() . '/modules/phpseclib');
257
  require_once 'Crypt/RSA.php';
modules/class-wpadm-method-class.php CHANGED
@@ -1,7 +1,5 @@
1
  <?php
2
 
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
 
6
  if (!class_exists('WPAdm_Method_Class')) {
7
  abstract class WPAdm_Method_Class {
1
  <?php
2
 
 
 
3
 
4
  if (!class_exists('WPAdm_Method_Class')) {
5
  abstract class WPAdm_Method_Class {
modules/class-wpadm-mysqldump.php CHANGED
@@ -1,9 +1,4 @@
1
  <?php
2
-
3
-
4
- if ( ! defined( 'ABSPATH' ) ) exit;
5
-
6
-
7
  if (!class_exists('WPAdm_Mysqldump')) {
8
  class WPAdm_Mysqldump {
9
 
@@ -52,7 +47,7 @@ if (!class_exists('WPAdm_Mysqldump')) {
52
  if (!isset($proc_data['optimize'])) {
53
  if ( WPAdm_Running::is_stop() ) {
54
  $link = $this->connect($db);
55
- WPAdm_Core::log( __('Optimization of database tables was started' ,'dropbox-backup') );
56
  $n = $link->query('SHOW TABLES');
57
  WPAdm_Process::init('optimization', $n);
58
  $result = $link->last_result;
@@ -70,10 +65,10 @@ if (!class_exists('WPAdm_Mysqldump')) {
70
  $tables[$res[0]] = 1;
71
  $proc_data['optimize_table'] = $tables;
72
  WPAdm_Running::setCommandResultData('db', $proc_data);
73
- $log = str_replace('%s', $res[0], __('Error during database table optimization: `%s`' ,'dropbox-backup') );
74
  WPAdm_Core::log($log);
75
  } else {
76
- $log = str_replace('%s', $res[0], __('Database table optimization of `%s` was successfully' ,'dropbox-backup') );
77
  WPAdm_Core::log($log);
78
  WPAdm_Process::set('optimization', ( $i + 1 ) );
79
  }
@@ -81,7 +76,7 @@ if (!class_exists('WPAdm_Mysqldump')) {
81
  }
82
  }
83
  if ( WPAdm_Running::is_stop() ) {
84
- WPAdm_Core::log( __('Optimization of database tables was Finished' ,'dropbox-backup') );
85
  $proc_data = WPAdm_Running::getCommandResultData('db');
86
  $proc_data['optimize'] = true;
87
  WPAdm_Running::setCommandResultData('db', $proc_data);
@@ -96,7 +91,7 @@ if (!class_exists('WPAdm_Mysqldump')) {
96
  if (!isset($proc_data['work'])) {
97
  $link = $this->connect($db);
98
  if ( WPAdm_Running::is_stop() ) {
99
- WPAdm_Core::log( __('Repairing of MySQL database was started' ,'dropbox-backup') );
100
  $n = $link->query('SHOW TABLE STATUS;');
101
  WPAdm_Process::init('repair', $n);
102
  $result = $link->last_result;
@@ -113,7 +108,7 @@ if (!class_exists('WPAdm_Mysqldump')) {
113
  if ( WPAdm_Running::is_stop() ) {
114
  $row = get_object_vars( $result[$i] );
115
  $tables[] = $row;
116
- WPAdm_Core::log('Start repairing of table `' . $row['Name'] . '`' );
117
  $res = $link->query("REPAIR TABLE {$row['Name']};");
118
  if ($res == 1) {
119
  $proc_data = WPAdm_Running::getCommandResultData('repair');
@@ -123,7 +118,7 @@ if (!class_exists('WPAdm_Mysqldump')) {
123
  $this->setError($link->last_error);
124
  }
125
  WPAdm_Process::set('repair', ($i + 1) );
126
- WPAdm_Core::log('Table repairing of `' . $row['Name'] . '` was finished');
127
  }
128
  }
129
  if ( WPAdm_Running::is_stop() ) {
@@ -141,7 +136,7 @@ if (!class_exists('WPAdm_Mysqldump')) {
141
  if (!isset($proc_data['mysqldump'])) {
142
  $link = $this->connect($db);
143
  if ( WPAdm_Running::is_stop() ) {
144
- WPAdm_Core::log( __('Creating of MySQL dump was started' ,'dropbox-backup') );
145
  $tables = array();
146
  $n = $link->query('SHOW TABLES');
147
  WPAdm_Process::init('mysqldump', $n);
@@ -189,40 +184,36 @@ if (!class_exists('WPAdm_Mysqldump')) {
189
  $proc_data = WPAdm_Running::getCommandResultData('db');
190
  $proc_data['mysqldump_table'][$table] = 1;
191
  WPAdm_Running::setCommandResultData('db', $proc_data);
192
- $log = str_replace('%s', $table, __('Add table "%s" to the database dump' ,'dropbox-backup') );
193
  WPAdm_Core::log( $log );
194
  }
195
  }
196
  if ( WPAdm_Running::is_stop() ) {
197
  $while = true;
198
  while($while) {
199
- $insert_values = false;
200
  if ( WPAdm_Running::is_stop() ) {
201
  $table_db = WPAdm_Running::getCommandResultData('tabledb');
202
- if (isset($table_db[$table])) {
203
- if (isset($table_db[$table]['work']) && $table_db[$table]['work'] == 1) {
204
  $from = $table_db[$table]['from']; // value from
205
  $to = $table_db[$table]['to']; // value to
206
- $insert_values = true;
207
- }
208
  } else {
209
  $from = 0;
210
  $to = $this->rows;
211
- $insert_values = true;
212
  }
213
  }
214
-
215
  if (isset($from) && !empty($to) && $from >= 0 && $to >= 0 && $insert_values === true) {
216
  unset($link);
217
  $link = $this->connect($db);
218
- $num_fields = $link->query( 'SELECT * FROM ' . $table . " LIMIT {$from}, {$to}" );
219
  if ($num_fields > 0) {
220
- WPAdm_Core::log( $link->last_error ) ;
221
  $result2 = $link->last_result;
222
- if ( WPAdm_Running::is_stop() ) {
223
- $log = __('Performing of database query:' ,'dropbox-backup') . ' SELECT * FROM ' . $table . " LIMIT {$from}, {$to}";
224
- WPAdm_Core::log( $log );
225
- }
226
  for ($i = 0; $i < $num_fields; $i++) {
227
  if ( WPAdm_Running::is_stop() ) {
228
  $return = '';
@@ -239,36 +230,41 @@ if (!class_exists('WPAdm_Mysqldump')) {
239
  $return .= ");\n";
240
  file_put_contents($filename, $return, FILE_APPEND);
241
  $from += 1;
242
- $table_db = WPAdm_Running::getCommandResultData('tabledb');
243
- $table_db[$table]['from'] = $from;
244
  $table_db[$table]['to'] = $to;
245
  $table_db[$table]['work'] = 1;
246
  WPAdm_Running::setCommandResultData('tabledb', $table_db);
 
247
  }
248
  }
249
  }
 
 
 
 
250
  } else {
251
  $while = false;
252
  if ( WPAdm_Running::is_stop() ) {
253
- $table_db = WPAdm_Running::getCommandResultData('tabledb');
254
  $table_db[$table]['work'] = 0;
255
- WPAdm_Running::setCommandResultData('tabledb', $table_db);
256
  WPAdm_Process::set('mysqldump', ( $key_tables + 1 ) );
257
  }
258
  }
259
  } else {
260
  $while = false;
261
  if ( WPAdm_Running::is_stop() ) {
262
- $table_db = WPAdm_Running::getCommandResultData('tabledb');
263
  $table_db[$table]['work'] = 0;
264
- WPAdm_Running::setCommandResultData('tabledb', $table_db);
265
  WPAdm_Process::set('mysqldump', ( $key_tables + 1 ) );
266
  }
267
  }
268
  }
269
  }
270
  if ( WPAdm_Running::is_stop() ) {
271
- $proc_data = WPAdm_Running::getCommandResultData('db');
272
  if (!isset($proc_data['mysqldump_table'][$table])) {
273
  $return ="\n\n\n";
274
  file_put_contents($filename, $return, FILE_APPEND);
@@ -278,7 +274,7 @@ if (!class_exists('WPAdm_Mysqldump')) {
278
  }
279
  if ( WPAdm_Running::is_stop() ) {
280
  unset($link);
281
- WPAdm_Core::log( __('Creating of MySQL database dump was finished' ,'dropbox-backup') );
282
  $proc_data = WPAdm_Running::getCommandResultData('db');
283
  $proc_data['mysqldump'] = true;
284
  WPAdm_Running::setCommandResultData('db', $proc_data);
@@ -298,11 +294,11 @@ if (!class_exists('WPAdm_Mysqldump')) {
298
  public function restore($db, $file)
299
  {
300
  $link = $this->connect($db);
301
- WPAdm_Core::log( __('Database restoring was started' ,'dropbox-backup') );
302
  $fo = fopen($file, "r");
303
  if (!$fo) {
304
- WPAdm_Core::log( __('Error during openening of file dump' ,'dropbox-backup') );
305
- $this->setError( __('Error during openening of file dump' ,'dropbox-backup') );
306
  return false;
307
  }
308
  $sql = "";
@@ -323,7 +319,7 @@ if (!class_exists('WPAdm_Mysqldump')) {
323
  }
324
  }
325
  }
326
- WPAdm_Core::log(__('Database restoring was finished' ,'dropbox-backup'));
327
  }
328
  }
329
  }
1
  <?php
 
 
 
 
 
2
  if (!class_exists('WPAdm_Mysqldump')) {
3
  class WPAdm_Mysqldump {
4
 
47
  if (!isset($proc_data['optimize'])) {
48
  if ( WPAdm_Running::is_stop() ) {
49
  $link = $this->connect($db);
50
+ WPAdm_Core::log( __('Optimize Database Tables was started' ,'dropbox-backup') );
51
  $n = $link->query('SHOW TABLES');
52
  WPAdm_Process::init('optimization', $n);
53
  $result = $link->last_result;
65
  $tables[$res[0]] = 1;
66
  $proc_data['optimize_table'] = $tables;
67
  WPAdm_Running::setCommandResultData('db', $proc_data);
68
+ $log = str_replace('%s', $res[0], __('Error to Optimize Table `%s`' ,'dropbox-backup') );
69
  WPAdm_Core::log($log);
70
  } else {
71
+ $log = str_replace('%s', $res[0], __('Optimize Table `%s` was successfully' ,'dropbox-backup') );
72
  WPAdm_Core::log($log);
73
  WPAdm_Process::set('optimization', ( $i + 1 ) );
74
  }
76
  }
77
  }
78
  if ( WPAdm_Running::is_stop() ) {
79
+ WPAdm_Core::log( __('Optimize Database Tables was Finished' ,'dropbox-backup') );
80
  $proc_data = WPAdm_Running::getCommandResultData('db');
81
  $proc_data['optimize'] = true;
82
  WPAdm_Running::setCommandResultData('db', $proc_data);
91
  if (!isset($proc_data['work'])) {
92
  $link = $this->connect($db);
93
  if ( WPAdm_Running::is_stop() ) {
94
+ WPAdm_Core::log( __('MySQL of repair was started' ,'dropbox-backup') );
95
  $n = $link->query('SHOW TABLE STATUS;');
96
  WPAdm_Process::init('repair', $n);
97
  $result = $link->last_result;
108
  if ( WPAdm_Running::is_stop() ) {
109
  $row = get_object_vars( $result[$i] );
110
  $tables[] = $row;
111
+ WPAdm_Core::log('Start repair table `' . $row['Name'] . '`' );
112
  $res = $link->query("REPAIR TABLE {$row['Name']};");
113
  if ($res == 1) {
114
  $proc_data = WPAdm_Running::getCommandResultData('repair');
118
  $this->setError($link->last_error);
119
  }
120
  WPAdm_Process::set('repair', ($i + 1) );
121
+ WPAdm_Core::log('Finish repair table `' . $row['Name'] . '`');
122
  }
123
  }
124
  if ( WPAdm_Running::is_stop() ) {
136
  if (!isset($proc_data['mysqldump'])) {
137
  $link = $this->connect($db);
138
  if ( WPAdm_Running::is_stop() ) {
139
+ WPAdm_Core::log( __('MySQL of Dump was started' ,'dropbox-backup') );
140
  $tables = array();
141
  $n = $link->query('SHOW TABLES');
142
  WPAdm_Process::init('mysqldump', $n);
184
  $proc_data = WPAdm_Running::getCommandResultData('db');
185
  $proc_data['mysqldump_table'][$table] = 1;
186
  WPAdm_Running::setCommandResultData('db', $proc_data);
187
+ $log = str_replace('%s', $table, __('Add a table "%s" in the database dump' ,'dropbox-backup') );
188
  WPAdm_Core::log( $log );
189
  }
190
  }
191
  if ( WPAdm_Running::is_stop() ) {
192
  $while = true;
193
  while($while) {
194
+ $insert_values = false;
195
  if ( WPAdm_Running::is_stop() ) {
196
  $table_db = WPAdm_Running::getCommandResultData('tabledb');
197
+ if (isset($table_db[$table])) {
198
+ if (isset($table_db[$table]['work']) && $table_db[$table]['work'] == 1) {
199
  $from = $table_db[$table]['from']; // value from
200
  $to = $table_db[$table]['to']; // value to
201
+ $insert_values = true;
202
+ }
203
  } else {
204
  $from = 0;
205
  $to = $this->rows;
206
+ $insert_values = true;
207
  }
208
  }
209
+
210
  if (isset($from) && !empty($to) && $from >= 0 && $to >= 0 && $insert_values === true) {
211
  unset($link);
212
  $link = $this->connect($db);
213
+ $num_fields = $link->query( 'SELECT * FROM ' . $table . " LIMIT {$from}, {$to}" );
214
  if ($num_fields > 0) {
215
+ WPAdm_Core::log( $link->last_error ) ;
216
  $result2 = $link->last_result;
 
 
 
 
217
  for ($i = 0; $i < $num_fields; $i++) {
218
  if ( WPAdm_Running::is_stop() ) {
219
  $return = '';
230
  $return .= ");\n";
231
  file_put_contents($filename, $return, FILE_APPEND);
232
  $from += 1;
233
+ $table_db = WPAdm_Running::getCommandResultData('tabledb');
234
+ $table_db[$table]['from'] = $from;
235
  $table_db[$table]['to'] = $to;
236
  $table_db[$table]['work'] = 1;
237
  WPAdm_Running::setCommandResultData('tabledb', $table_db);
238
+
239
  }
240
  }
241
  }
242
+ if ( WPAdm_Running::is_stop() ) {
243
+ $log = str_replace(array('%s', '%from%', '%to%'), array($table, $from, $to), __('Add a table rows "%s" in the database dump from %from% to %to%' ,'dropbox-backup') );
244
+ WPAdm_Core::log( $log );
245
+ }
246
  } else {
247
  $while = false;
248
  if ( WPAdm_Running::is_stop() ) {
249
+ $table_db = WPAdm_Running::getCommandResultData('tabledb');
250
  $table_db[$table]['work'] = 0;
251
+ WPAdm_Running::setCommandResultData('tabledb', $table_db);
252
  WPAdm_Process::set('mysqldump', ( $key_tables + 1 ) );
253
  }
254
  }
255
  } else {
256
  $while = false;
257
  if ( WPAdm_Running::is_stop() ) {
258
+ $table_db = WPAdm_Running::getCommandResultData('tabledb');
259
  $table_db[$table]['work'] = 0;
260
+ WPAdm_Running::setCommandResultData('tabledb', $table_db);
261
  WPAdm_Process::set('mysqldump', ( $key_tables + 1 ) );
262
  }
263
  }
264
  }
265
  }
266
  if ( WPAdm_Running::is_stop() ) {
267
+ $proc_data = WPAdm_Running::getCommandResultData('db');
268
  if (!isset($proc_data['mysqldump_table'][$table])) {
269
  $return ="\n\n\n";
270
  file_put_contents($filename, $return, FILE_APPEND);
274
  }
275
  if ( WPAdm_Running::is_stop() ) {
276
  unset($link);
277
+ WPAdm_Core::log( __('MySQL of Dump was finished' ,'dropbox-backup') );
278
  $proc_data = WPAdm_Running::getCommandResultData('db');
279
  $proc_data['mysqldump'] = true;
280
  WPAdm_Running::setCommandResultData('db', $proc_data);
294
  public function restore($db, $file)
295
  {
296
  $link = $this->connect($db);
297
+ WPAdm_Core::log( __('Restore Database was started' ,'dropbox-backup') );
298
  $fo = fopen($file, "r");
299
  if (!$fo) {
300
+ WPAdm_Core::log( __('Error in open file dump' ,'dropbox-backup') );
301
+ $this->setError( __('Error in open file dump' ,'dropbox-backup') );
302
  return false;
303
  }
304
  $sql = "";
319
  }
320
  }
321
  }
322
+ WPAdm_Core::log(__('Restore Database was finished' ,'dropbox-backup'));
323
  }
324
  }
325
  }
modules/class-wpadm-process.php CHANGED
@@ -1,7 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  /**
6
  * Class WPAdm_Сommand
7
  */
1
  <?php
 
 
 
2
  /**
3
  * Class WPAdm_Сommand
4
  */
modules/class-wpadm-queue.php CHANGED
@@ -1,7 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  /**
6
  *
7
  * Class WPAdm_Queue
@@ -44,7 +41,7 @@ if (!class_exists('WPAdm_Queue')) {
44
  }
45
 
46
  public function add(WPAdm_Command_Context $context) {
47
-
48
  $this->contexts[] = $context;
49
  return $this;
50
  }
@@ -79,7 +76,40 @@ if (!class_exists('WPAdm_Queue')) {
79
 
80
  );
81
 
82
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  $dp = explode(DIRECTORY_SEPARATOR, DRBBACKUP_BASE_DIR);
84
  $pl = array_pop($dp);
85
  $wpadm = new WPAdm_Core($data, $pl, DRBBACKUP_BASE_DIR);
@@ -120,7 +150,7 @@ if (!class_exists('WPAdm_Queue')) {
120
  }
121
 
122
  public function save() {
123
-
124
  $this->deleteCommands();
125
  $file = WPAdm_Core::getTmpDir() . '/' . $this->id. '.queue';
126
  $txt = serialize(
1
  <?php
 
 
 
2
  /**
3
  *
4
  * Class WPAdm_Queue
41
  }
42
 
43
  public function add(WPAdm_Command_Context $context) {
44
+ ini_set("memory_limit", "256M");
45
  $this->contexts[] = $context;
46
  return $this;
47
  }
76
 
77
  );
78
 
79
+ /* if (function_exists('fsockopen')) {
80
+ $socket = @fsockopen($host, 80, $errno, $errstr, 30);
81
+ $dp = explode(DIRECTORY_SEPARATOR, WPAdm_Core::$pl_dir );
82
+ $pl = array_pop($dp) . '_';
83
+ $data = $pl . 'request='.base64_encode(serialize($data));
84
+ if (!$socket) {
85
+ //WPAdm_Core::log( "$errstr ($errno) " , "socket");
86
+ $curl = curl_init($url . "/");
87
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
88
+ curl_setopt($curl, CURLOPT_POST, true);
89
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
90
+ curl_setopt($curl, CURLOPT_TIMEOUT, 10);
91
+ curl_setopt($curl, CURLOPT_USERAGENT, $this->user_agent);
92
+
93
+ $res = curl_exec($curl);
94
+ curl_close($curl);
95
+ return $this->wait_result();
96
+ }
97
+
98
+ fwrite($socket, "POST {$path} HTTP/1.1\r\n");
99
+ fwrite($socket, "Host: {$host}\r\n");
100
+
101
+ fwrite($socket,"Content-type: application/x-www-form-urlencoded\r\n");
102
+ fwrite($socket,"Content-length:".strlen($data)."\r\n");
103
+ fwrite($socket,"Accept:* /*\r\n");
104
+ fwrite($socket,"User-agent:" . $this->user_agent. "\r\n");
105
+ fwrite($socket,"Connection:Close\r\n");
106
+ fwrite($socket,"\r\n");
107
+ fwrite($socket,"$data\r\n");
108
+ fwrite($socket,"\r\n");
109
+
110
+ @sleep(1);
111
+ fclose($socket);
112
+ } */
113
  $dp = explode(DIRECTORY_SEPARATOR, DRBBACKUP_BASE_DIR);
114
  $pl = array_pop($dp);
115
  $wpadm = new WPAdm_Core($data, $pl, DRBBACKUP_BASE_DIR);
150
  }
151
 
152
  public function save() {
153
+ ini_set("memory_limit", "256M");
154
  $this->deleteCommands();
155
  $file = WPAdm_Core::getTmpDir() . '/' . $this->id. '.queue';
156
  $txt = serialize(
modules/class-wpadm-result.php CHANGED
@@ -1,7 +1,4 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  if (!class_exists('WPAdm_Result')) {
6
  class WPAdm_Result {
7
  /*
1
  <?php
 
 
 
2
  if (!class_exists('WPAdm_Result')) {
3
  class WPAdm_Result {
4
  /*
modules/class-wpadm-running.php CHANGED
@@ -1,11 +1,17 @@
1
  <?php
2
- if ( ! defined( 'ABSPATH' ) ) exit;
3
-
4
  /**
5
  * Class WPAdm_Running
6
  */
7
  if (!class_exists('WPAdm_Running')) {
8
 
 
 
 
 
 
 
 
 
9
  add_action('drb_run_backup', array('wpadm_running', 'init') );
10
 
11
  class WPAdm_Running {
@@ -39,20 +45,6 @@ if (!class_exists('WPAdm_Running')) {
39
  WPAdm_Core::rmdir($path . "/cron-restore.data");
40
  WPAdm_Core::rmdir($path . "/stop_process");
41
  WPAdm_Core::rmdir($path . "/folder_create");
42
- WPAdm_Core::rmdir($path . "/drb_running");
43
- WPAdm_Core::rmdir($path . "/drb_running_time");
44
- WPAdm_Core::rmdir($path . "/count_error_zip_signature");
45
- WPAdm_Core::rmdir($path . "/tmp_arhive_file");
46
- WPAdm_Core::rmdir($path . "/tmp_arhive_file2");
47
- WPAdm_Core::rmdir($path . "/tmp_arhive_name");
48
- WPAdm_Core::rmdir($path . "/tmp_arhive_name2");
49
- WPAdm_Core::rmdir($path . "/time_work");
50
- WPAdm_Core::rmdir($path . "/test.zip");
51
- WPAdm_Core::rmdir($path . "/test.tar.gz");
52
- WPAdm_Core::rmdir($path . "/test_zip_archive");
53
- WPAdm_Core::rmdir($path . "/test_targz_archive");
54
- WPAdm_Core::rmdir($path . "/start-process");
55
- WPAdm_Core::rmdir($path . "/circle");
56
 
57
  if ($method) {
58
  $files = glob($path ."/wpadm_method*.queue");
@@ -80,81 +72,46 @@ if (!class_exists('WPAdm_Running')) {
80
  }
81
  }
82
 
83
- static function toEndWork($time = 0)
84
- {
85
- $time_start_process = self::getCommandResultData('start-process');
86
-
87
- if ($time == 0) {
88
- $time = self::getCommandResultData('time_work');
89
- }
90
- $time_work = ini_get('max_execution_time');
91
-
92
- $time_stop = 25;
93
-
94
- if ($time_work <= 30) {
95
- $time_stop = round($time_work / 2.5);
96
- }
97
-
98
- $time_is = ( $time_start_process + $time_work ) - $time;
99
- if ( !empty($time_start_process) && !empty($time) && $time_is <= $time_stop ) { //second
100
- //sleep($time_is + 2);
101
- return false;
102
- }
103
- return true;
104
- }
105
-
106
  static function init()
107
  {
108
  $command = self::getCommand();
109
 
110
- if ($command ) {
111
  WPAdm_Core::$cron = false;
112
  wpadm_class::$type = 'full';
113
 
114
- if (function_exists('set_time_limit')) {
115
- //@set_time_limit(0);
116
- }
117
-
118
- self::run(35);
 
 
 
119
 
120
  if ( self::checkLock() ) {
121
- if ( self::is_stop() ) {
122
- $core = new WPAdm_Core($command, 'full_backup_dropbox', DRBBACKUP_BASE_DIR);
123
- if (!is_bool( $core->getResult() ) && is_object( $core->getResult() ) && ( $result = $core->getResult()->toArray(true) ) ) {
124
- if ($result['result'] == 'success') {
125
- self::delCommand($command['method']);
126
- set_transient('drb_running', 0, 60 * 4);
127
- self::stop();
128
- self::setCommandResultData($command['method'], $result);
129
- self::init();
130
- } elseif ($result['result'] == 'error') {
131
- self::setCommandResultData($command['method'], $result);
132
- self::stop();
133
- self::init_params_default();
134
- self::createDebug( $result, $command['method'] );
135
- }
136
  }
137
  }
138
  }
139
  }
140
  }
141
-
142
- public static function createDebug( $result, $type_backup = '' )
143
- {
144
- if (isset($result['error']) && !empty( $result['error'] ) ) {
145
- wpadm_class::error_log_check( print_r( $result, 1 ), $type_backup );
146
- }
147
- }
148
-
149
  public static function checkLock()
150
  {
151
  // false - cron is running
152
  // true - cron not running
153
  $running_cron = get_transient('drb_running');
154
- $time_work = self::getCommandResultData('time_work');
155
- if ( !empty($time_work) && ( $time_work + 20 ) > time() ) {
156
- return false;
157
- }
158
  if ($running_cron && $running_cron == 1) {
159
  $time = microtime( true );
160
  $locked = get_transient('doing_cron');
@@ -186,10 +143,8 @@ if (!class_exists('WPAdm_Running')) {
186
  if ($time == 0) {
187
  set_transient('drb_running', 1, 60 * 60 * 24); // 24 hour
188
  } else {
189
- set_transient('drb_running', 1, $time + 30);
190
  }
191
-
192
- self::setCommandResultData('start-process', time() );
193
  return true;
194
  }
195
 
@@ -206,13 +161,14 @@ if (!class_exists('WPAdm_Running')) {
206
  {
207
  $stop_precess = self::getCommandResultData('stop_process');
208
  if ( !empty( $stop_precess ) && isset( $stop_precess['name'] ) && isset( $stop_precess['type'] ) ) {
209
- wpadm_wp_full_backup_dropbox::delete_backup('local', $stop_precess['name']);
210
  if ($stop_precess['type'] == 'dropbox') {
211
- wpadm_wp_full_backup_dropbox::delete_backup('dropbox', $stop_precess['name']);
 
 
212
  }
213
-
214
  }
215
- self::setCommandResultData('time_work', time());
216
  return empty($stop_precess);
217
  }
218
 
@@ -319,4 +275,4 @@ if (!class_exists('WPAdm_Running')) {
319
  return array();
320
  }
321
  }
322
- }
1
  <?php
 
 
2
  /**
3
  * Class WPAdm_Running
4
  */
5
  if (!class_exists('WPAdm_Running')) {
6
 
7
+ if (function_exists('set_time_limit')) {
8
+ @set_time_limit(0);
9
+ }
10
+ if (function_exists('ini_set')) {
11
+ @ini_set('memory_limit', '512M');
12
+ }
13
+
14
+
15
  add_action('drb_run_backup', array('wpadm_running', 'init') );
16
 
17
  class WPAdm_Running {
45
  WPAdm_Core::rmdir($path . "/cron-restore.data");
46
  WPAdm_Core::rmdir($path . "/stop_process");
47
  WPAdm_Core::rmdir($path . "/folder_create");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
  if ($method) {
50
  $files = glob($path ."/wpadm_method*.queue");
72
  }
73
  }
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  static function init()
76
  {
77
  $command = self::getCommand();
78
 
79
+ if ($command && self::is_stop() ) {
80
  WPAdm_Core::$cron = false;
81
  wpadm_class::$type = 'full';
82
 
83
+ //$time_load = ini_get("max_execution_time");
84
+ //WPAdm_Core::log('proccess is work ' . $time_load . 'sec');
85
+ /*if ($time_load != 0) {
86
+ self::run($time_load - 5);
87
+ } else {
88
+ self::run(90);
89
+ } */
90
+ self::run(60);
91
 
92
  if ( self::checkLock() ) {
93
+ $core = new WPAdm_Core($command, 'full_backup_dropbox', DRBBACKUP_BASE_DIR);
94
+ if (!is_bool( $core->getResult() ) && is_object( $core->getResult() ) && ( $result = $core->getResult()->toArray(true) ) ) {
95
+ if ($result['result'] == 'success') {
96
+ self::delCommand($command['method']);
97
+ set_transient('drb_running', 0, 60 * 4);
98
+ self::stop();
99
+ self::setCommandResultData($command['method'], $result);
100
+ self::init();
101
+ } elseif ($result['result'] == 'error') {
102
+ self::setCommandResultData($command['method'], $result);
103
+ self::stop();
104
+ self::init_params_default();
 
 
 
105
  }
106
  }
107
  }
108
  }
109
  }
 
 
 
 
 
 
 
 
110
  public static function checkLock()
111
  {
112
  // false - cron is running
113
  // true - cron not running
114
  $running_cron = get_transient('drb_running');
 
 
 
 
115
  if ($running_cron && $running_cron == 1) {
116
  $time = microtime( true );
117
  $locked = get_transient('doing_cron');
143
  if ($time == 0) {
144
  set_transient('drb_running', 1, 60 * 60 * 24); // 24 hour
145
  } else {
146
+ set_transient('drb_running', 1, $time + 60);
147
  }
 
 
148
  return true;
149
  }
150
 
161
  {
162
  $stop_precess = self::getCommandResultData('stop_process');
163
  if ( !empty( $stop_precess ) && isset( $stop_precess['name'] ) && isset( $stop_precess['type'] ) ) {
164
+ $_POST['backup-name'] = $stop_precess['name'];
165
  if ($stop_precess['type'] == 'dropbox') {
166
+ $_POST['backup-type'] = $stop_precess['type'];
167
+ wpadm_wp_full_backup_dropbox::delete_backup();
168
+ $_POST['backup-type'] = 'local';
169
  }
170
+ wpadm_wp_full_backup_dropbox::delete_backup();
171
  }
 
172
  return empty($stop_precess);
173
  }
174
 
275
  return array();
276
  }
277
  }
278
+ }
modules/pclzip.lib.php CHANGED
@@ -1,3043 +1,3034 @@
1
- <?php
2
- if (!defined('PCLZIP_READ_BLOCK_SIZE')) {
3
- define( 'PCLZIP_READ_BLOCK_SIZE', 2048 );
4
- }
5
- if (!defined('PCLZIP_SEPARATOR')) {
6
- define( 'PCLZIP_SEPARATOR', ',' );
7
- }
8
- if (!defined('PCLZIP_ERROR_EXTERNAL')) {
9
- define( 'PCLZIP_ERROR_EXTERNAL', 0 );
10
- }
11
- if (!defined('PCLZIP_TEMPORARY_DIR')) {
12
- define( 'PCLZIP_TEMPORARY_DIR', '' );
13
- }
14
- if (!defined('PCLZIP_TEMPORARY_FILE_RATIO')) {
15
- define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.47 );
16
- }
17
- // --------------------------------------------------------------------------------
18
- // ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****
19
- // --------------------------------------------------------------------------------
20
- $g_pclzip_version = "2.8.2";
21
- define( 'PCLZIP_ERR_USER_ABORTED', 2 );
22
- define( 'PCLZIP_ERR_NO_ERROR', 0 );
23
- define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );
24
- define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );
25
- define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );
26
- define( 'PCLZIP_ERR_MISSING_FILE', -4 );
27
- define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );
28
- define( 'PCLZIP_ERR_INVALID_ZIP', -6 );
29
- define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );
30
- define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );
31
- define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );
32
- define( 'PCLZIP_ERR_BAD_FORMAT', -10 );
33
- define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );
34
- define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );
35
- define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );
36
- define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );
37
- define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 );
38
- define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 );
39
- define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 );
40
- define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 );
41
- define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 );
42
- define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 );
43
- define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 );
44
- define( 'PCLZIP_OPT_PATH', 77001 );
45
- define( 'PCLZIP_OPT_ADD_PATH', 77002 );
46
- define( 'PCLZIP_OPT_REMOVE_PATH', 77003 );
47
- define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 );
48
- define( 'PCLZIP_OPT_SET_CHMOD', 77005 );
49
- define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 );
50
- define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 );
51
- define( 'PCLZIP_OPT_BY_NAME', 77008 );
52
- define( 'PCLZIP_OPT_BY_INDEX', 77009 );
53
- define( 'PCLZIP_OPT_BY_EREG', 77010 );
54
- define( 'PCLZIP_OPT_BY_PREG', 77011 );
55
- define( 'PCLZIP_OPT_COMMENT', 77012 );
56
- define( 'PCLZIP_OPT_ADD_COMMENT', 77013 );
57
- define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 );
58
- define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 );
59
- define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 );
60
- define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 );
61
- define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );
62
- define( 'PCLZIP_OPT_TEMP_FILE_THRESHOLD', 77020 );
63
- define( 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD', 77020 ); // alias
64
- define( 'PCLZIP_OPT_TEMP_FILE_ON', 77021 );
65
- define( 'PCLZIP_OPT_ADD_TEMP_FILE_ON', 77021 ); // alias
66
- define( 'PCLZIP_OPT_TEMP_FILE_OFF', 77022 );
67
- define( 'PCLZIP_OPT_ADD_TEMP_FILE_OFF', 77022 ); // alias
68
- define( 'PCLZIP_ATT_FILE_NAME', 79001 );
69
- define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 );
70
- define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 );
71
- define( 'PCLZIP_ATT_FILE_MTIME', 79004 );
72
- define( 'PCLZIP_ATT_FILE_CONTENT', 79005 );
73
- define( 'PCLZIP_ATT_FILE_COMMENT', 79006 );
74
- define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );
75
- define( 'PCLZIP_CB_POST_EXTRACT', 78002 );
76
- define( 'PCLZIP_CB_PRE_ADD', 78003 );
77
- define( 'PCLZIP_CB_POST_ADD', 78004 );
78
- /* For futur use
79
- define( 'PCLZIP_CB_PRE_LIST', 78005 );
80
- define( 'PCLZIP_CB_POST_LIST', 78006 );
81
- define( 'PCLZIP_CB_PRE_DELETE', 78007 );
82
- define( 'PCLZIP_CB_POST_DELETE', 78008 );
83
- */
84
- class PclZip
85
- {
86
- var $zipname = '';
87
- var $zip_fd = 0;
88
- var $error_code = 1;
89
- var $error_string = '';
90
- var $magic_quotes_status;
91
- function __construct($p_zipname)
92
- {
93
- if (!function_exists('gzopen'))
94
- {
95
- die('Abort '.basename(__FILE__).' : Missing zlib extensions');
96
- }
97
- $this->zipname = $p_zipname;
98
- $this->zip_fd = 0;
99
- $this->magic_quotes_status = -1;
100
- return;
101
- }
102
- function create($p_filelist)
103
- {
104
- $v_result=1;
105
- $this->privErrorReset();
106
- $v_options = array();
107
- $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
108
- $v_size = func_num_args();
109
- if ($v_size > 1) {
110
- $v_arg_list = func_get_args();
111
- array_shift($v_arg_list);
112
- $v_size--;
113
- if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
114
- $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
115
- array (PCLZIP_OPT_REMOVE_PATH => 'optional',
116
- PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
117
- PCLZIP_OPT_ADD_PATH => 'optional',
118
- PCLZIP_CB_PRE_ADD => 'optional',
119
- PCLZIP_CB_POST_ADD => 'optional',
120
- PCLZIP_OPT_NO_COMPRESSION => 'optional',
121
- PCLZIP_OPT_COMMENT => 'optional',
122
- PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
123
- PCLZIP_OPT_TEMP_FILE_ON => 'optional',
124
- PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
125
- ));
126
- if ($v_result != 1) {
127
- return 0;
128
- }
129
- }
130
- else {
131
- $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0];
132
- if ($v_size == 2) {
133
- $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
134
- }
135
- else if ($v_size > 2) {
136
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
137
- "Invalid number / type of arguments");
138
- return 0;
139
- }
140
- }
141
- }
142
- $this->privOptionDefaultThreshold($v_options);
143
- $v_string_list = array();
144
- $v_att_list = array();
145
- $v_filedescr_list = array();
146
- $p_result_list = array();
147
- if (is_array($p_filelist)) {
148
- if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
149
- $v_att_list = $p_filelist;
150
- }
151
- else {
152
- $v_string_list = $p_filelist;
153
- }
154
- }
155
- else if (is_string($p_filelist)) {
156
- $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
157
- }
158
- else {
159
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");
160
- return 0;
161
- }
162
- if (sizeof($v_string_list) != 0) {
163
- foreach ($v_string_list as $v_string) {
164
- if ($v_string != '') {
165
- $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
166
- }
167
- else {
168
- }
169
- }
170
- }
171
- $v_supported_attributes
172
- = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
173
- ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
174
- ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
175
- ,PCLZIP_ATT_FILE_MTIME => 'optional'
176
- ,PCLZIP_ATT_FILE_CONTENT => 'optional'
177
- ,PCLZIP_ATT_FILE_COMMENT => 'optional'
178
- );
179
- foreach ($v_att_list as $v_entry) {
180
- $v_result = $this->privFileDescrParseAtt($v_entry,
181
- $v_filedescr_list[],
182
- $v_options,
183
- $v_supported_attributes);
184
- if ($v_result != 1) {
185
- return 0;
186
- }
187
- }
188
- $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
189
- if ($v_result != 1) {
190
- return 0;
191
- }
192
- $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options);
193
- if ($v_result != 1) {
194
- return 0;
195
- }
196
- return $p_result_list;
197
- }
198
- function add($p_filelist)
199
- {
200
- $v_result=1;
201
- $this->privErrorReset();
202
- $v_options = array();
203
- $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
204
- $v_size = func_num_args();
205
- if ($v_size > 1) {
206
- $v_arg_list = func_get_args();
207
- array_shift($v_arg_list);
208
- $v_size--;
209
- if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
210
- $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
211
- array (PCLZIP_OPT_REMOVE_PATH => 'optional',
212
- PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
213
- PCLZIP_OPT_ADD_PATH => 'optional',
214
- PCLZIP_CB_PRE_ADD => 'optional',
215
- PCLZIP_CB_POST_ADD => 'optional',
216
- PCLZIP_OPT_NO_COMPRESSION => 'optional',
217
- PCLZIP_OPT_COMMENT => 'optional',
218
- PCLZIP_OPT_ADD_COMMENT => 'optional',
219
- PCLZIP_OPT_PREPEND_COMMENT => 'optional',
220
- PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
221
- PCLZIP_OPT_TEMP_FILE_ON => 'optional',
222
- PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
223
- ));
224
- if ($v_result != 1) {
225
- return 0;
226
- }
227
- }
228
- else {
229
- $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];
230
- if ($v_size == 2) {
231
- $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
232
- }
233
- else if ($v_size > 2) {
234
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
235
- return 0;
236
- }
237
- }
238
- }
239
- $this->privOptionDefaultThreshold($v_options);
240
- $v_string_list = array();
241
- $v_att_list = array();
242
- $v_filedescr_list = array();
243
- $p_result_list = array();
244
- if (is_array($p_filelist)) {
245
- if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
246
- $v_att_list = $p_filelist;
247
- }
248
- else {
249
- $v_string_list = $p_filelist;
250
- }
251
- }
252
- else if (is_string($p_filelist)) {
253
- $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
254
- }
255
- else {
256
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist");
257
- return 0;
258
- }
259
- if (sizeof($v_string_list) != 0) {
260
- foreach ($v_string_list as $v_string) {
261
- $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
262
- }
263
- }
264
- $v_supported_attributes
265
- = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
266
- ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
267
- ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
268
- ,PCLZIP_ATT_FILE_MTIME => 'optional'
269
- ,PCLZIP_ATT_FILE_CONTENT => 'optional'
270
- ,PCLZIP_ATT_FILE_COMMENT => 'optional'
271
- );
272
- foreach ($v_att_list as $v_entry) {
273
- $v_result = $this->privFileDescrParseAtt($v_entry,
274
- $v_filedescr_list[],
275
- $v_options,
276
- $v_supported_attributes);
277
- if ($v_result != 1) {
278
- return 0;
279
- }
280
- }
281
- $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
282
- if ($v_result != 1) {
283
- return 0;
284
- }
285
- $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options);
286
- if ($v_result != 1) {
287
- return 0;
288
- }
289
- return $p_result_list;
290
- }
291
- function listContent()
292
- {
293
- $v_result=1;
294
- $this->privErrorReset();
295
- if (!$this->privCheckFormat()) {
296
- return(0);
297
- }
298
- $p_list = array();
299
- if (($v_result = $this->privList($p_list)) != 1)
300
- {
301
- unset($p_list);
302
- return(0);
303
- }
304
- return $p_list;
305
- }
306
- function extract()
307
- {
308
- $v_result=1;
309
- $this->privErrorReset();
310
- if (!$this->privCheckFormat()) {
311
- return(0);
312
- }
313
- $v_options = array();
314
- // $v_path = "./";
315
- $v_path = '';
316
- $v_remove_path = "";
317
- $v_remove_all_path = false;
318
- $v_size = func_num_args();
319
- $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
320
- if ($v_size > 0) {
321
- $v_arg_list = func_get_args();
322
- if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
323
- $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
324
- array (PCLZIP_OPT_PATH => 'optional',
325
- PCLZIP_OPT_REMOVE_PATH => 'optional',
326
- PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
327
- PCLZIP_OPT_ADD_PATH => 'optional',
328
- PCLZIP_CB_PRE_EXTRACT => 'optional',
329
- PCLZIP_CB_POST_EXTRACT => 'optional',
330
- PCLZIP_OPT_SET_CHMOD => 'optional',
331
- PCLZIP_OPT_BY_NAME => 'optional',
332
- PCLZIP_OPT_BY_EREG => 'optional',
333
- PCLZIP_OPT_BY_PREG => 'optional',
334
- PCLZIP_OPT_BY_INDEX => 'optional',
335
- PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
336
- PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional',
337
- PCLZIP_OPT_REPLACE_NEWER => 'optional'
338
- ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
339
- ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional',
340
- PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
341
- PCLZIP_OPT_TEMP_FILE_ON => 'optional',
342
- PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
343
- ));
344
- if ($v_result != 1) {
345
- return 0;
346
- }
347
- if (isset($v_options[PCLZIP_OPT_PATH])) {
348
- $v_path = $v_options[PCLZIP_OPT_PATH];
349
- }
350
- if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
351
- $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
352
- }
353
- if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
354
- $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
355
- }
356
- if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
357
- if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
358
- $v_path .= '/';
359
- }
360
- $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
361
- }
362
- }
363
- else {
364
- $v_path = $v_arg_list[0];
365
- if ($v_size == 2) {
366
- $v_remove_path = $v_arg_list[1];
367
- }
368
- else if ($v_size > 2) {
369
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
370
- return 0;
371
- }
372
- }
373
- }
374
- $this->privOptionDefaultThreshold($v_options);
375
- $p_list = array();
376
- $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path,
377
- $v_remove_all_path, $v_options);
378
- if ($v_result < 1) {
379
- unset($p_list);
380
- return(0);
381
- }
382
- return $p_list;
383
- }
384
- function extractByIndex($p_index)
385
- {
386
- $v_result=1;
387
- $this->privErrorReset();
388
- if (!$this->privCheckFormat()) {
389
- return(0);
390
- }
391
- $v_options = array();
392
- // $v_path = "./";
393
- $v_path = '';
394
- $v_remove_path = "";
395
- $v_remove_all_path = false;
396
- $v_size = func_num_args();
397
- $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
398
- if ($v_size > 1) {
399
- $v_arg_list = func_get_args();
400
- array_shift($v_arg_list);
401
- $v_size--;
402
- if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
403
- $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
404
- array (PCLZIP_OPT_PATH => 'optional',
405
- PCLZIP_OPT_REMOVE_PATH => 'optional',
406
- PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
407
- PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
408
- PCLZIP_OPT_ADD_PATH => 'optional',
409
- PCLZIP_CB_PRE_EXTRACT => 'optional',
410
- PCLZIP_CB_POST_EXTRACT => 'optional',
411
- PCLZIP_OPT_SET_CHMOD => 'optional',
412
- PCLZIP_OPT_REPLACE_NEWER => 'optional'
413
- ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
414
- ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional',
415
- PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
416
- PCLZIP_OPT_TEMP_FILE_ON => 'optional',
417
- PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
418
- ));
419
- if ($v_result != 1) {
420
- return 0;
421
- }
422
- if (isset($v_options[PCLZIP_OPT_PATH])) {
423
- $v_path = $v_options[PCLZIP_OPT_PATH];
424
- }
425
- if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
426
- $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
427
- }
428
- if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
429
- $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
430
- }
431
- if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
432
- if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
433
- $v_path .= '/';
434
- }
435
- $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
436
- }
437
- if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) {
438
- $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
439
- }
440
- else {
441
- }
442
- }
443
- else {
444
- $v_path = $v_arg_list[0];
445
- if ($v_size == 2) {
446
- $v_remove_path = $v_arg_list[1];
447
- }
448
- else if ($v_size > 2) {
449
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
450
- return 0;
451
- }
452
- }
453
- }
454
- $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index);
455
- $v_options_trick = array();
456
- $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick,
457
- array (PCLZIP_OPT_BY_INDEX => 'optional' ));
458
- if ($v_result != 1) {
459
- return 0;
460
- }
461
- $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX];
462
- $this->privOptionDefaultThreshold($v_options);
463
- if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) {
464
- return(0);
465
- }
466
- return $p_list;
467
- }
468
- function delete()
469
- {
470
- $v_result=1;
471
- $this->privErrorReset();
472
- if (!$this->privCheckFormat()) {
473
- return(0);
474
- }
475
- $v_options = array();
476
- $v_size = func_num_args();
477
- if ($v_size > 0) {
478
- $v_arg_list = func_get_args();
479
- $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
480
- array (PCLZIP_OPT_BY_NAME => 'optional',
481
- PCLZIP_OPT_BY_EREG => 'optional',
482
- PCLZIP_OPT_BY_PREG => 'optional',
483
- PCLZIP_OPT_BY_INDEX => 'optional' ));
484
- if ($v_result != 1) {
485
- return 0;
486
- }
487
- }
488
- $this->privDisableMagicQuotes();
489
- $v_list = array();
490
- if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) {
491
- $this->privSwapBackMagicQuotes();
492
- unset($v_list);
493
- return(0);
494
- }
495
- $this->privSwapBackMagicQuotes();
496
- return $v_list;
497
- }
498
- function deleteByIndex($p_index)
499
- {
500
- $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index);
501
- return $p_list;
502
- }
503
- function properties()
504
- {
505
- $this->privErrorReset();
506
- $this->privDisableMagicQuotes();
507
- if (!$this->privCheckFormat()) {
508
- $this->privSwapBackMagicQuotes();
509
- return(0);
510
- }
511
- $v_prop = array();
512
- $v_prop['comment'] = '';
513
- $v_prop['nb'] = 0;
514
- $v_prop['status'] = 'not_exist';
515
- if (@is_file($this->zipname))
516
- {
517
- if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
518
- {
519
- $this->privSwapBackMagicQuotes();
520
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
521
- return 0;
522
- }
523
- $v_central_dir = array();
524
- if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
525
- {
526
- $this->privSwapBackMagicQuotes();
527
- return 0;
528
- }
529
- $this->privCloseFd();
530
- $v_prop['comment'] = $v_central_dir['comment'];
531
- $v_prop['nb'] = $v_central_dir['entries'];
532
- $v_prop['status'] = 'ok';
533
- }
534
- $this->privSwapBackMagicQuotes();
535
- return $v_prop;
536
- }
537
- function duplicate($p_archive)
538
- {
539
- $v_result = 1;
540
- $this->privErrorReset();
541
- if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip'))
542
- {
543
- $v_result = $this->privDuplicate($p_archive->zipname);
544
- }
545
- else if (is_string($p_archive))
546
- {
547
- if (!is_file($p_archive)) {
548
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'");
549
- $v_result = PCLZIP_ERR_MISSING_FILE;
550
- }
551
- else {
552
- $v_result = $this->privDuplicate($p_archive);
553
- }
554
- }
555
- else
556
- {
557
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
558
- $v_result = PCLZIP_ERR_INVALID_PARAMETER;
559
- }
560
- return $v_result;
561
- }
562
- function merge($p_archive_to_add)
563
- {
564
- $v_result = 1;
565
- $this->privErrorReset();
566
- if (!$this->privCheckFormat()) {
567
- return(0);
568
- }
569
- if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip'))
570
- {
571
- $v_result = $this->privMerge($p_archive_to_add);
572
- }
573
- else if (is_string($p_archive_to_add))
574
- {
575
- $v_object_archive = new PclZip($p_archive_to_add);
576
- $v_result = $this->privMerge($v_object_archive);
577
- }
578
- else
579
- {
580
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
581
- $v_result = PCLZIP_ERR_INVALID_PARAMETER;
582
- }
583
- return $v_result;
584
- }
585
- function errorCode()
586
- {
587
- if (PCLZIP_ERROR_EXTERNAL == 1) {
588
- return(PclErrorCode());
589
- }
590
- else {
591
- return($this->error_code);
592
- }
593
- }
594
- function errorName($p_with_code=false)
595
- {
596
- $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR',
597
- PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL',
598
- PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL',
599
- PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER',
600
- PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE',
601
- PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG',
602
- PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP',
603
- PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE',
604
- PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL',
605
- PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION',
606
- PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT',
607
- PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL',
608
- PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL',
609
- PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM',
610
- PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP',
611
- PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE',
612
- PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE',
613
- PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION',
614
- PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION'
615
- ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE'
616
- ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION'
617
- );
618
- if (isset($v_name[$this->error_code])) {
619
- $v_value = $v_name[$this->error_code];
620
- }
621
- else {
622
- $v_value = 'NoName';
623
- }
624
- if ($p_with_code) {
625
- return($v_value.' ('.$this->error_code.')');
626
- }
627
- else {
628
- return($v_value);
629
- }
630
- }
631
- function errorInfo($p_full=false)
632
- {
633
- if (PCLZIP_ERROR_EXTERNAL == 1) {
634
- return(PclErrorString());
635
- }
636
- else {
637
- if ($p_full) {
638
- return($this->errorName(true)." : ".$this->error_string);
639
- }
640
- else {
641
- return($this->error_string." [code ".$this->error_code."]");
642
- }
643
- }
644
- }
645
- // --------------------------------------------------------------------------------
646
- // ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS *****
647
- // ***** *****
648
- // ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY *****
649
- // --------------------------------------------------------------------------------
650
- function privCheckFormat($p_level=0)
651
- {
652
- $v_result = true;
653
- // ----- Reset the file system cache
654
- clearstatcache();
655
- $this->privErrorReset();
656
- if (!is_file($this->zipname)) {
657
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'");
658
- return(false);
659
- }
660
- if (!is_readable($this->zipname)) {
661
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'");
662
- return(false);
663
- }
664
- return $v_result;
665
- }
666
- function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false)
667
- {
668
- $v_result=1;
669
- $i=0;
670
- while ($i<$p_size) {
671
- if (!isset($v_requested_options[$p_options_list[$i]])) {
672
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method");
673
- return PclZip::errorCode();
674
- }
675
- switch ($p_options_list[$i]) {
676
- case PCLZIP_OPT_PATH :
677
- case PCLZIP_OPT_REMOVE_PATH :
678
- case PCLZIP_OPT_ADD_PATH :
679
- if (($i+1) >= $p_size) {
680
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
681
- return PclZip::errorCode();
682
- }
683
- $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE);
684
- $i++;
685
- break;
686
- case PCLZIP_OPT_TEMP_FILE_THRESHOLD :
687
- if (($i+1) >= $p_size) {
688
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
689
- return PclZip::errorCode();
690
- }
691
- if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
692
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
693
- return PclZip::errorCode();
694
- }
695
- $v_value = $p_options_list[$i+1];
696
- if ((!is_integer($v_value)) || ($v_value<0)) {
697
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'");
698
- return PclZip::errorCode();
699
- }
700
- $v_result_list[$p_options_list[$i]] = $v_value*1048576;
701
- $i++;
702
- break;
703
- case PCLZIP_OPT_TEMP_FILE_ON :
704
- if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
705
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
706
- return PclZip::errorCode();
707
- }
708
- $v_result_list[$p_options_list[$i]] = true;
709
- break;
710
- case PCLZIP_OPT_TEMP_FILE_OFF :
711
- if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) {
712
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'");
713
- return PclZip::errorCode();
714
- }
715
- if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
716
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'");
717
- return PclZip::errorCode();
718
- }
719
- $v_result_list[$p_options_list[$i]] = true;
720
- break;
721
- case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION :
722
- if (($i+1) >= $p_size) {
723
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
724
- return PclZip::errorCode();
725
- }
726
- if ( is_string($p_options_list[$i+1])
727
- && ($p_options_list[$i+1] != '')) {
728
- $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE);
729
- $i++;
730
- }
731
- else {
732
- }
733
- break;
734
- case PCLZIP_OPT_BY_NAME :
735
- if (($i+1) >= $p_size) {
736
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
737
- return PclZip::errorCode();
738
- }
739
- if (is_string($p_options_list[$i+1])) {
740
- $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1];
741
- }
742
- else if (is_array($p_options_list[$i+1])) {
743
- $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
744
- }
745
- else {
746
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
747
- return PclZip::errorCode();
748
- }
749
- $i++;
750
- break;
751
- case PCLZIP_OPT_BY_EREG :
752
- $p_options_list[$i] = PCLZIP_OPT_BY_PREG;
753
- case PCLZIP_OPT_BY_PREG :
754
- if (($i+1) >= $p_size) {
755
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
756
- return PclZip::errorCode();
757
- }
758
- if (is_string($p_options_list[$i+1])) {
759
- $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
760
- }
761
- else {
762
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
763
- return PclZip::errorCode();
764
- }
765
- $i++;
766
- break;
767
- case PCLZIP_OPT_COMMENT :
768
- case PCLZIP_OPT_ADD_COMMENT :
769
- case PCLZIP_OPT_PREPEND_COMMENT :
770
- if (($i+1) >= $p_size) {
771
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE,
772
- "Missing parameter value for option '"
773
- .PclZipUtilOptionText($p_options_list[$i])
774
- ."'");
775
- return PclZip::errorCode();
776
- }
777
- if (is_string($p_options_list[$i+1])) {
778
- $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
779
- }
780
- else {
781
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE,
782
- "Wrong parameter value for option '"
783
- .PclZipUtilOptionText($p_options_list[$i])
784
- ."'");
785
- return PclZip::errorCode();
786
- }
787
- $i++;
788
- break;
789
- case PCLZIP_OPT_BY_INDEX :
790
- if (($i+1) >= $p_size) {
791
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
792
- return PclZip::errorCode();
793
- }
794
- $v_work_list = array();
795
- if (is_string($p_options_list[$i+1])) {
796
- $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', '');
797
- $v_work_list = explode(",", $p_options_list[$i+1]);
798
- }
799
- else if (is_integer($p_options_list[$i+1])) {
800
- $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1];
801
- }
802
- else if (is_array($p_options_list[$i+1])) {
803
- $v_work_list = $p_options_list[$i+1];
804
- }
805
- else {
806
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'");
807
- return PclZip::errorCode();
808
- }
809
- $v_sort_flag=false;
810
- $v_sort_value=0;
811
- for ($j=0; $j<sizeof($v_work_list); $j++) {
812
- $v_item_list = explode("-", $v_work_list[$j]);
813
- $v_size_item_list = sizeof($v_item_list);
814
- if ($v_size_item_list == 1) {
815
- $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
816
- $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];
817
- }
818
- elseif ($v_size_item_list == 2) {
819
- $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
820
- $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];
821
- }
822
- else {
823
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
824
- return PclZip::errorCode();
825
- }
826
- if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) {
827
- $v_sort_flag=true;
828
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
829
- return PclZip::errorCode();
830
- }
831
- $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
832
- }
833
- if ($v_sort_flag) {
834
- }
835
- $i++;
836
- break;
837
- case PCLZIP_OPT_REMOVE_ALL_PATH :
838
- case PCLZIP_OPT_EXTRACT_AS_STRING :
839
- case PCLZIP_OPT_NO_COMPRESSION :
840
- case PCLZIP_OPT_EXTRACT_IN_OUTPUT :
841
- case PCLZIP_OPT_REPLACE_NEWER :
842
- case PCLZIP_OPT_STOP_ON_ERROR :
843
- $v_result_list[$p_options_list[$i]] = true;
844
- break;
845
- case PCLZIP_OPT_SET_CHMOD :
846
- if (($i+1) >= $p_size) {
847
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
848
- return PclZip::errorCode();
849
- }
850
- $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
851
- $i++;
852
- break;
853
- case PCLZIP_CB_PRE_EXTRACT :
854
- case PCLZIP_CB_POST_EXTRACT :
855
- case PCLZIP_CB_PRE_ADD :
856
- case PCLZIP_CB_POST_ADD :
857
- /* for futur use
858
- case PCLZIP_CB_PRE_DELETE :
859
- case PCLZIP_CB_POST_DELETE :
860
- case PCLZIP_CB_PRE_LIST :
861
- case PCLZIP_CB_POST_LIST :
862
- */
863
- if (($i+1) >= $p_size) {
864
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
865
- return PclZip::errorCode();
866
- }
867
- $v_function_name = $p_options_list[$i+1];
868
- if (!function_exists($v_function_name)) {
869
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'");
870
- return PclZip::errorCode();
871
- }
872
- $v_result_list[$p_options_list[$i]] = $v_function_name;
873
- $i++;
874
- break;
875
- default :
876
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
877
- "Unknown parameter '"
878
- .$p_options_list[$i]."'");
879
- return PclZip::errorCode();
880
- }
881
- $i++;
882
- }
883
- if ($v_requested_options !== false) {
884
- for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
885
- if ($v_requested_options[$key] == 'mandatory') {
886
- if (!isset($v_result_list[$key])) {
887
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
888
- return PclZip::errorCode();
889
- }
890
- }
891
- }
892
- }
893
- if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
894
- }
895
- return $v_result;
896
- }
897
- function privOptionDefaultThreshold(&$p_options)
898
- {
899
- $v_result=1;
900
- if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
901
- || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) {
902
- return $v_result;
903
- }
904
- $v_memory_limit = ini_get('memory_limit');
905
- $v_memory_limit = trim($v_memory_limit);
906
- $last = strtolower(substr($v_memory_limit, -1));
907
- if($last == 'g')
908
- $v_memory_limit = $v_memory_limit*1073741824;
909
- if($last == 'm')
910
- $v_memory_limit = $v_memory_limit*1048576;
911
- if($last == 'k')
912
- $v_memory_limit = $v_memory_limit*1024;
913
- $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit*PCLZIP_TEMPORARY_FILE_RATIO);
914
- if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) {
915
- unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]);
916
- }
917
- return $v_result;
918
- }
919
- function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false)
920
- {
921
- $v_result=1;
922
- foreach ($p_file_list as $v_key => $v_value) {
923
- if (!isset($v_requested_options[$v_key])) {
924
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file");
925
- return PclZip::errorCode();
926
- }
927
- switch ($v_key) {
928
- case PCLZIP_ATT_FILE_NAME :
929
- if (!is_string($v_value)) {
930
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
931
- return PclZip::errorCode();
932
- }
933
- $p_filedescr['filename'] = PclZipUtilPathReduction($v_value);
934
- if ($p_filedescr['filename'] == '') {
935
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'");
936
- return PclZip::errorCode();
937
- }
938
- break;
939
- case PCLZIP_ATT_FILE_NEW_SHORT_NAME :
940
- if (!is_string($v_value)) {
941
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
942
- return PclZip::errorCode();
943
- }
944
- $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value);
945
- if ($p_filedescr['new_short_name'] == '') {
946
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'");
947
- return PclZip::errorCode();
948
- }
949
- break;
950
- case PCLZIP_ATT_FILE_NEW_FULL_NAME :
951
- if (!is_string($v_value)) {
952
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
953
- return PclZip::errorCode();
954
- }
955
- $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value);
956
- if ($p_filedescr['new_full_name'] == '') {
957
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'");
958
- return PclZip::errorCode();
959
- }
960
- break;
961
- case PCLZIP_ATT_FILE_COMMENT :
962
- if (!is_string($v_value)) {
963
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
964
- return PclZip::errorCode();
965
- }
966
- $p_filedescr['comment'] = $v_value;
967
- break;
968
- case PCLZIP_ATT_FILE_MTIME :
969
- if (!is_integer($v_value)) {
970
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'");
971
- return PclZip::errorCode();
972
- }
973
- $p_filedescr['mtime'] = $v_value;
974
- break;
975
- case PCLZIP_ATT_FILE_CONTENT :
976
- $p_filedescr['content'] = $v_value;
977
- break;
978
- default :
979
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
980
- "Unknown parameter '".$v_key."'");
981
- return PclZip::errorCode();
982
- }
983
- if ($v_requested_options !== false) {
984
- for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
985
- if ($v_requested_options[$key] == 'mandatory') {
986
- if (!isset($p_file_list[$key])) {
987
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
988
- return PclZip::errorCode();
989
- }
990
- }
991
- }
992
- }
993
- }
994
- return $v_result;
995
- }
996
- function privFileDescrExpand(&$p_filedescr_list, &$p_options)
997
- {
998
- $v_result=1;
999
- $v_result_list = array();
1000
- for ($i=0; $i<sizeof($p_filedescr_list); $i++) {
1001
- $v_descr = $p_filedescr_list[$i];
1002
- $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename'], false);
1003
- $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']);
1004
- if (file_exists($v_descr['filename'])) {
1005
- if (@is_file($v_descr['filename'])) {
1006
- $v_descr['type'] = 'file';
1007
- }
1008
- else if (@is_dir($v_descr['filename'])) {
1009
- $v_descr['type'] = 'folder';
1010
- }
1011
- else if (@is_link($v_descr['filename'])) {
1012
- continue;
1013
- }
1014
- else {
1015
- continue;
1016
- }
1017
- }
1018
- else if (isset($v_descr['content'])) {
1019
- $v_descr['type'] = 'virtual_file';
1020
- }
1021
- else {
1022
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$v_descr['filename']."' does not exist");
1023
- return PclZip::errorCode();
1024
- }
1025
- $this->privCalculateStoredFilename($v_descr, $p_options);
1026
- $v_result_list[sizeof($v_result_list)] = $v_descr;
1027
- if ($v_descr['type'] == 'folder') {
1028
- $v_dirlist_descr = array();
1029
- $v_dirlist_nb = 0;
1030
- if ($v_folder_handler = @opendir($v_descr['filename'])) {
1031
- while (($v_item_handler = @readdir($v_folder_handler)) !== false) {
1032
- if (($v_item_handler == '.') || ($v_item_handler == '..')) {
1033
- continue;
1034
- }
1035
- $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler;
1036
- if (($v_descr['stored_filename'] != $v_descr['filename'])
1037
- && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) {
1038
- if ($v_descr['stored_filename'] != '') {
1039
- $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler;
1040
- }
1041
- else {
1042
- $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler;
1043
- }
1044
- }
1045
- $v_dirlist_nb++;
1046
- }
1047
- @closedir($v_folder_handler);
1048
- }
1049
- else {
1050
- }
1051
- if ($v_dirlist_nb != 0) {
1052
- if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {
1053
- return $v_result;
1054
- }
1055
- $v_result_list = array_merge($v_result_list, $v_dirlist_descr);
1056
- }
1057
- else {
1058
- }
1059
- unset($v_dirlist_descr);
1060
- }
1061
- }
1062
- $p_filedescr_list = $v_result_list;
1063
- return $v_result;
1064
- }
1065
- function privCreate($p_filedescr_list, &$p_result_list, &$p_options)
1066
- {
1067
- $v_result=1;
1068
- $v_list_detail = array();
1069
- $this->privDisableMagicQuotes();
1070
- if (($v_result = $this->privOpenFd('wb')) != 1)
1071
- {
1072
- return $v_result;
1073
- }
1074
- $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options);
1075
- $this->privCloseFd();
1076
- $this->privSwapBackMagicQuotes();
1077
- return $v_result;
1078
- }
1079
- function privAdd($p_filedescr_list, &$p_result_list, &$p_options)
1080
- {
1081
- $v_result=1;
1082
- $v_list_detail = array();
1083
- if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0))
1084
- {
1085
- $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options);
1086
- return $v_result;
1087
- }
1088
- $this->privDisableMagicQuotes();
1089
- if (($v_result=$this->privOpenFd('rb')) != 1)
1090
- {
1091
- $this->privSwapBackMagicQuotes();
1092
- return $v_result;
1093
- }
1094
- $v_central_dir = array();
1095
- if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
1096
- {
1097
- $this->privCloseFd();
1098
- $this->privSwapBackMagicQuotes();
1099
- return $v_result;
1100
- }
1101
- @rewind($this->zip_fd);
1102
- $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
1103
- if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
1104
- {
1105
- $this->privCloseFd();
1106
- $this->privSwapBackMagicQuotes();
1107
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
1108
- return PclZip::errorCode();
1109
- }
1110
- $v_size = $v_central_dir['offset'];
1111
- while ($v_size != 0)
1112
- {
1113
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
1114
- $v_buffer = fread($this->zip_fd, $v_read_size);
1115
- @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
1116
- $v_size -= $v_read_size;
1117
- }
1118
- $v_swap = $this->zip_fd;
1119
- $this->zip_fd = $v_zip_temp_fd;
1120
- $v_zip_temp_fd = $v_swap;
1121
- $v_header_list = array();
1122
- if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
1123
- {
1124
- fclose($v_zip_temp_fd);
1125
- $this->privCloseFd();
1126
- @unlink($v_zip_temp_name);
1127
- $this->privSwapBackMagicQuotes();
1128
- return $v_result;
1129
- }
1130
- $v_offset = @ftell($this->zip_fd);
1131
- $v_size = $v_central_dir['size'];
1132
- while ($v_size != 0)
1133
- {
1134
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
1135
- $v_buffer = @fread($v_zip_temp_fd, $v_read_size);
1136
- @fwrite($this->zip_fd, $v_buffer, $v_read_size);
1137
- $v_size -= $v_read_size;
1138
- }
1139
- for ($i=0, $v_count=0; $i<sizeof($v_header_list); $i++)
1140
- {
1141
- if ($v_header_list[$i]['status'] == 'ok') {
1142
- if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
1143
- fclose($v_zip_temp_fd);
1144
- $this->privCloseFd();
1145
- @unlink($v_zip_temp_name);
1146
- $this->privSwapBackMagicQuotes();
1147
- return $v_result;
1148
- }
1149
- $v_count++;
1150
- }
1151
- $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
1152
- }
1153
- $v_comment = $v_central_dir['comment'];
1154
- if (isset($p_options[PCLZIP_OPT_COMMENT])) {
1155
- $v_comment = $p_options[PCLZIP_OPT_COMMENT];
1156
- }
1157
- if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) {
1158
- $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT];
1159
- }
1160
- if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) {
1161
- $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment;
1162
- }
1163
- $v_size = @ftell($this->zip_fd)-$v_offset;
1164
- if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1)
1165
- {
1166
- unset($v_header_list);
1167
- $this->privSwapBackMagicQuotes();
1168
- return $v_result;
1169
- }
1170
- $v_swap = $this->zip_fd;
1171
- $this->zip_fd = $v_zip_temp_fd;
1172
- $v_zip_temp_fd = $v_swap;
1173
- $this->privCloseFd();
1174
- @fclose($v_zip_temp_fd);
1175
- $this->privSwapBackMagicQuotes();
1176
- @unlink($this->zipname);
1177
- PclZipUtilRename($v_zip_temp_name, $this->zipname);
1178
- return $v_result;
1179
- }
1180
- function privOpenFd($p_mode)
1181
- {
1182
- $v_result=1;
1183
- if ($this->zip_fd != 0)
1184
- {
1185
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open');
1186
- return PclZip::errorCode();
1187
- }
1188
- if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0)
1189
- {
1190
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode');
1191
- return PclZip::errorCode();
1192
- }
1193
- return $v_result;
1194
- }
1195
- function privCloseFd()
1196
- {
1197
- $v_result=1;
1198
- if ($this->zip_fd != 0)
1199
- @fclose($this->zip_fd);
1200
- $this->zip_fd = 0;
1201
- return $v_result;
1202
- }
1203
- // function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options)
1204
- function privAddList($p_filedescr_list, &$p_result_list, &$p_options)
1205
- {
1206
- $v_result=1;
1207
- $v_header_list = array();
1208
- if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
1209
- {
1210
- return $v_result;
1211
- }
1212
- $v_offset = @ftell($this->zip_fd);
1213
- for ($i=0,$v_count=0; $i<sizeof($v_header_list); $i++)
1214
- {
1215
- if ($v_header_list[$i]['status'] == 'ok') {
1216
- if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
1217
- return $v_result;
1218
- }
1219
- $v_count++;
1220
- }
1221
- $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
1222
- }
1223
- $v_comment = '';
1224
- if (isset($p_options[PCLZIP_OPT_COMMENT])) {
1225
- $v_comment = $p_options[PCLZIP_OPT_COMMENT];
1226
- }
1227
- $v_size = @ftell($this->zip_fd)-$v_offset;
1228
- if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1)
1229
- {
1230
- unset($v_header_list);
1231
- return $v_result;
1232
- }
1233
- return $v_result;
1234
- }
1235
- function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options)
1236
- {
1237
- $v_result=1;
1238
- $v_header = array();
1239
- $v_nb = sizeof($p_result_list);
1240
- for ($j=0; ($j<sizeof($p_filedescr_list)) && ($v_result==1); $j++) {
1241
- $p_filedescr_list[$j]['filename']
1242
- = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false);
1243
- if ($p_filedescr_list[$j]['filename'] == "") {
1244
- continue;
1245
- }
1246
- if ( ($p_filedescr_list[$j]['type'] != 'virtual_file')
1247
- && (!file_exists($p_filedescr_list[$j]['filename']))) {
1248
- PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$p_filedescr_list[$j]['filename']."' does not exist");
1249
- return PclZip::errorCode();
1250
- }
1251
- // if ( (is_file($p_filedescr_list[$j]['filename']))
1252
- // || ( is_dir($p_filedescr_list[$j]['filename'])
1253
- if ( ($p_filedescr_list[$j]['type'] == 'file')
1254
- || ($p_filedescr_list[$j]['type'] == 'virtual_file')
1255
- || ( ($p_filedescr_list[$j]['type'] == 'folder')
1256
- && ( !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])
1257
- || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))
1258
- ) {
1259
- $v_result = $this->privAddFile($p_filedescr_list[$j], $v_header,
1260
- $p_options);
1261
- if ($v_result != 1) {
1262
- return $v_result;
1263
- }
1264
- $p_result_list[$v_nb++] = $v_header;
1265
- }
1266
- }
1267
- return $v_result;
1268
- }
1269
- function privAddFile($p_filedescr, &$p_header, &$p_options)
1270
- {
1271
- $v_result=1;
1272
- $p_filename = $p_filedescr['filename'];
1273
- if ($p_filename == "") {
1274
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)");
1275
- return PclZip::errorCode();
1276
- }
1277
- /* TBC : Removed
1278
- if (isset($p_filedescr['stored_filename'])) {
1279
- $v_stored_filename = $p_filedescr['stored_filename'];
1280
- }
1281
- else {
1282
- $v_stored_filename = $p_filedescr['stored_filename'];
1283
- }
1284
- */
1285
- clearstatcache();
1286
- $p_header['version'] = 20;
1287
- $p_header['version_extracted'] = 10;
1288
- $p_header['flag'] = 0;
1289
- $p_header['compression'] = 0;
1290
- $p_header['crc'] = 0;
1291
- $p_header['compressed_size'] = 0;
1292
- $p_header['filename_len'] = strlen($p_filename);
1293
- $p_header['extra_len'] = 0;
1294
- $p_header['disk'] = 0;
1295
- $p_header['internal'] = 0;
1296
- $p_header['offset'] = 0;
1297
- $p_header['filename'] = $p_filename;
1298
- // TBC : Removed $p_header['stored_filename'] = $v_stored_filename;
1299
- $p_header['stored_filename'] = $p_filedescr['stored_filename'];
1300
- $p_header['extra'] = '';
1301
- $p_header['status'] = 'ok';
1302
- $p_header['index'] = -1;
1303
- if ($p_filedescr['type']=='file') {
1304
- $p_header['external'] = 0x00000000;
1305
- $p_header['size'] = filesize($p_filename);
1306
- }
1307
- else if ($p_filedescr['type']=='folder') {
1308
- $p_header['external'] = 0x00000010;
1309
- $p_header['mtime'] = filemtime($p_filename);
1310
- $p_header['size'] = filesize($p_filename);
1311
- }
1312
- else if ($p_filedescr['type'] == 'virtual_file') {
1313
- $p_header['external'] = 0x00000000;
1314
- $p_header['size'] = strlen($p_filedescr['content']);
1315
- }
1316
- if (isset($p_filedescr['mtime'])) {
1317
- $p_header['mtime'] = $p_filedescr['mtime'];
1318
- }
1319
- else if ($p_filedescr['type'] == 'virtual_file') {
1320
- $p_header['mtime'] = time();
1321
- }
1322
- else {
1323
- $p_header['mtime'] = filemtime($p_filename);
1324
- }
1325
- if (isset($p_filedescr['comment'])) {
1326
- $p_header['comment_len'] = strlen($p_filedescr['comment']);
1327
- $p_header['comment'] = $p_filedescr['comment'];
1328
- }
1329
- else {
1330
- $p_header['comment_len'] = 0;
1331
- $p_header['comment'] = '';
1332
- }
1333
- if (isset($p_options[PCLZIP_CB_PRE_ADD])) {
1334
- $v_local_header = array();
1335
- $this->privConvertHeader2FileInfo($p_header, $v_local_header);
1336
- // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);');
1337
- $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header);
1338
- if ($v_result == 0) {
1339
- $p_header['status'] = "skipped";
1340
- $v_result = 1;
1341
- }
1342
- if ($p_header['stored_filename'] != $v_local_header['stored_filename']) {
1343
- $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']);
1344
- }
1345
- }
1346
- if ($p_header['stored_filename'] == "") {
1347
- $p_header['status'] = "filtered";
1348
- }
1349
- if (strlen($p_header['stored_filename']) > 0xFF) {
1350
- $p_header['status'] = 'filename_too_long';
1351
- }
1352
- if ($p_header['status'] == 'ok') {
1353
- if ($p_filedescr['type'] == 'file') {
1354
- if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF]))
1355
- && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON])
1356
- || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
1357
- && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])) ) ) {
1358
- $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options);
1359
- if ($v_result < PCLZIP_ERR_NO_ERROR) {
1360
- return $v_result;
1361
- }
1362
- }
1363
- else {
1364
- if (($v_file = @fopen($p_filename, "rb")) == 0) {
1365
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode");
1366
- return PclZip::errorCode();
1367
- }
1368
- $v_content = @fread($v_file, $p_header['size']);
1369
- @fclose($v_file);
1370
- $p_header['crc'] = @crc32($v_content);
1371
- if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
1372
- $p_header['compressed_size'] = $p_header['size'];
1373
- $p_header['compression'] = 0;
1374
- }
1375
- else {
1376
- $v_content = @gzdeflate($v_content);
1377
- $p_header['compressed_size'] = strlen($v_content);
1378
- $p_header['compression'] = 8;
1379
- }
1380
- if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
1381
- @fclose($v_file);
1382
- return $v_result;
1383
- }
1384
- @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']);
1385
- }
1386
- }
1387
- else if ($p_filedescr['type'] == 'virtual_file') {
1388
- $v_content = $p_filedescr['content'];
1389
- $p_header['crc'] = @crc32($v_content);
1390
- if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
1391
- $p_header['compressed_size'] = $p_header['size'];
1392
- $p_header['compression'] = 0;
1393
- }
1394
- else {
1395
- $v_content = @gzdeflate($v_content);
1396
- $p_header['compressed_size'] = strlen($v_content);
1397
- $p_header['compression'] = 8;
1398
- }
1399
- if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
1400
- @fclose($v_file);
1401
- return $v_result;
1402
- }
1403
- @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']);
1404
- }
1405
- else if ($p_filedescr['type'] == 'folder') {
1406
- if (@substr($p_header['stored_filename'], -1) != '/') {
1407
- $p_header['stored_filename'] .= '/';
1408
- }
1409
- $p_header['size'] = 0;
1410
- $p_header['external'] = 0x00000010; // Value for a folder : to be checked
1411
- if (($v_result = $this->privWriteFileHeader($p_header)) != 1)
1412
- {
1413
- return $v_result;
1414
- }
1415
- }
1416
- }
1417
- if (isset($p_options[PCLZIP_CB_POST_ADD])) {
1418
- $v_local_header = array();
1419
- $this->privConvertHeader2FileInfo($p_header, $v_local_header);
1420
- // eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);');
1421
- $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header);
1422
- if ($v_result == 0) {
1423
- $v_result = 1;
1424
- }
1425
- }
1426
- return $v_result;
1427
- }
1428
- function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options)
1429
- {
1430
- $v_result=PCLZIP_ERR_NO_ERROR;
1431
- $p_filename = $p_filedescr['filename'];
1432
- if (($v_file = @fopen($p_filename, "rb")) == 0) {
1433
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode");
1434
- return PclZip::errorCode();
1435
- }
1436
- $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz';
1437
- if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) {
1438
- fclose($v_file);
1439
- PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode');
1440
- return PclZip::errorCode();
1441
- }
1442
- $v_size = filesize($p_filename);
1443
- while ($v_size != 0) {
1444
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
1445
- $v_buffer = @fread($v_file, $v_read_size);
1446
- @gzputs($v_file_compressed, $v_buffer, $v_read_size);
1447
- $v_size -= $v_read_size;
1448
- }
1449
- @fclose($v_file);
1450
- @gzclose($v_file_compressed);
1451
- if (filesize($v_gzip_temp_name) < 18) {
1452
- PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes');
1453
- return PclZip::errorCode();
1454
- }
1455
- if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) {
1456
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
1457
- return PclZip::errorCode();
1458
- }
1459
- $v_binary_data = @fread($v_file_compressed, 10);
1460
- $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data);
1461
- $v_data_header['os'] = bin2hex($v_data_header['os']);
1462
- @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8);
1463
- $v_binary_data = @fread($v_file_compressed, 8);
1464
- $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data);
1465
- $p_header['compression'] = ord($v_data_header['cm']);
1466
- $p_header['crc'] = $v_data_footer['crc'];
1467
- $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18;
1468
- @fclose($v_file_compressed);
1469
- if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
1470
- return $v_result;
1471
- }
1472
- if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0)
1473
- {
1474
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
1475
- return PclZip::errorCode();
1476
- }
1477
- fseek($v_file_compressed, 10);
1478
- $v_size = $p_header['compressed_size'];
1479
- while ($v_size != 0)
1480
- {
1481
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
1482
- $v_buffer = @fread($v_file_compressed, $v_read_size);
1483
- @fwrite($this->zip_fd, $v_buffer, $v_read_size);
1484
- $v_size -= $v_read_size;
1485
- }
1486
- @fclose($v_file_compressed);
1487
- @unlink($v_gzip_temp_name);
1488
- return $v_result;
1489
- }
1490
- function privCalculateStoredFilename(&$p_filedescr, &$p_options)
1491
- {
1492
- $v_result=1;
1493
- $p_filename = $p_filedescr['filename'];
1494
- if (isset($p_options[PCLZIP_OPT_ADD_PATH])) {
1495
- $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH];
1496
- }
1497
- else {
1498
- $p_add_dir = '';
1499
- }
1500
- if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) {
1501
- $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH];
1502
- }
1503
- else {
1504
- $p_remove_dir = '';
1505
- }
1506
- if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
1507
- $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH];
1508
- }
1509
- else {
1510
- $p_remove_all_dir = 0;
1511
- }
1512
- if (isset($p_filedescr['new_full_name'])) {
1513
- $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']);
1514
- }
1515
- else {
1516
- if (isset($p_filedescr['new_short_name'])) {
1517
- $v_path_info = pathinfo($p_filename);
1518
- $v_dir = '';
1519
- if ($v_path_info['dirname'] != '') {
1520
- $v_dir = $v_path_info['dirname'].'/';
1521
- }
1522
- $v_stored_filename = $v_dir.$p_filedescr['new_short_name'];
1523
- }
1524
- else {
1525
- $v_stored_filename = $p_filename;
1526
- }
1527
- if ($p_remove_all_dir) {
1528
- $v_stored_filename = basename($p_filename);
1529
- }
1530
- else if ($p_remove_dir != "") {
1531
- if (substr($p_remove_dir, -1) != '/')
1532
- $p_remove_dir .= "/";
1533
- if ( (substr($p_filename, 0, 2) == "./")
1534
- || (substr($p_remove_dir, 0, 2) == "./")) {
1535
- if ( (substr($p_filename, 0, 2) == "./")
1536
- && (substr($p_remove_dir, 0, 2) != "./")) {
1537
- $p_remove_dir = "./".$p_remove_dir;
1538
- }
1539
- if ( (substr($p_filename, 0, 2) != "./")
1540
- && (substr($p_remove_dir, 0, 2) == "./")) {
1541
- $p_remove_dir = substr($p_remove_dir, 2);
1542
- }
1543
- }
1544
- $v_compare = PclZipUtilPathInclusion($p_remove_dir,
1545
- $v_stored_filename);
1546
- if ($v_compare > 0) {
1547
- if ($v_compare == 2) {
1548
- $v_stored_filename = "";
1549
- }
1550
- else {
1551
- $v_stored_filename = substr($v_stored_filename,
1552
- strlen($p_remove_dir));
1553
- }
1554
- }
1555
- }
1556
- $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename);
1557
- if ($p_add_dir != "") {
1558
- if (substr($p_add_dir, -1) == "/")
1559
- $v_stored_filename = $p_add_dir.$v_stored_filename;
1560
- else
1561
- $v_stored_filename = $p_add_dir."/".$v_stored_filename;
1562
- }
1563
- }
1564
- $v_stored_filename = PclZipUtilPathReduction($v_stored_filename);
1565
- $p_filedescr['stored_filename'] = $v_stored_filename;
1566
- return $v_result;
1567
- }
1568
- function privWriteFileHeader(&$p_header)
1569
- {
1570
- $v_result=1;
1571
- $p_header['offset'] = ftell($this->zip_fd);
1572
- $v_date = getdate($p_header['mtime']);
1573
- $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
1574
- $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
1575
- $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50,
1576
- $p_header['version_extracted'], $p_header['flag'],
1577
- $p_header['compression'], $v_mtime, $v_mdate,
1578
- $p_header['crc'], $p_header['compressed_size'],
1579
- $p_header['size'],
1580
- strlen($p_header['stored_filename']),
1581
- $p_header['extra_len']);
1582
- fputs($this->zip_fd, $v_binary_data, 30);
1583
- if (strlen($p_header['stored_filename']) != 0)
1584
- {
1585
- fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
1586
- }
1587
- if ($p_header['extra_len'] != 0)
1588
- {
1589
- fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
1590
- }
1591
- return $v_result;
1592
- }
1593
- function privWriteCentralFileHeader(&$p_header)
1594
- {
1595
- $v_result=1;
1596
- $v_date = getdate($p_header['mtime']);
1597
- $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
1598
- $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
1599
- $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50,
1600
- $p_header['version'], $p_header['version_extracted'],
1601
- $p_header['flag'], $p_header['compression'],
1602
- $v_mtime, $v_mdate, $p_header['crc'],
1603
- $p_header['compressed_size'], $p_header['size'],
1604
- strlen($p_header['stored_filename']),
1605
- $p_header['extra_len'], $p_header['comment_len'],
1606
- $p_header['disk'], $p_header['internal'],
1607
- $p_header['external'], $p_header['offset']);
1608
- fputs($this->zip_fd, $v_binary_data, 46);
1609
- if (strlen($p_header['stored_filename']) != 0)
1610
- {
1611
- fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
1612
- }
1613
- if ($p_header['extra_len'] != 0)
1614
- {
1615
- fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
1616
- }
1617
- if ($p_header['comment_len'] != 0)
1618
- {
1619
- fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']);
1620
- }
1621
- return $v_result;
1622
- }
1623
- function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment)
1624
- {
1625
- $v_result=1;
1626
- $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries,
1627
- $p_nb_entries, $p_size,
1628
- $p_offset, strlen($p_comment));
1629
- fputs($this->zip_fd, $v_binary_data, 22);
1630
- if (strlen($p_comment) != 0)
1631
- {
1632
- fputs($this->zip_fd, $p_comment, strlen($p_comment));
1633
- }
1634
- return $v_result;
1635
- }
1636
- function privList(&$p_list)
1637
- {
1638
- $v_result=1;
1639
- $this->privDisableMagicQuotes();
1640
- if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
1641
- {
1642
- $this->privSwapBackMagicQuotes();
1643
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
1644
- return PclZip::errorCode();
1645
- }
1646
- $v_central_dir = array();
1647
- if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
1648
- {
1649
- $this->privSwapBackMagicQuotes();
1650
- return $v_result;
1651
- }
1652
- @rewind($this->zip_fd);
1653
- if (@fseek($this->zip_fd, $v_central_dir['offset']))
1654
- {
1655
- $this->privSwapBackMagicQuotes();
1656
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
1657
- return PclZip::errorCode();
1658
- }
1659
- for ($i=0; $i<$v_central_dir['entries']; $i++)
1660
- {
1661
- if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
1662
- {
1663
- $this->privSwapBackMagicQuotes();
1664
- return $v_result;
1665
- }
1666
- $v_header['index'] = $i;
1667
- $this->privConvertHeader2FileInfo($v_header, $p_list[$i]);
1668
- unset($v_header);
1669
- }
1670
- $this->privCloseFd();
1671
- $this->privSwapBackMagicQuotes();
1672
- return $v_result;
1673
- }
1674
- function privConvertHeader2FileInfo($p_header, &$p_info)
1675
- {
1676
- $v_result=1;
1677
- $v_temp_path = PclZipUtilPathReduction($p_header['filename']);
1678
- $p_info['filename'] = $v_temp_path;
1679
- $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']);
1680
- $p_info['stored_filename'] = $v_temp_path;
1681
- $p_info['size'] = $p_header['size'];
1682
- $p_info['compressed_size'] = $p_header['compressed_size'];
1683
- $p_info['mtime'] = $p_header['mtime'];
1684
- $p_info['comment'] = $p_header['comment'];
1685
- $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010);
1686
- $p_info['index'] = $p_header['index'];
1687
- $p_info['status'] = $p_header['status'];
1688
- $p_info['crc'] = $p_header['crc'];
1689
- return $v_result;
1690
- }
1691
- function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
1692
- {
1693
- $v_result=1;
1694
- $this->privDisableMagicQuotes();
1695
- if ( ($p_path == "")
1696
- || ( (substr($p_path, 0, 1) != "/")
1697
- && (substr($p_path, 0, 3) != "../")
1698
- && (substr($p_path,1,2)!=":/")))
1699
- $p_path = "./".$p_path;
1700
- if (($p_path != "./") && ($p_path != "/"))
1701
- {
1702
- while (substr($p_path, -1) == "/")
1703
- {
1704
- $p_path = substr($p_path, 0, strlen($p_path)-1);
1705
- }
1706
- }
1707
- if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/'))
1708
- {
1709
- $p_remove_path .= '/';
1710
- }
1711
- $p_remove_path_size = strlen($p_remove_path);
1712
- if (($v_result = $this->privOpenFd('rb')) != 1)
1713
- {
1714
- $this->privSwapBackMagicQuotes();
1715
- return $v_result;
1716
- }
1717
- $v_central_dir = array();
1718
- if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
1719
- {
1720
- $this->privCloseFd();
1721
- $this->privSwapBackMagicQuotes();
1722
- return $v_result;
1723
- }
1724
- $v_pos_entry = $v_central_dir['offset'];
1725
- $j_start = 0;
1726
- for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
1727
- {
1728
- @rewind($this->zip_fd);
1729
- if (@fseek($this->zip_fd, $v_pos_entry))
1730
- {
1731
- $this->privCloseFd();
1732
- $this->privSwapBackMagicQuotes();
1733
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
1734
- return PclZip::errorCode();
1735
- }
1736
- $v_header = array();
1737
- if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
1738
- {
1739
- $this->privCloseFd();
1740
- $this->privSwapBackMagicQuotes();
1741
- return $v_result;
1742
- }
1743
- $v_header['index'] = $i;
1744
- $v_pos_entry = ftell($this->zip_fd);
1745
- $v_extract = false;
1746
- if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
1747
- && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
1748
- for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_extract); $j++) {
1749
- if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
1750
- if ( (strlen($v_header['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
1751
- && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
1752
- $v_extract = true;
1753
- }
1754
- }
1755
- elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
1756
- $v_extract = true;
1757
- }
1758
- }
1759
- }
1760
- /*
1761
- else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
1762
- && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
1763
- if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) {
1764
- $v_extract = true;
1765
- }
1766
- }
1767
- */
1768
- else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
1769
- && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
1770
- if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) {
1771
- $v_extract = true;
1772
- }
1773
- }
1774
- else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
1775
- && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
1776
- for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_extract); $j++) {
1777
- if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
1778
- $v_extract = true;
1779
- }
1780
- if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
1781
- $j_start = $j+1;
1782
- }
1783
- if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
1784
- break;
1785
- }
1786
- }
1787
- }
1788
- else {
1789
- $v_extract = true;
1790
- }
1791
- // ----- Check compression method
1792
- if ( ($v_extract)
1793
- && ( ($v_header['compression'] != 8)
1794
- && ($v_header['compression'] != 0))) {
1795
- $v_header['status'] = 'unsupported_compression';
1796
- if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
1797
- && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
1798
- $this->privSwapBackMagicQuotes();
1799
- PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION,
1800
- "Filename '".$v_header['stored_filename']."' is "
1801
- ."compressed by an unsupported compression "
1802
- ."method (".$v_header['compression'].") ");
1803
- return PclZip::errorCode();
1804
- }
1805
- }
1806
- // ----- Check encrypted files
1807
- if (($v_extract) && (($v_header['flag'] & 1) == 1)) {
1808
- $v_header['status'] = 'unsupported_encryption';
1809
- if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
1810
- && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
1811
- $this->privSwapBackMagicQuotes();
1812
- PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION,
1813
- "Unsupported encryption for "
1814
- ." filename '".$v_header['stored_filename']
1815
- ."'");
1816
- return PclZip::errorCode();
1817
- }
1818
- }
1819
- if (($v_extract) && ($v_header['status'] != 'ok')) {
1820
- $v_result = $this->privConvertHeader2FileInfo($v_header,
1821
- $p_file_list[$v_nb_extracted++]);
1822
- if ($v_result != 1) {
1823
- $this->privCloseFd();
1824
- $this->privSwapBackMagicQuotes();
1825
- return $v_result;
1826
- }
1827
- $v_extract = false;
1828
- }
1829
- if ($v_extract)
1830
- {
1831
- @rewind($this->zip_fd);
1832
- if (@fseek($this->zip_fd, $v_header['offset']))
1833
- {
1834
- $this->privCloseFd();
1835
- $this->privSwapBackMagicQuotes();
1836
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
1837
- return PclZip::errorCode();
1838
- }
1839
- if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) {
1840
- $v_string = '';
1841
- $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options);
1842
- if ($v_result1 < 1) {
1843
- $this->privCloseFd();
1844
- $this->privSwapBackMagicQuotes();
1845
- return $v_result1;
1846
- }
1847
- if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1)
1848
- {
1849
- $this->privCloseFd();
1850
- $this->privSwapBackMagicQuotes();
1851
- return $v_result;
1852
- }
1853
- $p_file_list[$v_nb_extracted]['content'] = $v_string;
1854
- $v_nb_extracted++;
1855
- if ($v_result1 == 2) {
1856
- break;
1857
- }
1858
- }
1859
- elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT]))
1860
- && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) {
1861
- $v_result1 = $this->privExtractFileInOutput($v_header, $p_options);
1862
- if ($v_result1 < 1) {
1863
- $this->privCloseFd();
1864
- $this->privSwapBackMagicQuotes();
1865
- return $v_result1;
1866
- }
1867
- if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) {
1868
- $this->privCloseFd();
1869
- $this->privSwapBackMagicQuotes();
1870
- return $v_result;
1871
- }
1872
- if ($v_result1 == 2) {
1873
- break;
1874
- }
1875
- }
1876
- else {
1877
- $v_result1 = $this->privExtractFile($v_header,
1878
- $p_path, $p_remove_path,
1879
- $p_remove_all_path,
1880
- $p_options);
1881
- if ($v_result1 < 1) {
1882
- $this->privCloseFd();
1883
- $this->privSwapBackMagicQuotes();
1884
- return $v_result1;
1885
- }
1886
- if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1)
1887
- {
1888
- $this->privCloseFd();
1889
- $this->privSwapBackMagicQuotes();
1890
- return $v_result;
1891
- }
1892
- if ($v_result1 == 2) {
1893
- break;
1894
- }
1895
- }
1896
- }
1897
- }
1898
- $this->privCloseFd();
1899
- $this->privSwapBackMagicQuotes();
1900
- return $v_result;
1901
- }
1902
- function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
1903
- {
1904
- $v_result=1;
1905
- if (($v_result = $this->privReadFileHeader($v_header)) != 1)
1906
- {
1907
- return $v_result;
1908
- }
1909
- if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
1910
- }
1911
- if ($p_remove_all_path == true) {
1912
- if (($p_entry['external']&0x00000010)==0x00000010) {
1913
- $p_entry['status'] = "filtered";
1914
- return $v_result;
1915
- }
1916
- $p_entry['filename'] = basename($p_entry['filename']);
1917
- }
1918
- else if ($p_remove_path != "")
1919
- {
1920
- if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2)
1921
- {
1922
- $p_entry['status'] = "filtered";
1923
- return $v_result;
1924
- }
1925
- $p_remove_path_size = strlen($p_remove_path);
1926
- if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path)
1927
- {
1928
- $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size);
1929
- }
1930
- }
1931
- if ($p_path != '') {
1932
- $p_entry['filename'] = $p_path."/".$p_entry['filename'];
1933
- }
1934
- if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) {
1935
- $v_inclusion
1936
- = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION],
1937
- $p_entry['filename']);
1938
- if ($v_inclusion == 0) {
1939
- PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION,
1940
- "Filename '".$p_entry['filename']."' is "
1941
- ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION");
1942
- return PclZip::errorCode();
1943
- }
1944
- }
1945
- if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
1946
- $v_local_header = array();
1947
- $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
1948
- // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
1949
- $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
1950
- if ($v_result == 0) {
1951
- $p_entry['status'] = "skipped";
1952
- $v_result = 1;
1953
- }
1954
- if ($v_result == 2) {
1955
- $p_entry['status'] = "aborted";
1956
- $v_result = PCLZIP_ERR_USER_ABORTED;
1957
- }
1958
- $p_entry['filename'] = $v_local_header['filename'];
1959
- }
1960
- if ($p_entry['status'] == 'ok') {
1961
- if (file_exists($p_entry['filename']))
1962
- {
1963
- if (is_dir($p_entry['filename']))
1964
- {
1965
- $p_entry['status'] = "already_a_directory";
1966
- if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
1967
- && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
1968
- PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY,
1969
- "Filename '".$p_entry['filename']."' is "
1970
- ."already used by an existing directory");
1971
- return PclZip::errorCode();
1972
- }
1973
- }
1974
- else if (!is_writeable($p_entry['filename']))
1975
- {
1976
- $p_entry['status'] = "write_protected";
1977
- if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
1978
- && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
1979
- PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
1980
- "Filename '".$p_entry['filename']."' exists "
1981
- ."and is write protected");
1982
- return PclZip::errorCode();
1983
- }
1984
- }
1985
- else if (filemtime($p_entry['filename']) > $p_entry['mtime'])
1986
- {
1987
- if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER]))
1988
- && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) {
1989
- }
1990
- else {
1991
- $p_entry['status'] = "newer_exist";
1992
- if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
1993
- && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
1994
- PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
1995
- "Newer version of '".$p_entry['filename']."' exists "
1996
- ."and option PCLZIP_OPT_REPLACE_NEWER is not selected");
1997
- return PclZip::errorCode();
1998
- }
1999
- }
2000
- }
2001
- else {
2002
- }
2003
- }
2004
- else {
2005
- if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/'))
2006
- $v_dir_to_check = $p_entry['filename'];
2007
- else if (!strstr($p_entry['filename'], "/"))
2008
- $v_dir_to_check = "";
2009
- else
2010
- $v_dir_to_check = dirname($p_entry['filename']);
2011
- if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) {
2012
- $p_entry['status'] = "path_creation_fail";
2013
- $v_result = 1;
2014
- }
2015
- }
2016
- }
2017
- if ($p_entry['status'] == 'ok') {
2018
- if (!(($p_entry['external']&0x00000010)==0x00000010))
2019
- {
2020
- if ($p_entry['compression'] == 0) {
2021
- // ----- Opening destination file
2022
- if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0)
2023
- {
2024
- $p_entry['status'] = "write_error";
2025
- return $v_result;
2026
- }
2027
- $v_size = $p_entry['compressed_size'];
2028
- while ($v_size != 0)
2029
- {
2030
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2031
- $v_buffer = @fread($this->zip_fd, $v_read_size);
2032
- /* Try to speed up the code
2033
- $v_binary_data = pack('a'.$v_read_size, $v_buffer);
2034
- @fwrite($v_dest_file, $v_binary_data, $v_read_size);
2035
- */
2036
- @fwrite($v_dest_file, $v_buffer, $v_read_size);
2037
- $v_size -= $v_read_size;
2038
- }
2039
- fclose($v_dest_file);
2040
- touch($p_entry['filename'], $p_entry['mtime']);
2041
- }
2042
- else {
2043
- if (($p_entry['flag'] & 1) == 1) {
2044
- PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.');
2045
- return PclZip::errorCode();
2046
- }
2047
- if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF]))
2048
- && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON])
2049
- || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
2050
- && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])) ) ) {
2051
- $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options);
2052
- if ($v_result < PCLZIP_ERR_NO_ERROR) {
2053
- return $v_result;
2054
- }
2055
- }
2056
- else {
2057
- $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
2058
- $v_file_content = @gzinflate($v_buffer);
2059
- unset($v_buffer);
2060
- if ($v_file_content === FALSE) {
2061
- $p_entry['status'] = "error";
2062
- return $v_result;
2063
- }
2064
- if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
2065
- $p_entry['status'] = "write_error";
2066
- return $v_result;
2067
- }
2068
- @fwrite($v_dest_file, $v_file_content, $p_entry['size']);
2069
- unset($v_file_content);
2070
- @fclose($v_dest_file);
2071
- }
2072
- @touch($p_entry['filename'], $p_entry['mtime']);
2073
- }
2074
- if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) {
2075
- @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]);
2076
- }
2077
- }
2078
- }
2079
- // ----- Change abort status
2080
- if ($p_entry['status'] == "aborted") {
2081
- $p_entry['status'] = "skipped";
2082
- }
2083
- elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
2084
- $v_local_header = array();
2085
- $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
2086
- // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
2087
- $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
2088
- if ($v_result == 2) {
2089
- $v_result = PCLZIP_ERR_USER_ABORTED;
2090
- }
2091
- }
2092
- return $v_result;
2093
- }
2094
- function privExtractFileUsingTempFile(&$p_entry, &$p_options)
2095
- {
2096
- $v_result=1;
2097
- $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz';
2098
- if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) {
2099
- fclose($v_file);
2100
- PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode');
2101
- return PclZip::errorCode();
2102
- }
2103
- $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3));
2104
- @fwrite($v_dest_file, $v_binary_data, 10);
2105
- $v_size = $p_entry['compressed_size'];
2106
- while ($v_size != 0)
2107
- {
2108
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2109
- $v_buffer = @fread($this->zip_fd, $v_read_size);
2110
- @fwrite($v_dest_file, $v_buffer, $v_read_size);
2111
- $v_size -= $v_read_size;
2112
- }
2113
- $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']);
2114
- @fwrite($v_dest_file, $v_binary_data, 8);
2115
- @fclose($v_dest_file);
2116
- if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
2117
- $p_entry['status'] = "write_error";
2118
- return $v_result;
2119
- }
2120
- if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) {
2121
- @fclose($v_dest_file);
2122
- $p_entry['status'] = "read_error";
2123
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
2124
- return PclZip::errorCode();
2125
- }
2126
- $v_size = $p_entry['size'];
2127
- while ($v_size != 0) {
2128
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2129
- $v_buffer = @gzread($v_src_file, $v_read_size);
2130
- @fwrite($v_dest_file, $v_buffer, $v_read_size);
2131
- $v_size -= $v_read_size;
2132
- }
2133
- @fclose($v_dest_file);
2134
- @gzclose($v_src_file);
2135
- @unlink($v_gzip_temp_name);
2136
- return $v_result;
2137
- }
2138
- function privExtractFileInOutput(&$p_entry, &$p_options)
2139
- {
2140
- $v_result=1;
2141
- if (($v_result = $this->privReadFileHeader($v_header)) != 1) {
2142
- return $v_result;
2143
- }
2144
- if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
2145
- }
2146
- if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
2147
- $v_local_header = array();
2148
- $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
2149
- // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
2150
- $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
2151
- if ($v_result == 0) {
2152
- $p_entry['status'] = "skipped";
2153
- $v_result = 1;
2154
- }
2155
- if ($v_result == 2) {
2156
- $p_entry['status'] = "aborted";
2157
- $v_result = PCLZIP_ERR_USER_ABORTED;
2158
- }
2159
- $p_entry['filename'] = $v_local_header['filename'];
2160
- }
2161
- if ($p_entry['status'] == 'ok') {
2162
- if (!(($p_entry['external']&0x00000010)==0x00000010)) {
2163
- if ($p_entry['compressed_size'] == $p_entry['size']) {
2164
- $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
2165
- echo $v_buffer;
2166
- unset($v_buffer);
2167
- }
2168
- else {
2169
- $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
2170
- $v_file_content = gzinflate($v_buffer);
2171
- unset($v_buffer);
2172
- echo $v_file_content;
2173
- unset($v_file_content);
2174
- }
2175
- }
2176
- }
2177
- // ----- Change abort status
2178
- if ($p_entry['status'] == "aborted") {
2179
- $p_entry['status'] = "skipped";
2180
- }
2181
- elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
2182
- $v_local_header = array();
2183
- $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
2184
- // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
2185
- $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
2186
- if ($v_result == 2) {
2187
- $v_result = PCLZIP_ERR_USER_ABORTED;
2188
- }
2189
- }
2190
- return $v_result;
2191
- }
2192
- function privExtractFileAsString(&$p_entry, &$p_string, &$p_options)
2193
- {
2194
- $v_result=1;
2195
- $v_header = array();
2196
- if (($v_result = $this->privReadFileHeader($v_header)) != 1)
2197
- {
2198
- return $v_result;
2199
- }
2200
- if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
2201
- }
2202
- if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
2203
- $v_local_header = array();
2204
- $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
2205
- // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
2206
- $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
2207
- if ($v_result == 0) {
2208
- $p_entry['status'] = "skipped";
2209
- $v_result = 1;
2210
- }
2211
- if ($v_result == 2) {
2212
- $p_entry['status'] = "aborted";
2213
- $v_result = PCLZIP_ERR_USER_ABORTED;
2214
- }
2215
- $p_entry['filename'] = $v_local_header['filename'];
2216
- }
2217
- if ($p_entry['status'] == 'ok') {
2218
- if (!(($p_entry['external']&0x00000010)==0x00000010)) {
2219
- if ($p_entry['compression'] == 0) {
2220
- $p_string = @fread($this->zip_fd, $p_entry['compressed_size']);
2221
- }
2222
- else {
2223
- $v_data = @fread($this->zip_fd, $p_entry['compressed_size']);
2224
- if (($p_string = @gzinflate($v_data)) === FALSE) {
2225
- }
2226
- }
2227
- }
2228
- else {
2229
- }
2230
- }
2231
- // ----- Change abort status
2232
- if ($p_entry['status'] == "aborted") {
2233
- $p_entry['status'] = "skipped";
2234
- }
2235
- elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
2236
- $v_local_header = array();
2237
- $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
2238
- $v_local_header['content'] = $p_string;
2239
- $p_string = '';
2240
- // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
2241
- $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
2242
- $p_string = $v_local_header['content'];
2243
- unset($v_local_header['content']);
2244
- if ($v_result == 2) {
2245
- $v_result = PCLZIP_ERR_USER_ABORTED;
2246
- }
2247
- }
2248
- return $v_result;
2249
- }
2250
- function privReadFileHeader(&$p_header)
2251
- {
2252
- $v_result=1;
2253
- $v_binary_data = @fread($this->zip_fd, 4);
2254
- $v_data = unpack('Vid', $v_binary_data);
2255
- if ($v_data['id'] != 0x04034b50)
2256
- {
2257
- PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
2258
- return PclZip::errorCode();
2259
- }
2260
- $v_binary_data = fread($this->zip_fd, 26);
2261
- if (strlen($v_binary_data) != 26)
2262
- {
2263
- $p_header['filename'] = "";
2264
- $p_header['status'] = "invalid_header";
2265
- PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
2266
- return PclZip::errorCode();
2267
- }
2268
- $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data);
2269
- $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']);
2270
- if ($v_data['extra_len'] != 0) {
2271
- $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']);
2272
- }
2273
- else {
2274
- $p_header['extra'] = '';
2275
- }
2276
- $p_header['version_extracted'] = $v_data['version'];
2277
- $p_header['compression'] = $v_data['compression'];
2278
- $p_header['size'] = $v_data['size'];
2279
- $p_header['compressed_size'] = $v_data['compressed_size'];
2280
- $p_header['crc'] = $v_data['crc'];
2281
- $p_header['flag'] = $v_data['flag'];
2282
- $p_header['filename_len'] = $v_data['filename_len'];
2283
- $p_header['mdate'] = $v_data['mdate'];
2284
- $p_header['mtime'] = $v_data['mtime'];
2285
- if ($p_header['mdate'] && $p_header['mtime'])
2286
- {
2287
- $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
2288
- $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
2289
- $v_seconde = ($p_header['mtime'] & 0x001F)*2;
2290
- $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
2291
- $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
2292
- $v_day = $p_header['mdate'] & 0x001F;
2293
- $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
2294
- }
2295
- else
2296
- {
2297
- $p_header['mtime'] = time();
2298
- }
2299
- $p_header['stored_filename'] = $p_header['filename'];
2300
- $p_header['status'] = "ok";
2301
- return $v_result;
2302
- }
2303
- function privReadCentralFileHeader(&$p_header)
2304
- {
2305
- $v_result=1;
2306
- $v_binary_data = @fread($this->zip_fd, 4);
2307
- $v_data = unpack('Vid', $v_binary_data);
2308
- if ($v_data['id'] != 0x02014b50)
2309
- {
2310
- PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
2311
- return PclZip::errorCode();
2312
- }
2313
- $v_binary_data = fread($this->zip_fd, 42);
2314
- if (strlen($v_binary_data) != 42)
2315
- {
2316
- $p_header['filename'] = "";
2317
- $p_header['status'] = "invalid_header";
2318
- PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
2319
- return PclZip::errorCode();
2320
- }
2321
- $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data);
2322
- if ($p_header['filename_len'] != 0)
2323
- $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']);
2324
- else
2325
- $p_header['filename'] = '';
2326
- if ($p_header['extra_len'] != 0)
2327
- $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']);
2328
- else
2329
- $p_header['extra'] = '';
2330
- if ($p_header['comment_len'] != 0)
2331
- $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']);
2332
- else
2333
- $p_header['comment'] = '';
2334
- if (1)
2335
- {
2336
- $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
2337
- $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
2338
- $v_seconde = ($p_header['mtime'] & 0x001F)*2;
2339
- $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
2340
- $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
2341
- $v_day = $p_header['mdate'] & 0x001F;
2342
- $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
2343
- }
2344
- else
2345
- {
2346
- $p_header['mtime'] = time();
2347
- }
2348
- $p_header['stored_filename'] = $p_header['filename'];
2349
- $p_header['status'] = 'ok';
2350
- if (substr($p_header['filename'], -1) == '/') {
2351
- $p_header['external'] = 0x00000010;
2352
- }
2353
- return $v_result;
2354
- }
2355
- function privCheckFileHeaders(&$p_local_header, &$p_central_header)
2356
- {
2357
- $v_result=1;
2358
- // ----- Check the static values
2359
- // TBC
2360
- if ($p_local_header['filename'] != $p_central_header['filename']) {
2361
- }
2362
- if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) {
2363
- }
2364
- if ($p_local_header['flag'] != $p_central_header['flag']) {
2365
- }
2366
- if ($p_local_header['compression'] != $p_central_header['compression']) {
2367
- }
2368
- if ($p_local_header['mtime'] != $p_central_header['mtime']) {
2369
- }
2370
- if ($p_local_header['filename_len'] != $p_central_header['filename_len']) {
2371
- }
2372
- // ----- Look for flag bit 3
2373
- if (($p_local_header['flag'] & 8) == 8) {
2374
- $p_local_header['size'] = $p_central_header['size'];
2375
- $p_local_header['compressed_size'] = $p_central_header['compressed_size'];
2376
- $p_local_header['crc'] = $p_central_header['crc'];
2377
- }
2378
- return $v_result;
2379
- }
2380
- function privReadEndCentralDir(&$p_central_dir)
2381
- {
2382
- $v_result=1;
2383
- $v_size = filesize($this->zipname);
2384
- @fseek($this->zip_fd, $v_size);
2385
- if (@ftell($this->zip_fd) != $v_size)
2386
- {
2387
- PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\'');
2388
- return PclZip::errorCode();
2389
- }
2390
- $v_found = 0;
2391
- if ($v_size > 26) {
2392
- @fseek($this->zip_fd, $v_size-22);
2393
- if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22))
2394
- {
2395
- PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
2396
- return PclZip::errorCode();
2397
- }
2398
- $v_binary_data = @fread($this->zip_fd, 4);
2399
- $v_data = @unpack('Vid', $v_binary_data);
2400
- if ($v_data['id'] == 0x06054b50) {
2401
- $v_found = 1;
2402
- }
2403
- $v_pos = ftell($this->zip_fd);
2404
- }
2405
- if (!$v_found) {
2406
- $v_maximum_size = 65557; // 0xFFFF + 22;
2407
- if ($v_maximum_size > $v_size)
2408
- $v_maximum_size = $v_size;
2409
- @fseek($this->zip_fd, $v_size-$v_maximum_size);
2410
- if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size))
2411
- {
2412
- PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
2413
- return PclZip::errorCode();
2414
- }
2415
- $v_pos = ftell($this->zip_fd);
2416
- $v_bytes = 0x00000000;
2417
- while ($v_pos < $v_size)
2418
- {
2419
- $v_byte = @fread($this->zip_fd, 1);
2420
- $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte);
2421
- if ($v_bytes == 0x504b0506)
2422
- {
2423
- $v_pos++;
2424
- break;
2425
- }
2426
- $v_pos++;
2427
- }
2428
- if ($v_pos == $v_size)
2429
- {
2430
- PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature");
2431
- return PclZip::errorCode();
2432
- }
2433
- }
2434
- $v_binary_data = fread($this->zip_fd, 18);
2435
- if (strlen($v_binary_data) != 18)
2436
- {
2437
- PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data));
2438
- return PclZip::errorCode();
2439
- }
2440
- $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data);
2441
- if (($v_pos + $v_data['comment_size'] + 18) != $v_size) {
2442
- // ----- Removed in release 2.2 see readme file
2443
- // The check of the file size is a little too strict.
2444
- // Some bugs where found when a zip is encrypted/decrypted with 'crypt'.
2445
- // While decrypted, zip has training 0 bytes
2446
- if (0) {
2447
- PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT,
2448
- 'The central dir is not at the end of the archive.'
2449
- .' Some trailing bytes exists after the archive.');
2450
- return PclZip::errorCode();
2451
- }
2452
- }
2453
- if ($v_data['comment_size'] != 0) {
2454
- $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']);
2455
- }
2456
- else
2457
- $p_central_dir['comment'] = '';
2458
- $p_central_dir['entries'] = $v_data['entries'];
2459
- $p_central_dir['disk_entries'] = $v_data['disk_entries'];
2460
- $p_central_dir['offset'] = $v_data['offset'];
2461
- $p_central_dir['size'] = $v_data['size'];
2462
- $p_central_dir['disk'] = $v_data['disk'];
2463
- $p_central_dir['disk_start'] = $v_data['disk_start'];
2464
- return $v_result;
2465
- }
2466
- function privDeleteByRule(&$p_result_list, &$p_options)
2467
- {
2468
- $v_result=1;
2469
- $v_list_detail = array();
2470
- if (($v_result=$this->privOpenFd('rb')) != 1)
2471
- {
2472
- return $v_result;
2473
- }
2474
- $v_central_dir = array();
2475
- if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
2476
- {
2477
- $this->privCloseFd();
2478
- return $v_result;
2479
- }
2480
- @rewind($this->zip_fd);
2481
- $v_pos_entry = $v_central_dir['offset'];
2482
- @rewind($this->zip_fd);
2483
- if (@fseek($this->zip_fd, $v_pos_entry))
2484
- {
2485
- $this->privCloseFd();
2486
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
2487
- return PclZip::errorCode();
2488
- }
2489
- $v_header_list = array();
2490
- $j_start = 0;
2491
- for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
2492
- {
2493
- $v_header_list[$v_nb_extracted] = array();
2494
- if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1)
2495
- {
2496
- $this->privCloseFd();
2497
- return $v_result;
2498
- }
2499
- $v_header_list[$v_nb_extracted]['index'] = $i;
2500
- $v_found = false;
2501
- if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
2502
- && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
2503
- for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) {
2504
- if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
2505
- if ( (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
2506
- && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
2507
- $v_found = true;
2508
- }
2509
- elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */
2510
- && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
2511
- $v_found = true;
2512
- }
2513
- }
2514
- elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
2515
- $v_found = true;
2516
- }
2517
- }
2518
- }
2519
- /*
2520
- else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
2521
- && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
2522
- if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
2523
- $v_found = true;
2524
- }
2525
- }
2526
- */
2527
- else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
2528
- && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
2529
- if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
2530
- $v_found = true;
2531
- }
2532
- }
2533
- else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
2534
- && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
2535
- for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) {
2536
- if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
2537
- $v_found = true;
2538
- }
2539
- if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
2540
- $j_start = $j+1;
2541
- }
2542
- if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
2543
- break;
2544
- }
2545
- }
2546
- }
2547
- else {
2548
- $v_found = true;
2549
- }
2550
- if ($v_found)
2551
- {
2552
- unset($v_header_list[$v_nb_extracted]);
2553
- }
2554
- else
2555
- {
2556
- $v_nb_extracted++;
2557
- }
2558
- }
2559
- if ($v_nb_extracted > 0) {
2560
- $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
2561
- $v_temp_zip = new PclZip($v_zip_temp_name);
2562
- if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) {
2563
- $this->privCloseFd();
2564
- return $v_result;
2565
- }
2566
- for ($i=0; $i<sizeof($v_header_list); $i++) {
2567
- @rewind($this->zip_fd);
2568
- if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) {
2569
- $this->privCloseFd();
2570
- $v_temp_zip->privCloseFd();
2571
- @unlink($v_zip_temp_name);
2572
- PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
2573
- return PclZip::errorCode();
2574
- }
2575
- $v_local_header = array();
2576
- if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) {
2577
- $this->privCloseFd();
2578
- $v_temp_zip->privCloseFd();
2579
- @unlink($v_zip_temp_name);
2580
- return $v_result;
2581
- }
2582
- if ($this->privCheckFileHeaders($v_local_header,
2583
- $v_header_list[$i]) != 1) {
2584
- }
2585
- unset($v_local_header);
2586
- if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) {
2587
- $this->privCloseFd();
2588
- $v_temp_zip->privCloseFd();
2589
- @unlink($v_zip_temp_name);
2590
- return $v_result;
2591
- }
2592
- if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) {
2593
- $this->privCloseFd();
2594
- $v_temp_zip->privCloseFd();
2595
- @unlink($v_zip_temp_name);
2596
- return $v_result;
2597
- }
2598
- }
2599
- $v_offset = @ftell($v_temp_zip->zip_fd);
2600
- for ($i=0; $i<sizeof($v_header_list); $i++) {
2601
- if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
2602
- $v_temp_zip->privCloseFd();
2603
- $this->privCloseFd();
2604
- @unlink($v_zip_temp_name);
2605
- return $v_result;
2606
- }
2607
- $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
2608
- }
2609
- $v_comment = '';
2610
- if (isset($p_options[PCLZIP_OPT_COMMENT])) {
2611
- $v_comment = $p_options[PCLZIP_OPT_COMMENT];
2612
- }
2613
- $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset;
2614
- if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) {
2615
- unset($v_header_list);
2616
- $v_temp_zip->privCloseFd();
2617
- $this->privCloseFd();
2618
- @unlink($v_zip_temp_name);
2619
- return $v_result;
2620
- }
2621
- $v_temp_zip->privCloseFd();
2622
- $this->privCloseFd();
2623
- @unlink($this->zipname);
2624
- PclZipUtilRename($v_zip_temp_name, $this->zipname);
2625
- unset($v_temp_zip);
2626
- }
2627
- else if ($v_central_dir['entries'] != 0) {
2628
- $this->privCloseFd();
2629
- if (($v_result = $this->privOpenFd('wb')) != 1) {
2630
- return $v_result;
2631
- }
2632
- if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) {
2633
- return $v_result;
2634
- }
2635
- $this->privCloseFd();
2636
- }
2637
- return $v_result;
2638
- }
2639
- function privDirCheck($p_dir, $p_is_dir=false)
2640
- {
2641
- $v_result = 1;
2642
- if (($p_is_dir) && (substr($p_dir, -1)=='/'))
2643
- {
2644
- $p_dir = substr($p_dir, 0, strlen($p_dir)-1);
2645
- }
2646
- if ((is_dir($p_dir)) || ($p_dir == ""))
2647
- {
2648
- return 1;
2649
- }
2650
- $p_parent_dir = dirname($p_dir);
2651
- if ($p_parent_dir != $p_dir)
2652
- {
2653
- if ($p_parent_dir != "")
2654
- {
2655
- if (($v_result = $this->privDirCheck($p_parent_dir)) != 1)
2656
- {
2657
- return $v_result;
2658
- }
2659
- }
2660
- }
2661
- if (!@mkdir($p_dir, 0777))
2662
- {
2663
- PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'");
2664
- return PclZip::errorCode();
2665
- }
2666
- return $v_result;
2667
- }
2668
- function privMerge(&$p_archive_to_add)
2669
- {
2670
- $v_result=1;
2671
- if (!is_file($p_archive_to_add->zipname))
2672
- {
2673
- $v_result = 1;
2674
- return $v_result;
2675
- }
2676
- if (!is_file($this->zipname))
2677
- {
2678
- $v_result = $this->privDuplicate($p_archive_to_add->zipname);
2679
- return $v_result;
2680
- }
2681
- if (($v_result=$this->privOpenFd('rb')) != 1)
2682
- {
2683
- return $v_result;
2684
- }
2685
- $v_central_dir = array();
2686
- if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
2687
- {
2688
- $this->privCloseFd();
2689
- return $v_result;
2690
- }
2691
- @rewind($this->zip_fd);
2692
- if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1)
2693
- {
2694
- $this->privCloseFd();
2695
- return $v_result;
2696
- }
2697
- $v_central_dir_to_add = array();
2698
- if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1)
2699
- {
2700
- $this->privCloseFd();
2701
- $p_archive_to_add->privCloseFd();
2702
- return $v_result;
2703
- }
2704
- @rewind($p_archive_to_add->zip_fd);
2705
- $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
2706
- if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
2707
- {
2708
- $this->privCloseFd();
2709
- $p_archive_to_add->privCloseFd();
2710
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
2711
- return PclZip::errorCode();
2712
- }
2713
- $v_size = $v_central_dir['offset'];
2714
- while ($v_size != 0)
2715
- {
2716
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2717
- $v_buffer = fread($this->zip_fd, $v_read_size);
2718
- @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
2719
- $v_size -= $v_read_size;
2720
- }
2721
- $v_size = $v_central_dir_to_add['offset'];
2722
- while ($v_size != 0)
2723
- {
2724
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2725
- $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size);
2726
- @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
2727
- $v_size -= $v_read_size;
2728
- }
2729
- $v_offset = @ftell($v_zip_temp_fd);
2730
- $v_size = $v_central_dir['size'];
2731
- while ($v_size != 0)
2732
- {
2733
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2734
- $v_buffer = @fread($this->zip_fd, $v_read_size);
2735
- @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
2736
- $v_size -= $v_read_size;
2737
- }
2738
- $v_size = $v_central_dir_to_add['size'];
2739
- while ($v_size != 0)
2740
- {
2741
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2742
- $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size);
2743
- @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
2744
- $v_size -= $v_read_size;
2745
- }
2746
- $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment'];
2747
- $v_size = @ftell($v_zip_temp_fd)-$v_offset;
2748
- $v_swap = $this->zip_fd;
2749
- $this->zip_fd = $v_zip_temp_fd;
2750
- $v_zip_temp_fd = $v_swap;
2751
- if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1)
2752
- {
2753
- $this->privCloseFd();
2754
- $p_archive_to_add->privCloseFd();
2755
- @fclose($v_zip_temp_fd);
2756
- $this->zip_fd = null;
2757
- unset($v_header_list);
2758
- return $v_result;
2759
- }
2760
- $v_swap = $this->zip_fd;
2761
- $this->zip_fd = $v_zip_temp_fd;
2762
- $v_zip_temp_fd = $v_swap;
2763
- $this->privCloseFd();
2764
- $p_archive_to_add->privCloseFd();
2765
- @fclose($v_zip_temp_fd);
2766
- @unlink($this->zipname);
2767
- PclZipUtilRename($v_zip_temp_name, $this->zipname);
2768
- return $v_result;
2769
- }
2770
- function privDuplicate($p_archive_filename)
2771
- {
2772
- $v_result=1;
2773
- if (!is_file($p_archive_filename))
2774
- {
2775
- $v_result = 1;
2776
- return $v_result;
2777
- }
2778
- if (($v_result=$this->privOpenFd('wb')) != 1)
2779
- {
2780
- return $v_result;
2781
- }
2782
- if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0)
2783
- {
2784
- $this->privCloseFd();
2785
- PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode');
2786
- return PclZip::errorCode();
2787
- }
2788
- $v_size = filesize($p_archive_filename);
2789
- while ($v_size != 0)
2790
- {
2791
- $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2792
- $v_buffer = fread($v_zip_temp_fd, $v_read_size);
2793
- @fwrite($this->zip_fd, $v_buffer, $v_read_size);
2794
- $v_size -= $v_read_size;
2795
- }
2796
- $this->privCloseFd();
2797
- @fclose($v_zip_temp_fd);
2798
- return $v_result;
2799
- }
2800
- function privErrorLog($p_error_code=0, $p_error_string='')
2801
- {
2802
- if (PCLZIP_ERROR_EXTERNAL == 1) {
2803
- PclError($p_error_code, $p_error_string);
2804
- }
2805
- else {
2806
- $this->error_code = $p_error_code;
2807
- $this->error_string = $p_error_string;
2808
- }
2809
- }
2810
- function privErrorReset()
2811
- {
2812
- if (PCLZIP_ERROR_EXTERNAL == 1) {
2813
- PclErrorReset();
2814
- }
2815
- else {
2816
- $this->error_code = 0;
2817
- $this->error_string = '';
2818
- }
2819
- }
2820
- function privDisableMagicQuotes()
2821
- {
2822
- $v_result=1;
2823
- if ( (!function_exists("get_magic_quotes_runtime"))
2824
- || (!function_exists("set_magic_quotes_runtime"))) {
2825
- return $v_result;
2826
- }
2827
-
2828
- if (version_compare(phpversion(), '7.0', '>=')) {
2829
- return $v_result;
2830
- }
2831
- if ($this->magic_quotes_status != -1) {
2832
- return $v_result;
2833
- }
2834
- // ----- Get and memorize the magic_quote value
2835
- $this->magic_quotes_status = @get_magic_quotes_runtime();
2836
- // ----- Disable magic_quotes
2837
- if ($this->magic_quotes_status == 1) {
2838
- @set_magic_quotes_runtime(0);
2839
- }
2840
- return $v_result;
2841
- }
2842
- function privSwapBackMagicQuotes()
2843
- {
2844
- $v_result=1;
2845
- if ( (!function_exists("get_magic_quotes_runtime"))
2846
- || (!function_exists("set_magic_quotes_runtime"))) {
2847
- return $v_result;
2848
- }
2849
-
2850
- if (version_compare(phpversion(), '7.0', '>=')) {
2851
- return $v_result;
2852
- }
2853
-
2854
- if ($this->magic_quotes_status != -1) {
2855
- return $v_result;
2856
- }
2857
- // ----- Swap back magic_quotes
2858
- if ($this->magic_quotes_status == 1) {
2859
- @set_magic_quotes_runtime($this->magic_quotes_status);
2860
- }
2861
- return $v_result;
2862
- }
2863
- }
2864
- function PclZipUtilPathReduction($p_dir)
2865
- {
2866
- $v_result = "";
2867
- if ($p_dir != "") {
2868
- $v_list = explode("/", $p_dir);
2869
- $v_skip = 0;
2870
- for ($i=sizeof($v_list)-1; $i>=0; $i--) {
2871
- if ($v_list[$i] == ".") {
2872
- }
2873
- else if ($v_list[$i] == "..") {
2874
- $v_skip++;
2875
- }
2876
- else if ($v_list[$i] == "") {
2877
- // ----- First '/' i.e. root slash
2878
- if ($i == 0) {
2879
- $v_result = "/".$v_result;
2880
- if ($v_skip > 0) {
2881
- // ----- It is an invalid path, so the path is not modified
2882
- // TBC
2883
- $v_result = $p_dir;
2884
- $v_skip = 0;
2885
- }
2886
- }
2887
- // ----- Last '/' i.e. indicates a directory
2888
- else if ($i == (sizeof($v_list)-1)) {
2889
- $v_result = $v_list[$i];
2890
- }
2891
- // ----- Double '/' inside the path
2892
- else {
2893
- }
2894
- }
2895
- else {
2896
- // ----- Look for item to skip
2897
- if ($v_skip > 0) {
2898
- $v_skip--;
2899
- }
2900
- else {
2901
- $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:"");
2902
- }
2903
- }
2904
- }
2905
- if ($v_skip > 0) {
2906
- while ($v_skip > 0) {
2907
- $v_result = '../'.$v_result;
2908
- $v_skip--;
2909
- }
2910
- }
2911
- }
2912
- return $v_result;
2913
- }
2914
- function PclZipUtilPathInclusion($p_dir, $p_path)
2915
- {
2916
- $v_result = 1;
2917
- if ( ($p_dir == '.')
2918
- || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) {
2919
- $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1);
2920
- }
2921
- if ( ($p_path == '.')
2922
- || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) {
2923
- $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1);
2924
- }
2925
- $v_list_dir = explode("/", $p_dir);
2926
- $v_list_dir_size = sizeof($v_list_dir);
2927
- $v_list_path = explode("/", $p_path);
2928
- $v_list_path_size = sizeof($v_list_path);
2929
- $i = 0;
2930
- $j = 0;
2931
- while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) {
2932
- if ($v_list_dir[$i] == '') {
2933
- $i++;
2934
- continue;
2935
- }
2936
- if ($v_list_path[$j] == '') {
2937
- $j++;
2938
- continue;
2939
- }
2940
- if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) {
2941
- $v_result = 0;
2942
- }
2943
- $i++;
2944
- $j++;
2945
- }
2946
- if ($v_result) {
2947
- while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++;
2948
- while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++;
2949
- if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) {
2950
- $v_result = 2;
2951
- }
2952
- else if ($i < $v_list_dir_size) {
2953
- $v_result = 0;
2954
- }
2955
- }
2956
- return $v_result;
2957
- }
2958
- function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0)
2959
- {
2960
- $v_result = 1;
2961
- if ($p_mode==0)
2962
- {
2963
- while ($p_size != 0)
2964
- {
2965
- $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
2966
- $v_buffer = @fread($p_src, $v_read_size);
2967
- @fwrite($p_dest, $v_buffer, $v_read_size);
2968
- $p_size -= $v_read_size;
2969
- }
2970
- }
2971
- else if ($p_mode==1)
2972
- {
2973
- while ($p_size != 0)
2974
- {
2975
- $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
2976
- $v_buffer = @gzread($p_src, $v_read_size);
2977
- @fwrite($p_dest, $v_buffer, $v_read_size);
2978
- $p_size -= $v_read_size;
2979
- }
2980
- }
2981
- else if ($p_mode==2)
2982
- {
2983
- while ($p_size != 0)
2984
- {
2985
- $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
2986
- $v_buffer = @fread($p_src, $v_read_size);
2987
- @gzwrite($p_dest, $v_buffer, $v_read_size);
2988
- $p_size -= $v_read_size;
2989
- }
2990
- }
2991
- else if ($p_mode==3)
2992
- {
2993
- while ($p_size != 0)
2994
- {
2995
- $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
2996
- $v_buffer = @gzread($p_src, $v_read_size);
2997
- @gzwrite($p_dest, $v_buffer, $v_read_size);
2998
- $p_size -= $v_read_size;
2999
- }
3000
- }
3001
- return $v_result;
3002
- }
3003
- function PclZipUtilRename($p_src, $p_dest)
3004
- {
3005
- $v_result = 1;
3006
- if (!@rename($p_src, $p_dest)) {
3007
- if (!@copy($p_src, $p_dest)) {
3008
- $v_result = 0;
3009
- }
3010
- else if (!@unlink($p_src)) {
3011
- $v_result = 0;
3012
- }
3013
- }
3014
- return $v_result;
3015
- }
3016
- function PclZipUtilOptionText($p_option)
3017
- {
3018
- $v_list = get_defined_constants();
3019
- for (reset($v_list); $v_key = key($v_list); next($v_list)) {
3020
- $v_prefix = substr($v_key, 0, 10);
3021
- if (( ($v_prefix == 'PCLZIP_OPT')
3022
- || ($v_prefix == 'PCLZIP_CB_')
3023
- || ($v_prefix == 'PCLZIP_ATT'))
3024
- && ($v_list[$v_key] == $p_option)) {
3025
- return $v_key;
3026
- }
3027
- }
3028
- $v_result = 'Unknown';
3029
- return $v_result;
3030
- }
3031
- function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true)
3032
- {
3033
- if (stristr(php_uname(), 'windows')) {
3034
- if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) {
3035
- $p_path = substr($p_path, $v_position+1);
3036
- }
3037
- if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
3038
- $p_path = strtr($p_path, '\\', '/');
3039
- }
3040
- }
3041
- return $p_path;
3042
- }
3043
- ?>
1
+ <?php
2
+ if (!defined('PCLZIP_READ_BLOCK_SIZE')) {
3
+ define( 'PCLZIP_READ_BLOCK_SIZE', 2048 );
4
+ }
5
+ if (!defined('PCLZIP_SEPARATOR')) {
6
+ define( 'PCLZIP_SEPARATOR', ',' );
7
+ }
8
+ if (!defined('PCLZIP_ERROR_EXTERNAL')) {
9
+ define( 'PCLZIP_ERROR_EXTERNAL', 0 );
10
+ }
11
+ if (!defined('PCLZIP_TEMPORARY_DIR')) {
12
+ define( 'PCLZIP_TEMPORARY_DIR', '' );
13
+ }
14
+ if (!defined('PCLZIP_TEMPORARY_FILE_RATIO')) {
15
+ define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.47 );
16
+ }
17
+ // --------------------------------------------------------------------------------
18
+ // ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****
19
+ // --------------------------------------------------------------------------------
20
+ $g_pclzip_version = "2.8.2";
21
+ define( 'PCLZIP_ERR_USER_ABORTED', 2 );
22
+ define( 'PCLZIP_ERR_NO_ERROR', 0 );
23
+ define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );
24
+ define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );
25
+ define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );
26
+ define( 'PCLZIP_ERR_MISSING_FILE', -4 );
27
+ define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );
28
+ define( 'PCLZIP_ERR_INVALID_ZIP', -6 );
29
+ define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );
30
+ define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );
31
+ define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );
32
+ define( 'PCLZIP_ERR_BAD_FORMAT', -10 );
33
+ define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );
34
+ define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );
35
+ define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );
36
+ define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );
37
+ define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 );
38
+ define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 );
39
+ define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 );
40
+ define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 );
41
+ define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 );
42
+ define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 );
43
+ define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 );
44
+ define( 'PCLZIP_OPT_PATH', 77001 );
45
+ define( 'PCLZIP_OPT_ADD_PATH', 77002 );
46
+ define( 'PCLZIP_OPT_REMOVE_PATH', 77003 );
47
+ define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 );
48
+ define( 'PCLZIP_OPT_SET_CHMOD', 77005 );
49
+ define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 );
50
+ define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 );
51
+ define( 'PCLZIP_OPT_BY_NAME', 77008 );
52
+ define( 'PCLZIP_OPT_BY_INDEX', 77009 );
53
+ define( 'PCLZIP_OPT_BY_EREG', 77010 );
54
+ define( 'PCLZIP_OPT_BY_PREG', 77011 );
55
+ define( 'PCLZIP_OPT_COMMENT', 77012 );
56
+ define( 'PCLZIP_OPT_ADD_COMMENT', 77013 );
57
+ define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 );
58
+ define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 );
59
+ define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 );
60
+ define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 );
61
+ define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );
62
+ define( 'PCLZIP_OPT_TEMP_FILE_THRESHOLD', 77020 );
63
+ define( 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD', 77020 ); // alias
64
+ define( 'PCLZIP_OPT_TEMP_FILE_ON', 77021 );
65
+ define( 'PCLZIP_OPT_ADD_TEMP_FILE_ON', 77021 ); // alias
66
+ define( 'PCLZIP_OPT_TEMP_FILE_OFF', 77022 );
67
+ define( 'PCLZIP_OPT_ADD_TEMP_FILE_OFF', 77022 ); // alias
68
+ define( 'PCLZIP_ATT_FILE_NAME', 79001 );
69
+ define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 );
70
+ define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 );
71
+ define( 'PCLZIP_ATT_FILE_MTIME', 79004 );
72
+ define( 'PCLZIP_ATT_FILE_CONTENT', 79005 );
73
+ define( 'PCLZIP_ATT_FILE_COMMENT', 79006 );
74
+ define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );
75
+ define( 'PCLZIP_CB_POST_EXTRACT', 78002 );
76
+ define( 'PCLZIP_CB_PRE_ADD', 78003 );
77
+ define( 'PCLZIP_CB_POST_ADD', 78004 );
78
+ /* For futur use
79
+ define( 'PCLZIP_CB_PRE_LIST', 78005 );
80
+ define( 'PCLZIP_CB_POST_LIST', 78006 );
81
+ define( 'PCLZIP_CB_PRE_DELETE', 78007 );
82
+ define( 'PCLZIP_CB_POST_DELETE', 78008 );
83
+ */
84
+ class PclZip
85
+ {
86
+ var $zipname = '';
87
+ var $zip_fd = 0;
88
+ var $error_code = 1;
89
+ var $error_string = '';
90
+ var $magic_quotes_status;
91
+ function PclZip($p_zipname)
92
+ {
93
+ if (!function_exists('gzopen'))
94
+ {
95
+ die('Abort '.basename(__FILE__).' : Missing zlib extensions');
96
+ }
97
+ $this->zipname = $p_zipname;
98
+ $this->zip_fd = 0;
99
+ $this->magic_quotes_status = -1;
100
+ return;
101
+ }
102
+ function create($p_filelist)
103
+ {
104
+ $v_result=1;
105
+ $this->privErrorReset();
106
+ $v_options = array();
107
+ $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
108
+ $v_size = func_num_args();
109
+ if ($v_size > 1) {
110
+ $v_arg_list = func_get_args();
111
+ array_shift($v_arg_list);
112
+ $v_size--;
113
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
114
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
115
+ array (PCLZIP_OPT_REMOVE_PATH => 'optional',
116
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
117
+ PCLZIP_OPT_ADD_PATH => 'optional',
118
+ PCLZIP_CB_PRE_ADD => 'optional',
119
+ PCLZIP_CB_POST_ADD => 'optional',
120
+ PCLZIP_OPT_NO_COMPRESSION => 'optional',
121
+ PCLZIP_OPT_COMMENT => 'optional',
122
+ PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
123
+ PCLZIP_OPT_TEMP_FILE_ON => 'optional',
124
+ PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
125
+ ));
126
+ if ($v_result != 1) {
127
+ return 0;
128
+ }
129
+ }
130
+ else {
131
+ $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0];
132
+ if ($v_size == 2) {
133
+ $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
134
+ }
135
+ else if ($v_size > 2) {
136
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
137
+ "Invalid number / type of arguments");
138
+ return 0;
139
+ }
140
+ }
141
+ }
142
+ $this->privOptionDefaultThreshold($v_options);
143
+ $v_string_list = array();
144
+ $v_att_list = array();
145
+ $v_filedescr_list = array();
146
+ $p_result_list = array();
147
+ if (is_array($p_filelist)) {
148
+ if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
149
+ $v_att_list = $p_filelist;
150
+ }
151
+ else {
152
+ $v_string_list = $p_filelist;
153
+ }
154
+ }
155
+ else if (is_string($p_filelist)) {
156
+ $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
157
+ }
158
+ else {
159
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");
160
+ return 0;
161
+ }
162
+ if (sizeof($v_string_list) != 0) {
163
+ foreach ($v_string_list as $v_string) {
164
+ if ($v_string != '') {
165
+ $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
166
+ }
167
+ else {
168
+ }
169
+ }
170
+ }
171
+ $v_supported_attributes
172
+ = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
173
+ ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
174
+ ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
175
+ ,PCLZIP_ATT_FILE_MTIME => 'optional'
176
+ ,PCLZIP_ATT_FILE_CONTENT => 'optional'
177
+ ,PCLZIP_ATT_FILE_COMMENT => 'optional'
178
+ );
179
+ foreach ($v_att_list as $v_entry) {
180
+ $v_result = $this->privFileDescrParseAtt($v_entry,
181
+ $v_filedescr_list[],
182
+ $v_options,
183
+ $v_supported_attributes);
184
+ if ($v_result != 1) {
185
+ return 0;
186
+ }
187
+ }
188
+ $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
189
+ if ($v_result != 1) {
190
+ return 0;
191
+ }
192
+ $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options);
193
+ if ($v_result != 1) {
194
+ return 0;
195
+ }
196
+ return $p_result_list;
197
+ }
198
+ function add($p_filelist)
199
+ {
200
+ $v_result=1;
201
+ $this->privErrorReset();
202
+ $v_options = array();
203
+ $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
204
+ $v_size = func_num_args();
205
+ if ($v_size > 1) {
206
+ $v_arg_list = func_get_args();
207
+ array_shift($v_arg_list);
208
+ $v_size--;
209
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
210
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
211
+ array (PCLZIP_OPT_REMOVE_PATH => 'optional',
212
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
213
+ PCLZIP_OPT_ADD_PATH => 'optional',
214
+ PCLZIP_CB_PRE_ADD => 'optional',
215
+ PCLZIP_CB_POST_ADD => 'optional',
216
+ PCLZIP_OPT_NO_COMPRESSION => 'optional',
217
+ PCLZIP_OPT_COMMENT => 'optional',
218
+ PCLZIP_OPT_ADD_COMMENT => 'optional',
219
+ PCLZIP_OPT_PREPEND_COMMENT => 'optional',
220
+ PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
221
+ PCLZIP_OPT_TEMP_FILE_ON => 'optional',
222
+ PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
223
+ ));
224
+ if ($v_result != 1) {
225
+ return 0;
226
+ }
227
+ }
228
+ else {
229
+ $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];
230
+ if ($v_size == 2) {
231
+ $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
232
+ }
233
+ else if ($v_size > 2) {
234
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
235
+ return 0;
236
+ }
237
+ }
238
+ }
239
+ $this->privOptionDefaultThreshold($v_options);
240
+ $v_string_list = array();
241
+ $v_att_list = array();
242
+ $v_filedescr_list = array();
243
+ $p_result_list = array();
244
+ if (is_array($p_filelist)) {
245
+ if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
246
+ $v_att_list = $p_filelist;
247
+ }
248
+ else {
249
+ $v_string_list = $p_filelist;
250
+ }
251
+ }
252
+ else if (is_string($p_filelist)) {
253
+ $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
254
+ }
255
+ else {
256
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist");
257
+ return 0;
258
+ }
259
+ if (sizeof($v_string_list) != 0) {
260
+ foreach ($v_string_list as $v_string) {
261
+ $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
262
+ }
263
+ }
264
+ $v_supported_attributes
265
+ = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
266
+ ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
267
+ ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
268
+ ,PCLZIP_ATT_FILE_MTIME => 'optional'
269
+ ,PCLZIP_ATT_FILE_CONTENT => 'optional'
270
+ ,PCLZIP_ATT_FILE_COMMENT => 'optional'
271
+ );
272
+ foreach ($v_att_list as $v_entry) {
273
+ $v_result = $this->privFileDescrParseAtt($v_entry,
274
+ $v_filedescr_list[],
275
+ $v_options,
276
+ $v_supported_attributes);
277
+ if ($v_result != 1) {
278
+ return 0;
279
+ }
280
+ }
281
+ $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
282
+ if ($v_result != 1) {
283
+ return 0;
284
+ }
285
+ $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options);
286
+ if ($v_result != 1) {
287
+ return 0;
288
+ }
289
+ return $p_result_list;
290
+ }
291
+ function listContent()
292
+ {
293
+ $v_result=1;
294
+ $this->privErrorReset();
295
+ if (!$this->privCheckFormat()) {
296
+ return(0);
297
+ }
298
+ $p_list = array();
299
+ if (($v_result = $this->privList($p_list)) != 1)
300
+ {
301
+ unset($p_list);
302
+ return(0);
303
+ }
304
+ return $p_list;
305
+ }
306
+ function extract()
307
+ {
308
+ $v_result=1;
309
+ $this->privErrorReset();
310
+ if (!$this->privCheckFormat()) {
311
+ return(0);
312
+ }
313
+ $v_options = array();
314
+ // $v_path = "./";
315
+ $v_path = '';
316
+ $v_remove_path = "";
317
+ $v_remove_all_path = false;
318
+ $v_size = func_num_args();
319
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
320
+ if ($v_size > 0) {
321
+ $v_arg_list = func_get_args();
322
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
323
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
324
+ array (PCLZIP_OPT_PATH => 'optional',
325
+ PCLZIP_OPT_REMOVE_PATH => 'optional',
326
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
327
+ PCLZIP_OPT_ADD_PATH => 'optional',
328
+ PCLZIP_CB_PRE_EXTRACT => 'optional',
329
+ PCLZIP_CB_POST_EXTRACT => 'optional',
330
+ PCLZIP_OPT_SET_CHMOD => 'optional',
331
+ PCLZIP_OPT_BY_NAME => 'optional',
332
+ PCLZIP_OPT_BY_EREG => 'optional',
333
+ PCLZIP_OPT_BY_PREG => 'optional',
334
+ PCLZIP_OPT_BY_INDEX => 'optional',
335
+ PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
336
+ PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional',
337
+ PCLZIP_OPT_REPLACE_NEWER => 'optional'
338
+ ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
339
+ ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional',
340
+ PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
341
+ PCLZIP_OPT_TEMP_FILE_ON => 'optional',
342
+ PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
343
+ ));
344
+ if ($v_result != 1) {
345
+ return 0;
346
+ }
347
+ if (isset($v_options[PCLZIP_OPT_PATH])) {
348
+ $v_path = $v_options[PCLZIP_OPT_PATH];
349
+ }
350
+ if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
351
+ $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
352
+ }
353
+ if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
354
+ $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
355
+ }
356
+ if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
357
+ if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
358
+ $v_path .= '/';
359
+ }
360
+ $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
361
+ }
362
+ }
363
+ else {
364
+ $v_path = $v_arg_list[0];
365
+ if ($v_size == 2) {
366
+ $v_remove_path = $v_arg_list[1];
367
+ }
368
+ else if ($v_size > 2) {
369
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
370
+ return 0;
371
+ }
372
+ }
373
+ }
374
+ $this->privOptionDefaultThreshold($v_options);
375
+ $p_list = array();
376
+ $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path,
377
+ $v_remove_all_path, $v_options);
378
+ if ($v_result < 1) {
379
+ unset($p_list);
380
+ return(0);
381
+ }
382
+ return $p_list;
383
+ }
384
+ function extractByIndex($p_index)
385
+ {
386
+ $v_result=1;
387
+ $this->privErrorReset();
388
+ if (!$this->privCheckFormat()) {
389
+ return(0);
390
+ }
391
+ $v_options = array();
392
+ // $v_path = "./";
393
+ $v_path = '';
394
+ $v_remove_path = "";
395
+ $v_remove_all_path = false;
396
+ $v_size = func_num_args();
397
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
398
+ if ($v_size > 1) {
399
+ $v_arg_list = func_get_args();
400
+ array_shift($v_arg_list);
401
+ $v_size--;
402
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
403
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
404
+ array (PCLZIP_OPT_PATH => 'optional',
405
+ PCLZIP_OPT_REMOVE_PATH => 'optional',
406
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
407
+ PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
408
+ PCLZIP_OPT_ADD_PATH => 'optional',
409
+ PCLZIP_CB_PRE_EXTRACT => 'optional',
410
+ PCLZIP_CB_POST_EXTRACT => 'optional',
411
+ PCLZIP_OPT_SET_CHMOD => 'optional',
412
+ PCLZIP_OPT_REPLACE_NEWER => 'optional'
413
+ ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
414
+ ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional',
415
+ PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
416
+ PCLZIP_OPT_TEMP_FILE_ON => 'optional',
417
+ PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
418
+ ));
419
+ if ($v_result != 1) {
420
+ return 0;
421
+ }
422
+ if (isset($v_options[PCLZIP_OPT_PATH])) {
423
+ $v_path = $v_options[PCLZIP_OPT_PATH];
424
+ }
425
+ if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
426
+ $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
427
+ }
428
+ if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
429
+ $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
430
+ }
431
+ if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
432
+ if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
433
+ $v_path .= '/';
434
+ }
435
+ $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
436
+ }
437
+ if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) {
438
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
439
+ }
440
+ else {
441
+ }
442
+ }
443
+ else {
444
+ $v_path = $v_arg_list[0];
445
+ if ($v_size == 2) {
446
+ $v_remove_path = $v_arg_list[1];
447
+ }
448
+ else if ($v_size > 2) {
449
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
450
+ return 0;
451
+ }
452
+ }
453
+ }
454
+ $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index);
455
+ $v_options_trick = array();
456
+ $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick,
457
+ array (PCLZIP_OPT_BY_INDEX => 'optional' ));
458
+ if ($v_result != 1) {
459
+ return 0;
460
+ }
461
+ $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX];
462
+ $this->privOptionDefaultThreshold($v_options);
463
+ if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) {
464
+ return(0);
465
+ }
466
+ return $p_list;
467
+ }
468
+ function delete()
469
+ {
470
+ $v_result=1;
471
+ $this->privErrorReset();
472
+ if (!$this->privCheckFormat()) {
473
+ return(0);
474
+ }
475
+ $v_options = array();
476
+ $v_size = func_num_args();
477
+ if ($v_size > 0) {
478
+ $v_arg_list = func_get_args();
479
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
480
+ array (PCLZIP_OPT_BY_NAME => 'optional',
481
+ PCLZIP_OPT_BY_EREG => 'optional',
482
+ PCLZIP_OPT_BY_PREG => 'optional',
483
+ PCLZIP_OPT_BY_INDEX => 'optional' ));
484
+ if ($v_result != 1) {
485
+ return 0;
486
+ }
487
+ }
488
+ $this->privDisableMagicQuotes();
489
+ $v_list = array();
490
+ if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) {
491
+ $this->privSwapBackMagicQuotes();
492
+ unset($v_list);
493
+ return(0);
494
+ }
495
+ $this->privSwapBackMagicQuotes();
496
+ return $v_list;
497
+ }
498
+ function deleteByIndex($p_index)
499
+ {
500
+ $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index);
501
+ return $p_list;
502
+ }
503
+ function properties()
504
+ {
505
+ $this->privErrorReset();
506
+ $this->privDisableMagicQuotes();
507
+ if (!$this->privCheckFormat()) {
508
+ $this->privSwapBackMagicQuotes();
509
+ return(0);
510
+ }
511
+ $v_prop = array();
512
+ $v_prop['comment'] = '';
513
+ $v_prop['nb'] = 0;
514
+ $v_prop['status'] = 'not_exist';
515
+ if (@is_file($this->zipname))
516
+ {
517
+ if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
518
+ {
519
+ $this->privSwapBackMagicQuotes();
520
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
521
+ return 0;
522
+ }
523
+ $v_central_dir = array();
524
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
525
+ {
526
+ $this->privSwapBackMagicQuotes();
527
+ return 0;
528
+ }
529
+ $this->privCloseFd();
530
+ $v_prop['comment'] = $v_central_dir['comment'];
531
+ $v_prop['nb'] = $v_central_dir['entries'];
532
+ $v_prop['status'] = 'ok';
533
+ }
534
+ $this->privSwapBackMagicQuotes();
535
+ return $v_prop;
536
+ }
537
+ function duplicate($p_archive)
538
+ {
539
+ $v_result = 1;
540
+ $this->privErrorReset();
541
+ if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip'))
542
+ {
543
+ $v_result = $this->privDuplicate($p_archive->zipname);
544
+ }
545
+ else if (is_string($p_archive))
546
+ {
547
+ if (!is_file($p_archive)) {
548
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'");
549
+ $v_result = PCLZIP_ERR_MISSING_FILE;
550
+ }
551
+ else {
552
+ $v_result = $this->privDuplicate($p_archive);
553
+ }
554
+ }
555
+ else
556
+ {
557
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
558
+ $v_result = PCLZIP_ERR_INVALID_PARAMETER;
559
+ }
560
+ return $v_result;
561
+ }
562
+ function merge($p_archive_to_add)
563
+ {
564
+ $v_result = 1;
565
+ $this->privErrorReset();
566
+ if (!$this->privCheckFormat()) {
567
+ return(0);
568
+ }
569
+ if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip'))
570
+ {
571
+ $v_result = $this->privMerge($p_archive_to_add);
572
+ }
573
+ else if (is_string($p_archive_to_add))
574
+ {
575
+ $v_object_archive = new PclZip($p_archive_to_add);
576
+ $v_result = $this->privMerge($v_object_archive);
577
+ }
578
+ else
579
+ {
580
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
581
+ $v_result = PCLZIP_ERR_INVALID_PARAMETER;
582
+ }
583
+ return $v_result;
584
+ }
585
+ function errorCode()
586
+ {
587
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
588
+ return(PclErrorCode());
589
+ }
590
+ else {
591
+ return($this->error_code);
592
+ }
593
+ }
594
+ function errorName($p_with_code=false)
595
+ {
596
+ $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR',
597
+ PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL',
598
+ PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL',
599
+ PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER',
600
+ PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE',
601
+ PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG',
602
+ PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP',
603
+ PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE',
604
+ PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL',
605
+ PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION',
606
+ PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT',
607
+ PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL',
608
+ PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL',
609
+ PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM',
610
+ PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP',
611
+ PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE',
612
+ PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE',
613
+ PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION',
614
+ PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION'
615
+ ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE'
616
+ ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION'
617
+ );
618
+ if (isset($v_name[$this->error_code])) {
619
+ $v_value = $v_name[$this->error_code];
620
+ }
621
+ else {
622
+ $v_value = 'NoName';
623
+ }
624
+ if ($p_with_code) {
625
+ return($v_value.' ('.$this->error_code.')');
626
+ }
627
+ else {
628
+ return($v_value);
629
+ }
630
+ }
631
+ function errorInfo($p_full=false)
632
+ {
633
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
634
+ return(PclErrorString());
635
+ }
636
+ else {
637
+ if ($p_full) {
638
+ return($this->errorName(true)." : ".$this->error_string);
639
+ }
640
+ else {
641
+ return($this->error_string." [code ".$this->error_code."]");
642
+ }
643
+ }
644
+ }
645
+ // --------------------------------------------------------------------------------
646
+ // ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS *****
647
+ // ***** *****
648
+ // ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY *****
649
+ // --------------------------------------------------------------------------------
650
+ function privCheckFormat($p_level=0)
651
+ {
652
+ $v_result = true;
653
+ // ----- Reset the file system cache
654
+ clearstatcache();
655
+ $this->privErrorReset();
656
+ if (!is_file($this->zipname)) {
657
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'");
658
+ return(false);
659
+ }
660
+ if (!is_readable($this->zipname)) {
661
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'");
662
+ return(false);
663
+ }
664
+ return $v_result;
665
+ }
666
+ function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false)
667
+ {
668
+ $v_result=1;
669
+ $i=0;
670
+ while ($i<$p_size) {
671
+ if (!isset($v_requested_options[$p_options_list[$i]])) {
672
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method");
673
+ return PclZip::errorCode();
674
+ }
675
+ switch ($p_options_list[$i]) {
676
+ case PCLZIP_OPT_PATH :
677
+ case PCLZIP_OPT_REMOVE_PATH :
678
+ case PCLZIP_OPT_ADD_PATH :
679
+ if (($i+1) >= $p_size) {
680
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
681
+ return PclZip::errorCode();
682
+ }
683
+ $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE);
684
+ $i++;
685
+ break;
686
+ case PCLZIP_OPT_TEMP_FILE_THRESHOLD :
687
+ if (($i+1) >= $p_size) {
688
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
689
+ return PclZip::errorCode();
690
+ }
691
+ if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
692
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
693
+ return PclZip::errorCode();
694
+ }
695
+ $v_value = $p_options_list[$i+1];
696
+ if ((!is_integer($v_value)) || ($v_value<0)) {
697
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'");
698
+ return PclZip::errorCode();
699
+ }
700
+ $v_result_list[$p_options_list[$i]] = $v_value*1048576;
701
+ $i++;
702
+ break;
703
+ case PCLZIP_OPT_TEMP_FILE_ON :
704
+ if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
705
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
706
+ return PclZip::errorCode();
707
+ }
708
+ $v_result_list[$p_options_list[$i]] = true;
709
+ break;
710
+ case PCLZIP_OPT_TEMP_FILE_OFF :
711
+ if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) {
712
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'");
713
+ return PclZip::errorCode();
714
+ }
715
+ if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
716
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'");
717
+ return PclZip::errorCode();
718
+ }
719
+ $v_result_list[$p_options_list[$i]] = true;
720
+ break;
721
+ case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION :
722
+ if (($i+1) >= $p_size) {
723
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
724
+ return PclZip::errorCode();
725
+ }
726
+ if ( is_string($p_options_list[$i+1])
727
+ && ($p_options_list[$i+1] != '')) {
728
+ $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE);
729
+ $i++;
730
+ }
731
+ else {
732
+ }
733
+ break;
734
+ case PCLZIP_OPT_BY_NAME :
735
+ if (($i+1) >= $p_size) {
736
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
737
+ return PclZip::errorCode();
738
+ }
739
+ if (is_string($p_options_list[$i+1])) {
740
+ $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1];
741
+ }
742
+ else if (is_array($p_options_list[$i+1])) {
743
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
744
+ }
745
+ else {
746
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
747
+ return PclZip::errorCode();
748
+ }
749
+ $i++;
750
+ break;
751
+ case PCLZIP_OPT_BY_EREG :
752
+ $p_options_list[$i] = PCLZIP_OPT_BY_PREG;
753
+ case PCLZIP_OPT_BY_PREG :
754
+ if (($i+1) >= $p_size) {
755
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
756
+ return PclZip::errorCode();
757
+ }
758
+ if (is_string($p_options_list[$i+1])) {
759
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
760
+ }
761
+ else {
762
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
763
+ return PclZip::errorCode();
764
+ }
765
+ $i++;
766
+ break;
767
+ case PCLZIP_OPT_COMMENT :
768
+ case PCLZIP_OPT_ADD_COMMENT :
769
+ case PCLZIP_OPT_PREPEND_COMMENT :
770
+ if (($i+1) >= $p_size) {
771
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE,
772
+ "Missing parameter value for option '"
773
+ .PclZipUtilOptionText($p_options_list[$i])
774
+ ."'");
775
+ return PclZip::errorCode();
776
+ }
777
+ if (is_string($p_options_list[$i+1])) {
778
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
779
+ }
780
+ else {
781
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE,
782
+ "Wrong parameter value for option '"
783
+ .PclZipUtilOptionText($p_options_list[$i])
784
+ ."'");
785
+ return PclZip::errorCode();
786
+ }
787
+ $i++;
788
+ break;
789
+ case PCLZIP_OPT_BY_INDEX :
790
+ if (($i+1) >= $p_size) {
791
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
792
+ return PclZip::errorCode();
793
+ }
794
+ $v_work_list = array();
795
+ if (is_string($p_options_list[$i+1])) {
796
+ $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', '');
797
+ $v_work_list = explode(",", $p_options_list[$i+1]);
798
+ }
799
+ else if (is_integer($p_options_list[$i+1])) {
800
+ $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1];
801
+ }
802
+ else if (is_array($p_options_list[$i+1])) {
803
+ $v_work_list = $p_options_list[$i+1];
804
+ }
805
+ else {
806
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'");
807
+ return PclZip::errorCode();
808
+ }
809
+ $v_sort_flag=false;
810
+ $v_sort_value=0;
811
+ for ($j=0; $j<sizeof($v_work_list); $j++) {
812
+ $v_item_list = explode("-", $v_work_list[$j]);
813
+ $v_size_item_list = sizeof($v_item_list);
814
+ if ($v_size_item_list == 1) {
815
+ $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
816
+ $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];
817
+ }
818
+ elseif ($v_size_item_list == 2) {
819
+ $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
820
+ $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];
821
+ }
822
+ else {
823
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
824
+ return PclZip::errorCode();
825
+ }
826
+ if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) {
827
+ $v_sort_flag=true;
828
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
829
+ return PclZip::errorCode();
830
+ }
831
+ $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
832
+ }
833
+ if ($v_sort_flag) {
834
+ }
835
+ $i++;
836
+ break;
837
+ case PCLZIP_OPT_REMOVE_ALL_PATH :
838
+ case PCLZIP_OPT_EXTRACT_AS_STRING :
839
+ case PCLZIP_OPT_NO_COMPRESSION :
840
+ case PCLZIP_OPT_EXTRACT_IN_OUTPUT :
841
+ case PCLZIP_OPT_REPLACE_NEWER :
842
+ case PCLZIP_OPT_STOP_ON_ERROR :
843
+ $v_result_list[$p_options_list[$i]] = true;
844
+ break;
845
+ case PCLZIP_OPT_SET_CHMOD :
846
+ if (($i+1) >= $p_size) {
847
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
848
+ return PclZip::errorCode();
849
+ }
850
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
851
+ $i++;
852
+ break;
853
+ case PCLZIP_CB_PRE_EXTRACT :
854
+ case PCLZIP_CB_POST_EXTRACT :
855
+ case PCLZIP_CB_PRE_ADD :
856
+ case PCLZIP_CB_POST_ADD :
857
+ /* for futur use
858
+ case PCLZIP_CB_PRE_DELETE :
859
+ case PCLZIP_CB_POST_DELETE :
860
+ case PCLZIP_CB_PRE_LIST :
861
+ case PCLZIP_CB_POST_LIST :
862
+ */
863
+ if (($i+1) >= $p_size) {
864
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
865
+ return PclZip::errorCode();
866
+ }
867
+ $v_function_name = $p_options_list[$i+1];
868
+ if (!function_exists($v_function_name)) {
869
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'");
870
+ return PclZip::errorCode();
871
+ }
872
+ $v_result_list[$p_options_list[$i]] = $v_function_name;
873
+ $i++;
874
+ break;
875
+ default :
876
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
877
+ "Unknown parameter '"
878
+ .$p_options_list[$i]."'");
879
+ return PclZip::errorCode();
880
+ }
881
+ $i++;
882
+ }
883
+ if ($v_requested_options !== false) {
884
+ for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
885
+ if ($v_requested_options[$key] == 'mandatory') {
886
+ if (!isset($v_result_list[$key])) {
887
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
888
+ return PclZip::errorCode();
889
+ }
890
+ }
891
+ }
892
+ }
893
+ if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
894
+ }
895
+ return $v_result;
896
+ }
897
+ function privOptionDefaultThreshold(&$p_options)
898
+ {
899
+ $v_result=1;
900
+ if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
901
+ || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) {
902
+ return $v_result;
903
+ }
904
+ $v_memory_limit = ini_get('memory_limit');
905
+ $v_memory_limit = trim($v_memory_limit);
906
+ $last = strtolower(substr($v_memory_limit, -1));
907
+ if($last == 'g')
908
+ $v_memory_limit = $v_memory_limit*1073741824;
909
+ if($last == 'm')
910
+ $v_memory_limit = $v_memory_limit*1048576;
911
+ if($last == 'k')
912
+ $v_memory_limit = $v_memory_limit*1024;
913
+ $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit*PCLZIP_TEMPORARY_FILE_RATIO);
914
+ if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) {
915
+ unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]);
916
+ }
917
+ return $v_result;
918
+ }
919
+ function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false)
920
+ {
921
+ $v_result=1;
922
+ foreach ($p_file_list as $v_key => $v_value) {
923
+ if (!isset($v_requested_options[$v_key])) {
924
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file");
925
+ return PclZip::errorCode();
926
+ }
927
+ switch ($v_key) {
928
+ case PCLZIP_ATT_FILE_NAME :
929
+ if (!is_string($v_value)) {
930
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
931
+ return PclZip::errorCode();
932
+ }
933
+ $p_filedescr['filename'] = PclZipUtilPathReduction($v_value);
934
+ if ($p_filedescr['filename'] == '') {
935
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'");
936
+ return PclZip::errorCode();
937
+ }
938
+ break;
939
+ case PCLZIP_ATT_FILE_NEW_SHORT_NAME :
940
+ if (!is_string($v_value)) {
941
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
942
+ return PclZip::errorCode();
943
+ }
944
+ $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value);
945
+ if ($p_filedescr['new_short_name'] == '') {
946
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'");
947
+ return PclZip::errorCode();
948
+ }
949
+ break;
950
+ case PCLZIP_ATT_FILE_NEW_FULL_NAME :
951
+ if (!is_string($v_value)) {
952
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
953
+ return PclZip::errorCode();
954
+ }
955
+ $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value);
956
+ if ($p_filedescr['new_full_name'] == '') {
957
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'");
958
+ return PclZip::errorCode();
959
+ }
960
+ break;
961
+ case PCLZIP_ATT_FILE_COMMENT :
962
+ if (!is_string($v_value)) {
963
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
964
+ return PclZip::errorCode();
965
+ }
966
+ $p_filedescr['comment'] = $v_value;
967
+ break;
968
+ case PCLZIP_ATT_FILE_MTIME :
969
+ if (!is_integer($v_value)) {
970
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'");
971
+ return PclZip::errorCode();
972
+ }
973
+ $p_filedescr['mtime'] = $v_value;
974
+ break;
975
+ case PCLZIP_ATT_FILE_CONTENT :
976
+ $p_filedescr['content'] = $v_value;
977
+ break;
978
+ default :
979
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
980
+ "Unknown parameter '".$v_key."'");
981
+ return PclZip::errorCode();
982
+ }
983
+ if ($v_requested_options !== false) {
984
+ for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
985
+ if ($v_requested_options[$key] == 'mandatory') {
986
+ if (!isset($p_file_list[$key])) {
987
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
988
+ return PclZip::errorCode();
989
+ }
990
+ }
991
+ }
992
+ }
993
+ }
994
+ return $v_result;
995
+ }
996
+ function privFileDescrExpand(&$p_filedescr_list, &$p_options)
997
+ {
998
+ $v_result=1;
999
+ $v_result_list = array();
1000
+ for ($i=0; $i<sizeof($p_filedescr_list); $i++) {
1001
+ $v_descr = $p_filedescr_list[$i];
1002
+ $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename'], false);
1003
+ $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']);
1004
+ if (file_exists($v_descr['filename'])) {
1005
+ if (@is_file($v_descr['filename'])) {
1006
+ $v_descr['type'] = 'file';
1007
+ }
1008
+ else if (@is_dir($v_descr['filename'])) {
1009
+ $v_descr['type'] = 'folder';
1010
+ }
1011
+ else if (@is_link($v_descr['filename'])) {
1012
+ continue;
1013
+ }
1014
+ else {
1015
+ continue;
1016
+ }
1017
+ }
1018
+ else if (isset($v_descr['content'])) {
1019
+ $v_descr['type'] = 'virtual_file';
1020
+ }
1021
+ else {
1022
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$v_descr['filename']."' does not exist");
1023
+ return PclZip::errorCode();
1024
+ }
1025
+ $this->privCalculateStoredFilename($v_descr, $p_options);
1026
+ $v_result_list[sizeof($v_result_list)] = $v_descr;
1027
+ if ($v_descr['type'] == 'folder') {
1028
+ $v_dirlist_descr = array();
1029
+ $v_dirlist_nb = 0;
1030
+ if ($v_folder_handler = @opendir($v_descr['filename'])) {
1031
+ while (($v_item_handler = @readdir($v_folder_handler)) !== false) {
1032
+ if (($v_item_handler == '.') || ($v_item_handler == '..')) {
1033
+ continue;
1034
+ }
1035
+ $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler;
1036
+ if (($v_descr['stored_filename'] != $v_descr['filename'])
1037
+ && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) {
1038
+ if ($v_descr['stored_filename'] != '') {
1039
+ $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler;
1040
+ }
1041
+ else {
1042
+ $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler;
1043
+ }
1044
+ }
1045
+ $v_dirlist_nb++;
1046
+ }
1047
+ @closedir($v_folder_handler);
1048
+ }
1049
+ else {
1050
+ }
1051
+ if ($v_dirlist_nb != 0) {
1052
+ if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {
1053
+ return $v_result;
1054
+ }
1055
+ $v_result_list = array_merge($v_result_list, $v_dirlist_descr);
1056
+ }
1057
+ else {
1058
+ }
1059
+ unset($v_dirlist_descr);
1060
+ }
1061
+ }
1062
+ $p_filedescr_list = $v_result_list;
1063
+ return $v_result;
1064
+ }
1065
+ function privCreate($p_filedescr_list, &$p_result_list, &$p_options)
1066
+ {
1067
+ $v_result=1;
1068
+ $v_list_detail = array();
1069
+ $this->privDisableMagicQuotes();
1070
+ if (($v_result = $this->privOpenFd('wb')) != 1)
1071
+ {
1072
+ return $v_result;
1073
+ }
1074
+ $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options);
1075
+ $this->privCloseFd();
1076
+ $this->privSwapBackMagicQuotes();
1077
+ return $v_result;
1078
+ }
1079
+ function privAdd($p_filedescr_list, &$p_result_list, &$p_options)
1080
+ {
1081
+ $v_result=1;
1082
+ $v_list_detail = array();
1083
+ if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0))
1084
+ {
1085
+ $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options);
1086
+ return $v_result;
1087
+ }
1088
+ $this->privDisableMagicQuotes();
1089
+ if (($v_result=$this->privOpenFd('rb')) != 1)
1090
+ {
1091
+ $this->privSwapBackMagicQuotes();
1092
+ return $v_result;
1093
+ }
1094
+ $v_central_dir = array();
1095
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
1096
+ {
1097
+ $this->privCloseFd();
1098
+ $this->privSwapBackMagicQuotes();
1099
+ return $v_result;
1100
+ }
1101
+ @rewind($this->zip_fd);
1102
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
1103
+ if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
1104
+ {
1105
+ $this->privCloseFd();
1106
+ $this->privSwapBackMagicQuotes();
1107
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
1108
+ return PclZip::errorCode();
1109
+ }
1110
+ $v_size = $v_central_dir['offset'];
1111
+ while ($v_size != 0)
1112
+ {
1113
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
1114
+ $v_buffer = fread($this->zip_fd, $v_read_size);
1115
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
1116
+ $v_size -= $v_read_size;
1117
+ }
1118
+ $v_swap = $this->zip_fd;
1119
+ $this->zip_fd = $v_zip_temp_fd;
1120
+ $v_zip_temp_fd = $v_swap;
1121
+ $v_header_list = array();
1122
+ if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
1123
+ {
1124
+ fclose($v_zip_temp_fd);
1125
+ $this->privCloseFd();
1126
+ @unlink($v_zip_temp_name);
1127
+ $this->privSwapBackMagicQuotes();
1128
+ return $v_result;
1129
+ }
1130
+ $v_offset = @ftell($this->zip_fd);
1131
+ $v_size = $v_central_dir['size'];
1132
+ while ($v_size != 0)
1133
+ {
1134
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
1135
+ $v_buffer = @fread($v_zip_temp_fd, $v_read_size);
1136
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
1137
+ $v_size -= $v_read_size;
1138
+ }
1139
+ for ($i=0, $v_count=0; $i<sizeof($v_header_list); $i++)
1140
+ {
1141
+ if ($v_header_list[$i]['status'] == 'ok') {
1142
+ if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
1143
+ fclose($v_zip_temp_fd);
1144
+ $this->privCloseFd();
1145
+ @unlink($v_zip_temp_name);
1146
+ $this->privSwapBackMagicQuotes();
1147
+ return $v_result;
1148
+ }
1149
+ $v_count++;
1150
+ }
1151
+ $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
1152
+ }
1153
+ $v_comment = $v_central_dir['comment'];
1154
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
1155
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
1156
+ }
1157
+ if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) {
1158
+ $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT];
1159
+ }
1160
+ if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) {
1161
+ $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment;
1162
+ }
1163
+ $v_size = @ftell($this->zip_fd)-$v_offset;
1164
+ if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1)
1165
+ {
1166
+ unset($v_header_list);
1167
+ $this->privSwapBackMagicQuotes();
1168
+ return $v_result;
1169
+ }
1170
+ $v_swap = $this->zip_fd;
1171
+ $this->zip_fd = $v_zip_temp_fd;
1172
+ $v_zip_temp_fd = $v_swap;
1173
+ $this->privCloseFd();
1174
+ @fclose($v_zip_temp_fd);
1175
+ $this->privSwapBackMagicQuotes();
1176
+ @unlink($this->zipname);
1177
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
1178
+ return $v_result;
1179
+ }
1180
+ function privOpenFd($p_mode)
1181
+ {
1182
+ $v_result=1;
1183
+ if ($this->zip_fd != 0)
1184
+ {
1185
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open');
1186
+ return PclZip::errorCode();
1187
+ }
1188
+ if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0)
1189
+ {
1190
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode');
1191
+ return PclZip::errorCode();
1192
+ }
1193
+ return $v_result;
1194
+ }
1195
+ function privCloseFd()
1196
+ {
1197
+ $v_result=1;
1198
+ if ($this->zip_fd != 0)
1199
+ @fclose($this->zip_fd);
1200
+ $this->zip_fd = 0;
1201
+ return $v_result;
1202
+ }
1203
+ // function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options)
1204
+ function privAddList($p_filedescr_list, &$p_result_list, &$p_options)
1205
+ {
1206
+ $v_result=1;
1207
+ $v_header_list = array();
1208
+ if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
1209
+ {
1210
+ return $v_result;
1211
+ }
1212
+ $v_offset = @ftell($this->zip_fd);
1213
+ for ($i=0,$v_count=0; $i<sizeof($v_header_list); $i++)
1214
+ {
1215
+ if ($v_header_list[$i]['status'] == 'ok') {
1216
+ if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
1217
+ return $v_result;
1218
+ }
1219
+ $v_count++;
1220
+ }
1221
+ $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
1222
+ }
1223
+ $v_comment = '';
1224
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
1225
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
1226
+ }
1227
+ $v_size = @ftell($this->zip_fd)-$v_offset;
1228
+ if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1)
1229
+ {
1230
+ unset($v_header_list);
1231
+ return $v_result;
1232
+ }
1233
+ return $v_result;
1234
+ }
1235
+ function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options)
1236
+ {
1237
+ $v_result=1;
1238
+ $v_header = array();
1239
+ $v_nb = sizeof($p_result_list);
1240
+ for ($j=0; ($j<sizeof($p_filedescr_list)) && ($v_result==1); $j++) {
1241
+ $p_filedescr_list[$j]['filename']
1242
+ = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false);
1243
+ if ($p_filedescr_list[$j]['filename'] == "") {
1244
+ continue;
1245
+ }
1246
+ if ( ($p_filedescr_list[$j]['type'] != 'virtual_file')
1247
+ && (!file_exists($p_filedescr_list[$j]['filename']))) {
1248
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$p_filedescr_list[$j]['filename']."' does not exist");
1249
+ return PclZip::errorCode();
1250
+ }
1251
+ // if ( (is_file($p_filedescr_list[$j]['filename']))
1252
+ // || ( is_dir($p_filedescr_list[$j]['filename'])
1253
+ if ( ($p_filedescr_list[$j]['type'] == 'file')
1254
+ || ($p_filedescr_list[$j]['type'] == 'virtual_file')
1255
+ || ( ($p_filedescr_list[$j]['type'] == 'folder')
1256
+ && ( !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])
1257
+ || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))
1258
+ ) {
1259
+ $v_result = $this->privAddFile($p_filedescr_list[$j], $v_header,
1260
+ $p_options);
1261
+ if ($v_result != 1) {
1262
+ return $v_result;
1263
+ }
1264
+ $p_result_list[$v_nb++] = $v_header;
1265
+ }
1266
+ }
1267
+ return $v_result;
1268
+ }
1269
+ function privAddFile($p_filedescr, &$p_header, &$p_options)
1270
+ {
1271
+ $v_result=1;
1272
+ $p_filename = $p_filedescr['filename'];
1273
+ if ($p_filename == "") {
1274
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)");
1275
+ return PclZip::errorCode();
1276
+ }
1277
+ /* TBC : Removed
1278
+ if (isset($p_filedescr['stored_filename'])) {
1279
+ $v_stored_filename = $p_filedescr['stored_filename'];
1280
+ }
1281
+ else {
1282
+ $v_stored_filename = $p_filedescr['stored_filename'];
1283
+ }
1284
+ */
1285
+ clearstatcache();
1286
+ $p_header['version'] = 20;
1287
+ $p_header['version_extracted'] = 10;
1288
+ $p_header['flag'] = 0;
1289
+ $p_header['compression'] = 0;
1290
+ $p_header['crc'] = 0;
1291
+ $p_header['compressed_size'] = 0;
1292
+ $p_header['filename_len'] = strlen($p_filename);
1293
+ $p_header['extra_len'] = 0;
1294
+ $p_header['disk'] = 0;
1295
+ $p_header['internal'] = 0;
1296
+ $p_header['offset'] = 0;
1297
+ $p_header['filename'] = $p_filename;
1298
+ // TBC : Removed $p_header['stored_filename'] = $v_stored_filename;
1299
+ $p_header['stored_filename'] = $p_filedescr['stored_filename'];
1300
+ $p_header['extra'] = '';
1301
+ $p_header['status'] = 'ok';
1302
+ $p_header['index'] = -1;
1303
+ if ($p_filedescr['type']=='file') {
1304
+ $p_header['external'] = 0x00000000;
1305
+ $p_header['size'] = filesize($p_filename);
1306
+ }
1307
+ else if ($p_filedescr['type']=='folder') {
1308
+ $p_header['external'] = 0x00000010;
1309
+ $p_header['mtime'] = filemtime($p_filename);
1310
+ $p_header['size'] = filesize($p_filename);
1311
+ }
1312
+ else if ($p_filedescr['type'] == 'virtual_file') {
1313
+ $p_header['external'] = 0x00000000;
1314
+ $p_header['size'] = strlen($p_filedescr['content']);
1315
+ }
1316
+ if (isset($p_filedescr['mtime'])) {
1317
+ $p_header['mtime'] = $p_filedescr['mtime'];
1318
+ }
1319
+ else if ($p_filedescr['type'] == 'virtual_file') {
1320
+ $p_header['mtime'] = time();
1321
+ }
1322
+ else {
1323
+ $p_header['mtime'] = filemtime($p_filename);
1324
+ }
1325
+ if (isset($p_filedescr['comment'])) {
1326
+ $p_header['comment_len'] = strlen($p_filedescr['comment']);
1327
+ $p_header['comment'] = $p_filedescr['comment'];
1328
+ }
1329
+ else {
1330
+ $p_header['comment_len'] = 0;
1331
+ $p_header['comment'] = '';
1332
+ }
1333
+ if (isset($p_options[PCLZIP_CB_PRE_ADD])) {
1334
+ $v_local_header = array();
1335
+ $this->privConvertHeader2FileInfo($p_header, $v_local_header);
1336
+ // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);');
1337
+ $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header);
1338
+ if ($v_result == 0) {
1339
+ $p_header['status'] = "skipped";
1340
+ $v_result = 1;
1341
+ }
1342
+ if ($p_header['stored_filename'] != $v_local_header['stored_filename']) {
1343
+ $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']);
1344
+ }
1345
+ }
1346
+ if ($p_header['stored_filename'] == "") {
1347
+ $p_header['status'] = "filtered";
1348
+ }
1349
+ if (strlen($p_header['stored_filename']) > 0xFF) {
1350
+ $p_header['status'] = 'filename_too_long';
1351
+ }
1352
+ if ($p_header['status'] == 'ok') {
1353
+ if ($p_filedescr['type'] == 'file') {
1354
+ if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF]))
1355
+ && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON])
1356
+ || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
1357
+ && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])) ) ) {
1358
+ $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options);
1359
+ if ($v_result < PCLZIP_ERR_NO_ERROR) {
1360
+ return $v_result;
1361
+ }
1362
+ }
1363
+ else {
1364
+ if (($v_file = @fopen($p_filename, "rb")) == 0) {
1365
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode");
1366
+ return PclZip::errorCode();
1367
+ }
1368
+ $v_content = @fread($v_file, $p_header['size']);
1369
+ @fclose($v_file);
1370
+ $p_header['crc'] = @crc32($v_content);
1371
+ if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
1372
+ $p_header['compressed_size'] = $p_header['size'];
1373
+ $p_header['compression'] = 0;
1374
+ }
1375
+ else {
1376
+ $v_content = @gzdeflate($v_content);
1377
+ $p_header['compressed_size'] = strlen($v_content);
1378
+ $p_header['compression'] = 8;
1379
+ }
1380
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
1381
+ @fclose($v_file);
1382
+ return $v_result;
1383
+ }
1384
+ @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']);
1385
+ }
1386
+ }
1387
+ else if ($p_filedescr['type'] == 'virtual_file') {
1388
+ $v_content = $p_filedescr['content'];
1389
+ $p_header['crc'] = @crc32($v_content);
1390
+ if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
1391
+ $p_header['compressed_size'] = $p_header['size'];
1392
+ $p_header['compression'] = 0;
1393
+ }
1394
+ else {
1395
+ $v_content = @gzdeflate($v_content);
1396
+ $p_header['compressed_size'] = strlen($v_content);
1397
+ $p_header['compression'] = 8;
1398
+ }
1399
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
1400
+ @fclose($v_file);
1401
+ return $v_result;
1402
+ }
1403
+ @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']);
1404
+ }
1405
+ else if ($p_filedescr['type'] == 'folder') {
1406
+ if (@substr($p_header['stored_filename'], -1) != '/') {
1407
+ $p_header['stored_filename'] .= '/';
1408
+ }
1409
+ $p_header['size'] = 0;
1410
+ $p_header['external'] = 0x00000010; // Value for a folder : to be checked
1411
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1)
1412
+ {
1413
+ return $v_result;
1414
+ }
1415
+ }
1416
+ }
1417
+ if (isset($p_options[PCLZIP_CB_POST_ADD])) {
1418
+ $v_local_header = array();
1419
+ $this->privConvertHeader2FileInfo($p_header, $v_local_header);
1420
+ // eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);');
1421
+ $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header);
1422
+ if ($v_result == 0) {
1423
+ $v_result = 1;
1424
+ }
1425
+ }
1426
+ return $v_result;
1427
+ }
1428
+ function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options)
1429
+ {
1430
+ $v_result=PCLZIP_ERR_NO_ERROR;
1431
+ $p_filename = $p_filedescr['filename'];
1432
+ if (($v_file = @fopen($p_filename, "rb")) == 0) {
1433
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode");
1434
+ return PclZip::errorCode();
1435
+ }
1436
+ $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz';
1437
+ if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) {
1438
+ fclose($v_file);
1439
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode');
1440
+ return PclZip::errorCode();
1441
+ }
1442
+ $v_size = filesize($p_filename);
1443
+ while ($v_size != 0) {
1444
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
1445
+ $v_buffer = @fread($v_file, $v_read_size);
1446
+ @gzputs($v_file_compressed, $v_buffer, $v_read_size);
1447
+ $v_size -= $v_read_size;
1448
+ }
1449
+ @fclose($v_file);
1450
+ @gzclose($v_file_compressed);
1451
+ if (filesize($v_gzip_temp_name) < 18) {
1452
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes');
1453
+ return PclZip::errorCode();
1454
+ }
1455
+ if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) {
1456
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
1457
+ return PclZip::errorCode();
1458
+ }
1459
+ $v_binary_data = @fread($v_file_compressed, 10);
1460
+ $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data);
1461
+ $v_data_header['os'] = bin2hex($v_data_header['os']);
1462
+ @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8);
1463
+ $v_binary_data = @fread($v_file_compressed, 8);
1464
+ $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data);
1465
+ $p_header['compression'] = ord($v_data_header['cm']);
1466
+ $p_header['crc'] = $v_data_footer['crc'];
1467
+ $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18;
1468
+ @fclose($v_file_compressed);
1469
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
1470
+ return $v_result;
1471
+ }
1472
+ if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0)
1473
+ {
1474
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
1475
+ return PclZip::errorCode();
1476
+ }
1477
+ fseek($v_file_compressed, 10);
1478
+ $v_size = $p_header['compressed_size'];
1479
+ while ($v_size != 0)
1480
+ {
1481
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
1482
+ $v_buffer = @fread($v_file_compressed, $v_read_size);
1483
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
1484
+ $v_size -= $v_read_size;
1485
+ }
1486
+ @fclose($v_file_compressed);
1487
+ @unlink($v_gzip_temp_name);
1488
+ return $v_result;
1489
+ }
1490
+ function privCalculateStoredFilename(&$p_filedescr, &$p_options)
1491
+ {
1492
+ $v_result=1;
1493
+ $p_filename = $p_filedescr['filename'];
1494
+ if (isset($p_options[PCLZIP_OPT_ADD_PATH])) {
1495
+ $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH];
1496
+ }
1497
+ else {
1498
+ $p_add_dir = '';
1499
+ }
1500
+ if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) {
1501
+ $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH];
1502
+ }
1503
+ else {
1504
+ $p_remove_dir = '';
1505
+ }
1506
+ if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
1507
+ $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH];
1508
+ }
1509
+ else {
1510
+ $p_remove_all_dir = 0;
1511
+ }
1512
+ if (isset($p_filedescr['new_full_name'])) {
1513
+ $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']);
1514
+ }
1515
+ else {
1516
+ if (isset($p_filedescr['new_short_name'])) {
1517
+ $v_path_info = pathinfo($p_filename);
1518
+ $v_dir = '';
1519
+ if ($v_path_info['dirname'] != '') {
1520
+ $v_dir = $v_path_info['dirname'].'/';
1521
+ }
1522
+ $v_stored_filename = $v_dir.$p_filedescr['new_short_name'];
1523
+ }
1524
+ else {
1525
+ $v_stored_filename = $p_filename;
1526
+ }
1527
+ if ($p_remove_all_dir) {
1528
+ $v_stored_filename = basename($p_filename);
1529
+ }
1530
+ else if ($p_remove_dir != "") {
1531
+ if (substr($p_remove_dir, -1) != '/')
1532
+ $p_remove_dir .= "/";
1533
+ if ( (substr($p_filename, 0, 2) == "./")
1534
+ || (substr($p_remove_dir, 0, 2) == "./")) {
1535
+ if ( (substr($p_filename, 0, 2) == "./")
1536
+ && (substr($p_remove_dir, 0, 2) != "./")) {
1537
+ $p_remove_dir = "./".$p_remove_dir;
1538
+ }
1539
+ if ( (substr($p_filename, 0, 2) != "./")
1540
+ && (substr($p_remove_dir, 0, 2) == "./")) {
1541
+ $p_remove_dir = substr($p_remove_dir, 2);
1542
+ }
1543
+ }
1544
+ $v_compare = PclZipUtilPathInclusion($p_remove_dir,
1545
+ $v_stored_filename);
1546
+ if ($v_compare > 0) {
1547
+ if ($v_compare == 2) {
1548
+ $v_stored_filename = "";
1549
+ }
1550
+ else {
1551
+ $v_stored_filename = substr($v_stored_filename,
1552
+ strlen($p_remove_dir));
1553
+ }
1554
+ }
1555
+ }
1556
+ $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename);
1557
+ if ($p_add_dir != "") {
1558
+ if (substr($p_add_dir, -1) == "/")
1559
+ $v_stored_filename = $p_add_dir.$v_stored_filename;
1560
+ else
1561
+ $v_stored_filename = $p_add_dir."/".$v_stored_filename;
1562
+ }
1563
+ }
1564
+ $v_stored_filename = PclZipUtilPathReduction($v_stored_filename);
1565
+ $p_filedescr['stored_filename'] = $v_stored_filename;
1566
+ return $v_result;
1567
+ }
1568
+ function privWriteFileHeader(&$p_header)
1569
+ {
1570
+ $v_result=1;
1571
+ $p_header['offset'] = ftell($this->zip_fd);
1572
+ $v_date = getdate($p_header['mtime']);
1573
+ $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
1574
+ $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
1575
+ $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50,
1576
+ $p_header['version_extracted'], $p_header['flag'],
1577
+ $p_header['compression'], $v_mtime, $v_mdate,
1578
+ $p_header['crc'], $p_header['compressed_size'],
1579
+ $p_header['size'],
1580
+ strlen($p_header['stored_filename']),
1581
+ $p_header['extra_len']);
1582
+ fputs($this->zip_fd, $v_binary_data, 30);
1583
+ if (strlen($p_header['stored_filename']) != 0)
1584
+ {
1585
+ fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
1586
+ }
1587
+ if ($p_header['extra_len'] != 0)
1588
+ {
1589
+ fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
1590
+ }
1591
+ return $v_result;
1592
+ }
1593
+ function privWriteCentralFileHeader(&$p_header)
1594
+ {
1595
+ $v_result=1;
1596
+ $v_date = getdate($p_header['mtime']);
1597
+ $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
1598
+ $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
1599
+ $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50,
1600
+ $p_header['version'], $p_header['version_extracted'],
1601
+ $p_header['flag'], $p_header['compression'],
1602
+ $v_mtime, $v_mdate, $p_header['crc'],
1603
+ $p_header['compressed_size'], $p_header['size'],
1604
+ strlen($p_header['stored_filename']),
1605
+ $p_header['extra_len'], $p_header['comment_len'],
1606
+ $p_header['disk'], $p_header['internal'],
1607
+ $p_header['external'], $p_header['offset']);
1608
+ fputs($this->zip_fd, $v_binary_data, 46);
1609
+ if (strlen($p_header['stored_filename']) != 0)
1610
+ {
1611
+ fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
1612
+ }
1613
+ if ($p_header['extra_len'] != 0)
1614
+ {
1615
+ fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
1616
+ }
1617
+ if ($p_header['comment_len'] != 0)
1618
+ {
1619
+ fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']);
1620
+ }
1621
+ return $v_result;
1622
+ }
1623
+ function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment)
1624
+ {
1625
+ $v_result=1;
1626
+ $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries,
1627
+ $p_nb_entries, $p_size,
1628
+ $p_offset, strlen($p_comment));
1629
+ fputs($this->zip_fd, $v_binary_data, 22);
1630
+ if (strlen($p_comment) != 0)
1631
+ {
1632
+ fputs($this->zip_fd, $p_comment, strlen($p_comment));
1633
+ }
1634
+ return $v_result;
1635
+ }
1636
+ function privList(&$p_list)
1637
+ {
1638
+ $v_result=1;
1639
+ $this->privDisableMagicQuotes();
1640
+ if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
1641
+ {
1642
+ $this->privSwapBackMagicQuotes();
1643
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
1644
+ return PclZip::errorCode();
1645
+ }
1646
+ $v_central_dir = array();
1647
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
1648
+ {
1649
+ $this->privSwapBackMagicQuotes();
1650
+ return $v_result;
1651
+ }
1652
+ @rewind($this->zip_fd);
1653
+ if (@fseek($this->zip_fd, $v_central_dir['offset']))
1654
+ {
1655
+ $this->privSwapBackMagicQuotes();
1656
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
1657
+ return PclZip::errorCode();
1658
+ }
1659
+ for ($i=0; $i<$v_central_dir['entries']; $i++)
1660
+ {
1661
+ if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
1662
+ {
1663
+ $this->privSwapBackMagicQuotes();
1664
+ return $v_result;
1665
+ }
1666
+ $v_header['index'] = $i;
1667
+ $this->privConvertHeader2FileInfo($v_header, $p_list[$i]);
1668
+ unset($v_header);
1669
+ }
1670
+ $this->privCloseFd();
1671
+ $this->privSwapBackMagicQuotes();
1672
+ return $v_result;
1673
+ }
1674
+ function privConvertHeader2FileInfo($p_header, &$p_info)
1675
+ {
1676
+ $v_result=1;
1677
+ $v_temp_path = PclZipUtilPathReduction($p_header['filename']);
1678
+ $p_info['filename'] = $v_temp_path;
1679
+ $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']);
1680
+ $p_info['stored_filename'] = $v_temp_path;
1681
+ $p_info['size'] = $p_header['size'];
1682
+ $p_info['compressed_size'] = $p_header['compressed_size'];
1683
+ $p_info['mtime'] = $p_header['mtime'];
1684
+ $p_info['comment'] = $p_header['comment'];
1685
+ $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010);
1686
+ $p_info['index'] = $p_header['index'];
1687
+ $p_info['status'] = $p_header['status'];
1688
+ $p_info['crc'] = $p_header['crc'];
1689
+ return $v_result;
1690
+ }
1691
+ function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
1692
+ {
1693
+ $v_result=1;
1694
+ $this->privDisableMagicQuotes();
1695
+ if ( ($p_path == "")
1696
+ || ( (substr($p_path, 0, 1) != "/")
1697
+ && (substr($p_path, 0, 3) != "../")
1698
+ && (substr($p_path,1,2)!=":/")))
1699
+ $p_path = "./".$p_path;
1700
+ if (($p_path != "./") && ($p_path != "/"))
1701
+ {
1702
+ while (substr($p_path, -1) == "/")
1703
+ {
1704
+ $p_path = substr($p_path, 0, strlen($p_path)-1);
1705
+ }
1706
+ }
1707
+ if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/'))
1708
+ {
1709
+ $p_remove_path .= '/';
1710
+ }
1711
+ $p_remove_path_size = strlen($p_remove_path);
1712
+ if (($v_result = $this->privOpenFd('rb')) != 1)
1713
+ {
1714
+ $this->privSwapBackMagicQuotes();
1715
+ return $v_result;
1716
+ }
1717
+ $v_central_dir = array();
1718
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
1719
+ {
1720
+ $this->privCloseFd();
1721
+ $this->privSwapBackMagicQuotes();
1722
+ return $v_result;
1723
+ }
1724
+ $v_pos_entry = $v_central_dir['offset'];
1725
+ $j_start = 0;
1726
+ for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
1727
+ {
1728
+ @rewind($this->zip_fd);
1729
+ if (@fseek($this->zip_fd, $v_pos_entry))
1730
+ {
1731
+ $this->privCloseFd();
1732
+ $this->privSwapBackMagicQuotes();
1733
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
1734
+ return PclZip::errorCode();
1735
+ }
1736
+ $v_header = array();
1737
+ if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
1738
+ {
1739
+ $this->privCloseFd();
1740
+ $this->privSwapBackMagicQuotes();
1741
+ return $v_result;
1742
+ }
1743
+ $v_header['index'] = $i;
1744
+ $v_pos_entry = ftell($this->zip_fd);
1745
+ $v_extract = false;
1746
+ if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
1747
+ && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
1748
+ for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_extract); $j++) {
1749
+ if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
1750
+ if ( (strlen($v_header['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
1751
+ && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
1752
+ $v_extract = true;
1753
+ }
1754
+ }
1755
+ elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
1756
+ $v_extract = true;
1757
+ }
1758
+ }
1759
+ }
1760
+ /*
1761
+ else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
1762
+ && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
1763
+ if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) {
1764
+ $v_extract = true;
1765
+ }
1766
+ }
1767
+ */
1768
+ else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
1769
+ && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
1770
+ if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) {
1771
+ $v_extract = true;
1772
+ }
1773
+ }
1774
+ else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
1775
+ && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
1776
+ for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_extract); $j++) {
1777
+ if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
1778
+ $v_extract = true;
1779
+ }
1780
+ if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
1781
+ $j_start = $j+1;
1782
+ }
1783
+ if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
1784
+ break;
1785
+ }
1786
+ }
1787
+ }
1788
+ else {
1789
+ $v_extract = true;
1790
+ }
1791
+ // ----- Check compression method
1792
+ if ( ($v_extract)
1793
+ && ( ($v_header['compression'] != 8)
1794
+ && ($v_header['compression'] != 0))) {
1795
+ $v_header['status'] = 'unsupported_compression';
1796
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
1797
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
1798
+ $this->privSwapBackMagicQuotes();
1799
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION,
1800
+ "Filename '".$v_header['stored_filename']."' is "
1801
+ ."compressed by an unsupported compression "
1802
+ ."method (".$v_header['compression'].") ");
1803
+ return PclZip::errorCode();
1804
+ }
1805
+ }
1806
+ // ----- Check encrypted files
1807
+ if (($v_extract) && (($v_header['flag'] & 1) == 1)) {
1808
+ $v_header['status'] = 'unsupported_encryption';
1809
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
1810
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
1811
+ $this->privSwapBackMagicQuotes();
1812
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION,
1813
+ "Unsupported encryption for "
1814
+ ." filename '".$v_header['stored_filename']
1815
+ ."'");
1816
+ return PclZip::errorCode();
1817
+ }
1818
+ }
1819
+ if (($v_extract) && ($v_header['status'] != 'ok')) {
1820
+ $v_result = $this->privConvertHeader2FileInfo($v_header,
1821
+ $p_file_list[$v_nb_extracted++]);
1822
+ if ($v_result != 1) {
1823
+ $this->privCloseFd();
1824
+ $this->privSwapBackMagicQuotes();
1825
+ return $v_result;
1826
+ }
1827
+ $v_extract = false;
1828
+ }
1829
+ if ($v_extract)
1830
+ {
1831
+ @rewind($this->zip_fd);
1832
+ if (@fseek($this->zip_fd, $v_header['offset']))
1833
+ {
1834
+ $this->privCloseFd();
1835
+ $this->privSwapBackMagicQuotes();
1836
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
1837
+ return PclZip::errorCode();
1838
+ }
1839
+ if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) {
1840
+ $v_string = '';
1841
+ $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options);
1842
+ if ($v_result1 < 1) {
1843
+ $this->privCloseFd();
1844
+ $this->privSwapBackMagicQuotes();
1845
+ return $v_result1;
1846
+ }
1847
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1)
1848
+ {
1849
+ $this->privCloseFd();
1850
+ $this->privSwapBackMagicQuotes();
1851
+ return $v_result;
1852
+ }
1853
+ $p_file_list[$v_nb_extracted]['content'] = $v_string;
1854
+ $v_nb_extracted++;
1855
+ if ($v_result1 == 2) {
1856
+ break;
1857
+ }
1858
+ }
1859
+ elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT]))
1860
+ && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) {
1861
+ $v_result1 = $this->privExtractFileInOutput($v_header, $p_options);
1862
+ if ($v_result1 < 1) {
1863
+ $this->privCloseFd();
1864
+ $this->privSwapBackMagicQuotes();
1865
+ return $v_result1;
1866
+ }
1867
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) {
1868
+ $this->privCloseFd();
1869
+ $this->privSwapBackMagicQuotes();
1870
+ return $v_result;
1871
+ }
1872
+ if ($v_result1 == 2) {
1873
+ break;
1874
+ }
1875
+ }
1876
+ else {
1877
+ $v_result1 = $this->privExtractFile($v_header,
1878
+ $p_path, $p_remove_path,
1879
+ $p_remove_all_path,
1880
+ $p_options);
1881
+ if ($v_result1 < 1) {
1882
+ $this->privCloseFd();
1883
+ $this->privSwapBackMagicQuotes();
1884
+ return $v_result1;
1885
+ }
1886
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1)
1887
+ {
1888
+ $this->privCloseFd();
1889
+ $this->privSwapBackMagicQuotes();
1890
+ return $v_result;
1891
+ }
1892
+ if ($v_result1 == 2) {
1893
+ break;
1894
+ }
1895
+ }
1896
+ }
1897
+ }
1898
+ $this->privCloseFd();
1899
+ $this->privSwapBackMagicQuotes();
1900
+ return $v_result;
1901
+ }
1902
+ function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
1903
+ {
1904
+ $v_result=1;
1905
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1)
1906
+ {
1907
+ return $v_result;
1908
+ }
1909
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
1910
+ }
1911
+ if ($p_remove_all_path == true) {
1912
+ if (($p_entry['external']&0x00000010)==0x00000010) {
1913
+ $p_entry['status'] = "filtered";
1914
+ return $v_result;
1915
+ }
1916
+ $p_entry['filename'] = basename($p_entry['filename']);
1917
+ }
1918
+ else if ($p_remove_path != "")
1919
+ {
1920
+ if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2)
1921
+ {
1922
+ $p_entry['status'] = "filtered";
1923
+ return $v_result;
1924
+ }
1925
+ $p_remove_path_size = strlen($p_remove_path);
1926
+ if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path)
1927
+ {
1928
+ $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size);
1929
+ }
1930
+ }
1931
+ if ($p_path != '') {
1932
+ $p_entry['filename'] = $p_path."/".$p_entry['filename'];
1933
+ }
1934
+ if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) {
1935
+ $v_inclusion
1936
+ = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION],
1937
+ $p_entry['filename']);
1938
+ if ($v_inclusion == 0) {
1939
+ PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION,
1940
+ "Filename '".$p_entry['filename']."' is "
1941
+ ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION");
1942
+ return PclZip::errorCode();
1943
+ }
1944
+ }
1945
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
1946
+ $v_local_header = array();
1947
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
1948
+ // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
1949
+ $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
1950
+ if ($v_result == 0) {
1951
+ $p_entry['status'] = "skipped";
1952
+ $v_result = 1;
1953
+ }
1954
+ if ($v_result == 2) {
1955
+ $p_entry['status'] = "aborted";
1956
+ $v_result = PCLZIP_ERR_USER_ABORTED;
1957
+ }
1958
+ $p_entry['filename'] = $v_local_header['filename'];
1959
+ }
1960
+ if ($p_entry['status'] == 'ok') {
1961
+ if (file_exists($p_entry['filename']))
1962
+ {
1963
+ if (is_dir($p_entry['filename']))
1964
+ {
1965
+ $p_entry['status'] = "already_a_directory";
1966
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
1967
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
1968
+ PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY,
1969
+ "Filename '".$p_entry['filename']."' is "
1970
+ ."already used by an existing directory");
1971
+ return PclZip::errorCode();
1972
+ }
1973
+ }
1974
+ else if (!is_writeable($p_entry['filename']))
1975
+ {
1976
+ $p_entry['status'] = "write_protected";
1977
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
1978
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
1979
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
1980
+ "Filename '".$p_entry['filename']."' exists "
1981
+ ."and is write protected");
1982
+ return PclZip::errorCode();
1983
+ }
1984
+ }
1985
+ else if (filemtime($p_entry['filename']) > $p_entry['mtime'])
1986
+ {
1987
+ if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER]))
1988
+ && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) {
1989
+ }
1990
+ else {
1991
+ $p_entry['status'] = "newer_exist";
1992
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
1993
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
1994
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
1995
+ "Newer version of '".$p_entry['filename']."' exists "
1996
+ ."and option PCLZIP_OPT_REPLACE_NEWER is not selected");
1997
+ return PclZip::errorCode();
1998
+ }
1999
+ }
2000
+ }
2001
+ else {
2002
+ }
2003
+ }
2004
+ else {
2005
+ if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/'))
2006
+ $v_dir_to_check = $p_entry['filename'];
2007
+ else if (!strstr($p_entry['filename'], "/"))
2008
+ $v_dir_to_check = "";
2009
+ else
2010
+ $v_dir_to_check = dirname($p_entry['filename']);
2011
+ if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) {
2012
+ $p_entry['status'] = "path_creation_fail";
2013
+ $v_result = 1;
2014
+ }
2015
+ }
2016
+ }
2017
+ if ($p_entry['status'] == 'ok') {
2018
+ if (!(($p_entry['external']&0x00000010)==0x00000010))
2019
+ {
2020
+ if ($p_entry['compression'] == 0) {
2021
+ // ----- Opening destination file
2022
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0)
2023
+ {
2024
+ $p_entry['status'] = "write_error";
2025
+ return $v_result;
2026
+ }
2027
+ $v_size = $p_entry['compressed_size'];
2028
+ while ($v_size != 0)
2029
+ {
2030
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2031
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
2032
+ /* Try to speed up the code
2033
+ $v_binary_data = pack('a'.$v_read_size, $v_buffer);
2034
+ @fwrite($v_dest_file, $v_binary_data, $v_read_size);
2035
+ */
2036
+ @fwrite($v_dest_file, $v_buffer, $v_read_size);
2037
+ $v_size -= $v_read_size;
2038
+ }
2039
+ fclose($v_dest_file);
2040
+ touch($p_entry['filename'], $p_entry['mtime']);
2041
+ }
2042
+ else {
2043
+ if (($p_entry['flag'] & 1) == 1) {
2044
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.');
2045
+ return PclZip::errorCode();
2046
+ }
2047
+ if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF]))
2048
+ && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON])
2049
+ || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
2050
+ && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])) ) ) {
2051
+ $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options);
2052
+ if ($v_result < PCLZIP_ERR_NO_ERROR) {
2053
+ return $v_result;
2054
+ }
2055
+ }
2056
+ else {
2057
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
2058
+ $v_file_content = @gzinflate($v_buffer);
2059
+ unset($v_buffer);
2060
+ if ($v_file_content === FALSE) {
2061
+ $p_entry['status'] = "error";
2062
+ return $v_result;
2063
+ }
2064
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
2065
+ $p_entry['status'] = "write_error";
2066
+ return $v_result;
2067
+ }
2068
+ @fwrite($v_dest_file, $v_file_content, $p_entry['size']);
2069
+ unset($v_file_content);
2070
+ @fclose($v_dest_file);
2071
+ }
2072
+ @touch($p_entry['filename'], $p_entry['mtime']);
2073
+ }
2074
+ if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) {
2075
+ @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]);
2076
+ }
2077
+ }
2078
+ }
2079
+ // ----- Change abort status
2080
+ if ($p_entry['status'] == "aborted") {
2081
+ $p_entry['status'] = "skipped";
2082
+ }
2083
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
2084
+ $v_local_header = array();
2085
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
2086
+ // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
2087
+ $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
2088
+ if ($v_result == 2) {
2089
+ $v_result = PCLZIP_ERR_USER_ABORTED;
2090
+ }
2091
+ }
2092
+ return $v_result;
2093
+ }
2094
+ function privExtractFileUsingTempFile(&$p_entry, &$p_options)
2095
+ {
2096
+ $v_result=1;
2097
+ $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz';
2098
+ if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) {
2099
+ fclose($v_file);
2100
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode');
2101
+ return PclZip::errorCode();
2102
+ }
2103
+ $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3));
2104
+ @fwrite($v_dest_file, $v_binary_data, 10);
2105
+ $v_size = $p_entry['compressed_size'];
2106
+ while ($v_size != 0)
2107
+ {
2108
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2109
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
2110
+ @fwrite($v_dest_file, $v_buffer, $v_read_size);
2111
+ $v_size -= $v_read_size;
2112
+ }
2113
+ $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']);
2114
+ @fwrite($v_dest_file, $v_binary_data, 8);
2115
+ @fclose($v_dest_file);
2116
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
2117
+ $p_entry['status'] = "write_error";
2118
+ return $v_result;
2119
+ }
2120
+ if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) {
2121
+ @fclose($v_dest_file);
2122
+ $p_entry['status'] = "read_error";
2123
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
2124
+ return PclZip::errorCode();
2125
+ }
2126
+ $v_size = $p_entry['size'];
2127
+ while ($v_size != 0) {
2128
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2129
+ $v_buffer = @gzread($v_src_file, $v_read_size);
2130
+ @fwrite($v_dest_file, $v_buffer, $v_read_size);
2131
+ $v_size -= $v_read_size;
2132
+ }
2133
+ @fclose($v_dest_file);
2134
+ @gzclose($v_src_file);
2135
+ @unlink($v_gzip_temp_name);
2136
+ return $v_result;
2137
+ }
2138
+ function privExtractFileInOutput(&$p_entry, &$p_options)
2139
+ {
2140
+ $v_result=1;
2141
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1) {
2142
+ return $v_result;
2143
+ }
2144
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
2145
+ }
2146
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
2147
+ $v_local_header = array();
2148
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
2149
+ // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
2150
+ $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
2151
+ if ($v_result == 0) {
2152
+ $p_entry['status'] = "skipped";
2153
+ $v_result = 1;
2154
+ }
2155
+ if ($v_result == 2) {
2156
+ $p_entry['status'] = "aborted";
2157
+ $v_result = PCLZIP_ERR_USER_ABORTED;
2158
+ }
2159
+ $p_entry['filename'] = $v_local_header['filename'];
2160
+ }
2161
+ if ($p_entry['status'] == 'ok') {
2162
+ if (!(($p_entry['external']&0x00000010)==0x00000010)) {
2163
+ if ($p_entry['compressed_size'] == $p_entry['size']) {
2164
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
2165
+ echo $v_buffer;
2166
+ unset($v_buffer);
2167
+ }
2168
+ else {
2169
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
2170
+ $v_file_content = gzinflate($v_buffer);
2171
+ unset($v_buffer);
2172
+ echo $v_file_content;
2173
+ unset($v_file_content);
2174
+ }
2175
+ }
2176
+ }
2177
+ // ----- Change abort status
2178
+ if ($p_entry['status'] == "aborted") {
2179
+ $p_entry['status'] = "skipped";
2180
+ }
2181
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
2182
+ $v_local_header = array();
2183
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
2184
+ // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
2185
+ $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
2186
+ if ($v_result == 2) {
2187
+ $v_result = PCLZIP_ERR_USER_ABORTED;
2188
+ }
2189
+ }
2190
+ return $v_result;
2191
+ }
2192
+ function privExtractFileAsString(&$p_entry, &$p_string, &$p_options)
2193
+ {
2194
+ $v_result=1;
2195
+ $v_header = array();
2196
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1)
2197
+ {
2198
+ return $v_result;
2199
+ }
2200
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
2201
+ }
2202
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
2203
+ $v_local_header = array();
2204
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
2205
+ // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
2206
+ $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
2207
+ if ($v_result == 0) {
2208
+ $p_entry['status'] = "skipped";
2209
+ $v_result = 1;
2210
+ }
2211
+ if ($v_result == 2) {
2212
+ $p_entry['status'] = "aborted";
2213
+ $v_result = PCLZIP_ERR_USER_ABORTED;
2214
+ }
2215
+ $p_entry['filename'] = $v_local_header['filename'];
2216
+ }
2217
+ if ($p_entry['status'] == 'ok') {
2218
+ if (!(($p_entry['external']&0x00000010)==0x00000010)) {
2219
+ if ($p_entry['compression'] == 0) {
2220
+ $p_string = @fread($this->zip_fd, $p_entry['compressed_size']);
2221
+ }
2222
+ else {
2223
+ $v_data = @fread($this->zip_fd, $p_entry['compressed_size']);
2224
+ if (($p_string = @gzinflate($v_data)) === FALSE) {
2225
+ }
2226
+ }
2227
+ }
2228
+ else {
2229
+ }
2230
+ }
2231
+ // ----- Change abort status
2232
+ if ($p_entry['status'] == "aborted") {
2233
+ $p_entry['status'] = "skipped";
2234
+ }
2235
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
2236
+ $v_local_header = array();
2237
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
2238
+ $v_local_header['content'] = $p_string;
2239
+ $p_string = '';
2240
+ // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
2241
+ $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
2242
+ $p_string = $v_local_header['content'];
2243
+ unset($v_local_header['content']);
2244
+ if ($v_result == 2) {
2245
+ $v_result = PCLZIP_ERR_USER_ABORTED;
2246
+ }
2247
+ }
2248
+ return $v_result;
2249
+ }
2250
+ function privReadFileHeader(&$p_header)
2251
+ {
2252
+ $v_result=1;
2253
+ $v_binary_data = @fread($this->zip_fd, 4);
2254
+ $v_data = unpack('Vid', $v_binary_data);
2255
+ if ($v_data['id'] != 0x04034b50)
2256
+ {
2257
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
2258
+ return PclZip::errorCode();
2259
+ }
2260
+ $v_binary_data = fread($this->zip_fd, 26);
2261
+ if (strlen($v_binary_data) != 26)
2262
+ {
2263
+ $p_header['filename'] = "";
2264
+ $p_header['status'] = "invalid_header";
2265
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
2266
+ return PclZip::errorCode();
2267
+ }
2268
+ $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data);
2269
+ $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']);
2270
+ if ($v_data['extra_len'] != 0) {
2271
+ $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']);
2272
+ }
2273
+ else {
2274
+ $p_header['extra'] = '';
2275
+ }
2276
+ $p_header['version_extracted'] = $v_data['version'];
2277
+ $p_header['compression'] = $v_data['compression'];
2278
+ $p_header['size'] = $v_data['size'];
2279
+ $p_header['compressed_size'] = $v_data['compressed_size'];
2280
+ $p_header['crc'] = $v_data['crc'];
2281
+ $p_header['flag'] = $v_data['flag'];
2282
+ $p_header['filename_len'] = $v_data['filename_len'];
2283
+ $p_header['mdate'] = $v_data['mdate'];
2284
+ $p_header['mtime'] = $v_data['mtime'];
2285
+ if ($p_header['mdate'] && $p_header['mtime'])
2286
+ {
2287
+ $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
2288
+ $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
2289
+ $v_seconde = ($p_header['mtime'] & 0x001F)*2;
2290
+ $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
2291
+ $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
2292
+ $v_day = $p_header['mdate'] & 0x001F;
2293
+ $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
2294
+ }
2295
+ else
2296
+ {
2297
+ $p_header['mtime'] = time();
2298
+ }
2299
+ $p_header['stored_filename'] = $p_header['filename'];
2300
+ $p_header['status'] = "ok";
2301
+ return $v_result;
2302
+ }
2303
+ function privReadCentralFileHeader(&$p_header)
2304
+ {
2305
+ $v_result=1;
2306
+ $v_binary_data = @fread($this->zip_fd, 4);
2307
+ $v_data = unpack('Vid', $v_binary_data);
2308
+ if ($v_data['id'] != 0x02014b50)
2309
+ {
2310
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
2311
+ return PclZip::errorCode();
2312
+ }
2313
+ $v_binary_data = fread($this->zip_fd, 42);
2314
+ if (strlen($v_binary_data) != 42)
2315
+ {
2316
+ $p_header['filename'] = "";
2317
+ $p_header['status'] = "invalid_header";
2318
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
2319
+ return PclZip::errorCode();
2320
+ }
2321
+ $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data);
2322
+ if ($p_header['filename_len'] != 0)
2323
+ $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']);
2324
+ else
2325
+ $p_header['filename'] = '';
2326
+ if ($p_header['extra_len'] != 0)
2327
+ $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']);
2328
+ else
2329
+ $p_header['extra'] = '';
2330
+ if ($p_header['comment_len'] != 0)
2331
+ $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']);
2332
+ else
2333
+ $p_header['comment'] = '';
2334
+ if (1)
2335
+ {
2336
+ $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
2337
+ $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
2338
+ $v_seconde = ($p_header['mtime'] & 0x001F)*2;
2339
+ $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
2340
+ $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
2341
+ $v_day = $p_header['mdate'] & 0x001F;
2342
+ $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
2343
+ }
2344
+ else
2345
+ {
2346
+ $p_header['mtime'] = time();
2347
+ }
2348
+ $p_header['stored_filename'] = $p_header['filename'];
2349
+ $p_header['status'] = 'ok';
2350
+ if (substr($p_header['filename'], -1) == '/') {
2351
+ $p_header['external'] = 0x00000010;
2352
+ }
2353
+ return $v_result;
2354
+ }
2355
+ function privCheckFileHeaders(&$p_local_header, &$p_central_header)
2356
+ {
2357
+ $v_result=1;
2358
+ // ----- Check the static values
2359
+ // TBC
2360
+ if ($p_local_header['filename'] != $p_central_header['filename']) {
2361
+ }
2362
+ if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) {
2363
+ }
2364
+ if ($p_local_header['flag'] != $p_central_header['flag']) {
2365
+ }
2366
+ if ($p_local_header['compression'] != $p_central_header['compression']) {
2367
+ }
2368
+ if ($p_local_header['mtime'] != $p_central_header['mtime']) {
2369
+ }
2370
+ if ($p_local_header['filename_len'] != $p_central_header['filename_len']) {
2371
+ }
2372
+ // ----- Look for flag bit 3
2373
+ if (($p_local_header['flag'] & 8) == 8) {
2374
+ $p_local_header['size'] = $p_central_header['size'];
2375
+ $p_local_header['compressed_size'] = $p_central_header['compressed_size'];
2376
+ $p_local_header['crc'] = $p_central_header['crc'];
2377
+ }
2378
+ return $v_result;
2379
+ }
2380
+ function privReadEndCentralDir(&$p_central_dir)
2381
+ {
2382
+ $v_result=1;
2383
+ $v_size = filesize($this->zipname);
2384
+ @fseek($this->zip_fd, $v_size);
2385
+ if (@ftell($this->zip_fd) != $v_size)
2386
+ {
2387
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\'');
2388
+ return PclZip::errorCode();
2389
+ }
2390
+ $v_found = 0;
2391
+ if ($v_size > 26) {
2392
+ @fseek($this->zip_fd, $v_size-22);
2393
+ if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22))
2394
+ {
2395
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
2396
+ return PclZip::errorCode();
2397
+ }
2398
+ $v_binary_data = @fread($this->zip_fd, 4);
2399
+ $v_data = @unpack('Vid', $v_binary_data);
2400
+ if ($v_data['id'] == 0x06054b50) {
2401
+ $v_found = 1;
2402
+ }
2403
+ $v_pos = ftell($this->zip_fd);
2404
+ }
2405
+ if (!$v_found) {
2406
+ $v_maximum_size = 65557; // 0xFFFF + 22;
2407
+ if ($v_maximum_size > $v_size)
2408
+ $v_maximum_size = $v_size;
2409
+ @fseek($this->zip_fd, $v_size-$v_maximum_size);
2410
+ if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size))
2411
+ {
2412
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
2413
+ return PclZip::errorCode();
2414
+ }
2415
+ $v_pos = ftell($this->zip_fd);
2416
+ $v_bytes = 0x00000000;
2417
+ while ($v_pos < $v_size)
2418
+ {
2419
+ $v_byte = @fread($this->zip_fd, 1);
2420
+ $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte);
2421
+ if ($v_bytes == 0x504b0506)
2422
+ {
2423
+ $v_pos++;
2424
+ break;
2425
+ }
2426
+ $v_pos++;
2427
+ }
2428
+ if ($v_pos == $v_size)
2429
+ {
2430
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature");
2431
+ return PclZip::errorCode();
2432
+ }
2433
+ }
2434
+ $v_binary_data = fread($this->zip_fd, 18);
2435
+ if (strlen($v_binary_data) != 18)
2436
+ {
2437
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data));
2438
+ return PclZip::errorCode();
2439
+ }
2440
+ $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data);
2441
+ if (($v_pos + $v_data['comment_size'] + 18) != $v_size) {
2442
+ // ----- Removed in release 2.2 see readme file
2443
+ // The check of the file size is a little too strict.
2444
+ // Some bugs where found when a zip is encrypted/decrypted with 'crypt'.
2445
+ // While decrypted, zip has training 0 bytes
2446
+ if (0) {
2447
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT,
2448
+ 'The central dir is not at the end of the archive.'
2449
+ .' Some trailing bytes exists after the archive.');
2450
+ return PclZip::errorCode();
2451
+ }
2452
+ }
2453
+ if ($v_data['comment_size'] != 0) {
2454
+ $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']);
2455
+ }
2456
+ else
2457
+ $p_central_dir['comment'] = '';
2458
+ $p_central_dir['entries'] = $v_data['entries'];
2459
+ $p_central_dir['disk_entries'] = $v_data['disk_entries'];
2460
+ $p_central_dir['offset'] = $v_data['offset'];
2461
+ $p_central_dir['size'] = $v_data['size'];
2462
+ $p_central_dir['disk'] = $v_data['disk'];
2463
+ $p_central_dir['disk_start'] = $v_data['disk_start'];
2464
+ return $v_result;
2465
+ }
2466
+ function privDeleteByRule(&$p_result_list, &$p_options)
2467
+ {
2468
+ $v_result=1;
2469
+ $v_list_detail = array();
2470
+ if (($v_result=$this->privOpenFd('rb')) != 1)
2471
+ {
2472
+ return $v_result;
2473
+ }
2474
+ $v_central_dir = array();
2475
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
2476
+ {
2477
+ $this->privCloseFd();
2478
+ return $v_result;
2479
+ }
2480
+ @rewind($this->zip_fd);
2481
+ $v_pos_entry = $v_central_dir['offset'];
2482
+ @rewind($this->zip_fd);
2483
+ if (@fseek($this->zip_fd, $v_pos_entry))
2484
+ {
2485
+ $this->privCloseFd();
2486
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
2487
+ return PclZip::errorCode();
2488
+ }
2489
+ $v_header_list = array();
2490
+ $j_start = 0;
2491
+ for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
2492
+ {
2493
+ $v_header_list[$v_nb_extracted] = array();
2494
+ if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1)
2495
+ {
2496
+ $this->privCloseFd();
2497
+ return $v_result;
2498
+ }
2499
+ $v_header_list[$v_nb_extracted]['index'] = $i;
2500
+ $v_found = false;
2501
+ if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
2502
+ && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
2503
+ for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) {
2504
+ if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
2505
+ if ( (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
2506
+ && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
2507
+ $v_found = true;
2508
+ }
2509
+ elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */
2510
+ && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
2511
+ $v_found = true;
2512
+ }
2513
+ }
2514
+ elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
2515
+ $v_found = true;
2516
+ }
2517
+ }
2518
+ }
2519
+ /*
2520
+ else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
2521
+ && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
2522
+ if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
2523
+ $v_found = true;
2524
+ }
2525
+ }
2526
+ */
2527
+ else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
2528
+ && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
2529
+ if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
2530
+ $v_found = true;
2531
+ }
2532
+ }
2533
+ else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
2534
+ && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
2535
+ for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) {
2536
+ if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
2537
+ $v_found = true;
2538
+ }
2539
+ if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
2540
+ $j_start = $j+1;
2541
+ }
2542
+ if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
2543
+ break;
2544
+ }
2545
+ }
2546
+ }
2547
+ else {
2548
+ $v_found = true;
2549
+ }
2550
+ if ($v_found)
2551
+ {
2552
+ unset($v_header_list[$v_nb_extracted]);
2553
+ }
2554
+ else
2555
+ {
2556
+ $v_nb_extracted++;
2557
+ }
2558
+ }
2559
+ if ($v_nb_extracted > 0) {
2560
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
2561
+ $v_temp_zip = new PclZip($v_zip_temp_name);
2562
+ if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) {
2563
+ $this->privCloseFd();
2564
+ return $v_result;
2565
+ }
2566
+ for ($i=0; $i<sizeof($v_header_list); $i++) {
2567
+ @rewind($this->zip_fd);
2568
+ if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) {
2569
+ $this->privCloseFd();
2570
+ $v_temp_zip->privCloseFd();
2571
+ @unlink($v_zip_temp_name);
2572
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
2573
+ return PclZip::errorCode();
2574
+ }
2575
+ $v_local_header = array();
2576
+ if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) {
2577
+ $this->privCloseFd();
2578
+ $v_temp_zip->privCloseFd();
2579
+ @unlink($v_zip_temp_name);
2580
+ return $v_result;
2581
+ }
2582
+ if ($this->privCheckFileHeaders($v_local_header,
2583
+ $v_header_list[$i]) != 1) {
2584
+ }
2585
+ unset($v_local_header);
2586
+ if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) {
2587
+ $this->privCloseFd();
2588
+ $v_temp_zip->privCloseFd();
2589
+ @unlink($v_zip_temp_name);
2590
+ return $v_result;
2591
+ }
2592
+ if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) {
2593
+ $this->privCloseFd();
2594
+ $v_temp_zip->privCloseFd();
2595
+ @unlink($v_zip_temp_name);
2596
+ return $v_result;
2597
+ }
2598
+ }
2599
+ $v_offset = @ftell($v_temp_zip->zip_fd);
2600
+ for ($i=0; $i<sizeof($v_header_list); $i++) {
2601
+ if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
2602
+ $v_temp_zip->privCloseFd();
2603
+ $this->privCloseFd();
2604
+ @unlink($v_zip_temp_name);
2605
+ return $v_result;
2606
+ }
2607
+ $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
2608
+ }
2609
+ $v_comment = '';
2610
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
2611
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
2612
+ }
2613
+ $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset;
2614
+ if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) {
2615
+ unset($v_header_list);
2616
+ $v_temp_zip->privCloseFd();
2617
+ $this->privCloseFd();
2618
+ @unlink($v_zip_temp_name);
2619
+ return $v_result;
2620
+ }
2621
+ $v_temp_zip->privCloseFd();
2622
+ $this->privCloseFd();
2623
+ @unlink($this->zipname);
2624
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
2625
+ unset($v_temp_zip);
2626
+ }
2627
+ else if ($v_central_dir['entries'] != 0) {
2628
+ $this->privCloseFd();
2629
+ if (($v_result = $this->privOpenFd('wb')) != 1) {
2630
+ return $v_result;
2631
+ }
2632
+ if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) {
2633
+ return $v_result;
2634
+ }
2635
+ $this->privCloseFd();
2636
+ }
2637
+ return $v_result;
2638
+ }
2639
+ function privDirCheck($p_dir, $p_is_dir=false)
2640
+ {
2641
+ $v_result = 1;
2642
+ if (($p_is_dir) && (substr($p_dir, -1)=='/'))
2643
+ {
2644
+ $p_dir = substr($p_dir, 0, strlen($p_dir)-1);
2645
+ }
2646
+ if ((is_dir($p_dir)) || ($p_dir == ""))
2647
+ {
2648
+ return 1;
2649
+ }
2650
+ $p_parent_dir = dirname($p_dir);
2651
+ if ($p_parent_dir != $p_dir)
2652
+ {
2653
+ if ($p_parent_dir != "")
2654
+ {
2655
+ if (($v_result = $this->privDirCheck($p_parent_dir)) != 1)
2656
+ {
2657
+ return $v_result;
2658
+ }
2659
+ }
2660
+ }
2661
+ if (!@mkdir($p_dir, 0777))
2662
+ {
2663
+ PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'");
2664
+ return PclZip::errorCode();
2665
+ }
2666
+ return $v_result;
2667
+ }
2668
+ function privMerge(&$p_archive_to_add)
2669
+ {
2670
+ $v_result=1;
2671
+ if (!is_file($p_archive_to_add->zipname))
2672
+ {
2673
+ $v_result = 1;
2674
+ return $v_result;
2675
+ }
2676
+ if (!is_file($this->zipname))
2677
+ {
2678
+ $v_result = $this->privDuplicate($p_archive_to_add->zipname);
2679
+ return $v_result;
2680
+ }
2681
+ if (($v_result=$this->privOpenFd('rb')) != 1)
2682
+ {
2683
+ return $v_result;
2684
+ }
2685
+ $v_central_dir = array();
2686
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
2687
+ {
2688
+ $this->privCloseFd();
2689
+ return $v_result;
2690
+ }
2691
+ @rewind($this->zip_fd);
2692
+ if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1)
2693
+ {
2694
+ $this->privCloseFd();
2695
+ return $v_result;
2696
+ }
2697
+ $v_central_dir_to_add = array();
2698
+ if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1)
2699
+ {
2700
+ $this->privCloseFd();
2701
+ $p_archive_to_add->privCloseFd();
2702
+ return $v_result;
2703
+ }
2704
+ @rewind($p_archive_to_add->zip_fd);
2705
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
2706
+ if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
2707
+ {
2708
+ $this->privCloseFd();
2709
+ $p_archive_to_add->privCloseFd();
2710
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
2711
+ return PclZip::errorCode();
2712
+ }
2713
+ $v_size = $v_central_dir['offset'];
2714
+ while ($v_size != 0)
2715
+ {
2716
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2717
+ $v_buffer = fread($this->zip_fd, $v_read_size);
2718
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
2719
+ $v_size -= $v_read_size;
2720
+ }
2721
+ $v_size = $v_central_dir_to_add['offset'];
2722
+ while ($v_size != 0)
2723
+ {
2724
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2725
+ $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size);
2726
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
2727
+ $v_size -= $v_read_size;
2728
+ }
2729
+ $v_offset = @ftell($v_zip_temp_fd);
2730
+ $v_size = $v_central_dir['size'];
2731
+ while ($v_size != 0)
2732
+ {
2733
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2734
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
2735
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
2736
+ $v_size -= $v_read_size;
2737
+ }
2738
+ $v_size = $v_central_dir_to_add['size'];
2739
+ while ($v_size != 0)
2740
+ {
2741
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2742
+ $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size);
2743
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
2744
+ $v_size -= $v_read_size;
2745
+ }
2746
+ $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment'];
2747
+ $v_size = @ftell($v_zip_temp_fd)-$v_offset;
2748
+ $v_swap = $this->zip_fd;
2749
+ $this->zip_fd = $v_zip_temp_fd;
2750
+ $v_zip_temp_fd = $v_swap;
2751
+ if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1)
2752
+ {
2753
+ $this->privCloseFd();
2754
+ $p_archive_to_add->privCloseFd();
2755
+ @fclose($v_zip_temp_fd);
2756
+ $this->zip_fd = null;
2757
+ unset($v_header_list);
2758
+ return $v_result;
2759
+ }
2760
+ $v_swap = $this->zip_fd;
2761
+ $this->zip_fd = $v_zip_temp_fd;
2762
+ $v_zip_temp_fd = $v_swap;
2763
+ $this->privCloseFd();
2764
+ $p_archive_to_add->privCloseFd();
2765
+ @fclose($v_zip_temp_fd);
2766
+ @unlink($this->zipname);
2767
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
2768
+ return $v_result;
2769
+ }
2770
+ function privDuplicate($p_archive_filename)
2771
+ {
2772
+ $v_result=1;
2773
+ if (!is_file($p_archive_filename))
2774
+ {
2775
+ $v_result = 1;
2776
+ return $v_result;
2777
+ }
2778
+ if (($v_result=$this->privOpenFd('wb')) != 1)
2779
+ {
2780
+ return $v_result;
2781
+ }
2782
+ if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0)
2783
+ {
2784
+ $this->privCloseFd();
2785
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode');
2786
+ return PclZip::errorCode();
2787
+ }
2788
+ $v_size = filesize($p_archive_filename);
2789
+ while ($v_size != 0)
2790
+ {
2791
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
2792
+ $v_buffer = fread($v_zip_temp_fd, $v_read_size);
2793
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
2794
+ $v_size -= $v_read_size;
2795
+ }
2796
+ $this->privCloseFd();
2797
+ @fclose($v_zip_temp_fd);
2798
+ return $v_result;
2799
+ }
2800
+ function privErrorLog($p_error_code=0, $p_error_string='')
2801
+ {
2802
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
2803
+ PclError($p_error_code, $p_error_string);
2804
+ }
2805
+ else {
2806
+ $this->error_code = $p_error_code;
2807
+ $this->error_string = $p_error_string;
2808
+ }
2809
+ }
2810
+ function privErrorReset()
2811
+ {
2812
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
2813
+ PclErrorReset();
2814
+ }
2815
+ else {
2816
+ $this->error_code = 0;
2817
+ $this->error_string = '';
2818
+ }
2819
+ }
2820
+ function privDisableMagicQuotes()
2821
+ {
2822
+ $v_result=1;
2823
+ if ( (!function_exists("get_magic_quotes_runtime"))
2824
+ || (!function_exists("set_magic_quotes_runtime"))) {
2825
+ return $v_result;
2826
+ }
2827
+ if ($this->magic_quotes_status != -1) {
2828
+ return $v_result;
2829
+ }
2830
+ // ----- Get and memorize the magic_quote value
2831
+ $this->magic_quotes_status = @get_magic_quotes_runtime();
2832
+ // ----- Disable magic_quotes
2833
+ if ($this->magic_quotes_status == 1) {
2834
+ @set_magic_quotes_runtime(0);
2835
+ }
2836
+ return $v_result;
2837
+ }
2838
+ function privSwapBackMagicQuotes()
2839
+ {
2840
+ $v_result=1;
2841
+ if ( (!function_exists("get_magic_quotes_runtime"))
2842
+ || (!function_exists("set_magic_quotes_runtime"))) {
2843
+ return $v_result;
2844
+ }
2845
+ if ($this->magic_quotes_status != -1) {
2846
+ return $v_result;
2847
+ }
2848
+ // ----- Swap back magic_quotes
2849
+ if ($this->magic_quotes_status == 1) {
2850
+ @set_magic_quotes_runtime($this->magic_quotes_status);
2851
+ }
2852
+ return $v_result;
2853
+ }
2854
+ }
2855
+ function PclZipUtilPathReduction($p_dir)
2856
+ {
2857
+ $v_result = "";
2858
+ if ($p_dir != "") {
2859
+ $v_list = explode("/", $p_dir);
2860
+ $v_skip = 0;
2861
+ for ($i=sizeof($v_list)-1; $i>=0; $i--) {
2862
+ if ($v_list[$i] == ".") {
2863
+ }
2864
+ else if ($v_list[$i] == "..") {
2865
+ $v_skip++;
2866
+ }
2867
+ else if ($v_list[$i] == "") {
2868
+ // ----- First '/' i.e. root slash
2869
+ if ($i == 0) {
2870
+ $v_result = "/".$v_result;
2871
+ if ($v_skip > 0) {
2872
+ // ----- It is an invalid path, so the path is not modified
2873
+ // TBC
2874
+ $v_result = $p_dir;
2875
+ $v_skip = 0;
2876
+ }
2877
+ }
2878
+ // ----- Last '/' i.e. indicates a directory
2879
+ else if ($i == (sizeof($v_list)-1)) {
2880
+ $v_result = $v_list[$i];
2881
+ }
2882
+ // ----- Double '/' inside the path
2883
+ else {
2884
+ }
2885
+ }
2886
+ else {
2887
+ // ----- Look for item to skip
2888
+ if ($v_skip > 0) {
2889
+ $v_skip--;
2890
+ }
2891
+ else {
2892
+ $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:"");
2893
+ }
2894
+ }
2895
+ }
2896
+ if ($v_skip > 0) {
2897
+ while ($v_skip > 0) {
2898
+ $v_result = '../'.$v_result;
2899
+ $v_skip--;
2900
+ }
2901
+ }
2902
+ }
2903
+ return $v_result;
2904
+ }
2905
+ function PclZipUtilPathInclusion($p_dir, $p_path)
2906
+ {
2907
+ $v_result = 1;
2908
+ if ( ($p_dir == '.')
2909
+ || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) {
2910
+ $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1);
2911
+ }
2912
+ if ( ($p_path == '.')
2913
+ || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) {
2914
+ $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1);
2915
+ }
2916
+ $v_list_dir = explode("/", $p_dir);
2917
+ $v_list_dir_size = sizeof($v_list_dir);
2918
+ $v_list_path = explode("/", $p_path);
2919
+ $v_list_path_size = sizeof($v_list_path);
2920
+ $i = 0;
2921
+ $j = 0;
2922
+ while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) {
2923
+ if ($v_list_dir[$i] == '') {
2924
+ $i++;
2925
+ continue;
2926
+ }
2927
+ if ($v_list_path[$j] == '') {
2928
+ $j++;
2929
+ continue;
2930
+ }
2931
+ if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) {
2932
+ $v_result = 0;
2933
+ }
2934
+ $i++;
2935
+ $j++;
2936
+ }
2937
+ if ($v_result) {
2938
+ while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++;
2939
+ while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++;
2940
+ if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) {
2941
+ $v_result = 2;
2942
+ }
2943
+ else if ($i < $v_list_dir_size) {
2944
+ $v_result = 0;
2945
+ }
2946
+ }
2947
+ return $v_result;
2948
+ }
2949
+ function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0)
2950
+ {
2951
+ $v_result = 1;
2952
+ if ($p_mode==0)
2953
+ {
2954
+ while ($p_size != 0)
2955
+ {
2956
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
2957
+ $v_buffer = @fread($p_src, $v_read_size);
2958
+ @fwrite($p_dest, $v_buffer, $v_read_size);
2959
+ $p_size -= $v_read_size;
2960
+ }
2961
+ }
2962
+ else if ($p_mode==1)
2963
+ {
2964
+ while ($p_size != 0)
2965
+ {
2966
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
2967
+ $v_buffer = @gzread($p_src, $v_read_size);
2968
+ @fwrite($p_dest, $v_buffer, $v_read_size);
2969
+ $p_size -= $v_read_size;
2970
+ }
2971
+ }
2972
+ else if ($p_mode==2)
2973
+ {
2974
+ while ($p_size != 0)
2975
+ {
2976
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
2977
+ $v_buffer = @fread($p_src, $v_read_size);
2978
+ @gzwrite($p_dest, $v_buffer, $v_read_size);
2979
+ $p_size -= $v_read_size;
2980
+ }
2981
+ }
2982
+ else if ($p_mode==3)
2983
+ {
2984
+ while ($p_size != 0)
2985
+ {
2986
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
2987
+ $v_buffer = @gzread($p_src, $v_read_size);
2988
+ @gzwrite($p_dest, $v_buffer, $v_read_size);
2989
+ $p_size -= $v_read_size;
2990
+ }
2991
+ }
2992
+ return $v_result;
2993
+ }
2994
+ function PclZipUtilRename($p_src, $p_dest)
2995
+ {
2996
+ $v_result = 1;
2997
+ if (!@rename($p_src, $p_dest)) {
2998
+ if (!@copy($p_src, $p_dest)) {
2999
+ $v_result = 0;
3000
+ }
3001
+ else if (!@unlink($p_src)) {
3002
+ $v_result = 0;
3003
+ }
3004
+ }
3005
+ return $v_result;
3006
+ }
3007
+ function PclZipUtilOptionText($p_option)
3008
+ {
3009
+ $v_list = get_defined_constants();
3010
+ for (reset($v_list); $v_key = key($v_list); next($v_list)) {
3011
+ $v_prefix = substr($v_key, 0, 10);
3012
+ if (( ($v_prefix == 'PCLZIP_OPT')
3013
+ || ($v_prefix == 'PCLZIP_CB_')
3014
+ || ($v_prefix == 'PCLZIP_ATT'))
3015
+ && ($v_list[$v_key] == $p_option)) {
3016
+ return $v_key;
3017
+ }
3018
+ }
3019
+ $v_result = 'Unknown';
3020
+ return $v_result;
3021
+ }
3022
+ function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true)
3023
+ {
3024
+ if (stristr(php_uname(), 'windows')) {
3025
+ if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) {
3026
+ $p_path = substr($p_path, $v_position+1);
3027
+ }
3028
+ if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
3029
+ $p_path = strtr($p_path, '\\', '/');
3030
+ }
3031
+ }
3032
+ return $p_path;
3033
+ }
3034
+ ?>
 
 
 
 
 
 
 
 
 
modules/phpseclib/index.html DELETED
@@ -1,10 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head lang="en">
4
- <meta charset="UTF-8">
5
- <title></title>
6
- </head>
7
- <body>
8
-
9
- </body>
10
- </html>
 
 
 
 
 
 
 
 
 
 
modules/restore-class.php CHANGED
@@ -13,23 +13,6 @@ if (!function_exists('dbr_extract_func')) {
13
  }
14
  }
15
 
16
- if (!defined('PCLZIP_SEPARATOR')) {
17
- define('PCLZIP_SEPARATOR', '<|>');
18
- }
19
-
20
- if (!function_exists('dbr_extract_func_targz')) {
21
- function dbr_extract_func_targz($filename)
22
- {
23
- if (stripos($filename, 'wp-config.php') !== false) {
24
- return true;
25
- }
26
- if (stripos($filename, 'dropbox-backup') !== false) {
27
- return true;
28
- }
29
- return false;
30
- }
31
- }
32
-
33
 
34
  if (!class_exists('dbr_gui')) {
35
  class dbr_gui {
@@ -69,7 +52,7 @@ if (!class_exists('dbr_database')) {
69
  self::$db_params = $db_params;
70
  if (isset($pr[1])) {
71
  self::$db_prefix = $pr[1];
72
- }
73
  } else {
74
  self::$db_params = $configs;
75
  $db_params = self::$db_params;
@@ -85,7 +68,7 @@ if (!class_exists('dbr_database')) {
85
  //include ABSPATH . 'wp-config.php';
86
  self::getWpMysqlParams();
87
  if ( !defined('WP_CONTENT_DIR') )
88
- define( 'WP_CONTENT_DIR', ABSPATH_REAL . 'wp-content' );
89
 
90
  if (function_exists('mysqli_connect')) {
91
  self::$is_mysqli = true;
@@ -104,11 +87,11 @@ if (!class_exists('dbr_database')) {
104
  }
105
  } else {
106
  if (self::$is_mysqli) {
107
- self::$connect = mysqli_connect(self::$db_params['host'], self::$db_params['user'], self::$db_params['password']) or die();
108
  mysqli_set_charset(self::$connect, self::$db_params['charset']) or die(mysqli_error());
109
  mysqli_select_db(self::$connect, self::$db_params['db']) or die(mysqli_error());
110
  } else {
111
- self::$connect = @mysql_connect(self::$db_params['host'], self::$db_params['user'], self::$db_params['password']) or die();
112
  mysql_set_charset(self::$db_params['charset'], self::$connect) or die(mysql_error());
113
  mysql_select_db(self::$db_params['db'], self::$connect) or die(mysql_error());
114
  }
@@ -381,274 +364,11 @@ if ( !class_exists('dbr_helper') ) {
381
 
382
  private static $cron_is_work = 90;
383
 
384
- public static function testOtherArchive()
385
- {
386
- dbr_log::log('Testing of TarGz under shell');
387
- $res_tar = self::TarGz( DBP_PATH_TMP . '/test.tar.gz', array(DBP_PATH_TMP .'/index.php', DBP_PATH_TMP .'/.htaccess'), ABSPATH );
388
-
389
- if ($res_tar === true) {
390
- dbr_log::log('Testing of TarGz under shell was finished successfully');
391
- dbr_helper::setCommand('test_targz_c', true);
392
- }
393
- dbr_log::log('Testing of unTarGz under shell');
394
- $res_tar = self::unTarGz( DBP_PATH_TMP . '/test.tar.gz', DBP_PATH_TMP . '/test/' );
395
- if ($res_tar === true) {
396
- dbr_log::log('Testing of unTarGz under shell was finished successfully');
397
- dbr_helper::setCommand('test_targz_c', true);
398
- }
399
-
400
- dbr_log::log('Testing of Zip under shell');
401
- $res_zip = self::Zip( DBP_PATH_TMP . '/test.zip', array(DBP_PATH_TMP .'/index.php', DBP_PATH_TMP .'/.htaccess'), ABSPATH );
402
- if ($res_tar === true) {
403
- dbr_log::log('Testing of ZIP under shell was finished successfully');
404
- dbr_helper::setCommand('test_zip_c', true);
405
- }
406
- }
407
-
408
- public static function getCommandToArchive($file_name, $type = 'zip_archive', $files = array(), $type_action = 'create', $remove_path = '' )
409
- {
410
- $return = '';
411
- $remove_dir = '';
412
- switch($type) {
413
- case 'zip_archive':
414
- if ($type_action == 'create') {
415
- if (!empty( $remove_path ) ) {
416
- $remove_dir = 'cd ' . $remove_path. ' &&';
417
- $files_str = '"' . implode('" "', $files) . '"';
418
- $files_str = str_replace($remove_path, './', $files_str);
419
- $zip = str_replace($remove_path, './', $file_name);
420
- } else {
421
- $files_str = '"' . implode('" "', $files) . '"';
422
- $zip = $file_name;
423
- }
424
- $return .= trim( "$remove_dir zip {$zip} " . $files_str );
425
- } else {
426
- $zip = $file_name;
427
- if (!empty( $remove_path ) ) { // for extract this param of directory to
428
- $remove_dir = 'cd ' . $remove_path . ' &&';
429
- }
430
- $exclude = '';
431
- if ( !empty( $files ) ) { // exclude file
432
- $exclude = ' -x ' . '"' . implode('" "', $files) . '"';
433
- }
434
- $return .= trim( "$remove_dir unzip -o {$zip} $exclude" );
435
- }
436
-
437
- break;
438
- case 'tar_archive':
439
- if ( strpos($file_name, '.zip') !== false ) {
440
- $file_name = str_replace('.zip', '.tar.gz', $file_name);
441
- }
442
-
443
- if (!empty( $remove_path ) ) {
444
- $remove_dir = '-C "' . $remove_path . '" ';
445
- }
446
- if ($type_action == 'create') {
447
- $files_str = '"' . implode('" "', $files) . '"';
448
- $files_str = str_replace($remove_path, './', $files_str);
449
- $u = 'c';
450
- if (file_exists($file_name)) {
451
- $u = 'r';
452
- }
453
- $return = trim( "tar -{$u}zvf {$file_name} " . $remove_dir . $files_str );
454
- } else {
455
-
456
- $return = trim( "tar zxvf \"{$file_name}\" " . $remove_dir );
457
- }
458
- break;
459
- }
460
- return $return;
461
-
462
- }
463
-
464
- public static function parseResultZip($command_return)
465
- {
466
- $add = 0;
467
- $error = 0;
468
- if (!empty( $command_return) ) {
469
- $n = count($command_return);
470
- for($i = 0; $i < $n; $i++) {
471
- if (strpos($command_return[$i], 'add') !== false || strpos($command_return[$i], 'updating') !== false || strpos($command_return[$i], 'inflating') !== false) {
472
- $add ++;
473
- } elseif (strpos($command_return[$i], 'error') !== false || strpos($command_return[$i], 'warning') !== false ) {
474
- $error++;
475
- $this->error .= " " . $command_return[$i];
476
- }
477
- }
478
- }
479
- return array( 'add' => $add, 'error' => $error );
480
-
481
- }
482
-
483
- public static function TarGz($file_name, $files, $delete_foler = '')
484
- {
485
- $command = self::getCommandToArchive($file_name, 'tar_archive', $files, 'create', $delete_foler);
486
- if (!empty($command)) {
487
-
488
- $result_command = @exec($command, $command_return);
489
-
490
- if (count($files) == count($command_return)) {
491
- return true;
492
- }
493
-
494
- if (count($command_return) > 0) {
495
- return true;
496
- }
497
- if (file_exists($file_name)) {
498
- return true;
499
- }
500
- return "Files not adding to arhive";
501
- }
502
-
503
- return false;
504
- }
505
-
506
- public static function unTarGz($file_name, $dir_to)
507
- {
508
- $command = self::getCommandToArchive($file_name, 'tar_archive', array(), 'etract', $dir_to);
509
-
510
- if (!empty($command)) {
511
-
512
- $result_command = @exec($command, $command_return);
513
-
514
- if (count($command_return) > 0) {
515
- return true;
516
- }
517
- if (file_exists($file_name)) {
518
- return true;
519
- }
520
- return "Files not adding to arhive";
521
- }
522
-
523
- return false;
524
- }
525
-
526
- public static function Zip($file_name, $files, $delete_foler = '')
527
- {
528
- $command = self::getCommandToArchive($file_name, 'zip_archive', $files, 'create', $delete_foler);
529
- if (!empty($command)) {
530
- $result_command = @exec($command, $command_return);
531
-
532
- $res = self::parseResultZip($command_return);
533
-
534
- if ($res['add'] == count($files)) {
535
- return true;
536
- }
537
- if ( file_exists( $file_name ) && $res['error'] === 0 ) {
538
- return true;
539
- }
540
- }
541
-
542
- return false;
543
- }
544
-
545
- public static function unZip($file_name, $dir_to, $exclude = array() )
546
- {
547
- $command = self::getCommandToArchive($file_name, 'zip_archive', $exclude, 'extract', $dir_to);
548
- if (!empty($command)) {
549
- $result_command = @exec($command, $command_return);
550
-
551
- $res = self::parseResultZip($command_return);
552
-
553
- if ( $res['error'] === 0 ) {
554
- return true;
555
- }
556
- }
557
-
558
- return false;
559
- }
560
-
561
- public static function check_invalid_utf8( $string, $strip = false )
562
- {
563
- $string = (string) $string;
564
-
565
- if ( 0 === strlen( $string ) ) {
566
- return '';
567
- }
568
- // preg match invalid UTF8
569
- if ( 1 === @preg_match( '/^./us', $string ) ) {
570
- return $string;
571
- }
572
-
573
- if ( $strip && function_exists( 'iconv' ) ) {
574
- return iconv( 'utf-8', 'utf-8', $string );
575
- }
576
-
577
- return '';
578
- }
579
-
580
-
581
- public static function strip_all_tags($string, $remove_breaks = false) {
582
- $string = preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $string );
583
- $string = strip_tags($string);
584
-
585
- if ( $remove_breaks )
586
- $string = preg_replace('/[\r\n\t ]+/', ' ', $string);
587
-
588
- return trim( $string );
589
- }
590
-
591
- public static function less_than( $text ) {
592
- return preg_replace_callback('%<[^>]*?((?=<)|>|$)%', array('dbr_helper', 'less_than_callback'), $text);
593
- }
594
-
595
- public static function less_than_callback( $matches ) {
596
- if ( false === strpos($matches[0], '>') )
597
- return self::to_html($matches[0]);
598
- return $matches[0];
599
- }
600
-
601
- public static function to_html($string, $quote_style = ENT_NOQUOTES)
602
- {
603
- $string = (string) $string;
604
-
605
- if ( 0 === strlen( $string ) )
606
- return '';
607
-
608
- if ( ! preg_match( '/[&<>"\']/', $string ) )
609
- return $string;
610
-
611
- if ( empty( $quote_style ) )
612
- $quote_style = ENT_NOQUOTES;
613
- elseif ( ! in_array( $quote_style, array( 0, 2, 3, 'single', 'double' ), true ) )
614
- $quote_style = ENT_QUOTES;
615
-
616
- $charset = 'UTF-8';
617
-
618
- $string = @htmlspecialchars( $string, $quote_style, $charset, $double_encode );
619
-
620
- if ( 'single' === $_quote_style )
621
- $string = str_replace( "'", '&#039;', $string );
622
-
623
- return $string;
624
- }
625
-
626
- public static function sanitize($str, $is_newlines = false)
627
- {
628
- $filter = self::check_invalid_utf8( $str );
629
- if ( strpos($filter, '<') !== false ) {
630
- $filter = self::less_than( $filter );
631
- $filter = self::strip_all_tags( $filter, false );
632
- $filter = str_replace("<\n", "&lt;\n", $filter);
633
- }
634
-
635
- if ( !$is_newlines ) {
636
- $filter = preg_replace( '/[\r\n\t ]+/', ' ', $filter );
637
- }
638
- $filter = trim( $filter );
639
-
640
- return $filter;
641
-
642
- }
643
-
644
  public static function modSecureInstalled()
645
  {
646
- $contents = '';
647
- if (defined('INFO_MODULES') && function_exists('phpinfo')) {
648
- ob_start();
649
- @phpinfo(INFO_MODULES);
650
- $contents = ob_get_clean();
651
- }
652
  return strpos($contents, 'mod_security') !== false;
653
  }
654
 
@@ -709,7 +429,7 @@ if ( !class_exists('dbr_helper') ) {
709
  if (isset($site_url['option_value'])) {
710
  $name_running_backup = str_replace("http://", '', $site_url['option_value']);
711
  $name_running_backup = str_replace("https://", '', $name_running_backup);
712
- $name_running_backup = preg_replace("|\W|", "_", trim($name_running_backup, '/') );
713
  }
714
  return $name_running_backup;
715
  }
@@ -722,47 +442,18 @@ if ( !class_exists('dbr_helper') ) {
722
  @unlink(DBP_PATH_TMP . '/' . $file);
723
  }
724
  }
725
- self::createDefaultFiles(DBP_PATH_TMP);
726
  // @rmdir(DBP_PATH_TMP);
727
  }
728
  }
729
 
730
- public static function createDefaultFiles($dir)
731
- {
732
- if (!file_exists($dir . '/index.php')) {
733
- @file_put_contents($dir . '/index.php', '<?php echo "Hello World!"; ');
734
- if ( !is_writable($dir . '/index.php') ) {
735
- return str_replace("&s", $dir . '/index.php' , 'Backup creating<br /><br />Please check the permissions on file "&s". Failed to create file.' );
736
- }
737
- }
738
- if (!file_exists($dir . '/.htaccess')) {
739
- @file_put_contents($dir . '/.htaccess', 'DENY FROM ALL');
740
- }
741
- return true;
742
- }
743
-
744
-
745
- public static function unpack_setting($str)
746
- {
747
- return unserialize( base64_decode( $str ) );
748
- }
749
-
750
- public static function pack_setting($str)
751
- {
752
- return base64_encode( serialize( $str ) );
753
- }
754
-
755
  public static function pack($data)
756
  {
757
- if (defined('JSON_HEX_TAG') && defined('JSON_HEX_QUOT') && defined('JSON_HEX_AMP') && defined('JSON_HEX_APOS') ) {
758
- return base64_encode( json_encode ( $data, JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS ) ) ;
759
- }
760
- return base64_encode( json_encode ( $data ) ) ;
761
  }
762
 
763
  public static function unpack($data)
764
  {
765
- return json_decode( base64_decode( $data ), true );
766
  }
767
 
768
  public static function mkdir($path)
@@ -879,8 +570,6 @@ if ( !class_exists('dbr_core') ) {
879
  }
880
  }
881
 
882
-
883
-
884
  if ( !class_exists('dbr_methods') ) {
885
  class dbr_methods{
886
 
@@ -902,11 +591,6 @@ if ( !class_exists('dbr_methods') ) {
902
  $json['data'] = dbr_helper::getCommand('result-restore');
903
  }
904
  }
905
-
906
- $mod_security = dbr_helper::getCommand('mod_security');
907
- if ($mod_security) {
908
- $json['mod_secur'] = true;
909
- }
910
  echo json_encode ( $json );
911
  exit;
912
  }
@@ -923,10 +607,10 @@ if ( !class_exists('dbr_methods') ) {
923
 
924
  $setting = dbr_database::db_get('options', array('option_value'), array('option_name' => 'wpadm_backup_dropbox-setting'), 1);
925
  if (isset($setting['option_value'] )) {
926
- $this->main = dbr_helper::unpack_setting( $setting['option_value'] );
927
  }
928
 
929
- $backup_dir = WP_CONTENT_DIR . '/' . DROPBOX_BACKUP_DIR_NAME;
930
  if (isset($this->main['backup_folder']) && !empty($this->main['backup_folder'])) {
931
  $backup_dir = $this->main['backup_folder'];
932
  }
@@ -988,30 +672,16 @@ if ( !class_exists('dbr_methods') ) {
988
  $arr_sql = dbr_helper::getCommand('sql-restore');
989
  if ( !isset( $arr_sql[md5($sql)] ) || $arr_sql === false ) {
990
  $ress = dbr_database::query( $sql );
991
- dbr_helper::is_work(time(), 'start');
992
- if (stripos($sql, 'create') !== false) {
993
- preg_match("/CREATE[\s]{1,}TABLE[\s]{1,}`(.*)`/iUu", $sql, $table_insert) ;
994
- if (isset($table_insert[1]) && !empty($table_insert[1])) {
995
- dbr_log::log('Restore table `' . $table_insert[1] . '`');
996
- }
997
- }
998
-
999
- if (isset($ress) && ( $ress === false || !empty( dbr_database::$error ) ) ) {
1000
- if (stripos(dbr_database::$error, 'duplicate entry') === false) {
1001
- dbr_helper::setError('MySQL Error: ' . dbr_database::$error . ' sql: ' . $sql );
1002
- break;
1003
- }
1004
- }
1005
  $arr_sql[md5($sql)] = 1;
1006
  dbr_helper::setCommand('sql-restore', $arr_sql);
1007
  }
1008
  }
1009
  if (isset($ress) && ( $ress === false || !empty( dbr_database::$error ) ) ) {
1010
  if (stripos(dbr_database::$error, 'duplicate entry') === false) {
1011
- dbr_helper::setError('MySQL Error: ' . dbr_database::$error . ' sql: ' . $sql );
1012
  break;
1013
  }
1014
- }
1015
  $sql = "";
1016
  }
1017
  }
@@ -1038,10 +708,6 @@ if ( !class_exists('dbr_methods') ) {
1038
  if(strpos($d, ".zip") !== false) {
1039
  $this->files_resotre[$d] = $this->dir_backup . "/$d";
1040
  }
1041
- if(substr($d, -7) == '.tar.gz') {
1042
- $this->files_resotre[$d] = $this->dir_backup . "/$d";
1043
- dbr_helper::setCommand('targz', true);
1044
- }
1045
  if(strpos($d, ".md5") !== false) {
1046
  $file_md5 = $this->dir_backup . "/$d";
1047
  }
@@ -1069,66 +735,9 @@ if ( !class_exists('dbr_methods') ) {
1069
 
1070
  }
1071
 
1072
- private function reconfig()
1073
- {
1074
-
1075
- dbr_helper::is_work(time(), 'start');
1076
- if ( dbr_helper::is_writable(ABSPATH . 'wp-config.php') === false) {
1077
- dbr_helper::setError( "File 'wp-config.php' is not writable" );
1078
- }
1079
- $db_params = array(
1080
- 'password' => 'DB_PASSWORD',
1081
- 'db' => 'DB_NAME',
1082
- 'user' => 'DB_USER',
1083
- 'host' => 'DB_HOST',
1084
- 'charset' => 'DB_CHARSET',
1085
- );
1086
-
1087
- $r = "/define\([\s]{0,}['\"]{1}(.*)['\"]{1}[\s]{0,},[\s]{0,}['\"]{1}(.*)['\"]{1}[\s]{0,}\)/";
1088
- $config = @file_get_contents(ABSPATH . "wp-config.php");
1089
- preg_match_all($r, $config, $m);
1090
- $params = array_combine( $m[1], $m[2] );
1091
- $change_config = false;
1092
- foreach($db_params as $k => $p) {
1093
- $db_params[$k] = $params[$p];
1094
- if (dbr_database::$db_params[$k] != $db_params[$k]) {
1095
- $change_config = true;
1096
- }
1097
- }
1098
- dbr_helper::is_work(time(), 'start');
1099
- if ($change_config) {
1100
- dbr_log::log('Configure file "wp-config.php" was started');
1101
- $patterns = array();
1102
- $patterns[0] = "/define[\s]{0,}\([\s]{0,}'DB_PASSWORD'[\s]{0,},[\s]{0,}'(.*)'[\s]{0,}\)/";
1103
- $patterns[1] = "/define[\s]{0,}\([\s]{0,}'DB_NAME'[\s]{0,},[\s]{0,}'(.*)'[\s]{0,}\)/";
1104
- $patterns[2] = "/define[\s]{0,}\([\s]{0,}'DB_USER'[\s]{0,},[\s]{0,}'(.*)'[\s]{0,}\)/";
1105
- $patterns[3] = "/define[\s]{0,}\([\s]{0,}'DB_HOST'[\s]{0,},[\s]{0,}'(.*)'[\s]{0,}\)/";
1106
- $patterns[4] = "/define[\s]{0,}\([\s]{0,}'DB_CHARSET'[\s]{0,},[\s]{0,}'(.*)'[\s]{0,}\)/";
1107
-
1108
- $replacements = array();
1109
- $replacements[0] = "define('DB_PASSWORD', '" . dbr_database::$db_params['password'] . "')";
1110
- $replacements[1] = "define('DB_NAME', '" . dbr_database::$db_params['db'] . "')";
1111
- $replacements[2] = "define('DB_USER', '" . dbr_database::$db_params['user'] . "')";
1112
- $replacements[3] = "define('DB_HOST', '" . dbr_database::$db_params['host'] . "')";
1113
- $replacements[4] = "define('DB_CHARSET', '" . dbr_database::$db_params['charset'] . "')";
1114
-
1115
- $config = preg_replace($patterns, $replacements, $config);
1116
-
1117
- //$config = preg_replace("/table_prefix[\s]{0,}=[\s]{0,}[\"']{1}(.*)[\"']{1}/U", "table_prefix = '" . dbr_database::$db_prefix . "'", $config);
1118
-
1119
- $write = @file_put_contents(ABSPATH . "wp-config.php", $config);
1120
-
1121
- dbr_helper::is_work(time(), 'start');
1122
- if (!$write) {
1123
- dbr_helper::setError( "File 'wp-config.php' is not writable" );
1124
- }
1125
- dbr_log::log('Configure file "wp-config.php" was successfully');
1126
- }
1127
- }
1128
-
1129
  private function restoreFiles()
1130
  {
1131
-
1132
  $files = dbr_helper::getCommand('files-list-retore');
1133
  if ($files) {
1134
  dbr_helper::is_work(time(), 'start');
@@ -1169,31 +778,12 @@ if ( !class_exists('dbr_methods') ) {
1169
  dbr_helper::setCommand('zip-config', null);
1170
  }
1171
  }
1172
- $tar_gz = dbr_helper::getCommand('targz');
1173
- if (!$tar_gz) {
1174
- include 'pclzip.lib.php';
1175
- }
1176
  foreach($files as $f => $file) {
1177
  $extract_files = dbr_helper::getCommand('extract-files-restore');
1178
  if (!isset($extract_files[$f])) {
1179
  dbr_log::log('Data will be decompressed of ' . basename($file));
1180
  if (strpos($f, '.zip')) {
1181
  if (file_exists($file) && filesize($file) > 0) {
1182
- $test_zip = dbr_helper::getCommand('test_zip_c');
1183
- if ($test_zip) {
1184
- $unzip = dbr_helper::unZip($file, ABSPATH_REAL, array('wp-content/plugins/dropbox-backup/*', 'wp-content/plugins/dropbox-backup-pro/*') );
1185
- if ($unzip) {
1186
- if ($zip_config && strpos($file, $zip_config[2]) !== false) {
1187
- $this->reconfig();
1188
- }
1189
- $extract_files[$f] = true;
1190
- dbr_helper::setCommand('extract-files-restore', $extract_files);
1191
- continue;
1192
- } else {
1193
- dbr_log::log('Data will be decompressed of ' . basename($file) . ' wasn\'t successful. Try other method "PclZip"');
1194
- dbr_helper::setCommand('test_zip_c', false);
1195
- }
1196
- }
1197
  $archive = new PclZip($file);
1198
  $unzip = $archive->extract(
1199
  PCLZIP_CB_PRE_EXTRACT, 'dbr_extract_func',
@@ -1216,7 +806,52 @@ if ( !class_exists('dbr_methods') ) {
1216
  if ($unzip == 0) {
1217
  dbr_helper::setError("Error during extracting of database config from archive: " . $archive->errorInfo(true) );
1218
  }
1219
- $this->reconfig();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1220
  }
1221
  if ($zip_database && strpos($file, $zip_database[2]) !== false) {
1222
  $archive = new PclZip($file);
@@ -1234,57 +869,6 @@ if ( !class_exists('dbr_methods') ) {
1234
  } else {
1235
  dbr_helper::setError('File (' . $file . ') for restoring wasn\'t found or file size is 0 byte');
1236
  }
1237
- } elseif ($tar_gz) {
1238
- if (file_exists($file) && filesize($file) > 0) {
1239
- $test_targz = dbr_helper::getCommand('test_targz_c');
1240
- if ($test_targz) {
1241
- $untargz = dbr_helper::unTarGz($file, rtrim( ABSPATH_REAL , '/'), array('wp-content/plugins/dropbox-backup/*', 'wp-content/plugins/dropbox-backup-pro/*') );
1242
- if ($untargz) {
1243
- if ($zip_config && strpos($file, $zip_config[2]) !== false) {
1244
- $this->reconfig();
1245
- }
1246
- $extract_files[$f] = true;
1247
- dbr_helper::setCommand('extract-files-restore', $extract_files);
1248
- continue;
1249
- } else {
1250
- dbr_log::log('Data will be decompressed of ' . basename($file) . ' wasn\'t successful. Try other method "PHP tar class"');
1251
- dbr_helper::setCommand('test_targz_c', false);
1252
- }
1253
- }
1254
- include_once 'archive.php' ;
1255
- dbr_helper::is_work(time(), 'start');
1256
- $gz = new wpadm_gzip_file($file);
1257
- $gz->set_options(array( 'overwrite' => 1, 'basedir' => ABSPATH ) );
1258
- $gz->exclude = 'dbr_extract_func_targz';
1259
- $gz->extract_gz_files();
1260
- dbr_helper::is_work(time(), 'start');
1261
- if (!empty( $gz->warning ) ) {
1262
- foreach($gz->warning as $warning) {
1263
- dbr_log::log($warning);
1264
- }
1265
- }
1266
- if (!empty($gz->error)) {
1267
- dbr_helper::setError( implode("\n", $gz->error) );
1268
- }
1269
- unset($gz);
1270
- if ($zip_config && strpos($file, $zip_config[2]) !== false) {
1271
- dbr_helper::is_work(time(), 'start');
1272
- if ( dbr_helper::is_writable(ABSPATH . 'wp-config.php') === false) {
1273
- dbr_helper::setError( "File 'wp-config.php' is not writable" );
1274
- }
1275
- $gz = new wpadm_gzip_file($file);
1276
- $gz->set_options(array( 'overwrite' => 1, 'basedir' => ABSPATH ) );
1277
-
1278
- $gz->include_files("/wp-config\.php/");
1279
- dbr_helper::is_work(time(), 'start');
1280
- $gz->extract_gz_files();
1281
- dbr_helper::is_work(time(), 'start');
1282
-
1283
- $this->reconfig();
1284
- }
1285
- $extract_files[$f] = true;
1286
- dbr_helper::setCommand('extract-files-restore', $extract_files);
1287
- }
1288
  }
1289
  }
1290
  }
@@ -1303,7 +887,7 @@ if ( !class_exists('dbr_methods') ) {
1303
  include "dropbox.class.php";
1304
  $setting = dbr_database::db_get('options', array('option_value'), array('option_name' => 'wpadm_backup_dropbox-setting'), 1);
1305
  if (isset($setting['option_value'] )) {
1306
- $this->main = dbr_helper::unpack_setting( $setting['option_value'] );
1307
  }
1308
  if (!empty($this->main)) {
1309
  if (isset($this->main['app_key']) && isset($this->main['app_secret']) && isset($this->main['auth_token_secret'])) {
@@ -1318,9 +902,6 @@ if ( !class_exists('dbr_methods') ) {
1318
  if ($file_list === false) {
1319
  dbr_log::log('Getting list of files from Dropbox');
1320
  $files = $dropbox->listing("$folder_project/$name_backup");
1321
- if (isset($files['error']) ) {
1322
- dbr_helper::setError('Dropbox answered: ' . $files['text']);
1323
- }
1324
  dbr_helper::setCommand('download-with-dropbox-restore', $files, 'file-list');
1325
  dbr_helper::is_work(time(), 'start');
1326
  } else {
@@ -1350,7 +931,7 @@ if ( !class_exists('dbr_methods') ) {
1350
  }
1351
  $md5 = glob($this->dir_backup . '/*.md5');
1352
  if (count( $md5 ) == 0) {
1353
- dbr_helper::setError( "File list from MD5 file wasn't loaded. Please, check folder and file access permissions " . $this->dir_backup . " and MD5 file in this folder with file access permissions");
1354
  }
1355
  dbr_helper::setCommand('download-with-dropbox-restore', true, 'success');
1356
  return true;
@@ -1373,18 +954,6 @@ if (!class_exists('dbr_route')) {
1373
  if (!defined('ABSPATH')) {
1374
  define('ABSPATH', dirname(__FILE__) . '/../../../../');
1375
  }
1376
- if (!defined('ABSPATH_REAL')) {
1377
- $dir = dirname(__FILE__);
1378
- $dir = str_replace("\\", '/', $dir);
1379
- $dir_arr = explode("/", $dir);
1380
- for($i = 0; $i < 4; $i++) {
1381
- array_pop($dir_arr);
1382
- }
1383
- $dir = implode('/', $dir_arr) . '/';
1384
-
1385
- define('ABSPATH_REAL', $dir );
1386
- }
1387
-
1388
  if (!defined('DBP_PATH')) {
1389
  define('DBP_PATH', dirname(__FILE__) . '/../');
1390
  }
@@ -1405,39 +974,34 @@ if (!class_exists('dbr_route')) {
1405
 
1406
  function __construct()
1407
  {
1408
- @set_time_limit(0);
1409
- if (function_exists('set_error_handler')) {
1410
- set_error_handler(array($this, 'error_handler') );
1411
- }
1412
  if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
1413
- if ( !isset($_POST['name']) ) {
1414
  $this->parsMethod();
1415
- } elseif( isset($_POST['name'] ) ) {
1416
- try {
1417
- dbr_helper::clearTMP();
1418
- dbr_helper::testOtherArchive();
1419
- dbr_database::inc_wp_config();
1420
- $setting = dbr_database::db_get('options', array('option_value'), array('option_name' => 'wpadm_backup_dropbox-setting'), 1);
1421
- if (isset($setting['option_value'])) {
1422
- $this->setting = dbr_helper::unpack_setting( $setting['option_value'] );
1423
- }
1424
- $this->setting['restore-key'] = md5( time() . microtime() . __FILE__);
1425
- include 'constant.php';
1426
- $plugin = $this->parsePlugin('/dropbox-backup');
1427
- $plugin_name = 'dropbox-backup';
1428
- $version = '1.0';
1429
- if (isset($plugin['/dropbox-backup']['Version'])) {
1430
- $version = $plugin['/dropbox-backup']['Version'];
1431
- } else{
1432
- $plugin = $this->parsePlugin('/dropbox-backup-pro');
1433
- if (isset($plugin['/dropbox-backup-pro']['Version'])) {
1434
- $version = $plugin['/dropbox-backup-pro']['Version'];
1435
- $plugin_name = 'dropbox-backup-pro';
1436
- }
1437
- }
1438
- $data = array('actApi' => 'setPluginCode', $plugin_name . '_request' => array('action' => 'restore', 'site' => SITE_HOME, 'pl' => $plugin_name, 'key' => $this->setting['restore-key'], 'pl_v' => $version, ) );
1439
- $res = dbr_api::post(WPADM_URL_BASE . 'api/', $data);
1440
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1441
  if ( !empty( $res['res'] ) ) {
1442
  $result = json_decode($res['res'], true);
1443
  if (isset($result['code'])) {
@@ -1458,20 +1022,12 @@ if (!class_exists('dbr_route')) {
1458
 
1459
  }
1460
  }
1461
- if ( isset($setting['option_value']) ) {
1462
- dbr_database::db_update('options', array('option_value' => dbr_helper::pack_setting( $this->setting ) ), array('option_name' => 'wpadm_backup_dropbox-setting') ) ;
1463
- }
1464
- dbr_helper::setCommand('restore-backup', array('name' => dbr_helper::sanitize( @$_POST['name'] ), 'action' => dbr_helper::sanitize( @$_POST['action'] ), 'key' => dbr_helper::sanitize( @$_POST['key'] ) ) ); // verify and sanitize post data
1465
- dbr_helper::setCommand('settings-plugin', $this->setting );
1466
- $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
1467
- if (isset($this->setting['backup_folder']) && !empty($this->setting['backup_folder'])) {
1468
- $backup_dir = $this->setting['backup_folder'];
1469
- }
1470
- dbr_helper::setCommand('backup-folder', $backup_dir );
1471
  echo json_encode(array('result' => 'work'));
1472
  } catch(Exception $e) {
1473
  dbr_log::log($e->getMessage());
1474
- dbr_helper::setCommand('result-restore', array('name' => dbr_helper::sanitize( $_POST['name'] ), 'result' => 'error', 'message' => $e->getMessage() ) ); // verify and sanitize post data
1475
  }
1476
  }
1477
  }
@@ -1481,21 +1037,24 @@ if (!class_exists('dbr_route')) {
1481
  private function parsMethod()
1482
  {
1483
  if ( isset($_POST['method']) ) {
1484
- $this->setting_restore = dbr_helper::getCommand('restore-backup');
1485
  try {
1486
  dbr_helper::mkdir(DBP_PATH_TMP);
1487
  if (!dbr_helper::is_work() || in_array($_POST['method'], $this->method_access ) ) {
1488
  if (isset($_POST['key'])) {
1489
-
1490
- $backup_dir = dbr_helper::getCommand('backup-folder');
1491
- $this->setting = dbr_helper::getCommand('settings-plugin');
1492
-
 
 
 
 
1493
  if (file_exists($backup_dir . '/local-key')) {
1494
- $key_values = dbr_helper::unpack_setting( @file_get_contents($backup_dir . '/local-key') );
1495
  }
1496
- if ($_POST['key'] == @$this->setting['restore-key'] || ( isset($key_values['key']) && $_POST['key'] == $key_values['key'] ) ) {
1497
  $methods = new dbr_methods();
1498
- $method = dbr_helper::sanitize( $_POST['method'] ) . '_method';
1499
  if (method_exists($methods, $method)) {
1500
  if ($_POST['method'] != 'wpadm_logs') {
1501
  if (file_exists(DBP_PATH_TMP . '/result-restore')) {
@@ -1520,24 +1079,12 @@ if (!class_exists('dbr_route')) {
1520
 
1521
  if (stripos($res_api['res'], 'mod_security') !== false || dbr_helper::modSecureInstalled() ) {
1522
  dbr_helper::is_work(time(), 'start');
1523
- //dbr_helper::setError('Apache module \'mod_security\' is active and affected on your website. For successfully restoring of website please switch it temporary off.');
1524
-
1525
- dbr_helper::setCommand('mod_security', true);
1526
  }
1527
  }
1528
  } else {
1529
  dbr_helper::is_work(time(), 'start');
1530
  }
1531
- if ($_POST['method'] != 'wpadm_logs') {
1532
- dbr_database::inc_wp_config();
1533
- include 'constant.php';
1534
- $setting = dbr_database::db_get('options', array('option_value'), array('option_name' => 'wpadm_backup_dropbox-setting'), 1);
1535
- $this->setting = dbr_helper::unpack_setting( $setting['option_value'] );
1536
- $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
1537
- if (isset($this->setting['backup_folder']) && !empty($this->setting['backup_folder'])) {
1538
- $backup_dir = $this->setting['backup_folder'];
1539
- }
1540
- }
1541
  $methods->$method();
1542
  if (!isset($_POST['type-backup'])) {
1543
  dbr_helper::is_work(time(), 'finish');
@@ -1560,18 +1107,8 @@ if (!class_exists('dbr_route')) {
1560
  }
1561
 
1562
 
1563
- function error_handler($errno, $errstr, $errfile, $errline, array $errcontext)
1564
- {
1565
- // error was suppressed with the @-operator
1566
- if (0 === error_reporting()) {
1567
- return false;
1568
- }
1569
- if (!(error_reporting() & $errno)) {
1570
- return false;
1571
- }
1572
 
1573
- throw new Exception($errstr . ' file ' . $errfile . ' line ' . $errline, $errno);
1574
- }
1575
  /**
1576
  * json encode
1577
  *
@@ -1615,4 +1152,4 @@ if (!class_exists('dbr_route')) {
1615
  }
1616
 
1617
  new dbr_route();
1618
- }
13
  }
14
  }
15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  if (!class_exists('dbr_gui')) {
18
  class dbr_gui {
52
  self::$db_params = $db_params;
53
  if (isset($pr[1])) {
54
  self::$db_prefix = $pr[1];
55
+ }
56
  } else {
57
  self::$db_params = $configs;
58
  $db_params = self::$db_params;
68
  //include ABSPATH . 'wp-config.php';
69
  self::getWpMysqlParams();
70
  if ( !defined('WP_CONTENT_DIR') )
71
+ define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
72
 
73
  if (function_exists('mysqli_connect')) {
74
  self::$is_mysqli = true;
87
  }
88
  } else {
89
  if (self::$is_mysqli) {
90
+ self::$connect = mysqli_connect(self::$db_params['host'], self::$db_params['user'], self::$db_params['password']) or die(mysqli_error());
91
  mysqli_set_charset(self::$connect, self::$db_params['charset']) or die(mysqli_error());
92
  mysqli_select_db(self::$connect, self::$db_params['db']) or die(mysqli_error());
93
  } else {
94
+ self::$connect = @mysql_connect(self::$db_params['host'], self::$db_params['user'], self::$db_params['password']) or die(mysql_error());
95
  mysql_set_charset(self::$db_params['charset'], self::$connect) or die(mysql_error());
96
  mysql_select_db(self::$db_params['db'], self::$connect) or die(mysql_error());
97
  }
364
 
365
  private static $cron_is_work = 90;
366
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
367
  public static function modSecureInstalled()
368
  {
369
+ ob_start();
370
+ phpinfo(INFO_MODULES);
371
+ $contents = ob_get_clean();
 
 
 
372
  return strpos($contents, 'mod_security') !== false;
373
  }
374
 
429
  if (isset($site_url['option_value'])) {
430
  $name_running_backup = str_replace("http://", '', $site_url['option_value']);
431
  $name_running_backup = str_replace("https://", '', $name_running_backup);
432
+ $name_running_backup = preg_replace("|\W|", "_", $name_running_backup);
433
  }
434
  return $name_running_backup;
435
  }
442
  @unlink(DBP_PATH_TMP . '/' . $file);
443
  }
444
  }
 
445
  // @rmdir(DBP_PATH_TMP);
446
  }
447
  }
448
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
449
  public static function pack($data)
450
  {
451
+ return base64_encode( serialize( $data ) );
 
 
 
452
  }
453
 
454
  public static function unpack($data)
455
  {
456
+ return unserialize( base64_decode( $data ) );
457
  }
458
 
459
  public static function mkdir($path)
570
  }
571
  }
572
 
 
 
573
  if ( !class_exists('dbr_methods') ) {
574
  class dbr_methods{
575
 
591
  $json['data'] = dbr_helper::getCommand('result-restore');
592
  }
593
  }
 
 
 
 
 
594
  echo json_encode ( $json );
595
  exit;
596
  }
607
 
608
  $setting = dbr_database::db_get('options', array('option_value'), array('option_name' => 'wpadm_backup_dropbox-setting'), 1);
609
  if (isset($setting['option_value'] )) {
610
+ $this->main = dbr_helper::unpack( $setting['option_value'] );
611
  }
612
 
613
+ $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
614
  if (isset($this->main['backup_folder']) && !empty($this->main['backup_folder'])) {
615
  $backup_dir = $this->main['backup_folder'];
616
  }
672
  $arr_sql = dbr_helper::getCommand('sql-restore');
673
  if ( !isset( $arr_sql[md5($sql)] ) || $arr_sql === false ) {
674
  $ress = dbr_database::query( $sql );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
675
  $arr_sql[md5($sql)] = 1;
676
  dbr_helper::setCommand('sql-restore', $arr_sql);
677
  }
678
  }
679
  if (isset($ress) && ( $ress === false || !empty( dbr_database::$error ) ) ) {
680
  if (stripos(dbr_database::$error, 'duplicate entry') === false) {
681
+ dbr_helper::setError('MySQL Error: ' . dbr_database::$error );
682
  break;
683
  }
684
+ };
685
  $sql = "";
686
  }
687
  }
708
  if(strpos($d, ".zip") !== false) {
709
  $this->files_resotre[$d] = $this->dir_backup . "/$d";
710
  }
 
 
 
 
711
  if(strpos($d, ".md5") !== false) {
712
  $file_md5 = $this->dir_backup . "/$d";
713
  }
735
 
736
  }
737
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
738
  private function restoreFiles()
739
  {
740
+ include 'pclzip.lib.php';
741
  $files = dbr_helper::getCommand('files-list-retore');
742
  if ($files) {
743
  dbr_helper::is_work(time(), 'start');
778
  dbr_helper::setCommand('zip-config', null);
779
  }
780
  }
 
 
 
 
781
  foreach($files as $f => $file) {
782
  $extract_files = dbr_helper::getCommand('extract-files-restore');
783
  if (!isset($extract_files[$f])) {
784
  dbr_log::log('Data will be decompressed of ' . basename($file));
785
  if (strpos($f, '.zip')) {
786
  if (file_exists($file) && filesize($file) > 0) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
787
  $archive = new PclZip($file);
788
  $unzip = $archive->extract(
789
  PCLZIP_CB_PRE_EXTRACT, 'dbr_extract_func',
806
  if ($unzip == 0) {
807
  dbr_helper::setError("Error during extracting of database config from archive: " . $archive->errorInfo(true) );
808
  }
809
+ $db_params = array(
810
+ 'password' => 'DB_PASSWORD',
811
+ 'db' => 'DB_NAME',
812
+ 'user' => 'DB_USER',
813
+ 'host' => 'DB_HOST',
814
+ 'charset' => 'DB_CHARSET',
815
+ );
816
+
817
+ $r = "/define\([\s]{0,}['\"]{1}(.*)['\"]{1}[\s]{0,},[\s]{0,}['\"]{1}(.*)['\"]{1}[\s]{0,}\)/";
818
+ $config = @file_get_contents(ABSPATH . "wp-config.php");
819
+ preg_match_all($r, $config, $m);
820
+ $params = array_combine( $m[1], $m[2] );
821
+ $change_config = false;
822
+ foreach($db_params as $k => $p) {
823
+ $db_params[$k] = $params[$p];
824
+ if (dbr_database::$db_params[$k] != $db_params[$k]) {
825
+ $change_config = true;
826
+ }
827
+ }
828
+ if ($change_config) {
829
+ dbr_log::log('Configure file "wp-config.php" was started');
830
+ $patterns = array();
831
+ $patterns[0] = "/define\('DB_PASSWORD', '(.*)'\)/";
832
+ $patterns[1] = "/define\('DB_NAME', '(.*)'\)/";
833
+ $patterns[2] = "/define\('DB_USER', '(.*)'\)/";
834
+ $patterns[3] = "/define\('DB_HOST', '(.*)'\)/";
835
+ $patterns[4] = "/define\('DB_CHARSET', '(.*)'\)/";
836
+
837
+ $replacements = array();
838
+ $replacements[0] = "define('DB_PASSWORD', '" . dbr_database::$db_params['password'] . "')";
839
+ $replacements[1] = "define('DB_NAME', '" . dbr_database::$db_params['db'] . "')";
840
+ $replacements[2] = "define('DB_USER', '" . dbr_database::$db_params['user'] . "')";
841
+ $replacements[3] = "define('DB_HOST', '" . dbr_database::$db_params['host'] . "')";
842
+ $replacements[4] = "define('DB_CHARSET', '" . dbr_database::$db_params['charset'] . "')";
843
+
844
+ $config = preg_replace($patterns, $replacements, $config);
845
+
846
+ $config = preg_replace("/table_prefix[\s]{0,}=[\s]{0,}[\"']{1}(.*)[\"']{1}/U", "table_prefix = '" . dbr_database::$db_prefix . "'", $config);
847
+
848
+ $write = @file_put_contents(ABSPATH . "wp-config.php", $config);
849
+
850
+ if (!$write) {
851
+ dbr_helper::setError( "File 'wp-config.php' is not writable" );
852
+ }
853
+ dbr_log::log('Configure file "wp-config.php" was successfully');
854
+ }
855
  }
856
  if ($zip_database && strpos($file, $zip_database[2]) !== false) {
857
  $archive = new PclZip($file);
869
  } else {
870
  dbr_helper::setError('File (' . $file . ') for restoring wasn\'t found or file size is 0 byte');
871
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
872
  }
873
  }
874
  }
887
  include "dropbox.class.php";
888
  $setting = dbr_database::db_get('options', array('option_value'), array('option_name' => 'wpadm_backup_dropbox-setting'), 1);
889
  if (isset($setting['option_value'] )) {
890
+ $this->main = dbr_helper::unpack( $setting['option_value'] );
891
  }
892
  if (!empty($this->main)) {
893
  if (isset($this->main['app_key']) && isset($this->main['app_secret']) && isset($this->main['auth_token_secret'])) {
902
  if ($file_list === false) {
903
  dbr_log::log('Getting list of files from Dropbox');
904
  $files = $dropbox->listing("$folder_project/$name_backup");
 
 
 
905
  dbr_helper::setCommand('download-with-dropbox-restore', $files, 'file-list');
906
  dbr_helper::is_work(time(), 'start');
907
  } else {
931
  }
932
  $md5 = glob($this->dir_backup . '/*.md5');
933
  if (count( $md5 ) == 0) {
934
+ dbr_helper::setError( "File list from MD5 file wasn\'t loaded. Please, check folder and folder rights " . $this->dir_backup . " and MD5 file in this folder with file rights");
935
  }
936
  dbr_helper::setCommand('download-with-dropbox-restore', true, 'success');
937
  return true;
954
  if (!defined('ABSPATH')) {
955
  define('ABSPATH', dirname(__FILE__) . '/../../../../');
956
  }
 
 
 
 
 
 
 
 
 
 
 
 
957
  if (!defined('DBP_PATH')) {
958
  define('DBP_PATH', dirname(__FILE__) . '/../');
959
  }
974
 
975
  function __construct()
976
  {
 
 
 
 
977
  if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
978
+ if ( isset($_POST['key']) ) {
979
  $this->parsMethod();
980
+ } elseif( !isset($_POST['key']) && isset($_POST['name']) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
981
 
982
+ dbr_helper::clearTMP();
983
+ dbr_database::inc_wp_config();
984
+ $setting = dbr_database::db_get('options', array('option_value'), array('option_name' => 'wpadm_backup_dropbox-setting'), 1);
985
+ if (isset($setting['option_value'] )) {
986
+ $this->setting = dbr_helper::unpack( $setting['option_value'] );
987
+ }
988
+ $this->setting['restore-key'] = md5( time() . microtime() . __FILE__);
989
+ include 'constant.php';
990
+ $plugin = $this->parsePlugin('/dropbox-backup');
991
+ $plugin_name = 'dropbox-backup';
992
+ $version = '1.0';
993
+ if (isset($plugin['/dropbox-backup']['Version'])) {
994
+ $version = $plugin['/dropbox-backup']['Version'];
995
+ } else{
996
+ $plugin = $this->parsePlugin('/dropbox-backup-pro');
997
+ if (isset($plugin['/dropbox-backup-pro']['Version'])) {
998
+ $version = $plugin['/dropbox-backup-pro']['Version'];
999
+ $plugin_name = 'dropbox-backup-pro';
1000
+ }
1001
+ }
1002
+ $data = array('actApi' => 'setPluginCode', $plugin_name . '_request' => array('action' => 'restore', 'site' => SITE_HOME, 'pl' => $plugin_name, 'key' => $this->setting['restore-key'], 'pl_v' => $version, ) );
1003
+ $res = dbr_api::post(WPADM_URL_BASE . 'api/', $data);
1004
+ try {
1005
  if ( !empty( $res['res'] ) ) {
1006
  $result = json_decode($res['res'], true);
1007
  if (isset($result['code'])) {
1022
 
1023
  }
1024
  }
1025
+ dbr_database::db_update('options', array('option_value' => dbr_helper::pack( $this->setting ) ), array('option_name' => 'wpadm_backup_dropbox-setting') ) ;
1026
+ dbr_helper::setCommand('restore-backup', $_POST);
 
 
 
 
 
 
 
 
1027
  echo json_encode(array('result' => 'work'));
1028
  } catch(Exception $e) {
1029
  dbr_log::log($e->getMessage());
1030
+ dbr_helper::setCommand('result-restore', array('name' => $_POST['name'], 'result' => 'error', 'message' => $e->getMessage() ) );
1031
  }
1032
  }
1033
  }
1037
  private function parsMethod()
1038
  {
1039
  if ( isset($_POST['method']) ) {
 
1040
  try {
1041
  dbr_helper::mkdir(DBP_PATH_TMP);
1042
  if (!dbr_helper::is_work() || in_array($_POST['method'], $this->method_access ) ) {
1043
  if (isset($_POST['key'])) {
1044
+ dbr_database::inc_wp_config();
1045
+ include 'constant.php';
1046
+ $setting = dbr_database::db_get('options', array('option_value'), array('option_name' => 'wpadm_backup_dropbox-setting'), 1);
1047
+ $this->setting = dbr_helper::unpack( $setting['option_value'] );
1048
+ $backup_dir = DROPBOX_BACKUP_DIR_BACKUP;
1049
+ if (isset($this->setting['backup_folder']) && !empty($this->setting['backup_folder'])) {
1050
+ $backup_dir = $this->setting['backup_folder'];
1051
+ }
1052
  if (file_exists($backup_dir . '/local-key')) {
1053
+ $key_values = dbr_helper::unpack( @file_get_contents($backup_dir . '/local-key') );
1054
  }
1055
+ if ($_POST['key'] == $this->setting['restore-key'] || ( isset($key_values['key']) && $_POST['key'] == $key_values['key'] ) ) {
1056
  $methods = new dbr_methods();
1057
+ $method = $_POST['method']. '_method';
1058
  if (method_exists($methods, $method)) {
1059
  if ($_POST['method'] != 'wpadm_logs') {
1060
  if (file_exists(DBP_PATH_TMP . '/result-restore')) {
1079
 
1080
  if (stripos($res_api['res'], 'mod_security') !== false || dbr_helper::modSecureInstalled() ) {
1081
  dbr_helper::is_work(time(), 'start');
1082
+ dbr_helper::setError('Apache module \'mod_security\' is active and affected on your website. For successfully restoring of website please switch it temporary off.');
 
 
1083
  }
1084
  }
1085
  } else {
1086
  dbr_helper::is_work(time(), 'start');
1087
  }
 
 
 
 
 
 
 
 
 
 
1088
  $methods->$method();
1089
  if (!isset($_POST['type-backup'])) {
1090
  dbr_helper::is_work(time(), 'finish');
1107
  }
1108
 
1109
 
 
 
 
 
 
 
 
 
 
1110
 
1111
+
 
1112
  /**
1113
  * json encode
1114
  *
1152
  }
1153
 
1154
  new dbr_route();
1155
+ }
readme.txt CHANGED
@@ -1,11 +1,11 @@
1
  === Backup & Restore Dropbox ===
2
  Plugin Name: Backup & Restore Dropbox
3
- Version: 1.5.1.2
4
  Donate link: http://www.wpadm.com/donate
5
  URI: http://www.wpadm.com/dropbox-backup
6
  Tags: dropbox, backup, dropbox backup, database, file, full backup, manage, sicherung, database backup, file backup, page backup, page, web, web backup, web page, synchronize, clone, duplicate, move, web page backup, site, site backup, back up, cloud, Cloud Files, cloud backup, db backup, dump, german, migrate, multisite, German, schedule, storage, time, upload, data bank, zip, archive, backups, restore, db, recover, recovery, restoration, wp backup, wordpress backup, wordpress backup to dropbox, plugin wordpress backup, wpadm, wpadm.com, website, website backup, website back up, wp backup, wordpress backup, scheduled backup, backup scheduler, tool, backup tool
7
  Requires at least: 3.9
8
- Tested up to: 4.7.3
9
  Stable tag: trunk
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -486,8 +486,7 @@ Please, keep your Dropbox Backup and Restore plugin up-to-date.
486
 
487
  **Rev.**&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;**Description** <br />
488
 
489
- @1506575&nbsp;&nbsp;&nbsp;&nbsp;New version 1.4.7.3 with full update of Dropbox backup and restore plugin.
490
- @1506495&nbsp;&nbsp;&nbsp;&nbsp;WordPress backup plugin Dropbox backup & restore, added "exclude/include" files and folder window. Bug fixes.<br />
491
  &nbsp;&nbsp;&nbsp;&nbsp;To restore connect to the database will be also used mysqli or mysql. The database connection type will be selected automatically.<br />
492
  During restoring process: the config file of WordPress wp-config.php will use config of new website configuration to connect to the database.<br />
493
  @1448769&nbsp;&nbsp;&nbsp;&nbsp;"Dropbox backup & restore" - added tmp folder for library pclzip, deleted files tmp for pclzip<br />
1
  === Backup & Restore Dropbox ===
2
  Plugin Name: Backup & Restore Dropbox
3
+ Version: 1.4.7.4
4
  Donate link: http://www.wpadm.com/donate
5
  URI: http://www.wpadm.com/dropbox-backup
6
  Tags: dropbox, backup, dropbox backup, database, file, full backup, manage, sicherung, database backup, file backup, page backup, page, web, web backup, web page, synchronize, clone, duplicate, move, web page backup, site, site backup, back up, cloud, Cloud Files, cloud backup, db backup, dump, german, migrate, multisite, German, schedule, storage, time, upload, data bank, zip, archive, backups, restore, db, recover, recovery, restoration, wp backup, wordpress backup, wordpress backup to dropbox, plugin wordpress backup, wpadm, wpadm.com, website, website backup, website back up, wp backup, wordpress backup, scheduled backup, backup scheduler, tool, backup tool
7
  Requires at least: 3.9
8
+ Tested up to: 4.7
9
  Stable tag: trunk
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
486
 
487
  **Rev.**&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;**Description** <br />
488
 
489
+ &nbsp;&nbsp;&nbsp;&nbsp;WordPress backup plugin Dropbox backup & restore, added "exclude/include" files and folder window. Bug fixes.<br />
 
490
  &nbsp;&nbsp;&nbsp;&nbsp;To restore connect to the database will be also used mysqli or mysql. The database connection type will be selected automatically.<br />
491
  During restoring process: the config file of WordPress wp-config.php will use config of new website configuration to connect to the database.<br />
492
  @1448769&nbsp;&nbsp;&nbsp;&nbsp;"Dropbox backup & restore" - added tmp folder for library pclzip, deleted files tmp for pclzip<br />
template/advantage-plugin.php CHANGED
@@ -1,108 +1,59 @@
1
- <?php if ( ! defined( 'ABSPATH' ) ) exit; ?>
2
- <div class="inline block-advantage" >
3
- <?php if (!isset($repeat_advantage)) {?>
4
- <span style="font-size:16px;">
5
- <?php _e('Use Professional version of "Dropbox backup and restore" plugin and get:','dropbox-backup') ; ?>
6
- </span>
7
- <?php } ?>
8
- <ul class="list-dropbox-backup-pro <?php echo !isset($repeat_advantage) ? '' : 'repeat_advantage'?>">
9
- <li>
10
- <div class="inline">
11
- <img src="<?php echo ( !isset($repeat_advantage) ? plugins_url('/template/ok-icon.png', dirname(__FILE__)) : plugins_url('/template/ico_ok.png', dirname(__FILE__) ) );?>" title="" alt="" />
12
- </div>
13
- <div class="inline">
14
- <span class="text">
15
- <?php _e('Automated Dropbox backup','dropbox-backup') ; ?> <?php echo ( !isset($repeat_advantage) ? '' : '<br />' ) ?>
16
- <?php _e('(Scheduled backup tasks)','dropbox-backup')?>
17
- </span>
18
- </div>
19
  </li>
20
  <li>
21
- <div class="inline">
22
- <img src="<?php echo ( !isset($repeat_advantage) ? plugins_url('/template/ok-icon.png', dirname(__FILE__)) : plugins_url('/template/ico_ok.png', dirname(__FILE__) ) );?>" title="" alt="" />
23
- </div>
24
- <div class="inline">
25
- <span class="text">
26
- <?php _e('Automated Local backup','dropbox-backup') ; ?> <?php echo ( !isset($repeat_advantage) ? '' : '<br />' ) ?>
27
- <?php _e('(Scheduled backup tasks)','dropbox-backup')?>
28
-
29
- </span>
30
- </div>
31
  </li>
32
  <li>
33
- <div class="inline">
34
- <img src="<?php echo ( !isset($repeat_advantage) ? plugins_url('/template/ok-icon.png', dirname(__FILE__)) : plugins_url('/template/ico_ok.png', dirname(__FILE__) ) );?>" title="" alt="" />
35
- </div>
36
- <div class="inline">
37
- <span class="text">
38
- <?php _e('Backup Status E-Mail Reporting','dropbox-backup') ; ?>
39
- </span>
40
- </div>
41
  </li>
42
  <li>
43
- <div class="inline">
44
- <img src="<?php echo ( !isset($repeat_advantage) ? plugins_url('/template/ok-icon.png', dirname(__FILE__)) : plugins_url('/template/ico_ok.png', dirname(__FILE__) ) );?>" title="" alt="" />
45
- </div>
46
- <div class="inline">
47
- <span class="text">
48
- <?php _e('Online Service "Backup Website Manager"','dropbox-backup') ; ?> <?php echo ( !isset($repeat_advantage) ? '' : '<br />' ) ?>
49
- <?php _e('(Copy, Clone or Migrate of websites)','dropbox-backup')?>
50
- </span>
51
- </div>
52
  </li>
53
  <li>
54
- <div class="inline">
55
- <img src="<?php echo ( !isset($repeat_advantage) ? plugins_url('/template/ok-icon.png', dirname(__FILE__)) : plugins_url('/template/ico_ok.png', dirname(__FILE__) ) );?>" title="" alt="" />
56
- </div>
57
- <div class="inline">
58
- <span class="text">
59
- <?php _e('One Year Free Updates for PRO version','dropbox-backup') ; ?>
60
- </span>
61
- </div>
62
  </li>
63
  <li>
64
- <div class="inline">
65
- <img src="<?php echo ( !isset($repeat_advantage) ? plugins_url('/template/ok-icon.png', dirname(__FILE__)) : plugins_url('/template/ico_ok.png', dirname(__FILE__) ) );?>" title="" alt="" />
66
- </div>
67
- <div class="inline">
68
- <span class="text">
69
- <?php _e('One Year Priority support','dropbox-backup') ; ?>
70
- </span>
71
- </div>
72
  </li>
73
  </ul>
74
  </div>
75
- <div class="<?php echo ( !isset($repeat_advantage) ) ? 'inline-right' : 'inline repeat_advantage'; ?>" style="">
76
- <?php if (!isset($repeat_advantage)) {?>
77
- <div class="image-dropbox-pro" onclick="document.dropbox_pro_form.submit();">
78
- <img src="<?php echo plugins_url('/template/dropbox_pro_logo_box1.png', dirname(__FILE__));?>" title="<?php _e('Get PRO version','dropbox-backup');?>" alt="<?php _e('Get PRO version','dropbox-backup'); ?>">
79
- </div>
80
- <?php } ?>
81
- <style>
82
-
83
- .block-pay.repeat_advantage {
84
- margin-top: 50%;
85
- }
86
-
87
-
88
- </style>
89
- <div class="block-pay <?php echo (!isset($repeat_advantage) ? '' : 'repeat_advantage' ); ?>" style="">
90
- <?php if (!isset($repeat_advantage)) {?>
91
- <form action="<?php echo esc_url( WPADM_URL_PRO_VERSION ); ?>api/" method="post" id="dropbox_pro_form" name="dropbox_pro_form" >
92
-
93
- <input type="hidden" value="<?php echo home_url();?>" name="site">
94
- <input type="hidden" value="<?php echo 'proBackupPay'?>" name="actApi">
95
- <input type="hidden" value="<?php echo get_option('admin_email');?>" name="email">
96
- <input type="hidden" value="<?php echo 'dropbox-backup';?>" name="plugin">
97
- <input type="hidden" value="<?php echo (DRBBACKUP_MULTI) ? network_admin_url("admin.php?page=wpadm_wp_full_backup_dropbox&pay=success") : admin_url("admin.php?page=wpadm_wp_full_backup_dropbox&pay=success"); ?>" name="success_url">
98
- <input type="hidden" value="<?php echo (DRBBACKUP_MULTI) ? network_admin_url("admin.php?page=wpadm_wp_full_backup_dropbox&pay=cancel") : admin_url("admin.php?page=wpadm_wp_full_backup_dropbox&pay=cancel"); ?>" name="cancel_url">
99
- <input type="submit" class="backup_button" value="<?php _e('Get PRO','dropbox-backup');?>">
100
- </form>
101
- <?php } else {
102
- ?>
103
- <input type="button" class="backup_button" onclick="document.dropbox_pro_form.submit();" value="<?php _e('Get PRO','dropbox-backup');?>">
104
- <?php
105
- }?>
106
  </div>
107
  </div>
108
 
1
+ <div class="inline" style="width: 60%">
2
+ <span style="font-size:16px;">
3
+ <?php _e('Use Professional version of "Dropbox backup and restore" plugin and get:','dropbox-backup') ; ?>
4
+ </span>
5
+ <ul class="list-dropbox-backup-pro">
6
+ <li><img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
7
+ <span class="text">
8
+ <?php _e('Automated Dropbox backup (Scheduled backup tasks)','dropbox-backup') ; ?>
9
+ </span>
 
 
 
 
 
 
 
 
 
10
  </li>
11
  <li>
12
+ <img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
13
+ <span class="text">
14
+ <?php _e('Automated Local backup (Scheduled backup tasks)','dropbox-backup') ; ?>
15
+ </span>
 
 
 
 
 
 
16
  </li>
17
  <li>
18
+ <img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
19
+ <span class="text">
20
+ <?php _e('Backup Status E-Mail Reporting','dropbox-backup') ; ?>
21
+ </span>
 
 
 
 
22
  </li>
23
  <li>
24
+ <img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
25
+ <span class="text">
26
+ <?php _e('Online Service "Backup Website Manager" (Copy, Clone or Migrate of websites)','dropbox-backup') ; ?>
27
+ </span>
 
 
 
 
 
28
  </li>
29
  <li>
30
+ <img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
31
+ <span class="text">
32
+ <?php _e('One Year Free Updates for PRO version','dropbox-backup') ; ?>
33
+ </span>
 
 
 
 
34
  </li>
35
  <li>
36
+ <img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
37
+ <span class="text">
38
+ <?php _e('One Year Priority support','dropbox-backup') ; ?>
39
+ </span>
 
 
 
 
40
  </li>
41
  </ul>
42
  </div>
43
+ <div class="inline-right" style="margin-top: 0;">
44
+ <div class="image-dropbox-pro" onclick="document.dropbox_pro_form.submit();">
45
+ <img src="<?php echo plugins_url('/template/dropbox_pro_logo_box1.png', dirname(__FILE__));?>" title="<?php _e('Get PRO version','dropbox-backup');?>" alt="<?php _e('Get PRO version','dropbox-backup'); ?>">
46
+ </div>
47
+ <div style="margin-top:26%; float: left; margin-left: 20px; margin-right: 15px;">
48
+ <form action="<?php echo WPADM_URL_PRO_VERSION; ?>api/" method="post" id="dropbox_pro_form" name="dropbox_pro_form" >
49
+ <input type="hidden" value="<?php echo home_url();?>" name="site">
50
+ <input type="hidden" value="<?php echo 'proBackupPay'?>" name="actApi">
51
+ <input type="hidden" value="<?php echo get_option('admin_email');?>" name="email">
52
+ <input type="hidden" value="<?php echo 'dropbox-backup';?>" name="plugin">
53
+ <input type="hidden" value="<?php echo admin_url("admin.php?page=wpadm_wp_full_backup_dropbox&pay=success"); ?>" name="success_url">
54
+ <input type="hidden" value="<?php echo admin_url("admin.php?page=wpadm_wp_full_backup_dropbox&pay=cancel"); ?>" name="cancel_url">
55
+ <input type="submit" class="backup_button" value="<?php _e('Get PRO','dropbox-backup');?>">
56
+ </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  </div>
58
  </div>
59
 
template/css/admin-style-wpadm.css CHANGED
@@ -1,35 +1,4 @@
1
 
2
- .cfContentContainer {
3
- color:#fff;
4
- }
5
- .inline.repeat_advantage {
6
- margin-top:15px;
7
- }
8
- .inline.repeat_advantage .backup_button {
9
- box-shadow: 0px 0px 15px rgba(255,255,255,1);
10
- }
11
- .list-dropbox-backup-pro.repeat_advantage li {
12
- margin-left: 0px;
13
- clear:both;
14
- }
15
- .list-dropbox-backup-pro.repeat_advantage li img {
16
- margin-top: 3px;
17
- -webkit-filter: drop-shadow(2px 2px 2px rgba(255,255,255,0.5));
18
- -ms-filter: "progid:DXImageTransform.Microsoft.Dropshadow(OffX=2, OffY=2, Color='#fff')";
19
- filter: "progid:DXImageTransform.Microsoft.Dropshadow(OffX=2, OffY=2, Color='#fff')";
20
- }
21
-
22
- .cfTabsContainer:hover .hover-title {
23
- text-decoration:underline;
24
- }
25
- #wp-cron-enable {
26
- position: relative;
27
- }
28
- #wp-cron-enable .close-button {
29
- position: absolute;
30
- right: -15px;
31
- top: -15px;
32
- }
33
  .dropbox-image-toolbar a:before {
34
  content: url('./../../img/wpadm-logo.png');
35
  /*background-image: ;*/
@@ -57,24 +26,6 @@
57
  margin-top: 20px;
58
  color:#fff;
59
  }
60
- .inline-right {
61
- float:right;
62
- }
63
- .inline {
64
- float:left;
65
- }
66
-
67
- .block-pay {
68
- margin-top: 26%;
69
- float: left;
70
- margin-left: 20px;
71
- margin-right: 15px;
72
- }
73
-
74
- .inline-right, .inline {
75
- margin-top:10px;
76
- margin-left:10px;
77
- }
78
  .log-dropbox {
79
  background-repeat: no-repeat; background-position:center;
80
  background-color: #fff;
@@ -94,7 +45,7 @@
94
  float:left;
95
  }
96
  #logs-form, #reviews-dropbox, #process-box {
97
- padding: 10px; background: #ffffc8; border: 1px solid #0096d6; position: relative; text-align: center;
98
  }
99
  #reviews-dropbox, #process-box {
100
  float: right;
@@ -950,31 +901,15 @@ text-align: center; margin-top: 10px;
950
  }
951
 
952
  .cfTabsContainer.wpadm-setting-box {
953
- width: 28%; float: left; margin-left: 10px; padding-bottom: 0px; padding-top: 0px;
954
  }
955
 
956
  @media only screen and (max-width: 1345px) {
957
- .cfTabsContainer.wpadm-setting-box {
958
- width: 97%;
959
- float:none;
960
- margin-left: 0px;
961
- }
962
-
963
-
964
- .block-pay.repeat_advantage {
965
- margin-top: 10px;
966
- width: 90%;
967
- text-align: center;
968
- }
969
- .inline.repeat_advantage {
970
- float:none;
971
- }
972
- .block-advantage {
973
- width:100%;
974
- }
975
- .inline-right {
976
- float:left;
977
- }
978
  }
979
 
980
  /*default style */
1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  .dropbox-image-toolbar a:before {
3
  content: url('./../../img/wpadm-logo.png');
4
  /*background-image: ;*/
26
  margin-top: 20px;
27
  color:#fff;
28
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  .log-dropbox {
30
  background-repeat: no-repeat; background-position:center;
31
  background-color: #fff;
45
  float:left;
46
  }
47
  #logs-form, #reviews-dropbox, #process-box {
48
+ padding: 10px; background: #ffffc8; border: 1px solid #0096d6; position: relative; height: 100px; text-align: center;
49
  }
50
  #reviews-dropbox, #process-box {
51
  float: right;
901
  }
902
 
903
  .cfTabsContainer.wpadm-setting-box {
904
+ width: 28%; float: left; margin-left: 10px; padding-bottom: 0px; padding-top: 0px;
905
  }
906
 
907
  @media only screen and (max-width: 1345px) {
908
+ .cfTabsContainer.wpadm-setting-box {
909
+ width: 97%;
910
+ float:none;
911
+ margin-left: 0px;
912
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
913
  }
914
 
915
  /*default style */
template/css/tool-bar.css CHANGED
@@ -3,27 +3,18 @@
3
  /*background-image: ;*/
4
  }
5
 
6
- .block-advantage {
7
- width: 65%;
8
- }
9
-
10
  .list-dropbox-backup-pro {
11
  margin-top:10px;
12
  margin-bottom:0;
13
-
14
  }
15
  .list-dropbox-backup-pro li {
16
  margin-bottom: 0;
17
  font-size:14px;
18
- clear:both;
19
  margin-left:35px;
20
  }
21
  .list-dropbox-backup-pro .text {
22
  line-height: 25px;
23
  }
24
- .list-dropbox-backup-pro li .inline {
25
- margin-top:0px;
26
- }
27
  .image-dropbox-pro {
28
  width: 183px;
29
  height: 187px;
@@ -79,23 +70,13 @@ button.backup_button:disabled, button.backup_button:disabled:hover {
79
  background: #9eb7d8;
80
  }
81
 
82
- #pro-plugin-description .inline {
83
- float:left;
84
  }
85
-
86
- #pro-plugin-description .block-pay {
87
- margin-top: 6%;
88
- float: left;
89
- margin-left: 20px;
90
- margin-right: 15px;
91
  }
92
-
93
- @media only screen and (max-width: 1345px) {
94
-
95
- .block-advantage {
96
- width:100%;
97
- }
98
- .inline-right {
99
- float:left;
100
- }
101
  }
3
  /*background-image: ;*/
4
  }
5
 
 
 
 
 
6
  .list-dropbox-backup-pro {
7
  margin-top:10px;
8
  margin-bottom:0;
 
9
  }
10
  .list-dropbox-backup-pro li {
11
  margin-bottom: 0;
12
  font-size:14px;
 
13
  margin-left:35px;
14
  }
15
  .list-dropbox-backup-pro .text {
16
  line-height: 25px;
17
  }
 
 
 
18
  .image-dropbox-pro {
19
  width: 183px;
20
  height: 187px;
70
  background: #9eb7d8;
71
  }
72
 
73
+ .inline-right {
74
+ float:right;
75
  }
76
+ .inline {
77
+ float:left;
 
 
 
 
78
  }
79
+ .inline-right, .inline {
80
+ margin-top:10px;
81
+ margin-left:10px;
 
 
 
 
 
 
82
  }
template/expsys.php CHANGED
@@ -1,4 +1,3 @@
1
- <?php if ( ! defined( 'ABSPATH' ) ) exit; ?>
2
  <?php
3
  $str = '';
4
  foreach($data['sys'] as $key => $value) {
@@ -31,10 +30,10 @@
31
  </script>
32
  <div class="functions-view">
33
  <div class="title-functions-view" onclick="showView();">
34
- <?php echo ech_html( $str ); ?>
35
  </div>
36
  <div class="body-functions-view">
37
- <?php echo ech_html( $functions_need ); ?>
38
  </div>
39
  </div>
40
  <?php
 
1
  <?php
2
  $str = '';
3
  foreach($data['sys'] as $key => $value) {
30
  </script>
31
  <div class="functions-view">
32
  <div class="title-functions-view" onclick="showView();">
33
+ <?php echo $str; ?>
34
  </div>
35
  <div class="body-functions-view">
36
+ <?php echo $functions_need; ?>
37
  </div>
38
  </div>
39
  <?php
template/ico_ok.png DELETED
Binary file
template/js/admin-wpadm.js CHANGED
@@ -10,24 +10,6 @@ function textReplace(text, addStr)
10
  {
11
  return text.replace(/([\w])(\'|’)([\w])/gm, "$1$3") + addStr;
12
  }
13
- var set_click = '';
14
- function setDefaultFolderBackup(dir)
15
- {
16
- if ( typeof( dir ) == 'object') {
17
- id = 'backup_folder';
18
- } else {
19
- jQuery('#backup_folder').val( decodeURIComponent( dir ) );
20
- id = 'clear_backup_folder';
21
- }
22
- if (set_click != id ) {
23
- jQuery('#button-save-folder-backup').off("click");
24
- jQuery('#button-save-folder-backup').click(function() {
25
- saveSetting(id);
26
- });
27
- set_click = id;
28
- changes_setting = true;
29
- }
30
- }
31
 
32
  var shows_id = ""
33
  var shows_t = ""
@@ -112,15 +94,9 @@ function connectFolder(t)
112
  }
113
  id = jQuery(divs[i]).attr('data-value');
114
  if (set) {
115
- send_checked = unique(send_checked);
116
  if (t.checked) {
117
- jQuery("#send-to-" + id).attr('checked', true);
118
- send_checked[send_checked.length] = jQuery("#send-to-" + id).val();
119
  } else {
120
- k = jQuery.inArray( jQuery("#send-to-" + id).val(), send_checked );
121
- if (k >= 0) {
122
- send_checked.splice(k,1);
123
- }
124
  jQuery("#send-to-" + id).attr('checked', false);
125
  }
126
  }
@@ -130,15 +106,9 @@ function connectFolder(t)
130
  if (jQuery("#include_" + t_id).length > 0) {
131
  checkboxes = jQuery("#include_" + t_id).find('.checkbox-send');
132
  for(i = 0; i < checkboxes.length; i++) {
133
- send_checked = unique(send_checked);
134
  if (t.checked) {
135
  jQuery(checkboxes[i]).attr('checked', true);
136
- send_checked[send_checked.length] = jQuery(checkboxes[i]).val();
137
  } else {
138
- k = jQuery.inArray( jQuery(checkboxes[i]).val(), send_checked );
139
- if (k >= 0) {
140
- send_checked.splice(k,1);
141
- }
142
  jQuery(checkboxes[i]).attr('checked', false);
143
  }
144
  }
10
  {
11
  return text.replace(/([\w])(\'|’)([\w])/gm, "$1$3") + addStr;
12
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
  var shows_id = ""
15
  var shows_t = ""
94
  }
95
  id = jQuery(divs[i]).attr('data-value');
96
  if (set) {
 
97
  if (t.checked) {
98
+ jQuery("#send-to-" + id).attr('checked', true);
 
99
  } else {
 
 
 
 
100
  jQuery("#send-to-" + id).attr('checked', false);
101
  }
102
  }
106
  if (jQuery("#include_" + t_id).length > 0) {
107
  checkboxes = jQuery("#include_" + t_id).find('.checkbox-send');
108
  for(i = 0; i < checkboxes.length; i++) {
 
109
  if (t.checked) {
110
  jQuery(checkboxes[i]).attr('checked', true);
 
111
  } else {
 
 
 
 
112
  jQuery(checkboxes[i]).attr('checked', false);
113
  }
114
  }
template/notice.php CHANGED
@@ -1,4 +1,3 @@
1
- <?php if ( ! defined( 'ABSPATH' ) ) exit; ?>
2
  <div class="clear"></div>
3
  <div class="update-nag" style="width: 95%;">
4
  <?php _e('Professional version of','dropbox-backup'); ?>
 
1
  <div class="clear"></div>
2
  <div class="update-nag" style="width: 95%;">
3
  <?php _e('Professional version of','dropbox-backup'); ?>
template/notice5.php CHANGED
@@ -1,4 +1,3 @@
1
- <?php if ( ! defined( 'ABSPATH' ) ) exit; ?>
2
  <div class="clear"></div>
3
  <div class="updated notice" style="width: 95%;">
4
  <p>
 
1
  <div class="clear"></div>
2
  <div class="updated notice" style="width: 95%;">
3
  <p>
template/wpadm_show_backup.php CHANGED
@@ -1,4 +1,3 @@
1
- <?php if ( ! defined( 'ABSPATH' ) ) exit; ?>
2
  <div class="wrap">
3
  <script src="<?php echo plugin_dir_url(__FILE__) . 'js/jquery.arcticmodal-0.3.min.js'?>" type="text/javascript"></script>
4
  <link rel='stylesheet' href='<?php echo plugin_dir_url(__FILE__) . 'js/jquery.arcticmodal-0.3.css'?>' type='text/css' media='all' />
@@ -75,22 +74,15 @@
75
  jQuery('#registr-show').html("<?php _e('Hide','dropbox-backup'); ?>");
76
  jQuery('#title-regisr').css("padding" , "0px 0px");
77
  jQuery('#registr-choice-icon').removeClass("dashicons-arrow-down").addClass('dashicons-arrow-up');
78
- jQuery(".hover-title").hide(200);
79
  } else {
80
  if (show) {
81
  jQuery('#cf_activate').hide('slow');
82
  jQuery('#registr-show').html("<?php _e('Show','dropbox-backup'); ?>");
83
- jQuery('#title-regisr').css("padding" , "9px 0px");
84
  jQuery('#registr-choice-icon').removeClass("dashicons-arrow-up").addClass('dashicons-arrow-down');
85
- jQuery(".hover-title").show(200);
86
  }
87
  }
88
  }
89
- function changesSetting()
90
- {
91
- return confirm('<?php _e('The configuration was changed. Would you like to save it?', 'dropbox-backup')?>');
92
- }
93
- var changes_setting = false;
94
  function showSetting(show)
95
  {
96
  display = jQuery('#setting_active').css('display');
@@ -101,19 +93,10 @@
101
  jQuery('#setting-choice-icon').removeClass("dashicons-arrow-down").addClass('dashicons-arrow-up');
102
  } else {
103
  if (show) {
104
- if (changes_setting) {
105
- if ( changesSetting() ) {
106
- jQuery('#button-save-folder-backup').click();
107
- return;
108
- }
109
- location.reload();
110
- return;
111
- }
112
  jQuery('#setting_active').hide('slow');
113
  jQuery('#setting-show').html("<?php _e('Show','dropbox-backup'); ?>");
114
  jQuery('#title-setting').css("padding" , "20px 0px");
115
  jQuery('#setting-choice-icon').removeClass("dashicons-arrow-up").addClass('dashicons-arrow-down');
116
-
117
  }
118
  }
119
  }
@@ -123,7 +106,6 @@
123
  d = new Date();
124
  var data_backup = {
125
  'action': 'wpadm_local_backup',
126
- 'nonce' : '<?php echo esc_attr( $nonce ); ?>',
127
  'time': Math.ceil( (d.getTime() + (-d.getTimezoneOffset() * 60000 ) ) / 1000 )
128
  };
129
  jQuery("#logs-form").show("slow");
@@ -211,7 +193,6 @@
211
 
212
  var data_backup = {
213
  'action': 'wpadm_dropbox_create',
214
- 'nonce' : '<?php echo esc_attr( $nonce ); ?>',
215
  'time': Math.ceil( (d.getTime() + (-d.getTimezoneOffset() * 60000 ) ) / 1000 ),
216
  };
217
  jQuery("#logs-form").show("slow");
@@ -397,26 +378,6 @@
397
  }
398
  }
399
  }
400
-
401
- function initial_restore(method)
402
- {
403
- url_ajax = '<?php echo plugins_url('/modules/restore-class.php', dirname(__FILE__) ); ?>';
404
- data_send = {};
405
- data_send['key'] = '<?php echo esc_attr( $key ); ?>';
406
- data_send['method'] = 'restore';
407
- jQuery.ajax({
408
- type: "POST",
409
- url: url_ajax,
410
- data: data_send,
411
- error: function(jqXHR, textStatus, errorThrown){
412
- //setTimeout('processBar("' + method + '")', 10000);
413
- if (jqXHR.status != 0) {
414
- //processStop();
415
- //AjaxAlert(jqXHR, textStatus, errorThrown);
416
- }
417
- },
418
- });
419
- }
420
  var logs = [];
421
  function processBar(method)
422
  {
@@ -425,7 +386,6 @@
425
  }
426
  var data_log = {
427
  'action': 'wpadm_logs',
428
- 'nonce' : '<?php echo esc_attr( $nonce ); ?>',
429
  'type-backup' : method,
430
  };
431
  if (method == 'send-to-dropbox') {
@@ -435,7 +395,7 @@
435
  var url_ajax = ajaxurl;
436
  if (method == 'restore') {
437
  url_ajax = '<?php echo plugins_url('/modules/restore-class.php', dirname(__FILE__) ); ?>';
438
- data_log['key'] = '<?php echo esc_attr( $key ); ?>';
439
  data_log['method'] = 'wpadm_logs';
440
  }
441
  jQuery.ajax({
@@ -458,8 +418,6 @@
458
  showProcessesData(data.processes);
459
  }
460
 
461
-
462
-
463
  if (process_flag == 1) {
464
  if (data.data) {
465
  if (method == 'restore') {
@@ -477,19 +435,14 @@
477
  setTimeout('processBar("' + method + '")', 10000);
478
  }
479
  }
480
-
481
- if (data.mod_secur) { // initial restore ajax
482
- initial_restore(method);
483
- }
484
  } else {
485
  setTimeout('processBar("' + method + '")', 10000);
486
  }
487
  },
488
  error: function(jqXHR, textStatus, errorThrown){
489
- setTimeout('processBar("' + method + '")', 10000);
490
  if (jqXHR.status != 0) {
491
- //processStop();
492
- //AjaxAlert(jqXHR, textStatus, errorThrown);
493
  }
494
  },
495
  });
@@ -568,8 +521,6 @@
568
  }
569
  var data_backup = {
570
  'action': act,
571
- 'nonce' : '<?php echo esc_attr( $nonce ); ?>',
572
- 'key' : '<?php echo esc_attr( $key ); ?>',
573
  'name': name,
574
  };
575
  jQuery("#log-backup").html('');
@@ -651,10 +602,11 @@
651
  }
652
  }
653
  if(send) {
 
654
  data['password'] = document.auth.password.value;
655
  data['username'] = document.auth.username.value;
656
  data['plugin'] = document.auth.plugin.value;
657
- backup = jQuery("#name_backup_restore").val();
658
  jQuery.ajax({
659
  url: form.attr('action'),
660
  data: data,
@@ -898,7 +850,7 @@
898
  function saveSetting(id)
899
  {
900
  if (jQuery('#' + id).length > 0) {
901
- if ( jQuery('#' + id).is('select') || jQuery('#' + id).is( ":text" ) || jQuery('#' + id).is( ":hidden" ) ) {
902
  is_value = jQuery('#' + id).val();
903
  } else {
904
  is_value = 0;
@@ -918,7 +870,7 @@
918
  location.reload();
919
  },
920
  error: function( jqXHR, textStatus, errorThrown ){
921
- //AjaxAlert(jqXHR, textStatus, errorThrown);
922
  }
923
  });
924
  }
@@ -955,22 +907,10 @@
955
  jQuery('#form-ajax-ftp-email').hide('slow');
956
  }
957
  }
958
-
959
- function showEnableCron()
960
- {
961
- jQuery('#wp-cron-enable').arcticmodal({
962
- beforeOpen: function(data, el) {
963
- jQuery('#wp-cron-enable').css('display','block');
964
- },
965
- afterClose: function(data, el) {
966
- jQuery('#wp-cron-enable').css('display','none');
967
- }
968
- });
969
- }
970
  <?php
971
  $command_running = get_transient('running_command');
972
  if (isset($is_runnig) && $is_runnig && $command_running ) {
973
- if ( file_exists(WPAdm_Core::getTmpDir() . "/logs2" ) ) {
974
  @unlink(WPAdm_Core::getTmpDir() . "/logs2");
975
  }
976
  ?>
@@ -986,7 +926,7 @@
986
  jQuery("#log-backup").html('');
987
  jQuery(".title-logs").css('display', 'block');
988
  jQuery(".title-status").css('display', 'none');
989
- type_backup = '<?php echo esc_attr( $command_running ); ?>';
990
 
991
  setTimeout(function() {
992
  disable_buttons() ;
@@ -1004,7 +944,7 @@
1004
  });
1005
  </script>
1006
  <?php if (!empty($error)) {
1007
- echo '<div class="error" style="text-align: left; color: red; font-weight:bold;background:#ffcece;">
1008
  <p style="font-size: 16px;">
1009
  ' . $error . '
1010
  </p></div>';
@@ -1015,13 +955,6 @@
1015
  ' . $msg . '
1016
  </p></div>';
1017
  }?>
1018
-
1019
- <div id="wp-cron-enable" style="display: none;">
1020
- <div class="close-button"><a href="javascript:void(0)" onclick="jQuery('#wp-cron-enable').arcticmodal('close');"><img src="<?php echo plugins_url('/img/closebox.png', dirname(__FILE__));?>" alt=""></a></div>
1021
- <div class="image-enable">
1022
- <img src="<?php echo plugins_url('/img/how-to-enable-cron.png', dirname(__FILE__));?>" alt="">
1023
- </div>
1024
- </div>
1025
  <div id="is-dropbox-auth" style="display: none; width: 380px; text-align: center; background: #fff; border: 2px solid #dde4ff; border-radius: 5px;">
1026
  <div class="title-description" style="font-size: 20px; text-align: center;padding-top:45px; line-height: 30px;">
1027
  <?php _e('Your Dropbox account must be connected before backup to Dropbox.', 'dropbox-backup'); ?> <br />
@@ -1051,7 +984,7 @@
1051
  </script>
1052
  <div id="sent-error-report" style="display: none;" >
1053
  <div class="text-view">
1054
- <?php echo esc_html( $sent_response ) ;?>
1055
  </div>
1056
  <div class="button-sent-report">
1057
  <input type="button" class="button-wpadm" value="<?php _e('OK','dropbox-backup'); ?>" onclick="jQuery('#sent-error-report').arcticmodal('close')" />
@@ -1075,7 +1008,7 @@
1075
  <label for="ftp-host"><?php _e('FTP Host','dropbox-backup'); ?></label>
1076
  </div>
1077
  <div style="float:left; ">
1078
- <input type="text" id="ftp-host" value="<?php echo esc_url( str_ireplace( array('http://', 'https://'), '', home_url() ) ) ;?>" name="ftp_host" >
1079
  </div>
1080
  </div>
1081
  <div class="clear"></div>
@@ -1105,14 +1038,14 @@
1105
  <label for="email-resp"><?php _e('Response Email:','dropbox-backup'); ?></label>
1106
  </div>
1107
  <div style=" ">
1108
- <input type="text" id="email-resp" value="<?php echo esc_attr( get_option('admin_email') );?>" style="padding-left:3px;" name="mail_response">
1109
  </div>
1110
  </div>
1111
  </div>
1112
  </div>
1113
  <div class="clear"></div>
1114
  <div style="text-align: left; margin-left: 100px; margin-top: 10px;">
1115
- <input value="<?php echo esc_attr($time_log); ?>" type="hidden" name="time_pars">
1116
  <input value="" type="hidden" name="msg_ajax" id="msg_ajax">
1117
  </div>
1118
  <div class="ajax-button" style="margin-bottom: 10px;">
@@ -1148,77 +1081,66 @@
1148
  <span style="font-size: 20px;"><?php _e('(files+database)','dropbox-backup');?></span>
1149
 
1150
  <span style="font-size: 11px;">
1151
- <?php echo (isset($plugin_data[0]['Version']) ? 'Version ' . esc_html( $plugin_data[0]['Version'] ) : '')?>
1152
  </span>
1153
 
1154
  </div>
1155
  <?php if ($show) {?>
1156
- <div id="container-user" class="cfTabsContainer" onclick="showRegistInfo(false)" style="width: 48%; padding-bottom: 0px; padding-top: 0px; float: left; margin-left: 20px;">
1157
- <div class="stat-wpadm-info-title" id="title-regisr" style="padding :9px 0px; margin-top:11px; line-height: 24px;">
1158
- <?php if (false) {?>
1159
- <?php _e('Free Sign Up','dropbox-backup'); ?> <br /><?php _e('to backup more than one website...','dropbox-backup'); ?>
1160
- <?php } else {
1161
- _e('Professional version<br /> "Dropbox backup and restore"<br /><span class="hover-title">get more...</span>','dropbox-backup');
1162
- } ?>
1163
  </div>
1164
  <div id="cf_activate" class="cfContentContainer" style="display: none;">
1165
- <?php if (false) {?>
1166
- <form method="post" id="dropbox_form" action="<?php echo admin_url( 'admin-post.php?action=wpadm_activate_plugin' )?>" >
1167
- <div class="stat-wpadm-registr-info" style="margin-bottom: 40px; margin-top: 17px;">
1168
- <table class="form-table stat-table-registr" style="">
1169
- <tbody>
1170
- <tr valign="top">
1171
- <th scope="row">
1172
- <label for="email"><?php _e('E-mail','dropbox-backup'); ?></label>
1173
- </th>
1174
- <td>
1175
- <input id="email" class="" type="text" name="email" value="">
1176
- </td>
1177
- </tr>
1178
- <tr valign="top">
1179
- <th scope="row">
1180
- <label for="password"><?php _e('Password','dropbox-backup'); ?></label>
1181
- </th>
1182
- <td>
1183
- <input id="password" class="" type="password" name="password" value="">
1184
- </td>
1185
- </tr>
1186
- <tr valign="top">
1187
- <th scope="row">
1188
- <label for="password-confirm"><?php _e('Password confirm','dropbox-backup'); ?></label>
1189
- </th>
1190
- <td>
1191
- <input id="password-confirm" class="" type="password" name="password-confirm" value="">
1192
- </td>
1193
- </tr>
1194
- <tr valign="top">
1195
- <th scope="row">
1196
- </th>
1197
- <td>
1198
- <input class="button-wpadm" type="submit" value="<?php _e('Register & Activate','dropbox-backup'); ?>" name="send">
1199
- </td>
1200
- </tr>
1201
- </tbody>
1202
- </table>
1203
- </div>
1204
- <div class="stat-wpadm-info" id="registr-info" style="margin-bottom: 2px; margin-top: 30px;">
1205
- <span style="font-weight:bold; font-size: 14px;"><?php _e('If you are NOT registered at','dropbox-backup'); ?> <a target="_blank" style="color: #fff" href="<?php echo esc_url( SERVER_URL_INDEX ); ?>"><?php _e('WPAdm','dropbox-backup'); ?></a>,</span> <?php _e('enter your email and password to use as your Account Data for authorization on WPAdm.','dropbox-backup'); ?> <br /><span style="font-weight: bold;font-size: 14px;"><?php _e('If you already have an account at','dropbox-backup'); ?> <a target="_blank" style="color: #fff" href="<?php echo esc_url( SERVER_URL_INDEX ); ?>"><?php _e('WPAdm','dropbox-backup'); ?></a></span> <?php _e('and you want to Sign-In, so please, enter your registered credential data (email and password twice).','dropbox-backup'); ?>
1206
- </div>
1207
- </form>
1208
- <?php } else {
1209
- $repeat_advantage = false;
1210
- include 'advantage-plugin.php';
1211
- }
1212
- ?>
1213
  </div>
1214
  <div class="clear"></div>
1215
  <div class="block-button-show" style="color: #fff;">
1216
- <div class="block-click" onclick="showRegistInfo(true, false);">
1217
  <span id="registr-show" style="color: #fff;"><?php _e('Show','dropbox-backup'); ?></span>
1218
  <div id="registr-choice-icon" class="dashicons dashicons-arrow-down" style=""></div>
1219
  </div>
1220
  </div>
1221
-
1222
  </div>
1223
  <?php } else { ?>
1224
  <div id="container-user" class="cfTabsContainer" style="width: 48%; padding-bottom: 0px; padding-top: 0px; float: left; margin-left: 20px;">
@@ -1226,13 +1148,13 @@
1226
  <?php _e('Sign In to backup more than one website...','dropbox-backup'); ?>
1227
  </div>
1228
  <div>
1229
- <form method="post" id="auth" name="auth" action="<?php echo esc_url( SERVER_URL_INDEX . "login-process" ) ; ?>">
1230
  <div>
1231
  <div id="message-form" style="color: red; float: left;margin: 10px;margin-top: 14px;"></div>
1232
  </div>
1233
  <div style="padding: 5px; clear: both;">
1234
  <div class="form-field">
1235
- <input class="input-small" type="text" id="username" value="<?php echo esc_attr( get_option(PREFIX_BACKUP_ . "email") );?>" readonly="readonly" required="required" name="username" placeholder="<?php _e('Email','dropbox-backup'); ?>" />
1236
  </div>
1237
  <div class="form-field">
1238
  <input class="input-small" type="password" required="required" name="password" placeholder="<?php _e('Password','dropbox-backup'); ?>" />
@@ -1257,11 +1179,11 @@
1257
  <?php _e('Settings','dropbox-backup'); ?>
1258
  </div>
1259
  <div id="setting_active" class="cfContentContainer" style="display: none;">
1260
- <form method="post" action="" autocomplete="off">
1261
  <div class="stat-wpadm-registr-info" style="width: 100%; margin-bottom: 9px;">
1262
  <div style="margin-bottom: 12px; margin-top: 20px; font-size: 15px; text-align: center;">
1263
  <input class="btn-orange" type="button" style="padding: 5px 10px; font-size: 15px; font-weight: 500" onclick="connectDropbox(this,'<?php echo admin_url( 'admin-post.php?action=dropboxConnect' )?>')" value="<?php _e('Connect to Dropbox','dropbox-backup'); ?>" name="submit">
1264
- <div class="desc-wpadm"><span id="dropbox_uid_text"><?php echo isset($dropbox_options['oauth_token']) && isset($dropbox_options['uid']) ? __('Dropbox successfully connected:','dropbox-backup') . " UID " . esc_html( $dropbox_options['uid'] ) : ''; ?></span></div>
1265
  </div>
1266
  <?php $show_fields = isset($dropbox_options['app_key']) && !empty($dropbox_options['app_key']) && isset($dropbox_options['app_secret']) && !empty($dropbox_options['app_secret']) && $dropbox_options['app_key'] != WPADM_APP_KEY && $dropbox_options['app_secret'] != WPADM_APP_SECRET ; ?>
1267
  <div class="setting-checkbox">
@@ -1275,7 +1197,7 @@
1275
  <label for="app_key"><?php _e('App key','dropbox-backup'); ?>*</label>
1276
  </th>
1277
  <td>
1278
- <input id="app_key" class="" type="text" name="app_key" value="<?php echo isset($dropbox_options['app_key']) && $dropbox_options['app_key'] != WPADM_APP_KEY ? esc_attr( $dropbox_options['app_key'] ) : ''?>">
1279
  </td>
1280
  </tr>
1281
  <tr valign="top" id="dropbox-app-secret" style="display: <?php echo $show_fields ? 'table-row' : 'none'?>;">
@@ -1283,7 +1205,7 @@
1283
  <label for="app_secret"><?php _e('App secret','dropbox-backup'); ?>*</label>
1284
  </th>
1285
  <td>
1286
- <input id="app_secret" class="" type="text" name="app_secret" value="<?php echo isset($dropbox_options['app_secret']) && $dropbox_options['app_secret'] != WPADM_APP_SECRET ? esc_attr( $dropbox_options['app_secret'] ) : ''?>">
1287
  </td>
1288
  </tr>
1289
 
@@ -1300,7 +1222,7 @@
1300
  <label for="time_error" style="font-size: 13px;"><?php _e('Waiting time (minutes)', 'dropbox-backup'); ?></label>
1301
  <select name="time_error" id="time_error" onchange="saveSetting('time_error')">
1302
  <?php
1303
- for($i = 1; $i < 16; $i++) {
1304
  ?>
1305
  <option value="<?php echo $i?>" <?php echo isset($dropbox_options['time_error']) && $dropbox_options['time_error'] == $i ? 'selected="selected"' : (!isset($dropbox_options['time_error']) && $i == $default ) ? 'selected="selected"' : '' ?> ><?php echo $i?>:00</option>
1306
  <?php
@@ -1312,70 +1234,39 @@
1312
  </div>
1313
  <?php if ( is_super_admin() ) { ?>
1314
  <div class="setting-checkbox">
1315
- <input type="checkbox" <?php echo isset($dropbox_options['is_admin']) && (int)$dropbox_options['is_admin'] == 1 ? 'checked="checked"' : ''; ?> name="is_admin" value="1" id="is_admin" onclick="saveSetting('is_admin')" />
1316
  <label for="is_admin" style="font-size: 13px;"><?php _e('Appear in menu for admins only','dropbox-backup'); ?></label>
1317
  </div>
1318
  <?php } ?>
1319
  <div class="setting-checkbox">
1320
- <input type="checkbox" <?php echo (isset($dropbox_options['is_optimization']) && (int)$dropbox_options['is_optimization'] == 1) || (!isset($dropbox_options['is_optimization'])) ? 'checked="checked"' : ''; ?> name="is_optimization" value="1" id="is_optimization" onclick="saveSetting('is_optimization')" />
1321
  <label for="is_optimization" style="font-size: 13px;"><?php _e('Database Optimization','dropbox-backup'); ?></label>
1322
  </div>
1323
  <div class="setting-checkbox">
1324
- <input type="checkbox" <?php echo (isset($dropbox_options['is_local_backup_delete']) && (int)$dropbox_options['is_local_backup_delete'] == 1) ? 'checked="checked"' : ''; ?> name="is_local_backup_delete" value="1" id="is_local_backup_delete" onclick="saveSetting('is_local_backup_delete')" />
1325
  <label for="is_local_backup_delete" style="font-size: 13px; width: 90%"><?php _e('Don\'t delete a local backup copy after uploading to dropbox','dropbox-backup'); ?></label>
1326
  </div>
1327
  <div class="setting-checkbox">
1328
- <input type="checkbox" <?php echo (isset($dropbox_options['is_repair']) && (int)$dropbox_options['is_repair'] == 1) ? 'checked="checked"' : ''; ?> name="is_repair" value="1" id="is_repair" onclick="saveSetting('is_repair')" />
1329
  <label for="is_repair" style="font-size: 13px;"><?php _e('Try database repair','dropbox-backup'); ?></label>
1330
  </div>
1331
  <div class="setting-checkbox">
1332
- <input type="checkbox" <?php echo (isset($dropbox_options['is_show_admin_bar']) && (int)$dropbox_options['is_show_admin_bar'] == 1) ? 'checked="checked"' : ( !isset($dropbox_options['is_show_admin_bar']) ? 'checked="checked"' : '' ); ?> name="is_show_admin_bar" value="1" id="is_show_admin_bar" onclick="saveSetting('is_show_admin_bar')" />
1333
  <label for="is_show_admin_bar" style="font-size: 13px;"><?php _e('Show in a admin bar','dropbox-backup'); ?></label>
1334
  </div>
1335
-
1336
- <!-- type archive -->
1337
- <div class="setting-checkbox" style="margin-top:40px;">
1338
- <label for="" style="font-size: 13px; font-weight: 600;"><?php _e('Create backup using following backup methods:','dropbox-backup'); ?></label>
1339
- <span style="font-size: 11px; margin-top: -7px;">(<?php _e('ZIP method will be used as \'default\'')?>)</span>
1340
- </div>
1341
- <div class="setting-checkbox">
1342
- <input autocomplete="off" type="checkbox" <?php echo ( isset($dropbox_options['type_archive']['zip_archive']) && $dropbox_options['type_archive']['zip_archive'] == 1 ) ? 'checked="checked"' : ''; ?> value="1" id="zip_archive" onclick="saveSetting('zip_archive')" />
1343
- <label for="zip_archive" style="font-size: 13px;"><?php _e('Zip shell','dropbox-backup'); ?></label>
1344
- </div>
1345
- <div class="setting-checkbox">
1346
- <input autocomplete="off" type="checkbox" <?php echo ( isset($dropbox_options['type_archive']['targz_archive']) && $dropbox_options['type_archive']['targz_archive'] == 1 ) ? 'checked="checked"' : ''; ?> value="1" id="targz_archive" onclick="saveSetting('targz_archive')" />
1347
- <label for="targz_archive" style="font-size: 13px;"><?php _e('TarGz archive','dropbox-backup'); ?></label>
1348
- </div>
1349
- <!-- <div class="setting-checkbox">
1350
- <input autocomplete="off" type="checkbox" <?php echo ( isset($dropbox_options['type_archive']['tar_archive']) && $dropbox_options['type_archive']['tar_archive'] == 1) ? 'checked="checked"' : ''; ?> name="type_archive" value="tar_archive" id="tar_archive" data-name="tar_archive" onclick="saveSetting('tar_archive')" />
1351
- <label for="tar_archive" style="font-size: 13px;"><?php _e('Tar archive','dropbox-backup'); ?></label>
1352
- </div> -->
1353
- <div class="clear" style="margin-top: 15px;"></div>
1354
- <!-- end type archive -->
1355
  <div class="setting-checkbox">
1356
  <?php _e('Include/Exclude','dropbox-backup'); ?>
1357
  <a onclick="InludesSetting();" href="javascript:void(0);" style="color: #fff"><?php _e('Folders and files','dropbox-backup'); ?></a>
1358
  </div>
1359
  <div style="border-bottom:1px solid #fff; margin:10px 0px;"></div>
1360
  <div class="setting-checkbox">
1361
- <label for="backup_folder" style="font-size: 13px;"><?php _e('Backup folder location','dropbox-backup'); ?>:</label>
1362
- <input type="text" style="width: 100%;" name="backup_folder" onkeypress="setDefaultFolderBackup(this)" value="<?php echo ( isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder']) ) ? esc_attr( $dropbox_options['backup_folder'] ) : esc_attr( DROPBOX_BACKUP_DIR_BACKUP ); ?>" id="backup_folder" onclick="" />
1363
- <span>
1364
- <input type="hidden" value="1" id="clear_backup_folder">
1365
- <a href="javascript:void(0);" onclick="setDefaultFolderBackup('<?php echo urlencode(DROPBOX_BACKUP_DIR_BACKUP);?>');" style="color:#fff;"><?php _e('Set to default backup folder','dropbox-backup');?></a>
1366
- </span>
1367
- <div class="clear"></div>
1368
  </div>
1369
- <div class="setting-checkbox" style="text-align: center;margin-top:15px;">
1370
- <input class="btn-orange" type="button" id="button-save-folder-backup" value="<?php _e('Save', 'dropbox-backup'); ?>" >
1371
  </div>
1372
- <script >
1373
- jQuery(document).ready(function() {
1374
- jQuery('#button-save-folder-backup').click(function() {
1375
- saveSetting('backup_folder');
1376
- })
1377
- })
1378
- </script>
1379
  </div>
1380
  </form>
1381
  </div>
@@ -1462,7 +1353,7 @@
1462
  </div>
1463
  </div>
1464
  <div id="support-button" style="float: right; margin-top: 130px; margin-right: 20px;">
1465
- <button onclick="window.open('<?php echo esc_url( SERVER_URL_INDEX . 'support/?pl=dbp' ); ?>')" class="backup_button" style="padding: 5px 10px; margin-top: 10px; font-size: 15px;bottom: 0px;"><?php _e('Help','dropbox-backup'); ?></button> <br />
1466
  </div>
1467
  <div id="action-buttons" style="">
1468
  <div style="float: left;">
@@ -1482,21 +1373,19 @@
1482
  </div>
1483
  <div style="clear: both; margin-bottom: 10px;"></div>
1484
  <div>
1485
- <form action="<?php echo esc_url( WPADM_URL_BASE );?>wpsite/recovery-backup" method="post" target="_blank" id="form_auth_backup" name="form_auth_backup">
1486
  </form>
1487
- <form action="<?php echo esc_url( WPADM_URL_BASE ) ;?>backup/tasks" method="post" target="_blank" id="form_auth_backup_create" name="form_auth_backup_create">
1488
- <input type="hidden" name="url_task_create" value="<?php echo esc_url( get_option('siteurl') );?>">
1489
  </form>
1490
  <form action="" method="post" id="form_auth_backup" name="form_auth_backup">
1491
  </form>
1492
  <form action="<?php echo admin_url( 'admin-post.php?action=wpadm_delete_backup' )?>" method="post" id="delete_backups" name="delete_backups">
1493
  <input type="hidden" name="backup-name" id="backup_name" value="" />
1494
  <input type="hidden" name="backup-type" id="backup_type" value="" />
1495
- <input type="hidden" name="nonce" id="id_nonce_delete" value="<?php echo esc_attr( $nonce );?>" />
1496
  </form>
1497
  <form action="<?php echo admin_url( 'admin-post.php?action=stop_backup' )?>" method="post" id="stop_backups" name="stop_backups">
1498
  <input type="hidden" name="type_backup" id="type_backup" value="" />
1499
- <input type="hidden" name="nonce" id="id_nonce" value="<?php echo esc_attr( $nonce ); ?>" />
1500
  </form>
1501
  <div id="inludes-setting" class="" style="display: none; width: 550px; position: relative; text-align: center; background: #e5e5e5; border: 2px solid #dde4ff; border-radius: 5px;">
1502
  <div>
@@ -1553,29 +1442,29 @@
1553
  ?>
1554
  <tr>
1555
  <td class="number-backup"><?php echo ($i + 1);?></td>
1556
- <td onclick="shows('<?php echo esc_attr( md5( print_r($data['data'][$i], 1) ) );?>', this)" class="pointer" style="text-align: left; padding-left: 7px;"><?php echo esc_html( $data['data'][$i]['dt'] ); ?></td>
1557
- <td onclick="shows('<?php echo esc_attr( md5( print_r($data['data'][$i], 1) ) );?>', this)" class="pointer" <?php echo (isset($is_runnig) && $is_runnig && isset($name_running_backup) && $name_running_backup == $data['data'][$i]['name'] ? 'style="text-align:left;"' : '')?>>
1558
  <?php
1559
  $e = '';
1560
  if ( isset($is_runnig) && $is_runnig && isset($name_running_backup) && $name_running_backup == $data['data'][$i]['name']) {
1561
  $e = "<strong style=\"color:#ff8104; margin-left:6px;\">". __('Please wait, backup will be created...','dropbox-backup') . "</strong>";
1562
  } elseif ( $data['data'][$i]['size'] != 0 ) {
1563
  if (isset($data['data'][$i]['not_all_upload']) && $data['data'][$i]['not_all_upload'] === false) {
1564
- $e = "<strong style=\"color:red;\">" . __( 'Not all files were uploaded/created!', 'dropbox-backup') . "</strong>";
1565
  } else {
1566
  $e = $data['data'][$i]['name'];
1567
  }
1568
  } else {
1569
  $e = "<strong style=\"color:red;\">". __('Not available','dropbox-backup') . "</strong>&nbsp;&nbsp;(<a style=\"text-decoration:underline;\">".__('Why?','dropbox-backup')."</a>)";
1570
  }
1571
- echo ($e);
1572
  ?>
1573
  <script type="text/javascript">
1574
- backup_name = '<?php echo esc_attr( $data['data'][$i]['name'] ); ?>';
1575
  </script>
1576
  </td>
1577
- <td onclick="shows('<?php echo esc_attr( md5( print_r($data['data'][$i], 1) ) ) ;?>', this)" class="pointer"><?php echo isset($data['data'][$i]['count']) ? esc_html($data['data'][$i]['count']) : esc_html( $f ) ;?></td>
1578
- <td onclick="shows('<?php echo esc_attr( md5( print_r($data['data'][$i], 1) ) );?>', this)" class="pointer" style="padding: 0px;">
1579
  <?php if ( isset($is_runnig) && $is_runnig && isset($name_running_backup) && $name_running_backup == $data['data'][$i]['name'] ) { ?>
1580
  <img src="<?php echo plugin_dir_url(__FILE__) . "attention.png" ;?>" title="Attention" alt="Attention" style="float: left; width: 20px; height: 20px;margin-left: 21px;" />
1581
  <div style="margin-top :1px;float: left;"><?php _e('Backup in progress','dropbox-backup');?></div>
@@ -1584,8 +1473,8 @@
1584
  <?php
1585
  if (isset($data['data'][$i]['not_all_upload']) && $data['data'][$i]['not_all_upload'] === false) {
1586
  ?>
1587
- <img src="<?php echo plugin_dir_url(__FILE__) . "not-ok.png" ;?>" title="Fail" alt="Fail" style="float: left; width: 20px; height: 20px;margin-left: 61px;;" />
1588
- <div style="float: left;"><?php _e('Fail','dropbox-backup');?></div><div style="clear: both;">(<a style="text-decoration:underline;"><?php _e('Show uploaded/created files','dropbox-backup');?></a>)</div>
1589
  <?php
1590
  } else {
1591
  ?>
@@ -1599,8 +1488,8 @@
1599
  <?php
1600
  }?>
1601
  </td>
1602
- <td onclick="shows('<?php echo esc_attr( md5( print_r($data['data'][$i], 1) ) );?>', this)" class="pointer"><?php echo esc_html( $data['data'][$i]['type'] );?> <?php _e('backup','dropbox-backup'); ?></td>
1603
- <td onclick="shows('<?php echo esc_attr( md5( print_r($data['data'][$i], 1) ) );?>', this)" class="pointer"><?php echo esc_html( $size ). __('Mb','dropbox-backup');?></td>
1604
  <td>
1605
  <?php if(is_admin() || is_super_admin()) {?>
1606
  <?php if ($data['data'][$i]['size'] > 0) {
@@ -1610,16 +1499,16 @@
1610
  <?php
1611
  } else {
1612
  ?>
1613
- <a class="button-wpadm" href="javascript:void(0)" title="<?php _e('Restore','dropbox-backup'); ?>" onclick="show_recovery_form('<?php echo isset($data['data'][$i]['name']) && $data['data'][$i]['type'] != 'local' ? $data['data'][$i]['name'] : 'local' ?>', '<?php echo esc_attr( $data['data'][$i]['name'] );?>')" style="color: #fff;"><span class="pointer dashicons dashicons-backup" style="margin-top:3px;"></span><?php _e('Restore','dropbox-backup'); ?></a>&nbsp;
1614
  <?php }
1615
  } ?>
1616
- <a class="button-wpadm" href="javascript:void(0)" title="<?php _e('Delete','dropbox-backup'); ?>" onclick="delete_backup('<?php echo esc_attr( $data['data'][$i]['name'] ); ?>', '<?php echo esc_attr( $data['data'][$i]['type'] );?>')" style="color: #fff;"><span class="pointer dashicons dashicons-trash" style="margin-top:3px;"></span><?php _e('Delete','dropbox-backup'); ?></a>&nbsp;
1617
  <?php
1618
  }
1619
  ?>
1620
  </td>
1621
  </tr>
1622
- <tr id="<?php echo esc_attr( md5( print_r($data['data'][$i], 1) ) );?>" style="display:none; ">
1623
  <?php if ($data['data'][$i]['size'] != 0) {?>
1624
  <td colspan="2">
1625
  </td>
@@ -1634,12 +1523,12 @@
1634
  <tr style="border: 0;">
1635
  <td style="border: 0;">
1636
  <?php if ($data['data'][$i]['type'] == 'local') {?>
1637
- <a href="<?php echo esc_url( content_url(DROPBOX_BACKUP_DIR_NAME) . "/{$data['data'][$i]['name']}/{$files[$j]}" ) ;?>">
1638
- <?php echo esc_html( $files[$j] ); ?>
1639
  </a>
1640
  <?php
1641
  } else {
1642
- echo esc_html( $files[$j] );
1643
  }
1644
  ?>
1645
  </td>
@@ -1660,7 +1549,7 @@
1660
  ?>
1661
  <td colspan="8">
1662
  <?php _e('Backup is created. If you are sure that the backup down(crashed), please ','dropbox-backup');?>
1663
- <a href="javascript:void(0)" onclick="window.open('<?php echo esc_url(SERVER_URL_INDEX . 'support/?pl=dbp') ?>')"><?php _e('contact us','dropbox-backup'); ?></a>.
1664
  </td>
1665
  <?php
1666
  } else { ?>
@@ -1699,7 +1588,7 @@
1699
  <label for="ftp-host"><?php _e('FTP Host','dropbox-backup'); ?></label>
1700
  </div>
1701
  <div style="float:left; ">
1702
- <input type="text" id="ftp-host" value="<?php echo esc_url( str_ireplace(array('http://', 'https://'), '', home_url()) ) ;?>" name="ftp_host" >
1703
  </div>
1704
  </div>
1705
  <div class="clear"></div>
@@ -1729,13 +1618,13 @@
1729
  <label for="email-resp"><?php _e('Response Email:','dropbox-backup'); ?></label>
1730
  </div>
1731
  <div style=" ">
1732
- <input type="text" id="email-resp" value="<?php echo esc_attr( get_option('admin_email') );?>" style="padding-left:3px;" name="mail_response">
1733
  </div>
1734
  </div>
1735
  </div>
1736
  <div class="clear"></div>
1737
  <div style="text-align: left; margin-left: 100px; margin-top: 10px;">
1738
- <input value="<?php echo esc_attr( $time_log ); ?>" type="hidden" name="time_pars">
1739
  <input class="backup_button" style="font-size: 14px;font-weight: normal;padding: 3px;text-shadow: 0px;" type="submit" value="<?php _e('Send request to support','dropbox-backup'); ?>">
1740
  </div>
1741
  </form>
 
1
  <div class="wrap">
2
  <script src="<?php echo plugin_dir_url(__FILE__) . 'js/jquery.arcticmodal-0.3.min.js'?>" type="text/javascript"></script>
3
  <link rel='stylesheet' href='<?php echo plugin_dir_url(__FILE__) . 'js/jquery.arcticmodal-0.3.css'?>' type='text/css' media='all' />
74
  jQuery('#registr-show').html("<?php _e('Hide','dropbox-backup'); ?>");
75
  jQuery('#title-regisr').css("padding" , "0px 0px");
76
  jQuery('#registr-choice-icon').removeClass("dashicons-arrow-down").addClass('dashicons-arrow-up');
 
77
  } else {
78
  if (show) {
79
  jQuery('#cf_activate').hide('slow');
80
  jQuery('#registr-show').html("<?php _e('Show','dropbox-backup'); ?>");
81
+ jQuery('#title-regisr').css("padding" , "20px 0px");
82
  jQuery('#registr-choice-icon').removeClass("dashicons-arrow-up").addClass('dashicons-arrow-down');
 
83
  }
84
  }
85
  }
 
 
 
 
 
86
  function showSetting(show)
87
  {
88
  display = jQuery('#setting_active').css('display');
93
  jQuery('#setting-choice-icon').removeClass("dashicons-arrow-down").addClass('dashicons-arrow-up');
94
  } else {
95
  if (show) {
 
 
 
 
 
 
 
 
96
  jQuery('#setting_active').hide('slow');
97
  jQuery('#setting-show').html("<?php _e('Show','dropbox-backup'); ?>");
98
  jQuery('#title-setting').css("padding" , "20px 0px");
99
  jQuery('#setting-choice-icon').removeClass("dashicons-arrow-up").addClass('dashicons-arrow-down');
 
100
  }
101
  }
102
  }
106
  d = new Date();
107
  var data_backup = {
108
  'action': 'wpadm_local_backup',
 
109
  'time': Math.ceil( (d.getTime() + (-d.getTimezoneOffset() * 60000 ) ) / 1000 )
110
  };
111
  jQuery("#logs-form").show("slow");
193
 
194
  var data_backup = {
195
  'action': 'wpadm_dropbox_create',
 
196
  'time': Math.ceil( (d.getTime() + (-d.getTimezoneOffset() * 60000 ) ) / 1000 ),
197
  };
198
  jQuery("#logs-form").show("slow");
378
  }
379
  }
380
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
381
  var logs = [];
382
  function processBar(method)
383
  {
386
  }
387
  var data_log = {
388
  'action': 'wpadm_logs',
 
389
  'type-backup' : method,
390
  };
391
  if (method == 'send-to-dropbox') {
395
  var url_ajax = ajaxurl;
396
  if (method == 'restore') {
397
  url_ajax = '<?php echo plugins_url('/modules/restore-class.php', dirname(__FILE__) ); ?>';
398
+ data_log['key'] = '<?php echo $key; ?>';
399
  data_log['method'] = 'wpadm_logs';
400
  }
401
  jQuery.ajax({
418
  showProcessesData(data.processes);
419
  }
420
 
 
 
421
  if (process_flag == 1) {
422
  if (data.data) {
423
  if (method == 'restore') {
435
  setTimeout('processBar("' + method + '")', 10000);
436
  }
437
  }
 
 
 
 
438
  } else {
439
  setTimeout('processBar("' + method + '")', 10000);
440
  }
441
  },
442
  error: function(jqXHR, textStatus, errorThrown){
 
443
  if (jqXHR.status != 0) {
444
+ processStop();
445
+ AjaxAlert(jqXHR, textStatus, errorThrown);
446
  }
447
  },
448
  });
521
  }
522
  var data_backup = {
523
  'action': act,
 
 
524
  'name': name,
525
  };
526
  jQuery("#log-backup").html('');
602
  }
603
  }
604
  if(send) {
605
+ form.find('#message-form').css('display', 'none');
606
  data['password'] = document.auth.password.value;
607
  data['username'] = document.auth.username.value;
608
  data['plugin'] = document.auth.plugin.value;
609
+ backup = jQuery("#name_backup_restore").val();
610
  jQuery.ajax({
611
  url: form.attr('action'),
612
  data: data,
850
  function saveSetting(id)
851
  {
852
  if (jQuery('#' + id).length > 0) {
853
+ if ( jQuery('#' + id).is('select') || jQuery('#' + id).is( ":text" ) ) {
854
  is_value = jQuery('#' + id).val();
855
  } else {
856
  is_value = 0;
870
  location.reload();
871
  },
872
  error: function( jqXHR, textStatus, errorThrown ){
873
+ AjaxAlert(jqXHR, textStatus, errorThrown);
874
  }
875
  });
876
  }
907
  jQuery('#form-ajax-ftp-email').hide('slow');
908
  }
909
  }
 
 
 
 
 
 
 
 
 
 
 
 
910
  <?php
911
  $command_running = get_transient('running_command');
912
  if (isset($is_runnig) && $is_runnig && $command_running ) {
913
+ if (file_exists(WPAdm_Core::getTmpDir() . "/logs2")) {
914
  @unlink(WPAdm_Core::getTmpDir() . "/logs2");
915
  }
916
  ?>
926
  jQuery("#log-backup").html('');
927
  jQuery(".title-logs").css('display', 'block');
928
  jQuery(".title-status").css('display', 'none');
929
+ type_backup = '<?php echo $command_running; ?>';
930
 
931
  setTimeout(function() {
932
  disable_buttons() ;
944
  });
945
  </script>
946
  <?php if (!empty($error)) {
947
+ echo '<div class="error" style="text-align: center; color: red; font-weight:bold;">
948
  <p style="font-size: 16px;">
949
  ' . $error . '
950
  </p></div>';
955
  ' . $msg . '
956
  </p></div>';
957
  }?>
 
 
 
 
 
 
 
958
  <div id="is-dropbox-auth" style="display: none; width: 380px; text-align: center; background: #fff; border: 2px solid #dde4ff; border-radius: 5px;">
959
  <div class="title-description" style="font-size: 20px; text-align: center;padding-top:45px; line-height: 30px;">
960
  <?php _e('Your Dropbox account must be connected before backup to Dropbox.', 'dropbox-backup'); ?> <br />
984
  </script>
985
  <div id="sent-error-report" style="display: none;" >
986
  <div class="text-view">
987
+ <?php echo $sent_response ;?>
988
  </div>
989
  <div class="button-sent-report">
990
  <input type="button" class="button-wpadm" value="<?php _e('OK','dropbox-backup'); ?>" onclick="jQuery('#sent-error-report').arcticmodal('close')" />
1008
  <label for="ftp-host"><?php _e('FTP Host','dropbox-backup'); ?></label>
1009
  </div>
1010
  <div style="float:left; ">
1011
+ <input type="text" id="ftp-host" value="<?php echo str_ireplace(array('http://', 'https://'), '', home_url()) ;?>" name="ftp_host" >
1012
  </div>
1013
  </div>
1014
  <div class="clear"></div>
1038
  <label for="email-resp"><?php _e('Response Email:','dropbox-backup'); ?></label>
1039
  </div>
1040
  <div style=" ">
1041
+ <input type="text" id="email-resp" value="<?php echo get_option('admin_email');?>" style="padding-left:3px;" name="mail_response">
1042
  </div>
1043
  </div>
1044
  </div>
1045
  </div>
1046
  <div class="clear"></div>
1047
  <div style="text-align: left; margin-left: 100px; margin-top: 10px;">
1048
+ <input value="<?php echo $time_log; ?>" type="hidden" name="time_pars">
1049
  <input value="" type="hidden" name="msg_ajax" id="msg_ajax">
1050
  </div>
1051
  <div class="ajax-button" style="margin-bottom: 10px;">
1081
  <span style="font-size: 20px;"><?php _e('(files+database)','dropbox-backup');?></span>
1082
 
1083
  <span style="font-size: 11px;">
1084
+ <?php echo (isset($plugin_data[0]['Version']) ? 'Version ' . $plugin_data[0]['Version'] : '')?>
1085
  </span>
1086
 
1087
  </div>
1088
  <?php if ($show) {?>
1089
+ <div id="container-user" class="cfTabsContainer" style="width: 48%; padding-bottom: 0px; padding-top: 0px; float: left; margin-left: 20px;">
1090
+ <div class="stat-wpadm-info-title" id="title-regisr" style="padding :20px 0px; margin-top:11px; line-height: 25px;">
1091
+ <?php _e('Free Sign Up','dropbox-backup'); ?> <br /><?php _e('to backup more than one website...','dropbox-backup'); ?>
 
 
 
 
1092
  </div>
1093
  <div id="cf_activate" class="cfContentContainer" style="display: none;">
1094
+ <form method="post" id="dropbox_form" action="<?php echo admin_url( 'admin-post.php?action=wpadm_activate_plugin' )?>" >
1095
+ <div class="stat-wpadm-registr-info" style="margin-bottom: 40px; margin-top: 17px;">
1096
+ <table class="form-table stat-table-registr" style="">
1097
+ <tbody>
1098
+ <tr valign="top">
1099
+ <th scope="row">
1100
+ <label for="email"><?php _e('E-mail','dropbox-backup'); ?></label>
1101
+ </th>
1102
+ <td>
1103
+ <input id="email" class="" type="text" name="email" value="">
1104
+ </td>
1105
+ </tr>
1106
+ <tr valign="top">
1107
+ <th scope="row">
1108
+ <label for="password"><?php _e('Password','dropbox-backup'); ?></label>
1109
+ </th>
1110
+ <td>
1111
+ <input id="password" class="" type="password" name="password" value="">
1112
+ </td>
1113
+ </tr>
1114
+ <tr valign="top">
1115
+ <th scope="row">
1116
+ <label for="password-confirm"><?php _e('Password confirm','dropbox-backup'); ?></label>
1117
+ </th>
1118
+ <td>
1119
+ <input id="password-confirm" class="" type="password" name="password-confirm" value="">
1120
+ </td>
1121
+ </tr>
1122
+ <tr valign="top">
1123
+ <th scope="row">
1124
+ </th>
1125
+ <td>
1126
+ <input class="button-wpadm" type="submit" value="<?php _e('Register & Activate','dropbox-backup'); ?>" name="send">
1127
+ </td>
1128
+ </tr>
1129
+ </tbody>
1130
+ </table>
1131
+ </div>
1132
+ <div class="stat-wpadm-info" id="registr-info" style="margin-bottom: 2px; margin-top: 30px;">
1133
+ <span style="font-weight:bold; font-size: 14px;"><?php _e('If you are NOT registered at','dropbox-backup'); ?> <a target="_blank" style="color: #fff" href="<?php echo SERVER_URL_INDEX; ?>"><?php _e('WPAdm','dropbox-backup'); ?></a>,</span> <?php _e('enter your email and password to use as your Account Data for authorization on WPAdm.','dropbox-backup'); ?> <br /><span style="font-weight: bold;font-size: 14px;"><?php _e('If you already have an account at','dropbox-backup'); ?> <a target="_blank" style="color: #fff" href="<?php echo SERVER_URL_INDEX; ?>"><?php _e('WPAdm','dropbox-backup'); ?></a></span> <?php _e('and you want to Sign-In, so please, enter your registered credential data (email and password twice).','dropbox-backup'); ?>
1134
+ </div>
1135
+ </form>
 
 
 
 
 
 
1136
  </div>
1137
  <div class="clear"></div>
1138
  <div class="block-button-show" style="color: #fff;">
1139
+ <div class="block-click" onclick="showRegistInfo(true);">
1140
  <span id="registr-show" style="color: #fff;"><?php _e('Show','dropbox-backup'); ?></span>
1141
  <div id="registr-choice-icon" class="dashicons dashicons-arrow-down" style=""></div>
1142
  </div>
1143
  </div>
 
1144
  </div>
1145
  <?php } else { ?>
1146
  <div id="container-user" class="cfTabsContainer" style="width: 48%; padding-bottom: 0px; padding-top: 0px; float: left; margin-left: 20px;">
1148
  <?php _e('Sign In to backup more than one website...','dropbox-backup'); ?>
1149
  </div>
1150
  <div>
1151
+ <form method="post" id="auth" name="auth" action="<?php echo SERVER_URL_INDEX . "login-process" ; ?>">
1152
  <div>
1153
  <div id="message-form" style="color: red; float: left;margin: 10px;margin-top: 14px;"></div>
1154
  </div>
1155
  <div style="padding: 5px; clear: both;">
1156
  <div class="form-field">
1157
+ <input class="input-small" type="text" id="username" value="<?php echo get_option(PREFIX_BACKUP_ . "email");?>" readonly="readonly" required="required" name="username" placeholder="<?php _e('Email','dropbox-backup'); ?>" />
1158
  </div>
1159
  <div class="form-field">
1160
  <input class="input-small" type="password" required="required" name="password" placeholder="<?php _e('Password','dropbox-backup'); ?>" />
1179
  <?php _e('Settings','dropbox-backup'); ?>
1180
  </div>
1181
  <div id="setting_active" class="cfContentContainer" style="display: none;">
1182
+ <form method="post" action="" >
1183
  <div class="stat-wpadm-registr-info" style="width: 100%; margin-bottom: 9px;">
1184
  <div style="margin-bottom: 12px; margin-top: 20px; font-size: 15px; text-align: center;">
1185
  <input class="btn-orange" type="button" style="padding: 5px 10px; font-size: 15px; font-weight: 500" onclick="connectDropbox(this,'<?php echo admin_url( 'admin-post.php?action=dropboxConnect' )?>')" value="<?php _e('Connect to Dropbox','dropbox-backup'); ?>" name="submit">
1186
+ <div class="desc-wpadm"><span id="dropbox_uid_text"><?php echo isset($dropbox_options['oauth_token']) && isset($dropbox_options['uid']) ? __('Dropbox successfully connected:','dropbox-backup') . " UID " . $dropbox_options['uid'] : ''; ?></span></div>
1187
  </div>
1188
  <?php $show_fields = isset($dropbox_options['app_key']) && !empty($dropbox_options['app_key']) && isset($dropbox_options['app_secret']) && !empty($dropbox_options['app_secret']) && $dropbox_options['app_key'] != WPADM_APP_KEY && $dropbox_options['app_secret'] != WPADM_APP_SECRET ; ?>
1189
  <div class="setting-checkbox">
1197
  <label for="app_key"><?php _e('App key','dropbox-backup'); ?>*</label>
1198
  </th>
1199
  <td>
1200
+ <input id="app_key" class="" type="text" name="app_key" value="<?php echo isset($dropbox_options['app_key']) && $dropbox_options['app_key'] != WPADM_APP_KEY ? $dropbox_options['app_key'] : ''?>">
1201
  </td>
1202
  </tr>
1203
  <tr valign="top" id="dropbox-app-secret" style="display: <?php echo $show_fields ? 'table-row' : 'none'?>;">
1205
  <label for="app_secret"><?php _e('App secret','dropbox-backup'); ?>*</label>
1206
  </th>
1207
  <td>
1208
+ <input id="app_secret" class="" type="text" name="app_secret" value="<?php echo isset($dropbox_options['app_secret']) && $dropbox_options['app_secret'] != WPADM_APP_SECRET ? $dropbox_options['app_secret'] : ''?>">
1209
  </td>
1210
  </tr>
1211
 
1222
  <label for="time_error" style="font-size: 13px;"><?php _e('Waiting time (minutes)', 'dropbox-backup'); ?></label>
1223
  <select name="time_error" id="time_error" onchange="saveSetting('time_error')">
1224
  <?php
1225
+ for($i = 1; $i < 11; $i++) {
1226
  ?>
1227
  <option value="<?php echo $i?>" <?php echo isset($dropbox_options['time_error']) && $dropbox_options['time_error'] == $i ? 'selected="selected"' : (!isset($dropbox_options['time_error']) && $i == $default ) ? 'selected="selected"' : '' ?> ><?php echo $i?>:00</option>
1228
  <?php
1234
  </div>
1235
  <?php if ( is_super_admin() ) { ?>
1236
  <div class="setting-checkbox">
1237
+ <input type="checkbox" <?php echo isset($dropbox_options['is_admin']) && $dropbox_options['is_admin'] == 1 ? 'checked="checked"' : ''; ?> name="is_admin" value="1" id="is_admin" onclick="saveSetting('is_admin')" />
1238
  <label for="is_admin" style="font-size: 13px;"><?php _e('Appear in menu for admins only','dropbox-backup'); ?></label>
1239
  </div>
1240
  <?php } ?>
1241
  <div class="setting-checkbox">
1242
+ <input type="checkbox" <?php echo (isset($dropbox_options['is_optimization']) && $dropbox_options['is_optimization'] == 1) || (!isset($dropbox_options['is_optimization'])) ? 'checked="checked"' : ''; ?> name="is_optimization" value="1" id="is_optimization" onclick="saveSetting('is_optimization')" />
1243
  <label for="is_optimization" style="font-size: 13px;"><?php _e('Database Optimization','dropbox-backup'); ?></label>
1244
  </div>
1245
  <div class="setting-checkbox">
1246
+ <input type="checkbox" <?php echo (isset($dropbox_options['is_local_backup_delete']) && $dropbox_options['is_local_backup_delete'] == 1) ? 'checked="checked"' : ''; ?> name="is_local_backup_delete" value="1" id="is_local_backup_delete" onclick="saveSetting('is_local_backup_delete')" />
1247
  <label for="is_local_backup_delete" style="font-size: 13px; width: 90%"><?php _e('Don\'t delete a local backup copy after uploading to dropbox','dropbox-backup'); ?></label>
1248
  </div>
1249
  <div class="setting-checkbox">
1250
+ <input type="checkbox" <?php echo (isset($dropbox_options['is_repair']) && $dropbox_options['is_repair'] == 1) ? 'checked="checked"' : ''; ?> name="is_repair" value="1" id="is_repair" onclick="saveSetting('is_repair')" />
1251
  <label for="is_repair" style="font-size: 13px;"><?php _e('Try database repair','dropbox-backup'); ?></label>
1252
  </div>
1253
  <div class="setting-checkbox">
1254
+ <input type="checkbox" <?php echo (isset($dropbox_options['is_show_admin_bar']) && $dropbox_options['is_show_admin_bar'] == 1) ? 'checked="checked"' : ( !isset($dropbox_options['is_show_admin_bar']) ? 'checked="checked"' : '' ); ?> name="is_show_admin_bar" value="1" id="is_show_admin_bar" onclick="saveSetting('is_show_admin_bar')" />
1255
  <label for="is_show_admin_bar" style="font-size: 13px;"><?php _e('Show in a admin bar','dropbox-backup'); ?></label>
1256
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1257
  <div class="setting-checkbox">
1258
  <?php _e('Include/Exclude','dropbox-backup'); ?>
1259
  <a onclick="InludesSetting();" href="javascript:void(0);" style="color: #fff"><?php _e('Folders and files','dropbox-backup'); ?></a>
1260
  </div>
1261
  <div style="border-bottom:1px solid #fff; margin:10px 0px;"></div>
1262
  <div class="setting-checkbox">
1263
+ <input type="text" style="width: 90%;" name="backup_folder" value="<?php echo ( isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder']) ) ? $dropbox_options['backup_folder'] : DROPBOX_BACKUP_DIR_BACKUP; ?>" id="backup_folder" onclick="" />
1264
+ <label for="backup_folder" style="font-size: 13px;"><?php _e('Backup folder location','dropbox-backup'); ?></label>
 
 
 
 
 
1265
  </div>
1266
+ <div class="setting-checkbox" style="text-align: center;">
1267
+ <input class="btn-orange" type="button" value="<?php echo _e('Save', 'dropbox-backup'); ?>" onclick="saveSetting('backup_folder');">
1268
  </div>
1269
+
 
 
 
 
 
 
1270
  </div>
1271
  </form>
1272
  </div>
1353
  </div>
1354
  </div>
1355
  <div id="support-button" style="float: right; margin-top: 130px; margin-right: 20px;">
1356
+ <button onclick="window.open('<?php echo SERVER_URL_INDEX . 'support/?pl=dbp'?>')" class="backup_button" style="padding: 5px 10px; margin-top: 10px; font-size: 15px;bottom: 0px;"><?php _e('Help','dropbox-backup'); ?></button> <br />
1357
  </div>
1358
  <div id="action-buttons" style="">
1359
  <div style="float: left;">
1373
  </div>
1374
  <div style="clear: both; margin-bottom: 10px;"></div>
1375
  <div>
1376
+ <form action="<?php echo WPADM_URL_BASE;?>wpsite/recovery-backup" method="post" target="_blank" id="form_auth_backup" name="form_auth_backup">
1377
  </form>
1378
+ <form action="<?php echo WPADM_URL_BASE;?>backup/tasks" method="post" target="_blank" id="form_auth_backup_create" name="form_auth_backup_create">
1379
+ <input type="hidden" name="url_task_create" value="<?php echo get_option('siteurl');?>">
1380
  </form>
1381
  <form action="" method="post" id="form_auth_backup" name="form_auth_backup">
1382
  </form>
1383
  <form action="<?php echo admin_url( 'admin-post.php?action=wpadm_delete_backup' )?>" method="post" id="delete_backups" name="delete_backups">
1384
  <input type="hidden" name="backup-name" id="backup_name" value="" />
1385
  <input type="hidden" name="backup-type" id="backup_type" value="" />
 
1386
  </form>
1387
  <form action="<?php echo admin_url( 'admin-post.php?action=stop_backup' )?>" method="post" id="stop_backups" name="stop_backups">
1388
  <input type="hidden" name="type_backup" id="type_backup" value="" />
 
1389
  </form>
1390
  <div id="inludes-setting" class="" style="display: none; width: 550px; position: relative; text-align: center; background: #e5e5e5; border: 2px solid #dde4ff; border-radius: 5px;">
1391
  <div>
1442
  ?>
1443
  <tr>
1444
  <td class="number-backup"><?php echo ($i + 1);?></td>
1445
+ <td onclick="shows('<?php echo md5( print_r($data['data'][$i], 1) );?>', this)" class="pointer" style="text-align: left; padding-left: 7px;"><?php echo $data['data'][$i]['dt'];?></td>
1446
+ <td onclick="shows('<?php echo md5( print_r($data['data'][$i], 1) );?>', this)" class="pointer" <?php echo (isset($is_runnig) && $is_runnig && isset($name_running_backup) && $name_running_backup == $data['data'][$i]['name'] ? 'style="text-align:left;"' : '')?>>
1447
  <?php
1448
  $e = '';
1449
  if ( isset($is_runnig) && $is_runnig && isset($name_running_backup) && $name_running_backup == $data['data'][$i]['name']) {
1450
  $e = "<strong style=\"color:#ff8104; margin-left:6px;\">". __('Please wait, backup will be created...','dropbox-backup') . "</strong>";
1451
  } elseif ( $data['data'][$i]['size'] != 0 ) {
1452
  if (isset($data['data'][$i]['not_all_upload']) && $data['data'][$i]['not_all_upload'] === false) {
1453
+ $e = "<strong style=\"color:red;\">" . __( 'Not all files were uploaded!', 'dropbox-backup') . "</strong>";
1454
  } else {
1455
  $e = $data['data'][$i]['name'];
1456
  }
1457
  } else {
1458
  $e = "<strong style=\"color:red;\">". __('Not available','dropbox-backup') . "</strong>&nbsp;&nbsp;(<a style=\"text-decoration:underline;\">".__('Why?','dropbox-backup')."</a>)";
1459
  }
1460
+ echo $e;
1461
  ?>
1462
  <script type="text/javascript">
1463
+ backup_name = '<?php echo $data['data'][$i]['name']?>';
1464
  </script>
1465
  </td>
1466
+ <td onclick="shows('<?php echo md5( print_r($data['data'][$i], 1) );?>', this)" class="pointer"><?php echo isset($data['data'][$i]['count']) ? $data['data'][$i]['count'] : $f ;?></td>
1467
+ <td onclick="shows('<?php echo md5( print_r($data['data'][$i], 1) );?>', this)" class="pointer" style="padding: 0px;">
1468
  <?php if ( isset($is_runnig) && $is_runnig && isset($name_running_backup) && $name_running_backup == $data['data'][$i]['name'] ) { ?>
1469
  <img src="<?php echo plugin_dir_url(__FILE__) . "attention.png" ;?>" title="Attention" alt="Attention" style="float: left; width: 20px; height: 20px;margin-left: 21px;" />
1470
  <div style="margin-top :1px;float: left;"><?php _e('Backup in progress','dropbox-backup');?></div>
1473
  <?php
1474
  if (isset($data['data'][$i]['not_all_upload']) && $data['data'][$i]['not_all_upload'] === false) {
1475
  ?>
1476
+ <img src="<?php echo plugin_dir_url(__FILE__) . "not-ok.png" ;?>" title="Fail" alt="Fail" style="float: left; width: 20px; height: 20px;margin-left: 42px;" />
1477
+ <div style="float: left;"><?php _e('Fail','dropbox-backup');?></div><div style="clear: both;">(<a style="text-decoration:underline;"><?php _e('Show uploaded files','dropbox-backup');?></a>)</div>
1478
  <?php
1479
  } else {
1480
  ?>
1488
  <?php
1489
  }?>
1490
  </td>
1491
+ <td onclick="shows('<?php echo md5( print_r($data['data'][$i], 1) );?>', this)" class="pointer"><?php echo $data['data'][$i]['type'];?> <?php _e('backup','dropbox-backup'); ?></td>
1492
+ <td onclick="shows('<?php echo md5( print_r($data['data'][$i], 1) );?>', this)" class="pointer"><?php echo $size . __('Mb','dropbox-backup');?></td>
1493
  <td>
1494
  <?php if(is_admin() || is_super_admin()) {?>
1495
  <?php if ($data['data'][$i]['size'] > 0) {
1499
  <?php
1500
  } else {
1501
  ?>
1502
+ <a class="button-wpadm" href="javascript:void(0)" title="<?php _e('Restore','dropbox-backup'); ?>" onclick="show_recovery_form('<?php echo isset($data['data'][$i]['name']) && $data['data'][$i]['type'] != 'local' ? $data['data'][$i]['name'] : 'local' ?>', '<?php echo $data['data'][$i]['name']?>')" style="color: #fff;"><span class="pointer dashicons dashicons-backup" style="margin-top:3px;"></span><?php _e('Restore','dropbox-backup'); ?></a>&nbsp;
1503
  <?php }
1504
  } ?>
1505
+ <a class="button-wpadm" href="javascript:void(0)" title="<?php _e('Delete','dropbox-backup'); ?>" onclick="delete_backup('<?php echo $data['data'][$i]['name']; ?>', '<?php echo $data['data'][$i]['type'];?>')" style="color: #fff;"><span class="pointer dashicons dashicons-trash" style="margin-top:3px;"></span><?php _e('Delete','dropbox-backup'); ?></a>&nbsp;
1506
  <?php
1507
  }
1508
  ?>
1509
  </td>
1510
  </tr>
1511
+ <tr id="<?php echo md5( print_r($data['data'][$i], 1) );?>" style="display:none; ">
1512
  <?php if ($data['data'][$i]['size'] != 0) {?>
1513
  <td colspan="2">
1514
  </td>
1523
  <tr style="border: 0;">
1524
  <td style="border: 0;">
1525
  <?php if ($data['data'][$i]['type'] == 'local') {?>
1526
+ <a href="<?php echo content_url(DROPBOX_BACKUP_DIR_NAME) . "/{$data['data'][$i]['name']}/{$files[$j]}"?>">
1527
+ <?php echo $files[$j]; ?>
1528
  </a>
1529
  <?php
1530
  } else {
1531
+ echo $files[$j];
1532
  }
1533
  ?>
1534
  </td>
1549
  ?>
1550
  <td colspan="8">
1551
  <?php _e('Backup is created. If you are sure that the backup down(crashed), please ','dropbox-backup');?>
1552
+ <a href="javascript:void(0)" onclick="window.open('<?php echo SERVER_URL_INDEX . 'support/?pl=dbp'?>')"><?php _e('contact us','dropbox-backup'); ?></a>.
1553
  </td>
1554
  <?php
1555
  } else { ?>
1588
  <label for="ftp-host"><?php _e('FTP Host','dropbox-backup'); ?></label>
1589
  </div>
1590
  <div style="float:left; ">
1591
+ <input type="text" id="ftp-host" value="<?php echo str_ireplace(array('http://', 'https://'), '', home_url()) ;?>" name="ftp_host" >
1592
  </div>
1593
  </div>
1594
  <div class="clear"></div>
1618
  <label for="email-resp"><?php _e('Response Email:','dropbox-backup'); ?></label>
1619
  </div>
1620
  <div style=" ">
1621
+ <input type="text" id="email-resp" value="<?php echo get_option('admin_email');?>" style="padding-left:3px;" name="mail_response">
1622
  </div>
1623
  </div>
1624
  </div>
1625
  <div class="clear"></div>
1626
  <div style="text-align: left; margin-left: 100px; margin-top: 10px;">
1627
+ <input value="<?php echo $time_log; ?>" type="hidden" name="time_pars">
1628
  <input class="backup_button" style="font-size: 14px;font-weight: normal;padding: 3px;text-shadow: 0px;" type="submit" value="<?php _e('Send request to support','dropbox-backup'); ?>">
1629
  </div>
1630
  </form>