Backup & Restore Dropbox - Version 1.4.6.1

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.6.1
Comparing to
See all releases

Code changes from version 1.5.1.2 to 1.4.6.1

Files changed (58) hide show
  1. commands/class-wpadm-command-archive.php +26 -58
  2. commands/class-wpadm-command-mysqldump.php +21 -25
  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 +57 -76
  6. dropbox-backup.php +3 -17
  7. functions/wpadm.php +16 -120
  8. img/closebox.png +0 -0
  9. img/folder-loader.gif +0 -0
  10. img/how-to-enable-cron.png +0 -0
  11. languages/index.html +0 -10
  12. languages/index.php +0 -1
  13. libs/error.class.php +1 -5
  14. libs/lang.class.php +0 -2
  15. libs/wpadm.server.main.class.php +94 -377
  16. main/wpadm-class-wp.php +161 -482
  17. methods/class-wpadm-method-backup-delete.php +1 -12
  18. methods/class-wpadm-method-backup-list.php +10 -20
  19. methods/class-wpadm-method-backup.php +75 -171
  20. methods/class-wpadm-method-full-backup-dropbox.php +183 -217
  21. methods/class-wpadm-method-local-backup.php +292 -601
  22. methods/class-wpadm-method-local-restore.php +0 -4
  23. methods/class-wpadm-method-ping.php +1 -5
  24. methods/class-wpadm-method-queue-controller.php +4 -5
  25. methods/class-wpadm-method-reconnect.php +14 -17
  26. methods/class-wpadm-method-send-to-dropbox.php +81 -257
  27. methods/class-wpadm-method-update.php +1 -2
  28. modules/HttpFsockopen.php +0 -178
  29. modules/OAuthSimple.php +255 -256
  30. modules/archive.php +0 -784
  31. modules/class-wpadm-archive.php +13 -463
  32. modules/class-wpadm-command-context.php +0 -3
  33. modules/class-wpadm-command-factory.php +33 -41
  34. modules/class-wpadm-command.php +0 -4
  35. modules/class-wpadm-core.php +22 -47
  36. modules/class-wpadm-method-class.php +0 -2
  37. modules/class-wpadm-mysqldump.php +159 -210
  38. modules/class-wpadm-process.php +0 -100
  39. modules/class-wpadm-queue.php +36 -6
  40. modules/class-wpadm-result.php +0 -3
  41. modules/class-wpadm-running.php +98 -167
  42. modules/constant.php +1 -8
  43. modules/dropbox.class.php +177 -287
  44. modules/pclzip.lib.php +3034 -3043
  45. modules/phpseclib/index.html +0 -10
  46. modules/restore-class.php +142 -844
  47. readme.txt +16 -121
  48. template/advantage-plugin.php +0 -109
  49. template/css/admin-style-wpadm.css +85 -209
  50. template/css/file.png +0 -0
  51. template/css/file2.png +0 -0
  52. template/css/tool-bar.css +0 -97
  53. template/expsys.php +2 -3
  54. template/ico_ok.png +0 -0
  55. template/js/admin-wpadm.js +0 -160
  56. template/notice.php +2 -17
  57. template/notice5.php +0 -1
  58. template/wpadm_show_backup.php +256 -467
commands/class-wpadm-command-archive.php CHANGED
@@ -1,74 +1,44 @@
1
  <?php
2
- if ( ! defined( 'ABSPATH' ) ) exit;
3
 
4
  class WPadm_Command_Archive extends WPAdm_Сommand{
5
  public function execute(WPAdm_Command_Context $context)
6
  {
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'));
13
- $files = $context->get('files');
14
- } else {
15
- return true;
16
- }
 
 
 
17
  if ( !file_exists( $af ) ) {
18
  WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af ) );
19
  }
20
- if (file_exists($af) && filesize($af) > $context->get('max_file_size')) {
21
- if ( WPAdm_Running::is_stop() ) {
22
- $af = $this->getNextArchiveName($context->get('to_file'));
23
- unset($archive);
24
- if ( !file_exists( $af ) ) {
25
- WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af ) );
26
- }
27
- $archive = new WPAdm_Archive($af, $context->get('to_file') . '.md5');
28
- $archive->setRemovePath($context->get('remove_path'));
29
- } else {
30
- return true;
31
- }
32
- }
33
- if ( WPAdm_Running::is_stop() ) {
34
- $md5 = md5( print_r( $files, 1 ) );
35
- $files_str = implode(',', $files);
36
- $files_archive = WPAdm_Running::getCommandResultData('archive');
37
- if ( WPAdm_Running::is_stop() ) {
38
- if (!in_array($md5, $files_archive)) {
39
- if ( WPAdm_Running::is_stop() ) {
40
- $res = $archive->add($files_str);
41
- if ($res) {
42
- $files_archive = WPAdm_Running::getCommandResultData('archive');
43
- $files_archive[] = $md5;
44
- if (!empty($files_archive)) {
45
- WPAdm_Running::setCommandResultData('archive', $files_archive);
46
- WPAdm_Process::setInc( 'archiving', count($files) );
47
- }
48
- } else {
49
- $context->setError( $archive->error );
50
- return false;
51
- }
52
- } else {
53
- return true;
54
- }
55
- }
56
- } else {
57
- return true;
58
- }
59
- } else {
60
- return true;
61
  }
62
  }
63
  return true;
64
-
65
  }
66
 
67
  private function getArchiveName($name)
68
  {
69
- //WPAdm_Core::log("{$name}-*.zip");
70
  $archives = glob("{$name}-*.zip");
71
- //WPAdm_Core::log( print_r($archives, 1) );
72
  if (empty($archives)) {
73
  return "{$name}-1.zip";
74
  }
@@ -79,11 +49,9 @@ class WPadm_Command_Archive extends WPAdm_Сommand{
79
 
80
  private function getNextArchiveName($name)
81
  {
82
- //WPAdm_Core::log("{$name}-*.zip");
83
  $archives = glob("{$name}-*.zip");
84
- $n = 1 + count($archives);
85
  $a = "{$name}-{$n}.zip";
86
- //WPAdm_Core::log($a);
87
  return $a;
88
  }
89
  }
1
  <?php
2
+
3
 
4
  class WPadm_Command_Archive extends WPAdm_Сommand{
5
  public function execute(WPAdm_Command_Context $context)
6
  {
7
+ ini_set("memory_limit", "256M");
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
+ $archive = new WPAdm_Archive($af, $context->get('to_file') . '.md5');
12
+ $archive->setRemovePath($context->get('remove_path'));
13
+ $files = $context->get('files');
14
+ if ( !file_exists( $af ) ) {
15
+ WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af ) );
16
+ }
17
+ if (file_exists($af) && filesize($af) > $context->get('max_file_size')) {
18
+ $af = $this->getNextArchiveName($context->get('to_file'));
19
+ unset($archive);
20
  if ( !file_exists( $af ) ) {
21
  WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af ) );
22
  }
23
+ $archive = new WPAdm_Archive($af, $context->get('to_file') . '.md5');
24
+ $archive->setRemovePath($context->get('remove_path'));
25
+ }
26
+ $files_str = implode(',', $files);
27
+ $files_archive = WPAdm_Running::getCommandResultData('archive');
28
+ if (!in_array($files_str, $files_archive)) {
29
+ $archive->add($files_str);
30
+ $files_archive = WPAdm_Running::getCommandResultData('archive');
31
+ $files_archive[] = $files_str;
32
+ if (!empty($files_archive)) {
33
+ WPAdm_Running::setCommandResultData('archive', $files_archive);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  }
35
  }
36
  return true;
 
37
  }
38
 
39
  private function getArchiveName($name)
40
  {
 
41
  $archives = glob("{$name}-*.zip");
 
42
  if (empty($archives)) {
43
  return "{$name}-1.zip";
44
  }
49
 
50
  private function getNextArchiveName($name)
51
  {
 
52
  $archives = glob("{$name}-*.zip");
53
+ $n = 1 + count($archives);
54
  $a = "{$name}-{$n}.zip";
 
55
  return $a;
56
  }
57
  }
commands/class-wpadm-command-mysqldump.php CHANGED
@@ -1,26 +1,22 @@
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)
7
- {
8
- if ( WPAdm_Running::is_stop() ) {
9
- //WPAdm_Core::log(print_r($context, true));
10
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
11
- $mysqldump = new WPAdm_Mysqldump();
12
- $mysqldump->host = $context->get('host');
13
- $mysqldump->user = $context->get('user');
14
- $mysqldump->password = $context->get('password');
15
-
16
- try {
17
- $mysqldump->mysqldump($context->get('db'), $context->get('to_file'));
18
- } catch (Exception $e) {
19
- $context->setError($e->getMessage());
20
- return false;
21
- }
22
- }
23
- return true;
24
- }
25
- }
26
  }
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)
5
+ {
6
+ //WPAdm_Core::log(print_r($context, true));
7
+ require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
8
+ $mysqldump = new WPAdm_Mysqldump();
9
+ $mysqldump->host = $context->get('host');
10
+ $mysqldump->user = $context->get('user');
11
+ $mysqldump->password = $context->get('password');
12
+
13
+ try {
14
+ $mysqldump->mysqldump($context->get('db'), $context->get('to_file'));
15
+ } catch (Exception $e) {
16
+ $context->setError($e->getMessage());
17
+ return false;
18
+ }
19
+ return true;
20
+ }
21
+ }
 
 
 
 
22
  }
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 {
@@ -9,88 +6,72 @@ if (!class_exists('WPadm_Command_Send_To_Dropbox')) {
9
  public function execute(WPAdm_Command_Context $context)
10
  {
11
  @session_start();
12
- if ( WPAdm_Running::is_stop() ) {
13
- require_once WPAdm_Core::getPluginDir() . '/modules/dropbox.class.php';
14
 
15
- WPAdm_Core::log(__('Send to dropbox files' ,'dropbox-backup') );
16
- $dropbox = new dropbox($context->get('key'), $context->get('secret'), $context->get('token'));
17
 
18
- if (!$dropbox->isAuth()) {
19
- $context->setError( str_replace(array('%d', '%k', '%s'),
20
- array( SITE_HOME, $context->get('key'), $context->get('secret') ),__('Website "%d" can\'t authorize on Dropbox with using of "app key: %k" and "app secret: %s"' ,'dropbox-backup') ) );
21
- return false;
22
- }
23
- if ( WPAdm_Running::is_stop() ) {
24
- $files = $context->get('files');
25
- $file = explode("/", $files);
26
- $file_name = array_pop($file);
27
- $folder_project_temp = $context->get('folder_project');
28
- $folder_project = "";
29
- if (!empty($folder_project_temp)) {
30
- $folder_project = $folder_project_temp . "/";
31
- $dropbox->createDir($folder_project_temp );
32
- $dropbox->createDir($folder_project . $context->get('folder') );
33
- } else {
34
- $dropbox->createDir($context->get('folder') );
35
- }
36
- } else {
37
- return true;
38
- }
39
 
40
- $fromFile = str_replace('//', '/', $files);
41
- $toFile = str_replace('//', '/', $folder_project . $context->get('folder') . '/' . $file_name);
42
- $local = $context->get('local');
43
- $file_dropbox = $dropbox->listing($folder_project . $context->get('folder') . '/' . $file_name);
44
- $send = true;
45
- if ( !isset($file_dropbox['error']) ) {
46
- if ($file_dropbox['bytes'] != filesize($fromFile)) {
47
- if ( WPAdm_Running::is_stop() ) {
48
- $delete_file = $dropbox->deleteFile($folder_project . $context->get('folder') . '/' . $file_name);
49
- if (isset($delete_file['error'])) {
50
- $context->setError( __('Dropbox returned an error during file sending: ' ,'dropbox-backup') . '"' . $delete_file['text'] . '"');
51
- return false;
52
- }
53
- $data_error_command = WPAdm_Running::getCommandResultData('errors_sending');
54
- if (isset($data_command[$fromFile])) {
55
- $data_error_command[$fromFile]['count'] += 1;
56
- } else {
57
- $data_error_command[$fromFile] = array();
58
- $data_error_command[$fromFile]['count'] = 1;
59
- }
60
- WPAdm_Running::setCommandResultData('errors_sending', $data_error_command);
61
- }
62
- } else {
63
- $send = false;
64
  }
65
- }
66
- if ( $local ) {
67
- if ( WPAdm_Running::is_stop() ) {
68
- $data_command = WPAdm_Running::getCommandResultData('command_dropbox');
69
- $md5 = md5($fromFile);
70
- if (empty($data_command) || !in_array($md5 ,$data_command) ) {
71
- if ($send) {
72
- $res = $dropbox->uploadFile($fromFile, $toFile, true);
73
- } else {
74
- $this->saveDataCommand($md5);
75
- WPAdm_Process::setInc('dropbox', 1);
76
- }
77
- }
78
  }
 
79
  } else {
80
- $md5 = md5($fromFile);
81
- $res = $dropbox->uploadFile($fromFile, $toFile, true);
82
- }
83
- if (isset($res['error']) && isset($res['text']) && $res['error'] == 1) {
84
- $context->setError( __('Dropbox returned an error during file sending: ' ,'dropbox-backup') . '"' . $res['text'] . '"');
85
- return false;
86
  }
87
- if ( WPAdm_Running::is_stop() ) {
88
- if (isset($res['size']) && isset($res['client_mtime'])) {
89
- WPAdm_Core::log( __('File upload: ' ,'dropbox-backup') . basename( $files ) . __(' size: ' ,'dropbox-backup') . $res['size']);
90
- $this->saveDataCommand($md5);
91
- WPAdm_Process::setInc('dropbox', 1);
 
 
 
92
  }
93
  }
 
 
 
 
 
 
 
 
 
 
94
  }
95
  return true;
96
  }
1
  <?php
 
 
 
2
  if (!class_exists('WPadm_Command_Send_To_Dropbox')) {
3
 
4
  class WPadm_Command_Send_To_Dropbox extends WPAdm_Сommand {
6
  public function execute(WPAdm_Command_Context $context)
7
  {
8
  @session_start();
9
+ require_once WPAdm_Core::getPluginDir() . '/modules/dropbox.class.php';
 
10
 
11
+ WPAdm_Core::log(__('Send to dropbox files' ,'dropbox-backup') );
12
+ $dropbox = new dropbox($context->get('key'), $context->get('secret'), $context->get('token'));
13
 
14
+ if (!$dropbox->isAuth()) {
15
+ $context->setError( str_replace(array('%d', '%k', '%s'),
16
+ array( SITE_HOME, $context->get('key'), $context->get('secret') ),__('Website "%d" can\'t authorize on Dropbox with using of "app key: %k" and "app secret: %s"' ,'dropbox-backup') ) );
17
+ return false;
18
+ }
19
+ $files = $context->get('files');
20
+ $file = explode("/", $files);
21
+ $file_name = array_pop($file);
22
+ $folder_project_temp = $context->get('folder_project');
23
+ $folder_project = "";
24
+ if (!empty($folder_project_temp)) {
25
+ $folder_project = $folder_project_temp . "/";
26
+ $dropbox->createDir($folder_project_temp );
27
+ $dropbox->createDir($folder_project . $context->get('folder') );
28
+ } else {
29
+ $dropbox->createDir($context->get('folder') );
30
+ }
 
 
 
 
31
 
32
+ $fromFile = str_replace('//', '/', $files);
33
+ $toFile = str_replace('//', '/', $folder_project . $context->get('folder') . '/' . $file_name);
34
+ $local = $context->get('local');
35
+ $file_dropbox = $dropbox->listing($folder_project . $context->get('folder') . '/' . $file_name);
36
+ $send = true;
37
+ if ( !isset($file_dropbox['error']) ) {
38
+ if ($file_dropbox['bytes'] != filesize($fromFile)) {
39
+ $delete_file = $dropbox->deleteFile($folder_project . $context->get('folder') . '/' . $file_name);
40
+ if (isset($delete_file['error'])) {
41
+ $context->setError( __('Dropbox returned an error during file sending: ' ,'dropbox-backup') . '"' . $delete_file['text'] . '"');
42
+ return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  }
44
+ $data_error_command = WPAdm_Running::getCommandResultData('errors_sending');
45
+ if (isset($data_command[$fromFile])) {
46
+ $data_error_command[$fromFile]['count'] += 1;
47
+ } else {
48
+ $data_error_command[$fromFile] = array();
49
+ $data_error_command[$fromFile]['count'] = 1;
 
 
 
 
 
 
 
50
  }
51
+ WPAdm_Running::setCommandResultData('errors_sending', $data_error_command);
52
  } else {
53
+ $send = false;
 
 
 
 
 
54
  }
55
+ }
56
+ if ( $local ) {
57
+ $data_command = WPAdm_Running::getCommandResultData('command_dropbox');
58
+ if (empty($data_command) || !in_array($fromFile ,$data_command) ) {
59
+ if ($send) {
60
+ $res = $dropbox->uploadFile($fromFile, $toFile, true);
61
+ } else {
62
+ $this->saveDataCommand($fromFile);
63
  }
64
  }
65
+ } else {
66
+ $res = $dropbox->uploadFile($fromFile, $toFile, true);
67
+ }
68
+ if (isset($res['error']) && isset($res['text']) && $res['error'] == 1) {
69
+ $context->setError( __('Dropbox returned an error during file sending: ' ,'dropbox-backup') . '"' . $res['text'] . '"');
70
+ return false;
71
+ }
72
+ if (isset($res['size']) && isset($res['client_mtime'])) {
73
+ WPAdm_Core::log( __('File upload: ' ,'dropbox-backup') . basename( $files ) . __(' size: ' ,'dropbox-backup') . $res['size']);
74
+ $this->saveDataCommand($fromFile);
75
  }
76
  return true;
77
  }
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,21 +18,13 @@ 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
  {
39
  wpadm_run('dropbox-backup', dirname(__FILE__));
40
  }
41
  }
42
 
43
-
44
-
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.6.1
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
  {
27
  wpadm_run('dropbox-backup', dirname(__FILE__));
28
  }
29
  }
30
 
 
 
functions/wpadm.php CHANGED
@@ -3,46 +3,25 @@
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 +30,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 +94,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 +121,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 +187,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
+ $wpadm = new WPAdm_Core(wpadm_unpack($_POST[$request_name]), $pl, $dir);
20
+ echo '<wpadm>' . wpadm_pack($wpadm->getResult()->toArray()) . '</wpadm>';
21
+ exit;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  }
23
  }
24
+ }
25
 
26
 
27
  if ( ! function_exists( 'wpadm_unpack' )) {
30
  * @return mixed
31
  */
32
  function wpadm_unpack( $str ) {
33
+ return unserialize( base64_decode( $str ) );
 
 
 
34
  }
35
  }
36
 
37
  if ( ! function_exists('wpadm_pack')) {
38
  /**
39
+ * @param mixed $value
40
  * @return string
41
  */
42
  function wpadm_pack( $value ) {
43
+ return base64_encode( serialize ( $value ) ) ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  }
45
  }
46
 
94
  }
95
  }
96
  if (!function_exists('wpadm_getIp')) {
97
+ function wpadm_getIp()
98
+ {
99
+ $user_ip = '';
100
  if ( getenv('REMOTE_ADDR') ){
101
  $user_ip = getenv('REMOTE_ADDR');
102
  }elseif ( getenv('HTTP_FORWARDED_FOR') ){
121
  return '';
122
  }
123
  return $user_ip;
124
+ }
125
  }
126
 
127
  if ( ! function_exists('wpadm_get_blog_info')) {
187
  return $return;
188
  }
189
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
 
img/closebox.png DELETED
Binary file
img/folder-loader.gif 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,200 +122,67 @@
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)) {
 
249
  $return = array();
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) {
300
- switch (json_last_error()) {
301
- case JSON_ERROR_NONE:
302
- echo ' - No errors';
303
- break;
304
- case JSON_ERROR_DEPTH:
305
- echo ' - Maximum stack depth exceeded';
306
- break;
307
- case JSON_ERROR_STATE_MISMATCH:
308
- echo ' - Underflow or the modes mismatch';
309
- break;
310
- case JSON_ERROR_CTRL_CHAR:
311
- echo ' - Unexpected control character found';
312
- break;
313
- case JSON_ERROR_SYNTAX:
314
- echo ' - Syntax error, malformed JSON';
315
- break;
316
- case JSON_ERROR_UTF8:
317
- echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
318
- break;
319
- default:
320
- echo ' - Unknown error';
321
- break;
322
  }
323
  }
 
324
  }
325
  wp_die();
326
  }
@@ -331,15 +193,15 @@
331
  $files = array_merge(
332
  $files,
333
  array(
334
- //ABSPATH . '.htaccess',
335
  ABSPATH . 'index.php',
336
- // ABSPATH . 'license.txt',
337
- // ABSPATH . 'readme.html',
338
  ABSPATH . 'wp-activate.php',
339
  ABSPATH . 'wp-blog-header.php',
340
  ABSPATH . 'wp-comments-post.php',
341
  ABSPATH . 'wp-config.php',
342
- // ABSPATH . 'wp-config-sample.php',
343
  ABSPATH . 'wp-cron.php',
344
  ABSPATH . 'wp-links-opml.php',
345
  ABSPATH . 'wp-load.php',
@@ -348,33 +210,9 @@
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') ) {
355
- $files = array_merge( $files, array( ABSPATH . '.htaccess' ) );
356
- }
357
- if ( file_exists( ABSPATH . 'license.txt' ) ) {
358
- $files = array_merge( $files, array( ABSPATH . 'license.txt' ) );
359
- }
360
- if ( file_exists( ABSPATH . 'readme.html' ) ) {
361
- $files = array_merge( $files, array( ABSPATH . 'readme.html') );
362
- }
363
- if ( file_exists(ABSPATH . 'wp-config-sample.php') ) {
364
- $files = array_merge( $files, array( ABSPATH . 'wp-config-sample.php' ) );
365
- }
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 +231,7 @@
393
  }
394
  return $files;
395
  }
396
- public static function directoryToArray($directory, $recursive) {
397
  $array_items = array();
398
 
399
  $d = str_replace(ABSPATH, '', $directory);
@@ -403,21 +241,9 @@
403
 
404
  $d = str_replace('\\', '/', $d);
405
  $tmp = explode('/', $d);
406
- if (function_exists('mb_strtolower')) {
407
- $d1 = mb_strtolower($tmp[0]);
408
- } else {
409
- $d1 = strtolower($tmp[0]);
410
- }
411
  unset($tmp[0]);
412
- if (function_exists('mb_strtolower')) {
413
- $d2 = mb_strtolower(implode('/', $tmp));
414
- } else {
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 +290,14 @@
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 +439,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 +471,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 +491,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,37 +534,12 @@
741
  )
742
  );
743
  $res = self::setResponse($data);
744
- if (isset($res['url']) && !empty($res['url'])) {
745
- self::connectPlugin($email, $password);
746
- }
747
  }
748
  }
749
-
750
  if (isset($res['url']) && !empty($res['url'])) {
751
  header("Location: " . $res['url']);
752
  } else {
753
- header("Location: " . $_SERVER['HTTP_REFERER'] );
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
 
@@ -792,23 +560,15 @@
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
- }
802
- }
803
-
804
 
805
  $backups = array('data' => array(), 'md5' => '');
806
-
807
  $backups['data'] = self::getBackups($dir_backup, $dirs_read);
808
-
809
  $backups['data'] = array_merge($backups['data'], self::getBackups(ABSPATH . WPADM_DIR_NAME, $dirs_read) );
810
  $backups['data'] = array_merge($backups['data'], self::getBackups(WPADM_DIR_BACKUP, $dirs_read) );
811
-
812
  $backups['md5'] = md5( print_r($backups['data'] , 1) );
813
  return $backups;
814
  }
@@ -819,69 +579,33 @@
819
  if (is_dir($dir_backup)) {
820
  $i = 0;
821
  $dir_open = opendir($dir_backup);
822
- $stop_precess = WPAdm_Running::getCommandResultData('stop_process');
823
- $name_backup = isset($stop_precess['name']) ? $stop_precess['name'] : '' ;
824
  while($d = readdir($dir_open)) {
825
  if ($d != '.' && $d != '..' && is_dir($dir_backup . "/$d") && strpos($d, self::$type) !== false) {
826
- if ($d != $name_backup) {
827
- $backups[$i]['dt'] = self::getDateInName($d);
828
- $backups[$i]['name'] = "$d";
829
- if ($dirs_read === false) {
830
- $size = 0;
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';
859
- $backups[$i]['count'] = $count_zip;
860
  }
861
- $i += 1;
 
 
 
862
  }
 
863
  }
864
  }
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 +845,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")) {
@@ -1152,18 +869,18 @@
1152
  $mysqlVersion = $mysqli->db_version();
1153
  }
1154
  $upMaxExecutionTime = 0;
1155
- $newMaxExecutionTime = intval($maxExecutionTime) + 180;
1156
-
1157
  @set_time_limit( $newMaxExecutionTime );
1158
  if( ini_get('max_execution_time') == $newMaxExecutionTime ){
1159
  $upMaxExecutionTime = 1;
1160
-
1161
  }
1162
  $upMemoryLimit = 0;
1163
  $newMemoryLimit = intval($maxMemoryLimit) + 60;
1164
  ini_set('memory_limit', $newMemoryLimit.'M');
1165
  if( ini_get('memory_limit') == $newMemoryLimit ){
1166
  $upMemoryLimit = 1;
 
1167
  }
1168
  $extensions_search = array('curl', 'json', 'mysqli', 'sockets', 'zip', 'ftp');
1169
  $disabledFunctions_search = array('set_time_limit', 'curl_init', 'fsockopen', 'ftp_connect');
@@ -1172,11 +889,11 @@
1172
  $func = check_function($disabledFunctions, $disabledFunctions_search, true);
1173
 
1174
  return array('wp_version' => $wp_version, 'php_verion' => phpversion(),
1175
- 'maxExecutionTime' => $maxExecutionTime,
1176
  'extensions' => $extensions, 'disabledFunctions' => $disabledFunctions,
1177
  'mysqlVersion' => $mysqlVersion, 'upMaxExecutionTime' => $upMaxExecutionTime,
1178
  'newMaxExecutionTime' => $newMaxExecutionTime, 'upMemoryLimit' => $upMemoryLimit,
1179
- 'newMemoryLimit' => $newMemoryLimit, 'maxMemoryLimit' => $maxMemoryLimit,
1180
  'ex' => $ex, 'func' => $func, 'wp_lang' => get_option('WPLANG'),
1181
  );
1182
 
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
  public static function getDirsIncludes()
149
  {
150
+ $path = isset($_POST['path']) ? $_POST['path'] : "";
 
151
  $path_show = !empty($path) ? ltrim($path, '/') . "/" : "";
152
  $dir_to_open = ABSPATH . $path;
153
+ if (is_dir($dir_to_open)) {
154
+ $dir_open = opendir($dir_to_open);
155
  $return = array();
156
  $connect_f_d = self::createListFilesForArchive();
157
  $includes = get_option(PREFIX_BACKUP_ . "plus-path");
158
  if ($includes !== false) {
159
+ $includes = explode(',', $includes);
160
+ $n = count($includes);
161
+ $in = array();
162
+ for($i = 0; $i < $n; $i++) {
163
+ $inc = explode("/", $includes[$i]);
164
+ $f = count($inc);
165
+ $str = "";
166
+ for($j = 0; $j < $f; $j++) {
167
+ $str .= '/' . $inc[$j];
168
+ $in[$str] = $includes[$i];
169
+
170
+ }
171
  }
 
 
172
  }
173
+
 
 
174
  while( $d = readdir($dir_open) ) {
175
  if ($d != '.' && $d != '..' && !in_array($d, array('tmp', 'cache', 'temp', 'wpadm_backups', 'wpadm_backup', 'Dropbox_Backup', 'logs', 'log'))) {
176
+ $check = false;
 
177
  $check_folder = "";
178
+ if (isset($in['/' . $path_show . $d])) {
179
+ $check = true;
180
+ $check_folder = $in['/' . $path_show . $d];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  }
182
+ $return['dir'][] = array('dir' => $d, 'cache' => md5($path_show . $d), 'folder'=> $path_show . $d, 'perm' => self::perm($dir_to_open . "/" .$d), 'check' => $check, 'check_folder' => $check_folder );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  }
184
  }
185
+ echo json_encode($return);
186
  }
187
  wp_die();
188
  }
193
  $files = array_merge(
194
  $files,
195
  array(
196
+ ABSPATH . '.htaccess',
197
  ABSPATH . 'index.php',
198
+ ABSPATH . 'license.txt',
199
+ ABSPATH . 'readme.html',
200
  ABSPATH . 'wp-activate.php',
201
  ABSPATH . 'wp-blog-header.php',
202
  ABSPATH . 'wp-comments-post.php',
203
  ABSPATH . 'wp-config.php',
204
+ ABSPATH . 'wp-config-sample.php',
205
  ABSPATH . 'wp-cron.php',
206
  ABSPATH . 'wp-links-opml.php',
207
  ABSPATH . 'wp-load.php',
210
  ABSPATH . 'wp-settings.php',
211
  ABSPATH . 'wp-signup.php',
212
  ABSPATH . 'wp-trackback.php',
213
+ ABSPATH . 'xmlrpc.php',
214
  )
215
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  $folders = array_merge(
217
  $folders,
218
  array(
231
  }
232
  return $files;
233
  }
234
+ private static function directoryToArray($directory, $recursive) {
235
  $array_items = array();
236
 
237
  $d = str_replace(ABSPATH, '', $directory);
241
 
242
  $d = str_replace('\\', '/', $d);
243
  $tmp = explode('/', $d);
244
+ $d1 = mb_strtolower($tmp[0]);
 
 
 
 
245
  unset($tmp[0]);
246
+ $d2 = mb_strtolower(implode('/', $tmp));
 
 
 
 
 
 
 
 
247
  if (strpos($d2, 'cache') !== false && isset($tmp[0])&& !in_array($tmp[0], array('plugins', 'themes')) ) {
248
  return array();
249
  }
290
  public static function saveDirsIncludes()
291
  {
292
  if (isset($_POST['save']) && isset($_POST['data'])) {
293
+ $_POST['data'] = array_map('ltrimslashes', array_unique( $_POST['data'] ) );
294
+ $data_save = implode(',', $_POST['data'] );
295
+ $inludes = get_option(PREFIX_BACKUP_ . "plus-path");
296
+ if ($inludes !== false) {
297
+ update_option(PREFIX_BACKUP_ . "plus-path", $data_save);
298
+ } else {
299
+ add_option(PREFIX_BACKUP_ . "plus-path", $data_save);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
300
  }
 
301
  }
302
  wp_die();
303
  }
439
  curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
440
  self::$result = curl_exec($curl);
441
  curl_close($curl);
442
+ if ($stat) {
443
+ return unserialize(self::$result);
444
+ } else {
445
+ return json_decode(self::$result, true);
446
+ }
447
  } elseif (function_exists("fsockopen")) {
448
  if ($stat) {
449
  $url = SERVER_URL_STAT;
471
  }
472
  }
473
  self::$result = explode("\r\n\r\n", self::$result);
474
+ if ($stat) {
475
+ return unserialize(self::$result);
476
+ } else {
477
+ return json_decode(self::$result, true);
478
+ }
479
+ throw new Exception("error in data");
480
  } else {
481
  throw new Exception("unable to create socket");
482
  }
491
  public static function activatePlugin()
492
  {
493
  if (isset($_POST['email']) && isset($_POST['password']) && isset($_POST['password-confirm'])) {
494
+ $email = trim(stripslashes(strip_tags($_POST['email'])));
495
+ $password = trim(strip_tags($_POST['password']));
496
+ $password_confirm = trim(strip_tags($_POST['password-confirm']));
497
  $sent = true;
498
  if (empty($email)) {
499
  self::setError("Error, Email is empty.");
534
  )
535
  );
536
  $res = self::setResponse($data);
 
 
 
537
  }
538
  }
 
539
  if (isset($res['url']) && !empty($res['url'])) {
540
  header("Location: " . $res['url']);
541
  } else {
542
+ header("Location: " . admin_url("admin.php?page=wpadm_plugins"));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
543
  }
544
  }
545
 
560
  $name = preg_replace("|\W|", "_", $name);
561
  $name .= '-' . self::$type . '-' . date("Y_m_d_H_i");
562
 
563
+ $dir_backup = DROPBOX_BACKUP_DIR_BACKUP ;
 
 
 
 
 
 
 
 
564
 
565
  $backups = array('data' => array(), 'md5' => '');
566
+
567
  $backups['data'] = self::getBackups($dir_backup, $dirs_read);
568
+
569
  $backups['data'] = array_merge($backups['data'], self::getBackups(ABSPATH . WPADM_DIR_NAME, $dirs_read) );
570
  $backups['data'] = array_merge($backups['data'], self::getBackups(WPADM_DIR_BACKUP, $dirs_read) );
571
+
572
  $backups['md5'] = md5( print_r($backups['data'] , 1) );
573
  return $backups;
574
  }
579
  if (is_dir($dir_backup)) {
580
  $i = 0;
581
  $dir_open = opendir($dir_backup);
 
 
582
  while($d = readdir($dir_open)) {
583
  if ($d != '.' && $d != '..' && is_dir($dir_backup . "/$d") && strpos($d, self::$type) !== false) {
584
+ $backups[$i]['dt'] = self::getDateInName($d);
585
+ $backups[$i]['name'] = "$d";
586
+ if ($dirs_read === false) {
587
+ $size = 0;
588
+ $dir_b = opendir($dir_backup . "/$d");
589
+ $count_zip = 0;
590
+ $backups[$i]['files'] = "[";
591
+ while($d_b = readdir($dir_b)) {
592
+ if ($d_b != '.' && $d_b != '..' && file_exists($dir_backup . "/$d/$d_b") && ( substr($d_b, -3) == "zip" || substr($d_b, -3) == 'md5' ) ) {
593
+ $backups[$i]['files'] .= "$d_b,";
594
+ $size += filesize($dir_backup . "/$d/$d_b");
595
+ $count_zip = $count_zip + 1;
 
 
 
 
 
 
596
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
597
  }
598
+ $backups[$i]['files'] .= ']';
599
+ $backups[$i]['size'] = $size;
600
+ $backups[$i]['type'] = 'local';
601
+ $backups[$i]['count'] = $count_zip;
602
  }
603
+ $i += 1;
604
  }
605
  }
606
  }
607
  return $backups;
608
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
609
  public static function check_plugin($name = "", $version = false)
610
  {
611
  if (!empty($name)) {
845
  if (!function_exists('ltrimslashes')) {
846
  function ltrimslashes($var)
847
  {
848
+ return ltrim($var, '/');
 
 
 
 
 
 
 
849
  }
850
  }
851
  if (!function_exists("get_system_data")) {
869
  $mysqlVersion = $mysqli->db_version();
870
  }
871
  $upMaxExecutionTime = 0;
872
+ $newMaxExecutionTime = intval($maxExecutionTime) + 60;
 
873
  @set_time_limit( $newMaxExecutionTime );
874
  if( ini_get('max_execution_time') == $newMaxExecutionTime ){
875
  $upMaxExecutionTime = 1;
876
+ $maxExecutionTime = ini_get('max_execution_time');
877
  }
878
  $upMemoryLimit = 0;
879
  $newMemoryLimit = intval($maxMemoryLimit) + 60;
880
  ini_set('memory_limit', $newMemoryLimit.'M');
881
  if( ini_get('memory_limit') == $newMemoryLimit ){
882
  $upMemoryLimit = 1;
883
+ $maxMemoryLimit = ini_get('memory_limit');
884
  }
885
  $extensions_search = array('curl', 'json', 'mysqli', 'sockets', 'zip', 'ftp');
886
  $disabledFunctions_search = array('set_time_limit', 'curl_init', 'fsockopen', 'ftp_connect');
889
  $func = check_function($disabledFunctions, $disabledFunctions_search, true);
890
 
891
  return array('wp_version' => $wp_version, 'php_verion' => phpversion(),
892
+ 'maxExecutionTime' => $maxExecutionTime, 'maxMemoryLimit' => $maxMemoryLimit,
893
  'extensions' => $extensions, 'disabledFunctions' => $disabledFunctions,
894
  'mysqlVersion' => $mysqlVersion, 'upMaxExecutionTime' => $upMaxExecutionTime,
895
  'newMaxExecutionTime' => $newMaxExecutionTime, 'upMemoryLimit' => $upMemoryLimit,
896
+ 'newMemoryLimit' => $newMaxExecutionTime, 'maxMemoryLimit' => $maxMemoryLimit,
897
  'ex' => $ex, 'func' => $func, 'wp_lang' => get_option('WPLANG'),
898
  );
899
 
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
  }
@@ -17,31 +13,24 @@
17
  add_action('wp_ajax_wpadm_local_backup', array('wpadm_wp_full_backup_dropbox', 'local_backup') );
18
  add_action('wp_ajax_wpadm_dropbox_create', array('wpadm_wp_full_backup_dropbox', 'dropbox_backup_create') );
19
  add_action('wp_ajax_set_user_mail', array('wpadm_wp_full_backup_dropbox', 'setUserMail') );
20
-
21
  add_action('wp_ajax_saveSetting', array('wpadm_wp_full_backup_dropbox', 'saveSetting') );
22
 
23
 
24
  add_action('admin_post_wpadm_delete_backup', array('wpadm_wp_full_backup_dropbox', 'delete_backup') );
25
  add_action('admin_post_dropboxConnect', array('wpadm_wp_full_backup_dropbox', 'dropboxConnect') );
26
- add_action('admin_post_stop_backup', array('wpadm_wp_full_backup_dropbox', 'stopBackup') );
27
 
28
  add_action('admin_post_login-process', array('wpadm_wp_full_backup_dropbox', 'auth_user') );
29
 
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,88 +38,17 @@
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 = '';
101
- if (isset($setting_backup['params']['time'])) {
102
- $name = get_option('siteurl');
103
-
104
- $name = str_replace("http://", '', $name);
105
- $name = str_replace("https://", '', $name);
106
- $name = str_ireplace( array( 'Ä', 'ä', 'Ö', 'ö', 'ß', 'Ü', 'ü', 'å'),
107
- array('ae', 'ae', 'oe', 'oe', 's', 'ue', 'ue', 'a'),
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;
124
- }
125
  }
126
 
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
  }
135
  if ( ( isset($dropbox_options['is_admin']) && $dropbox_options['is_admin'] == 1 ) || !isset($dropbox_options['is_admin']) ) {
136
  if (!is_admin() || !is_super_admin()) {
@@ -138,14 +56,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 +108,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'])) {
@@ -218,7 +134,6 @@
218
  wp_enqueue_style('admin-wpadm', plugins_url( "/template/css/admin-style-wpadm.css", dirname( __FILE__ )) );
219
  wp_enqueue_script( 'js-admin-wpadm', plugins_url( "/template/js/admin-wpadm.js", dirname( __FILE__ ) ) );
220
  wp_enqueue_script( 'postbox' );
221
- wp_enqueue_script( 'jquery-ui-tooltip' );
222
  }
223
  wp_enqueue_style('css-admin-wpadm-toolbar', plugins_url( "/template/css/tool-bar.css", dirname( __FILE__ )) );
224
  }
@@ -226,7 +141,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);
@@ -239,64 +154,25 @@
239
  }
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,32 +187,9 @@
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();
341
  parent::$type = 'full';
342
  if (file_exists(WPAdm_Core::getTmpDir() . "/logs2")) {
@@ -344,59 +197,34 @@
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
- }
371
- }
372
-
373
- if ( (isset($res['result']) && $res['result'] != 'error') ) {
374
- if ( WPAdm_Core::dir_writeble($backup_dir) ) {
375
- WPAdm_Running::delCommandResultData("local_backup");
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) );
383
- $res['name'] = $backup->name;
384
- $res['time'] = $backup->time;
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();
392
- $res['size'] = 0;
393
- }
394
  } else {
395
- $res['result'] = 'error';
396
- $res['error'] = str_replace(array('%domain', '%dir-backup'), array(SITE_HOME, $backup_dir), __('Website "%domain" returned an error during file creation: Failed to create file, please check the permissions on the folder "%dir-backup".','dropbox-backup') );
 
397
  $res['data'] = array();
398
  $res['size'] = 0;
399
  }
 
 
 
 
 
400
  }
401
 
402
  @session_start();
@@ -404,54 +232,16 @@
404
  wp_die();
405
 
406
  }
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";
414
- require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-process.php";
415
  $backup = new WPAdm_Core(array('method' => "local"), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
416
  $log = WPAdm_Core::getLog();
417
  $log2 = WPAdm_Core::getTmpDir() . "/logs2";
418
- $log_array = array();
419
- if ( file_exists($log2) ) {
420
  $text = @file_get_contents($log2);
421
- if ($text == $log) {
422
- $circle = WPAdm_Running::getCommandResultData( 'circle' );
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
- }
431
- }
432
- $log_array['circle'] = self::$circle;
433
- if ( $circle['count'] <= self::$circle ) {
434
- $circle['count']++;
435
- $circle['time'] = time();
436
- WPAdm_Running::setCommandResultData( 'circle', $circle );
437
- } else {
438
- $date_systm = get_system_data();
439
- $error_msg = __('There is not enough script running time to perform backup operations, please increase the PHP variable max_execution_time.', 'dropbox-backup');
440
- if ( $date_systm['upMemoryLimit'] == 0 ) {
441
- $error_msg = __('There is not enough memory to perform archiving of big files and continue backup operations, please increase the PHP variable memory_limit.', 'dropbox-backup');
442
- }
443
- $log_array['data'] = array(
444
- 'result' => 'error',
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 {
453
- WPAdm_Running::setCommandResultData( 'circle', array( 'count' => 0, 'time' => time() ) );
454
- }
455
  file_put_contents($log2, $log);
456
  $log = str_replace($text, "", $log);
457
  } else {
@@ -459,25 +249,12 @@
459
  }
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);
475
- }
476
- }
477
- $log_array['processes'] = WPAdm_Process::getAll();
478
- if (defined('WP_CRON_LOCK_TIMEOUT')) {
479
- $log_array['lock_cron'] = WP_CRON_LOCK_TIMEOUT;
480
- }
481
  echo json_encode( $log_array );
482
  exit;
483
  }
@@ -489,7 +266,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 +285,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 +337,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,67 +384,45 @@
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
 
673
  protected static function getPluginName()
@@ -686,37 +441,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,9 +485,7 @@
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();
734
 
735
  $log = new WPAdm_Core(array('method' => "local"), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
@@ -738,23 +494,12 @@
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;
@@ -773,27 +518,14 @@
773
  $send_to_dropbox = false;
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;
783
- }
784
- }
785
-
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,8 +547,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
  ),
822
  'full_backup_dropbox', WPAdm_Core::$pl_dir) ;
@@ -828,9 +559,9 @@
828
  $res['result'] = 'error';
829
  @rename(WPAdm_Core::getTmpDir() . "/logs2", WPAdm_Core::getTmpDir() . "/logs_error_" . $backup_local->time);
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();
@@ -839,7 +570,7 @@
839
  }
840
  } else {
841
  $res['result'] = 'error';
842
- $res['error'] = str_replace(array('%domain', '%dir-backup'), array(SITE_HOME, $backup_dir), __('Website "%domain" returned an error during file creation: Failed to create file, please check the permissions on the folder "%dir-backup".','dropbox-backup') );
843
  $res['data'] = array();
844
  $res['size'] = 0;
845
  }
@@ -852,20 +583,20 @@
852
  $folder_project = str_ireplace( array("http://", "https://"), '', home_url() );
853
  $folder_project = str_ireplace( array( "-", '/', '.'), '_', $folder_project );
854
  $folder_project = str_ireplace( array( 'Ä', 'ä', 'Ö', 'ö', 'ß', 'Ü', 'ü', 'å'),
855
- array('ae', 'ae', 'oe', 'oe', 's', 'ue', 'ue', 'a'),
856
- $folder_project );
857
  return $folder_project;
858
  }
859
 
 
860
  public static function wpadm_show_backup()
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();
@@ -874,35 +605,33 @@
874
  $data['data'] = array();
875
  $not_all_upload = false;
876
  for($i = 0; $i < $n; $i++) {
877
- if ($name_backup != $backups['items'][$i]['name']) {
878
- $backup = $dropbox->listing($folder_project . "/" . $backups['items'][$i]['name']);
879
- $data['data'][$i]['name'] = $backups['items'][$i]['name'];
880
- $data['data'][$i]['size'] = (float)$backup['size'] * 1024 * 1024;
881
- $data['data'][$i]['dt'] = parent::getDateInName($backups['items'][$i]['name']);
882
- $data['data'][$i]['count'] = count($backup['items']);
883
- $data['data'][$i]['type'] = 'dropbox';
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
- }
891
- $data['data'][$i]['files'] .= $backup['items'][$j]['name'] . ',';
892
  }
 
893
  }
894
- $data['data'][$i]['not_all_upload'] = $not_all_upload;
895
  }
 
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();
@@ -950,64 +679,46 @@
950
  $name_running_backup = preg_replace("|\W|", "_", $name_running_backup);
951
  $name_running_backup .= '-' . wpadm_class::$type . '-' . date("Y_m_d_H_i", $running_backup['params']['time']);
952
  }
953
-
954
- $backu_dir = DROPBOX_BACKUP_DIR_BACKUP;
955
- if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
956
- $backu_dir = $dropbox_options['backup_folder'];
957
- }
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
  }
970
  }
971
-
972
  $show = !get_option('wpadm_pub_key') && is_super_admin();
973
  $error = parent::getError(true);
974
- if ( !empty( WPAdm_Core::$error ) ) {
975
- $error .= '<br />' . WPAdm_Core::$error;
976
- }
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();
992
  }
993
 
 
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 +735,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 +754,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 +773,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 +789,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
  }
13
  add_action('wp_ajax_wpadm_local_backup', array('wpadm_wp_full_backup_dropbox', 'local_backup') );
14
  add_action('wp_ajax_wpadm_dropbox_create', array('wpadm_wp_full_backup_dropbox', 'dropbox_backup_create') );
15
  add_action('wp_ajax_set_user_mail', array('wpadm_wp_full_backup_dropbox', 'setUserMail') );
16
+ add_action('wp_ajax_stop_backup', array('wpadm_wp_full_backup_dropbox', 'stopBackup') );
17
  add_action('wp_ajax_saveSetting', array('wpadm_wp_full_backup_dropbox', 'saveSetting') );
18
 
19
 
20
  add_action('admin_post_wpadm_delete_backup', array('wpadm_wp_full_backup_dropbox', 'delete_backup') );
21
  add_action('admin_post_dropboxConnect', array('wpadm_wp_full_backup_dropbox', 'dropboxConnect') );
 
22
 
23
  add_action('admin_post_login-process', array('wpadm_wp_full_backup_dropbox', 'auth_user') );
24
 
25
  add_action('admin_post_wpadm_download', array('wpadm_wp_full_backup_dropbox', 'download') );
26
  add_action('init', array('wpadm_wp_full_backup_dropbox', 'init'), 10 );
27
 
28
+ add_action('admin_notices', array('wpadm_wp_full_backup_dropbox', 'notice'));
29
+ add_action('admin_notices', array('wpadm_wp_full_backup_dropbox', 'notice_stars'));
 
 
 
 
 
 
30
  add_action('admin_post_hide_notice', array('wpadm_wp_full_backup_dropbox', 'hide_notice') );
31
  add_action( 'admin_bar_menu', array('wpadm_wp_full_backup_dropbox', 'add_link_to_admin_bar') ,999 );
32
 
33
+ @set_time_limit(0);
34
 
35
  class wpadm_wp_full_backup_dropbox extends wpadm_class {
36
 
38
 
39
  const MIN_PASSWORD = 6;
40
 
41
+ static function stopBackup()
 
 
 
 
 
 
42
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  WPAdm_Running::init_params_default();
 
 
 
 
 
44
  }
45
 
46
  static function add_link_to_admin_bar($wp_admin_bar)
47
  {
48
  $show = true;
49
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
50
+ if ($dropbox_options) {
51
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
 
52
  }
53
  if ( ( isset($dropbox_options['is_admin']) && $dropbox_options['is_admin'] == 1 ) || !isset($dropbox_options['is_admin']) ) {
54
  if (!is_admin() || !is_super_admin()) {
56
  }
57
  }
58
  if ($show) {
59
+ $wp_admin_bar->add_node( array(
60
+ 'id' => 'dropbox-backup',
61
+ 'title' => 'Dropbox backup',
62
+ 'href' => esc_url( admin_url("admin.php?page=wpadm_wp_full_backup_dropbox") ),
63
+ 'meta' => array('class' => 'dropbox-image-toolbar')
64
+ ));
 
 
65
  }
66
 
67
  }
108
  if(!function_exists("wp_safe_remote_post")) {
109
  include ABSPATH . "/http.php";
110
  }
111
+ $res = wp_safe_remote_post(SERVER_URL_INDEX, array('username' => $_POST['username'], 'password' => $_POST['password'], 'plugin' => 'dropbox-backup'));
112
  if (!Empty($res['body'])) {
113
  $data_res = json_decode($res['body']);
114
  if (isset($data_res['url'])) {
134
  wp_enqueue_style('admin-wpadm', plugins_url( "/template/css/admin-style-wpadm.css", dirname( __FILE__ )) );
135
  wp_enqueue_script( 'js-admin-wpadm', plugins_url( "/template/js/admin-wpadm.js", dirname( __FILE__ ) ) );
136
  wp_enqueue_script( 'postbox' );
 
137
  }
138
  wp_enqueue_style('css-admin-wpadm-toolbar', plugins_url( "/template/css/tool-bar.css", dirname( __FILE__ )) );
139
  }
141
  public static function setUserMail()
142
  {
143
  if (isset($_POST['email'])) {
144
+ $email = trim($_POST['email']);
145
  $mail = get_option(PREFIX_BACKUP_ . "email");
146
  if ($mail) {
147
  add_option(PREFIX_BACKUP_ . "email", $email);
154
  }
155
  public static function saveSetting()
156
  {
157
+ if (isset($_POST['is_admin']) || isset($_POST['is_optimization']) || isset($_POST['is_local_backup_delete']) || isset($_POST['is_repair']) ) {
 
 
158
 
159
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
160
+ if ($dropbox_options) {
161
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
 
162
  }
163
  if (isset($_POST['is_admin'])) {
164
+ $dropbox_options['is_admin'] = (int) $_POST['is_admin'];
165
  }
166
  if (isset($_POST['is_optimization'])) {
167
+ $dropbox_options['is_optimization'] = (int) $_POST['is_optimization'];
168
  }
169
  if (isset($_POST['is_local_backup_delete'])) {
170
+ $dropbox_options['is_local_backup_delete'] = (int) $_POST['is_local_backup_delete'];
171
  }
172
  if (isset($_POST['is_repair'])) {
173
+ $dropbox_options['is_repair'] = (int) $_POST['is_repair'];
174
  }
175
+ update_option(PREFIX_BACKUP_ . 'dropbox-setting', base64_encode( serialize( $dropbox_options ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  }
177
  }
178
 
187
  return $dropbox_options;
188
  }
189
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  public static function local_backup()
191
  {
 
192
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
 
193
  @session_write_close();
194
  parent::$type = 'full';
195
  if (file_exists(WPAdm_Core::getTmpDir() . "/logs2")) {
197
  }
198
  if (file_exists(WPAdm_Core::getTmpDir() . "/log.log")) {
199
  file_put_contents(WPAdm_Core::getTmpDir() . "/log.log", '');
200
+ }
201
+ WPAdm_Core::mkdir(DROPBOX_BACKUP_DIR_BACKUP);
 
 
 
 
 
 
 
 
 
 
 
 
202
  WPAdm_Running::init_params_default();
203
+ if ( WPAdm_Core::dir_writeble(DROPBOX_BACKUP_DIR_BACKUP) ) {
204
+ WPAdm_Running::delCommandResultData("local_backup");
205
+ $dropbox_options = self::getSettings();
206
+ $optimization = (isset($dropbox_options['is_optimization']) && $dropbox_options['is_optimization'] == 1) || (!isset($dropbox_options['is_optimization'])) ? 1 : 0;
207
+ $repair = (isset($dropbox_options['is_repair']) && $dropbox_options['is_repair'] == 1) ? 1 : 0;
208
+ $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);
209
+ if (WPAdm_Core::$cron === false) {
210
+ $res = $backup->getResult()->toArray();
211
+ $res['md5_data'] = md5( print_r($res, 1) );
212
+ $res['name'] = $backup->name;
213
+ $res['time'] = $backup->time;
214
+ $res['type'] = 'local';
215
+ $res['counts'] = count($res['data']);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  } else {
217
+ set_transient('running_command', 'local_backup', 0);
218
+ $res['result'] = 'work';
219
+ $res['error'] = '';
220
  $res['data'] = array();
221
  $res['size'] = 0;
222
  }
223
+ } else {
224
+ $res['result'] = 'error';
225
+ $res['error'] = str_replace(array('%domain', '%dir-backup'), array(SITE_HOME, DROPBOX_BACKUP_DIR_BACKUP), __('Website "%domain" returned an error during file creation: Failed to create file, please check the permissions on the folder "%dir-backup".','dropbox-backup') );
226
+ $res['data'] = array();
227
+ $res['size'] = 0;
228
  }
229
 
230
  @session_start();
232
  wp_die();
233
 
234
  }
 
235
  public static function getLog()
236
  {
 
237
  @session_write_close();
238
  @session_start();
239
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
 
240
  $backup = new WPAdm_Core(array('method' => "local"), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
241
  $log = WPAdm_Core::getLog();
242
  $log2 = WPAdm_Core::getTmpDir() . "/logs2";
243
+ if (file_exists($log2)) {
 
244
  $text = @file_get_contents($log2);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  file_put_contents($log2, $log);
246
  $log = str_replace($text, "", $log);
247
  } else {
249
  }
250
  $log = explode("\n", $log);
251
  krsort($log);
252
+ $log_array = array('log' => $log );
253
+ $data_result = WPAdm_Running::getCommandResultData($_POST['type-backup']);
 
254
  if (!empty($data_result)) {
255
  $log_array['data'] = $data_result;
256
  set_transient('drb_running', 0, 1);
257
  }
 
 
 
 
 
 
 
 
 
 
 
 
258
  echo json_encode( $log_array );
259
  exit;
260
  }
266
  if (file_exists(WPAdm_Core::getTmpDir() . "/logs2")) {
267
  @unlink(WPAdm_Core::getTmpDir() . "/logs2");
268
  }
269
+ $name_backup = isset($_POST['name']) ? trim($_POST['name']) : "";
270
  $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);
271
  $res = $backup->getResult()->toArray();
272
  @session_start();
285
  @unlink(WPAdm_Core::getTmpDir() . "/log.log");
286
  }
287
  WPAdm_Core::log( __('Start Restore from Dropbox cloud' ,'dropbox-backup')) ;
288
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
289
+ if ($dropbox_options) {
290
  require_once DRBBACKUP_BASE_DIR. "/modules/dropbox.class.php";
291
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
292
  $folder_project = self::getNameProject();
293
  $dropbox = new dropbox($dropbox_options['app_key'], $dropbox_options['app_secret'], $dropbox_options['auth_token_secret']);
294
  if ($dropbox->isAuth()) {
295
  WPAdm_Core::mkdir(DROPBOX_BACKUP_DIR_BACKUP);
296
+ $name_backup = isset($_POST['name']) ? trim($_POST['name']) : "";
297
  $dir_backup = DROPBOX_BACKUP_DIR_BACKUP . "/$name_backup";
298
  $error = WPAdm_Core::mkdir($dir_backup);
299
  if (!empty($error)) {
337
  public static function download()
338
  {
339
  if (isset($_REQUEST['backup'])) {
 
340
  require_once DRBBACKUP_BASE_DIR . "/class-wpadm-core.php";
341
  require_once DRBBACKUP_BASE_DIR . '/modules/pclzip.lib.php';
342
  $backup = new WPAdm_Core(array('method' => "local"), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
343
+ $filename = $_REQUEST['backup'] . ".zip";
344
  $file = WPAdm_Core::getTmpDir() . "/" . $filename;
345
  if (file_exists($file)) {
346
  @unlink($file);
347
  }
348
  $archive = new PclZip($file);
349
+ $dir_backup = DROPBOX_BACKUP_DIR_BACKUP . '/' . $_REQUEST['backup'];
350
 
351
  $backups = array('data' => array(), 'md5' => '');
352
  if (is_dir($dir_backup)) {
384
  }
385
  }
386
 
387
+ public static function delete_backup()
388
  {
389
+ if (isset($_POST['backup-type']) ) {
390
+ if ($_POST['backup-type'] == 'local') {
391
+ require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
392
+ $dir = DROPBOX_BACKUP_DIR_BACKUP . '/' . $_POST['backup-name'] ;
393
+ $delete = false;
394
+ if (is_dir($dir)) {
395
+ WPAdm_Core::rmdir($dir);
396
+ $delete = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
397
  }
398
+ $dir = ABSPATH . WPADM_DIR_NAME . '/' . $_POST['backup-name'] ;
399
+ if (is_dir($dir)) {
400
+ WPAdm_Core::rmdir($dir);
401
+ $delete = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
402
  }
403
+ $dir = WPADM_DIR_BACKUP . '/' . $_POST['backup-name'] ;
404
+ if (is_dir($dir)) {
405
+ WPAdm_Core::rmdir($dir);
406
+ $delete = true;
407
+ }
408
+ if ($delete) {
409
+ parent::setMessage( str_replace('%s', $_POST['backup-name'], __('Backup(%s) was deleted','dropbox-backup') ) );
410
+ }
411
+ } elseif ($_POST['backup-type'] == 'dropbox') {
412
+ require_once DRBBACKUP_BASE_DIR . "/modules/dropbox.class.php";
413
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
414
+ if ($dropbox_options) {
415
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
416
+ $dropbox = new dropbox($dropbox_options['app_key'], $dropbox_options['app_secret'], $dropbox_options['auth_token_secret']);
417
+ $folder_project = self::getNameProject();
418
+ $res = $dropbox->deleteFile("$folder_project/{$_POST['backup-name']}");
419
+ if ($res['is_deleted'] === true) {
420
+ parent::setMessage( str_replace('%s', $_POST['backup-name'], __('Backup(%s) was deleted','dropbox-backup') ) );
421
+ }
422
+ }
423
+ }
424
  }
425
+ header("Location: " . admin_url("admin.php?page=wpadm_wp_full_backup_dropbox"));
426
  }
427
 
428
  protected static function getPluginName()
441
  require_once DRBBACKUP_BASE_DIR . "/modules/dropbox.class.php";
442
  if (isset($_GET['app_key']) && isset($_GET['app_secret'])) {
443
  if (empty($_GET['app_key']) && empty($_GET['app_secret'])) {
444
+ $_GET['app_key'] = WPADM_APP_KEY;
445
+ $_GET['app_secret'] = WPADM_APP_SECRET;
 
 
 
446
  }
447
+ $dropbox = new dropbox($_GET['app_key'], $_GET['app_secret']);
448
+ $_SESSION['dropbox_key'] = $_GET['app_key'];
449
+ $_SESSION['dropbox_secret'] = $_GET['app_secret'];
450
  $_SESSION['dropbox_request_token'] = $dropbox->getRequestToken();
451
  echo '<script>window.location.href="' . $dropbox->generateAuthUrl( admin_url('admin-post.php?action=dropboxConnect') ) . '";</script>';
452
  } elseif (isset($_GET['oauth_token']) && isset($_GET['uid'])) {
453
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
454
+ if ($dropbox_options) {
455
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
456
+ } else {
457
+ $dropbox_options = array();
458
+ add_option(PREFIX_BACKUP_ . 'dropbox-setting', base64_encode(serialize( $dropbox_options ) ) );
459
+ }
460
  $dropbox = new dropbox(@$_SESSION['dropbox_key'], @$_SESSION['dropbox_secret']);
461
  $access_token = $dropbox->getAccessToken($_SESSION['dropbox_request_token']);
462
  $dropbox_options['app_key'] = @$_SESSION['dropbox_key'] ;
463
  $dropbox_options['app_secret'] = @$_SESSION['dropbox_secret'] ;
464
  $dropbox_options['auth_token_secret'] = $access_token;
465
+ $dropbox_options['oauth_token'] = @$_GET['oauth_token'] ;
466
+ $dropbox_options['uid'] = @$_GET['uid'] ;
467
+ update_option(PREFIX_BACKUP_ . 'dropbox-setting', base64_encode( serialize( $dropbox_options ) ) );
468
  echo '<script>
469
  if(window.opener){
470
+ window.opener.connectDropbox(null, null, "'.htmlspecialchars($access_token['oauth_token_secret']).'", "'.htmlspecialchars($access_token['oauth_token']).'", "'.htmlspecialchars($access_token['uid']).'");window.close();
471
  }else{
472
  window.location.href="' . admin_url("admin.php?page=wpadm_wp_full_backup_dropbox") . '";
473
  }
474
  </script>';
475
  echo '<script>window.close();</script>';exit;
476
  } elseif (isset($_GET['not_approved'])) {
477
+ if( $_GET['not_approved'] == 'true' ){
478
  echo '<script>window.close();</script>';exit;
479
  }
480
  } else {
485
 
486
  public static function dropbox_backup_create()
487
  {
 
488
  require_once DRBBACKUP_BASE_DIR . "/modules/class-wpadm-core.php";
 
489
  @session_write_close();
490
 
491
  $log = new WPAdm_Core(array('method' => "local"), 'full_backup_dropbox', WPAdm_Core::$pl_dir);
494
  }
495
  if (file_exists(WPAdm_Core::getTmpDir() . "/log.log")) {
496
  file_put_contents(WPAdm_Core::getTmpDir() . "/log.log", '');
497
+ }
498
+ if ( WPAdm_Core::dir_writeble(DROPBOX_BACKUP_DIR_BACKUP) ) {
499
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
 
 
 
 
 
 
 
 
 
 
 
 
500
  $send_to_dropbox = true;
501
  if ($dropbox_options) {
502
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
503
  if (!isset($dropbox_options['app_key'])) {
504
  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') ) );
505
  $send_to_dropbox = false;
518
  $send_to_dropbox = false;
519
  }
520
 
 
 
 
 
 
 
 
 
 
 
521
  if ($send_to_dropbox) {
522
  parent::$type = 'full';
523
  WPAdm_Running::init_params_default();
 
524
  WPAdm_Running::delCommandResultData("local_backup");
 
525
  $dropbox_options = self::getSettings();
526
  $optimization = (isset($dropbox_options['is_optimization']) && $dropbox_options['is_optimization'] == 1) || (!isset($dropbox_options['is_optimization'])) ? 1 : 0;
527
  $repair = (isset($dropbox_options['is_repair']) && $dropbox_options['is_repair'] == 1) ? 1 : 0;
528
+ $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);
 
529
  $res = array();
530
  if (WPAdm_Core::$cron === false) {
531
  $res = $backup->getResult()->toArray();
547
  'token' => $dropbox_options['auth_token_secret'],
548
  'dir' => isset($res['name']) ? $res['name'] : '',
549
  'folder' => $folder_project),
550
+ 'time' => @$_POST['time'],
 
551
  )
552
  ),
553
  'full_backup_dropbox', WPAdm_Core::$pl_dir) ;
559
  $res['result'] = 'error';
560
  @rename(WPAdm_Core::getTmpDir() . "/logs2", WPAdm_Core::getTmpDir() . "/logs_error_" . $backup_local->time);
561
  }
562
+ WPAdm_Core::rmdir( DROPBOX_BACKUP_DIR_BACKUP . "/{$res['name']}");
563
  } else {
564
+ set_transient('running_command', 'send-to-dropbox', 0);
565
  $res['result'] = 'work';
566
  $res['error'] = '';
567
  $res['data'] = array();
570
  }
571
  } else {
572
  $res['result'] = 'error';
573
+ $res['error'] = str_replace(array('%domain', '%dir-backup'), array(SITE_HOME, DROPBOX_BACKUP_DIR_BACKUP), __('Website "%domain" returned an error during file creation: Failed to create file, please check the permissions on the folder "%dir-backup".','dropbox-backup') );
574
  $res['data'] = array();
575
  $res['size'] = 0;
576
  }
583
  $folder_project = str_ireplace( array("http://", "https://"), '', home_url() );
584
  $folder_project = str_ireplace( array( "-", '/', '.'), '_', $folder_project );
585
  $folder_project = str_ireplace( array( 'Ä', 'ä', 'Ö', 'ö', 'ß', 'Ü', 'ü', 'å'),
586
+ array('ae', 'ae', 'oe', 'oe', 's', 'ue', 'ue', 'a'),
587
+ $folder_project );
588
  return $folder_project;
589
  }
590
 
591
+
592
  public static function wpadm_show_backup()
593
  {
594
+
595
  require_once DRBBACKUP_BASE_DIR. "/modules/dropbox.class.php";
596
  parent::$type = 'full';
597
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
 
 
 
598
  if ($dropbox_options) {
599
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
600
  if (isset($dropbox_options['app_key']) && isset($dropbox_options['app_secret']) && isset($dropbox_options['auth_token_secret'])) {
601
  $dropbox = new dropbox($dropbox_options['app_key'], $dropbox_options['app_secret'], $dropbox_options['auth_token_secret']);
602
  $folder_project = self::getNameProject();
605
  $data['data'] = array();
606
  $not_all_upload = false;
607
  for($i = 0; $i < $n; $i++) {
608
+ $backup = $dropbox->listing($folder_project . "/" . $backups['items'][$i]['name']);
609
+ $data['data'][$i]['name'] = $backups['items'][$i]['name'];
610
+ $data['data'][$i]['size'] = (float)$backup['size'] * 1024 * 1024;
611
+ $data['data'][$i]['dt'] = parent::getDateInName($backups['items'][$i]['name']);
612
+ $data['data'][$i]['count'] = count($backup['items']);
613
+ $data['data'][$i]['type'] = 'dropbox';
614
+ $k = $data['data'][$i]['count'];
615
+ $data['data'][$i]['files'] = '[';
616
+ for($j = 0; $j < $k; $j++) {
617
+ if ( strpos($backup['items'][$j]['name'] , '.md5') !== false || strpos($backup['items'][$j]['name'] , '.zip') !== true ) {
618
+ if ( strpos($backup['items'][$j]['name'] , '.md5') !== false ) {
619
+ $not_all_upload = true;
 
 
 
620
  }
621
+ $data['data'][$i]['files'] .= $backup['items'][$j]['name'] . ',';
622
  }
 
623
  }
624
+ $data['data'][$i]['not_all_upload'] = $not_all_upload;
625
  }
626
  }
627
  }
628
+ if (isset($_GET['pay']) && $_GET['pay'] == 'success') {
629
  if (!file_exists(WPAdm_Core::getTmpDir() . "/pay_success")) {
630
  file_put_contents(WPAdm_Core::getTmpDir() . "/pay_success", 1);
631
  parent::setMessage( 'Checkout was successfully' );
632
  }
633
  }
634
+ if (isset($_GET['pay']) && $_GET['pay'] == 'cancel') {
635
  parent::setError( __('Checkout was canceled','dropbox-backup') );
636
  }
637
  $data_local = parent::read_backups();
679
  $name_running_backup = preg_replace("|\W|", "_", $name_running_backup);
680
  $name_running_backup .= '-' . wpadm_class::$type . '-' . date("Y_m_d_H_i", $running_backup['params']['time']);
681
  }
682
+
683
+ if ( !file_exists( DROPBOX_BACKUP_DIR_BACKUP . '/local-key') ) {
684
+ WPAdm_Core::mkdir(DROPBOX_BACKUP_DIR_BACKUP);
 
 
 
 
685
  $key = md5(time() . 'wpadm-key');
686
+ file_put_contents(DROPBOX_BACKUP_DIR_BACKUP . '/local-key', wpadm_pack(array('key' => $key, 'time-update' => time() + 3600) ));
687
  } else {
688
+ $key_values = wpadm_unpack( file_get_contents(DROPBOX_BACKUP_DIR_BACKUP . '/local-key') );
689
+ if (isset($key_values['time-update']) && $key_values['time-update'] <= time()) {
690
+ $key = md5(time() . 'wpadm-key');
691
+ file_put_contents(DROPBOX_BACKUP_DIR_BACKUP . '/local-key', wpadm_pack(array('key' => $key, 'time-update' => time() + 3600) ));
692
  } else {
693
  $key = $key_values['key'];
694
  }
695
  }
696
+
697
  $show = !get_option('wpadm_pub_key') && is_super_admin();
698
  $error = parent::getError(true);
 
 
 
699
  $msg = parent::getMessage(true);
 
700
  $base_path = DRBBACKUP_BASE_DIR ;
 
 
 
 
 
 
 
 
 
701
  ob_start();
702
  require_once $base_path . DIRECTORY_SEPARATOR . "template" . DIRECTORY_SEPARATOR . "wpadm_show_backup.php";
703
  echo ob_get_clean();
704
  }
705
 
706
+
707
  public static function draw_menu()
708
  {
709
  $show = true;
710
+ $dropbox_options = get_option(PREFIX_BACKUP_ . 'dropbox-setting');
711
+ if ($dropbox_options) {
712
+ $dropbox_options = unserialize( base64_decode( $dropbox_options ) );
713
+ }
714
  if ( ( isset($dropbox_options['is_admin']) && $dropbox_options['is_admin'] == 1 ) || !isset($dropbox_options['is_admin']) ) {
715
  if (!is_admin() || !is_super_admin()) {
716
  $show = false;
717
  }
 
 
 
 
718
  }
719
  if ($show) {
720
  $menu_position = '1.9998887771';
721
+ if(self::checkInstallWpadmPlugins()) {
722
  $page = add_menu_page(
723
  'WPAdm',
724
  'WPAdm',
735
  'read',
736
  'wpadm_wp_full_backup_dropbox',
737
  array('wpadm_wp_full_backup_dropbox', 'wpadm_show_backup')
738
+ );
739
+ } else {
740
  $page = add_menu_page(
741
  'Dropbox Full Backup',
742
  'Dropbox Full Backup',
754
  'read',
755
  'wpadm_plugins',
756
  'wpadm_plugins'
757
+ );
758
  }
759
 
760
  }
761
  }
762
  public static function notice()
763
+ {
 
764
  if (!isset($_GET['page']) || ( isset($_GET['page']) && $_GET['page'] != 'wpadm_wp_full_backup_dropbox' ) ) {
765
  $notice_file = DRBBACKUP_BASE_DIR . DIRECTORY_SEPARATOR . "template" . DIRECTORY_SEPARATOR . "notice.php";
766
  if (!file_exists(WPAdm_Core::getTmpDir() . "/notice") && file_exists($notice_file)) {
773
  public static function hide_notice()
774
  {
775
  if (isset($_GET['type'])) {
776
+ switch($_GET['type']) {
 
777
  case 'preview' :
778
  file_put_contents(WPAdm_Core::getTmpDir() . "/notice", 1);
779
  break;
789
  header('location:' . $_SERVER['HTTP_REFERER']);
790
  exit;
791
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
792
  }
793
  }
794
 
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
@@ -11,14 +7,7 @@ if (!class_exists('WPAdm_Method_Backup_Delete')) {
11
  class WPAdm_Method_Backup_Delete extends WPAdm_Method_Class {
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
- }
20
- }
21
- $backups_dir = realpath($backup_dir . '/' . $this->params['name']);
22
  if(strpos($backups_dir, DIRECTORY_SEPARATOR . 'DROPBOX_BACKUP_DIR_NAME' . DIRECTORY_SEPARATOR) === false || !is_dir($backups_dir)) {
23
  $this->result->setResult = WPAdm_result::WPADM_RESULT_ERROR;
24
  $this->result->setError('Wrong name backup');
1
  <?php
 
 
 
 
2
  /**
3
  * Delete backup
4
  * Class WPAdm_Method_Backup_Delete
7
  class WPAdm_Method_Backup_Delete extends WPAdm_Method_Class {
8
  public function getResult()
9
  {
10
+ $backups_dir = realpath(DROPBOX_BACKUP_DIR_BACKUP . '/' . $this->params['name']);
 
 
 
 
 
 
 
11
  if(strpos($backups_dir, DIRECTORY_SEPARATOR . 'DROPBOX_BACKUP_DIR_NAME' . DIRECTORY_SEPARATOR) === false || !is_dir($backups_dir)) {
12
  $this->result->setResult = WPAdm_result::WPADM_RESULT_ERROR;
13
  $this->result->setError('Wrong name backup');
methods/class-wpadm-method-backup-list.php CHANGED
@@ -1,25 +1,15 @@
1
  <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
  /**
6
- * Return a list of backups
7
- * Class WPAdm_Method_Exec
8
- */
9
  if (!class_exists('WPAdm_Method_Backup_List')) {
10
  class WPAdm_Method_Backup_List extends WPAdm_Method_Class {
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
- }
19
- }
20
- $backups_dir = $backup_dir . '/';
21
  $dirs = glob($backups_dir . '*');
22
-
23
  $backups = array();
24
  foreach($dirs as $dir) {
25
  if (preg_match("|(.*)\-(.*)\-(.*)|", $dir, $mm)) {
@@ -28,9 +18,9 @@ if (!class_exists('WPAdm_Method_Backup_List')) {
28
  list($y,$m,$d, $h,$i) = explode('_', $mm[3]);
29
  $dt = "$y-$m-$d $h:$i";
30
  $backup = array(
31
- 'name' => $name,
32
- 'type' => $mm[2],
33
- 'dt' => $dt,
34
  );
35
  $files = glob($dir . '/*.zip');
36
  $size = 0;
@@ -43,13 +33,13 @@ if (!class_exists('WPAdm_Method_Backup_List')) {
43
  if ($size > 0) {
44
  $backups[] = $backup;
45
  }
46
-
47
  }
48
  }
49
  $this->result->setData($backups);
50
  $this->result->setResult(WPAdm_result::WPADM_RESULT_SUCCESS);
51
  return $this->result;
52
  }
53
-
54
  }
55
  }
1
  <?php
 
 
 
2
  /**
3
+ * Return a list of backups
4
+ * Class WPAdm_Method_Exec
5
+ */
6
  if (!class_exists('WPAdm_Method_Backup_List')) {
7
  class WPAdm_Method_Backup_List extends WPAdm_Method_Class {
8
  public function getResult()
9
  {
10
+ $backups_dir = DROPBOX_BACKUP_DIR_BACKUP . '/';
 
 
 
 
 
 
 
11
  $dirs = glob($backups_dir . '*');
12
+
13
  $backups = array();
14
  foreach($dirs as $dir) {
15
  if (preg_match("|(.*)\-(.*)\-(.*)|", $dir, $mm)) {
18
  list($y,$m,$d, $h,$i) = explode('_', $mm[3]);
19
  $dt = "$y-$m-$d $h:$i";
20
  $backup = array(
21
+ 'name' => $name,
22
+ 'type' => $mm[2],
23
+ 'dt' => $dt,
24
  );
25
  $files = glob($dir . '/*.zip');
26
  $size = 0;
33
  if ($size > 0) {
34
  $backups[] = $backup;
35
  }
36
+
37
  }
38
  }
39
  $this->result->setData($backups);
40
  $this->result->setResult(WPAdm_result::WPADM_RESULT_SUCCESS);
41
  return $this->result;
42
  }
43
+
44
  }
45
  }
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
@@ -60,8 +56,8 @@ if (!class_exists('WPadm_Method_Backup')) {
60
  $name = str_replace("https://", '', $name);
61
  $name = preg_replace("|\W|", "_", $name);
62
  $name = str_ireplace( array( 'Ä', 'ä', 'Ö', 'ö', 'ß', 'Ü', 'ü', 'å'),
63
- array('ae', 'ae', 'oe', 'oe', 's', 'ue', 'ue', 'a'),
64
- $name );
65
  $name .= '-' . $this->type . '-' . date("Y_m_d_H_i");
66
  $this->name = $name;
67
 
@@ -97,76 +93,45 @@ if (!class_exists('WPadm_Method_Backup')) {
97
  }
98
  $wp_mysql_params = $this->getWpMysqlParams();
99
 
100
- if ( isset($this->params['repair']) && ( $this->params['repair'] == 1 ) ) {
101
- if ( WPAdm_Running::is_stop() ) {
102
- if (!class_exists('WPAdm_Mysqldump')) {
103
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
104
- }
105
-
106
- $mysql = new WPAdm_Mysqldump();
107
- $mysql->host = $wp_mysql_params['host'];
108
- $mysql->user = $wp_mysql_params['user'];
109
- $mysql->password = $wp_mysql_params['password'];
110
- try {
111
- $mysql->repair($wp_mysql_params['db']);
112
- unset($mysql);
113
- } catch (Exception $e) {
114
- $this->result->setError( $e->getMessage() );
115
- $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
116
- return $this->result;
117
- }
118
- unset($mysql);
119
- }
120
- }
121
-
122
  if (isset($this->params['optimize']) && ($this->params['optimize']==1)) {
123
- WPAdm_Core::log(__('Optimize Database Tables','dropbox-backup'));
124
- if (!class_exists('WPAdm_Mysqldump')) {
125
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
126
- }
127
- $mysql = new WPAdm_Mysqldump();
128
- $mysql->host = $wp_mysql_params['host'];
129
- $mysql->user = $wp_mysql_params['user'];
130
- $mysql->password = $wp_mysql_params['password'];
131
- try {
132
- $mysql->optimize($wp_mysql_params['db']);
133
- } catch (Exception $e) {
134
- $this->result->setError( $e->getMessage() );
135
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
136
- return $this->result;
137
- }
138
- unset($mysql);
139
  }
140
 
141
- if (!class_exists('WPAdm_Mysqldump')) {
142
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
143
- }
144
- $mysql = new WPAdm_Mysqldump();
145
- $mysql->host = $wp_mysql_params['host'];
146
- $mysql->user = $wp_mysql_params['user'];
147
- $mysql->password = $wp_mysql_params['password'];
148
-
149
- try {
150
- $mysql->mysqldump($wp_mysql_params['db'], $mysql_dump_file);
151
- } catch (Exception $e) {
152
- $this->result->setError( $e->getMessage() );
153
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
154
- return $this->result;
155
- }
156
- unset($mysql);
157
-
158
- if (0 == (int)filesize($mysql_dump_file)) {
159
- $log = str_replace(array('%domain', '%dir'), array(SITE_HOME, DROPBOX_BACKUP_DIR_BACKUP), __('Website "%domain" returned an error during database dump creation: Database-Dump file is emplty. To solve this problem, please check permissions to folder: "%dir".','dropbox-backup') );
160
  $errors[] = $log;
161
  WPAdm_Core::log($log);
162
- $this->result->setError( $log );
163
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
164
- return $this->result;
165
  } else {
166
  $size_dump = round( (filesize($mysql_dump_file) / 1024 / 1024) , 2);
167
- $log = str_replace("%size", $size_dump , __('Database Dump was successfully created ( %size Mb) : ','dropbox-backup') ) ;
168
- WPAdm_Core::log($log . $mysql_dump_file);
169
  }
 
170
 
171
 
172
  WPAdm_Core::log('Start Created List Files');
@@ -202,38 +167,23 @@ if (!class_exists('WPadm_Method_Backup')) {
202
  }
203
 
204
  WPAdm_Core::log('Сreated List Files is successfully');
205
- //$this->queue->clear();
206
- WPAdm_Core::log('Start archived files');
207
- if (!class_exists('WPAdm_Archive')) {
208
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-archive.php';
209
- }
210
- foreach($files2 as $files) {
211
- $af = $this->getArchiveName($to_file);
212
- $archive = new WPAdm_Archive($af, $to_file . '.md5');
213
- $archive->setRemovePath(ABSPATH);
214
- if ( !file_exists( $af ) ) {
215
- WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af ) );
216
- }
217
 
218
- if (file_exists($af) && filesize($af) > 900000) {
219
- $af = $this->getNextArchiveName($to_file);
220
- unset($archive);
221
- if ( !file_exists( $af ) ) {
222
- WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af ) );
223
- }
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
-
231
- } else {
232
- $this->result->setError( $archive->error );
233
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
234
- return $this->result;
235
- }
236
  }
 
 
 
 
237
  WPAdm_Core::log('End archived files');
238
 
239
  $files = glob($this->dir . '/'.$this->name . '*');
@@ -279,29 +229,6 @@ if (!class_exists('WPadm_Method_Backup')) {
279
 
280
  }
281
 
282
- private function getArchiveName($name)
283
- {
284
- //WPAdm_Core::log("{$name}-*.zip");
285
- $archives = glob("{$name}-*.zip");
286
- //WPAdm_Core::log( print_r($archives, 1) );
287
- if (empty($archives)) {
288
- return "{$name}-1.zip";
289
- }
290
- $n = count($archives);
291
- $f = "{$name}-{$n}.zip";
292
- return $f;
293
- }
294
-
295
- private function getNextArchiveName($name)
296
- {
297
- //WPAdm_Core::log("{$name}-*.zip");
298
- $archives = glob("{$name}-*.zip");
299
- $n = 1 + count($archives);
300
- $a = "{$name}-{$n}.zip";
301
- //WPAdm_Core::log($a);
302
- return $a;
303
- }
304
-
305
 
306
 
307
  public function createListFilesForArchive() {
@@ -311,15 +238,15 @@ if (!class_exists('WPadm_Method_Backup')) {
311
  $files = array_merge(
312
  $files,
313
  array(
314
- // ABSPATH .'/.htaccess',
315
  ABSPATH .'/index.php',
316
- //ABSPATH .'/license.txt',
317
- //ABSPATH .'/readme.html',
318
  ABSPATH .'/wp-activate.php',
319
  ABSPATH .'/wp-blog-header.php',
320
  ABSPATH .'/wp-comments-post.php',
321
  ABSPATH .'/wp-config.php',
322
- //ABSPATH .'/wp-config-sample.php',
323
  ABSPATH .'/wp-cron.php',
324
  ABSPATH .'/wp-links-opml.php',
325
  ABSPATH .'/wp-load.php',
@@ -332,25 +259,12 @@ if (!class_exists('WPadm_Method_Backup')) {
332
  )
333
  );
334
 
335
- if ( file_exists(ABSPATH . '.htaccess') ) {
336
- $files = array_merge( $files, array( ABSPATH . '.htaccess' ) );
337
- }
338
- if ( file_exists( ABSPATH . 'license.txt' ) ) {
339
- $files = array_merge( $files, array( ABSPATH . 'license.txt' ) );
340
- }
341
- if ( file_exists( ABSPATH . 'readme.html' ) ) {
342
- $files = array_merge( $files, array( ABSPATH . 'readme.html') );
343
- }
344
- if ( file_exists(ABSPATH . '.htaccess') ) {
345
- $files = array_merge( $files, array( ABSPATH . 'wp-config-sample.php' ) );
346
- }
347
-
348
  if (!empty($this->params['minus-path'])) {
349
  foreach($files as $k=>$v) {
350
  $v = str_replace(ABSPATH .'/' , '', $v);
351
  if (in_array($v, $this->params['minus-path'])) {
352
  unset($files[$k]);
353
- WPAdm_Core::log('Skip of File ' . $v);
354
  }
355
  }
356
  }
@@ -363,18 +277,17 @@ if (!class_exists('WPadm_Method_Backup')) {
363
  ABSPATH .'/wp-includes',
364
  )
365
  );
366
- if (!empty($this->params['plus-path'])) {
367
- foreach($this->params['plus-path'] as $p) {
368
- if (empty($p)) {
369
- continue;
370
- }
371
- $p = ABSPATH .'/' . $p;
372
- if (file_exists($p)) {
373
- if (is_dir($p)) {
374
- $folders[] = $p;
375
- } else{
376
- $files[] = $p;
377
- }
378
  }
379
  }
380
  }
@@ -401,31 +314,22 @@ if (!class_exists('WPadm_Method_Backup')) {
401
  if (
402
  in_array($d, $this->params['minus-path'])
403
  ) {
404
- WPAdm_Core::log('Skip of Folder ' . $directory);
405
  return array();
406
  }
407
 
408
  $d = str_replace('\\', '/', $d);
409
  $tmp = explode('/', $d);
410
- if (function_exists('mb_strtolower')) {
411
- $d1 = mb_strtolower($tmp[0]);
412
- } else {
413
- $d1 = strtolower($tmp[0]);
414
- }
415
-
416
  unset($tmp[0]);
417
- if (function_exists('mb_strtolower')) {
418
- $d2 = mb_strtolower(implode('/', $tmp));
419
- } else {
420
- $d2 = strtolower(implode('/', $tmp));
421
- }
422
  // if (strpos($d1, 'cache') !== false || ($d1 == 'wp-includes' && strpos($d2, 'cache') !== false)) {
423
  // if (($d1 == 'wp-includes' && strpos($d2, 'cache') !== false)
424
  // || ($d1 == 'wp-content' || !in_array($tmp[0], array('plugins', 'themes')))
425
  if (strpos($d2, 'cache') !== false
426
  && !in_array($tmp[0], array('plugins', 'themes'))
427
  ) {
428
- WPAdm_Core::log('Skip of Cache-Folder ' . $directory);
429
  return array();
430
  }
431
  if(strpos($directory, 'wpadm_backups') !== false) {
@@ -444,11 +348,11 @@ if (!class_exists('WPadm_Method_Backup')) {
444
  if (!is_dir($file)) {
445
  $ff = preg_replace("/\/\//si", "/", $file);
446
  $f = str_replace(ABSPATH . '/', '', $ff);
447
- // Skip files
448
  if (!in_array($f, $this->params['minus-path'])) {
449
  $array_items[] = $ff;
450
  } else {
451
- WPAdm_Core::log('Skip of File ' . $ff);
452
  }
453
  }
454
  } else {
@@ -456,11 +360,11 @@ if (!class_exists('WPadm_Method_Backup')) {
456
  if (!is_dir($file)) {
457
  $ff = preg_replace("/\/\//si", "/", $file);
458
  $f = str_replace(ABSPATH . '/', '', $ff);
459
- // skip folders
460
  if (!in_array($f, $this->params['minus-path'])) {
461
  $array_items[] = $ff;
462
  } else {
463
- WPAdm_Core::log('Skip of Folder ' . $ff);
464
  }
465
  }
466
  }
@@ -473,7 +377,7 @@ if (!class_exists('WPadm_Method_Backup')) {
473
 
474
 
475
  /*
476
- * get access to mysql from params WP
477
  * return Array()
478
  */
479
  private function getWpMysqlParams()
@@ -496,10 +400,10 @@ if (!class_exists('WPadm_Method_Backup')) {
496
 
497
 
498
  private function init(array $conf) {
499
- //todo: norm
500
  $this->id = $conf['id'];
501
  $this->stime = $conf['stime'];
502
- //$this->queue = new WPAdm_Queue($this->id);
503
  $this->type = $conf['type'];
504
  }
505
  }
1
  <?php
 
 
 
 
2
  /**
3
  * Бэкап сайта
4
  * Class WPadm_Method_Backup
56
  $name = str_replace("https://", '', $name);
57
  $name = preg_replace("|\W|", "_", $name);
58
  $name = str_ireplace( array( 'Ä', 'ä', 'Ö', 'ö', 'ß', 'Ü', 'ü', 'å'),
59
+ array('ae', 'ae', 'oe', 'oe', 's', 'ue', 'ue', 'a'),
60
+ $name );
61
  $name .= '-' . $this->type . '-' . date("Y_m_d_H_i");
62
  $this->name = $name;
63
 
93
  }
94
  $wp_mysql_params = $this->getWpMysqlParams();
95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  if (isset($this->params['optimize']) && ($this->params['optimize']==1)) {
97
+ WPAdm_Core::log('optimization Database');
98
+ $commandContext = new WPAdm_Command_Context();
99
+ $commandContext ->addParam('command','mysqloptimize')
100
+ ->addParam('host', $wp_mysql_params['host'])
101
+ ->addParam('db', $wp_mysql_params['db'])
102
+ ->addParam('user', $wp_mysql_params['user'])
103
+ ->addParam('password', $wp_mysql_params['password']);
104
+ $this->queue->clear()
105
+ ->add($commandContext);
106
+ unset($commandContext);
 
 
 
 
 
 
107
  }
108
 
109
+ $commandContext = new WPAdm_Command_Context();
110
+ $commandContext ->addParam('command','mysqldump')
111
+ ->addParam('host', $wp_mysql_params['host'])
112
+ ->addParam('db', $wp_mysql_params['db'])
113
+ ->addParam('user', $wp_mysql_params['user'])
114
+ ->addParam('password', $wp_mysql_params['password'])
115
+ ->addParam('tables', '')
116
+ ->addParam('to_file', $mysql_dump_file);
117
+ $res = $this->queue->add($commandContext)
118
+ ->save()
119
+ ->execute();
120
+
121
+ if (!$res) {
122
+ $log = str_replace( array('%domain', '%s'), array(SITE_HOME, $this->queue->getError(), __('Website "%domain" returned an error during database dump creation: \'Dump of Database wasn\'t created: "%s"\'. To solve this problem, please check your database system logs or send to us your FTP access data. You can send to us support request using "Help" button on plugin page.','dropbox-backup') ) );
123
+ WPAdm_Core::log($log);
124
+ $errors[] = $log;
125
+ } elseif (0 == (int)filesize($mysql_dump_file)) {
126
+ $log = str_replace(array('%domain', '%dir'), array(SITE_HOME, DROPBOX_BACKUP_DIR_BACKUP__('Website "%domain" returned an error during database dump creation: Database-Dump file is emplty. To solve this problem, please check permissions to folder: "%dir".','dropbox-backup') ));
 
127
  $errors[] = $log;
128
  WPAdm_Core::log($log);
 
 
 
129
  } else {
130
  $size_dump = round( (filesize($mysql_dump_file) / 1024 / 1024) , 2);
131
+ $log = str_replace("%s", $size_dump , __('Database Dump was successfully created ( %s Mb) : ','dropbox-backup') ) ;
132
+ WPAdm_Core::log($log . ' '. str_replace(ABSPATH, '', $mysql_dump_file) );
133
  }
134
+ unset($commandContext);
135
 
136
 
137
  WPAdm_Core::log('Start Created List Files');
167
  }
168
 
169
  WPAdm_Core::log('Сreated List Files is successfully');
170
+ $this->queue->clear();
 
 
 
 
 
 
 
 
 
 
 
171
 
172
+ foreach($files2 as $files) {
173
+ $commandContext = new WPAdm_Command_Context();
174
+ $commandContext ->addParam('command','archive')
175
+ ->addParam('files', $files)
176
+ ->addParam('to_file', $this->dir . '/'.$this->name)
177
+ ->addParam('max_file_size', 900000)
178
+ ->addParam('remove_path', ABSPATH);
179
+
180
+ $this->queue->add($commandContext);
181
+ unset($commandContext);
 
 
 
 
 
 
 
 
182
  }
183
+ WPAdm_Core::log('Start archived files');
184
+ // сохраним и выполним
185
+ $this->queue->save()
186
+ ->execute();
187
  WPAdm_Core::log('End archived files');
188
 
189
  $files = glob($this->dir . '/'.$this->name . '*');
229
 
230
  }
231
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
 
233
 
234
  public function createListFilesForArchive() {
238
  $files = array_merge(
239
  $files,
240
  array(
241
+ ABSPATH .'/.htaccess',
242
  ABSPATH .'/index.php',
243
+ ABSPATH .'/license.txt',
244
+ ABSPATH .'/readme.html',
245
  ABSPATH .'/wp-activate.php',
246
  ABSPATH .'/wp-blog-header.php',
247
  ABSPATH .'/wp-comments-post.php',
248
  ABSPATH .'/wp-config.php',
249
+ ABSPATH .'/wp-config-sample.php',
250
  ABSPATH .'/wp-cron.php',
251
  ABSPATH .'/wp-links-opml.php',
252
  ABSPATH .'/wp-load.php',
259
  )
260
  );
261
 
 
 
 
 
 
 
 
 
 
 
 
 
 
262
  if (!empty($this->params['minus-path'])) {
263
  foreach($files as $k=>$v) {
264
  $v = str_replace(ABSPATH .'/' , '', $v);
265
  if (in_array($v, $this->params['minus-path'])) {
266
  unset($files[$k]);
267
+ WPAdm_Core::log('Пропускаем файл ' . $v);
268
  }
269
  }
270
  }
277
  ABSPATH .'/wp-includes',
278
  )
279
  );
280
+
281
+ foreach($this->params['plus-path'] as $p) {
282
+ if (empty($p)) {
283
+ continue;
284
+ }
285
+ $p = ABSPATH .'/' . $p;
286
+ if (file_exists($p)) {
287
+ if (is_dir($p)) {
288
+ $folders[] = $p;
289
+ } else{
290
+ $files[] = $p;
 
291
  }
292
  }
293
  }
314
  if (
315
  in_array($d, $this->params['minus-path'])
316
  ) {
317
+ WPAdm_Core::log('Пропускаем папку ' . $directory);
318
  return array();
319
  }
320
 
321
  $d = str_replace('\\', '/', $d);
322
  $tmp = explode('/', $d);
323
+ $d1 = mb_strtolower($tmp[0]);
 
 
 
 
 
324
  unset($tmp[0]);
325
+ $d2 = mb_strtolower(implode('/', $tmp));
 
 
 
 
326
  // if (strpos($d1, 'cache') !== false || ($d1 == 'wp-includes' && strpos($d2, 'cache') !== false)) {
327
  // if (($d1 == 'wp-includes' && strpos($d2, 'cache') !== false)
328
  // || ($d1 == 'wp-content' || !in_array($tmp[0], array('plugins', 'themes')))
329
  if (strpos($d2, 'cache') !== false
330
  && !in_array($tmp[0], array('plugins', 'themes'))
331
  ) {
332
+ WPAdm_Core::log('Пропускаем папку(cache) ' . $directory);
333
  return array();
334
  }
335
  if(strpos($directory, 'wpadm_backups') !== false) {
348
  if (!is_dir($file)) {
349
  $ff = preg_replace("/\/\//si", "/", $file);
350
  $f = str_replace(ABSPATH . '/', '', $ff);
351
+ // пропускаем ненужные директории
352
  if (!in_array($f, $this->params['minus-path'])) {
353
  $array_items[] = $ff;
354
  } else {
355
+ WPAdm_Core::log('Пропускаем файл ' . $ff);
356
  }
357
  }
358
  } else {
360
  if (!is_dir($file)) {
361
  $ff = preg_replace("/\/\//si", "/", $file);
362
  $f = str_replace(ABSPATH . '/', '', $ff);
363
+ // пропускаем ненужные директории
364
  if (!in_array($f, $this->params['minus-path'])) {
365
  $array_items[] = $ff;
366
  } else {
367
+ WPAdm_Core::log('Пропускаем файл ' . $ff);
368
  }
369
  }
370
  }
377
 
378
 
379
  /*
380
+ * Берем реквизиты доступа к MySQL из параметров WP
381
  * return Array()
382
  */
383
  private function getWpMysqlParams()
400
 
401
 
402
  private function init(array $conf) {
403
+ //todo: нормализация
404
  $this->id = $conf['id'];
405
  $this->stime = $conf['stime'];
406
+ $this->queue = new WPAdm_Queue($this->id);
407
  $this->type = $conf['type'];
408
  }
409
  }
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,18 +48,15 @@ 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';
58
- }
59
  $name = get_option('siteurl');
60
 
61
  $name = str_replace("http://", '', $name);
62
  $name = str_replace("https://", '', $name);
63
  $name = str_ireplace( array( 'Ä', 'ä', 'Ö', 'ö', 'ß', 'Ü', 'ü', 'å'),
64
- array('ae', 'ae', 'oe', 'oe', 's', 'ue', 'ue', 'a'),
65
- $name );
66
  $name = preg_replace("|\W|", "_", $name);
67
  $name .= '-' . $this->type . '-' . date("Y_m_d_H_i");
68
  $this->name = $name;
@@ -104,77 +98,46 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
104
  }
105
  $wp_mysql_params = $this->getWpMysqlParams();
106
 
107
- if ( isset($this->params['repair']) && ( $this->params['repair'] == 1 ) ) {
108
- if ( WPAdm_Running::is_stop() ) {
109
- if (!class_exists('WPAdm_Mysqldump')) {
110
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
111
- }
112
-
113
- $mysql = new WPAdm_Mysqldump();
114
- $mysql->host = $wp_mysql_params['host'];
115
- $mysql->user = $wp_mysql_params['user'];
116
- $mysql->password = $wp_mysql_params['password'];
117
- try {
118
- $mysql->repair($wp_mysql_params['db']);
119
- unset($mysql);
120
- } catch (Exception $e) {
121
- $this->result->setError( $e->getMessage() );
122
- $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
123
- return $this->result;
124
- }
125
- unset($mysql);
126
- }
127
- }
128
-
129
  if (isset($this->params['optimize']) && ($this->params['optimize']==1)) {
130
- WPAdm_Core::log(__('Optimize Database Tables','dropbox-backup'));
131
- if (!class_exists('WPAdm_Mysqldump')) {
132
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
133
- }
134
- $mysql = new WPAdm_Mysqldump();
135
- $mysql->host = $wp_mysql_params['host'];
136
- $mysql->user = $wp_mysql_params['user'];
137
- $mysql->password = $wp_mysql_params['password'];
138
- try {
139
- $mysql->optimize($wp_mysql_params['db']);
140
- } catch (Exception $e) {
141
- $this->result->setError( $e->getMessage() );
142
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
143
- return $this->result;
144
- }
145
- unset($mysql);
146
- }
147
-
148
- if (!class_exists('WPAdm_Mysqldump')) {
149
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
150
- }
151
- $mysql = new WPAdm_Mysqldump();
152
- $mysql->host = $wp_mysql_params['host'];
153
- $mysql->user = $wp_mysql_params['user'];
154
- $mysql->password = $wp_mysql_params['password'];
155
-
156
- try {
157
- $mysql->mysqldump($wp_mysql_params['db'], $mysql_dump_file);
158
- } catch (Exception $e) {
159
- $this->result->setError( $e->getMessage() );
160
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
161
- return $this->result;
162
- }
163
- unset($mysql);
164
-
165
- if (0 == (int)filesize($mysql_dump_file)) {
166
- $log = str_replace(array('%domain', '%dir'), array(SITE_HOME, DROPBOX_BACKUP_DIR_BACKUP), __('Website "%domain" returned an error during database dump creation: Database-Dump file is emplty. To solve this problem, please check permissions to folder: "%dir".','dropbox-backup') );
167
- $errors[] = $log;
168
  WPAdm_Core::log($log);
169
- $this->result->setError( $log );
170
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
171
- return $this->result;
 
172
  } else {
173
  $size_dump = round( (filesize($mysql_dump_file) / 1024 / 1024) , 2);
174
- $log = str_replace("%size", $size_dump , __('Database Dump was successfully created ( %size Mb) : ','dropbox-backup') ) ;
175
  WPAdm_Core::log($log . $mysql_dump_file);
176
  }
 
177
 
 
 
178
  WPAdm_Core::log( __('Create a list of files for Backup','dropbox-backup') );
179
  $files = $this->createListFilesForArchive();
180
  if (file_exists($mysql_dump_file) && filesize($mysql_dump_file) > 0) {
@@ -205,45 +168,23 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
205
  }
206
 
207
  WPAdm_Core::log( __('List of Backup-Files was successfully created','dropbox-backup') );
208
- WPAdm_Core::log( __('Backup of Files was started','dropbox-backup') );
209
- //$this->queue->clear();
210
- if (!class_exists('WPAdm_Archive')) {
211
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-archive.php';
212
- }
213
- $to_file = $this->dir . '/' . $this->name;
214
- foreach($files2 as $files) {
215
- $af = $this->getArchiveName($to_file);
216
- $archive = new WPAdm_Archive($af, $to_file . '.md5');
217
- $archive->setRemovePath(ABSPATH);
218
- if ( !file_exists( $af ) ) {
219
- WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af ) );
220
- }
221
-
222
- if (file_exists($af) && filesize($af) > 900000) {
223
- $af = $this->getNextArchiveName($to_file);
224
- unset($archive);
225
- if ( !file_exists( $af ) ) {
226
- WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af ) );
227
- }
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
 
241
- } else {
242
- $this->result->setError( $archive->error );
243
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
244
- return $this->result;
245
- }
246
  }
 
 
 
247
  WPAdm_Core::log( __('End of File Backup','dropbox-backup') );
248
 
249
  $files = glob($this->dir . '/'.$this->name . '*');
@@ -258,38 +199,125 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
258
 
259
 
260
  $remove_from_server = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  if (isset($this->params['dropbox']) && isset($this->params['dropbox']['key']) && isset($this->params['dropbox']['secret'])) {
 
262
  $files = glob($this->dir . '/' . $this->name . '*');
263
- require_once WPAdm_Core::getPluginDir() . '/modules/dropbox.class.php';
264
  $files = array_merge_recursive(array($mysql_dump_file), $files);
265
  WPAdm_Core::log( __('files to dropbox: ' ,'dropbox-backup') . print_r($files, true));
266
- $n = count($files);
267
- $folder_project_temp = $this->params['dropbox']['folder'];
268
- $folder_project = "";
269
- $dir = $this->name;
270
- if (!empty($folder_project_temp)) {
271
- $folder_project = $folder_project_temp . "/";
272
- $dropbox->createDir($folder_project_temp );
273
- $dropbox->createDir($folder_project . $dir );
274
- } else {
275
- $dropbox->createDir( $dir );
276
- }
277
  for($i = 0; $i <$n; $i++) {
278
- $file_ = explode("/", $files[$i]);
279
- $file_name = array_pop($file_);
280
- $fromFile = str_replace('//', '/', $files[$i]);
281
- $toFile = str_replace('//', '/', $folder_project . $dir . '/' . $file_name);
282
-
283
- $res = $dropbox->uploadFile($fromFile, $toFile, true);
284
-
285
- if (isset($res['error']) && isset($res['text']) && $res['error'] == 1) {
286
- $this->result->setError( __('Dropbox returned an error during file sending: ' ,'dropbox-backup') . '"' . $res['text'] . '"' );
287
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
288
- return $this->result;
289
- }
290
- if (isset($res['size']) && isset($res['client_mtime'])) {
291
- WPAdm_Core::log( __('File upload: ' ,'dropbox-backup') . basename( $file ) . __(' size: ' ,'dropbox-backup') . $res['size']);
292
- }
293
  }
294
  }
295
 
@@ -299,25 +327,22 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
299
  #Removind old backups(if limit the number of stored backups)
300
  WPAdm_Core::log( __('Start removing old backups' ,'dropbox-backup') );
301
  if ($this->params['limit'] != 0) {
302
- if (is_dir(DROPBOX_BACKUP_DIR_BACKUP)) {
303
- $dir_open = opendir(DROPBOX_BACKUP_DIR_BACKUP);
304
- $files2 = array();
305
- while ($read_dir = readdir($dir_open)) {
306
- if ($read_dir != '.' && $read_dir != '..' && is_dir( DROPBOX_BACKUP_DIR_BACKUP . "/$read_dir")) {
307
- $fa = explode('-', $read_dir);
308
- if (count($fa) != 3) {
309
- continue;
310
- }
311
- $files2[$fa[2]] = $f;
312
  }
 
 
313
  }
314
- if ( ( $n = count($files2) ) > $this->params['limit']) {
315
- ksort($files2);
316
- $d = count($files2) - $this->params['limit'];
317
- $del = array_slice($files2, 0, $d);
318
- foreach($del as $d) {
319
- WPAdm_Core::rmdir($d);
320
- }
321
  }
322
  }
323
  }
@@ -345,15 +370,15 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
345
  $files = array_merge(
346
  $files,
347
  array(
348
- // ABSPATH . '.htaccess',
349
  ABSPATH . 'index.php',
350
- // ABSPATH . 'license.txt',
351
- // ABSPATH . 'readme.html',
352
  ABSPATH . 'wp-activate.php',
353
  ABSPATH . 'wp-blog-header.php',
354
  ABSPATH . 'wp-comments-post.php',
355
  ABSPATH . 'wp-config.php',
356
- // ABSPATH . 'wp-config-sample.php',
357
  ABSPATH . 'wp-cron.php',
358
  ABSPATH . 'wp-links-opml.php',
359
  ABSPATH . 'wp-load.php',
@@ -365,30 +390,6 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
365
  ABSPATH . 'xmlrpc.php',
366
  )
367
  );
368
- if ( file_exists(ABSPATH . '.htaccess') ) {
369
- $files = array_merge( $files, array( ABSPATH . '.htaccess' ) );
370
- }
371
- if ( file_exists( ABSPATH . 'license.txt' ) ) {
372
- $files = array_merge( $files, array( ABSPATH . 'license.txt' ) );
373
- }
374
- if ( file_exists( ABSPATH . 'readme.html' ) ) {
375
- $files = array_merge( $files, array( ABSPATH . 'readme.html') );
376
- }
377
- if ( file_exists(ABSPATH . 'wp-config-sample.php') ) {
378
- $files = array_merge( $files, array( ABSPATH . 'wp-config-sample.php' ) );
379
- }
380
- if ( file_exists(ABSPATH . 'robots.txt') ) {
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']);
@@ -452,25 +453,13 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
452
 
453
  $d = str_replace('\\', '/', $d);
454
  $tmp = explode('/', $d);
455
-
456
- if (function_exists('mb_strtolower')) {
457
- $d1 = mb_strtolower($tmp[0]);
458
- } else {
459
- $d1 = strtolower($tmp[0]);
460
- }
461
  unset($tmp[0]);
462
- if (function_exists('mb_strtolower')) {
463
- $d2 = mb_strtolower(implode('/', $tmp));
464
- } else {
465
- $d2 = strtolower(implode('/', $tmp));
466
- }
467
  if (strpos($d2, 'cache') !== false && isset($tmp[0]) && !in_array($tmp[0], array('plugins', 'themes')) ) {
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
  }
@@ -543,28 +532,5 @@ if (!class_exists('WPadm_Method_Full_Backup_Dropbox')) {
543
  $this->stime = $conf['stime'];
544
  $this->queue = new WPAdm_Queue($this->id);
545
  }
546
-
547
- private function getArchiveName($name)
548
- {
549
- //WPAdm_Core::log("{$name}-*.zip");
550
- $archives = glob("{$name}-*.zip");
551
- //WPAdm_Core::log( print_r($archives, 1) );
552
- if (empty($archives)) {
553
- return "{$name}-1.zip";
554
- }
555
- $n = count($archives);
556
- $f = "{$name}-{$n}.zip";
557
- return $f;
558
- }
559
-
560
- private function getNextArchiveName($name)
561
- {
562
- //WPAdm_Core::log("{$name}-*.zip");
563
- $archives = glob("{$name}-*.zip");
564
- $n = 1 + count($archives);
565
- $a = "{$name}-{$n}.zip";
566
- //WPAdm_Core::log($a);
567
- return $a;
568
- }
569
  }
570
  }
1
  <?php
 
 
 
2
  /**
3
  * Creates a full backup of the site
4
  * Class WPadm_Method_Backup_Dropbox
48
  'stime' => time(),
49
  )
50
  );
 
51
 
52
+
 
 
53
  $name = get_option('siteurl');
54
 
55
  $name = str_replace("http://", '', $name);
56
  $name = str_replace("https://", '', $name);
57
  $name = str_ireplace( array( 'Ä', 'ä', 'Ö', 'ö', 'ß', 'Ü', 'ü', 'å'),
58
+ array('ae', 'ae', 'oe', 'oe', 's', 'ue', 'ue', 'a'),
59
+ $name );
60
  $name = preg_replace("|\W|", "_", $name);
61
  $name .= '-' . $this->type . '-' . date("Y_m_d_H_i");
62
  $this->name = $name;
98
  }
99
  $wp_mysql_params = $this->getWpMysqlParams();
100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  if (isset($this->params['optimize']) && ($this->params['optimize']==1)) {
102
+ WPAdm_Core::log( __('Table optimization','dropbox-backup') );
103
+ $commandContext = new WPAdm_Command_Context();
104
+ $commandContext ->addParam('command','mysqloptimize')
105
+ ->addParam('host', $wp_mysql_params['host'])
106
+ ->addParam('db', $wp_mysql_params['db'])
107
+ ->addParam('user', $wp_mysql_params['user'])
108
+ ->addParam('password', $wp_mysql_params['password']);
109
+ $this->queue->clear()
110
+ ->add($commandContext);
111
+ unset($commandContext);
112
+ }
113
+
114
+ $commandContext = new WPAdm_Command_Context();
115
+ $commandContext ->addParam('command','mysqldump')
116
+ ->addParam('host', $wp_mysql_params['host'])
117
+ ->addParam('db', $wp_mysql_params['db'])
118
+ ->addParam('user', $wp_mysql_params['user'])
119
+ ->addParam('password', $wp_mysql_params['password'])
120
+ ->addParam('tables', '')
121
+ ->addParam('to_file', $mysql_dump_file);
122
+ $res = $this->queue->add($commandContext)
123
+ ->save()
124
+ ->execute();
125
+ if (!$res) {
126
+ $log = str_replace('%s', $this->queue->getError(), __('Error: Dump of Database wasn\'t created (%s)','dropbox-backup') );
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  WPAdm_Core::log($log);
128
+ $errors[] = $log;
129
+ } elseif (0 == (int)@filesize($mysql_dump_file)) {
130
+ $errors[] = __('MySQL Error: Database-Dump File is empty','dropbox-backup');
131
+ WPAdm_Core::log(__('Dump of Database wasn\'t created (File of Database-Dump is empty!)','dropbox-backup'));
132
  } else {
133
  $size_dump = round( (filesize($mysql_dump_file) / 1024 / 1024) , 2);
134
+ $log = str_replace("%s", $size_dump , __('Database Dump was successfully created ( %s Mb) : ','dropbox-backup') ) ;
135
  WPAdm_Core::log($log . $mysql_dump_file);
136
  }
137
+ unset($commandContext);
138
 
139
+
140
+ #ЗАРХИВИРУЕМ ФАЙЛЫ
141
  WPAdm_Core::log( __('Create a list of files for Backup','dropbox-backup') );
142
  $files = $this->createListFilesForArchive();
143
  if (file_exists($mysql_dump_file) && filesize($mysql_dump_file) > 0) {
168
  }
169
 
170
  WPAdm_Core::log( __('List of Backup-Files was successfully created','dropbox-backup') );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
 
172
+ $this->queue->clear();
 
 
 
 
173
 
174
+ foreach($files2 as $files) {
175
+ $commandContext = new WPAdm_Command_Context();
176
+ $commandContext ->addParam('command','archive')
177
+ ->addParam('files', $files)
178
+ ->addParam('to_file', $this->dir . '/'.$this->name)
179
+ ->addParam('max_file_size', 900000)
180
+ ->addParam('remove_path', ABSPATH);
181
 
182
+ $this->queue->add($commandContext);
183
+ unset($commandContext);
 
 
 
184
  }
185
+ WPAdm_Core::log( __('Backup of Files was started','dropbox-backup') );
186
+ $this->queue->save()
187
+ ->execute();
188
  WPAdm_Core::log( __('End of File Backup','dropbox-backup') );
189
 
190
  $files = glob($this->dir . '/'.$this->name . '*');
199
 
200
 
201
  $remove_from_server = 0;
202
+ if (isset($this->params['storage'])) {
203
+ foreach($this->params['storage'] as $storage) {
204
+ if ($storage['type'] == 'ftp') {
205
+ WPAdm_Core::log( __('Begin copying files to FTP','dropbox-backup') );
206
+ $this->queue->clear();
207
+ $files = glob($this->dir . '/'.$this->name . '*');
208
+ //$this->getResult()->setData($files);
209
+ $ad = $storage['access_details'];
210
+ $dir = (isset($ad['dir'])) ? $ad['dir'] : '/';
211
+ $dir = trim($dir, '/') . '/' . $this->name;
212
+ foreach($files as $file) {
213
+ $commandContext = new WPAdm_Command_Context();
214
+ $commandContext ->addParam('command','send_to_ftp')
215
+ ->addParam('file', $file)
216
+ ->addParam('host', $ad['host'])
217
+ ->addParam('port', (isset($ad['port']))? $ad['port'] : 21)
218
+ ->addParam('user', $ad['user'])
219
+ ->addParam('password', $ad['password'])
220
+ ->addParam('dir', $dir)
221
+ ->addParam('http_host', isset($ad['http_host']) ? $ad['http_host'] : '');
222
+ $this->queue->add($commandContext);
223
+ unset($commandContext);
224
+ }
225
+ $res = $this->queue->save()
226
+ ->execute();
227
+ if (!$res) {
228
+ $log = __('FTP: ' ,'dropbox-backup');
229
+ WPAdm_Core::log($log . $this->queue->getError());
230
+ $errors[] = $log . $this->queue->getError();
231
+ }
232
+ WPAdm_Core::log( __('Finished copying files to FTP' ,'dropbox-backup') );
233
+ if (isset($storage['remove_from_server']) && $storage['remove_from_server'] == 1 ) {
234
+ $remove_from_server = $storage['remove_from_server'];
235
+ }
236
+ } elseif ($storage['type'] == 's3') {
237
+ WPAdm_Core::log( __('Begin coping files to S3' ,'dropbox-backup') );
238
+ $this->queue->clear();
239
+ $files = glob($this->dir . '/'.$this->name . '*');
240
+ //$this->getResult()->setData($files);
241
+ $ad = $storage['access_details'];
242
+ $dir = (isset($ad['dir'])) ? $ad['dir'] : '/';
243
+ $dir = trim($dir, '/') . '/' . $this->name;
244
+ foreach($files as $file) {
245
+ $commandContext = new WPAdm_Command_Context();
246
+ $commandContext ->addParam('command','send_to_s3')
247
+ ->addParam('file', $file)
248
+ ->addParam('bucket', $ad['bucket'])
249
+ ->addParam('AccessKeyId', $ad['AccessKeyId'])
250
+ ->addParam('SecretAccessKey', $ad['SecretAccessKey'])
251
+ ->addParam('SessionToken', $ad['SessionToken']);
252
+ $this->queue->add($commandContext);
253
+ unset($commandContext);
254
+ }
255
+ $res = $this->queue->save()
256
+ ->execute();
257
+ if (!$res) {
258
+ WPAdm_Core::log('S3: ' . $this->queue->getError());
259
+ $errors[] = 'S3: '.$this->queue->getError();
260
+ }
261
+ WPAdm_Core::log( __('Finished copying files to S3' ,'dropbox-backup') );
262
+ if (isset($storage['remove_from_server']) && $storage['remove_from_server'] == 1 ) {
263
+ $remove_from_server = $storage['remove_from_server'];
264
+ }
265
+ }
266
+ }
267
+ if ($remove_from_server) {
268
+ // удаляем файлы на сервере
269
+ WPAdm_Core::log( __('Remove the backup server' ,'dropbox-backup') );
270
+ WPAdm_Core::rmdir($this->dir);
271
+ }
272
+
273
+ }
274
+ if (isset($this->params['gd']) && isset($this->params['gd']['key']) && isset($this->params['gd']['secret'])) {
275
+ $this->queue->clear();
276
+ $files = glob($this->dir . '/' . $this->name . '*');
277
+ $files = array_merge_recursive(array($mysql_dump_file), $files);
278
+ WPAdm_Core::log( __('files to google: ' ,'dropbox-backup') . print_r($files, true));
279
+ $n = count($files);
280
+ for($i = 0; $i <$n; $i++) {
281
+ $commandContext = new WPAdm_Command_Context();
282
+ $commandContext->addParam('command', 'send_to_google_drive')
283
+ ->addParam('key', $this->params['gd']['key'])
284
+ ->addParam('secret', $this->params['gd']['secret'])
285
+ ->addParam('token', $this->params['gd']['token'])
286
+ ->addParam('folder_project', $this->params['gd']['folder'])
287
+ ->addParam('folder', $this->name )
288
+ ->addParam('files', $files[$i]);
289
+ $this->queue->add($commandContext);
290
+ unset($commandContext);
291
+ }
292
+ $res = $this->queue->save()
293
+ ->execute();
294
+ if (!$res) {
295
+ WPAdm_Core::log( __('Google drive: ' ,'dropbox-backup') . $this->queue->getError());
296
+ }
297
+ //WPAdm_Core::log('google drive' . print_r($this->params, true));
298
+ }
299
  if (isset($this->params['dropbox']) && isset($this->params['dropbox']['key']) && isset($this->params['dropbox']['secret'])) {
300
+ $this->queue->clear();
301
  $files = glob($this->dir . '/' . $this->name . '*');
 
302
  $files = array_merge_recursive(array($mysql_dump_file), $files);
303
  WPAdm_Core::log( __('files to dropbox: ' ,'dropbox-backup') . print_r($files, true));
304
+ $n = count($files);
 
 
 
 
 
 
 
 
 
 
305
  for($i = 0; $i <$n; $i++) {
306
+ $commandContext = new WPAdm_Command_Context();
307
+ $commandContext->addParam('command', 'send_to_dropbox')
308
+ ->addParam('key', $this->params['dropbox']['key'])
309
+ ->addParam('secret', $this->params['dropbox']['secret'])
310
+ ->addParam('token', $this->params['dropbox']['token'])
311
+ ->addParam('folder_project', $this->params['dropbox']['folder'])
312
+ ->addParam('folder', $this->name)
313
+ ->addParam('files', $files[$i]);
314
+ $this->queue->add($commandContext);
315
+ unset($commandContext);
316
+ }
317
+ $this->queue->save()
318
+ ->execute();
319
+ if (!$res) {
320
+ WPAdm_Core::log(__('Dropbox: ' ,'dropbox-backup') . $this->queue->getError());
321
  }
322
  }
323
 
327
  #Removind old backups(if limit the number of stored backups)
328
  WPAdm_Core::log( __('Start removing old backups' ,'dropbox-backup') );
329
  if ($this->params['limit'] != 0) {
330
+ $files = glob(DROPBOX_BACKUP_DIR_BACKUP . '/*');
331
+ if (count($files) > $this->params['limit']) {
332
+ $files2 = array();
333
+ foreach($files as $f) {
334
+ $fa = explode('-', $f);
335
+ if (count($fa) != 3) {
336
+ continue;
 
 
 
337
  }
338
+ $files2[$fa[2]] = $f;
339
+
340
  }
341
+ ksort($files2);
342
+ $d = count($files2) - $this->params['limit'];
343
+ $del = array_slice($files2, 0, $d);
344
+ foreach($del as $d) {
345
+ WPAdm_Core::rmdir($d);
 
 
346
  }
347
  }
348
  }
370
  $files = array_merge(
371
  $files,
372
  array(
373
+ ABSPATH . '.htaccess',
374
  ABSPATH . 'index.php',
375
+ ABSPATH . 'license.txt',
376
+ ABSPATH . 'readme.html',
377
  ABSPATH . 'wp-activate.php',
378
  ABSPATH . 'wp-blog-header.php',
379
  ABSPATH . 'wp-comments-post.php',
380
  ABSPATH . 'wp-config.php',
381
+ ABSPATH . 'wp-config-sample.php',
382
  ABSPATH . 'wp-cron.php',
383
  ABSPATH . 'wp-links-opml.php',
384
  ABSPATH . 'wp-load.php',
390
  ABSPATH . 'xmlrpc.php',
391
  )
392
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
393
 
394
  if (!empty($this->params['minus-path'])) {
395
  $minus_path = explode(",", $this->params['minus-path']);
453
 
454
  $d = str_replace('\\', '/', $d);
455
  $tmp = explode('/', $d);
456
+ $d1 = mb_strtolower($tmp[0]);
 
 
 
 
 
457
  unset($tmp[0]);
458
+ $d2 = mb_strtolower(implode('/', $tmp));
 
 
 
 
459
  if (strpos($d2, 'cache') !== false && isset($tmp[0]) && !in_array($tmp[0], array('plugins', 'themes')) ) {
460
  WPAdm_Core::log('Skip dir(cache) ' . $directory);
461
  return array();
462
  }
 
 
 
463
  if(strpos($directory, DROPBOX_BACKUP_DIR_NAME) !== false) {
464
  return array();
465
  }
532
  $this->stime = $conf['stime'];
533
  $this->queue = new WPAdm_Queue($this->id);
534
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
535
  }
536
  }
methods/class-wpadm-method-local-backup.php CHANGED
@@ -1,96 +1,54 @@
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
 
15
- if ( WPAdm_Running::is_stop() ) {
16
- parent::__construct($params);
17
- $this->init(
18
- array(
19
- 'id' => uniqid('wpadm_method__local_backup__'),
20
- 'stime' => time(),
21
- )
22
- );
23
-
24
- WPAdm_Core::log(__('Create Unique Id ','dropbox-backup') . $this->id);
25
-
26
-
27
- $name = get_option('siteurl');
28
-
29
- if (!class_exists('WPAdm_Process')) {
30
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-process.php';
31
- }
32
-
33
- $name = str_replace("http://", '', $name);
34
- $name = str_replace("https://", '', $name);
35
- $name = str_ireplace( array( 'Ä', 'ä', 'Ö', 'ö', 'ß', 'Ü', 'ü', 'å'),
36
- array('ae', 'ae', 'oe', 'oe', 's', 'ue', 'ue', 'a'),
37
- $name );
38
- $name = preg_replace("|\W|", "_", $name);
39
- if (isset($params['time']) && !empty($params['time'])) { // time 1432751372
40
- $this->time = date("Y-m-d H:i", $params['time']);
41
- $name .= '-' . wpadm_class::$type . '-' . date("Y_m_d_H_i", $params['time']);
42
- } else {
43
- $this->time = date("Y-m-d H:i"); //23.04.2015 13:45
44
- $name .= '-' . wpadm_class::$type . '-' . date("Y_m_d_H_i");
45
- }
46
- $this->name = $name;
47
-
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'];
59
- }
60
- }
61
 
 
62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
 
64
- $opt_folder = WPAdm_Running::getCommandResultData('folder_create');
65
- if (!isset($opt_folder[$name])) {
66
- if (($f = $this->checkBackup()) !== false) {
67
- $this->dir = DROPBOX_BACKUP_DIR_BACKUP . '/' . $f;
68
- if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
69
- $this->dir = $dropbox_options['backup_folder'] . '/' . $f;
70
- }
71
- }
72
- if (isset($dropbox_options['backup_folder']) && !empty($dropbox_options['backup_folder'])) {
73
- $error = WPAdm_Core::mkdir($dropbox_options['backup_folder']);
74
- if (!empty($error)) {
75
- $this->result->setError($error);
76
- $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
77
- }
78
- } else {
79
- $error = WPAdm_Core::mkdir(DROPBOX_BACKUP_DIR_BACKUP);
80
- if (!empty($error)) {
81
- $this->result->setError($error);
82
- $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
83
- }
84
- }
85
- $error = WPAdm_Core::mkdir($this->dir);
86
- if (!empty($error)) {
87
- $this->result->setError($error);
88
- $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
89
- }
90
- $opt_folder = WPAdm_Running::getCommandResultData('folder_create');
91
- $opt_folder[$name] = true;
92
- WPAdm_Running::setCommandResultData('folder_create', $opt_folder);
93
- }
94
  }
95
  }
96
  public function checkBackup()
@@ -110,493 +68,296 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
110
  {
111
 
112
  $errors = array();
113
- if ( WPAdm_Running::is_stop() ) {
114
- $this->result->setResult(WPAdm_Result::WPADM_RESULT_SUCCESS);
115
- $this->result->setError('');
116
- WPAdm_Core::log(__('Start Backup process...', 'dropbox-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');
124
- WPAdm_Core::log(__('Creating Database Dump','dropbox-backup'));
125
- $error = WPAdm_Core::mkdir(DROPBOX_BACKUP_DIR_BACKUP);
126
- if (!empty($error)) {
127
- $this->result->setError($error);
128
- $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
129
- return $this->result;
130
- }
131
- if (file_exists($mysql_dump_file) && !file_exists(WPAdm_Core::getTmpDir() . "/db")) {
132
- unlink($mysql_dump_file);
133
- }
134
- $wp_mysql_params = $this->getWpMysqlParams();
135
 
136
- if ( isset($this->params['repair']) && ( $this->params['repair'] == 1 ) ) {
137
- if ( WPAdm_Running::is_stop() ) {
138
- if (!class_exists('WPAdm_Mysqldump')) {
139
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
140
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
 
142
- $mysql = new WPAdm_Mysqldump();
143
- $mysql->host = $wp_mysql_params['host'];
144
- $mysql->user = $wp_mysql_params['user'];
145
- $mysql->password = $wp_mysql_params['password'];
146
- try {
147
- $mysql->repair($wp_mysql_params['db']);
148
- unset($mysql);
149
- } catch (Exception $e) {
150
- $this->result->setError( $e->getMessage() );
151
- $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
152
- return $this->result;
153
- }
154
- unset($mysql);
155
- }
156
  }
157
-
158
- if (isset($this->params['optimize']) && ($this->params['optimize'] == 1 ) ) {
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
- }
166
- $mysql = new WPAdm_Mysqldump();
167
- $mysql->host = $wp_mysql_params['host'];
168
- $mysql->user = $wp_mysql_params['user'];
169
- $mysql->password = $wp_mysql_params['password'];
170
- try {
171
- $mysql->optimize($wp_mysql_params['db']);
172
- } catch (Exception $e) {
173
- $this->result->setError( $e->getMessage() );
174
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
175
- return $this->result;
176
- }
177
- unset($mysql);
178
- }
179
- }
180
- }
181
 
182
 
183
- if ( WPAdm_Running::is_stop() ) {
184
- if ( WPAdm_Running::getCommandResult('db') === false) {
185
 
186
- if (!class_exists('WPAdm_Mysqldump')) {
187
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
188
- }
189
- $mysql = new WPAdm_Mysqldump();
190
- $mysql->host = $wp_mysql_params['host'];
191
- $mysql->user = $wp_mysql_params['user'];
192
- $mysql->password = $wp_mysql_params['password'];
193
-
194
- try {
195
- $mysql->mysqldump($wp_mysql_params['db'], $mysql_dump_file);
196
- } catch (Exception $e) {
197
- $this->result->setError( $e->getMessage() );
198
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
199
- return $this->result;
200
- }
201
- unset($mysql);
202
-
203
- if (0 == (int)filesize($mysql_dump_file)) {
204
- $log = str_replace(array('%domain', '%dir'), array(SITE_HOME, DROPBOX_BACKUP_DIR_BACKUP), __('Website "%domain" returned an error during database dump creation: Database-Dump file is emplty. To solve this problem, please check permissions to folder: "%dir".','dropbox-backup') );
205
- $errors[] = $log;
206
- WPAdm_Core::log($log);
207
- $this->result->setError( $log );
208
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
209
- return $this->result;
210
- } else {
211
- $size_dump = round( (filesize($mysql_dump_file) / 1024 / 1024) , 2);
212
- $log = str_replace("%size", $size_dump , __('Database Dump was successfully created ( %size Mb) : ','dropbox-backup') ) ;
213
- WPAdm_Core::log($log . $mysql_dump_file);
214
- }
215
- WPAdm_Running::setCommandResult('db', true);
216
- }
217
- }
218
  }
 
 
219
  }
 
220
 
221
- if (count($errors) == 0) {
222
- if ( WPAdm_Running::is_stop() ) {
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;
230
- }
231
- if (isset($mysql_dump_file) && file_exists($mysql_dump_file) && filesize($mysql_dump_file) > 0) {
232
- $files[] = $mysql_dump_file;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  }
234
- WPAdm_Process::init('archiving', count($files) );
235
- if (empty($files)) {
236
- $errors[] = str_replace(array('%d'), array(SITE_HOME), __( 'Website "%d" returned an error during creation of the list of files for a backup: list of files for a backup is empty. To solve this problem, please check files and folders permissions for website "%d".' ,'dropbox-backup') );
237
  }
238
- } else {
239
- return true;
240
  }
 
 
241
 
242
- // split the file list by 170kbayt lists, To break one big task into smaller
243
- if ( WPAdm_Running::is_stop() ) {
244
- $files2 = WPAdm_Running::getCommandResultData('files2');
245
- if (empty($files2)) {
246
- $files2 = array();
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]) ) {
343
- if ( WPAdm_Running::is_stop() ) {
344
- $res = $archive->add($files_str);
345
- if ($res) {
346
- $files_archive = WPAdm_Running::getCommandResultData('archive');
347
- $files_archive[$md5] = 1;
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;
361
- }
362
- }
363
- } else {
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
  }
374
- if (empty($errors)) {
375
- if ( WPAdm_Running::is_stop() ) {
376
- $files = glob($this->dir . '/'.$this->name . '*');
377
- $urls = array();
378
- $totalSize = 0;
379
- foreach($files as $file) {
380
- $urls[] = str_replace(ABSPATH, '', $file);
381
- $totalSize += @intval( filesize($file) );
382
- }
383
- $this->result->setData($urls);
384
- $this->result->setSize($totalSize);
385
- $this->result->setValue('md5_data', md5 ( print_r($this->result->toArray(), 1 ) ) );
386
- $this->result->setValue('name', $this->name );
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;
395
- #Removing TMP-files
396
- WPAdm_Core::rmdir($mysql_dump_file);
397
-
398
- #Removind old backups(if limit the number of stored backups)
399
- if ($this->params['limit'] != 0) {
400
- WPAdm_Core::log( __('Limits of Backups ','dropbox-backup') . $this->params['limit'] );
401
- WPAdm_Core::log( __('Removing of old Backups was started','dropbox-backup') );
402
- $files = glob(DROPBOX_BACKUP_DIR_BACKUP . '/*');
403
- if (count($files) > $this->params['limit']) {
404
- $files2 = array();
405
- foreach($files as $f) {
406
- $fa = explode('-', $f);
407
- if (count($fa) != 3) {
408
- continue;
409
- }
410
- $files2[$fa[2]] = $f;
411
-
412
- }
413
- ksort($files2);
414
- $d = count($files2) - $this->params['limit'];
415
- $del = array_slice($files2, 0, $d);
416
- foreach($del as $d) {
417
- WPAdm_Core::rmdir($d);
418
- }
419
- }
420
- WPAdm_Core::log( __('Removing of old Backups was Finished','dropbox-backup') );
421
- }
422
- } else {
423
- return true;
424
- }
425
  }
426
- } else {
427
- return true;
428
- }
429
- }
430
- if ( WPAdm_Running::is_stop() ) {
431
- wpadm_class::setBackup(1);
432
- if (!empty($errors)) {
433
- $this->result->setError(implode("\n", $errors));
434
- $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
435
- WPAdm_Core::rmdir($this->dir);
436
- wpadm_class::setStatus(0);
437
- wpadm_class::setErrors( implode(", ", $errors) );
438
- } else {
439
- wpadm_class::setStatus(1);
440
- WPAdm_Core::log( __('Backup creation was complete successfully!','dropbox-backup') );
441
  }
442
- wpadm_class::backupSend();
443
- } else {
444
- return true;
445
  }
446
- return $this->result;
447
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
448
 
449
  }
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
  }
474
  }
475
- } else {
476
- $folders = array();
477
- $files = array();
478
-
479
- $files = array_merge(
480
- $files,
481
- array(
482
- //ABSPATH . '.htaccess',
483
- ABSPATH . 'index.php',
484
- // ABSPATH . 'license.txt',
485
- // ABSPATH . 'readme.html',
486
- ABSPATH . 'wp-activate.php',
487
- ABSPATH . 'wp-blog-header.php',
488
- ABSPATH . 'wp-comments-post.php',
489
- ABSPATH . 'wp-config.php',
490
- // ABSPATH . 'wp-config-sample.php',
491
- ABSPATH . 'wp-cron.php',
492
- ABSPATH . 'wp-links-opml.php',
493
- ABSPATH . 'wp-load.php',
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
- )
501
- );
502
- if ( file_exists(ABSPATH . '.htaccess') ) {
503
- $files = array_merge( $files, array( ABSPATH . '.htaccess' ) );
504
- }
505
- if ( file_exists( ABSPATH . 'license.txt' ) ) {
506
- $files = array_merge( $files, array( ABSPATH . 'license.txt' ) );
507
- }
508
- if ( file_exists( ABSPATH . 'readme.html' ) ) {
509
- $files = array_merge( $files, array( ABSPATH . 'readme.html') );
510
- }
511
- if ( file_exists(ABSPATH . 'wp-config-sample.php') ) {
512
- $files = array_merge( $files, array( ABSPATH . 'wp-config-sample.php' ) );
513
- }
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']);
532
- foreach($files as $k => $v) {
533
- $v = str_replace(ABSPATH , '', $v);
534
- if (in_array($v, $minus_path)) {
535
- unset($files[$k]);
536
- WPAdm_Core::log( __('Skip of File ','dropbox-backup') . $v);
537
- }
538
- }
539
- }
540
-
541
- $folders = array_merge(
542
- $folders,
543
- array(
544
- ABSPATH . 'wp-admin',
545
- ABSPATH . 'wp-content',
546
- ABSPATH . 'wp-includes',
547
- )
548
- );
549
- if (!empty($this->params['plus-path'])) {
550
- $plus_path = explode(",", $this->params['plus-path']);
551
- foreach($plus_path as $p) {
552
- if (empty($p)) {
553
- continue;
554
- }
555
- $p = ABSPATH . $p;
556
- if (file_exists($p)) {
557
- if (is_dir($p)) {
558
- $folders[] = $p;
559
- } else{
560
- $files[] = $p;
561
- }
562
  }
563
  }
564
  }
 
565
 
566
- $folders = array_unique($folders);
567
- $files = array_unique($files);
568
 
569
- foreach($folders as $folder) {
570
- if (!is_dir($folder)) {
571
- continue;
572
- }
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();
@@ -615,47 +376,21 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
615
 
616
  $d = str_replace('\\', '/', $d);
617
  $tmp = explode('/', $d);
618
- if (function_exists('mb_strtolower')) {
619
- $d1 = mb_strtolower($tmp[0]);
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));
627
- } else {
628
- $d2 = strtolower(implode('/', $tmp));
629
- }
630
-
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))) {
657
- if ($file != "." && $file != ".." && $file != 'tmp') {
658
- if (is_dir($directory. "/" . $file) ) {
659
  if($recursive) {
660
  $array_items = array_merge($array_items, $this->directoryToArray($directory. "/" . $file, $recursive));
661
  }
@@ -678,7 +413,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
  }
@@ -718,51 +453,7 @@ if (!class_exists('WPAdm_Method_Local_Backup')) {
718
  private function init(array $conf) {
719
  $this->id = $conf['id'];
720
  $this->stime = $conf['stime'];
721
- //$this->queue = new WPAdm_Queue($this->id);
722
- }
723
-
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
  }
767
  }
768
  }
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
+ parent::__construct($params);
11
+ $this->init(
12
+ array(
13
+ 'id' => uniqid('wpadm_method__local_backup__'),
14
+ 'stime' => time(),
15
+ )
16
+ );
17
 
18
+ WPAdm_Core::log(__('Create Unique Id ','dropbox-backup') . $this->id);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
 
 
 
 
 
 
 
 
20
 
21
+ $name = get_option('siteurl');
22
 
23
+ $name = str_replace("http://", '', $name);
24
+ $name = str_replace("https://", '', $name);
25
+ $name = str_ireplace( array( 'Ä', 'ä', 'Ö', 'ö', 'ß', 'Ü', 'ü', 'å'),
26
+ array('ae', 'ae', 'oe', 'oe', 's', 'ue', 'ue', 'a'),
27
+ $name );
28
+ $name = preg_replace("|\W|", "_", $name);
29
+ if (isset($params['time']) && !empty($params['time'])) { // time 1432751372
30
+ $this->time = date("Y-m-d H:i", $params['time']);
31
+ $name .= '-' . wpadm_class::$type . '-' . date("Y_m_d_H_i", $params['time']);
32
+ } else {
33
+ $this->time = date("Y-m-d H:i"); //23.04.2015 13:45
34
+ $name .= '-' . wpadm_class::$type . '-' . date("Y_m_d_H_i");
35
+ }
36
+ $this->name = $name;
37
 
38
+ // folder for backup
39
+ $this->dir = DROPBOX_BACKUP_DIR_BACKUP . '/' . $name;
40
+ if (($f = $this->checkBackup()) !== false) {
41
+ $this->dir = DROPBOX_BACKUP_DIR_BACKUP . '/' . $f;
42
+ }
43
+ $error = WPAdm_Core::mkdir(DROPBOX_BACKUP_DIR_BACKUP);
44
+ if (!empty($error)) {
45
+ $this->result->setError($error);
46
+ $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
47
+ }
48
+ $error = WPAdm_Core::mkdir($this->dir);
49
+ if (!empty($error)) {
50
+ $this->result->setError($error);
51
+ $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  }
53
  }
54
  public function checkBackup()
68
  {
69
 
70
  $errors = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
 
72
+ $this->result->setResult(WPAdm_Result::WPADM_RESULT_SUCCESS);
73
+ $this->result->setError('');
74
+ WPAdm_Core::log(__('Start Backup process...','dropbox-backup'));
75
+
76
+ # create db dump
77
+ if (in_array('db', $this->params['types']) ) {
78
+ $mysql_dump_file = DROPBOX_BACKUP_DIR_BACKUP . '/mysqldump.sql';
79
+ if ( !WPAdm_Running::getCommandResult('db') ) {
80
+ WPAdm_Running::setCommandResult('db');
81
+ WPAdm_Core::log(__('Creating Database Dump','dropbox-backup'));
82
+ $error = WPAdm_Core::mkdir(DROPBOX_BACKUP_DIR_BACKUP);
83
+ if (!empty($error)) {
84
+ $this->result->setError($error);
85
+ $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
86
+ return $this->result;
87
+ }
88
+ if (file_exists($mysql_dump_file) && !file_exists(WPAdm_Core::getTmpDir() . "/db")) {
89
+ unlink($mysql_dump_file);
90
+ }
91
+ $wp_mysql_params = $this->getWpMysqlParams();
92
+
93
+ if ( isset($this->params['repair']) && ( $this->params['repair'] == 1 ) ) {
94
+ require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-mysqldump.php';
95
+ $mysql = new WPAdm_Mysqldump();
96
+ $mysql->host = $wp_mysql_params['host'];
97
+ $mysql->user = $wp_mysql_params['user'];
98
+ $mysql->password = $wp_mysql_params['password'];
99
+ try {
100
+ $mysql->repair($wp_mysql_params['db']);
101
+ } catch (Exception $e) {
102
+ $this->result->setError( $e->getMessage() );
103
+ $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
104
+ return false;
105
+ }
106
+
107
+ }
108
 
109
+ if (isset($this->params['optimize']) && ($this->params['optimize']==1 ) ) {
110
+ $opt_db = WPAdm_Running::getCommandResultData('db', $proc_data);
111
+ if (!isset($opt_db['optimize'])) {
112
+ WPAdm_Core::log(__('Optimize Database Tables','dropbox-backup'));
113
+ $commandContext = new WPAdm_Command_Context();
114
+ $commandContext ->addParam('command','mysqloptimize')
115
+ ->addParam('host', $wp_mysql_params['host'])
116
+ ->addParam('db', $wp_mysql_params['db'])
117
+ ->addParam('user', $wp_mysql_params['user'])
118
+ ->addParam('password', $wp_mysql_params['password']);
119
+ $this->queue->clear()
120
+ ->add($commandContext);
121
+ unset($commandContext);
 
122
  }
123
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
 
125
 
 
 
126
 
127
+ $commandContext = new WPAdm_Command_Context();
128
+ $commandContext ->addParam('command','mysqldump')
129
+ ->addParam('host', $wp_mysql_params['host'])
130
+ ->addParam('db', $wp_mysql_params['db'])
131
+ ->addParam('user', $wp_mysql_params['user'])
132
+ ->addParam('password', $wp_mysql_params['password'])
133
+ ->addParam('tables', '')
134
+ ->addParam('to_file', $mysql_dump_file);
135
+ $res = $this->queue->add($commandContext)
136
+ ->save()
137
+ ->execute();
138
+ if (!$res) {
139
+ $log = str_replace(array('%domain', '%s'), array(SITE_HOME, $this->queue->getError() ), __('Website "%domain" returned an error during database dump creation: \'Dump of Database wasn\'t created: "%s"\'. To solve this problem, please check your database system logs or send to us your FTP access data. You can send to us support request using "Help" button on plugin page.','dropbox-backup') );
140
+ WPAdm_Core::log($log);
141
+ $errors[] = $log;
142
+ } elseif (0 == (int)filesize($mysql_dump_file)) {
143
+ $log = str_replace(array('%domain', '%dir'), array(SITE_HOME, DROPBOX_BACKUP_DIR_BACKUP), __('Website "%domain" returned an error during database dump creation: Database-Dump file is emplty. To solve this problem, please check permissions to folder: "%dir".','dropbox-backup') );
144
+ $errors[] = $log;
145
+ WPAdm_Core::log($log);
146
+ } else {
147
+ $size_dump = round( (filesize($mysql_dump_file) / 1024 / 1024) , 2);
148
+ $log = str_replace("%size", $size_dump , __('Database Dump was successfully created ( %size Mb) : ','dropbox-backup') ) ;
149
+ WPAdm_Core::log($log . $mysql_dump_file);
 
 
 
 
 
 
 
 
 
150
  }
151
+ unset($commandContext);
152
+ WPAdm_Running::setCommandResult('db', true);
153
  }
154
+ }
155
 
156
+ if (count($errors) == 0) {
157
+ $command_files_list = WPAdm_Running::getCommandResultData('files');
158
+ if (in_array('files', $this->params['types']) && empty($command_files_list) ) {
159
+ $files = $this->createListFilesForArchive();
160
+ WPAdm_Running::setCommandResultData('files', $files);
161
+ } else {
162
+ $files = $command_files_list;
163
+ }
164
+ if (isset($mysql_dump_file) && file_exists($mysql_dump_file) && filesize($mysql_dump_file) > 0) {
165
+ $files[] = $mysql_dump_file;
166
+ }
167
+
168
+ if (empty($files)) {
169
+ $errors[] = str_replace(array('%d'), array(SITE_HOME), __( 'Website "%d" returned an error during creation of the list of files for a backup: list of files for a backup is empty. To solve this problem, please check files and folders permissions for website "%d".' ,'dropbox-backup') );
170
+ }
171
+
172
+ // split the file list by 170kbayt lists, To break one big task into smaller
173
+ $files2 = WPAdm_Running::getCommandResultData('files2');
174
+ if (empty($files2)) {
175
+ $files2 = array();
176
+ $files2[0] = array();
177
+ $i = 0;
178
+ $size = 0;
179
+ foreach($files as $f) {
180
+ if ($size > 170000) {//~170kbyte
181
+ $i ++;
182
+ $size = 0;
183
+ $files2[$i] = array();
184
  }
185
+ $f_size =(int)@filesize($f);
186
+ if ($f_size == 0 || $f_size > 1000000) {
187
+ WPAdm_Core::log('File ' . $f . ' Size ' . $f_size);
188
  }
189
+ $size += $f_size;
190
+ $files2[$i][] = $f;
191
  }
192
+ WPAdm_Running::setCommandResultData('files2', $files2);
193
+ }
194
 
195
+
196
+ WPAdm_Core::log(__('List of Backup-Files was successfully created','dropbox-backup') );
197
+ $this->queue->clear();
198
+ if ( !WPAdm_Running::getCommandResult('archive') ) {
199
+ WPAdm_Running::setCommandResult('archive');
200
+ $files_archive = WPAdm_Running::getCommandResultData('archive');
201
+ foreach($files2 as $files) {
202
+ $files_str = implode(',', $files);
203
+ if (!in_array($files_str, $files_archive)) {
204
+ $commandContext = new WPAdm_Command_Context();
205
+ $commandContext ->addParam('command', 'archive')
206
+ ->addParam('files', $files)
207
+ ->addParam('to_file', $this->dir . '/' . $this->name)
208
+ ->addParam('max_file_size', 900000)
209
+ ->addParam('remove_path', ABSPATH);
210
+
211
+ $this->queue->add($commandContext);
212
+ unset($commandContext);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  }
 
 
 
 
 
 
214
  }
215
+ WPAdm_Core::log( __('Backup of Files was started','dropbox-backup') );
216
+ $this->queue->save()->execute();
217
+ WPAdm_Core::log( __('End of File Backup','dropbox-backup') );
218
+ WPAdm_Running::setCommandResult('archive', true);
219
+ }
220
+ $files = glob($this->dir . '/'.$this->name . '*');
221
+ $urls = array();
222
+ $totalSize = 0;
223
+ foreach($files as $file) {
224
+ $urls[] = str_replace(ABSPATH, '', $file);
225
+ $totalSize += @intval( filesize($file) );
226
+ }
227
+ $this->result->setData($urls);
228
+ $this->result->setSize($totalSize);
229
+ $this->result->setValue('md5_data', md5 ( print_r($this->result->toArray(), 1 ) ) );
230
+ $this->result->setValue('name', $this->name );
231
+ $this->result->setValue('time', $this->time);
232
+ $this->result->setValue('type', 'local');
233
+ $this->result->setValue('counts', count($urls) );
234
+ $size = $totalSize / 1024 / 1024; /// MByte
235
+ $size = round($size, 2);
236
+ $log = str_replace("%s", $size , __('Backup Size %s Mb','dropbox-backup') ) ;
237
+ WPAdm_Core::log($log);
238
+
239
+ $remove_from_server = 0;
240
+ #Removing TMP-files
241
+ WPAdm_Core::rmdir($mysql_dump_file);
242
+
243
+ #Removind old backups(if limit the number of stored backups)
244
+ if ($this->params['limit'] != 0) {
245
+ WPAdm_Core::log( __('Limits of Backups ','dropbox-backup') . $this->params['limit'] );
246
+ WPAdm_Core::log( __('Removing of old Backups was started','dropbox-backup') );
247
+ $files = glob(DROPBOX_BACKUP_DIR_BACKUP . '/*');
248
+ if (count($files) > $this->params['limit']) {
249
+ $files2 = array();
250
+ foreach($files as $f) {
251
+ $fa = explode('-', $f);
252
+ if (count($fa) != 3) {
253
+ continue;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  }
255
+ $files2[$fa[2]] = $f;
 
 
256
 
257
  }
258
+ ksort($files2);
259
+ $d = count($files2) - $this->params['limit'];
260
+ $del = array_slice($files2, 0, $d);
261
+ foreach($del as $d) {
262
+ WPAdm_Core::rmdir($d);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
263
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  }
265
+ WPAdm_Core::log( __('Removing of old Backups was Finished','dropbox-backup') );
 
 
266
  }
 
267
  }
268
+ wpadm_class::setBackup(1);
269
+ if (!empty($errors)) {
270
+ $this->result->setError(implode("\n", $errors));
271
+ $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
272
+ WPAdm_Core::rmdir($this->dir);
273
+ wpadm_class::setStatus(0);
274
+ wpadm_class::setErrors( implode(", ", $errors) );
275
+ } else {
276
+ wpadm_class::setStatus(1);
277
+ WPAdm_Core::log( __('Backup creation was complete successfully!','dropbox-backup') );
278
+ }
279
+ wpadm_class::backupSend();
280
+
281
+ return $this->result;
282
 
283
  }
284
  public function createListFilesForArchive()
285
  {
286
+ $folders = array();
287
+ $files = array();
288
+
289
+ $files = array_merge(
290
+ $files,
291
+ array(
292
+ ABSPATH . '.htaccess',
293
+ ABSPATH . 'index.php',
294
+ ABSPATH . 'license.txt',
295
+ ABSPATH . 'readme.html',
296
+ ABSPATH . 'wp-activate.php',
297
+ ABSPATH . 'wp-blog-header.php',
298
+ ABSPATH . 'wp-comments-post.php',
299
+ ABSPATH . 'wp-config.php',
300
+ ABSPATH . 'wp-config-sample.php',
301
+ ABSPATH . 'wp-cron.php',
302
+ ABSPATH . 'wp-links-opml.php',
303
+ ABSPATH . 'wp-load.php',
304
+ ABSPATH . 'wp-login.php',
305
+ ABSPATH . 'wp-mail.php',
306
+ ABSPATH . 'wp-settings.php',
307
+ ABSPATH . 'wp-signup.php',
308
+ ABSPATH . 'wp-trackback.php',
309
+ ABSPATH . 'xmlrpc.php',
310
+ )
311
+ );
312
 
313
+ if (!empty($this->params['minus-path'])) {
314
+ $minus_path = explode(",", $this->params['minus-path']);
315
+ foreach($files as $k => $v) {
316
+ $v = str_replace(ABSPATH , '', $v);
317
+ if (in_array($v, $minus_path)) {
318
+ unset($files[$k]);
319
+ WPAdm_Core::log( __('Skip of File ','dropbox-backup') . $v);
320
  }
321
  }
322
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
323
 
324
+ $folders = array_merge(
325
+ $folders,
326
+ array(
327
+ ABSPATH . 'wp-admin',
328
+ ABSPATH . 'wp-content',
329
+ ABSPATH . 'wp-includes',
330
+ )
331
+ );
332
+ if (!empty($this->params['plus-path'])) {
333
+ $plus_path = explode(",", $this->params['plus-path']);
334
+ foreach($plus_path as $p) {
335
+ if (empty($p)) {
336
+ continue;
337
  }
338
+ $p = ABSPATH . $p;
339
+ if (file_exists($p)) {
340
+ if (is_dir($p)) {
341
+ $folders[] = $p;
342
+ } else{
343
+ $files[] = $p;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
344
  }
345
  }
346
  }
347
+ }
348
 
349
+ $folders = array_unique($folders);
350
+ $files = array_unique($files);
351
 
352
+ foreach($folders as $folder) {
353
+ if (!is_dir($folder)) {
354
+ continue;
 
 
355
  }
356
+ $files = array_merge($files, $this->directoryToArray($folder, true));
357
  }
 
 
 
358
  return $files;
359
  }
360
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
 
362
  private function directoryToArray($directory, $recursive) {
363
  $array_items = array();
376
 
377
  $d = str_replace('\\', '/', $d);
378
  $tmp = explode('/', $d);
379
+ $d1 = mb_strtolower($tmp[0]);
 
 
 
 
 
380
  unset($tmp[0]);
381
+ $d2 = mb_strtolower(implode('/', $tmp));
 
 
 
 
 
 
 
 
 
 
382
  if (strpos($d2, 'cache') !== false && isset($tmp[0]) && !in_array($tmp[0], array('plugins', 'themes')) ) {
383
  WPAdm_Core::log(__('Skip of Cache-Folder ','dropbox-backup') . $directory);
384
  return array();
385
  }
 
 
 
 
 
 
386
  if(strpos($directory, 'wpadm_backups') !== false || strpos($directory, 'Dropbox_Backup') !== false) {
387
  return array();
388
  }
 
 
 
 
 
389
 
390
  if ($handle = opendir($directory)) {
391
  while (false !== ($file = readdir($handle))) {
392
+ if ($file != "." && $file != "..") {
393
+ if (is_dir($directory. "/" . $file)) {
394
  if($recursive) {
395
  $array_items = array_merge($array_items, $this->directoryToArray($directory. "/" . $file, $recursive));
396
  }
413
  $f = str_replace(ABSPATH, '', $ff);
414
  // skip "minus" dirs
415
  if (!in_array($f, $minus_path)) {
416
+ $array_items[] = $ff;
417
  } else {
418
  WPAdm_Core::log( __('Skip of Folder ','dropbox-backup') . $ff);
419
  }
453
  private function init(array $conf) {
454
  $this->id = $conf['id'];
455
  $this->stime = $conf['stime'];
456
+ $this->queue = new WPAdm_Queue($this->id);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
457
  }
458
  }
459
  }
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')) {
@@ -90,7 +88,7 @@ if (!class_exists('WPAdm_Method_Queue_Controller')) {
90
  }
91
  //если еще есть невыполненые задачи - рестаратуем
92
  if (!empty($this->contexts)) {
93
- //$this->restart();
94
  }
95
 
96
  // если все задачи выполнили, то пометим файл
@@ -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')) {
88
  }
89
  //если еще есть невыполненые задачи - рестаратуем
90
  if (!empty($this->contexts)) {
91
+ $this->restart();
92
  }
93
 
94
  // если все задачи выполнили, то пометим файл
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,18 +1,15 @@
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()
9
- {
10
- // update public key
11
- update_option('wpadm_pub_key', $this->params['pub_key']);
12
-
13
- $this->result->setResult(WPAdm_result::WPADM_RESULT_SUCCESS);
14
- $this->result->setData('');
15
- return $this->result;
16
- }
17
- }
18
  }
1
+ <?php
2
+
3
+ if (!class_exists('WPAdm_Method_Reconnect')) {
4
+ class WPAdm_Method_Reconnect extends WPAdm_Method_Class {
5
+ public function getResult()
6
+ {
7
+ // обновить публичный ключ
8
+ update_option('wpadm_pub_key', $this->params['pub_key']);
9
+
10
+ $this->result->setResult(WPAdm_result::WPADM_RESULT_SUCCESS);
11
+ $this->result->setData('');
12
+ return $this->result;
13
+ }
14
+ }
 
 
 
15
  }
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')) {
@@ -16,277 +12,105 @@ if (!class_exists('WPadm_Method_Send_To_Dropbox')) {
16
 
17
  private $id;
18
 
19
- private $time_send = 120; // seconds for send to dropbox
20
  //private $name = '';
21
 
22
  public function getResult()
23
  {
24
- if ( WPAdm_Running::is_stop() ) {
25
- $errors = array();
26
- $this->id = uniqid('wpadm_method_send_to_dropbox_');
27
-
28
- $this->result->setResult(WPAdm_Result::WPADM_RESULT_SUCCESS);
29
- $this->result->setError('');
30
- if ( WPAdm_Running::is_stop() ) {
31
- if (isset($this->params['local']) && $this->params['local']) {
32
- $params_data_cron = WPAdm_Running::getCommandResultData('local_backup');
33
- if ( isset($res['result']) && $res['result'] == 'error' ) {
34
- $errors[] = $res['error'];
35
- } else {
36
- $this->params['files'] = $params_data_cron['data'];
37
- $this->params['access_details']['dir'] = $params_data_cron['name'];
38
- }
39
- }
40
- } else {
41
- return true;
42
- }
43
- if ( WPAdm_Running::is_stop() ) {
44
- if (empty($errors)) {
45
-
46
- $ad = $this->params['access_details'];
47
- $files = $this->params['files'];
48
- //$this->getResult()->setData($files);
49
- //$dir = trim($dir, '/') . '/' . $this->name;
50
- if (is_array($files)) {
51
- $send = false;
52
- if (!class_exists('WPAdm_Process')) {
53
- require_once WPAdm_Core::getPluginDir() . '/modules/class-wpadm-process.php';
54
- }
55
- WPAdm_Process::init( 'dropbox', count($files) );
56
- WPAdm_Core::log( __('Start copy to Dropbox Cloud', 'dropbox-backup') );
57
- foreach($files as $file) {
58
- try {
59
- if (isset($this->params['is_folder_set'])) {
60
- $this->sendFileToDropbox( $file, $ad );
61
- } else {
62
- $this->sendFileToDropbox( ABSPATH . $file, $ad );
63
- }
64
-
65
- } catch (Exception $e) {
66
- $this->result->setError( $e->getMessage() );
67
- $this->result->setResult( WPAdm_Result::WPADM_RESULT_ERROR );
68
- return $this->deleteBackup();
69
- }
70
- if (isset($this->params['local']) && $this->params['local']) {
71
- $data_command = WPAdm_Running::getCommandResultData('command_dropbox');
72
- $data_error_command = WPAdm_Running::getCommandResultData('errors_sending');
73
- if (isset($data_error_command[ABSPATH . $file]) && $data_error_command[ABSPATH . $file]['count'] > WPADM_COUNT_LIMIT_SEND_TO_DROPBOX) {
74
- $msg = str_replace('%file%', $file, __('Not perhaps sending file: "%file%". If you wish make upload file, increase execution time code or speed internet provider is small for upload file.' ,'dropbox-backup'));
75
- WPAdm_Core::log( $msg );
76
- $errors[] = $msg;
77
- break;
78
- }
79
- $md5 = md5(ABSPATH . $file);
80
- if ( !empty($data_command) && in_array($md5, $data_command) ) {
81
- continue;
82
- }
83
- }
84
- /* $commandContext = new WPAdm_Command_Context();
85
- $commandContext->addParam('command', 'send_to_dropbox')
86
- ->addParam('key', $ad['key'])
87
- ->addParam('secret', $ad['secret'])
88
- ->addParam('token', $ad['token'])
89
- ->addParam('folder_project', $ad['folder'])
90
- ->addParam('folder', $dir)
91
- ->addParam('files', ABSPATH . $file);
92
- if (isset($this->params['local']) && $this->params['local']) {
93
- $commandContext->addParam('local', true);
94
- }
95
- $this->queue->add($commandContext);
96
- unset($commandContext);
97
- $send = true;
98
- } */
99
- }
100
- WPAdm_Core::log( __('End Copy Files to Dropbox' ,'dropbox-backup') );
101
- /*if (isset($res) && !$res) {
102
- WPAdm_Core::log(__('Answer from Dropbox ' ,'dropbox-backup') . $this->queue->getError());
103
- $errors[] = __('Answer from Dropbox ' ,'dropbox-backup') . $this->queue->getError();
104
- } */
105
- }
106
- }
107
- } else {
108
- return true;
109
- }
110
- if (count($errors) > 0) {
111
- $this->result->setError(implode("\n", $errors));
112
- $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
113
- return $this->deleteBackup();
114
- } else {
115
- if ( WPAdm_Running::is_stop() ) {
116
- if (class_exists('wpadm_wp_full_backup_dropbox') && !file_exists( WPAdm_Core::getTmpDir() . "/notice-star") ) {
117
- wpadm_wp_full_backup_dropbox::setFlagToTmp( 'notice-star', time() . "_1d" );
118
- }
119
- if (isset($this->params['local']) && $this->params['local'] && isset($params_data_cron)) {
120
- if ( WPAdm_Running::is_stop() ) {
121
- $this->result->setData($this->params['files']);
122
- $this->result->setSize($params_data_cron['size']);
123
- $this->result->setValue('md5_data', md5 ( print_r($this->result->toArray(), 1 ) ) );
124
- $this->result->setValue('name', $params_data_cron['name']);
125
- $this->result->setValue('time', $params_data_cron['time']);
126
- $this->result->setValue('type', '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
- }
135
- }
136
- WPAdm_Core::rmdir( $backup_dir . "/{$params_data_cron['name']}");
137
- }
138
- return $this->result;
139
- } else {
140
- return $this->result;
141
- }
142
- }
143
- } else {
144
- return $this->result;
145
- }
146
- }
147
- return $this->result;
148
  }
149
- return true;
150
- }
151
 
152
- private function init(array $conf)
153
- {
154
- $this->id = $conf['id'];
155
- $this->stime = $conf['stime'];
156
- $this->type = $conf['type'];
157
- }
158
 
159
- private function sendFileToDropbox($file, $ad)
160
- {
161
- if ( WPAdm_Running::is_stop() ) {
162
- require_once WPAdm_Core::getPluginDir() . '/modules/dropbox.class.php';
163
- $command_dropbox = WPAdm_Running::getCommandResultData('command_dropbox');
164
- $fromFile = str_replace('//', '/', $file);
165
- $md5 = md5($fromFile);
166
- if (in_array($md5, $command_dropbox)) {
167
- return true;
168
- }
169
- WPAdm_Core::log(__('Send to dropbox files' ,'dropbox-backup') );
170
- $dropbox = new dropbox($ad['key'], $ad['secret'], $ad['token'] );
171
 
172
- if (!$dropbox->isAuth()) {
173
- $this->setError( str_replace(array('%d', '%k', '%s'),
174
- array( SITE_HOME, $ad['key'], $ad['secret'] ),__('Website "%d" can\'t authorize on Dropbox with using of "app key: %k" and "app secret: %s"' ,'dropbox-backup') ) );
175
- return false;
176
- }
177
- $dir = (isset($ad['dir'])) ? $ad['dir'] : '/';
178
- if ( WPAdm_Running::is_stop() ) {
179
- $file_ = explode("/", $file);
180
- $file_name = array_pop($file_);
181
- $folder_project_temp = $ad['folder'];
182
- $folder_project = "";
183
- if (!empty($folder_project_temp)) {
184
- $folder_project = $folder_project_temp . "/";
185
- $dropbox->createDir($folder_project_temp );
186
- $dropbox->createDir($folder_project . $dir );
187
- } else {
188
- $dropbox->createDir( $dir );
189
- }
190
- } else {
191
- return true;
192
- }
193
- //$files = ''; // to comment
194
- $fromFile = str_replace('//', '/', $file);
195
- $toFile = str_replace('//', '/', $folder_project . $dir . '/' . $file_name);
196
- $local = isset( $this->params['local'] ) ? $this->params['local'] : false ;
197
- $file_dropbox = $dropbox->listing($folder_project . $dir. '/' . $file_name);
198
- $send = true;
199
- if ( !isset($file_dropbox['error']) ) {
200
- if ($file_dropbox['bytes'] != filesize($fromFile)) {
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();
215
- $data_error_command[$fromFile]['count'] = 1;
216
- }
217
- WPAdm_Running::setCommandResultData('errors_sending', $data_error_command);
218
- }
219
- } else {
220
- $send = false;
221
- }
222
- }
223
- if ( $local ) {
224
- if ( WPAdm_Running::is_stop() ) {
225
- $data_command = WPAdm_Running::getCommandResultData('command_dropbox');
226
- $md5 = md5($fromFile);
227
- if (empty($data_command) || !in_array($md5 ,$data_command) ) {
228
- if ($send) {
229
- $res = $dropbox->uploadFile($fromFile, $toFile, true);
230
- } else {
231
- $data_command = WPAdm_Running::getCommandResultData('command_dropbox');
232
- if (!in_array($md5, $data_command)) {
233
- $this->saveDataCommand($md5);
234
- WPAdm_Process::setInc('dropbox', 1);
235
- }
236
 
237
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
238
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  }
240
- } else {
241
- $md5 = md5($fromFile);
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() ) {
249
- if (isset($res['size']) && isset($res['client_mtime'])) {
250
- $data_command = WPAdm_Running::getCommandResultData('command_dropbox');
251
- if (!in_array($md5, $data_command)) {
252
- WPAdm_Core::log( __('File upload: ' ,'dropbox-backup') . basename( $file ) . __(' size: ' ,'dropbox-backup') . $res['size']);
253
- $this->saveDataCommand($md5);
254
- WPAdm_Process::setInc('dropbox', 1);
255
- }
 
 
256
  }
257
  }
258
-
259
  }
260
- return true;
261
- }
262
 
263
- private function saveDataCommand($file)
264
- {
265
- $data_command = WPAdm_Running::getCommandResultData('command_dropbox');
266
- $data_command[] = $file;
267
- WPAdm_Running::setCommandResultData('command_dropbox', $data_command);
268
- }
269
-
270
- private function setError($txt = '')
271
- {
272
- throw new Exception($txt);
273
  }
274
 
275
- private function deleteBackup()
276
- {
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
- }
285
- }
286
- WPAdm_Core::rmdir( $backup_dir . "/{$this->params['access_details']['dir']}");
287
- }
288
- }
289
- return $this->result;
290
  }
291
  }
292
  }
1
  <?php
 
 
 
 
 
2
  /**
3
+ * Бэкап сайта
4
  * Class WPadm_Method_Send_To_Dropbox
5
  */
6
  if (!class_exists('WPadm_Method_Send_To_Dropbox')) {
12
 
13
  private $id;
14
 
 
15
  //private $name = '';
16
 
17
  public function getResult()
18
  {
19
+ $errors = array();
20
+ $this->id = uniqid('wpadm_method_send_to_dropbox_');
21
+
22
+ $this->result->setResult(WPAdm_Result::WPADM_RESULT_SUCCESS);
23
+ $this->result->setError('');
24
+ if (isset($this->params['local']) && $this->params['local']) {
25
+ $params_data_cron = WPAdm_Running::getCommandResultData('local_backup');
26
+ $this->params['files'] = $params_data_cron['data'];
27
+ $this->params['access_details']['dir'] = $params_data_cron['name'];
28
+ WPAdm_Core::log( '' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  }
 
 
30
 
 
 
 
 
 
 
31
 
32
+ $this->queue = new WPAdm_Queue($this->id);
 
 
 
 
 
 
 
 
 
 
 
33
 
34
+ $ad = $this->params['access_details'];
35
+ $this->queue->clear();
36
+ $files = $this->params['files'];
37
+ //$this->getResult()->setData($files);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
+ $dir = (isset($ad['dir'])) ? $ad['dir'] : '/';
40
+ //$dir = trim($dir, '/') . '/' . $this->name;
41
+ if (is_array($files)) {
42
+ $send = false;
43
+
44
+ foreach($files as $file) {
45
+ if (isset($this->params['local']) && $this->params['local']) {
46
+ $data_command = WPAdm_Running::getCommandResultData('command_dropbox');
47
+ $data_error_command = WPAdm_Running::getCommandResultData('errors_sending');
48
+ if (isset($data_error_command[ABSPATH . $file]) && $data_error_command[ABSPATH . $file]['count'] > WPADM_COUNT_LIMIT_SEND_TO_DROPBOX) {
49
+ $msg = str_replace('%file%', $file, __('Not perhaps sending file: "%file%". If you wish make upload file, increase execution time code or speed internet provider is small for upload file.' ,'dropbox-backup'));
50
+ WPAdm_Core::log( $msg );
51
+ $errors[] = $msg;
52
+ break;
53
  }
54
+ if ( !empty($data_command) && in_array(ABSPATH . $file, $data_command) ) {
55
+ continue;
56
+ }
57
+ }
58
+ $commandContext = new WPAdm_Command_Context();
59
+ $commandContext->addParam('command', 'send_to_dropbox')
60
+ ->addParam('key', $ad['key'])
61
+ ->addParam('secret', $ad['secret'])
62
+ ->addParam('token', $ad['token'])
63
+ ->addParam('folder_project', $ad['folder'])
64
+ ->addParam('folder', $dir)
65
+ ->addParam('files', ABSPATH . $file);
66
+ if (isset($this->params['local']) && $this->params['local']) {
67
+ $commandContext->addParam('local', true);
68
  }
69
+ $this->queue->add($commandContext);
70
+ unset($commandContext);
71
+ $send = true;
72
  }
73
+ }
74
+ if ($send) {
75
+ WPAdm_Core::log( __('Start copy to Dropbox Cloud' ,'dropbox-backup') );
76
+ $res = $this->queue->save()->execute();
77
+ WPAdm_Core::log( __('End Copy Files to Dropbox' ,'dropbox-backup') );
78
+ }
79
+ if (isset($res) && !$res) {
80
+ WPAdm_Core::log(__('Answer from Dropbox ' ,'dropbox-backup') . $this->queue->getError());
81
+ $errors[] = __('Answer from Dropbox ' ,'dropbox-backup') . $this->queue->getError();
82
+ }
83
+
84
+ if (count($errors) > 0) {
85
+ $this->result->setError(implode("\n", $errors));
86
+ $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
87
+ } else {
88
+ if (class_exists('wpadm_wp_full_backup_dropbox') && !file_exists( WPAdm_Core::getTmpDir() . "/notice-star") ) {
89
+ wpadm_wp_full_backup_dropbox::setFlagToTmp( 'notice-star', time() . "_1d" );
90
  }
91
+ if (isset($this->params['local']) && $this->params['local'] && isset($params_data_cron)) {
92
+ $this->result->setData($this->params['files']);
93
+ $this->result->setSize($params_data_cron['size']);
94
+ $this->result->setValue('md5_data', md5 ( print_r($this->result->toArray(), 1 ) ) );
95
+ $this->result->setValue('name', $params_data_cron['name']);
96
+ $this->result->setValue('time', $params_data_cron['time']);
97
+ $this->result->setValue('type', 'dropbox');
98
+ $this->result->setValue('counts', $params_data_cron['counts'] );
99
+ if( (isset($this->params['is_local_backup']) && $this->params['is_local_backup'] == 0 ) || ( !isset($this->params['is_local_backup']) ) ) {
100
+ WPAdm_Core::rmdir( DROPBOX_BACKUP_DIR_BACKUP . "/{$params_data_cron['name']}");
101
  }
102
  }
 
103
  }
 
 
104
 
105
+ return $this->result;
 
 
 
 
 
 
 
 
 
106
  }
107
 
108
+ private function init(array $conf) {
109
+ //todo: нормализация
110
+ $this->id = $conf['id'];
111
+ $this->stime = $conf['stime'];
112
+ $this->queue = new WPAdm_Queue($this->id);
113
+ $this->type = $conf['type'];
 
 
 
 
 
 
 
 
 
114
  }
115
  }
116
  }
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 DELETED
@@ -1,178 +0,0 @@
1
- <?php
2
-
3
- /*
4
- justin was here :D
5
- */
6
-
7
- class HttpFsockopen {
8
-
9
- protected $url;
10
- protected $path;
11
- protected $host;
12
- protected $query;
13
- protected $post;
14
- protected $port;
15
- protected $headers;
16
- protected $ssl;
17
- protected $method;
18
- protected $timeout;
19
- protected $str_headers = '';
20
- protected $is_post = false;
21
-
22
- protected static $autoload;
23
-
24
- public function __construct($url, $use_autoload = true){
25
- if(is_null(HttpFsockopen::$autoload) && $use_autoload){
26
- HttpFsockopen::$autoload = true;
27
- spl_autoload_register(array("HttpFsockopen", "load"));
28
- }
29
- $url_array = parse_url($url);
30
-
31
- if(!empty($url_array["scheme"]) && preg_match("#^https|ssl$#i", $url_array["scheme"])){
32
- $this -> ssl = true;
33
- } else {
34
- $this -> ssl = false;
35
- }
36
-
37
- if(empty($url_array["port"])){
38
- if($this -> ssl){
39
- $this -> port = 443;
40
- } else {
41
- $this -> port = 80;
42
- }
43
- }
44
-
45
- if(array_key_exists("path", $url_array)){
46
- $this -> path = $url_array["path"];
47
- } else {
48
- $this -> path = false;
49
- }
50
-
51
- if(array_key_exists("query", $url_array)){
52
- $this -> query = $url_array["query"];
53
- } else {
54
- $this -> query = false;
55
- }
56
-
57
- $this -> host = $url_array["host"];
58
- $this -> method = "GET";
59
- $this -> timeout = 15;
60
- $this -> is_post = false;
61
- }
62
-
63
- public static function load($class){
64
- $file = dirname( __FILE__ ) . DIRECTORY_SEPARATOR .
65
- preg_replace("#[_]+#", DIRECTORY_SEPARATOR , $class) . ".php";
66
- if(file_exists($file))
67
- include_once $file ;
68
- }
69
-
70
- public function setQueryData($data){
71
- if(is_array($data)){
72
- $data = http_build_query($data);
73
- }
74
- $this -> query = $data;
75
- return $this;
76
- }
77
-
78
- public function setPostData($data){
79
- if(is_array($data)){
80
- $data = http_build_query($data);
81
- }
82
- $this -> post = $data;
83
- $this -> method = "POST";
84
- $this -> is_post = true;
85
- $this -> setHeaders("Content-Type", "application/x-www-form-urlencoded");
86
- return $this;
87
- }
88
-
89
- public function setMethod($method){
90
- $previous_method = $this -> method;
91
- if(preg_match("#^[a-z]+$#i", $method)){
92
- $this -> method = strtoupper($method);
93
- }
94
- if($this -> method == "POST" && $previous_method != "POST"){
95
- //$this -> setHeaders("Content-Type", "application/x-www-form-urlencoded");
96
- }
97
- if($this -> method != "POST" && $previous_method == "POST"){
98
- $this -> setHeaders("Content-Type", null);
99
- }
100
- return $this;
101
- }
102
-
103
- public function setTimeout($timeout){
104
- $this -> timeout = $timeout;
105
- return $this;
106
- }
107
-
108
- public function setPort($port){
109
- $this -> port = $port;
110
- return $this;
111
- }
112
-
113
- public function setHeaders($key, $value = null){
114
- if(is_array($key)){
115
- foreach($key as $key => $value){
116
- if(is_null($value)){
117
- unset($this -> headers[$key]);
118
- } else {
119
- $this -> headers[$key] = $value;
120
- }
121
- }
122
- } else {
123
- if(is_null($value)){
124
- unset($this -> headers[$key]);
125
- } else {
126
- $this -> headers[$key] = $value;
127
- }
128
- }
129
- return $this;
130
- }
131
-
132
- public function setStrHeaders($str)
133
- {
134
- $this->str_headers = $str;
135
- }
136
-
137
- public function setUserAgent($user_agent){
138
- return $this -> setHeaders("User-Agent", $user_agent);
139
- }
140
-
141
- public function exec(){
142
- $socket = fsockopen(($this -> ssl ? "ssl://" : "") . $this -> host, $this -> port, $errno, $errstr,
143
- $this -> timeout);
144
- $contents = "";
145
-
146
- if($socket){
147
- $http = $this -> method . " ". (strlen($this -> path) ? $this -> path : "/") .
148
- (strlen($this -> query)>0 ? "?" . $this -> query : "")
149
- ." HTTP/1.1\r\n";
150
- $http .= "Host: ".$this -> host."\r\n";
151
- foreach($this -> headers as $key => $value){
152
- $http .= $key. ": ".$value."\r\n";
153
- }
154
-
155
- if ( $this -> is_post || $this -> method == 'GET' ) {
156
- $http .= "Content-length: " . strlen($this -> post) . "\r\n";
157
- $http .= "Connection: close\r\n\r\n";
158
- }
159
-
160
- if (!empty($this->str_headers)) {
161
- $http .= $this->str_headers;
162
- }
163
-
164
- if(!is_null($this -> post)) {
165
- $http .= $this -> post . "\r\n\r\n";
166
- }
167
-
168
- fwrite($socket, $http);
169
- while (!feof($socket)) {
170
- $contents .= fgetc($socket);
171
- }
172
- fclose($socket);
173
- }
174
-
175
- return $contents;
176
- }
177
-
178
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
@@ -1,11 +1,4 @@
1
  <?php
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,475 +6,38 @@ 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);
444
- }
445
- } else {
446
- if ( WPAdm_Running::is_stop() ) {
447
- $res = $this->archive->add($file, PCLZIP_OPT_REMOVE_PATH, $this->remove_path);
448
- }
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);
456
- }
457
- $this->error = $this->archive->errorInfo(true);
458
- return false;
459
- }
460
- $this->saveMd5($file);
461
- }
462
- }
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 +46,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
  }
1
  <?php
 
 
 
 
 
 
 
2
  if ( !class_exists("PclZip") ) {
3
  require_once dirname(__FILE__) . '/pclzip.lib.php';
4
  }
6
  class WPAdm_Archive {
7
  private $remove_path = '';
8
  private $files = array();
 
 
9
  /**
10
  * @var PclZip
11
  */
12
  private $archive;
13
  private $md5_file = '';
 
 
 
 
 
 
14
 
15
+ public function __construct($file, $md5_file = '') {
16
+ $this->archive = new PclZip($file);
 
 
 
 
17
  $this->files[] = $file;
18
  $this->md5_file = $md5_file;
19
  }
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  public function add($file)
22
+ {
23
+ $this->packed($file);
24
  }
25
  public function packed($file)
26
  {
27
+ ini_set("memory_limit", "256M");
28
+ if (empty($this->remove_path)) {
29
+ $this->archive->add($file);
30
+ } else {
31
+ $this->archive->add($file, PCLZIP_OPT_REMOVE_PATH, $this->remove_path);
32
+ }
33
+ $this->saveMd5($file);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  }
35
 
36
  protected function saveMd5($file) {
37
  if ($this->md5_file) {
38
+ $files = explode(',', $file); {
39
  foreach($files as $f) {
40
+ file_put_contents($this->md5_file, $f . "\t" . @md5_file($f) . "\t" . basename($this->archive->zipname) . "\n", FILE_APPEND);
41
  }
42
  }
43
  }
46
  public function setRemovePath($remove_path) {
47
  $this->remove_path = $remove_path;
48
  }
 
 
 
 
 
 
49
  }
50
  }
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,42 +1,34 @@
1
- <?php
2
-
3
-
4
- if ( ! defined( 'ABSPATH' ) ) exit;
5
-
6
-
7
- /**
8
- * Class WPAdm_Command_Factory
9
- */
10
- if (!class_exists('WPAdm_Command_Factory')) {
11
- class WPAdm_Command_Factory {
12
- /**
13
- * @param string $com
14
- * @return command
15
- */
16
- static function getCommand($com = '') {
17
- if (!preg_match("|[a-zA-Z0-9_]|", $com)) {
18
- return null;
19
- }
20
- if (function_exists('mb_strtolower')) {
21
- $com = mb_strtolower($com);
22
- } else {
23
- $com = strtolower($com);
24
- }
25
- $tmp = explode('_', $com);
26
- $class_file = WPAdm_Core::getPluginDir() . "/commands/class-wpadm-command-" . str_replace('_', '-', $com) . ".php";
27
-
28
- if (file_exists($class_file)) {
29
- require_once $class_file;
30
- foreach($tmp as $k=>$v) {
31
- $tmp[$k] = ucfirst($v);
32
- }
33
- $com = implode('_', $tmp);
34
-
35
- $class_name = "WPAdm_Command_{$com}";
36
- return new $class_name();
37
- }
38
-
39
- return null;
40
- }
41
- }
42
  }
1
+ <?php
2
+ /**
3
+ * Class WPAdm_Command_Factory
4
+ */
5
+ if (!class_exists('WPAdm_Command_Factory')) {
6
+ class WPAdm_Command_Factory {
7
+ /**
8
+ * @param string $com
9
+ * @return command
10
+ */
11
+ static function getCommand($com = '') {
12
+ if (!preg_match("|[a-zA-Z0-9_]|", $com)) {
13
+ return null;
14
+ }
15
+
16
+ $com = mb_strtolower($com);
17
+ $tmp = explode('_', $com);
18
+ $class_file = WPAdm_Core::getPluginDir() . "/commands/class-wpadm-command-" . str_replace('_', '-', $com) . ".php";
19
+
20
+ if (file_exists($class_file)) {
21
+ require_once $class_file;
22
+ foreach($tmp as $k=>$v) {
23
+ $tmp[$k] = ucfirst($v);
24
+ }
25
+ $com = implode('_', $tmp);
26
+
27
+ $class_name = "WPAdm_Command_{$com}";
28
+ return new $class_name();
29
+ }
30
+
31
+ return null;
32
+ }
33
+ }
 
 
 
 
 
 
 
 
34
  }
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';
@@ -11,7 +8,6 @@ require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-command-factory.php';
11
 
12
 
13
  if (!class_exists('WPAdm_Core')) {
14
-
15
  class WPAdm_Core {
16
 
17
  /*
@@ -33,8 +29,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 +38,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']){
@@ -86,7 +72,7 @@ if (!class_exists('WPAdm_Core')) {
86
  $this->result = $obj->getResult();
87
  }
88
  } else {
89
- $this->result->setError(sprintf(__('Unknown method "%s"', 'dropbox-backup'), $request['method'] ) );
90
  }
91
  }
92
 
@@ -99,14 +85,11 @@ if (!class_exists('WPAdm_Core')) {
99
  $tmp_dir = self::$pl_dir . '/tmp';
100
  self::mkdir($tmp_dir);
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;
108
  }
109
-
110
  static public function getPluginDir() {
111
  return self::$pl_dir;
112
  }
@@ -136,7 +119,7 @@ if (!class_exists('WPAdm_Core')) {
136
 
137
  $class_name = "WPAdm_Method_{$method}";
138
  if (!class_exists($class_name)) {
139
- $this->getResult()->setError(sprintf( __( "Class '%s' not found", 'dropbox-backup' ), $class_name ) );
140
  $this->getResult()->setResult(WPAdm_result::WPADM_RESULT_ERROR);
141
  return null;
142
  }
@@ -189,7 +172,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');
@@ -202,47 +185,47 @@ if (!class_exists('WPAdm_Core')) {
202
  if ('connect' == $this->request['method']) {
203
  $this->pub_key = $this->request['params']['pub_key'];
204
  } else {
205
- $this->getResult()->setError( __( 'Activate site in WPAdm.com for work to plugins.', 'dropbox-backup' ) );
206
  return false;
207
  }
208
  } elseif ('connect' == $this->request['method']) {
209
  if( $this->pub_key != $this->request['params']['pub_key'] ){
210
- $this->getResult()->setError( __( 'Error. Reconnect Plugin.', 'dropbox-backup' ) );
211
  return false;
212
  }
213
  } elseif('queue_controller' == $this->request['method']) {
214
- //todo: check run self
215
  return true;
216
 
217
  }
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);
225
  if (!$ret) {
226
- $this->getResult()->setError(__("Incorrect signature", 'dropbox-backup'));
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 +241,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';
8
 
9
 
10
  if (!class_exists('WPAdm_Core')) {
 
11
  class WPAdm_Core {
12
 
13
  /*
29
  private $result;
30
 
31
  private $plugin;
 
 
32
 
33
  public $name = '',
34
  $time = '';
38
  public static $pl_dir;
39
 
40
  public static $error = '';
 
 
41
 
42
  public static $plugin_name;
43
 
44
+ private static $cron_method = array('local_backup', 'send_to_dropbox', 'full_backup_dropbox');
45
 
46
 
47
+ public function __construct(array $request, $plugin = '', $plugin_dir = '') {
48
  $this->result = new WPAdm_Result();
49
  $this->result->setResult(WPAdm_Result::WPADM_RESULT_ERROR);
50
  $this->request = $request;
 
 
 
51
  $this->plugin = $plugin;
 
52
  self::$pl_dir = $plugin_dir;
53
  self::$plugin_name = $plugin;
54
  // auth request
55
+ if (!$this->auth()) {
56
+ return;
57
+ }
 
 
58
  if ('connect' == $request['method']) {
59
  $this->connect();
60
  } elseif ('local' == $request['method']){
72
  $this->result = $obj->getResult();
73
  }
74
  } else {
75
+ $this->result->setError('Unknown method "' . $request['method'] . '"');
76
  }
77
  }
78
 
85
  $tmp_dir = self::$pl_dir . '/tmp';
86
  self::mkdir($tmp_dir);
87
  if (!file_exists($tmp_dir . '/index.php')) {
88
+ file_put_contents($tmp_dir . '/index.php', '');
 
 
 
89
  }
90
  return $tmp_dir;
91
  }
92
+
93
  static public function getPluginDir() {
94
  return self::$pl_dir;
95
  }
119
 
120
  $class_name = "WPAdm_Method_{$method}";
121
  if (!class_exists($class_name)) {
122
+ $this->getResult()->setError("Class '$class_name' not found");
123
  $this->getResult()->setResult(WPAdm_result::WPADM_RESULT_ERROR);
124
  return null;
125
  }
172
  }
173
 
174
  /*
175
+ * Авторизация запроса
176
  */
177
  private function auth() {
178
  $this->pub_key = get_option('wpadm_pub_key');
185
  if ('connect' == $this->request['method']) {
186
  $this->pub_key = $this->request['params']['pub_key'];
187
  } else {
188
+ $this->getResult()->setError('Activate site in WPAdm.com for work to plugins.');
189
  return false;
190
  }
191
  } elseif ('connect' == $this->request['method']) {
192
  if( $this->pub_key != $this->request['params']['pub_key'] ){
193
+ $this->getResult()->setError('Ошибка. Воспользуйтесь переподключением плагина.');
194
  return false;
195
  }
196
  } elseif('queue_controller' == $this->request['method']) {
197
+ //todo: проверить, что запустили сами себя
198
  return true;
199
 
200
  }
201
 
202
  $sign = md5(serialize($this->request['params']));
203
  //openssl_public_decrypt($this->request['sign'], $request_sign, $this->pub_key);
204
+ $ret = $this->verifySignature($this->request['sign'], $this->request['sign2'], $this->pub_key, $sign);
205
 
206
 
207
  //$ret = ($sign == $request_sign);
208
  if (!$ret) {
209
+ $this->getResult()->setError("Неверная подпись");
210
  }
211
  return $ret;
212
  }
213
+
214
+
215
  /**
216
+ * Создаем папку
217
  * @param $dir
218
  */
219
  static public function mkdir($dir) {
220
  if(!file_exists($dir)) {
221
  @mkdir($dir, 0755);
222
  if (!is_dir($dir)) {
223
+ self::$error = str_replace("&s", $dir, __('Failed to create a file, please check the permissions on the folders "&s".','dropbox-backup') );
224
  } else {
225
  //todo: права доступа
226
  @file_put_contents($dir . '/index.php', '<?php echo "Hello World!"; ');
227
  if ( !is_writable($dir . '/index.php') ) {
228
+ self::$error = str_replace("&s", $dir, __('Failed to create a file, please check the permissions on the folders "&s".','dropbox-backup') );
229
  }
230
  }
231
  }
241
  public function getResult() {
242
  return $this->result;
243
  }
 
 
 
 
 
 
 
 
244
 
245
 
246
  public function verifySignature($sign, $sign2, $pub_key, $text) {
247
+ if (function_exists('openssl_public_decrypt')) {
248
  openssl_public_decrypt($sign, $request_sign, $pub_key);
249
  $ret = ($text == $request_sign);
250
+ return $ret;
251
  } else {
252
  set_include_path(get_include_path() . PATH_SEPARATOR . self::getPluginDir() . '/modules/phpseclib');
253
  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
 
@@ -18,7 +13,7 @@ if (!class_exists('WPAdm_Mysqldump')) {
18
 
19
  private function connect($db = '') {
20
  //WPAdm_Core::log("----------------------------------------------------");
21
- //WPAdm_Core::log( __('Connecting to MySQL...' ,'dropbox-backup') );
22
  if (! class_exists('wpdb')) {
23
  require_once ABSPATH . '/' . WPINC . '/wp-db.php';
24
  }
@@ -44,49 +39,41 @@ if (!class_exists('WPAdm_Mysqldump')) {
44
  }
45
  }
46
  }
47
- return $this->dbh;
48
  }
49
 
50
  public function optimize($db) {
51
  $proc_data = WPAdm_Running::getCommandResultData('db');
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;
59
- if (!empty( $link->last_error ) && $n > 0) {
60
- $this->setError($link->last_error);
61
- } else {
62
- for($i = 0; $i < $n; $i++ ) {
63
- $res = array_values( get_object_vars( $result[$i] ) );
64
- $proc_data = WPAdm_Running::getCommandResultData('db');
65
- if ( WPAdm_Running::is_stop() ) {
66
- if (!isset($proc_data['optimize_table'][$res[0]])) {
67
- $link->query('OPTIMIZE TABLE '. $res[0]);
68
- if (!empty( $link->last_error ) ) {
69
- $tables = isset($proc_data['optimize_table']) ? $proc_data['optimize_table'] : array();
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
- }
80
- }
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);
88
- }
89
  }
 
 
 
 
90
  }
91
  }
92
  }
@@ -95,43 +82,36 @@ if (!class_exists('WPAdm_Mysqldump')) {
95
  $proc_data = WPAdm_Running::getCommandResultData('repair');
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;
103
- if (!empty( $link->last_error )) {
104
- $this->setError($link->last_error);
105
- return false;
106
- }
107
- if ($link->last_result === null) {
108
- $this->setError(print_r(implode("\n", $link->error->errors), 1));
109
- return false;
110
- }
111
- $tables = array();
112
- for($i = 0; $i < $n; $i++ ) {
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');
120
- $proc_data['repair'][$row['Name']] = 1;
121
- WPAdm_Running::setCommandResultData('repair', $proc_data);
122
- } else {
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() ) {
130
  $proc_data = WPAdm_Running::getCommandResultData('repair');
131
- $proc_data['work'] = 1;
132
  WPAdm_Running::setCommandResultData('repair', $proc_data);
 
 
133
  }
 
134
  }
 
 
 
135
  }
136
  }
137
 
@@ -140,150 +120,119 @@ if (!class_exists('WPAdm_Mysqldump')) {
140
  $proc_data = WPAdm_Running::getCommandResultData('db');
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);
148
- $result = $link->last_result;
149
- if (!empty( $link->last_error )) {
150
- $this->setError($link->last_error);
151
- return false;
152
- }
153
- if ($link->last_result === null) {
154
- /* foreach($link->error->errors as $key => $errors) {
155
- if ($key == db_connect_fail)
156
- }*/
157
- $this->setError(print_r(implode("\n", $link->error->errors), 1));
158
- return false;
159
- }
160
- if ( WPAdm_Running::is_stop() ) {
161
- for($i = 0; $i < $n; $i++ ) {
162
- $row = array_values( get_object_vars( $result[$i] ) );
163
- $tables[] = $row[0];
 
 
 
 
 
 
 
 
164
  }
165
- }
166
- if ( WPAdm_Running::is_stop() ) {
167
- foreach($tables as $key_tables => $table) {
168
- $return = '';
169
- $proc_data = WPAdm_Running::getCommandResultData('db');
170
- if ( !isset($proc_data['mysqldump_table'][$table]) ) {
171
 
172
- $result = $link->last_result;
173
- if (!empty( $link->last_error ) && $n > 0) {
174
- $this->setError($link->last_error);
175
- }
176
- if ( WPAdm_Running::is_stop() ) {
177
- $return.= 'DROP TABLE IF EXISTS ' . $table . ';';
 
178
 
179
- $ress = $link->query('SHOW CREATE TABLE ' . $table);
180
- $result2 = $link->last_result;
181
- if (!empty( $link->last_error ) && $n > 0) {
182
- $this->setError($link->last_error);
183
- }
184
- $row2 = array_values( get_object_vars( $result2[0] ) );
185
- $return.= "\n\n".$row2[1].";\n\n";
186
- }
187
- if ( WPAdm_Running::is_stop() ) {
188
- file_put_contents($filename, $return, FILE_APPEND);
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 = '';
229
- $row = array_values( get_object_vars( $result2[$i] ) );
230
- $rows_num = count($row);
231
- if ($rows_num > 0) {
232
- $return.= 'INSERT INTO ' . $table . ' VALUES(';
233
- for($j=0; $j < $rows_num; $j++) {
234
- $row[$j] = addslashes($row[$j]);
235
- $row[$j] = str_replace("\n","\\n",$row[$j]);
236
- if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
237
- if ($j<($rows_num-1)) { $return.= ','; }
238
- }
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);
275
- }
276
- }
277
  }
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);
285
  }
286
  }
 
 
 
 
 
287
  return true;
288
  } else {
289
  return false;
@@ -298,11 +247,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 +272,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
 
13
 
14
  private function connect($db = '') {
15
  //WPAdm_Core::log("----------------------------------------------------");
16
+ //WPAdm_Core::log( __('Connecting to MySQL...' ,'dropbox-backup') );
17
  if (! class_exists('wpdb')) {
18
  require_once ABSPATH . '/' . WPINC . '/wp-db.php';
19
  }
39
  }
40
  }
41
  }
42
+ return $this->dbh;
43
  }
44
 
45
  public function optimize($db) {
46
  $proc_data = WPAdm_Running::getCommandResultData('db');
47
+ if (!isset($proc_data['optimize'])) {
48
+ $link = $this->connect($db);
49
+ WPAdm_Core::log( __('Optimize Database Tables was started' ,'dropbox-backup') );
50
+ $n = $link->query('SHOW TABLES');
51
+ $result = $link->last_result;
52
+ if (!empty( $link->last_error ) && $n > 0) {
53
+ $this->setError($link->last_error);
54
+ } else {
55
+ for($i = 0; $i < $n; $i++ ) {
56
+ $res = array_values( get_object_vars( $result[$i] ) );
57
+ $proc_data = WPAdm_Running::getCommandResultData('db');
58
+ if (!isset($proc_data['optimize_table'][$res[0]])) {
59
+ $link->query('OPTIMIZE TABLE '. $res[0]);
60
+ if (!empty( $link->last_error ) ) {
61
+ $tables = isset($proc_data['optimize_table']) ? $proc_data['optimize_table'] : array();
62
+ $tables[$res[0]] = 1;
63
+ $proc_data['optimize_table'] = $tables;
64
+ WPAdm_Running::setCommandResultData('db', $proc_data);
65
+ $log = str_replace('%s', $res[0], __('Error to Optimize Table `%s`' ,'dropbox-backup') );
66
+ WPAdm_Core::log($log);
67
+ } else {
68
+ $log = str_replace('%s', $res[0], __('Optimize Table `%s` was successfully' ,'dropbox-backup') );
69
+ WPAdm_Core::log($log);
 
 
 
 
 
 
70
  }
71
  }
 
 
 
 
 
 
72
  }
73
+ WPAdm_Core::log( __('Optimize Database Tables was Finished' ,'dropbox-backup') );
74
+ $proc_data = WPAdm_Running::getCommandResultData('db');
75
+ $proc_data['optimize'] = true;
76
+ WPAdm_Running::setCommandResultData('db', $proc_data);
77
  }
78
  }
79
  }
82
  $proc_data = WPAdm_Running::getCommandResultData('repair');
83
  if (!isset($proc_data['work'])) {
84
  $link = $this->connect($db);
85
+
86
+ WPAdm_Core::log( __('MySQL of repair was started' ,'dropbox-backup') );
87
+ $n = $link->query('SHOW TABLE STATUS;');
88
+ $result = $link->last_result;
89
+ if (!empty( $link->last_error )) {
90
+ $this->setError($link->last_error);
91
+ return false;
92
+ }
93
+ if ($link->last_result === null) {
94
+ $this->setError(print_r(implode("\n", $link->error->errors), 1));
95
+ return false;
96
+ }
97
+ $tables = array();
98
+ for($i = 0; $i < $n; $i++ ) {
99
+ $row = get_object_vars( $result[$i] );
100
+ $tables[] = $row;
101
+ WPAdm_Core::log('Start repair table `' . $row['Name'] . '`' );
102
+ $res = $link->query("REPAIR TABLE {$row['Name']};");
103
+ if ($res == 1) {
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  $proc_data = WPAdm_Running::getCommandResultData('repair');
105
+ $proc_data['repair'][$table] = 1;
106
  WPAdm_Running::setCommandResultData('repair', $proc_data);
107
+ } else {
108
+ $this->setError($link->last_error);
109
  }
110
+ WPAdm_Core::log('Finish repair table `' . $row['Name'] . '`');
111
  }
112
+ $proc_data = WPAdm_Running::getCommandResultData('repair');
113
+ $proc_data['work'] = 1;
114
+ WPAdm_Running::setCommandResultData('repair', $proc_data);
115
  }
116
  }
117
 
120
  $proc_data = WPAdm_Running::getCommandResultData('db');
121
  if (!isset($proc_data['mysqldump'])) {
122
  $link = $this->connect($db);
123
+ WPAdm_Core::log( __('MySQL of Dump was started' ,'dropbox-backup') );
124
+ $tables = array();
125
+ $n = $link->query('SHOW TABLES');
126
+ $result = $link->last_result;
127
+ if (!empty( $link->last_error )) {
128
+ $this->setError($link->last_error);
129
+ return false;
130
+ }
131
+ if ($link->last_result === null) {
132
+ /* foreach($link->error->errors as $key => $errors) {
133
+ if ($key == db_connect_fail)
134
+ }*/
135
+ $this->setError(print_r(implode("\n", $link->error->errors), 1));
136
+ return false;
137
+ }
138
+ for($i = 0; $i < $n; $i++ ) {
139
+ $row = array_values( get_object_vars( $result[$i] ) );
140
+ $tables[] = $row[0];
141
+ }
142
+
143
+ foreach($tables as $table) {
144
+ $return = '';
145
+ $proc_data = WPAdm_Running::getCommandResultData('db');
146
+ if (!isset($proc_data['mysqldump_table'][$table])) {
147
+
148
+
149
+ $result = $link->last_result;
150
+ if (!empty( $link->last_error ) && $n > 0) {
151
+ $this->setError($link->last_error);
152
  }
153
+ $return.= 'DROP TABLE IF EXISTS ' . $table . ';';
 
 
 
 
 
154
 
155
+ $ress = $link->query('SHOW CREATE TABLE ' . $table);
156
+ $result2 = $link->last_result;
157
+ if (!empty( $link->last_error ) && $n > 0) {
158
+ $this->setError($link->last_error);
159
+ }
160
+ $row2 = array_values( get_object_vars( $result2[0] ) );
161
+ $return.= "\n\n".$row2[1].";\n\n";
162
 
163
+ file_put_contents($filename, $return, FILE_APPEND);
164
+ $proc_data = WPAdm_Running::getCommandResultData('db');
165
+ $proc_data['mysqldump_table'][$table] = 1;
166
+ WPAdm_Running::setCommandResultData('db', $proc_data);
167
+ $log = str_replace('%s', $table, __('Add a table "%s" in the database dump' ,'dropbox-backup') );
168
+ WPAdm_Core::log( $log );
169
+ }
170
+ $while = true;
171
+ while($while) {
172
+ $table_db = WPAdm_Running::getCommandResultData('tabledb');
173
+ if (isset($table_db[$table])) {
174
+ if (isset($table_db[$table]['work']) && $table_db[$table]['work'] == true) {
175
+ $from = $table_db[$table]['from']; // value from
176
+ $to = $table_db[$table]['to']; // value to
 
 
177
  }
178
+ } else {
179
+ $from = 0;
180
+ $to = $this->rows;
181
+ }
182
+ if (isset($from) && !empty($to) && $from >= 0 && $to >= 0) {
183
+ unset($link);
184
+ $link = $this->connect($db);
185
+ $num_fields = $link->query( 'SELECT * FROM ' . $table . " LIMIT {$from}, {$to}" );
186
+ if ($num_fields > 0) {
 
 
 
 
 
 
 
 
 
187
 
188
+ $result2 = $link->last_result;
189
+ for ($i = 0; $i < $num_fields; $i++) {
190
+ $return = '';
191
+ $row = array_values( get_object_vars( $result2[$i] ) );
192
+ //WPAdm_Core::log('row' . print_r($row, 1));
193
+ $rows_num = count($row);
194
+ if ($rows_num > 0) {
195
+ $return.= 'INSERT INTO ' . $table . ' VALUES(';
196
+ for($j=0; $j < $rows_num; $j++) {
197
+ $row[$j] = addslashes($row[$j]);
198
+ $row[$j] = str_replace("\n","\\n",$row[$j]);
199
+ if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
200
+ if ($j<($rows_num-1)) { $return.= ','; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
201
  }
202
+ $return .= ");\n";
203
+ file_put_contents($filename, $return, FILE_APPEND);
204
+ $from += 1;
205
+ $table_db[$table]['from'] = $from;
206
+ $table_db[$table]['to'] = $to;
207
+ $table_db[$table]['work'] = true;
208
+ WPAdm_Running::setCommandResultData('tabledb', $table_db);
209
+
210
  }
211
+
212
  }
213
+ $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') );
214
+ WPAdm_Core::log( $log );
215
+ } else {
216
+ $while = false;
217
+ $table_db[$table]['work'] = false;
218
+ WPAdm_Running::setCommandResultData('tabledb', $table_db);
219
  }
220
+ } else {
221
+ $while = false;
222
+ $table_db[$table]['work'] = false;
223
+ WPAdm_Running::setCommandResultData('tabledb', $table_db);
 
 
 
224
  }
225
  }
226
+ if (!isset($proc_data['mysqldump_table'][$table])) {
227
+ $return ="\n\n\n";
228
+ file_put_contents($filename, $return, FILE_APPEND);
 
 
 
229
  }
230
  }
231
+ unset($link);
232
+ WPAdm_Core::log( __('MySQL of Dump was finished' ,'dropbox-backup') );
233
+ $proc_data = WPAdm_Running::getCommandResultData('db');
234
+ $proc_data['mysqldump'] = true;
235
+ WPAdm_Running::setCommandResultData('db', $proc_data);
236
  return true;
237
  } else {
238
  return false;
247
  public function restore($db, $file)
248
  {
249
  $link = $this->connect($db);
250
+ WPAdm_Core::log( __('Restore Database was started' ,'dropbox-backup') );
251
  $fo = fopen($file, "r");
252
  if (!$fo) {
253
+ WPAdm_Core::log( __('Error in open file dump' ,'dropbox-backup') );
254
+ $this->setError( __('Error in open file dump' ,'dropbox-backup') );
255
  return false;
256
  }
257
  $sql = "";
272
  }
273
  }
274
  }
275
+ WPAdm_Core::log(__('Restore Database was finished' ,'dropbox-backup'));
276
  }
277
  }
278
  }
modules/class-wpadm-process.php DELETED
@@ -1,100 +0,0 @@
1
- <?php
2
-
3
- if ( ! defined( 'ABSPATH' ) ) exit;
4
-
5
- /**
6
- * Class WPAdm_Сommand
7
- */
8
- if (!class_exists('WPAdm_Process')) {
9
-
10
- class WPAdm_Process {
11
-
12
- public static $processes = array('repair', 'optimization', 'mysqldump', 'archiving', 'dropbox');
13
-
14
- private static $file_name = 'processes.data';
15
-
16
- private static $file = '';
17
-
18
- private static $data = array();
19
-
20
- public static function includeCore()
21
- {
22
- if (!class_exists('WPAdm_Core')) {
23
- include_once 'class-wpadm-core.php';
24
- WPAdm_Core::$pl_dir = DRBBACKUP_BASE_DIR;
25
- }
26
- self::$file = WPAdm_Core::getTmpDir() . '/' . self::$file_name;
27
- }
28
-
29
- public static function init($process, $all)
30
- {
31
- self::includeCore();
32
-
33
- if (file_exists(self::$file)) {
34
- self::$data = wpadm_unpack( file_get_contents( self::$file ) );
35
- }
36
- self::$data[$process]['all'] = $all;
37
- file_put_contents(self::$file, wpadm_pack( self::$data ) );
38
- }
39
-
40
-
41
-
42
- public static function clear()
43
- {
44
- self::includeCore();
45
- if ( file_exists( self::$file ) ) {
46
- unlink(self::$file);
47
- }
48
- }
49
-
50
- public static function set($process, $count = 0)
51
- {
52
- self::includeCore();
53
- if (file_exists(self::$file)) {
54
- self::$data = wpadm_unpack( file_get_contents( self::$file ) );
55
- }
56
- self::$data[$process]['count'] = $count;
57
- file_put_contents(self::$file, wpadm_pack( self::$data ) );
58
- }
59
-
60
- public static function setInc($process, $count = 0)
61
- {
62
- self::includeCore();
63
- if (file_exists(self::$file)) {
64
- self::$data = wpadm_unpack( file_get_contents( self::$file ) );
65
- }
66
- if (isset(self::$data[$process]['count'])) {
67
- self::set($process, self::$data[$process]['count'] + $count);
68
- } else {
69
- self::set($process, $count);
70
- }
71
- }
72
-
73
- public static function get($process)
74
- {
75
- self::includeCore();
76
- if (file_exists(self::$file)) {
77
- self::$data = wpadm_unpack( file_get_contents( self::$file ) );
78
- }
79
- $count = $procent = $all = 0;
80
- if ( isset( self::$data[$process]['all'] ) && self::$data[$process]['all'] > 0 ) {
81
- $all = self::$data[$process]['all'];
82
- $count = isset(self::$data[$process]['count']) ? self::$data[$process]['count'] : 0;
83
- $procent = round( ( ( $count / self::$data[$process]['all'] ) * 100 ) ) ;
84
- }
85
- return array('all' => $all, 'count' => $count, 'procent' => $procent);
86
- }
87
-
88
- public static function getAll()
89
- {
90
- $result = array();
91
- $n = count(self::$processes);
92
- for($i = 0; $i < $n; $i++) {
93
- $result[self::$processes[$i]] = self::get( self::$processes[$i] );
94
- }
95
- return $result;
96
- }
97
-
98
- }
99
-
100
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 {
@@ -16,9 +22,9 @@ if (!class_exists('WPAdm_Running')) {
16
 
17
  static function init_params_default($method = true)
18
  {
19
- update_option(PREFIX_BACKUP_ . "_commands", array());
20
  update_option(PREFIX_BACKUP_ . "proccess-command", array());
21
- set_transient('drb_running', 0, 60 * 5);
22
  $path = WPAdm_Core::getTmpDir();
23
  if (!empty($path)) {
24
  WPAdm_Core::rmdir($path . "/db");
@@ -37,23 +43,7 @@ if (!class_exists('WPAdm_Running')) {
37
  WPAdm_Core::rmdir($path . "/files-list-retore");
38
  WPAdm_Core::rmdir($path . "/extract-files-restore");
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");
59
  if (!empty($files)) {
@@ -62,13 +52,6 @@ if (!class_exists('WPAdm_Running')) {
62
  WPAdm_Core::rmdir($files[$i]);
63
  }
64
  }
65
- $files = glob($path ."/pclzip*.tmp");
66
- if (!empty($files)) {
67
- $n = count($files);
68
- for($i = 0; $i < $n; $i++) {
69
- WPAdm_Core::rmdir($files[$i]);
70
- }
71
- }
72
  $files = glob($path ."/wpadm_method*.done");
73
  if (!empty($files)) {
74
  $n = count($files);
@@ -78,144 +61,87 @@ if (!class_exists('WPAdm_Running')) {
78
  }
79
  }
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');
161
-
162
- if ( $locked > $time + 10 * 60 ) { // 10 minutes
163
- $locked = 0;
164
- }
165
- if ((defined('WP_CRON_LOCK_TIMEOUT') && $locked + WP_CRON_LOCK_TIMEOUT > $time) || (!defined('WP_CRON_LOCK_TIMEOUT') && $locked + 60 > $time)) {
166
- return false;
167
- }
168
- if (function_exists('_get_cron_array')) {
169
- $crons = _get_cron_array();
170
  } else {
171
- $crons = get_option('cron');
172
- }
173
- if (!is_array($crons)) {
174
- return false;
175
- }
176
-
177
- $values = array_values( $crons );
178
- if (isset($values['drb_run_backup'])) {
179
- $keys = array_keys( $crons );
180
- if ( isset($keys[0]) && $keys[0] > $time ) {
181
- return false;
182
- }
183
- }
184
- }
185
- $time = ini_get('max_execution_time');
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
-
196
- static function is_running()
197
- {
198
- $running = get_transient('drb_running');
199
- if ($running && $running == 1) {
200
- return true;
201
- }
202
- return false;
203
- }
204
-
205
- static function is_stop()
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
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
219
  static function getCommand($command = '')
220
  {
221
  $commands = get_option(PREFIX_BACKUP_ . "_commands");
@@ -242,13 +168,13 @@ if (!class_exists('WPAdm_Running')) {
242
  $commands = get_option(PREFIX_BACKUP_ . "_commands");
243
  if ($commands !== false && is_array($commands)) {
244
  $id = wpadm_in_array($method, 'method', $commands, true);
245
- unset($commands[$id]);
246
  if (!empty($commands)) {
247
  $commands = array_values($commands);
248
  } else {
249
  $commands = array();
250
  }
251
- update_option(PREFIX_BACKUP_ . "_commands", $commands);
252
  }
253
  }
254
 
@@ -271,6 +197,7 @@ if (!class_exists('WPAdm_Running')) {
271
  {
272
  $options = get_option( PREFIX_BACKUP_ . "proccess-command" );
273
  $id = wpadm_in_array($command, 'command', $options, true );
 
274
  if ($options === false || $id === false ) {
275
  $options[] = array('command' => $command, 'work' => 0);
276
  self::$command_result_id = wpadm_in_array($command, 'command', $options, true );
@@ -287,6 +214,7 @@ if (!class_exists('WPAdm_Running')) {
287
  static function setCommandResultData($command, $data = array())
288
  {
289
  $path = WPAdm_Core::getTmpDir();
 
290
  file_put_contents($path ."/$command", wpadm_pack( $data ) );
291
  }
292
  static function delCommandResultData($command)
@@ -310,13 +238,16 @@ if (!class_exists('WPAdm_Running')) {
310
  }
311
  static function getCommandResultData($command)
312
  {
313
- $path = WPAdm_Core::getTmpDir();
314
- if (file_exists($path . "/$command")) {
315
- $data = wpadm_unpack( file_get_contents( $path . "/$command" ) );
316
- return $data;
 
 
 
 
317
  }
318
-
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', '2048M');
12
+ }
13
+
14
+
15
  add_action('drb_run_backup', array('wpadm_running', 'init') );
16
 
17
  class WPAdm_Running {
22
 
23
  static function init_params_default($method = true)
24
  {
25
+ update_option(PREFIX_BACKUP_ . "_commands", array());
26
  update_option(PREFIX_BACKUP_ . "proccess-command", array());
27
+ set_transient('drb_running', 0, 60 * 5);
28
  $path = WPAdm_Core::getTmpDir();
29
  if (!empty($path)) {
30
  WPAdm_Core::rmdir($path . "/db");
43
  WPAdm_Core::rmdir($path . "/files-list-retore");
44
  WPAdm_Core::rmdir($path . "/extract-files-restore");
45
  WPAdm_Core::rmdir($path . "/cron-restore.data");
46
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  if ($method) {
48
  $files = glob($path ."/wpadm_method*.queue");
49
  if (!empty($files)) {
52
  WPAdm_Core::rmdir($files[$i]);
53
  }
54
  }
 
 
 
 
 
 
 
55
  $files = glob($path ."/wpadm_method*.done");
56
  if (!empty($files)) {
57
  $n = count($files);
61
  }
62
  }
63
  }
64
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
  static function init()
67
  {
68
  $command = self::getCommand();
69
+ if ($command) {
 
70
  WPAdm_Core::$cron = false;
71
  wpadm_class::$type = 'full';
72
+ //$time_load = ini_get("max_execution_time");
73
+ //WPAdm_Core::log('proccess is work ' . $time_load . 'sec');
74
+ /*if ($time_load != 0) {
75
+ self::run($time_load - 5);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  } else {
77
+ self::run(90);
78
+ } */
79
+ self::run(30);
80
+
81
+ if ( self::checkLock() ) {
82
+
83
+ $core = new WPAdm_Core($command, 'full_backup_dropbox', DRBBACKUP_BASE_DIR);
84
+ if ( $result = $core->getResult()->toArray(true) ) {
85
+ if ($result['result'] == 'success') {
86
+ self::delCommand($command['method']);
87
+ set_transient('drb_running', 0, 60 * 5);
88
+ self::stop();
89
+ self::setCommandResultData($command['method'], $result);
90
+ self::init();
91
+ } elseif ($result['result'] == 'error') {
92
+ self::setCommandResultData($command['method'], $result);
93
+ self::stop();
94
+ self::init_params_default();
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ public static function checkLock()
101
+ {
102
+ // false - cron is running
103
+ // true - cron not running
104
+ $running_cron = get_transient('drb_running');
105
+ if ($running_cron && $running_cron == 1) {
106
+ $time = microtime( true );
107
+ $locked = get_transient('doing_cron');
108
+
109
+ if ( $locked > $time + 10 * 60 ) { // 10 minutes
110
+ $locked = 0;
111
+ }
112
+ if ((defined('WP_CRON_LOCK_TIMEOUT') && $locked + WP_CRON_LOCK_TIMEOUT > $time) || (!defined('WP_CRON_LOCK_TIMEOUT') && $locked + 60 > $time)) {
113
+ return false;
114
+ }
115
+ if (function_exists('_get_cron_array')) {
116
+ $crons = _get_cron_array();
117
+ } else {
118
+ $crons = get_option('cron');
119
+ }
120
+ if (!is_array($crons)) {
121
+ return false;
122
+ }
123
+
124
+ $values = array_values( $crons );
125
+ if (isset($values['drb_run_backup'])) {
126
+ $keys = array_keys( $crons );
127
+ if ( isset($keys[0]) && $keys[0] > $time ) {
128
+ return false;
129
+ }
130
+ }
131
+ }
132
+ set_transient('drb_running', 1, 60 * 5);
133
+ return true;
134
+ }
135
+
136
+ static function is_running()
137
+ {
138
+ $running = get_transient('drb_running');
139
+ if ($running && $running == 1) {
140
+ return true;
141
+ }
142
+ return false;
143
+ }
144
+
145
  static function getCommand($command = '')
146
  {
147
  $commands = get_option(PREFIX_BACKUP_ . "_commands");
168
  $commands = get_option(PREFIX_BACKUP_ . "_commands");
169
  if ($commands !== false && is_array($commands)) {
170
  $id = wpadm_in_array($method, 'method', $commands, true);
171
+ unset($commands[$id]);
172
  if (!empty($commands)) {
173
  $commands = array_values($commands);
174
  } else {
175
  $commands = array();
176
  }
177
+ update_option(PREFIX_BACKUP_ . "_commands", $commands);
178
  }
179
  }
180
 
197
  {
198
  $options = get_option( PREFIX_BACKUP_ . "proccess-command" );
199
  $id = wpadm_in_array($command, 'command', $options, true );
200
+ self::$command_result = $command;
201
  if ($options === false || $id === false ) {
202
  $options[] = array('command' => $command, 'work' => 0);
203
  self::$command_result_id = wpadm_in_array($command, 'command', $options, true );
214
  static function setCommandResultData($command, $data = array())
215
  {
216
  $path = WPAdm_Core::getTmpDir();
217
+ self::$command_result_data = $data;
218
  file_put_contents($path ."/$command", wpadm_pack( $data ) );
219
  }
220
  static function delCommandResultData($command)
238
  }
239
  static function getCommandResultData($command)
240
  {
241
+ if (self::$command_result == $command) {
242
+ return self::$command_result_data;
243
+ } else {
244
+ $path = WPAdm_Core::getTmpDir();
245
+ if (file_exists($path . "/$command")) {
246
+ self::$command_result_data = wpadm_unpack( file_get_contents( $path . "/$command" ) );
247
+ return self::$command_result_data;
248
+ }
249
  }
 
250
  return array();
251
  }
252
  }
253
+ }
modules/constant.php CHANGED
@@ -53,13 +53,6 @@ if (!defined("WPADM_COUNT_LIMIT_SEND_TO_DROPBOX")) {
53
  define("WPADM_COUNT_LIMIT_SEND_TO_DROPBOX", 5);
54
  }
55
 
56
- if (!defined("SITE_HOME") && function_exists( 'home_url' ) ) {
57
  define("SITE_HOME", str_ireplace( array( 'http://', 'https://' ), '', home_url() ) );
58
- } else {
59
- if (class_exists('dbr_database')) {
60
- $data = dbr_database::db_get('options', array('option_value'), array('option_name' => 'home'), 1);
61
- if (isset($data['option_value'])) {
62
- define("SITE_HOME", str_ireplace( array( 'http://', 'https://' ), '', $data['option_value'] ) );
63
- }
64
- }
65
  }
53
  define("WPADM_COUNT_LIMIT_SEND_TO_DROPBOX", 5);
54
  }
55
 
56
+ if (!defined("SITE_HOME")) {
57
  define("SITE_HOME", str_ireplace( array( 'http://', 'https://' ), '', home_url() ) );
 
 
 
 
 
 
 
58
  }
modules/dropbox.class.php CHANGED
@@ -13,15 +13,15 @@ class dropbox
13
  private $chunk_size_mb = 50;
14
  private $request_token;
15
 
16
- private $api_url = "https://api.dropbox.com/1/"; // api.dropboxapi.com api.dropbox.com
17
  private $api_url_content = "https://api-content.dropbox.com/1/";
18
 
19
 
20
  /**
21
- * @param $app_key
22
- * @param $app_secret
23
- * @param string $token - постоянный токен
24
- */
25
  public function __construct ($app_key, $app_secret, $token = "")
26
  {
27
  $this->app_key = $app_key;
@@ -30,20 +30,20 @@ class dropbox
30
  }
31
 
32
  /**
33
- * Проверка на то, был ли получен постоянный токен
34
- *
35
- * @return bool
36
- */
37
  public function isAuth()
38
  {
39
  return !empty($this->token);
40
  }
41
 
42
  /**
43
- * Получение временного токена, необходимого для авторизации и получения токена постоянного
44
- *
45
- * @return mixed
46
- */
47
  public function getRequestToken()
48
  {
49
  if (!$this->request_token) {
@@ -56,11 +56,11 @@ class dropbox
56
  }
57
 
58
  /**
59
- * Авторизация, шаг1: Генерация ссылки для авторизации приложения
60
- *
61
- * @param $callback - URL для возвращения токена после авторизации
62
- * @return string
63
- */
64
  public function generateAuthUrl($callback)
65
  {
66
  $request_token = $this->getRequestToken();
@@ -70,11 +70,11 @@ class dropbox
70
 
71
 
72
  /**
73
- * Получение токена, необходимого для запросов к API
74
- *
75
- * @param $request_token - временный токен, полученный функцией getRequestToken
76
- * @return string токен
77
- */
78
  public function getAccessToken($request_token)
79
  {
80
  if (!empty($this->token)) {
@@ -89,25 +89,25 @@ class dropbox
89
  }
90
 
91
  /**
92
- * Удаление файла
93
- *
94
- * @param $file
95
- * @return mixed
96
- */
97
  public function deleteFile($file)
98
  {
99
  return $this->doApi("fileops/delete", "POST", array(
100
- "path" => $file,
101
- "root" => "auto"
102
  ));
103
  }
104
 
105
  /**
106
- * Удаление нескольких файлов
107
- *
108
- * @param array $files
109
- * @return array
110
- */
111
  public function deleteFiles($files = array())
112
  {
113
  $result = array();
@@ -115,8 +115,8 @@ class dropbox
115
  foreach ($files as $file) {
116
  $do = $this->deleteFile($file);
117
  $result[] = array (
118
- "name" => $file,
119
- "result" => $do['error'] ? 0 : 1
120
  );
121
  }
122
 
@@ -124,42 +124,43 @@ class dropbox
124
  }
125
 
126
  /**
127
- * Перемещение файлов
128
- *
129
- * @param $from - откуда
130
- * @param $to - куда
131
- * @return mixed
132
- */
133
  public function moveFile ($from, $to)
134
  {
135
  return $this->doApi("fileops/move", "POST", array(
136
- "root" => "auto",
137
- "from_path" => $from,
138
- "to_path" => $to
139
  ));
140
  }
141
 
142
  public function listing($path)
143
  {
144
  $dir = $this->doApi("metadata/auto/".ltrim($path, "/"), "GET", array(
145
- "list" => TRUE
146
  ));
147
 
148
  if ($dir['error']) {
149
  return $dir;
150
  }
151
- //this not folder
152
  elseif (!$dir['is_dir']) {
153
  return array (
154
- "size" => $dir['size'],
155
- "bytes" => $dir['bytes'],
156
- "date" => $dir['modified'],
157
- "name" => $dir['path']
158
  );
159
  }
160
 
161
  $all_size = 0;
162
  $items = array();
 
163
  foreach ($dir['contents'] as $item) {
164
  if (!$item['is_dir']) {
165
  switch (substr($item['size'], -2)) {
@@ -183,18 +184,18 @@ class dropbox
183
  }
184
 
185
  $items[] = array (
186
- "type" => $item['is_dir'] ? "dir" : "file",
187
- "date" => $item['modified'],
188
- "name" => basename($item['path']),
189
- "size" => $item['size']
190
  );
191
  }
192
 
193
  $dir_result = array (
194
- "size" => $this->bite2other($all_size),
195
- "date" => $dir['modified'],
196
- "name" => $dir['path'],
197
- "items" => $items
198
  );
199
 
200
  return $dir_result;
@@ -210,23 +211,23 @@ class dropbox
210
  if ($size < $kb) {
211
  return $size.' B';
212
  } else if ($size < $mb) {
213
- return round($size / $kb, 2).' KB';
214
- } else if ($size < $gb) {
215
- return round($size / $mb, 2).' MB';
216
- } else if ($size < $tb) {
217
- return round($size / $gb, 2).' GB';
218
- } else {
219
- return round($size / $tb, 2).' TB';
220
  }
221
  }
222
 
223
  /**
224
- * Скачивание файла
225
- *
226
- * @param $file
227
- * @param $server_path - путь, куда скачать на сервер. Если задан -- вернет путь к файлу в случае успешной загрузки.
228
- * @return array
229
- */
230
  public function downloadFile($file, $server_path = "")
231
  {
232
  $isset = $this->listing($file);
@@ -244,9 +245,8 @@ class dropbox
244
  header("Content-Transfer-Encoding: binary");
245
 
246
  $this->doApi("files/auto/".ltrim($file, "/"), "GET", array(), array(
247
- 'socket' => array('file_download' => $server_path),
248
- CURLOPT_BINARYTRANSFER => 1,
249
- CURLOPT_RETURNTRANSFER => 0,
250
  ), TRUE);
251
  exit;
252
  }
@@ -255,16 +255,15 @@ class dropbox
255
  //Файл недоступен для записи
256
  if (!$fd = fopen($server_path, "wb")) {
257
  return array (
258
- "error" => 1,
259
- "text" => "File '".$server_path."' not writable"
260
  );
261
  }
262
 
263
  $this->doApi("files/auto/".ltrim($file, "/"), "GET", array(), array(
264
- 'socket' => array('file_download' => $server_path),
265
- CURLOPT_BINARYTRANSFER => 1,
266
- CURLOPT_RETURNTRANSFER => 1,
267
- CURLOPT_FILE => $fd
268
  ), TRUE);
269
 
270
  fclose($fd);
@@ -279,12 +278,12 @@ class dropbox
279
  }
280
 
281
  /**
282
- * Поделиться файлом
283
- *
284
- * @param $file
285
- * @param bool $short_url - короткая ссылка
286
- * @return mixed
287
- */
288
  public function shareFile($file, $short_url = TRUE)
289
  {
290
  $result = $this->doApi("shares/auto/".ltrim($file, "/"), "POST", compact("short_url"));
@@ -292,12 +291,12 @@ class dropbox
292
  }
293
 
294
  /**
295
- * Загрузка нескольких файлов
296
- *
297
- * @param $files - массив формата файл_на_сервере => файл_в_дропбоксе
298
- *
299
- * @return array - информация о списке файлов
300
- */
301
  public function uploadFiles($files = array())
302
  {
303
  $result = array();
@@ -305,8 +304,8 @@ class dropbox
305
  foreach ($files as $file => $dbx) {
306
  $do = $this->uploadFile($file, $dbx);
307
  $result[] = array (
308
- "name" => $file,
309
- "result" => $do['error'] ? 0 : 1
310
  );
311
  }
312
 
@@ -314,13 +313,13 @@ class dropbox
314
  }
315
 
316
  /**
317
- * Загрузка файла
318
- *
319
- * @param $file_path - путь к файлу на сервере
320
- * @param $dropbox_path - куда загружать, если не задан, будет загружен в корень дропбокса с таким же именем
321
- * @param bool $overwrite - заменять ли файлы со схожими именами
322
- * @return mixed
323
- */
324
  public function uploadFile($file_path, $dropbox_path = "", $overwrite = FALSE)
325
  {
326
  if (empty($dropbox_path)) {
@@ -329,8 +328,8 @@ class dropbox
329
 
330
  if (!is_file($file_path)) {
331
  return array(
332
- "error" => 1,
333
- "text" => "File '".$file_path."' not found."
334
  );
335
  }
336
 
@@ -340,16 +339,15 @@ class dropbox
340
  if ($fsize/1024/1024 < $this->max_filesize_mb)
341
  {
342
  $result = $this->doApi("files_put/auto/".ltrim($dropbox_path, "/"),
343
- "PUT",
344
- compact ("overwrite"),
345
- array(
346
- 'socket' => array('file' => $file_path),
347
- CURLOPT_INFILE => $file,
348
- CURLOPT_INFILESIZE => filesize($file_path),
349
- CURLOPT_BINARYTRANSFER => 1,
350
- CURLOPT_PUT => 1
351
- ),
352
- TRUE);
353
 
354
  }
355
  //Файл слишком велик
@@ -363,17 +361,15 @@ class dropbox
363
  $offset += $chunk;
364
 
365
  $result = $this->doApi("chunked_upload",
366
- "PUT",
367
- compact("upload_id", "offset"),
368
- array(
369
- 'socket' => array('file' => $file_path, 'dropbox_path' => $dropbox_path),
370
-
371
- CURLOPT_INFILE => $file,
372
- CURLOPT_INFILESIZE => $chunk,
373
- CURLOPT_BINARYTRANSFER => 1,
374
- CURLOPT_PUT => 1
375
- ),
376
- TRUE);
377
 
378
  fseek($file, $offset);
379
  if($offset >= $fsize) {
@@ -386,10 +382,10 @@ class dropbox
386
  }
387
 
388
  $result = $this->doApi("commit_chunked_upload/auto/".ltrim($dropbox_path, "/"),
389
- "POST",
390
- compact("upload_id", "overwrite"),
391
- array(),
392
- TRUE);
393
  }
394
 
395
  @fclose($file);
@@ -398,61 +394,73 @@ class dropbox
398
  }
399
 
400
  /**
401
- * Создание директории
402
- *
403
- * @param $path
404
- * @return mixed
405
- */
406
  public function createDir($path)
407
  {
408
  return $this->doApi("fileops/create_folder", "POST", array(
409
- "root" => "auto",
410
- "path" => $path
411
  ));
412
  }
413
 
414
  /**
415
- * Информация об аккаунте
416
- *
417
- * @return mixed
418
- */
419
  public function accInfo()
420
  {
421
  return $this->doApi("account/info", "GET");
422
  }
423
 
424
  /** Запрос к API
425
- *
426
- * @param $op - операция (url)
427
- * @param $method - post/get
428
- * @param array $data - доп. данные, url запрос
429
- * @param array $opts - доп. параметры для curl
430
- * @param $api_content - использовать url для загрузки файлов
431
- * @return mixed
432
- */
433
  private function doApi ($op, $method, $data = array(), $opts = array(), $api_content = FALSE)
434
  {
435
  if (($method == "GET" || $method == "PUT") && count($data)) {
436
  $op .= "?".http_build_query($data);
437
  }
438
-
439
  $result = $this->doCurl((!$api_content ? $this->api_url : $this->api_url_content).$op, $method, $data, $opts);
440
  $return = json_decode($result, TRUE);
441
  return self::checkError($return);
442
  }
443
 
444
  /**
445
- * Обертка для отправки подписанного запроса через curl
446
- *
447
- * @param $url
448
- * @param string $method
449
- * @param array $data - POST данные
450
- * @param $opts - доп. параметры для curl
451
- * @return mixed
452
- */
453
  public function doCurl($url, $method = "POST", $data = array(), $opts = array())
454
  {
455
- $result = '';
 
 
 
 
 
 
 
 
 
 
 
 
 
456
  $oauth = new OAuthSimple($this->app_key, $this->app_secret);
457
 
458
  if (!$this->request_token && $this->token) {
@@ -476,141 +484,23 @@ class dropbox
476
  }
477
 
478
  $signed = $oauth->sign(array(
479
- 'action' => $method,
480
- 'path' => $path
481
- )
482
  );
 
483
 
484
- if (function_exists('curl_init')) {
485
- if (isset($opts['socket'])) {
486
- unset($opts['socket']);
487
- }
488
- $ch = curl_init($url);
489
- $opts += array(
490
- CURLOPT_RETURNTRANSFER => 1,
491
- CURLOPT_HEADER => 0,
492
- CURLOPT_SSL_VERIFYPEER => 0,
493
- CURLOPT_SSL_VERIFYHOST => 0,
494
- );
495
-
496
- if ($method == "POST") {
497
- $opts[CURLOPT_POST] = TRUE;
498
- $opts[CURLOPT_POSTFIELDS] = http_build_query($data);
499
- }
500
-
501
- //$oauth = new OAuthSimple($this->app_key, $this->app_secret);
502
-
503
- /*if (!$this->request_token && $this->token) {
504
- $this->request_token = $this->token;
505
- }
506
-
507
- if ($this->request_token) {
508
- $oauth->setParameters(array('oauth_token' => $this->request_token['oauth_token']));
509
- $oauth->signatures(array('oauth_secret'=> $this->request_token['oauth_token_secret']));
510
- }
511
-
512
- if ($method == "POST" && count($data)) {
513
- $oauth->setParameters(http_build_query($data));
514
- }
515
-
516
- $path = $url;
517
- $query = strrchr($url,'?');
518
- if(!empty($query)) {
519
- $oauth->setParameters(substr($query,1));
520
- $path = substr($url, 0, -strlen($query));
521
- }
522
 
523
- $signed = $oauth->sign(array(
524
- 'action' => $method,
525
- 'path' => $path
526
- )
527
- ); */
528
- $opts[CURLOPT_HTTPHEADER][] = "Authorization: ".$signed['header'];
529
 
530
- if ($method == "PUT") {
531
- $opts[CURLOPT_CUSTOMREQUEST] = "PUT";
532
- }
533
- curl_setopt_array($ch, $opts);
534
- $result = curl_exec($ch);
535
-
536
- } elseif (function_exists('fsockopen')) {
537
- include_once dirname(__FILE__) . '/HttpFsockopen.php';
538
- $socket = new HttpFsockopen($url, false);
539
- if ($method == 'POST') {
540
- $socket->setPostData($data);
541
- }
542
- if ($method == 'PUT') {
543
- if (isset($opts['socket']['file'])) {
544
- $data = '';
545
- srand( (double)microtime() * 1000000);
546
- $file_data = join('', file( $opts['socket']['file'] ) ) ;
547
- $rand = substr( md5( rand( 0, 32000 ) ), 0, 10);
548
- $boundary = $rand;
549
- $data = "";
550
- $data .= "Content-Disposition: form-data; name=\"" . basename($opts['socket']['file']) ."\"; filename=\"" . basename( $opts['socket']['file'] ) . "\"\r\n";
551
- $data .= "Content-Type: application/x-www-form-urlencoded;\r\n"; //multipart/form-data;
552
- $data .= "Content-length: " . strlen($file_data) . "\r\n";
553
- $data .= "Connection: close\r\n\r\n";
554
- $data .= $file_data ;
555
- $socket->setStrHeaders($data);
556
- $socket->setMethod("PUT");
557
- }
558
- }
559
- $socket->setHeaders('Authorization', $signed['header']);
560
- $res = $socket->exec();
561
- if ($method == 'GET') {
562
- if (isset($opts['socket']['file_download'])) {
563
- $r = $this->getResult($res);
564
- if (isset($r[1])) {
565
- file_put_contents($opts['socket']['file_download'], $r[1]);
566
- }
567
- }
568
- }
569
- if ( empty($result) ) {
570
- $res = $this->getResult($res);
571
- if (isset($res[1])) {
572
- $res1 = $this->getResult($res[1], "\r", true);
573
- preg_match("/{.*}/is", trim($res1), $r);
574
- if(isset($r[0])) {
575
- $result = $r[0];
576
- } else {
577
- $res1 = $this->getResult($res[1], "\n", true);
578
- preg_match("/{.*}/is", trim($res1), $r);
579
- if(isset($r[0])) {
580
- $result = $r[0];
581
- } else {
582
- $res1 = $this->getResult($res[1], "\r\n", true);
583
- preg_match("/{.*}/is", trim($res1), $r);
584
- if(isset($r[0])) {
585
- $result = $r[0];
586
- }
587
-
588
- }
589
- }
590
-
591
- }
592
- }
593
- }
594
  return $result;
595
  }
596
 
597
- private function getResult($str, $patern = "\r\n\r\n", $is_json = false)
598
- {
599
- if ($is_json === false) {
600
- return explode($patern, $str);
601
- } else {
602
- $res = explode($patern, $str);
603
- $n = count($res);
604
- $result = '';
605
- for($i = 0; $i < $n; $i++) {
606
- if ( preg_match_all("/[\{\"\:\,\}\s]+/is", trim($res[$i]), $r ) ) {
607
- $result .= str_replace(array("\r", "\n"), '', $res[$i]);
608
- }
609
- }
610
- return $result;
611
- }
612
- }
613
-
614
 
615
  private static function checkError($return)
616
  {
13
  private $chunk_size_mb = 50;
14
  private $request_token;
15
 
16
+ private $api_url = "https://api.dropbox.com/1/";
17
  private $api_url_content = "https://api-content.dropbox.com/1/";
18
 
19
 
20
  /**
21
+ * @param $app_key
22
+ * @param $app_secret
23
+ * @param string $token - постоянный токен
24
+ */
25
  public function __construct ($app_key, $app_secret, $token = "")
26
  {
27
  $this->app_key = $app_key;
30
  }
31
 
32
  /**
33
+ * Проверка на то, был ли получен постоянный токен
34
+ *
35
+ * @return bool
36
+ */
37
  public function isAuth()
38
  {
39
  return !empty($this->token);
40
  }
41
 
42
  /**
43
+ * Получение временного токена, необходимого для авторизации и получения токена постоянного
44
+ *
45
+ * @return mixed
46
+ */
47
  public function getRequestToken()
48
  {
49
  if (!$this->request_token) {
56
  }
57
 
58
  /**
59
+ * Авторизация, шаг1: Генерация ссылки для авторизации приложения
60
+ *
61
+ * @param $callback - URL для возвращения токена после авторизации
62
+ * @return string
63
+ */
64
  public function generateAuthUrl($callback)
65
  {
66
  $request_token = $this->getRequestToken();
70
 
71
 
72
  /**
73
+ * Получение токена, необходимого для запросов к API
74
+ *
75
+ * @param $request_token - временный токен, полученный функцией getRequestToken
76
+ * @return string токен
77
+ */
78
  public function getAccessToken($request_token)
79
  {
80
  if (!empty($this->token)) {
89
  }
90
 
91
  /**
92
+ * Удаление файла
93
+ *
94
+ * @param $file
95
+ * @return mixed
96
+ */
97
  public function deleteFile($file)
98
  {
99
  return $this->doApi("fileops/delete", "POST", array(
100
+ "path" => $file,
101
+ "root" => "auto"
102
  ));
103
  }
104
 
105
  /**
106
+ * Удаление нескольких файлов
107
+ *
108
+ * @param array $files
109
+ * @return array
110
+ */
111
  public function deleteFiles($files = array())
112
  {
113
  $result = array();
115
  foreach ($files as $file) {
116
  $do = $this->deleteFile($file);
117
  $result[] = array (
118
+ "name" => $file,
119
+ "result" => $do['error'] ? 0 : 1
120
  );
121
  }
122
 
124
  }
125
 
126
  /**
127
+ * Перемещение файлов
128
+ *
129
+ * @param $from - откуда
130
+ * @param $to - куда
131
+ * @return mixed
132
+ */
133
  public function moveFile ($from, $to)
134
  {
135
  return $this->doApi("fileops/move", "POST", array(
136
+ "root" => "auto",
137
+ "from_path" => $from,
138
+ "to_path" => $to
139
  ));
140
  }
141
 
142
  public function listing($path)
143
  {
144
  $dir = $this->doApi("metadata/auto/".ltrim($path, "/"), "GET", array(
145
+ "list" => TRUE
146
  ));
147
 
148
  if ($dir['error']) {
149
  return $dir;
150
  }
151
+ //Это не папка
152
  elseif (!$dir['is_dir']) {
153
  return array (
154
+ "size" => $dir['size'],
155
+ "bytes" => $dir['bytes'],
156
+ "date" => $dir['modified'],
157
+ "name" => $dir['path']
158
  );
159
  }
160
 
161
  $all_size = 0;
162
  $items = array();
163
+
164
  foreach ($dir['contents'] as $item) {
165
  if (!$item['is_dir']) {
166
  switch (substr($item['size'], -2)) {
184
  }
185
 
186
  $items[] = array (
187
+ "type" => $item['is_dir'] ? "dir" : "file",
188
+ "date" => $item['modified'],
189
+ "name" => basename($item['path']),
190
+ "size" => $item['size']
191
  );
192
  }
193
 
194
  $dir_result = array (
195
+ "size" => $this->bite2other($all_size),
196
+ "date" => $dir['modified'],
197
+ "name" => $dir['path'],
198
+ "items" => $items
199
  );
200
 
201
  return $dir_result;
211
  if ($size < $kb) {
212
  return $size.' B';
213
  } else if ($size < $mb) {
214
+ return round($size / $kb, 2).' KB';
215
+ } else if ($size < $gb) {
216
+ return round($size / $mb, 2).' MB';
217
+ } else if ($size < $tb) {
218
+ return round($size / $gb, 2).' GB';
219
+ } else {
220
+ return round($size / $tb, 2).' TB';
221
  }
222
  }
223
 
224
  /**
225
+ * Скачивание файла
226
+ *
227
+ * @param $file
228
+ * @param $server_path - путь, куда скачать на сервер. Если задан -- вернет путь к файлу в случае успешной загрузки.
229
+ * @return array
230
+ */
231
  public function downloadFile($file, $server_path = "")
232
  {
233
  $isset = $this->listing($file);
245
  header("Content-Transfer-Encoding: binary");
246
 
247
  $this->doApi("files/auto/".ltrim($file, "/"), "GET", array(), array(
248
+ CURLOPT_BINARYTRANSFER => 1,
249
+ CURLOPT_RETURNTRANSFER => 0,
 
250
  ), TRUE);
251
  exit;
252
  }
255
  //Файл недоступен для записи
256
  if (!$fd = fopen($server_path, "wb")) {
257
  return array (
258
+ "error" => 1,
259
+ "text" => "File '".$server_path."' not writable"
260
  );
261
  }
262
 
263
  $this->doApi("files/auto/".ltrim($file, "/"), "GET", array(), array(
264
+ CURLOPT_BINARYTRANSFER => 1,
265
+ CURLOPT_RETURNTRANSFER => 1,
266
+ CURLOPT_FILE => $fd
 
267
  ), TRUE);
268
 
269
  fclose($fd);
278
  }
279
 
280
  /**
281
+ * Поделиться файлом
282
+ *
283
+ * @param $file
284
+ * @param bool $short_url - короткая ссылка
285
+ * @return mixed
286
+ */
287
  public function shareFile($file, $short_url = TRUE)
288
  {
289
  $result = $this->doApi("shares/auto/".ltrim($file, "/"), "POST", compact("short_url"));
291
  }
292
 
293
  /**
294
+ * Загрузка нескольких файлов
295
+ *
296
+ * @param $files - массив формата файл_на_сервере => файл_в_дропбоксе
297
+ *
298
+ * @return array - информация о списке файлов
299
+ */
300
  public function uploadFiles($files = array())
301
  {
302
  $result = array();
304
  foreach ($files as $file => $dbx) {
305
  $do = $this->uploadFile($file, $dbx);
306
  $result[] = array (
307
+ "name" => $file,
308
+ "result" => $do['error'] ? 0 : 1
309
  );
310
  }
311
 
313
  }
314
 
315
  /**
316
+ * Загрузка файла
317
+ *
318
+ * @param $file_path - путь к файлу на сервере
319
+ * @param $dropbox_path - куда загружать, если не задан, будет загружен в корень дропбокса с таким же именем
320
+ * @param bool $overwrite - заменять ли файлы со схожими именами
321
+ * @return mixed
322
+ */
323
  public function uploadFile($file_path, $dropbox_path = "", $overwrite = FALSE)
324
  {
325
  if (empty($dropbox_path)) {
328
 
329
  if (!is_file($file_path)) {
330
  return array(
331
+ "error" => 1,
332
+ "text" => "File '".$file_path."' not found."
333
  );
334
  }
335
 
339
  if ($fsize/1024/1024 < $this->max_filesize_mb)
340
  {
341
  $result = $this->doApi("files_put/auto/".ltrim($dropbox_path, "/"),
342
+ "PUT",
343
+ compact ("overwrite"),
344
+ array(
345
+ CURLOPT_INFILE => $file,
346
+ CURLOPT_INFILESIZE => filesize($file_path),
347
+ CURLOPT_BINARYTRANSFER => 1,
348
+ CURLOPT_PUT => 1
349
+ ),
350
+ TRUE);
 
351
 
352
  }
353
  //Файл слишком велик
361
  $offset += $chunk;
362
 
363
  $result = $this->doApi("chunked_upload",
364
+ "PUT",
365
+ compact("upload_id", "offset"),
366
+ array(
367
+ CURLOPT_INFILE => $file,
368
+ CURLOPT_INFILESIZE => $chunk,
369
+ CURLOPT_BINARYTRANSFER => 1,
370
+ CURLOPT_PUT => 1
371
+ ),
372
+ TRUE);
 
 
373
 
374
  fseek($file, $offset);
375
  if($offset >= $fsize) {
382
  }
383
 
384
  $result = $this->doApi("commit_chunked_upload/auto/".ltrim($dropbox_path, "/"),
385
+ "POST",
386
+ compact("upload_id", "overwrite"),
387
+ array(),
388
+ TRUE);
389
  }
390
 
391
  @fclose($file);
394
  }
395
 
396
  /**
397
+ * Создание директории
398
+ *
399
+ * @param $path
400
+ * @return mixed
401
+ */
402
  public function createDir($path)
403
  {
404
  return $this->doApi("fileops/create_folder", "POST", array(
405
+ "root" => "auto",
406
+ "path" => $path
407
  ));
408
  }
409
 
410
  /**
411
+ * Информация об аккаунте
412
+ *
413
+ * @return mixed
414
+ */
415
  public function accInfo()
416
  {
417
  return $this->doApi("account/info", "GET");
418
  }
419
 
420
  /** Запрос к API
421
+ *
422
+ * @param $op - операция (url)
423
+ * @param $method - post/get
424
+ * @param array $data - доп. данные, url запрос
425
+ * @param array $opts - доп. параметры для curl
426
+ * @param $api_content - использовать url для загрузки файлов
427
+ * @return mixed
428
+ */
429
  private function doApi ($op, $method, $data = array(), $opts = array(), $api_content = FALSE)
430
  {
431
  if (($method == "GET" || $method == "PUT") && count($data)) {
432
  $op .= "?".http_build_query($data);
433
  }
 
434
  $result = $this->doCurl((!$api_content ? $this->api_url : $this->api_url_content).$op, $method, $data, $opts);
435
  $return = json_decode($result, TRUE);
436
  return self::checkError($return);
437
  }
438
 
439
  /**
440
+ * Обертка для отправки подписанного запроса через curl
441
+ *
442
+ * @param $url
443
+ * @param string $method
444
+ * @param array $data - POST данные
445
+ * @param $opts - доп. параметры для curl
446
+ * @return mixed
447
+ */
448
  public function doCurl($url, $method = "POST", $data = array(), $opts = array())
449
  {
450
+ $ch = curl_init($url);
451
+ $opts += array(
452
+ CURLOPT_RETURNTRANSFER => 1,
453
+ CURLOPT_HEADER => 0,
454
+ CURLOPT_SSL_VERIFYPEER => 0,
455
+ CURLOPT_SSL_VERIFYHOST => 0,
456
+ );
457
+
458
+
459
+ if ($method == "POST") {
460
+ $opts[CURLOPT_POST] = TRUE;
461
+ $opts[CURLOPT_POSTFIELDS] = http_build_query($data);
462
+ }
463
+
464
  $oauth = new OAuthSimple($this->app_key, $this->app_secret);
465
 
466
  if (!$this->request_token && $this->token) {
484
  }
485
 
486
  $signed = $oauth->sign(array(
487
+ 'action' => $method,
488
+ 'path' => $path
489
+ )
490
  );
491
+ $opts[CURLOPT_HTTPHEADER][] = "Authorization: ".$signed['header'];
492
 
493
+ if ($method == "PUT")
494
+ {
495
+ $opts[CURLOPT_CUSTOMREQUEST] = "PUT";
496
+ }
497
+ curl_setopt_array($ch, $opts);
498
+ $result = curl_exec($ch);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
499
 
 
 
 
 
 
 
500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
501
  return $result;
502
  }
503
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
504
 
505
  private static function checkError($return)
506
  {
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
@@ -1,34 +1,5 @@
1
  <?php
2
 
3
- if (!function_exists('dbr_extract_func')) {
4
- function dbr_extract_func($p_event, &$p_header)
5
- {
6
- if (stripos($p_header['filename'], 'wp-config.php') !== false) {
7
- return 0;
8
- }
9
- if (stripos($p_header['filename'], 'dropbox-backup') !== false) {
10
- return 0;
11
- }
12
- return 1;
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')) {
@@ -40,83 +11,28 @@ if (!class_exists('dbr_gui')) {
40
  if (!class_exists('dbr_database')) {
41
  class dbr_database {
42
  private static $connect = null;
43
- private static $is_mysqli = true;
44
  private static $db = null;
45
- public static $db_prefix = '';
46
  public static $error = '';
47
- public static $db_params = '';
48
-
49
-
50
- private static function getWpMysqlParams()
51
- {
52
- $configs = dbr_helper::getCommand('db-settings');
53
- if ($configs === false) {
54
- $db_params = array(
55
- 'password' => 'DB_PASSWORD',
56
- 'db' => 'DB_NAME',
57
- 'user' => 'DB_USER',
58
- 'host' => 'DB_HOST',
59
- 'charset' => 'DB_CHARSET',
60
- );
61
-
62
- $r = "/define\([\s]{0,}'(.*)'[\s]{0,},[\s]{0,}'(.*)'[\s]{0,}\)/";
63
- preg_match_all($r, @file_get_contents(ABSPATH . "wp-config.php"), $m);
64
- preg_match("/table_prefix[\s]{0,}=[\s]{0,}[\"']{1}(.*)[\"']{1}/U", @file_get_contents(ABSPATH . "wp-config.php"), $pr);
65
- $params = array_combine($m[1], $m[2]);
66
- foreach($db_params as $k => $p) {
67
- $db_params[$k] = $params[$p];
68
- }
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;
76
- self::$db_prefix = dbr_helper::getCommand('db-settings-prefix');
77
- }
78
- return $db_params;
79
- }
80
 
81
  public static function inc_wp_config()
82
  {
83
  if (!defined('DB_NAME') && !defined('DB_USER') && !defined('DB_PASSWORD') && !defined('DB_HOST') && is_null(self::$connect) ) {
84
 
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;
 
 
92
  } else {
93
- self::$is_mysqli = false;
94
- }
95
-
96
- if (strpos(self::$db_params['host'], ':') !== false) {
97
- $host = explode(":", self::$db_params['host']);
98
- if (self::$is_mysqli) {
99
- self::$connect = mysqli_connect($host[0], self::$db_params['user'], self::$db_params['password'], self::$db_params['db'], $host[1]) or die(mysqli_error());
100
- mysqli_set_charset(self::$connect, self::$db_params['charset']) or die(mysql_error());
101
- } else {
102
- self::$connect = mysql_connect($host[0], self::$db_params['user'], self::$db_params['password'], self::$db_params['db'], $host[1]) or die(mysql_error());
103
- mysql_set_charset(self::$connect, self::$db_params['charset']) or die(mysql_error());
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
- }
115
- }
116
- if (self::$connect) {
117
- dbr_helper::setCommand('db-settings', self::$db_params);
118
- dbr_helper::setCommand('db-settings-prefix', self::$db_prefix);
119
- }
120
  }
121
  }
122
  public static function db_insert($table, $vars = array())
@@ -171,7 +87,7 @@ if (!class_exists('dbr_database')) {
171
  }
172
  return false;
173
  }
174
- public static function db_get($table, $var_key = null, $var_search = null, $limit = -1, $res_type = '', $keys_array = "", $value_array = "" )
175
  {
176
  if (!isset($var_key)) $d = "*";
177
  else {
@@ -200,25 +116,14 @@ if (!class_exists('dbr_database')) {
200
  return self::returnArray($query, $limit, $res_type, $keys_array, $value_array);
201
  }
202
  public static function query($stmt)
203
- {
204
- if (self::$is_mysqli) {
205
- $res = mysqli_query(self::$connect, $stmt);
206
- } else {
207
- $res = mysql_query($stmt, self::$connect );
208
- }
209
-
210
  if ( $res === false ) {
211
- if (self::$is_mysqli) {
212
- self::$error = mysqli_error(self::$connect);
213
- } else {
214
- self::$error = mysql_error(self::$connect);
215
- }
216
  }
217
-
218
  if ($res !== false and preg_match("/^INSERT/i", ltrim($stmt))) {
219
  return self::lastID(self::$connect);
220
  }
221
-
222
  return $res;
223
  }
224
  /**
@@ -227,21 +132,14 @@ if (!class_exists('dbr_database')) {
227
  */
228
  public static function lastID($lastlink)
229
  {
230
- if (self::$is_mysqli) {
231
- return mysqli_insert_id($lastlink);
232
- } else {
233
- return mysql_insert_id($lastlink);
234
- }
235
  }
236
  public static function num($res)
237
  {
238
- if (self::$is_mysqli) {
239
- return mysqli_num_rows($res);
240
- } else {
241
- return mysql_num_rows($res);
242
- }
243
  }
244
- private static function returnArray($query, $limit = 1, $res_type = '', $key = "", $value = "")
245
  {
246
  if ($query && self::num($query) > 0) {
247
  $res = false;
@@ -280,19 +178,9 @@ if (!class_exists('dbr_database')) {
280
  }
281
  return false;
282
  }
283
- private static function fetch ($res, $res_type = '')
284
  {
285
- if (defined('MYSQL_BOTH') && empty( $res_type ) ) {
286
- $res_type = MYSQL_BOTH;
287
- } elseif( defined('MYSQLI_BOTH') && empty( $res_type ) ) {
288
- $res_type = MYSQLI_BOTH;
289
- }
290
- if (self::$is_mysqli) {
291
- return mysqli_fetch_array($res, $res_type);
292
- } else {
293
- return mysql_fetch_array($res, $res_type);
294
- }
295
-
296
  }
297
 
298
  public static function value_keys($array_from, $key = "", $value = "")
@@ -328,345 +216,59 @@ if ( !class_exists('dbr_api') ) {
328
  $result = '';
329
  if (function_exists("curl_init") && function_exists("curl_setopt") && function_exists("curl_exec") && function_exists("curl_close")) {
330
  $curl = curl_init($url);
331
-
332
  $post = http_build_query($post, '', '&');
333
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
334
  curl_setopt($curl, CURLOPT_POST, true);
335
- curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
336
  if (!empty($options)) {
337
  if(isset($options['timelimit'])) {
338
  curl_setopt($curl, CURLOPT_TIMEOUT, $options['timelimit']);
339
  }
340
  }
 
341
  $result = curl_exec($curl);
342
  $info = curl_getinfo($curl);
343
  curl_close($curl);
344
  } elseif (function_exists("fsockopen")) {
345
- include_once 'HttpFsockopen.php';
346
- $socket = new HttpFsockopen($url, false);
347
- $socket->setPostData($post);
348
- if (isset($options['timelimit'])) {
349
- $socket->setTimeout($options['timelimit']);
350
- }
351
- $res = $socket->exec();
352
- $res = self::getResult($res);
353
- if (isset($res[1])) {
354
- $result = $res[1];
355
- }
356
- }
357
- return array('res' => $result, 'info' => $info );
358
- }
359
- public static function getResult ($str, $patern = "\r\n\r\n", $is_json = false)
360
- {
361
- if ($is_json === false) {
362
- return explode($patern, $str);
363
- } else {
364
- $res = explode($patern, $str);
365
- $n = count($res);
366
- $result = '';
367
- for($i = 0; $i < $n; $i++) {
368
- if ( preg_match_all("/[\{\"\:\,\}\s]+/is", trim($res[$i]), $r ) ) {
369
- $result .= str_replace(array("\r", "\n"), '', $res[$i]);
370
- }
371
- }
372
- return $result;
373
- }
374
- }
375
- }
376
-
377
- }
378
-
379
- if ( !class_exists('dbr_helper') ) {
380
- class 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
 
655
- public static function is_writable($file_dir = '')
656
- {
657
- if (!empty($file_dir)) {
658
- if (is_dir($file_dir)) {
659
- @file_put_contents($file_dir . "/test.file", 'test writable');
660
- if ( file_exists($file_dir . "/test.file") && is_writable($file_dir . "/test.file") && filesize($file_dir . "/test.file") > 0 ) {
661
- return true;
662
- }
663
- }
664
- if (file_exists($file_dir) && is_file($file_dir)) {
665
- return is_writable($file_dir);
666
- }
667
- }
668
- return false;
669
- }
670
 
671
  public static function setError($txt)
672
  {
@@ -678,7 +280,7 @@ if ( !class_exists('dbr_helper') ) {
678
  $res = true;
679
  $file = DBP_PATH_TMP . '/cron-restore.data';
680
  if (file_exists($file)) {
681
- $cron = dbr_helper::unpack( @file_get_contents($file) );
682
  if (empty($time)) {
683
  if (isset($cron['finish'])) {
684
  $res = true;
@@ -689,12 +291,12 @@ if ( !class_exists('dbr_helper') ) {
689
  }
690
  } else {
691
  $cron[$type] = $time;
692
- @file_put_contents($file, dbr_helper::pack($cron) );
693
  }
694
  } else {
695
  if (!empty($time)) {
696
  $cron[$type] = $time;
697
- @file_put_contents($file, dbr_helper::pack($cron) );
698
  }
699
  $res = false;
700
  }
@@ -709,7 +311,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 +324,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)
@@ -789,24 +362,22 @@ if ( !class_exists('dbr_helper') ) {
789
  }
790
  $data = array();
791
  if (file_exists(DBP_PATH_TMP . '/' . $command )) {
792
- $data = self::unpack(@file_get_contents( DBP_PATH_TMP . '/' . $command ) );
793
  }
794
  if (!empty($key)) {
795
  $data[$key] = $value;
796
  } else {
797
  $data = $value;
798
  }
799
- @file_put_contents(DBP_PATH_TMP . '/' . $command, self::pack($data) );
800
  }
801
 
802
  public static function getCommand($command, $key = '')
803
  {
804
  if (file_exists(DBP_PATH_TMP . '/' . $command)) {
805
- $tmp = dbr_helper::unpack( @file_get_contents(DBP_PATH_TMP . '/' . $command) );
806
- if (!empty($key) ) {
807
- if (isset($tmp[$key])) {
808
- return $tmp[$key];
809
- }
810
  } else {
811
  return $tmp;
812
  }
@@ -841,12 +412,12 @@ if ( !class_exists('dbr_helper') ) {
841
  if ( !class_exists('dbr_log') ) {
842
  class dbr_log {
843
 
844
- public static function log($txt = '', $class = '')
845
  {
846
  if (!empty($txt)) {
847
  dbr_helper::mkdir(DBP_PATH_TMP);
848
  $log_file = DBP_PATH_TMP . '/log-restore.log';
849
- @file_put_contents($log_file, date("Y-m-d H:i:s") ."\t{$class}\t{$txt}\n", FILE_APPEND);
850
  }
851
  }
852
 
@@ -861,7 +432,7 @@ if ( !class_exists('dbr_log') ) {
861
  file_put_contents($log2, $log);
862
  $log = str_replace($text, "", $log);
863
  } else {
864
- @file_put_contents($log2, $log);
865
  }
866
  $log = explode("\n", $log);
867
  krsort($log);
@@ -879,8 +450,6 @@ if ( !class_exists('dbr_core') ) {
879
  }
880
  }
881
 
882
-
883
-
884
  if ( !class_exists('dbr_methods') ) {
885
  class dbr_methods{
886
 
@@ -902,11 +471,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
  }
@@ -920,18 +484,7 @@ if ( !class_exists('dbr_methods') ) {
920
  $this->setting_restore = dbr_helper::getCommand('restore-backup');
921
  if (isset($this->setting_restore['action'])) {
922
  dbr_log::log('Start restoring of backup "' . $this->setting_restore['name'] . '"');
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
- }
933
- $this->base_dir = $backup_dir;
934
- $this->dir_backup = $backup_dir . "/{$this->setting_restore['name']}";
935
  switch($this->setting_restore['action']) {
936
  case 'wpadm_restore_dropbox':
937
  if ( $this->dowloadDropbox() ) {
@@ -972,46 +525,25 @@ if ( !class_exists('dbr_methods') ) {
972
  $sql .= $char_new;
973
  } else {
974
  $is_sql = true;
975
- if ( strpos($sql, '_transient_timeout_drb_running') !== false ) {
976
  $is_sql = false;
977
  }
978
- if ( strpos($sql, '_transient_drb_running') !== false ) {
979
  $is_sql = false;
980
  }
981
- if ( strpos($sql, PREFIX_BACKUP_ . "_commands") !== false ) {
982
  $is_sql = false;
983
  }
984
- if ( strpos($sql, PREFIX_BACKUP_ . "proccess-command") !== false ) {
985
  $is_sql = false;
986
  }
987
  if ($is_sql) {
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 +570,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
  }
@@ -1051,9 +579,9 @@ if ( !class_exists('dbr_methods') ) {
1051
  dbr_helper::is_work(time(), 'start');
1052
 
1053
  if (!empty($file_md5)) {
1054
-
1055
  if (file_exists($file_md5)) {
1056
- $this->md5_info = explode ("\n", @file_get_contents( $file_md5 ) ); // delemiter \t (1 - file name, 2 - md5_file, 3 - zip file)
1057
  dbr_helper::setCommand('md5_info-restore', $this->md5_info);
1058
  dbr_helper::is_work(time(), 'start');
1059
  } else {
@@ -1069,74 +597,17 @@ 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');
1135
  if ( empty( $this->md5_info ) ) {
1136
  $this->md5_info = dbr_helper::getCommand('md5_info-restore');
1137
- }
1138
  $zip_database = dbr_helper::getCommand('zip-database');
1139
- if (!$zip_database) {
1140
  $while = true;
1141
  while($while) {
1142
  $file_info = array_pop($this->md5_info);
@@ -1144,85 +615,32 @@ if ( !class_exists('dbr_methods') ) {
1144
  $info = explode("\t", $file_info);
1145
  if (isset($info[2])) {
1146
  $zip_database = $info;
1147
- dbr_helper::setCommand('zip-database', $zip_database);
1148
  $while = false;
1149
  }
1150
- }
1151
- }
1152
- }
1153
- $zip_config = dbr_helper::getCommand('zip-config');
1154
- if ($zip_config === false || $zip_config != null) {
1155
- $md5_info = dbr_helper::getCommand('md5_info-restore');
1156
- $while = true;
1157
- if($md5_info) {
1158
- while($while) {
1159
- $file_info = array_shift($md5_info);
1160
- if (strpos($file_info, 'wp-config.php') !== false) {
1161
- $info = explode("\t", $file_info);
1162
- if (isset($info[2])) {
1163
- $zip_config = $info;
1164
- dbr_helper::setCommand('zip-config', $zip_config);
1165
- $while = false;
1166
- }
1167
- }
1168
  }
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',
1200
  PCLZIP_OPT_PATH, ABSPATH,
1201
  PCLZIP_OPT_REPLACE_NEWER /// extracted all files & databasedump
1202
  );
1203
  if ($unzip== 0) {
1204
  dbr_helper::setError("Error during extracting of archive: " . $archive->errorInfo(true) );
1205
  }
1206
- if ($zip_config && strpos($file, $zip_config[2]) !== false) {
1207
- dbr_helper::is_work(time(), 'start');
1208
- if ( dbr_helper::is_writable(ABSPATH . 'wp-config.php') === false) {
1209
- dbr_helper::setError( "File 'wp-config.php' is not writable" );
1210
- }
1211
- $archive = new PclZip($file);
1212
- $unzip = $archive->extract(PCLZIP_OPT_BY_EREG, "/wp-config.php$/",
1213
- PCLZIP_OPT_PATH, ABSPATH,
1214
- PCLZIP_OPT_REPLACE_NEWER
1215
- );
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);
 
1223
  $unzip = $archive->extract(PCLZIP_OPT_PATH, ABSPATH,
1224
  PCLZIP_OPT_REPLACE_NEWER,
1225
- PCLZIP_OPT_BY_EREG, "/mysqldump.sql$/"
1226
  );
1227
  if ($unzip== 0) {
1228
  dbr_helper::setError("Error during extracting of dump/database from archive: " . $archive->errorInfo(true) );
@@ -1234,57 +652,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 +670,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 +685,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 +714,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 +737,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,73 +757,53 @@ 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'])) {
1444
- switch($result['code']) {
1445
- case 101 :
1446
- dbr_helper::setError('The restoring method has an error');
1447
- break;
1448
- case 108 :
1449
- dbr_helper::setError('Error of the post/request data');
1450
- break;
1451
- case 109 :
1452
- dbr_helper::setError('Error of the params data');
1453
- break;
1454
- case 110 :
1455
- dbr_helper::setError('Unknown error');
1456
- break;
1457
- }
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 +813,19 @@ 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')) {
@@ -1511,33 +841,11 @@ if (!class_exists('dbr_route')) {
1511
 
1512
  if (isset($_POST['type-backup']) && $_POST['type-backup'] == 'restore') {
1513
  if ( !dbr_helper::is_work() && dbr_helper::getCommand('restore-backup') ) {
1514
- $http = 'http://';
1515
- if ( (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443 ) {
1516
- $http = 'https://';
1517
- }
1518
- $key = isset($this->setting['restore-key']) && !empty($this->setting['restore-key']) ? $this->setting['restore-key'] : $key_values['key'];
1519
- $res_api = dbr_api::post($http . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], array('key' => $key, 'method' => 'restore'), array('timelimit' => 5) );
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 +868,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
  *
@@ -1600,7 +898,7 @@ if (!class_exists('dbr_route')) {
1600
  $files = glob($plugin_dir . '/*.php');
1601
  $n = count($files);
1602
  for($i = 0; $i < $n; $i++) {
1603
- $plugin = @file_get_contents($files[$i]);
1604
  if (preg_match("/version: ([0-9\.]+)/i", $plugin, $data)) {
1605
  if (isset($data[1]) && !empty($data[1])) {
1606
  $this->plugins[$folder]['Version'] = $data[1];
@@ -1615,4 +913,4 @@ if (!class_exists('dbr_route')) {
1615
  }
1616
 
1617
  new dbr_route();
1618
- }
1
  <?php
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
 
5
  if (!class_exists('dbr_gui')) {
11
  if (!class_exists('dbr_database')) {
12
  class dbr_database {
13
  private static $connect = null;
 
14
  private static $db = null;
15
+ private static $db_prefix = '';
16
  public static $error = '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
  public static function inc_wp_config()
19
  {
20
  if (!defined('DB_NAME') && !defined('DB_USER') && !defined('DB_PASSWORD') && !defined('DB_HOST') && is_null(self::$connect) ) {
21
 
22
+ include ABSPATH . 'wp-config.php';
 
23
  if ( !defined('WP_CONTENT_DIR') )
24
+ define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
25
+
26
+ if (strpos(DB_HOST, ':') !== false) {
27
+ $host = explode(":", DB_HOST);
28
+ self::$connect = mysqli_connect($host[0], DB_USER, DB_PASSWORD, DB_NAME, $host[1]) or die(mysqli_error());
29
+ mysqli_set_charset(self::$connect, DB_CHARSET) or die(mysql_error());
30
  } else {
31
+ self::$connect = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysqli_error());
32
+ mysqli_set_charset(self::$connect, DB_CHARSET) or die(mysql_error());
33
+ mysqli_select_db(self::$connect, DB_NAME) or die(mysql_error());
34
+ }
35
+ self::$db_prefix = $table_prefix;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
37
  }
38
  public static function db_insert($table, $vars = array())
87
  }
88
  return false;
89
  }
90
+ public static function db_get($table, $var_key = null, $var_search = null, $limit = -1, $res_type = MYSQL_BOTH, $keys_array = "", $value_array = "" )
91
  {
92
  if (!isset($var_key)) $d = "*";
93
  else {
116
  return self::returnArray($query, $limit, $res_type, $keys_array, $value_array);
117
  }
118
  public static function query($stmt)
119
+ {
120
+ $res = mysqli_query(self::$connect, $stmt);
 
 
 
 
 
121
  if ( $res === false ) {
122
+ self::$error = mysqli_error(self::$connect);
 
 
 
 
123
  }
 
124
  if ($res !== false and preg_match("/^INSERT/i", ltrim($stmt))) {
125
  return self::lastID(self::$connect);
126
  }
 
127
  return $res;
128
  }
129
  /**
132
  */
133
  public static function lastID($lastlink)
134
  {
135
+ return mysqli_insert_id($lastlink);
 
 
 
 
136
  }
137
  public static function num($res)
138
  {
139
+ return mysqli_num_rows($res);
140
+
 
 
 
141
  }
142
+ private static function returnArray($query, $limit = 1, $res_type = MYSQL_BOTH, $key = "", $value = "")
143
  {
144
  if ($query && self::num($query) > 0) {
145
  $res = false;
178
  }
179
  return false;
180
  }
181
+ private static function fetch ($res, $res_type = MYSQL_BOTH)
182
  {
183
+ return mysqli_fetch_array($res, $res_type);
 
 
 
 
 
 
 
 
 
 
184
  }
185
 
186
  public static function value_keys($array_from, $key = "", $value = "")
216
  $result = '';
217
  if (function_exists("curl_init") && function_exists("curl_setopt") && function_exists("curl_exec") && function_exists("curl_close")) {
218
  $curl = curl_init($url);
 
219
  $post = http_build_query($post, '', '&');
220
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
221
  curl_setopt($curl, CURLOPT_POST, true);
 
222
  if (!empty($options)) {
223
  if(isset($options['timelimit'])) {
224
  curl_setopt($curl, CURLOPT_TIMEOUT, $options['timelimit']);
225
  }
226
  }
227
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
228
  $result = curl_exec($curl);
229
  $info = curl_getinfo($curl);
230
  curl_close($curl);
231
  } elseif (function_exists("fsockopen")) {
232
+ $postdata = http_build_query($post, '', '&');
233
+ $length = strlen($postdata);
234
+ $url = trim( substr(WPADM_URL_BASE, 7), '/' );
235
+ $req = '/api/';
236
+ $out = "POST " . $req . " HTTP/1.1\r\n";
237
+ $out.= "HOST: " . $url . "\r\n";
238
+ $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
239
+ $out.= "Content-Length: ".$length."\r\n";
240
+ $out.= "Connection:Close\r\n\r\n";
241
+ $out.= $postdata."\r\n\r\n";
242
+ try {
243
+ $errno='';
244
+ $errstr = '';
245
+ $socket = @fsockopen($url, 80, $errno, $errstr, 30);
246
+ if($socket) {
247
+ if(!fwrite($socket, $out)) {
248
+ throw new Exception("unable to write fsockopen");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
249
  } else {
250
+ while ($in = @fgets ($socket, 1024)) {
251
+ $result .= $in;
252
+ }
253
  }
254
+ $result = explode("\r\n\r\n", $result);
255
+ $result = $result[1];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
 
 
257
  }
258
+ } catch(exception $e) {
259
+ array('res' => $result, 'info' => $info );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
260
  }
 
 
 
 
261
  }
262
+ return array('res' => $result, 'info' => $info );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
263
  }
264
 
265
+ }
266
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
267
 
268
+ if ( !class_exists('dbr_helper') ) {
269
+ class dbr_helper {
 
 
 
 
 
 
 
 
270
 
271
+ private static $cron_is_work = 60;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
 
273
  public static function setError($txt)
274
  {
280
  $res = true;
281
  $file = DBP_PATH_TMP . '/cron-restore.data';
282
  if (file_exists($file)) {
283
+ $cron = dbr_helper::unpack( file_get_contents($file) );
284
  if (empty($time)) {
285
  if (isset($cron['finish'])) {
286
  $res = true;
291
  }
292
  } else {
293
  $cron[$type] = $time;
294
+ file_put_contents($file, dbr_helper::pack($cron) );
295
  }
296
  } else {
297
  if (!empty($time)) {
298
  $cron[$type] = $time;
299
+ file_put_contents($file, dbr_helper::pack($cron) );
300
  }
301
  $res = false;
302
  }
311
  if (isset($site_url['option_value'])) {
312
  $name_running_backup = str_replace("http://", '', $site_url['option_value']);
313
  $name_running_backup = str_replace("https://", '', $name_running_backup);
314
+ $name_running_backup = preg_replace("|\W|", "_", $name_running_backup);
315
  }
316
  return $name_running_backup;
317
  }
324
  @unlink(DBP_PATH_TMP . '/' . $file);
325
  }
326
  }
 
327
  // @rmdir(DBP_PATH_TMP);
328
  }
329
  }
330
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
331
  public static function pack($data)
332
  {
333
+ return base64_encode( serialize( $data ) );
 
 
 
334
  }
335
 
336
  public static function unpack($data)
337
  {
338
+ return unserialize( base64_decode( $data ) );
339
  }
340
 
341
  public static function mkdir($path)
362
  }
363
  $data = array();
364
  if (file_exists(DBP_PATH_TMP . '/' . $command )) {
365
+ $data = self::unpack(file_get_contents( DBP_PATH_TMP . '/' . $command ) );
366
  }
367
  if (!empty($key)) {
368
  $data[$key] = $value;
369
  } else {
370
  $data = $value;
371
  }
372
+ file_put_contents(DBP_PATH_TMP . '/' . $command, self::pack($data) );
373
  }
374
 
375
  public static function getCommand($command, $key = '')
376
  {
377
  if (file_exists(DBP_PATH_TMP . '/' . $command)) {
378
+ $tmp = dbr_helper::unpack( file_get_contents(DBP_PATH_TMP . '/' . $command) );
379
+ if (!empty($key) && isset($tmp[$key])) {
380
+ return $tmp[$key];
 
 
381
  } else {
382
  return $tmp;
383
  }
412
  if ( !class_exists('dbr_log') ) {
413
  class dbr_log {
414
 
415
+ public static function log($txt = '')
416
  {
417
  if (!empty($txt)) {
418
  dbr_helper::mkdir(DBP_PATH_TMP);
419
  $log_file = DBP_PATH_TMP . '/log-restore.log';
420
+ file_put_contents($log_file, date("Y-m-d H:i:s") ."\t{$class}\t{$txt}\n", FILE_APPEND);
421
  }
422
  }
423
 
432
  file_put_contents($log2, $log);
433
  $log = str_replace($text, "", $log);
434
  } else {
435
+ file_put_contents($log2, $log);
436
  }
437
  $log = explode("\n", $log);
438
  krsort($log);
450
  }
451
  }
452
 
 
 
453
  if ( !class_exists('dbr_methods') ) {
454
  class dbr_methods{
455
 
471
  $json['data'] = dbr_helper::getCommand('result-restore');
472
  }
473
  }
 
 
 
 
 
474
  echo json_encode ( $json );
475
  exit;
476
  }
484
  $this->setting_restore = dbr_helper::getCommand('restore-backup');
485
  if (isset($this->setting_restore['action'])) {
486
  dbr_log::log('Start restoring of backup "' . $this->setting_restore['name'] . '"');
487
+ $this->dir_backup = DROPBOX_BACKUP_DIR_BACKUP . "/{$this->setting_restore['name']}";
 
 
 
 
 
 
 
 
 
 
 
488
  switch($this->setting_restore['action']) {
489
  case 'wpadm_restore_dropbox':
490
  if ( $this->dowloadDropbox() ) {
525
  $sql .= $char_new;
526
  } else {
527
  $is_sql = true;
528
+ if ( strpos($sql, '_transient_timeout_drb_running') === false ) {
529
  $is_sql = false;
530
  }
531
+ if ( strpos($sql, '_transient_drb_running') === false ) {
532
  $is_sql = false;
533
  }
534
+ if ( strpos($sql, PREFIX_BACKUP_ . "_commands") === false ) {
535
  $is_sql = false;
536
  }
537
+ if ( strpos($sql, PREFIX_BACKUP_ . "proccess-command") === false ) {
538
  $is_sql = false;
539
  }
540
  if ($is_sql) {
541
+ $ress = dbr_database::query( $sql );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
542
  }
543
+ if ( $ress === false || !empty( dbr_database::$error )) {
544
+ dbr_helper::setError('MySQL Error: ' . dbr_database::$error );
545
+ break;
546
+ };
547
  $sql = "";
548
  }
549
  }
570
  if(strpos($d, ".zip") !== false) {
571
  $this->files_resotre[$d] = $this->dir_backup . "/$d";
572
  }
 
 
 
 
573
  if(strpos($d, ".md5") !== false) {
574
  $file_md5 = $this->dir_backup . "/$d";
575
  }
579
  dbr_helper::is_work(time(), 'start');
580
 
581
  if (!empty($file_md5)) {
582
+
583
  if (file_exists($file_md5)) {
584
+ $this->md5_info = explode ("\n", file_get_contents( $file_md5 ) ); // delemiter \t (1 - file name, 2 - md5_file, 3 - zip file)
585
  dbr_helper::setCommand('md5_info-restore', $this->md5_info);
586
  dbr_helper::is_work(time(), 'start');
587
  } else {
597
 
598
  }
599
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
600
  private function restoreFiles()
601
  {
602
+ include 'pclzip.lib.php';
603
  $files = dbr_helper::getCommand('files-list-retore');
604
  if ($files) {
605
  dbr_helper::is_work(time(), 'start');
606
  if ( empty( $this->md5_info ) ) {
607
  $this->md5_info = dbr_helper::getCommand('md5_info-restore');
608
+ }
609
  $zip_database = dbr_helper::getCommand('zip-database');
610
+ if ($zip_database) {
611
  $while = true;
612
  while($while) {
613
  $file_info = array_pop($this->md5_info);
615
  $info = explode("\t", $file_info);
616
  if (isset($info[2])) {
617
  $zip_database = $info;
618
+ dbr_helper::setCommand('zip-database-restore', $zip_database);
619
  $while = false;
620
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
621
  }
 
622
  }
623
  }
 
 
 
 
624
  foreach($files as $f => $file) {
625
  $extract_files = dbr_helper::getCommand('extract-files-restore');
626
  if (!isset($extract_files[$f])) {
627
  dbr_log::log('Data will be decompressed of ' . basename($file));
628
  if (strpos($f, '.zip')) {
629
  if (file_exists($file) && filesize($file) > 0) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
630
  $archive = new PclZip($file);
631
  $unzip = $archive->extract(
 
632
  PCLZIP_OPT_PATH, ABSPATH,
633
  PCLZIP_OPT_REPLACE_NEWER /// extracted all files & databasedump
634
  );
635
  if ($unzip== 0) {
636
  dbr_helper::setError("Error during extracting of archive: " . $archive->errorInfo(true) );
637
  }
638
+ if (strpos($file, $zip_database[2]) !== false) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
639
  $archive = new PclZip($file);
640
+ $base_path = dbr_helper::getBasePath($zip_database[1]); // dump in directory website archive
641
  $unzip = $archive->extract(PCLZIP_OPT_PATH, ABSPATH,
642
  PCLZIP_OPT_REPLACE_NEWER,
643
+ PCLZIP_OPT_BY_EREG, "mysqldump.sql$"
644
  );
645
  if ($unzip== 0) {
646
  dbr_helper::setError("Error during extracting of dump/database from archive: " . $archive->errorInfo(true) );
652
  } else {
653
  dbr_helper::setError('File (' . $file . ') for restoring wasn\'t found or file size is 0 byte');
654
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
655
  }
656
  }
657
  }
670
  include "dropbox.class.php";
671
  $setting = dbr_database::db_get('options', array('option_value'), array('option_name' => 'wpadm_backup_dropbox-setting'), 1);
672
  if (isset($setting['option_value'] )) {
673
+ $this->main = dbr_helper::unpack( $setting['option_value'] );
674
  }
675
  if (!empty($this->main)) {
676
  if (isset($this->main['app_key']) && isset($this->main['app_secret']) && isset($this->main['auth_token_secret'])) {
685
  if ($file_list === false) {
686
  dbr_log::log('Getting list of files from Dropbox');
687
  $files = $dropbox->listing("$folder_project/$name_backup");
 
 
 
688
  dbr_helper::setCommand('download-with-dropbox-restore', $files, 'file-list');
689
  dbr_helper::is_work(time(), 'start');
690
  } else {
714
  }
715
  $md5 = glob($this->dir_backup . '/*.md5');
716
  if (count( $md5 ) == 0) {
717
+ 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");
718
  }
719
  dbr_helper::setCommand('download-with-dropbox-restore', true, 'success');
720
  return true;
737
  if (!defined('ABSPATH')) {
738
  define('ABSPATH', dirname(__FILE__) . '/../../../../');
739
  }
 
 
 
 
 
 
 
 
 
 
 
 
740
  if (!defined('DBP_PATH')) {
741
  define('DBP_PATH', dirname(__FILE__) . '/../');
742
  }
757
 
758
  function __construct()
759
  {
 
 
 
 
760
  if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
761
+ if ( isset($_POST['key']) ) {
762
  $this->parsMethod();
763
+ } elseif( !isset($_POST['key']) && isset($_POST['name']) ) {
764
+ dbr_helper::clearTMP();
765
+ dbr_database::inc_wp_config();
766
+ $setting = dbr_database::db_get('options', array('option_value'), array('option_name' => 'wpadm_backup_dropbox-setting'), 1);
767
+ if (isset($setting['option_value'] )) {
768
+ $this->setting = dbr_helper::unpack( $setting['option_value'] );
769
+ }
770
+ $this->setting['restore-key'] = md5( time() . microtime() . __FILE__);
771
+ include 'constant.php';
772
+ $plugin = $this->parsePlugin('/dropbox-backup');
773
+ $plugin_name = 'dropbox-backup';
774
+ $version = '1.0';
775
+ if (isset($plugin['/dropbox-backup']['Version'])) {
776
+ $version = $plugin['/dropbox-backup']['Version'];
777
+ } else{
778
+ $plugin = $this->parsePlugin('/dropbox-backup-pro');
779
+ if (isset($plugin['/dropbox-backup-pro']['Version'])) {
780
+ $version = $plugin['/dropbox-backup-pro']['Version'];
781
+ $plugin_name = 'dropbox-backup-pro';
 
 
 
782
  }
783
+ }
784
+ $data = array('actApi' => 'setPluginCode', $plugin_name . '_request' => array('action' => 'restore', 'site' => home_url(), 'pl' => $plugin_name, 'key' => $this->setting['restore-key'], 'pl_v' => $version, ) );
785
+ $res = dbr_api::post(WPADM_URL_BASE . 'api/', $data);
786
+ if ( !empty( $res['res'] ) ) {
787
+ $result = json_decode($res['res'], true);
788
+ if (isset($result['code'])) {
789
+ switch($result['code']) {
790
+ case 101 :
791
+ dbr_helper::setError('The restoring method has an error');
792
+ break;
793
+ case 108 :
794
+ dbr_helper::setError('Error of the post/request data');
795
+ break;
796
+ case 109 :
797
+ dbr_helper::setError('Error of the params data');
798
+ break;
799
+ case 110 :
800
+ dbr_helper::setError('Unknown error');
801
+ break;
 
 
802
  }
803
+ dbr_database::db_update('options', array('option_value' => dbr_helper::pack( $this->setting ) ), array('option_name' => 'wpadm_backup_dropbox-setting') ) ;
804
+ dbr_helper::setCommand('restore-backup', $_POST);
805
+ echo json_encode(array('result' => 'work'));
806
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
807
  }
808
  }
809
  }
813
  private function parsMethod()
814
  {
815
  if ( isset($_POST['method']) ) {
 
816
  try {
817
  dbr_helper::mkdir(DBP_PATH_TMP);
818
  if (!dbr_helper::is_work() || in_array($_POST['method'], $this->method_access ) ) {
819
  if (isset($_POST['key'])) {
820
+ dbr_database::inc_wp_config();
821
+ $setting = dbr_database::db_get('options', array('option_value'), array('option_name' => 'wpadm_backup_dropbox-setting'), 1);
822
+ $this->setting = dbr_helper::unpack( $setting['option_value'] );
823
+ if (file_exists(DROPBOX_BACKUP_DIR_BACKUP . '/local-key')) {
824
+ $key_values = dbr_helper::unpack( file_get_contents(DROPBOX_BACKUP_DIR_BACKUP . '/local-key') );
 
825
  }
826
+ if ($_POST['key'] == $this->setting['restore-key'] || ( isset($key_values['key']) && $_POST['key'] == $key_values['key'] ) ) {
827
  $methods = new dbr_methods();
828
+ $method = $_POST['method']. '_method';
829
  if (method_exists($methods, $method)) {
830
  if ($_POST['method'] != 'wpadm_logs') {
831
  if (file_exists(DBP_PATH_TMP . '/result-restore')) {
841
 
842
  if (isset($_POST['type-backup']) && $_POST['type-backup'] == 'restore') {
843
  if ( !dbr_helper::is_work() && dbr_helper::getCommand('restore-backup') ) {
844
+ dbr_api::post('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], array('key' => $this->setting['restore-key'], 'method' => 'restore'), array('timelimit' => 5) );
 
 
 
 
 
 
 
 
 
 
 
 
845
  }
846
  } else {
847
  dbr_helper::is_work(time(), 'start');
848
  }
 
 
 
 
 
 
 
 
 
 
849
  $methods->$method();
850
  if (!isset($_POST['type-backup'])) {
851
  dbr_helper::is_work(time(), 'finish');
868
  }
869
 
870
 
 
 
 
 
 
 
 
 
 
871
 
872
+
 
873
  /**
874
  * json encode
875
  *
898
  $files = glob($plugin_dir . '/*.php');
899
  $n = count($files);
900
  for($i = 0; $i < $n; $i++) {
901
+ $plugin = file_get_contents($files[$i]);
902
  if (preg_match("/version: ([0-9\.]+)/i", $plugin, $data)) {
903
  if (isset($data[1]) && !empty($data[1])) {
904
  $this->plugins[$folder]['Version'] = $data[1];
913
  }
914
 
915
  new dbr_route();
916
+ }
readme.txt CHANGED
@@ -1,18 +1,18 @@
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
12
  Author: WPAdm.com
13
  Contributors: WPAdm.com
14
 
15
- Backup & Restore Dropbox Plugin to create Dropbox Full Backup (Files + Database) or Restore, Duplicate, Clone or Migrate of your Website
16
 
17
  == Description ==
18
 
@@ -31,15 +31,13 @@ please, make a [support request](http://www.wpadm.com/support/) first!
31
  * Dropbox Backup: create the Full Backup (Files + Database) of Web Page at Local Storage and upload this to Dropbox;
32
  * Local Restore: restoration from Local backup at your website (web hosting);
33
  * Dropbox Restore: restoration from Dropbox backup;
34
- * Full control of included and excluded folders and files (can be found in "Settings");
35
- * You can create limited backup with database only (without files and/or folders). Just check "Settings" of backup plugin;
36
- * With "dropbox backup & restore" plugin you can backup and restore WooCommerce shop inkl. database with products;
37
- * Notification logging on screen and in file;
38
  * Use your own App key and App secret;
39
  * Supports backup on "Low Memory" Hosting or Server;
40
  * Possibility to make Dropbox backup and restore interface hidden with all listed backups (only Admins can access the backup plugin page);
41
  * Automatic database optimization before backup (can be switched in plugin settings);
42
- * Database or Table repair functionality before backup;
43
  * Administrate ALL of Backups for ALL of your sites from one place – WPAdm-account (Account is FREE);
44
 
45
  **Account creation is optional, but we suggest to do this.<br /> Why create [www.wpadm.com](http://www.wpadm.com/) account?**<br />
@@ -96,41 +94,24 @@ After downloading the ZIP file of the Dropbox back up and restoration plugin,
96
  <br />
97
  *If the installation does not succeed, please contact http://www.wpadm.com support staff or refer to your system administrator.*<br />
98
 
99
- Dropbox Backup Plugin have a settings section on WordPress plugin page.
100
-
101
- ### DO NOT FORGET to connect your dropbox backup plugin to Dropbox before creating your first Dropbox backup ###
102
-
103
- 1. Go to Admin dashboard of your website;<br />
104
- 2. Open "Settings" of website backup plugin;<br />
105
- 3. Click "Connect to Dropbox" button;<br />
106
- 3a. Sure, if you want, you can use your own App Key and App Secret. More Information about this you can read on [FAQ](https://wordpress.org/plugins/dropbox-backup/faq/) page or in the Settings block of your installed plugin, near "Connect to Dropbox" button;<br />
107
-
108
- Watch this video about:
109
- <ul>
110
- <li>How to install Dropbox backup and restore plugin on WordPress</li>
111
- <li>How to connect Dropbox backup and restore plugin to Dropbox</li>
112
- <li>How to perform a backup using Dropbox backup and restore plugin for Wordpress</li>
113
- </ul>
114
-
115
- https://www.youtube.com/watch?v=Hdzoh0BFpmg
116
-
117
 
 
118
  If you need help with the plugin or you want to report a bug, so please, also refer to http://www.wpadm.com/support/
119
 
120
-
121
  == Other ==
122
 
123
-
124
  = Very easy and secure Dropbox Backup and Restoration (website / web page restore from backup) =
 
125
  Usefull additional functions can be found at www.wpadm.com in the User profile.
126
  DropBox Backup is a new plugin, so we tried to provide a bug-free plugin/widget. We are maintain this project.
127
 
128
- Information about privacy:<br />
129
- In case the user has been registered at WPAdm service AND has confirmed their registration,
130
  our plugin will get the minimum requirements of php and mysql configuration, version and language of wordpress.
131
- This data will be send to WPAdm service, to get the plugin work correctly, to extend supported configurations of user sites with wpadm-extensions and support.<br />
132
  WE DO NOT COLLECT AND DO NOT STORE THE PERSONAL DATA OF USERS FROM THIS PLUGIN!
133
 
 
 
134
  = Website Backup on Dropbox =
135
 
136
  For security of your sites, webs hops or online portals is backup a must. With backup from www.webpage-backup.com you can secure backup and restore all your projects independent if it website or woocommerce shop as to make restoring from your backups. From security reasons it is impotent to schedule your backups, thereby your information or comments from your databases no go lost. Of course the more important for the security are (frequently) backups for woocommerce shops or multisite backups and there one click to restores from your backup drive. The woocommerce backups need more storage in cloud due to large files.<br />
@@ -152,13 +133,6 @@ Cloning, duplicate or migrate in principal all the function a same. It gives you
152
 
153
  For restoring your website (or multisite websites) selected files from the dashboard and then select files to restore. In backup list you see the type, date and size. From the list you can remove and select appropriate restoring file. In settings your can add or remove the cloud storage. In case of cloning you must restore your old website backup on other webpage. Cloning is the same how resorting but in more steps. The same bee meant for migrating of multisite and shops and there restore. With our file explorer you can match every file separately for restoration. In case of restoration only this files will be restore. You can restore one file than the next, but it easy to make restoring in bundle or directly to recover whole full backup. The restoration time depend from your hosting and upload rate as well as restoration depend from the file size witch must be restore. Scheduled restoring and recovering isn’t possible, unless somebody have special inquiry on our service to do scheduled recovering. The recover from the Dropbox cloud storage take time, depend from the web site size and right permissions of the folders of your hosting provider.
154
 
155
- = Backing Up and Restoration to Dropbox =
156
- = Backup:Yes Or No? =
157
- <p>In the age of trend-setting technologies, information backing up is necessary for many life spheres that are related in any way to creation of something. That refers to programming, site building, engineering, designing, not to mention home data - photos, videos and other stuff. This list can go on and on… One would think, what is so special about this backup thing? Well, the one fact known for sure is that it saves lives of both: different projects and people who fagged away at these very same projects.</p>
158
- <p>It has been said all the time that everyone should make the reserve copy (or backup), but not many actually do that, and besides, there are even those who have no clue about it and what it is for. Nevertheless, information about backup is really an important and useful habit, so let’s know what’s what about it.</p>
159
- <p>Firstly, there’s a need to determine the backup process – it is a data redundancy to different storage devices, making copies of the existing data. Now let’s clear its usefulness to each and every. On one hand, modern computers and their hard drives, which are the major and the most popular data storage places, have attained quite dramatic reliability numbers. Multiform redundant coding on different levels of data management provides strong security from the possible sad situations when the information is damaged as a result of accidental error in the act of data saving. But on the second thought, even the most dependable storage mediums sooner or later go down, and for what is more, it usually happens all of the sudden. Now that is the break point, when you finally change your mind upon all the information kept by people on their hard discs. Passwords and contacts, momentous pictures and rare music collections, all possible working data – this whole treasure can disappear without warning from your website, which can turn to serious financial and time losses in addition to emotional stress.</p>
160
- <p>The easiest variant is to simply copy data to another folder on a hard drive. But unfortunately, that is an unreliable decision, because that would release you from only the small number of possible problems, even if this folder is placed on another hardware. Now you are aware that at the present digital information day creating of backup is neither a whim nor extra precaution, this is a plain safety measure.</p>
161
-
162
  = What to do if recovering failed? =
163
 
164
  First of all check the data spelling. It is most common mistake. Other common mistakes by recovering are:
@@ -190,16 +164,6 @@ There are some requirements for creating a reliable backup:<br />
190
  A good solution is to have a separate server for remote backups although it is not fail-safe. If the server is unavailable restoration will be impossible. To ensure high accessibility and data safety use cloud storage services.<br />
191
  There are a lot of services providing free but limited cloud storage capacity for backups like Google Drive, Amazon S3 (AWS) or Dropbox. The problem is they do not support FTP protocol which sometimes is the most adequate way of data transfer. In comparison, virtually every host company supports this protocol.
192
 
193
- = Restoration of Backup Files =
194
- <p>Different factors may be the reason for someone to restore his data from a dropbox backup. This is a truly helpful option that supposes bringing the saved data from dropbox storage place back to its original in case you’ve lost or damaged the existing one.</p>
195
- = Best Choice to Keep Data =
196
- <p>Among the available ways to maintain information the first place belongs rightfully to **cloud storages** or **cloud drives**. These are sorts of virtual data storages, that save and manage the data via numerous servers strewn about World Wide Web. Their principle is simple: every ‘cloud’ has definitively stated limit of Gb virtual space, that is given to a new user absolutely for free. But in time, if a person wants to expand it, he’ll have to pay according to price plan. So here we have a simple case of effective advertising – a user gets used to the comfort and mobility of the network repository, and after he concludes that the cloud suits him to the full extend in every meanings, he pays for the “rent” of this sufficiency.</p>
197
- = Dropbox Backup and WordPress =
198
- <p>For the present day Dropbox cloud is still an unbeaten leader that is up to multi-million clients number. Most probably that has to do with the fact that it is Dropbox that stood at the origins of virtual space providing to users, and it is the first company, that has realized the idea of cloud data storage. It works by creation of a virtual folder in the cloud, where all the info of your wordpress website is saved, the one which you download to your Dropbox folder on your computer. For the WordPress website management the best choice is to download a plugin to easily administrate your source from wordpress admin dashboard. Backup&Restore Dropbox has many positive reviews and it deals with the performance of backup and restores, both local and dropbox.<br />
199
- <p>Dropbox Full Backup for WordPress is good for both restore and backups tasks. It allows to use your own App key and App secret in order to keep then private with higher security for yourself. It can be your personal guard that can keep all the files saved and backed up as much as possible, and even in case of your website data lost, you are able to restore all the data just with one click. </p>
200
- <br />
201
- <p>To make a conclusion we’d say, that in order to be safe and sound with any of your data of your WordPress site information you should trouble yourself with backing up of an important information. That will restrict possible damages to minimum and save your time and nerves.</p>
202
-
203
 
204
 
205
  == Frequently Asked Questions ==
@@ -232,40 +196,6 @@ You must see all of your backups, that you have made.
232
 
233
  Yes. We recommended to update or upgrade to a newest versions.
234
 
235
-
236
- = How do I do this: Dropbox Backup wasn't created. There is not enough script running time to perform backup operations, please increase the PHP variable max_execution_time. =
237
-
238
- There are two ways to do it increase the PHP variable max_execution_time:<br />
239
-
240
- 1. If the above mentioned method does not work, or your web host does not allow you to do it, you can change "Waiting time (minutes)" in the "Settings" area where you initiate the backup.<br />
241
-
242
- 2. If you have access to your hosting / server dashboard, please, find PHP settings and add the following:<br />
243
-
244
- max_execution_time = 90 (script running 90 seconds).<br />
245
-
246
- 3. If you have access to FTP settings, find FTP file, called php.ini and add there max_execution_time = 90 (script running 90 seconds).<br />
247
-
248
- If 90 is not enough for your script running, write 120 and so forth. <br />
249
-
250
- If you write down 0, you will have unlimited script running time. <br />
251
- Some materials take a long time to process before being transmitted.<br />
252
-
253
- 4. If you can’t find the php.ini file, then just try to create a new one in the root folder of your website. Add the setting described above to the created php.ini file.<br />
254
-
255
- 5. If the methods above doesn’t work for you - try to set append variable at the end of index.php file in root folder of your website.<br />
256
-
257
- ini_set('max_execution_time', '90');<br />
258
-
259
- 6. You can also add the following code in .htaccess file:<br />
260
-
261
- php_value max_execution_time 90<br />
262
-
263
- **Check, if you have added this setting to the currently active php.ini file.**<br />
264
-
265
- You can change it, for example from 3 to 5 minutes. This setting must be set in seconds. <br />
266
-
267
-
268
-
269
  = I just download the dropbox full backup addon for my wordpress site. I've connected the dropbox addon (application) to my dropbox account and pushed the button "create dropbox backup". But after the finish of backup where can I find the backup files, so I be sure, that the backup was done? =
270
 
271
  If you checked in the Setting of Dropbox plugin the checkbox "Leave local copy on my hosting", than you may to have two backups:<br />
@@ -306,15 +236,6 @@ To schedule backup of your webpage (website backup), you may use an account at w
306
  Please, see the previous question "I want schedule backup. How can I schedule backup of my website?".
307
  Generally - YES, you can create a scheduled backup, but you may sign in to account at www.webpage-backup.com to make a scheduled backup.
308
 
309
- = Error message when trying to backup WP website and send to Dropbox. Dropbox Backup wasn't created. PCLZIP_ERR_BAD_FORMAT (-10) : Unable to find End of Central Dir Record signature. Please advise how to fix this? =
310
-
311
- This ERROR:<br />
312
-
313
- **PCLZIP_ERR_BAD_FORMAT (-10) : Unable to find End of Central Dir Record signature** <br />
314
-
315
- means that you have not enough free space on your hard drive.<br />
316
- To solve this problem, you have to go to your ISP panel (Plesk, cPanel, etc.) and check the disk space on your hosting or server.
317
-
318
  = Should I register to make a back up of my site? =
319
 
320
  Our plugin for back up is completely autonomous plugin for back up, so you don't need to register to make a back up of your site.
@@ -361,18 +282,6 @@ The version for mysql backup (DB Backup) is available due control panel at http:
361
 
362
  Ok, if you want to use an SCP Backup, please, wait for some versions of this plugin over their, and we will make an scp backup for you.
363
 
364
- = What do I need to do? Local Backup wasn't created: There is not enough memory to perform archiving of big files and continue backup operations, please increase the PHP variable memory_limit. =
365
-
366
- There are two ways to solve your problem:<br />
367
-
368
- 1. If you have access to your hosting/server operating panel, please, find PHP settings and add the following:<br />
369
-
370
- memory_limit = 256M (use 256 MB)<br />
371
-
372
- 2. If you have access to FTP settings, find FTP file, called php.ini and add there memory_limit = 256M (use 256 MB)<br />
373
-
374
- Full description of php.ini and memory_limit you can find here http://php.net/manual/en/ini.core.php#ini.memory-limit <br />
375
-
376
  = FTP Backup? =
377
 
378
  The name of this plugin is "Dropbox" Backup and Restore. From control panel at http://www.webpage-backup.com you can do also an FTP Backup. Please, checkout an FTP Backup so.
@@ -459,10 +368,6 @@ Clear the checkbox, to have the PHP extension appear on the customers "phpinfo"
459
  = I want optimize my MySQL database before I do my backup. How can I do that? =
460
  In the Website to Dropbox backup & restoration plugin you can find an appropriate option in the Settings block of the Dropbox plugin. The optimize database setting is per default activated and in use. If you hasn't changed this configuration, then every time, as you doing backup, the database will be optimized automatically.
461
 
462
- = Once I tried to conduct a Dropbox backup I received this error - Dropbox Backup wasn't created. Dropbox returned an error during file sending: "Invalid OAuth1 token." =
463
- Please, reconnect to Dropbox, by clicking "Connect to Dropbox" button, in the "Settings" on plugin page of your website. <br />
464
-
465
-
466
  = How much time it will take to create a backup of my website? =
467
  There are many hardware and software dependences. Approximately the average time for website takes up to 360 seconds for 50 Mb website. There are many hardware and server/web hosting software dependencies to create a back up.
468
 
@@ -486,18 +391,8 @@ 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 />
494
- @1442461&nbsp;&nbsp;&nbsp;&nbsp;"Dropbox backup & restore" - Show as Item in "Admin bar"<br />
495
- @1438063&nbsp;&nbsp;&nbsp;&nbsp;"Dropbox backup & restore" new version(1.4.7) added - stop button, bugs fixed, update styles, process restore to connect mysql, process bar, update processes on creating mysqldump, archive files<br />
496
- @1427803&nbsp;&nbsp;&nbsp;&nbsp;"Dropbox backup & restore" - update a view notice <br />
497
- @1420446&nbsp;&nbsp;&nbsp;&nbsp;Changed<br />
498
- @1407804&nbsp;&nbsp;&nbsp;&nbsp;"Dropbox backup & restore" new version(1.4.4) added - check permission of backup folder<br />
499
- @1400462&nbsp;&nbsp;&nbsp;&nbsp;filter for ajax text(html)<br />
500
- @1393861&nbsp;&nbsp;&nbsp;&nbsp;Dropbox backup and restore tested up to WordPress 4.5<br />
501
  @1390219&nbsp;&nbsp;&nbsp;&nbsp;Dropbox backup and restore fixes.<br />
502
  @1390174&nbsp;&nbsp;&nbsp;&nbsp;"Dropbox Backup & restore" - add new version(1.4.6.1). Repairing database.<br />
503
  @1360807&nbsp;&nbsp;&nbsp;&nbsp;Update of form view.<br />
1
+ === Dropbox Backup & Restore ===
2
+ Plugin Name: Dropbox Backup & Restore
3
+ Version: 1.4.6.1
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.5
9
  Stable tag: trunk
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
  Author: WPAdm.com
13
  Contributors: WPAdm.com
14
 
15
+ Dropbox Backup & Restore Plugin to create Dropbox Full Backup (Files + Database) or Restore, Duplicate, Clone or Migrate of your Website
16
 
17
  == Description ==
18
 
31
  * Dropbox Backup: create the Full Backup (Files + Database) of Web Page at Local Storage and upload this to Dropbox;
32
  * Local Restore: restoration from Local backup at your website (web hosting);
33
  * Dropbox Restore: restoration from Dropbox backup;
34
+ * With "dropbox backup & restore" plugin you can backup and restore WooCommerce shop inkl. Database with products;
35
+ * Notification loging on screen and in file;
 
 
36
  * Use your own App key and App secret;
37
  * Supports backup on "Low Memory" Hosting or Server;
38
  * Possibility to make Dropbox backup and restore interface hidden with all listed backups (only Admins can access the backup plugin page);
39
  * Automatic database optimization before backup (can be switched in plugin settings);
40
+ * Database or Table repair functionality before backup (coming soon);
41
  * Administrate ALL of Backups for ALL of your sites from one place – WPAdm-account (Account is FREE);
42
 
43
  **Account creation is optional, but we suggest to do this.<br /> Why create [www.wpadm.com](http://www.wpadm.com/) account?**<br />
94
  <br />
95
  *If the installation does not succeed, please contact http://www.wpadm.com support staff or refer to your system administrator.*<br />
96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
 
98
+ Dropbox Backup Plugin have a settings section on WordPress plugin page.
99
  If you need help with the plugin or you want to report a bug, so please, also refer to http://www.wpadm.com/support/
100
 
 
101
  == Other ==
102
 
 
103
  = Very easy and secure Dropbox Backup and Restoration (website / web page restore from backup) =
104
+
105
  Usefull additional functions can be found at www.wpadm.com in the User profile.
106
  DropBox Backup is a new plugin, so we tried to provide a bug-free plugin/widget. We are maintain this project.
107
 
108
+ Information about privacy: AFTER the user has been registered at WPAdm service AND has confirmed their registration,
 
109
  our plugin will get the minimum requirements of php and mysql configuration, version and language of wordpress.
110
+ This data will be send to WPAdm service, to get the plugin work correctly, to extend supported configurations of user sites with wpadm-extensions and support.
111
  WE DO NOT COLLECT AND DO NOT STORE THE PERSONAL DATA OF USERS FROM THIS PLUGIN!
112
 
113
+
114
+
115
  = Website Backup on Dropbox =
116
 
117
  For security of your sites, webs hops or online portals is backup a must. With backup from www.webpage-backup.com you can secure backup and restore all your projects independent if it website or woocommerce shop as to make restoring from your backups. From security reasons it is impotent to schedule your backups, thereby your information or comments from your databases no go lost. Of course the more important for the security are (frequently) backups for woocommerce shops or multisite backups and there one click to restores from your backup drive. The woocommerce backups need more storage in cloud due to large files.<br />
133
 
134
  For restoring your website (or multisite websites) selected files from the dashboard and then select files to restore. In backup list you see the type, date and size. From the list you can remove and select appropriate restoring file. In settings your can add or remove the cloud storage. In case of cloning you must restore your old website backup on other webpage. Cloning is the same how resorting but in more steps. The same bee meant for migrating of multisite and shops and there restore. With our file explorer you can match every file separately for restoration. In case of restoration only this files will be restore. You can restore one file than the next, but it easy to make restoring in bundle or directly to recover whole full backup. The restoration time depend from your hosting and upload rate as well as restoration depend from the file size witch must be restore. Scheduled restoring and recovering isn’t possible, unless somebody have special inquiry on our service to do scheduled recovering. The recover from the Dropbox cloud storage take time, depend from the web site size and right permissions of the folders of your hosting provider.
135
 
 
 
 
 
 
 
 
136
  = What to do if recovering failed? =
137
 
138
  First of all check the data spelling. It is most common mistake. Other common mistakes by recovering are:
164
  A good solution is to have a separate server for remote backups although it is not fail-safe. If the server is unavailable restoration will be impossible. To ensure high accessibility and data safety use cloud storage services.<br />
165
  There are a lot of services providing free but limited cloud storage capacity for backups like Google Drive, Amazon S3 (AWS) or Dropbox. The problem is they do not support FTP protocol which sometimes is the most adequate way of data transfer. In comparison, virtually every host company supports this protocol.
166
 
 
 
 
 
 
 
 
 
 
 
167
 
168
 
169
  == Frequently Asked Questions ==
196
 
197
  Yes. We recommended to update or upgrade to a newest versions.
198
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  = I just download the dropbox full backup addon for my wordpress site. I've connected the dropbox addon (application) to my dropbox account and pushed the button "create dropbox backup". But after the finish of backup where can I find the backup files, so I be sure, that the backup was done? =
200
 
201
  If you checked in the Setting of Dropbox plugin the checkbox "Leave local copy on my hosting", than you may to have two backups:<br />
236
  Please, see the previous question "I want schedule backup. How can I schedule backup of my website?".
237
  Generally - YES, you can create a scheduled backup, but you may sign in to account at www.webpage-backup.com to make a scheduled backup.
238
 
 
 
 
 
 
 
 
 
 
239
  = Should I register to make a back up of my site? =
240
 
241
  Our plugin for back up is completely autonomous plugin for back up, so you don't need to register to make a back up of your site.
282
 
283
  Ok, if you want to use an SCP Backup, please, wait for some versions of this plugin over their, and we will make an scp backup for you.
284
 
 
 
 
 
 
 
 
 
 
 
 
 
285
  = FTP Backup? =
286
 
287
  The name of this plugin is "Dropbox" Backup and Restore. From control panel at http://www.webpage-backup.com you can do also an FTP Backup. Please, checkout an FTP Backup so.
368
  = I want optimize my MySQL database before I do my backup. How can I do that? =
369
  In the Website to Dropbox backup & restoration plugin you can find an appropriate option in the Settings block of the Dropbox plugin. The optimize database setting is per default activated and in use. If you hasn't changed this configuration, then every time, as you doing backup, the database will be optimized automatically.
370
 
 
 
 
 
371
  = How much time it will take to create a backup of my website? =
372
  There are many hardware and software dependences. Approximately the average time for website takes up to 360 seconds for 50 Mb website. There are many hardware and server/web hosting software dependencies to create a back up.
373
 
391
 
392
  **Rev.**&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;**Description** <br />
393
 
394
+ @1400462&nbsp;&nbsp;&nbsp;&nbsp;filter for ajax text(html)
395
+ @1393861&nbsp;&nbsp;&nbsp;&nbsp;Dropbox backup and restore tested up to WordPress 4.5
 
 
 
 
 
 
 
 
 
 
396
  @1390219&nbsp;&nbsp;&nbsp;&nbsp;Dropbox backup and restore fixes.<br />
397
  @1390174&nbsp;&nbsp;&nbsp;&nbsp;"Dropbox Backup & restore" - add new version(1.4.6.1). Repairing database.<br />
398
  @1360807&nbsp;&nbsp;&nbsp;&nbsp;Update of form view.<br />
template/advantage-plugin.php DELETED
@@ -1,109 +0,0 @@
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
-
109
- <div class="clear"></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
template/css/admin-style-wpadm.css CHANGED
@@ -1,34 +1,23 @@
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');
@@ -49,6 +38,50 @@
49
  content:"/";
50
  }
51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  .form-counter {
53
  background: #0096d6;
54
  border: 1px solid #fff;
@@ -57,24 +90,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;
@@ -90,86 +105,17 @@
90
  border: 1px solid #e8e8e8;
91
  padding: 10px;
92
  }
93
- #logs-form, #reviews-dropbox, #action-buttons, #process-box {
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;
101
  height: 150px;
102
  width: 25%;
103
  }
104
- #process-box {
105
- height: 150px;
106
- width: 35%;
107
- }
108
-
109
- #process-box .inline {
110
- float:none;
111
- margin:0;
112
- text-align: left;;
113
- margin-bottom:8px;
114
- }
115
-
116
- .progress-box {
117
- position: relative;
118
- z-index: 5;
119
- background:#fff;
120
- border:1px solid #ccc;
121
- border-radius: 0px;
122
- display: inline-block;
123
-
124
- }
125
- .progress-text {
126
- position: absolute;
127
- font: bold 14px/20px Arial;
128
- text-align: left;
129
- margin-left:5px;
130
- top: 0;
131
- left: 0;
132
- z-index:21;
133
- }
134
- .procent-progress {
135
- float:right;
136
- margin-right:10px;
137
- }
138
- .progress, .progress-bar, .progress-text {
139
- width: 100%;
140
- height: 15px;
141
- color: #595959;
142
- text-shadow: 1px 1px 2px rgba(255, 255, 255, 1);
143
- font-size:11px;
144
- line-height: 13px;
145
- }
146
-
147
- .progress-bar {
148
- overflow: hidden;
149
- position: relative;
150
- z-index: 10;
151
- border-radius: 0px;
152
- width: 0;
153
- -moz-transition: width .3s linear;
154
- -webkit-transition: width .3s linear;
155
- -o-transition: width .3s linear;
156
- transition: width .3s linear;
157
- background-color: #00f42e;
158
- background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.35) 25%, rgba(255, 255, 255, 0) 25%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0.35) 50%, rgba(255, 255, 255, 0.35) 75%, rgba(255, 255, 255, 0) 75%, rgba(255, 255, 255, 0));
159
- background-repeat: repeat-x;
160
- background-size: 20px 20px;
161
- -webkit-animation: candystripe 3s linear infinite;
162
- -moz-animation: candystripe 3s linear infinite;
163
- animation: candystripe 3s linear infinite;
164
- }
165
-
166
-
167
-
168
- #process-box .main-title {
169
- font-size: 16px;
170
- margin-bottom: 15px;
171
- }
172
-
173
  #action-buttons {
174
  margin-right: 10px;
175
  float:left;
@@ -346,7 +292,16 @@
346
  padding: 0;
347
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
348
  }
349
-
 
 
 
 
 
 
 
 
 
350
  #header_navigation_line #main_menu ul li a {
351
  background: -moz-linear-gradient(center top , #2e9ed2 5%, #21749b 100%) repeat scroll 0 0 #2e9ed2;
352
  border: 1px solid #1b5f7f;
@@ -555,38 +510,7 @@ h3.plugins-title {
555
  }
556
  .setting-checkbox {
557
  padding-left: 5px;margin-top: 5px;
558
- clear:both;
559
- }
560
- .setting-checkbox input[type="checkbox"] {
561
- margin: 2px 5px 0px 0px;
562
  }
563
- .setting-checkbox input[type="checkbox"], .setting-checkbox label, .setting-checkbox select, .setting-checkbox span {
564
- float:left;
565
- }
566
- .setting-checkbox label {
567
- margin-bottom:6px;
568
- }
569
- .setting-checkbox .dashicons-editor-help {
570
- margin-left:-3px;
571
- margin-top: -1px;
572
- }
573
- .setting-checkbox select {
574
- margin-top: -5px;
575
- }
576
-
577
- .ui-tooltip {
578
- padding: 8px;
579
- position: absolute;
580
- z-index: 9999;
581
- max-width: 300px;
582
- -webkit-box-shadow: 0 0 5px #aaa;
583
- box-shadow: 0 0 5px #aaa;
584
- background: #fff;
585
- }
586
- body .ui-tooltip {
587
- border-width: 2px;
588
- }
589
-
590
  .form-help-send-error input[type="text"], .form-help-send-error input[type="text"] {
591
  padding: 0px;
592
  border: 1px solid #999;
@@ -608,8 +532,6 @@ body .ui-tooltip {
608
  margin-right:20px;
609
  background: #fff;
610
  padding: 20px;
611
- height: 200px;
612
- overflow: auto;
613
  }
614
  #sent-error-report {
615
  background: #fff;
@@ -637,11 +559,9 @@ body .ui-tooltip {
637
  padding-bottom: 30px;
638
  width: 100%;
639
  }
640
- .show-includes input.input-folder[type="checkbox"] + label span {
641
- color: #804000;
642
- }
643
  .show-includes input.input-folder[type="checkbox"] + label {
644
- font: 18px;
645
  color: #444;
646
  cursor: pointer;
647
  }
@@ -653,14 +573,6 @@ width: 18px;
653
  margin: 0 5px 0 0;
654
  background-image: url(folder.png);
655
  }
656
- .show-includes input.input-folder[type="checkbox"] + label.is-file::before {
657
- background-image: url(file2.png);
658
- width:15px;
659
- height:15px;
660
- }
661
- .field-value-folder-or-file {
662
- line-height: 18px;
663
- }
664
  .loading-img {
665
  text-align: center;
666
  height: 23px;
@@ -669,12 +581,6 @@ margin: 0 auto;
669
  .show-includes input.checkbox-send[type="checkbox"] {
670
  margin-top:0px;
671
  }
672
- .show-includes input.input-folder[type="checkbox"]:checked + label.is-file::before {
673
- background-image: url(file2.png);
674
- }
675
- .show-includes input.input-folder[type="checkbox"]:checked:disabled + label.is-file::before {
676
- background-image: url(file2.png);
677
- }
678
  .show-includes input.input-folder[type="checkbox"]:checked + label::before {
679
  background-image: url(icon-folder-open.gif);
680
  }
@@ -949,34 +855,6 @@ margin-right: 0px;
949
  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 */
981
  @media only screen and (max-width: 960px) {
982
  /*
@@ -1057,8 +935,6 @@ width: 18px;
1057
  }
1058
 
1059
  }
1060
-
1061
-
1062
  @media only screen and (max-width: 1124px) {
1063
  .stat-form-counter {
1064
  font-size:10px;
@@ -1078,16 +954,16 @@ font-size:12px;
1078
  height: 20px;
1079
  }
1080
  .dbb-info-details-form {
1081
- line-height: 16px;
1082
- margin:7px;
1083
- padding:7px 11px;
1084
- font-size:14px;
1085
  }
1086
  .dbb-info-details-form .button-submit {
1087
- padding:5px;
1088
- margin-top:11px;
1089
- margin-bottom:18px;
1090
-
1091
  }
1092
 
1093
  }
@@ -1120,4 +996,4 @@ vertical tablet computer
1120
  margin-top:5px;
1121
  margin-bottom:8px;
1122
  }
1123
- }
1
 
2
+ .list-dropbox-backup-pro {
3
+ margin-top:10px;
4
+ margin-bottom:0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  }
6
+ .list-dropbox-backup-pro li {
7
+ margin-bottom: 0;
8
+ font-size:14px;
9
+ margin-left:35px;
10
  }
11
+ .list-dropbox-backup-pro .text {
12
+ line-height: 25px;
13
  }
14
+ .image-dropbox-pro {
15
+ width: 183px;
16
+ height: 187px;
17
+ border:2px solid #ddd;
18
+ cursor: pointer;
19
+ text-align: center;
20
+ float:left;
21
  }
22
  .dropbox-image-toolbar a:before {
23
  content: url('./../../img/wpadm-logo.png');
38
  content:"/";
39
  }
40
 
41
+ .backup_button {
42
+ -moz-box-shadow:inset 0px 1px 0px 0px #9fb4f2;
43
+ -webkit-box-shadow:inset 0px 1px 0px 0px #9fb4f2;
44
+ box-shadow:inset 0px 1px 0px 0px #9fb4f2;
45
+ background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #7892c2), color-stop(1, #476e9e));
46
+ background:-moz-linear-gradient(top, #7892c2 5%, #476e9e 100%);
47
+ background:-webkit-linear-gradient(top, #7892c2 5%, #476e9e 100%);
48
+ background:-o-linear-gradient(top, #7892c2 5%, #476e9e 100%);
49
+ background:-ms-linear-gradient(top, #7892c2 5%, #476e9e 100%);
50
+ background:linear-gradient(to bottom, #7892c2 5%, #476e9e 100%);
51
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7892c2', endColorstr='#476e9e',GradientType=0);
52
+ background-color:#7892c2;
53
+ -moz-border-radius:3px;
54
+ -webkit-border-radius:3px;
55
+ border-radius:3px;
56
+ border:1px solid #4e6096;
57
+ display:inline-block;
58
+ cursor:pointer;
59
+ color:#ffffff;
60
+ font-family:Arial;
61
+ font-size:17px;
62
+ font-weight:bold;
63
+ padding:10px 20px;
64
+ text-decoration:none;
65
+ text-shadow:0px 1px 0px #283966;
66
+ }
67
+ .backup_button:hover {
68
+ background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #476e9e), color-stop(1, #7892c2));
69
+ background:-moz-linear-gradient(top, #476e9e 5%, #7892c2 100%);
70
+ background:-webkit-linear-gradient(top, #476e9e 5%, #7892c2 100%);
71
+ background:-o-linear-gradient(top, #476e9e 5%, #7892c2 100%);
72
+ background:-ms-linear-gradient(top, #476e9e 5%, #7892c2 100%);
73
+ background:linear-gradient(to bottom, #476e9e 5%, #7892c2 100%);
74
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#476e9e', endColorstr='#7892c2',GradientType=0);
75
+ background-color:#476e9e;
76
+ color:#fff;
77
+ }
78
+ .backup_button:active {
79
+ position:relative;
80
+ top:1px;
81
+ }
82
+ button.backup_button:disabled, button.backup_button:disabled:hover {
83
+ background: #9eb7d8;
84
+ }
85
  .form-counter {
86
  background: #0096d6;
87
  border: 1px solid #fff;
90
  margin-top: 20px;
91
  color:#fff;
92
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  .log-dropbox {
94
  background-repeat: no-repeat; background-position:center;
95
  background-color: #fff;
105
  border: 1px solid #e8e8e8;
106
  padding: 10px;
107
  }
108
+ #logs-form, #reviews-dropbox, #action-buttons {
109
  float:left;
110
  }
111
+ #logs-form, #reviews-dropbox {
112
+ padding: 10px; background: #ffffc8; border: 1px solid #0096d6; position: relative; height: 100px; text-align: center;
113
  }
114
+ #reviews-dropbox {
115
  float: right;
116
  height: 150px;
117
  width: 25%;
118
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  #action-buttons {
120
  margin-right: 10px;
121
  float:left;
292
  padding: 0;
293
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);
294
  }
295
+ .inline-right {
296
+ float:right;
297
+ }
298
+ .inline {
299
+ float:left;
300
+ }
301
+ .inline-right, .inline {
302
+ margin-top:10px;
303
+ margin-left:10px;
304
+ }
305
  #header_navigation_line #main_menu ul li a {
306
  background: -moz-linear-gradient(center top , #2e9ed2 5%, #21749b 100%) repeat scroll 0 0 #2e9ed2;
307
  border: 1px solid #1b5f7f;
510
  }
511
  .setting-checkbox {
512
  padding-left: 5px;margin-top: 5px;
 
 
 
 
513
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
514
  .form-help-send-error input[type="text"], .form-help-send-error input[type="text"] {
515
  padding: 0px;
516
  border: 1px solid #999;
532
  margin-right:20px;
533
  background: #fff;
534
  padding: 20px;
 
 
535
  }
536
  #sent-error-report {
537
  background: #fff;
559
  padding-bottom: 30px;
560
  width: 100%;
561
  }
562
+
 
 
563
  .show-includes input.input-folder[type="checkbox"] + label {
564
+ font: 18px bold;
565
  color: #444;
566
  cursor: pointer;
567
  }
573
  margin: 0 5px 0 0;
574
  background-image: url(folder.png);
575
  }
 
 
 
 
 
 
 
 
576
  .loading-img {
577
  text-align: center;
578
  height: 23px;
581
  .show-includes input.checkbox-send[type="checkbox"] {
582
  margin-top:0px;
583
  }
 
 
 
 
 
 
584
  .show-includes input.input-folder[type="checkbox"]:checked + label::before {
585
  background-image: url(icon-folder-open.gif);
586
  }
855
  text-align: center; margin-top: 10px;
856
  }
857
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
858
  /*default style */
859
  @media only screen and (max-width: 960px) {
860
  /*
935
  }
936
 
937
  }
 
 
938
  @media only screen and (max-width: 1124px) {
939
  .stat-form-counter {
940
  font-size:10px;
954
  height: 20px;
955
  }
956
  .dbb-info-details-form {
957
+ line-height: 16px;
958
+ margin:7px;
959
+ padding:7px 11px;
960
+ font-size:14px;
961
  }
962
  .dbb-info-details-form .button-submit {
963
+ padding:5px;
964
+ margin-top:11px;
965
+ margin-bottom:18px;
966
+
967
  }
968
 
969
  }
996
  margin-top:5px;
997
  margin-bottom:8px;
998
  }
999
+ }
template/css/file.png DELETED
Binary file
template/css/file2.png DELETED
Binary file
template/css/tool-bar.css CHANGED
@@ -1,101 +1,4 @@
1
  .dropbox-image-toolbar a:before {
2
  content: url('./../../img/wpadm-logo.png');
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;
30
- border:2px solid #ddd;
31
- cursor: pointer;
32
- text-align: center;
33
- float:left;
34
- }
35
-
36
-
37
- .backup_button {
38
- -moz-box-shadow:inset 0px 1px 0px 0px #9fb4f2;
39
- -webkit-box-shadow:inset 0px 1px 0px 0px #9fb4f2;
40
- box-shadow:inset 0px 1px 0px 0px #9fb4f2;
41
- background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #7892c2), color-stop(1, #476e9e));
42
- background:-moz-linear-gradient(top, #7892c2 5%, #476e9e 100%);
43
- background:-webkit-linear-gradient(top, #7892c2 5%, #476e9e 100%);
44
- background:-o-linear-gradient(top, #7892c2 5%, #476e9e 100%);
45
- background:-ms-linear-gradient(top, #7892c2 5%, #476e9e 100%);
46
- background:linear-gradient(to bottom, #7892c2 5%, #476e9e 100%);
47
- filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7892c2', endColorstr='#476e9e',GradientType=0);
48
- background-color:#7892c2;
49
- -moz-border-radius:3px;
50
- -webkit-border-radius:3px;
51
- border-radius:3px;
52
- border:1px solid #4e6096;
53
- display:inline-block;
54
- cursor:pointer;
55
- color:#ffffff;
56
- font-family:Arial;
57
- font-size:17px;
58
- font-weight:bold;
59
- padding:10px 20px;
60
- text-decoration:none;
61
- text-shadow:0px 1px 0px #283966;
62
- }
63
- .backup_button:hover {
64
- background:-webkit-gradient(linear, left top, left bottom, color-stop(0.05, #476e9e), color-stop(1, #7892c2));
65
- background:-moz-linear-gradient(top, #476e9e 5%, #7892c2 100%);
66
- background:-webkit-linear-gradient(top, #476e9e 5%, #7892c2 100%);
67
- background:-o-linear-gradient(top, #476e9e 5%, #7892c2 100%);
68
- background:-ms-linear-gradient(top, #476e9e 5%, #7892c2 100%);
69
- background:linear-gradient(to bottom, #476e9e 5%, #7892c2 100%);
70
- filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#476e9e', endColorstr='#7892c2',GradientType=0);
71
- background-color:#476e9e;
72
- color:#fff;
73
- }
74
- .backup_button:active {
75
- position:relative;
76
- top:1px;
77
- }
78
- 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
  }
1
  .dropbox-image-toolbar a:before {
2
  content: url('./../../img/wpadm-logo.png');
3
  /*background-image: ;*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  }
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 = ""
@@ -84,145 +66,3 @@ function blick(id, border_)
84
  setTimeout('blick("' + id + '", ' + border_ + ')', 800);
85
  }
86
  }
87
-
88
- var send_checked = [];
89
- function connectFolder(t)
90
- {
91
- folder = jQuery(t).val();
92
- send_checked = unique(send_checked);
93
- k = jQuery.inArray( folder, send_checked );
94
- if ( k >= 0) {
95
- if (!t.checked) {
96
- send_checked.splice(k,1);
97
- }
98
- } else {
99
- if (t.checked) {
100
- send_checked[send_checked.length] = folder;
101
- }
102
- }
103
- divs = jQuery(t).parents('div[id^="inc_"]');
104
- set = true;
105
- if (divs.length > 0) {
106
- for(i = 0; i < divs.length; i ++) {
107
- if(i == 1) {
108
- check = jQuery(divs[i]).find('.checkbox-send:checked');
109
- if(check.length > 1) {
110
- set = false;
111
- }
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
- }
127
- }
128
- }
129
- t_id = jQuery(t).attr('data-value-cache');
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
- }
145
- }
146
-
147
- }
148
- function showLoadingImg(show)
149
- {
150
- img = jQuery('.loading-img').find('img');
151
- dips = jQuery(img).css('display');
152
- if (dips == 'none') {
153
- if (show) {
154
- jQuery(img).css('display', 'block');
155
- }
156
- } else {
157
- if (!show) {
158
- jQuery(img).css('display', 'none');
159
- }
160
- }
161
- }
162
-
163
- function unique(arr)
164
- {
165
- arr = arr.filter(function (e, i, arr) {
166
- return arr.lastIndexOf(e) === i;
167
- });
168
- return arr;
169
- }
170
-
171
- var rt = {};
172
-
173
- rt['%E0']='%D0%B0';rt['%E1']='%D0%B1';rt['%E2']='%D0%B2';rt['%E3']='%D0%B3';rt['%E4']='%D0%B4';
174
- rt['%E5']='%D0%B5';rt['%B8']='%D1%91';rt['%E6']='%D0%B6';rt['%E7']='%D0%B7';rt['%E8']='%D0%B8';
175
- rt['%E9']='%D0%B9';rt['%EA']='%D0%BA';rt['%EB']='%D0%BB';rt['%EC']='%D0%BC';rt['%ED']='%D0%BD';
176
- rt['%EE']='%D0%BE';rt['%EF']='%D0%BF';rt['%F0']='%D1%80';rt['%F1']='%D1%81';rt['%F2']='%D1%82';
177
- rt['%F3']='%D1%83';rt['%F4']='%D1%84';rt['%F5']='%D1%85';rt['%F6']='%D1%86';rt['%F7']='%D1%87';
178
- rt['%F8']='%D1%88';rt['%F9']='%D1%89';rt['%FC']='%D1%8C';rt['%FB']='%D1%8B';rt['%FA']='%D1%8A';
179
- rt['%FD']='%D1%8D';rt['%FE']='%D1%8E';rt['%FF']='%D1%8F';rt['%C0']='%D0%90';rt['%C1']='%D0%91';
180
- rt['%C2']='%D0%92';rt['%C3']='%D0%93';rt['%C4']='%D0%94';rt['%C5']='%D0%95';rt['%A8']='%D0%81';
181
- rt['%C6']='%D0%96';rt['%C7']='%D0%97';rt['%C8']='%D0%98';rt['%C9']='%D0%99';rt['%CA']='%D0%9A';
182
- rt['%CB']='%D0%9B';rt['%CC']='%D0%9C';rt['%CD']='%D0%9D';rt['%CE']='%D0%9E';rt['%CF']='%D0%9F';
183
- rt['%D0']='%D0%A0';rt['%D1']='%D0%A1';rt['%D2']='%D0%A2';rt['%D3']='%D0%A3';rt['%D4']='%D0%A4';
184
- rt['%D5']='%D0%A5';rt['%D6']='%D0%A6';rt['%D7']='%D0%A7';rt['%D8']='%D0%A8';rt['%D9']='%D0%A9';
185
- rt['%DC']='%D0%AC';rt['%DB']='%D0%AB';rt['%DA']='%D0%AA';rt['%DD']='%D0%AD';rt['%DE']='%D0%AE';
186
- rt['%DF']='%D0%AF';
187
-
188
- function convert_to_cp1251(str) {
189
- var ret='';
190
-
191
- var l=str.length;
192
- var i=0;
193
- while (i<l) {
194
-
195
- var f=0;
196
- for (keyVar in t) {
197
- if (str.substring(i,i+6)==keyVar) {ret+=t[keyVar];i+=6;f=1;}
198
- }
199
-
200
- if (!f) {ret+=str.substring(i,i+1);i++;}
201
- }
202
-
203
- return ret;
204
- }
205
-
206
- function convert_from_cp1251(str) {
207
- var ret='';
208
-
209
- var l=str.length;
210
- var i=0;
211
- while (i<l) {
212
-
213
- var f=0;
214
- for (keyVar in rt) {
215
- if (str.substring(i,i+3)==keyVar) {ret+=rt[keyVar];i+=3;f=1;}
216
- }
217
-
218
- if (!f) {ret+=str.substring(i,i+1);i++;}
219
- }
220
-
221
- return ret;
222
- }
223
-
224
- function urldecode (str) {
225
- try {ret=decodeURIComponent((str + '').replace(/\+/g, '%20'));}
226
- catch (e) {}
227
- return ret;
228
- }
10
  {
11
  return text.replace(/([\w])(\'|’)([\w])/gm, "$1$3") + addStr;
12
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
  var shows_id = ""
15
  var shows_t = ""
66
  setTimeout('blick("' + id + '", ' + border_ + ')', 800);
67
  }
68
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
template/notice.php CHANGED
@@ -1,23 +1,8 @@
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'); ?>
5
- "<a href="javascript:showProWPADMDescription();" title="<?php _e('Dropbox backup and restore"','dropbox-backup')?>" alt="<?php _e('Dropbox backup and restore','dropbox-backup')?>"><?php _e('Dropbox backup and restore','dropbox-backup')?></a>"
6
  <?php _e(' plugin is now available!','dropbox-backup'); ?>
7
- <a href="javascript:showProWPADMDescription();" title="<?php _e('Read more...','dropbox-backup')?>" alt="<?php _e('Read more...','dropbox-backup')?>"><?php _e('Read more...','dropbox-backup')?></a>
8
  <a href="<?php echo admin_url( 'admin-post.php?action=hide_notice&type=preview' ); ?>" style="float: right; font-size: 12px;">[<?php _e('hide this message','dropbox-backup')?>]</a>
9
- <div id="pro-plugin-description" style="margin-top:15px;display: none;">
10
- <?php include 'advantage-plugin.php'; ?>
11
- </div>
12
- <script>
13
- function showProWPADMDescription()
14
- {
15
- var disp = jQuery('#pro-plugin-description').css('display');
16
- if (disp == 'none') {
17
- jQuery('#pro-plugin-description').show(700);
18
- } else {
19
- jQuery('#pro-plugin-description').hide(700);
20
- }
21
- }
22
- </script>
23
  </div>
 
1
  <div class="clear"></div>
2
  <div class="update-nag" style="width: 95%;">
3
  <?php _e('Professional version of','dropbox-backup'); ?>
4
+ "<a href="<?php echo admin_url("admin.php?page=wpadm_wp_full_backup_dropbox"); ?>" title="<?php _e('Dropbox backup and restore"','dropbox-backup')?>" alt="<?php _e('Dropbox backup and restore','dropbox-backup')?>"><?php _e('Dropbox backup and restore','dropbox-backup')?></a>"
5
  <?php _e(' plugin is now available!','dropbox-backup'); ?>
6
+ <a href="<?php echo admin_url("admin.php?page=wpadm_wp_full_backup_dropbox"); ?>" title="<?php _e('Read more...','dropbox-backup')?>" alt="<?php _e('Read more...','dropbox-backup')?>"><?php _e('Read more...','dropbox-backup')?></a>
7
  <a href="<?php echo admin_url( 'admin-post.php?action=hide_notice&type=preview' ); ?>" style="float: right; font-size: 12px;">[<?php _e('hide this message','dropbox-backup')?>]</a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  </div>
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' />
@@ -9,30 +8,6 @@
9
  </style>
10
  <script>
11
 
12
- function showProcessesData(data)
13
- {
14
- if (type_backup == 'send-to-dropbox') {
15
- jQuery('#dropbox-process').css('display', 'block');
16
- }
17
- for(i in data) {
18
- if (data[i]['all']) {
19
- if (data[i]['all'] > 0) {
20
- jQuery('#' + i + '-process').css('display', 'block');
21
- jQuery('.stats-' + i ).css('display', 'inline');
22
- }
23
- jQuery('#all_' + i).html(data[i]['all']);
24
- }
25
- if (data[i]['count']) {
26
- jQuery('#count_' + i).html(data[i]['count']);
27
- }
28
- if (data[i]['procent']) {
29
- jQuery('#procent_' + i).html(data[i]['procent'] + '%');
30
- }
31
- jQuery('.procent-' + i).css('width', data[i]['procent'] + '%');
32
- }
33
-
34
- }
35
-
36
  function disable_buttons()
37
  {
38
  jQuery('.disable-button').each(function() {
@@ -75,22 +50,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 +69,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,13 +82,12 @@
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");
130
  jQuery("#action-buttons").css('margin-top', '8px');
131
  <?php if(!$stars5) { ?>
132
- jQuery("#support-button").css('margin-top', '9px');
133
  <?php } else { ?>
134
  jQuery("#support-button").css('margin-top', '8px');
135
  <?php } ?>
@@ -137,9 +95,6 @@
137
  jQuery(".title-logs").css('display', 'block');
138
  jQuery(".title-status").css('display', 'none');
139
  type_backup = 'local_backup';
140
- jQuery('#process-box').show('slow');
141
- jQuery('#reviews-dropbox').hide('slow');
142
- jQuery('#stop-button').css('display', 'block');
143
  jQuery.ajax({
144
  type: "POST",
145
  url: ajaxurl,
@@ -164,45 +119,53 @@
164
  }
165
  function AjaxAlert(jqXHR, textStatus, errorThrown)
166
  {
167
- if (stop_backup_flag === false) {
168
- <?php $command_running = get_transient('running_command');
169
- if (isset($is_runnig) && $is_runnig && $command_running) {
170
- echo 'var running_command = true;';
171
- } else {
172
- echo 'var running_command = false;';
173
- }
174
- ?>
175
- if (running_command === false ) {
176
- var msg = 'Website "' + home_url + '" returned an error during operation with return:<br /><br /> <span style="font-size:13px; font-style: italic;">code: ' + jqXHR.status + ', text status: ' + textStatus + ', text: ' + errorThrown + "</span>";
177
- jQuery("#ajax-message").html(msg);
178
- jQuery("#msg_ajax").val(msg);
179
- jQuery('#ajax-alert').arcticmodal({
180
- beforeOpen: function(data, el) {
181
- jQuery('#ajax-alert').css('display','block');
182
- },
183
- afterClose: function(data, el) {
184
- jQuery('#ajax-alert').css('display','none');
185
- }
186
- });
187
- enable_buttons();
188
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
  }
190
  }
191
 
192
- var stop_backup_flag = false;
193
-
194
  function stopBackup()
195
  {
196
- // type_backup != '' &&
197
- if ( confirm("<?php _e('Interrupted progress in backup? All data is lost.', 'dropbox-backup')?>")) {
198
- stop_backup_flag = true;
199
- document.stop_backups.type_backup.value = type_backup;
200
- document.stop_backups.submit();
201
- }
 
 
 
 
 
 
 
 
 
 
 
 
202
 
203
  }
204
 
205
- var auth_param = <?php echo isset($dropbox_options['app_key']) && isset($dropbox_options['app_secret']) && isset($dropbox_options['uid']) && $dropbox_options['uid'] != '' ? 'false' : 'true'; ?>;
206
  function start_dropbox_backup(t)
207
  {
208
  if (auth_param === false) {
@@ -211,24 +174,19 @@
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");
218
  jQuery("#action-buttons").css('margin-top', '8px');
219
 
220
  <?php if(!$stars5) { ?>
221
- jQuery("#support-button").css('margin-top', '9px');
222
  <?php } else { ?>
223
  jQuery("#support-button").css('margin-top', '8px');
224
  <?php } ?>
225
  jQuery("#log-backup").html('');
226
  jQuery(".title-logs").css('display', 'block');
227
  jQuery(".title-status").css('display', 'none');
228
- jQuery('#process-box').show('slow');
229
- jQuery('#reviews-dropbox').hide('slow');
230
- jQuery('#stop-button').css('display', 'block');
231
- jQuery('#dropbox-process').css('display', 'block');
232
  type_backup = 'send-to-dropbox';
233
  jQuery.ajax({
234
  type: "POST",
@@ -318,12 +276,11 @@
318
  } else {
319
  var error_log = '';
320
  if (data.error && data.error != 'undefined') {
321
- error_log = data.error;
322
  }
323
  jQuery('.title-logs').css('display', 'none');
324
  jQuery('.title-status').css({'display':'block', 'color':'red'});
325
  jQuery('.title-status').html("<?php _e('Dropbox Backup wasn\'t created. ','dropbox-backup'); ?>" + error_log);
326
- return false;
327
  }
328
  }
329
  if (command_running === false) {
@@ -397,26 +354,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,17 +362,13 @@
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') {
432
- data_log['type-backup2'] = 'local_backup';
433
- }
434
 
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({
@@ -452,14 +385,6 @@
452
  jQuery("#log-backup").html(l);
453
  }
454
  }
455
-
456
- if (data.processes) {
457
- console.log(data.processes);
458
- showProcessesData(data.processes);
459
- }
460
-
461
-
462
-
463
  if (process_flag == 1) {
464
  if (data.data) {
465
  if (method == 'restore') {
@@ -472,25 +397,17 @@
472
  showData(data.data);
473
  }
474
  processStop();
475
- jQuery('#stop-button').css('display', 'none');
476
  } else {
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
  });
496
  }
@@ -568,14 +485,12 @@
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('');
576
  jQuery("#action-buttons").css('margin-top', '8px');
577
  <?php if(!$stars5) { ?>
578
- jQuery("#support-button").css('margin-top', '9px');
579
  <?php } else { ?>
580
  jQuery("#support-button").css('margin-top', '8px');
581
  <?php } ?>
@@ -583,12 +498,17 @@
583
  jQuery(".title-status").css('display', 'none');
584
  jQuery("#logs-form").show("slow");
585
  jQuery("#action-buttons").css('margin-top', '8px');
586
- process_flag = 1
587
  jQuery.ajax({
588
  type: "POST",
589
  // url: ajaxurl,
590
  url: '<?php echo plugins_url('/modules/restore-class.php', dirname(__FILE__) ); ?>',
591
  data: data_backup,
 
 
 
 
 
 
592
  success: function(data){
593
  if (data.result == 'success') {
594
  process_flag = 0;
@@ -604,8 +524,7 @@
604
  jQuery('.title-status').html(str);
605
  }
606
  } else if (data.result == 'work'){
607
- processBar('restore');
608
- showTime();
609
  } else {
610
  process_flag = 0;
611
  jQuery('.title-logs').css('display', 'none');
@@ -651,10 +570,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,
@@ -761,30 +681,15 @@
761
  }
762
  function InludesSetting()
763
  {
764
- if (jQuery('#inludes-setting').css('display') == 'block') {
765
- jQuery('#inludes-setting').arcticmodal('close');
766
- } else {
767
- jQuery('#inludes-setting').arcticmodal({
768
- beforeOpen: function(data, el) {
769
- showLoadingImg(true);
770
- getIncludesData();
771
- jQuery('#inludes-setting').css('display','block');
772
- },
773
- afterClose: function(data, el) {
774
- jQuery('.show-includes').html("");
775
- jQuery('#inludes-setting').css('display','none');
776
- }
777
- });
778
- }
779
- /*disp = jQuery('#inludes-setting').css('display');
780
  if (disp == 'none') {
781
- showLoadingImg(true);
782
- getIncludesData();
783
- jQuery('#inludes-setting').show("slow");
784
  } else {
785
- jQuery('.show-includes').html("");
786
- jQuery('#inludes-setting').hide("slow");
787
- } */
788
  }
789
  var level_tree = {};
790
  function getIncludesData(type, dir_)
@@ -816,7 +721,7 @@
816
  level_tree[level_tree.length] = data_res.dir;
817
  },
818
  error: function(jqXHR, textStatus, errorThrown) {
819
- //AjaxAlert(jqXHR, textStatus, errorThrown);
820
  }
821
  });
822
  }
@@ -843,20 +748,14 @@
843
  for(i = 0; i < data.length; i++) {
844
  if (data[i].check) {
845
  check = 'checked="checked"' ;
846
- send_checked[send_checked.length] = urldecode( convert_from_cp1251( data[i].folder ) ) ;
847
  } else {
848
  check = '';
849
  }
850
- label_class = '';
851
- var onclick_ = 'onclick="loadInludes(\'/' + data[i].folder + '\', \'' + data[i].cache +'\', this, \'' + level_tree.length + '\')"';
852
- if (data[i].is_file) {
853
- label_class = 'class="is-file"';
854
- onclick_ = '';
855
- }
856
- html += '<div class="field-value-folder-or-file" id="inc_' + data[i].cache + '" data-value="' + data[i].cache + '">' +
857
- '<input type="checkbox" ' + check + ' class="checkbox-send" value="' + urldecode( convert_from_cp1251( data[i].folder ) ) + '" name="folder-include" id="send-to-' + data[i].cache + '" data-value-cache="' + data[i].cache + '" onclick="connectFolder(this)" />' +
858
- '<input type="checkbox" class="input-folder" value="/' + urldecode( convert_from_cp1251( data[i].dir ) ) + '" id="' + data[i].cache + '" ' + onclick_ + ' />' +
859
- '<label ' + label_class + ' for="' + data[i].cache + '">' + urldecode( convert_from_cp1251( data[i].dir ) ) + ' <span >(' + data[i].perm + ')</span>' + '</label>' +
860
  '<div id="img_load_' + data[i].cache + '" style="display:none; margin-left:10px;position:relative;">' +
861
  '<img style="position:absolute;bottom:0;" src="<?php echo plugins_url('/img/folder-loader.gif', dirname(__FILE__) ); ?>" alt="load" title="load" >' +
862
  '</div>'+
@@ -885,12 +784,10 @@
885
  dataType: 'json',
886
  success: function(data_res) {
887
  showLoadingImg(false);
888
- if (data_res == 1) {
889
- InludesSetting();
890
- }
891
  },
892
  error: function (jqXHR, textStatus, errorThrown) {
893
- //AjaxAlert(jqXHR, textStatus, errorThrown);
894
  }
895
  });
896
  }
@@ -898,14 +795,10 @@
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;
905
- if(document.getElementById(id).checked) {
906
- is_value = 1;
907
- }
908
- }
909
 
910
  data = {'action' : 'saveSetting'}
911
  data[id] = is_value;
@@ -918,7 +811,7 @@
918
  location.reload();
919
  },
920
  error: function( jqXHR, textStatus, errorThrown ){
921
- //AjaxAlert(jqXHR, textStatus, errorThrown);
922
  }
923
  });
924
  }
@@ -955,22 +848,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
  ?>
@@ -979,32 +860,26 @@
979
  jQuery("#action-buttons").css('margin-top', '8px');
980
 
981
  <?php if(!$stars5) { ?>
982
- jQuery("#support-button").css('margin-top', '9px');
983
  <?php } else { ?>
984
  jQuery("#support-button").css('margin-top', '8px');
985
  <?php } ?>
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() ;
993
  }, 10)
994
  process_flag = 1;
995
- jQuery('#process-box').show('slow');
996
- jQuery('#reviews-dropbox').hide('slow');
997
- jQuery('#stop-button').css('display', 'block');
998
  processBar(type_backup);
999
  showTime(1);
1000
  });
1001
  <?php }?>
1002
- jQuery(document).ready(function() {
1003
- jQuery('.wpadm-tooltip').tooltip();
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 +890,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 +919,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 +943,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 +973,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;">
@@ -1136,8 +1004,68 @@
1136
  <input type="button" value="<?php _e('OK','dropbox-backup'); ?>" onclick="jQuery('#helper-keys').arcticmodal('close');" style="text-align: center; width: 100px;" class="button-wpadm">
1137
  </div>
1138
  </div>
 
1139
  <div class="block-content" style="margin-top:20px;">
1140
- <?php include 'advantage-plugin.php'; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1141
  </div>
1142
  <div class="block-content" style="margin-top:2px;">
1143
  <div style="min-height : 215px; padding: 5px; padding-top: 10px;">
@@ -1148,77 +1076,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 +1143,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'); ?>" />
@@ -1252,16 +1169,16 @@
1252
  </div>
1253
  </div>
1254
  <?php } ?>
1255
- <div class="cfTabsContainer wpadm-setting-box" style="">
1256
  <div class="stat-wpadm-info-title" id="title-setting" style="padding :20px 0px; margin-top:11px; line-height: 50px;">
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 +1192,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 +1200,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
 
@@ -1295,87 +1212,24 @@
1295
  </tbody>
1296
  </table>
1297
 
1298
- <div class="setting-checkbox">
1299
- <span class="dashicons dashicons-editor-help wpadm-tooltip" title="<?php _e('The average waiting time before error message will be displayed. During this time the plugin will try to perform failed operation attempts. If this time was expired and operation still fails, the backup process will be interrupted and the message about problem will be shown on the screen.', 'dropbox-backup')?>"></span>
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
1307
- }
1308
- ?>
1309
- </select>
1310
-
1311
- <span></span>
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>
@@ -1392,12 +1246,8 @@
1392
  <div style="clear: both;"></div>
1393
  <div class="block-content">
1394
  <div class="" style="margin-top:10px;">
1395
- <div id="logs-form" style="display: none; float:left; width: 60%;">
1396
- <div class="title-logs progress-box">
1397
- <span style="font-size:16px;"><?php _e('Please wait...','dropbox-backup'); ?>
1398
- <span id="time_backup">0 <?php _e('sec.','dropbox-backup'); ?></span>
1399
- </span>
1400
- </div>
1401
  <div class="title-status" style="font-size:16px; display: none;"></div>
1402
  <div style="border: 1px solid #ddd; text-align: left; background: #fff; padding: 2px;">
1403
  <div id="log-backup" style="overflow: auto; height: 60px; border: 5px solid #fff; "></div>
@@ -1410,59 +1260,8 @@
1410
  <img src="<?php echo plugins_url('/img/stars-5.png', dirname(__FILE__));?>" alt=""></a>
1411
  </div>
1412
  <?php }?>
1413
- <div id="process-box" style="display: none;">
1414
- <div class="main-title"><?php _e('Backup processing status', 'dropbox-backup')?></div>
1415
- <?php if (isset($dropbox_options['is_repair']) && $dropbox_options['is_repair'] == 1) {?>
1416
- <div class="inline progress-box" id="repair-process" data-width="0%" style="display: block;">
1417
- <div class="progress-text">
1418
- <?php _e('Repairing of database tables', 'dropbox-backup')?>
1419
- <span class="stats-repair" style="display: none;">(<span id="count_repair">0</span> <?php _e('of', 'dropbox-backup'); ?> <span id="all_repair">0</span>)</span> <span class="procent-progress" id="procent_repair">0%</span>
1420
- </div>
1421
- <div class="progress-bar procent-repair" style="width: 0%;">
1422
- </div>
1423
- </div>
1424
- <?php } ?>
1425
- <?php if ( !isset($dropbox_options['is_optimization']) || ( isset($dropbox_options['is_optimization']) && $dropbox_options['is_optimization'] == 1 ) ) { ?>
1426
- <div class="inline progress-box" id="optimization-process" style="display: block;">
1427
- <div class="progress-text">
1428
- <?php _e('Optimization of database tables', 'dropbox-backup')?>
1429
- <span class="stats-optimization" style="display: none;">(<span id="count_optimization">0</span> <?php _e('of', 'dropbox-backup'); ?> <span id="all_optimization">0</span>)</span> <span class="procent-progress" id="procent_optimization">0%</span>
1430
- </div>
1431
- <div class="progress-bar procent-optimization" style="width: 0%;">
1432
- </div>
1433
- </div>
1434
- <?php } ?>
1435
-
1436
- <div class="inline progress-box" id="mysqldump-process" style="display: block;">
1437
- <div class="progress-text">
1438
- <?php _e('Creation of database dump', 'dropbox-backup')?>
1439
- <span class="stats-mysqldump" style="display: none;">(<span id="count_mysqldump">0</span> <?php _e('of', 'dropbox-backup'); ?> <span id="all_mysqldump">0</span>)</span> <span class="procent-progress" id="procent_mysqldump">0%</span>
1440
- </div>
1441
- <div class="progress-bar procent-mysqldump" style="width: 0%;">
1442
- </div>
1443
- </div>
1444
-
1445
-
1446
- <div class="inline progress-box" id="archiving-process" style="display: block;">
1447
- <div class="progress-text">
1448
- <?php _e('Archiving of files', 'dropbox-backup')?>
1449
- <span class="stats-archiving" style="display: none;">(<span id="count_archiving">0</span> <?php _e('of', 'dropbox-backup'); ?> <span id="all_archiving">0</span>)</span> <span class="procent-progress" id="procent_archiving">0%</span>
1450
- </div>
1451
- <div class="progress-bar procent-archiving" style="width: 0%;">
1452
- </div>
1453
- </div>
1454
-
1455
- <div class="inline progress-box" id="dropbox-process" style="display: none;">
1456
- <div class="progress-text">
1457
- <?php _e('Sending of backup to Dropbox', 'dropbox-backup')?>
1458
- <span class="stats-dropbox" style="display: none;">(<span id="count_dropbox">0</span> <?php _e('of', 'dropbox-backup'); ?> <span id="all_dropbox">0</span>)</span> <span class="procent-progress" id="procent_dropbox">0%</span>
1459
- </div>
1460
- <div class="progress-bar procent-dropbox" style="width: 0%;">
1461
- </div>
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;">
@@ -1471,9 +1270,6 @@
1471
  <div style="float: left; margin-top: 2px;">
1472
  <button onclick="start_local_backup()" text-button="<?php _e('Create Local Backup','dropbox-backup');?>" class="backup_button disable-button" style="padding: 5px 10px; margin-top: 10px; font-size: 15px;bottom: 0px;"><?php _e('Create Local Backup','dropbox-backup'); ?></button> <br />
1473
  </div>
1474
- <div id="stop-button" style="float: left; margin-top: 2px; margin-left:20px; display: none;">
1475
- <button onclick="stopBackup();" text-button="<?php _e('Stop Backup','dropbox-backup');?>" class="backup_button" style="padding: 5px 10px; margin-top: 10px; font-size: 15px;bottom: 0px;"><?php _e('Stop Backup','dropbox-backup'); ?></button> <br />
1476
- </div>
1477
  <!-- <div style="float: left; margin-top: 2px;margin-left: 20px;">
1478
  <button onclick="InludesSetting();" class="backup_button" style="padding: 5px 10px; margin-top: 10px; font-size: 15px;bottom: 0px;"><?php _e('Folders & files','dropbox-backup'); ?></button> <br />
1479
  </div> -->
@@ -1482,49 +1278,42 @@
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>
1503
- <div class="title-description" style="font-size: 20px; text-align: center;padding-top:20px; line-height: 30px;">
1504
- <?php _e('Selected files and folders will be included to backup','dropbox-backup'); ?>
1505
- <div style="font-size: 14px;">
1506
- <?php _e('Database of website will be included automatically','dropbox-backup'); ?>
1507
- </div>
1508
- </div>
1509
- <div class="loading-img">
1510
- <img style="display: none; margin: 0 auto;" src="<?php echo plugins_url('/img/wpadmload.gif', dirname(__FILE__) ); ?>">
1511
- </div>
1512
- <div class="button-description">
1513
- <!-- <input type="radio" value="folder" id="inc-folder" checked="checked" name="includes-files-folder"><label for="inc-folder"><?php _e('View folders','dropbox-backup'); ?></label>
1514
- &nbsp;&nbsp;&nbsp; <input type="radio" value="files" id="inc-files" name="includes-files-folder"><label for="inc-files"><?php _e('View Folders & Files','dropbox-backup'); ?></label> -->
1515
- <div class="show-includes">
1516
 
1517
- </div>
1518
- </div>
1519
- <div class="clear"></div>
1520
- <div class="button-description" style="padding:20px 0; width: 100%;">
1521
- <input type="button" value="<?php _e('OK','dropbox-backup'); ?>" onclick="saveIncludes();" style="text-align: center; width: 100px;" class="button-wpadm">
1522
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1523
- <input type="button" value="<?php _e('Cancel','dropbox-backup'); ?>" onclick="InludesSetting();" style="text-align: center; width: 100px;" class="button-wpadm">
1524
- </div>
1525
- </div>
1526
 
1527
- </div>
1528
 
1529
  <table class="table" style="margin-top: 5px; display: <?php echo isset($data['md5']) && ($n = count($data['data'])) && is_array($data['data'][0]) ? 'table' : 'none'?>;">
1530
  <thead>
@@ -1553,29 +1342,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 +1373,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 +1388,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 +1399,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 +1423,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 +1449,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 +1488,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 +1518,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' />
8
  </style>
9
  <script>
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  function disable_buttons()
12
  {
13
  jQuery('.disable-button').each(function() {
50
  jQuery('#registr-show').html("<?php _e('Hide','dropbox-backup'); ?>");
51
  jQuery('#title-regisr').css("padding" , "0px 0px");
52
  jQuery('#registr-choice-icon').removeClass("dashicons-arrow-down").addClass('dashicons-arrow-up');
 
53
  } else {
54
  if (show) {
55
  jQuery('#cf_activate').hide('slow');
56
  jQuery('#registr-show').html("<?php _e('Show','dropbox-backup'); ?>");
57
+ jQuery('#title-regisr').css("padding" , "20px 0px");
58
  jQuery('#registr-choice-icon').removeClass("dashicons-arrow-up").addClass('dashicons-arrow-down');
 
59
  }
60
  }
61
  }
 
 
 
 
 
62
  function showSetting(show)
63
  {
64
  display = jQuery('#setting_active').css('display');
69
  jQuery('#setting-choice-icon').removeClass("dashicons-arrow-down").addClass('dashicons-arrow-up');
70
  } else {
71
  if (show) {
 
 
 
 
 
 
 
 
72
  jQuery('#setting_active').hide('slow');
73
  jQuery('#setting-show').html("<?php _e('Show','dropbox-backup'); ?>");
74
  jQuery('#title-setting').css("padding" , "20px 0px");
75
  jQuery('#setting-choice-icon').removeClass("dashicons-arrow-up").addClass('dashicons-arrow-down');
 
76
  }
77
  }
78
  }
82
  d = new Date();
83
  var data_backup = {
84
  'action': 'wpadm_local_backup',
 
85
  'time': Math.ceil( (d.getTime() + (-d.getTimezoneOffset() * 60000 ) ) / 1000 )
86
  };
87
  jQuery("#logs-form").show("slow");
88
  jQuery("#action-buttons").css('margin-top', '8px');
89
  <?php if(!$stars5) { ?>
90
+ jQuery("#support-button").css('margin-top', '132px');
91
  <?php } else { ?>
92
  jQuery("#support-button").css('margin-top', '8px');
93
  <?php } ?>
95
  jQuery(".title-logs").css('display', 'block');
96
  jQuery(".title-status").css('display', 'none');
97
  type_backup = 'local_backup';
 
 
 
98
  jQuery.ajax({
99
  type: "POST",
100
  url: ajaxurl,
119
  }
120
  function AjaxAlert(jqXHR, textStatus, errorThrown)
121
  {
122
+ <?php $command_running = get_transient('running_command');
123
+ if (isset($is_runnig) && $is_runnig && $command_running) {
124
+ echo 'var running_command = true;';
125
+ } else {
126
+ echo 'var running_command = false;';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  }
128
+ ?>
129
+ if (running_command === false ) {
130
+ var msg = 'Website "' + home_url + '" returned an error during operation with return:<br /><br /> <span style="font-size:13px; font-style: italic;">code: ' + jqXHR.status + ', text status: ' + textStatus + ', text: ' + errorThrown + "</span>";
131
+ jQuery("#ajax-message").html(msg);
132
+ jQuery("#msg_ajax").val(msg);
133
+ jQuery('#ajax-alert').arcticmodal({
134
+ beforeOpen: function(data, el) {
135
+ jQuery('#ajax-alert').css('display','block');
136
+ },
137
+ afterClose: function(data, el) {
138
+ jQuery('#ajax-alert').css('display','none');
139
+ }
140
+ });
141
+ enable_buttons();
142
  }
143
  }
144
 
 
 
145
  function stopBackup()
146
  {
147
+
148
+ var data_backup = {
149
+ 'action': 'stop_backup',
150
+ 'type-backup': type_backup,
151
+ };
152
+ jQuery.ajax({
153
+ type: "POST",
154
+ url: ajaxurl,
155
+ data: data_backup,
156
+ dataType: 'json',
157
+ success: function(data){
158
+
159
+ },
160
+ error: function(jqXHR, textStatus, errorThrown) {
161
+ processStop();
162
+ AjaxAlert(jqXHR, textStatus, errorThrown);
163
+ },
164
+ });
165
 
166
  }
167
 
168
+ var auth_param = <?php echo isset($dropbox_options['app_key']) && isset($dropbox_options['app_secret']) && isset($dropbox_options['uid']) && $dropbox_options['uid'] != '' ? 'false' : 'true' ?>;
169
  function start_dropbox_backup(t)
170
  {
171
  if (auth_param === false) {
174
 
175
  var data_backup = {
176
  'action': 'wpadm_dropbox_create',
 
177
  'time': Math.ceil( (d.getTime() + (-d.getTimezoneOffset() * 60000 ) ) / 1000 ),
178
  };
179
  jQuery("#logs-form").show("slow");
180
  jQuery("#action-buttons").css('margin-top', '8px');
181
 
182
  <?php if(!$stars5) { ?>
183
+ jQuery("#support-button").css('margin-top', '132px');
184
  <?php } else { ?>
185
  jQuery("#support-button").css('margin-top', '8px');
186
  <?php } ?>
187
  jQuery("#log-backup").html('');
188
  jQuery(".title-logs").css('display', 'block');
189
  jQuery(".title-status").css('display', 'none');
 
 
 
 
190
  type_backup = 'send-to-dropbox';
191
  jQuery.ajax({
192
  type: "POST",
276
  } else {
277
  var error_log = '';
278
  if (data.error && data.error != 'undefined') {
279
+ error_log = ': ' + data.error;
280
  }
281
  jQuery('.title-logs').css('display', 'none');
282
  jQuery('.title-status').css({'display':'block', 'color':'red'});
283
  jQuery('.title-status').html("<?php _e('Dropbox Backup wasn\'t created. ','dropbox-backup'); ?>" + error_log);
 
284
  }
285
  }
286
  if (command_running === false) {
354
  }
355
  }
356
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
357
  var logs = [];
358
  function processBar(method)
359
  {
362
  }
363
  var data_log = {
364
  'action': 'wpadm_logs',
 
365
  'type-backup' : method,
366
+ };
 
 
 
367
 
368
  var url_ajax = ajaxurl;
369
  if (method == 'restore') {
370
  url_ajax = '<?php echo plugins_url('/modules/restore-class.php', dirname(__FILE__) ); ?>';
371
+ data_log['key'] = '<?php echo $key; ?>';
372
  data_log['method'] = 'wpadm_logs';
373
  }
374
  jQuery.ajax({
385
  jQuery("#log-backup").html(l);
386
  }
387
  }
 
 
 
 
 
 
 
 
388
  if (process_flag == 1) {
389
  if (data.data) {
390
  if (method == 'restore') {
397
  showData(data.data);
398
  }
399
  processStop();
 
400
  } else {
401
+ setTimeout('processBar("' + method + '")', 5000);
402
  }
403
  }
 
 
 
 
404
  } else {
405
+ setTimeout('processBar("' + method + '")', 5000);
406
  }
407
  },
408
  error: function(jqXHR, textStatus, errorThrown){
409
+ processStop();
410
+ AjaxAlert(jqXHR, textStatus, errorThrown);
 
 
 
411
  },
412
  });
413
  }
485
  }
486
  var data_backup = {
487
  'action': act,
 
 
488
  'name': name,
489
  };
490
  jQuery("#log-backup").html('');
491
  jQuery("#action-buttons").css('margin-top', '8px');
492
  <?php if(!$stars5) { ?>
493
+ jQuery("#support-button").css('margin-top', '132px');
494
  <?php } else { ?>
495
  jQuery("#support-button").css('margin-top', '8px');
496
  <?php } ?>
498
  jQuery(".title-status").css('display', 'none');
499
  jQuery("#logs-form").show("slow");
500
  jQuery("#action-buttons").css('margin-top', '8px');
 
501
  jQuery.ajax({
502
  type: "POST",
503
  // url: ajaxurl,
504
  url: '<?php echo plugins_url('/modules/restore-class.php', dirname(__FILE__) ); ?>',
505
  data: data_backup,
506
+ beforeSend: function(){
507
+ process_flag = 1
508
+ processBar('restore');
509
+ showTime();
510
+
511
+ },
512
  success: function(data){
513
  if (data.result == 'success') {
514
  process_flag = 0;
524
  jQuery('.title-status').html(str);
525
  }
526
  } else if (data.result == 'work'){
527
+
 
528
  } else {
529
  process_flag = 0;
530
  jQuery('.title-logs').css('display', 'none');
570
  }
571
  }
572
  if(send) {
573
+ form.find('#message-form').css('display', 'none');
574
  data['password'] = document.auth.password.value;
575
  data['username'] = document.auth.username.value;
576
  data['plugin'] = document.auth.plugin.value;
577
+ backup = jQuery("#name_backup_restore").val();
578
  jQuery.ajax({
579
  url: form.attr('action'),
580
  data: data,
681
  }
682
  function InludesSetting()
683
  {
684
+ disp = jQuery('#inludes-setting').css('display');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
685
  if (disp == 'none') {
686
+ showLoadingImg(true);
687
+ getIncludesData();
688
+ jQuery('#inludes-setting').show("slow");
689
  } else {
690
+ jQuery('.show-includes').html("");
691
+ jQuery('#inludes-setting').hide("slow");
692
+ }
693
  }
694
  var level_tree = {};
695
  function getIncludesData(type, dir_)
721
  level_tree[level_tree.length] = data_res.dir;
722
  },
723
  error: function(jqXHR, textStatus, errorThrown) {
724
+ AjaxAlert(jqXHR, textStatus, errorThrown);
725
  }
726
  });
727
  }
748
  for(i = 0; i < data.length; i++) {
749
  if (data[i].check) {
750
  check = 'checked="checked"' ;
751
+ send_checked[send_checked.length] = data[i].check_folder;
752
  } else {
753
  check = '';
754
  }
755
+ html += '<div id="inc_' + data[i].cache + '" data-value="' + data[i].cache + '">' +
756
+ '<input type="checkbox" ' + check + ' class="checkbox-send" value="' + data[i].folder + '" name="folder-include" id="send-to-' + data[i].cache + '" onclick="connectFolder(this)" />' +
757
+ '<input type="checkbox" class="input-folder" value="/' + data[i].dir + '" id="' + data[i].cache + '" onclick="loadInludes(\'/' + data[i].folder + '\', \'' + data[i].cache +'\', this, \'' + level_tree.length + '\')" />' +
758
+ '<label for="' + data[i].cache + '">' + data[i].dir + ' <span style="font-size:10px;">(' + data[i].perm + ')</span>' + '</label>' +
 
 
 
 
 
 
759
  '<div id="img_load_' + data[i].cache + '" style="display:none; margin-left:10px;position:relative;">' +
760
  '<img style="position:absolute;bottom:0;" src="<?php echo plugins_url('/img/folder-loader.gif', dirname(__FILE__) ); ?>" alt="load" title="load" >' +
761
  '</div>'+
784
  dataType: 'json',
785
  success: function(data_res) {
786
  showLoadingImg(false);
787
+
 
 
788
  },
789
  error: function (jqXHR, textStatus, errorThrown) {
790
+ AjaxAlert(jqXHR, textStatus, errorThrown);
791
  }
792
  });
793
  }
795
  function saveSetting(id)
796
  {
797
  if (jQuery('#' + id).length > 0) {
798
+ is_value = 0;
799
+ if(document.getElementById(id).checked) {
800
+ is_value = 1;
801
+ }
 
 
 
 
802
 
803
  data = {'action' : 'saveSetting'}
804
  data[id] = is_value;
811
  location.reload();
812
  },
813
  error: function( jqXHR, textStatus, errorThrown ){
814
+ AjaxAlert(jqXHR, textStatus, errorThrown);
815
  }
816
  });
817
  }
848
  jQuery('#form-ajax-ftp-email').hide('slow');
849
  }
850
  }
 
 
 
 
 
 
 
 
 
 
 
 
851
  <?php
852
  $command_running = get_transient('running_command');
853
  if (isset($is_runnig) && $is_runnig && $command_running ) {
854
+ if (file_exists(WPAdm_Core::getTmpDir() . "/logs2")) {
855
  @unlink(WPAdm_Core::getTmpDir() . "/logs2");
856
  }
857
  ?>
860
  jQuery("#action-buttons").css('margin-top', '8px');
861
 
862
  <?php if(!$stars5) { ?>
863
+ jQuery("#support-button").css('margin-top', '132px');
864
  <?php } else { ?>
865
  jQuery("#support-button").css('margin-top', '8px');
866
  <?php } ?>
867
  jQuery("#log-backup").html('');
868
  jQuery(".title-logs").css('display', 'block');
869
  jQuery(".title-status").css('display', 'none');
870
+ type_backup = '<?php echo $command_running; ?>';
871
 
872
  setTimeout(function() {
873
  disable_buttons() ;
874
  }, 10)
875
  process_flag = 1;
 
 
 
876
  processBar(type_backup);
877
  showTime(1);
878
  });
879
  <?php }?>
 
 
 
880
  </script>
881
  <?php if (!empty($error)) {
882
+ echo '<div class="error" style="text-align: center; color: red; font-weight:bold;">
883
  <p style="font-size: 16px;">
884
  ' . $error . '
885
  </p></div>';
890
  ' . $msg . '
891
  </p></div>';
892
  }?>
 
 
 
 
 
 
 
893
  <div id="is-dropbox-auth" style="display: none; width: 380px; text-align: center; background: #fff; border: 2px solid #dde4ff; border-radius: 5px;">
894
  <div class="title-description" style="font-size: 20px; text-align: center;padding-top:45px; line-height: 30px;">
895
  <?php _e('Your Dropbox account must be connected before backup to Dropbox.', 'dropbox-backup'); ?> <br />
919
  </script>
920
  <div id="sent-error-report" style="display: none;" >
921
  <div class="text-view">
922
+ <?php echo $sent_response ;?>
923
  </div>
924
  <div class="button-sent-report">
925
  <input type="button" class="button-wpadm" value="<?php _e('OK','dropbox-backup'); ?>" onclick="jQuery('#sent-error-report').arcticmodal('close')" />
943
  <label for="ftp-host"><?php _e('FTP Host','dropbox-backup'); ?></label>
944
  </div>
945
  <div style="float:left; ">
946
+ <input type="text" id="ftp-host" value="<?php echo str_ireplace(array('http://', 'https://'), '', home_url()) ;?>" name="ftp_host" >
947
  </div>
948
  </div>
949
  <div class="clear"></div>
973
  <label for="email-resp"><?php _e('Response Email:','dropbox-backup'); ?></label>
974
  </div>
975
  <div style=" ">
976
+ <input type="text" id="email-resp" value="<?php echo get_option('admin_email');?>" style="padding-left:3px;" name="mail_response">
977
  </div>
978
  </div>
979
  </div>
980
  </div>
981
  <div class="clear"></div>
982
  <div style="text-align: left; margin-left: 100px; margin-top: 10px;">
983
+ <input value="<?php echo $time_log; ?>" type="hidden" name="time_pars">
984
  <input value="" type="hidden" name="msg_ajax" id="msg_ajax">
985
  </div>
986
  <div class="ajax-button" style="margin-bottom: 10px;">
1004
  <input type="button" value="<?php _e('OK','dropbox-backup'); ?>" onclick="jQuery('#helper-keys').arcticmodal('close');" style="text-align: center; width: 100px;" class="button-wpadm">
1005
  </div>
1006
  </div>
1007
+ <!-- <a href="#" onclick="stopBackup();">Stop backup</a> -->
1008
  <div class="block-content" style="margin-top:20px;">
1009
+ <div class="inline" style="width: 60%">
1010
+ <span style="font-size:16px;">
1011
+ <?php _e('Use Professional version of "Dropbox backup and restore" plugin and get:','dropbox-backup') ; ?>
1012
+ </span>
1013
+ <ul class="list-dropbox-backup-pro">
1014
+ <li><img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
1015
+ <span class="text">
1016
+ <?php _e('Automated Dropbox backup (Scheduled backup tasks)','dropbox-backup') ; ?>
1017
+ </span>
1018
+ </li>
1019
+ <li>
1020
+ <img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
1021
+ <span class="text">
1022
+ <?php _e('Automated Local backup (Scheduled backup tasks)','dropbox-backup') ; ?>
1023
+ </span>
1024
+ </li>
1025
+ <li>
1026
+ <img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
1027
+ <span class="text">
1028
+ <?php _e('Backup Status E-Mail Reporting','dropbox-backup') ; ?>
1029
+ </span>
1030
+ </li>
1031
+ <li>
1032
+ <img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
1033
+ <span class="text">
1034
+ <?php _e('Online Service "Backup Website Manager" (Copy, Clone or Migrate of websites)','dropbox-backup') ; ?>
1035
+ </span>
1036
+ </li>
1037
+ <li>
1038
+ <img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
1039
+ <span class="text">
1040
+ <?php _e('One Year Free Updates for PRO version','dropbox-backup') ; ?>
1041
+ </span>
1042
+ </li>
1043
+ <li>
1044
+ <img src="<?php echo plugins_url('/template/ok-icon.png', dirname(__FILE__));?>" title="" alt="" />
1045
+ <span class="text">
1046
+ <?php _e('One Year Priority support','dropbox-backup') ; ?>
1047
+ </span>
1048
+ </li>
1049
+ </ul>
1050
+ </div>
1051
+ <div class="inline-right" style="margin-top: 0;">
1052
+ <div class="image-dropbox-pro" onclick="document.dropbox_pro_form.submit();">
1053
+ <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'); ?>">
1054
+ </div>
1055
+ <div style="margin-top:26%; float: left; margin-left: 20px; margin-right: 15px;">
1056
+ <form action="<?php echo WPADM_URL_PRO_VERSION; ?>api/" method="post" id="dropbox_pro_form" name="dropbox_pro_form" >
1057
+ <input type="hidden" value="<?php echo home_url();?>" name="site">
1058
+ <input type="hidden" value="<?php echo 'proBackupPay'?>" name="actApi">
1059
+ <input type="hidden" value="<?php echo get_option('admin_email');?>" name="email">
1060
+ <input type="hidden" value="<?php echo 'dropbox-backup';?>" name="plugin">
1061
+ <input type="hidden" value="<?php echo admin_url("admin.php?page=wpadm_wp_full_backup_dropbox&pay=success"); ?>" name="success_url">
1062
+ <input type="hidden" value="<?php echo admin_url("admin.php?page=wpadm_wp_full_backup_dropbox&pay=cancel"); ?>" name="cancel_url">
1063
+ <input type="submit" class="backup_button" value="<?php _e('Get PRO','dropbox-backup');?>">
1064
+ </form>
1065
+ </div>
1066
+ </div>
1067
+
1068
+ <div class="clear"></div>
1069
  </div>
1070
  <div class="block-content" style="margin-top:2px;">
1071
  <div style="min-height : 215px; padding: 5px; padding-top: 10px;">
1076
  <span style="font-size: 20px;"><?php _e('(files+database)','dropbox-backup');?></span>
1077
 
1078
  <span style="font-size: 11px;">
1079
+ <?php echo (isset($plugin_data[0]['Version']) ? 'Version ' . $plugin_data[0]['Version'] : '')?>
1080
  </span>
1081
 
1082
  </div>
1083
  <?php if ($show) {?>
1084
+ <div id="container-user" class="cfTabsContainer" style="width: 48%; padding-bottom: 0px; padding-top: 0px; float: left; margin-left: 20px;">
1085
+ <div class="stat-wpadm-info-title" id="title-regisr" style="padding :20px 0px; margin-top:11px; line-height: 25px;">
1086
+ <?php _e('Free Sign Up','dropbox-backup'); ?> <br /><?php _e('to backup more than one website...','dropbox-backup'); ?>
 
 
 
 
1087
  </div>
1088
  <div id="cf_activate" class="cfContentContainer" style="display: none;">
1089
+ <form method="post" id="dropbox_form" action="<?php echo admin_url( 'admin-post.php?action=wpadm_activate_plugin' )?>" >
1090
+ <div class="stat-wpadm-registr-info" style="margin-bottom: 40px; margin-top: 17px;">
1091
+ <table class="form-table stat-table-registr" style="">
1092
+ <tbody>
1093
+ <tr valign="top">
1094
+ <th scope="row">
1095
+ <label for="email"><?php _e('E-mail','dropbox-backup'); ?></label>
1096
+ </th>
1097
+ <td>
1098
+ <input id="email" class="" type="text" name="email" value="">
1099
+ </td>
1100
+ </tr>
1101
+ <tr valign="top">
1102
+ <th scope="row">
1103
+ <label for="password"><?php _e('Password','dropbox-backup'); ?></label>
1104
+ </th>
1105
+ <td>
1106
+ <input id="password" class="" type="password" name="password" value="">
1107
+ </td>
1108
+ </tr>
1109
+ <tr valign="top">
1110
+ <th scope="row">
1111
+ <label for="password-confirm"><?php _e('Password confirm','dropbox-backup'); ?></label>
1112
+ </th>
1113
+ <td>
1114
+ <input id="password-confirm" class="" type="password" name="password-confirm" value="">
1115
+ </td>
1116
+ </tr>
1117
+ <tr valign="top">
1118
+ <th scope="row">
1119
+ </th>
1120
+ <td>
1121
+ <input class="button-wpadm" type="submit" value="<?php _e('Register & Activate','dropbox-backup'); ?>" name="send">
1122
+ </td>
1123
+ </tr>
1124
+ </tbody>
1125
+ </table>
1126
+ </div>
1127
+ <div class="stat-wpadm-info" id="registr-info" style="margin-bottom: 2px; margin-top: 30px;">
1128
+ <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'); ?>
1129
+ </div>
1130
+ </form>
 
 
 
 
 
 
1131
  </div>
1132
  <div class="clear"></div>
1133
  <div class="block-button-show" style="color: #fff;">
1134
+ <div class="block-click" onclick="showRegistInfo(true);">
1135
  <span id="registr-show" style="color: #fff;"><?php _e('Show','dropbox-backup'); ?></span>
1136
  <div id="registr-choice-icon" class="dashicons dashicons-arrow-down" style=""></div>
1137
  </div>
1138
  </div>
 
1139
  </div>
1140
  <?php } else { ?>
1141
  <div id="container-user" class="cfTabsContainer" style="width: 48%; padding-bottom: 0px; padding-top: 0px; float: left; margin-left: 20px;">
1143
  <?php _e('Sign In to backup more than one website...','dropbox-backup'); ?>
1144
  </div>
1145
  <div>
1146
+ <form method="post" id="auth" name="auth" action="<?php echo SERVER_URL_INDEX . "login-process" ; ?>">
1147
  <div>
1148
  <div id="message-form" style="color: red; float: left;margin: 10px;margin-top: 14px;"></div>
1149
  </div>
1150
  <div style="padding: 5px; clear: both;">
1151
  <div class="form-field">
1152
+ <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'); ?>" />
1153
  </div>
1154
  <div class="form-field">
1155
  <input class="input-small" type="password" required="required" name="password" placeholder="<?php _e('Password','dropbox-backup'); ?>" />
1169
  </div>
1170
  </div>
1171
  <?php } ?>
1172
+ <div class="cfTabsContainer" style="width: 28%; float: left; margin-left: 10px; padding-bottom: 0px; padding-top: 0px;">
1173
  <div class="stat-wpadm-info-title" id="title-setting" style="padding :20px 0px; margin-top:11px; line-height: 50px;">
1174
  <?php _e('Settings','dropbox-backup'); ?>
1175
  </div>
1176
  <div id="setting_active" class="cfContentContainer" style="display: none;">
1177
+ <form method="post" action="" >
1178
  <div class="stat-wpadm-registr-info" style="width: 100%; margin-bottom: 9px;">
1179
  <div style="margin-bottom: 12px; margin-top: 20px; font-size: 15px; text-align: center;">
1180
  <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">
1181
+ <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>
1182
  </div>
1183
  <?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 ; ?>
1184
  <div class="setting-checkbox">
1192
  <label for="app_key"><?php _e('App key','dropbox-backup'); ?>*</label>
1193
  </th>
1194
  <td>
1195
+ <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'] : ''?>">
1196
  </td>
1197
  </tr>
1198
  <tr valign="top" id="dropbox-app-secret" style="display: <?php echo $show_fields ? 'table-row' : 'none'?>;">
1200
  <label for="app_secret"><?php _e('App secret','dropbox-backup'); ?>*</label>
1201
  </th>
1202
  <td>
1203
+ <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'] : ''?>">
1204
  </td>
1205
  </tr>
1206
 
1212
  </tbody>
1213
  </table>
1214
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1215
  <?php if ( is_super_admin() ) { ?>
1216
  <div class="setting-checkbox">
1217
+ <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')" />
1218
  <label for="is_admin" style="font-size: 13px;"><?php _e('Appear in menu for admins only','dropbox-backup'); ?></label>
1219
  </div>
1220
  <?php } ?>
1221
  <div class="setting-checkbox">
1222
+ <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')" />
1223
  <label for="is_optimization" style="font-size: 13px;"><?php _e('Database Optimization','dropbox-backup'); ?></label>
1224
  </div>
1225
  <div class="setting-checkbox">
1226
+ <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')" />
1227
+ <label for="is_local_backup_delete" style="font-size: 13px;"><?php _e('Don\'t delete a local backup copy after uploading to dropbox','dropbox-backup'); ?></label>
1228
  </div>
1229
  <div class="setting-checkbox">
1230
+ <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')" />
1231
  <label for="is_repair" style="font-size: 13px;"><?php _e('Try database repair','dropbox-backup'); ?></label>
1232
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1233
  </div>
1234
  </form>
1235
  </div>
1246
  <div style="clear: both;"></div>
1247
  <div class="block-content">
1248
  <div class="" style="margin-top:10px;">
1249
+ <div id="logs-form" style="display: none; float:left; width: 70%;">
1250
+ <div class="title-logs"><span style="font-size:16px;"><?php _e('Please wait...','dropbox-backup'); ?> <span id="time_backup">0 <?php _e('sec.','dropbox-backup'); ?></span><img style="float: right;" src="<?php echo plugins_url('/img/wpadmload.gif', dirname(__FILE__))?>" alt=""></span></div>
 
 
 
 
1251
  <div class="title-status" style="font-size:16px; display: none;"></div>
1252
  <div style="border: 1px solid #ddd; text-align: left; background: #fff; padding: 2px;">
1253
  <div id="log-backup" style="overflow: auto; height: 60px; border: 5px solid #fff; "></div>
1260
  <img src="<?php echo plugins_url('/img/stars-5.png', dirname(__FILE__));?>" alt=""></a>
1261
  </div>
1262
  <?php }?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1263
  <div id="support-button" style="float: right; margin-top: 130px; margin-right: 20px;">
1264
+ <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 />
1265
  </div>
1266
  <div id="action-buttons" style="">
1267
  <div style="float: left;">
1270
  <div style="float: left; margin-top: 2px;">
1271
  <button onclick="start_local_backup()" text-button="<?php _e('Create Local Backup','dropbox-backup');?>" class="backup_button disable-button" style="padding: 5px 10px; margin-top: 10px; font-size: 15px;bottom: 0px;"><?php _e('Create Local Backup','dropbox-backup'); ?></button> <br />
1272
  </div>
 
 
 
1273
  <!-- <div style="float: left; margin-top: 2px;margin-left: 20px;">
1274
  <button onclick="InludesSetting();" class="backup_button" style="padding: 5px 10px; margin-top: 10px; font-size: 15px;bottom: 0px;"><?php _e('Folders & files','dropbox-backup'); ?></button> <br />
1275
  </div> -->
1278
  </div>
1279
  <div style="clear: both; margin-bottom: 10px;"></div>
1280
  <div>
1281
+ <form action="<?php echo WPADM_URL_BASE;?>wpsite/recovery-backup" method="post" target="_blank" id="form_auth_backup" name="form_auth_backup">
1282
  </form>
1283
+ <form action="<?php echo WPADM_URL_BASE;?>backup/tasks" method="post" target="_blank" id="form_auth_backup_create" name="form_auth_backup_create">
1284
+ <input type="hidden" name="url_task_create" value="<?php echo get_option('siteurl');?>">
1285
  </form>
1286
  <form action="" method="post" id="form_auth_backup" name="form_auth_backup">
1287
  </form>
1288
  <form action="<?php echo admin_url( 'admin-post.php?action=wpadm_delete_backup' )?>" method="post" id="delete_backups" name="delete_backups">
1289
  <input type="hidden" name="backup-name" id="backup_name" value="" />
1290
  <input type="hidden" name="backup-type" id="backup_type" value="" />
 
 
 
 
 
1291
  </form>
1292
+ <!-- <div id="inludes-setting" class="" style="display: none; position: relative; text-align: center; background: #f1ebeb; border: 2px solid #dde4ff; border-radius: 5px;">
1293
+ <div>
1294
+ <div class="title-description" style="font-size: 20px; text-align: center;padding-top:20px; line-height: 30px;">
1295
+ <?php _e('Include/Exclude of Files & Folders to backup','dropbox-backup'); ?>
1296
+ <div style="font-size: 14px;">
1297
+ <?php _e('Database of web page will be included automatically','dropbox-backup'); ?>
1298
+ </div>
1299
+ </div>
1300
+ <div class="loading-img">
1301
+ <img style="display: none; margin: 0 auto;" src="<?php echo plugins_url('/img/wpadmload.gif', dirname(__FILE__) ); ?>">
1302
+ </div>
1303
+ <div class="button-description">
1304
+ <!-- <input type="radio" value="folder" id="inc-folder" checked="checked"><label for="inc-folder">View folders</label> &nbsp;&nbsp;&nbsp; <input type="radio" value="files" id="inc-files" ><label for="inc-files">View Folders & Files</label>
1305
+ <div class="show-includes">
 
1306
 
1307
+ </div>
1308
+ </div>
1309
+ <div class="clear"></div>
1310
+ <div class="button-description" style="padding:20px 0; width: 100%;">
1311
+ <input type="button" value="<?php _e('OK','dropbox-backup'); ?>" onclick="saveIncludes();" style="text-align: center; width: 100px;" class="button-wpadm">
1312
+ <input type="button" value="<?php _e('Cancel','dropbox-backup'); ?>" onclick="InludesSetting();" style="text-align: center; width: 100px;" class="button-wpadm">
1313
+ </div>
1314
+ </div>
 
1315
 
1316
+ </div> -->
1317
 
1318
  <table class="table" style="margin-top: 5px; display: <?php echo isset($data['md5']) && ($n = count($data['data'])) && is_array($data['data'][0]) ? 'table' : 'none'?>;">
1319
  <thead>
1342
  ?>
1343
  <tr>
1344
  <td class="number-backup"><?php echo ($i + 1);?></td>
1345
+ <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>
1346
+ <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;"' : '')?>>
1347
  <?php
1348
  $e = '';
1349
  if ( isset($is_runnig) && $is_runnig && isset($name_running_backup) && $name_running_backup == $data['data'][$i]['name']) {
1350
  $e = "<strong style=\"color:#ff8104; margin-left:6px;\">". __('Please wait, backup will be created...','dropbox-backup') . "</strong>";
1351
  } elseif ( $data['data'][$i]['size'] != 0 ) {
1352
  if (isset($data['data'][$i]['not_all_upload']) && $data['data'][$i]['not_all_upload'] === false) {
1353
+ $e = "<strong style=\"color:red;\">" . __( 'Not all files were uploaded!', 'dropbox-backup') . "</strong>";
1354
  } else {
1355
  $e = $data['data'][$i]['name'];
1356
  }
1357
  } else {
1358
  $e = "<strong style=\"color:red;\">". __('Not available','dropbox-backup') . "</strong>&nbsp;&nbsp;(<a style=\"text-decoration:underline;\">".__('Why?','dropbox-backup')."</a>)";
1359
  }
1360
+ echo $e;
1361
  ?>
1362
  <script type="text/javascript">
1363
+ backup_name = '<?php echo $data['data'][$i]['name']?>';
1364
  </script>
1365
  </td>
1366
+ <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>
1367
+ <td onclick="shows('<?php echo md5( print_r($data['data'][$i], 1) );?>', this)" class="pointer" style="padding: 0px;">
1368
  <?php if ( isset($is_runnig) && $is_runnig && isset($name_running_backup) && $name_running_backup == $data['data'][$i]['name'] ) { ?>
1369
  <img src="<?php echo plugin_dir_url(__FILE__) . "attention.png" ;?>" title="Attention" alt="Attention" style="float: left; width: 20px; height: 20px;margin-left: 21px;" />
1370
  <div style="margin-top :1px;float: left;"><?php _e('Backup in progress','dropbox-backup');?></div>
1373
  <?php
1374
  if (isset($data['data'][$i]['not_all_upload']) && $data['data'][$i]['not_all_upload'] === false) {
1375
  ?>
1376
+ <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;" />
1377
+ <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>
1378
  <?php
1379
  } else {
1380
  ?>
1388
  <?php
1389
  }?>
1390
  </td>
1391
+ <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>
1392
+ <td onclick="shows('<?php echo md5( print_r($data['data'][$i], 1) );?>', this)" class="pointer"><?php echo $size . __('Mb','dropbox-backup');?></td>
1393
  <td>
1394
  <?php if(is_admin() || is_super_admin()) {?>
1395
  <?php if ($data['data'][$i]['size'] > 0) {
1399
  <?php
1400
  } else {
1401
  ?>
1402
+ <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;
1403
  <?php }
1404
  } ?>
1405
+ <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;
1406
  <?php
1407
  }
1408
  ?>
1409
  </td>
1410
  </tr>
1411
+ <tr id="<?php echo md5( print_r($data['data'][$i], 1) );?>" style="display:none; ">
1412
  <?php if ($data['data'][$i]['size'] != 0) {?>
1413
  <td colspan="2">
1414
  </td>
1423
  <tr style="border: 0;">
1424
  <td style="border: 0;">
1425
  <?php if ($data['data'][$i]['type'] == 'local') {?>
1426
+ <a href="<?php echo content_url(DROPBOX_BACKUP_DIR_NAME) . "/{$data['data'][$i]['name']}/{$files[$j]}"?>">
1427
+ <?php echo $files[$j]; ?>
1428
  </a>
1429
  <?php
1430
  } else {
1431
+ echo $files[$j];
1432
  }
1433
  ?>
1434
  </td>
1449
  ?>
1450
  <td colspan="8">
1451
  <?php _e('Backup is created. If you are sure that the backup down(crashed), please ','dropbox-backup');?>
1452
+ <a href="javascript:void(0)" onclick="window.open('<?php echo SERVER_URL_INDEX . 'support/?pl=dbp'?>')"><?php _e('contact us','dropbox-backup'); ?></a>.
1453
  </td>
1454
  <?php
1455
  } else { ?>
1488
  <label for="ftp-host"><?php _e('FTP Host','dropbox-backup'); ?></label>
1489
  </div>
1490
  <div style="float:left; ">
1491
+ <input type="text" id="ftp-host" value="<?php echo str_ireplace(array('http://', 'https://'), '', home_url()) ;?>" name="ftp_host" >
1492
  </div>
1493
  </div>
1494
  <div class="clear"></div>
1518
  <label for="email-resp"><?php _e('Response Email:','dropbox-backup'); ?></label>
1519
  </div>
1520
  <div style=" ">
1521
+ <input type="text" id="email-resp" value="<?php echo get_option('admin_email');?>" style="padding-left:3px;" name="mail_response">
1522
  </div>
1523
  </div>
1524
  </div>
1525
  <div class="clear"></div>
1526
  <div style="text-align: left; margin-left: 100px; margin-top: 10px;">
1527
+ <input value="<?php echo $time_log; ?>" type="hidden" name="time_pars">
1528
  <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'); ?>">
1529
  </div>
1530
  </form>