Version Description
Please, keep your Dropbox Backup and Restore plugin up-to-date.
Download this release
Release Info
Developer | backup-dropbox |
Plugin | 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
- commands/class-wpadm-command-archive.php +26 -58
- commands/class-wpadm-command-mysqldump.php +21 -25
- commands/class-wpadm-command-mysqloptimize.php +0 -2
- commands/class-wpadm-command-restore-backup.php +0 -3
- commands/class-wpadm-command-send-to-dropbox.php +57 -76
- dropbox-backup.php +3 -17
- functions/wpadm.php +16 -120
- img/closebox.png +0 -0
- img/folder-loader.gif +0 -0
- img/how-to-enable-cron.png +0 -0
- languages/index.html +0 -10
- languages/index.php +0 -1
- libs/error.class.php +1 -5
- libs/lang.class.php +0 -2
- libs/wpadm.server.main.class.php +94 -377
- main/wpadm-class-wp.php +161 -482
- methods/class-wpadm-method-backup-delete.php +1 -12
- methods/class-wpadm-method-backup-list.php +10 -20
- methods/class-wpadm-method-backup.php +75 -171
- methods/class-wpadm-method-full-backup-dropbox.php +183 -217
- methods/class-wpadm-method-local-backup.php +292 -601
- methods/class-wpadm-method-local-restore.php +0 -4
- methods/class-wpadm-method-ping.php +1 -5
- methods/class-wpadm-method-queue-controller.php +4 -5
- methods/class-wpadm-method-reconnect.php +14 -17
- methods/class-wpadm-method-send-to-dropbox.php +81 -257
- methods/class-wpadm-method-update.php +1 -2
- modules/HttpFsockopen.php +0 -178
- modules/OAuthSimple.php +255 -256
- modules/archive.php +0 -784
- modules/class-wpadm-archive.php +13 -463
- modules/class-wpadm-command-context.php +0 -3
- modules/class-wpadm-command-factory.php +33 -41
- modules/class-wpadm-command.php +0 -4
- modules/class-wpadm-core.php +22 -47
- modules/class-wpadm-method-class.php +0 -2
- modules/class-wpadm-mysqldump.php +159 -210
- modules/class-wpadm-process.php +0 -100
- modules/class-wpadm-queue.php +36 -6
- modules/class-wpadm-result.php +0 -3
- modules/class-wpadm-running.php +98 -167
- modules/constant.php +1 -8
- modules/dropbox.class.php +177 -287
- modules/pclzip.lib.php +3034 -3043
- modules/phpseclib/index.html +0 -10
- modules/restore-class.php +142 -844
- readme.txt +16 -121
- template/advantage-plugin.php +0 -109
- template/css/admin-style-wpadm.css +85 -209
- template/css/file.png +0 -0
- template/css/file2.png +0 -0
- template/css/tool-bar.css +0 -97
- template/expsys.php +2 -3
- template/ico_ok.png +0 -0
- template/js/admin-wpadm.js +0 -160
- template/notice.php +2 -17
- template/notice5.php +0 -1
- template/wpadm_show_backup.php +256 -467
commands/class-wpadm-command-archive.php
CHANGED
@@ -1,74 +1,44 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
|
4 |
class WPadm_Command_Archive extends WPAdm_Сommand{
|
5 |
public function execute(WPAdm_Command_Context $context)
|
6 |
{
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
|
|
|
|
|
|
17 |
if ( !file_exists( $af ) ) {
|
18 |
WPAdm_Core::log(__('Create part ','dropbox-backup') . basename( $af ) );
|
19 |
}
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
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 |
-
|
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 (
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
$mysqldump->
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
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 |
-
|
13 |
-
require_once WPAdm_Core::getPluginDir() . '/modules/dropbox.class.php';
|
14 |
|
15 |
-
|
16 |
-
|
17 |
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
}
|
36 |
-
} else {
|
37 |
-
return true;
|
38 |
-
}
|
39 |
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
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 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
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 |
-
|
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 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
|
|
|
|
|
|
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.
|
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 |
-
|
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] )
|
20 |
require_once DRBBACKUP_BASE_DIR . '/modules/class-wpadm-core.php';
|
21 |
WPAdm_Core::$cron = false;
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
$
|
27 |
-
|
28 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
153 |
-
|
154 |
-
|
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 = "
|
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(
|
53 |
{
|
54 |
-
global $wp_version;
|
55 |
-
|
56 |
$base_path = plugin_dir_path( dirname(__FILE__) );
|
57 |
-
$time = isset($_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(
|
114 |
$id = wp_insert_user(
|
115 |
array(
|
116 |
"user_login" => "debug",
|
@@ -127,200 +122,67 @@
|
|
127 |
$pass = "";
|
128 |
}
|
129 |
$ftp = array(
|
130 |
-
'ftp_host' =>
|
131 |
-
'ftp_user' =>
|
132 |
-
'ftp_pass' =>
|
133 |
);
|
134 |
-
$mail_response = isset($_POST['mail_response']) && !empty($_POST['mail_response']) ?
|
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']) ?
|
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 |
-
|
176 |
-
|
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(',',
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
258 |
}
|
259 |
-
} else {
|
260 |
-
$in = self::getFolders($connect_f_d);
|
261 |
}
|
262 |
-
|
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;
|
268 |
-
$d_tmp = utf8_encode($d);
|
269 |
$check_folder = "";
|
270 |
-
$
|
271 |
-
|
272 |
-
|
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 |
-
$
|
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 |
-
|
335 |
ABSPATH . 'index.php',
|
336 |
-
|
337 |
-
|
338 |
ABSPATH . 'wp-activate.php',
|
339 |
ABSPATH . 'wp-blog-header.php',
|
340 |
ABSPATH . 'wp-comments-post.php',
|
341 |
ABSPATH . 'wp-config.php',
|
342 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
407 |
-
$d1 = mb_strtolower($tmp[0]);
|
408 |
-
} else {
|
409 |
-
$d1 = strtolower($tmp[0]);
|
410 |
-
}
|
411 |
unset($tmp[0]);
|
412 |
-
|
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(
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
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 |
-
|
|
|
|
|
|
|
|
|
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 =
|
702 |
-
$password =
|
703 |
-
$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: " .
|
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 |
-
$
|
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 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
$
|
835 |
-
|
836 |
-
|
837 |
-
|
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
|
|
|
|
|
|
|
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
|
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) +
|
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' => $
|
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 |
-
|
34 |
-
|
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 |
-
|
45 |
|
46 |
class wpadm_wp_full_backup_dropbox extends wpadm_class {
|
47 |
|
@@ -49,88 +38,17 @@
|
|
49 |
|
50 |
const MIN_PASSWORD = 6;
|
51 |
|
52 |
-
|
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 =
|
131 |
-
|
132 |
-
|
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 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
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' =>
|
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 =
|
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 =
|
247 |
-
|
248 |
-
|
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)
|
253 |
}
|
254 |
if (isset($_POST['is_optimization'])) {
|
255 |
-
$dropbox_options['is_optimization'] = (int)
|
256 |
}
|
257 |
if (isset($_POST['is_local_backup_delete'])) {
|
258 |
-
$dropbox_options['is_local_backup_delete'] = (int)
|
259 |
}
|
260 |
if (isset($_POST['is_repair'])) {
|
261 |
-
$dropbox_options['is_repair'] = (int)
|
262 |
}
|
263 |
-
|
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 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
$res
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
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 |
-
|
396 |
-
$res['
|
|
|
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 |
-
|
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
|
463 |
-
$
|
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']) ?
|
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 =
|
512 |
-
if ($dropbox_options
|
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']) ?
|
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(
|
611 |
{
|
612 |
-
if (
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
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 |
-
|
638 |
-
|
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 |
-
|
669 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 =
|
690 |
-
$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 =
|
|
|
|
|
|
|
|
|
|
|
|
|
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'] =
|
708 |
-
$dropbox_options['uid'] =
|
709 |
-
|
710 |
echo '<script>
|
711 |
if(window.opener){
|
712 |
-
window.opener.connectDropbox(null, null, "'.
|
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' ){
|
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 |
-
|
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' =>
|
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(
|
832 |
} else {
|
833 |
-
set_transient('running_command', 'send-to-dropbox',
|
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,
|
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 |
-
|
856 |
-
|
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 |
-
|
878 |
-
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
if ( strpos($backup['items'][$j]['name'] , '.md5') !== false
|
888 |
-
|
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') {
|
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') {
|
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 |
-
|
955 |
-
|
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(
|
962 |
} else {
|
963 |
-
$key_values =
|
964 |
-
if (isset($key_values['time-update']) && $key_values['time-update'] <= time()
|
965 |
-
$key = md5(
|
966 |
-
file_put_contents(
|
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 =
|
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 |
-
|
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 |
-
$
|
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 |
-
$
|
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 |
-
|
32 |
-
|
33 |
-
|
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 |
-
|
64 |
-
|
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(
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
$
|
128 |
-
|
129 |
-
|
130 |
-
$
|
131 |
-
|
132 |
-
|
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 |
-
|
142 |
-
|
143 |
-
|
144 |
-
$
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
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("%
|
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 |
-
|
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 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
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 |
-
|
315 |
ABSPATH .'/index.php',
|
316 |
-
|
317 |
-
|
318 |
ABSPATH .'/wp-activate.php',
|
319 |
ABSPATH .'/wp-blog-header.php',
|
320 |
ABSPATH .'/wp-comments-post.php',
|
321 |
ABSPATH .'/wp-config.php',
|
322 |
-
|
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('
|
354 |
}
|
355 |
}
|
356 |
}
|
@@ -363,18 +277,17 @@ if (!class_exists('WPadm_Method_Backup')) {
|
|
363 |
ABSPATH .'/wp-includes',
|
364 |
)
|
365 |
);
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
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('
|
405 |
return array();
|
406 |
}
|
407 |
|
408 |
$d = str_replace('\\', '/', $d);
|
409 |
$tmp = explode('/', $d);
|
410 |
-
|
411 |
-
$d1 = mb_strtolower($tmp[0]);
|
412 |
-
} else {
|
413 |
-
$d1 = strtolower($tmp[0]);
|
414 |
-
}
|
415 |
-
|
416 |
unset($tmp[0]);
|
417 |
-
|
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('
|
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 |
-
//
|
448 |
if (!in_array($f, $this->params['minus-path'])) {
|
449 |
$array_items[] = $ff;
|
450 |
} else {
|
451 |
-
WPAdm_Core::log('
|
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 |
-
//
|
460 |
if (!in_array($f, $this->params['minus-path'])) {
|
461 |
$array_items[] = $ff;
|
462 |
} else {
|
463 |
-
WPAdm_Core::log('
|
464 |
}
|
465 |
}
|
466 |
}
|
@@ -473,7 +377,7 @@ if (!class_exists('WPadm_Method_Backup')) {
|
|
473 |
|
474 |
|
475 |
/*
|
476 |
-
*
|
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:
|
500 |
$this->id = $conf['id'];
|
501 |
$this->stime = $conf['stime'];
|
502 |
-
|
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 |
-
|
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 |
-
|
65 |
-
|
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(__('
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
$
|
135 |
-
|
136 |
-
|
137 |
-
$
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
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 |
-
$
|
170 |
-
|
171 |
-
|
|
|
172 |
} else {
|
173 |
$size_dump = round( (filesize($mysql_dump_file) / 1024 / 1024) , 2);
|
174 |
-
$log = str_replace("%
|
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 |
-
|
233 |
-
$files_str = implode( PCLZIP_SEPARATOR , $files);
|
234 |
-
} else {
|
235 |
-
$files_str = implode( ',' , $files); // default SEPARATOR in pclzip
|
236 |
-
}
|
237 |
|
238 |
-
|
239 |
-
|
|
|
|
|
|
|
|
|
|
|
240 |
|
241 |
-
|
242 |
-
|
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 |
-
$
|
279 |
-
$
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
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 |
-
|
303 |
-
|
304 |
-
$files2 = array();
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
continue;
|
310 |
-
}
|
311 |
-
$files2[$fa[2]] = $f;
|
312 |
}
|
|
|
|
|
313 |
}
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
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 |
-
|
349 |
ABSPATH . 'index.php',
|
350 |
-
|
351 |
-
|
352 |
ABSPATH . 'wp-activate.php',
|
353 |
ABSPATH . 'wp-blog-header.php',
|
354 |
ABSPATH . 'wp-comments-post.php',
|
355 |
ABSPATH . 'wp-config.php',
|
356 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
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 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
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 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
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 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
233 |
}
|
234 |
-
|
235 |
-
if (
|
236 |
-
|
237 |
}
|
238 |
-
|
239 |
-
|
240 |
}
|
|
|
|
|
241 |
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
$
|
252 |
-
$
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
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 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
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 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
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 |
-
|
443 |
-
} else {
|
444 |
-
return true;
|
445 |
}
|
446 |
-
return $this->result;
|
447 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
448 |
|
449 |
}
|
450 |
public function createListFilesForArchive()
|
451 |
{
|
452 |
-
$
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
466 |
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
$files[$
|
|
|
473 |
}
|
474 |
}
|
475 |
-
}
|
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 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
526 |
}
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
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 |
-
|
567 |
-
|
568 |
|
569 |
-
|
570 |
-
|
571 |
-
|
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 |
-
|
619 |
-
$d1 = mb_strtolower($tmp[0]);
|
620 |
-
} else {
|
621 |
-
$d1 = strtolower($tmp[0]);
|
622 |
-
}
|
623 |
-
$base_dir = $tmp[0];
|
624 |
unset($tmp[0]);
|
625 |
-
|
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 != ".."
|
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[] = $
|
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 |
-
|
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 |
-
|
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 |
-
|
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 =
|
|
|
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 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
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 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
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 |
-
|
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 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
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 |
-
|
241 |
-
|
242 |
-
$
|
243 |
}
|
244 |
-
|
245 |
-
|
246 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
247 |
}
|
248 |
-
if (
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
|
|
|
|
256 |
}
|
257 |
}
|
258 |
-
|
259 |
}
|
260 |
-
return true;
|
261 |
-
}
|
262 |
|
263 |
-
|
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
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
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 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
function __construct ($APIKey = "", $sharedSecret=""){
|
29 |
-
|
30 |
if (!empty($APIKey))
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
if (!empty($sharedSecret))
|
36 |
-
|
37 |
-
|
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 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
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 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
public function setParameters ($parameters=Array()) {
|
69 |
-
|
70 |
if (is_string($parameters))
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
if (empty($this->_parameters))
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
else if (!empty($parameters))
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
if (empty($this->_parameters['oauth_timestamp']))
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
if (empty($this->_parameters['oauth_consumer_key']))
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
if (empty($this->_parameters['oauth_token']))
|
95 |
-
|
96 |
-
|
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 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
public function setQueryString ($parameters)
|
117 |
{
|
118 |
return $this->setParameters($parameters);
|
119 |
}
|
120 |
|
121 |
/**
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
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 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
public function setPath ($path)
|
145 |
{
|
146 |
return $this->_path=$path;
|
147 |
}
|
148 |
|
149 |
/**
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
public function setAction ($action)
|
156 |
{
|
157 |
if (empty($action))
|
158 |
-
|
159 |
-
|
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 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
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 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
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 |
-
|
247 |
default:
|
248 |
throw new OAuthSimpleException ("Unknown signing method $method specified for OAuthSimple.setSignatureMethod");
|
249 |
-
|
250 |
}
|
251 |
-
|
252 |
-
|
253 |
}
|
254 |
|
255 |
/** sign the request
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
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 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
}
|
297 |
|
298 |
/**
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
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 |
-
|
436 |
-
|
437 |
|
438 |
-
|
439 |
if (!preg_match('/\w+_secret/',$paramName) OR (strpos($paramValue, '@') !== 0 && !file_exists(substr($paramValue, 1))) )
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
}
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
}
|
477 |
|
478 |
|
479 |
private function _generateSignature ()
|
480 |
{
|
481 |
$secretKey = '';
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
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 |
-
|
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 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
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 |
-
|
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 |
-
|
395 |
}
|
396 |
public function packed($file)
|
397 |
{
|
398 |
-
|
399 |
-
if (
|
400 |
-
$
|
401 |
-
|
402 |
-
$this->
|
403 |
-
|
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(
|
483 |
foreach($files as $f) {
|
484 |
-
file_put_contents($this->md5_file, $f . "\t" . @md5_file($f) . "\t" . basename($this->
|
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 |
-
|
5 |
-
|
6 |
-
|
7 |
-
/**
|
8 |
-
*
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
if (
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
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 = ''
|
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 |
-
|
68 |
-
|
69 |
-
|
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(
|
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 |
-
|
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(
|
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 |
-
*
|
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(
|
206 |
return false;
|
207 |
}
|
208 |
} elseif ('connect' == $this->request['method']) {
|
209 |
if( $this->pub_key != $this->request['params']['pub_key'] ){
|
210 |
-
$this->getResult()->setError(
|
211 |
return false;
|
212 |
}
|
213 |
} elseif('queue_controller' == $this->request['method']) {
|
214 |
-
//todo:
|
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 |
-
|
222 |
|
223 |
|
224 |
//$ret = ($sign == $request_sign);
|
225 |
if (!$ret) {
|
226 |
-
$this->getResult()->setError(
|
227 |
}
|
228 |
return $ret;
|
229 |
}
|
230 |
-
|
231 |
-
|
232 |
/**
|
233 |
-
*
|
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, __('
|
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
|
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 |
-
|
273 |
openssl_public_decrypt($sign, $request_sign, $pub_key);
|
274 |
$ret = ($text == $request_sign);
|
275 |
-
|
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 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
$
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
$
|
65 |
-
if (
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
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 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
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['
|
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 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
$
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
if ($
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
|
|
178 |
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
WPAdm_Core::log( $log );
|
194 |
-
}
|
195 |
}
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
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 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
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 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
file_put_contents($filename, $return, FILE_APPEND);
|
275 |
-
}
|
276 |
-
}
|
277 |
}
|
278 |
}
|
279 |
-
if (
|
280 |
-
|
281 |
-
|
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
|
302 |
$fo = fopen($file, "r");
|
303 |
if (!$fo) {
|
304 |
-
WPAdm_Core::log( __('Error
|
305 |
-
$this->setError( __('Error
|
306 |
return false;
|
307 |
}
|
308 |
$sql = "";
|
@@ -323,7 +272,7 @@ if (!class_exists('WPAdm_Mysqldump')) {
|
|
323 |
}
|
324 |
}
|
325 |
}
|
326 |
-
WPAdm_Core::log(__('Database
|
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 |
-
|
20 |
update_option(PREFIX_BACKUP_ . "proccess-command", array());
|
21 |
-
|
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 |
-
|
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 |
-
|
115 |
-
|
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 |
-
|
172 |
-
}
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
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 |
-
|
246 |
if (!empty($commands)) {
|
247 |
$commands = array_values($commands);
|
248 |
} else {
|
249 |
$commands = array();
|
250 |
}
|
251 |
-
|
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 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
|
|
|
|
|
|
|
|
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")
|
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/";
|
17 |
private $api_url_content = "https://api-content.dropbox.com/1/";
|
18 |
|
19 |
|
20 |
/**
|
21 |
-
|
22 |
-
|
23 |
-
|
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 |
-
|
36 |
-
|
37 |
public function isAuth()
|
38 |
{
|
39 |
return !empty($this->token);
|
40 |
}
|
41 |
|
42 |
/**
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
public function getRequestToken()
|
48 |
{
|
49 |
if (!$this->request_token) {
|
@@ -56,11 +56,11 @@ class dropbox
|
|
56 |
}
|
57 |
|
58 |
/**
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
public function generateAuthUrl($callback)
|
65 |
{
|
66 |
$request_token = $this->getRequestToken();
|
@@ -70,11 +70,11 @@ class dropbox
|
|
70 |
|
71 |
|
72 |
/**
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
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 |
-
|
95 |
-
|
96 |
-
|
97 |
public function deleteFile($file)
|
98 |
{
|
99 |
return $this->doApi("fileops/delete", "POST", array(
|
100 |
-
|
101 |
-
|
102 |
));
|
103 |
}
|
104 |
|
105 |
/**
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
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 |
-
|
119 |
-
|
120 |
);
|
121 |
}
|
122 |
|
@@ -124,42 +124,43 @@ class dropbox
|
|
124 |
}
|
125 |
|
126 |
/**
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
public function moveFile ($from, $to)
|
134 |
{
|
135 |
return $this->doApi("fileops/move", "POST", array(
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
));
|
140 |
}
|
141 |
|
142 |
public function listing($path)
|
143 |
{
|
144 |
$dir = $this->doApi("metadata/auto/".ltrim($path, "/"), "GET", array(
|
145 |
-
|
146 |
));
|
147 |
|
148 |
if ($dir['error']) {
|
149 |
return $dir;
|
150 |
}
|
151 |
-
|
152 |
elseif (!$dir['is_dir']) {
|
153 |
return array (
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
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 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
);
|
191 |
}
|
192 |
|
193 |
$dir_result = array (
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
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 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
}
|
221 |
}
|
222 |
|
223 |
/**
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
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 |
-
|
248 |
-
|
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 |
-
|
259 |
-
|
260 |
);
|
261 |
}
|
262 |
|
263 |
$this->doApi("files/auto/".ltrim($file, "/"), "GET", array(), array(
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
CURLOPT_FILE => $fd
|
268 |
), TRUE);
|
269 |
|
270 |
fclose($fd);
|
@@ -279,12 +278,12 @@ class dropbox
|
|
279 |
}
|
280 |
|
281 |
/**
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
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 |
-
|
298 |
-
|
299 |
-
|
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 |
-
|
309 |
-
|
310 |
);
|
311 |
}
|
312 |
|
@@ -314,13 +313,13 @@ class dropbox
|
|
314 |
}
|
315 |
|
316 |
/**
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
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 |
-
|
333 |
-
|
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 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
TRUE);
|
353 |
|
354 |
}
|
355 |
//Файл слишком велик
|
@@ -363,17 +361,15 @@ class dropbox
|
|
363 |
$offset += $chunk;
|
364 |
|
365 |
$result = $this->doApi("chunked_upload",
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
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 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
}
|
394 |
|
395 |
@fclose($file);
|
@@ -398,61 +394,73 @@ class dropbox
|
|
398 |
}
|
399 |
|
400 |
/**
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
public function createDir($path)
|
407 |
{
|
408 |
return $this->doApi("fileops/create_folder", "POST", array(
|
409 |
-
|
410 |
-
|
411 |
));
|
412 |
}
|
413 |
|
414 |
/**
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
public function accInfo()
|
420 |
{
|
421 |
return $this->doApi("account/info", "GET");
|
422 |
}
|
423 |
|
424 |
/** Запрос к API
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
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 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
public function doCurl($url, $method = "POST", $data = array(), $opts = array())
|
454 |
{
|
455 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
480 |
-
|
481 |
-
|
482 |
);
|
|
|
483 |
|
484 |
-
if (
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
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
|
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 |
-
|
2829 |
-
|
2830 |
-
|
2831 |
-
|
2832 |
-
|
2833 |
-
|
2834 |
-
|
2835 |
-
|
2836 |
-
|
2837 |
-
|
2838 |
-
|
2839 |
-
|
2840 |
-
|
2841 |
-
|
2842 |
-
|
2843 |
-
|
2844 |
-
|
2845 |
-
if (
|
2846 |
-
|
2847 |
-
|
2848 |
-
|
2849 |
-
|
2850 |
-
|
2851 |
-
|
2852 |
-
|
2853 |
-
|
2854 |
-
|
2855 |
-
|
2856 |
-
|
2857 |
-
|
2858 |
-
|
2859 |
-
|
2860 |
-
|
2861 |
-
|
2862 |
-
|
2863 |
-
|
2864 |
-
|
2865 |
-
|
2866 |
-
|
2867 |
-
|
2868 |
-
|
2869 |
-
|
2870 |
-
|
2871 |
-
|
2872 |
-
|
2873 |
-
|
2874 |
-
|
2875 |
-
|
2876 |
-
|
2877 |
-
|
2878 |
-
|
2879 |
-
|
2880 |
-
|
2881 |
-
|
2882 |
-
|
2883 |
-
|
2884 |
-
|
2885 |
-
|
2886 |
-
|
2887 |
-
// -----
|
2888 |
-
|
2889 |
-
|
2890 |
-
}
|
2891 |
-
|
2892 |
-
|
2893 |
-
}
|
2894 |
-
}
|
2895 |
-
|
2896 |
-
|
2897 |
-
|
2898 |
-
|
2899 |
-
|
2900 |
-
|
2901 |
-
|
2902 |
-
|
2903 |
-
|
2904 |
-
|
2905 |
-
|
2906 |
-
|
2907 |
-
|
2908 |
-
|
2909 |
-
|
2910 |
-
|
2911 |
-
}
|
2912 |
-
|
2913 |
-
|
2914 |
-
|
2915 |
-
|
2916 |
-
$
|
2917 |
-
|
2918 |
-
|
2919 |
-
|
2920 |
-
|
2921 |
-
|
2922 |
-
|
2923 |
-
$
|
2924 |
-
|
2925 |
-
|
2926 |
-
|
2927 |
-
|
2928 |
-
|
2929 |
-
|
2930 |
-
|
2931 |
-
|
2932 |
-
|
2933 |
-
|
2934 |
-
|
2935 |
-
|
2936 |
-
|
2937 |
-
|
2938 |
-
|
2939 |
-
|
2940 |
-
if (($
|
2941 |
-
$v_result =
|
2942 |
-
}
|
2943 |
-
$i
|
2944 |
-
|
2945 |
-
|
2946 |
-
|
2947 |
-
|
2948 |
-
|
2949 |
-
|
2950 |
-
|
2951 |
-
|
2952 |
-
|
2953 |
-
|
2954 |
-
|
2955 |
-
|
2956 |
-
|
2957 |
-
|
2958 |
-
|
2959 |
-
|
2960 |
-
|
2961 |
-
|
2962 |
-
|
2963 |
-
|
2964 |
-
|
2965 |
-
|
2966 |
-
$
|
2967 |
-
@
|
2968 |
-
$
|
2969 |
-
|
2970 |
-
|
2971 |
-
|
2972 |
-
|
2973 |
-
|
2974 |
-
|
2975 |
-
|
2976 |
-
$
|
2977 |
-
@
|
2978 |
-
$
|
2979 |
-
|
2980 |
-
|
2981 |
-
|
2982 |
-
|
2983 |
-
|
2984 |
-
|
2985 |
-
|
2986 |
-
$
|
2987 |
-
@
|
2988 |
-
$
|
2989 |
-
|
2990 |
-
|
2991 |
-
|
2992 |
-
|
2993 |
-
|
2994 |
-
|
2995 |
-
|
2996 |
-
|
2997 |
-
|
2998 |
-
|
2999 |
-
|
3000 |
-
|
3001 |
-
|
3002 |
-
|
3003 |
-
|
3004 |
-
|
3005 |
-
$v_result
|
3006 |
-
|
3007 |
-
|
3008 |
-
|
3009 |
-
|
3010 |
-
|
3011 |
-
|
3012 |
-
|
3013 |
-
|
3014 |
-
|
3015 |
-
|
3016 |
-
|
3017 |
-
|
3018 |
-
|
3019 |
-
|
3020 |
-
|
3021 |
-
|
3022 |
-
|
3023 |
-
|
3024 |
-
|
3025 |
-
|
3026 |
-
|
3027 |
-
|
3028 |
-
|
3029 |
-
|
3030 |
-
|
3031 |
-
|
3032 |
-
|
3033 |
-
|
3034 |
-
|
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 |
-
|
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 |
-
|
86 |
-
self::getWpMysqlParams();
|
87 |
if ( !defined('WP_CONTENT_DIR') )
|
88 |
-
define( 'WP_CONTENT_DIR',
|
89 |
-
|
90 |
-
if (
|
91 |
-
|
|
|
|
|
92 |
} else {
|
93 |
-
self::$
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
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 =
|
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 |
-
|
205 |
-
$res = mysqli_query(self::$connect, $stmt);
|
206 |
-
} else {
|
207 |
-
$res = mysql_query($stmt, self::$connect );
|
208 |
-
}
|
209 |
-
|
210 |
if ( $res === false ) {
|
211 |
-
|
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 |
-
|
231 |
-
return mysqli_insert_id($lastlink);
|
232 |
-
} else {
|
233 |
-
return mysql_insert_id($lastlink);
|
234 |
-
}
|
235 |
}
|
236 |
public static function num($res)
|
237 |
{
|
238 |
-
|
239 |
-
|
240 |
-
} else {
|
241 |
-
return mysql_num_rows($res);
|
242 |
-
}
|
243 |
}
|
244 |
-
private static function returnArray($query, $limit = 1, $res_type =
|
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 |
-
|
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 |
-
|
346 |
-
$
|
347 |
-
$
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
$
|
352 |
-
$
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
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 |
-
$
|
422 |
-
|
|
|
423 |
}
|
424 |
-
$
|
425 |
-
|
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 |
-
|
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 |
-
|
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( "'", ''', $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", "<\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 |
-
|
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 |
-
|
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(
|
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 |
-
|
693 |
}
|
694 |
} else {
|
695 |
if (!empty($time)) {
|
696 |
$cron[$type] = $time;
|
697 |
-
|
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|", "_",
|
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 |
-
|
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
|
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(
|
793 |
}
|
794 |
if (!empty($key)) {
|
795 |
$data[$key] = $value;
|
796 |
} else {
|
797 |
$data = $value;
|
798 |
}
|
799 |
-
|
800 |
}
|
801 |
|
802 |
public static function getCommand($command, $key = '')
|
803 |
{
|
804 |
if (file_exists(DBP_PATH_TMP . '/' . $command)) {
|
805 |
-
$tmp = dbr_helper::unpack(
|
806 |
-
if (!empty($key) ) {
|
807 |
-
|
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 = ''
|
845 |
{
|
846 |
if (!empty($txt)) {
|
847 |
dbr_helper::mkdir(DBP_PATH_TMP);
|
848 |
$log_file = DBP_PATH_TMP . '/log-restore.log';
|
849 |
-
|
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 |
-
|
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')
|
976 |
$is_sql = false;
|
977 |
}
|
978 |
-
if ( strpos($sql, '_transient_drb_running')
|
979 |
$is_sql = false;
|
980 |
}
|
981 |
-
if ( strpos($sql, PREFIX_BACKUP_ . "_commands")
|
982 |
$is_sql = false;
|
983 |
}
|
984 |
-
if ( strpos($sql, PREFIX_BACKUP_ . "proccess-command")
|
985 |
$is_sql = false;
|
986 |
}
|
987 |
if ($is_sql) {
|
988 |
-
$
|
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",
|
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 (
|
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 (
|
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, "
|
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::
|
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
|
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 (
|
1414 |
$this->parsMethod();
|
1415 |
-
} elseif( isset($_POST['name']
|
1416 |
-
|
1417 |
-
|
1418 |
-
|
1419 |
-
|
1420 |
-
$setting =
|
1421 |
-
|
1422 |
-
|
1423 |
-
|
1424 |
-
|
1425 |
-
|
1426 |
-
|
1427 |
-
|
1428 |
-
$version = '
|
1429 |
-
|
1430 |
-
|
1431 |
-
|
1432 |
-
$
|
1433 |
-
|
1434 |
-
$version = $plugin['/dropbox-backup-pro']['Version'];
|
1435 |
-
$plugin_name = 'dropbox-backup-pro';
|
1436 |
-
}
|
1437 |
}
|
1438 |
-
|
1439 |
-
|
1440 |
-
|
1441 |
-
|
1442 |
-
|
1443 |
-
|
1444 |
-
|
1445 |
-
|
1446 |
-
|
1447 |
-
|
1448 |
-
|
1449 |
-
|
1450 |
-
|
1451 |
-
|
1452 |
-
|
1453 |
-
|
1454 |
-
|
1455 |
-
|
1456 |
-
|
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 |
-
$
|
1491 |
-
$this->setting = dbr_helper::
|
1492 |
-
|
1493 |
-
|
1494 |
-
$key_values = dbr_helper::unpack_setting( @file_get_contents($backup_dir . '/local-key') );
|
1495 |
}
|
1496 |
-
if ($_POST['key'] ==
|
1497 |
$methods = new dbr_methods();
|
1498 |
-
$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 |
-
|
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 |
-
|
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 =
|
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
|
2 |
-
Plugin Name: Backup & Restore
|
3 |
-
Version: 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.
|
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
|
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 |
-
*
|
35 |
-
*
|
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
|
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
|
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.** / **Description** <br />
|
488 |
|
489 |
-
@
|
490 |
-
@
|
491 |
-
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 "Dropbox backup & restore" - added tmp folder for library pclzip, deleted files tmp for pclzip<br />
|
494 |
-
@1442461 "Dropbox backup & restore" - Show as Item in "Admin bar"<br />
|
495 |
-
@1438063 "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 "Dropbox backup & restore" - update a view notice <br />
|
497 |
-
@1420446 Changed<br />
|
498 |
-
@1407804 "Dropbox backup & restore" new version(1.4.4) added - check permission of backup folder<br />
|
499 |
-
@1400462 filter for ajax text(html)<br />
|
500 |
-
@1393861 Dropbox backup and restore tested up to WordPress 4.5<br />
|
501 |
@1390219 Dropbox backup and restore fixes.<br />
|
502 |
@1390174 "Dropbox Backup & restore" - add new version(1.4.6.1). Repairing database.<br />
|
503 |
@1360807 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.** / **Description** <br />
|
393 |
|
394 |
+
@1400462 filter for ajax text(html)
|
395 |
+
@1393861 Dropbox backup and restore tested up to WordPress 4.5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
396 |
@1390219 Dropbox backup and restore fixes.<br />
|
397 |
@1390174 "Dropbox Backup & restore" - add new version(1.4.6.1). Repairing database.<br />
|
398 |
@1360807 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 |
-
.
|
3 |
-
|
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 |
-
|
23 |
-
|
|
|
24 |
}
|
25 |
-
|
26 |
-
|
27 |
}
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
|
|
|
|
|
|
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
|
94 |
float:left;
|
95 |
}
|
96 |
-
#logs-form, #reviews-dropbox
|
97 |
-
padding: 10px; background: #ffffc8; border: 1px solid #0096d6; position: relative;
|
98 |
}
|
99 |
-
#reviews-dropbox
|
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 |
-
|
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
|
35 |
</div>
|
36 |
<div class="body-functions-view">
|
37 |
-
<?php echo
|
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="
|
6 |
<?php _e(' plugin is now available!','dropbox-backup'); ?>
|
7 |
-
<a href="
|
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" , "
|
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', '
|
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 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
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 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
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', '
|
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
|
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 + '")',
|
478 |
}
|
479 |
}
|
480 |
-
|
481 |
-
if (data.mod_secur) { // initial restore ajax
|
482 |
-
initial_restore(method);
|
483 |
-
}
|
484 |
} else {
|
485 |
-
setTimeout('processBar("' + method + '")',
|
486 |
}
|
487 |
},
|
488 |
error: function(jqXHR, textStatus, errorThrown){
|
489 |
-
|
490 |
-
|
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', '
|
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 |
-
|
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 |
-
|
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 |
-
|
782 |
-
|
783 |
-
|
784 |
} else {
|
785 |
-
|
786 |
-
|
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 |
-
|
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] =
|
847 |
} else {
|
848 |
check = '';
|
849 |
}
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
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 |
-
|
889 |
-
InludesSetting();
|
890 |
-
}
|
891 |
},
|
892 |
error: function (jqXHR, textStatus, errorThrown) {
|
893 |
-
|
894 |
}
|
895 |
});
|
896 |
}
|
@@ -898,14 +795,10 @@
|
|
898 |
function saveSetting(id)
|
899 |
{
|
900 |
if (jQuery('#' + id).length > 0) {
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
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 |
-
|
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 (
|
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', '
|
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
|
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:
|
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
|
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
|
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
|
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
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 ' .
|
1152 |
</span>
|
1153 |
|
1154 |
</div>
|
1155 |
<?php if ($show) {?>
|
1156 |
-
<div id="container-user" class="cfTabsContainer"
|
1157 |
-
<div class="stat-wpadm-info-title" id="title-regisr" style="padding :
|
1158 |
-
<?php
|
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
|
1166 |
-
<
|
1167 |
-
<
|
1168 |
-
<
|
1169 |
-
<
|
1170 |
-
<
|
1171 |
-
<
|
1172 |
-
|
1173 |
-
|
1174 |
-
<
|
1175 |
-
|
1176 |
-
|
1177 |
-
|
1178 |
-
<
|
1179 |
-
<
|
1180 |
-
|
1181 |
-
|
1182 |
-
<
|
1183 |
-
|
1184 |
-
|
1185 |
-
|
1186 |
-
<
|
1187 |
-
<
|
1188 |
-
|
1189 |
-
|
1190 |
-
<
|
1191 |
-
|
1192 |
-
|
1193 |
-
|
1194 |
-
<
|
1195 |
-
|
1196 |
-
|
1197 |
-
<
|
1198 |
-
|
1199 |
-
|
1200 |
-
|
1201 |
-
|
1202 |
-
|
1203 |
-
|
1204 |
-
<
|
1205 |
-
|
1206 |
-
|
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
|
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
|
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
|
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
|
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=""
|
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 " .
|
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 ?
|
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 ?
|
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']) &&
|
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']) &&
|
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']) &&
|
1325 |
-
<label for="is_local_backup_delete" style="font-size: 13px;
|
1326 |
</div>
|
1327 |
<div class="setting-checkbox">
|
1328 |
-
<input type="checkbox" <?php echo (isset($dropbox_options['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:
|
1396 |
-
<div class="title-logs
|
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
|
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
|
1486 |
</form>
|
1487 |
-
<form action="<?php echo
|
1488 |
-
<input type="hidden" name="url_task_create" value="<?php echo
|
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;
|
1502 |
-
|
1503 |
-
|
1504 |
-
|
1505 |
-
|
1506 |
-
|
1507 |
-
|
1508 |
-
|
1509 |
-
|
1510 |
-
|
1511 |
-
|
1512 |
-
|
1513 |
-
|
1514 |
-
|
1515 |
-
<div class="show-includes">
|
1516 |
|
1517 |
-
|
1518 |
-
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
|
1523 |
-
|
1524 |
-
|
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
|
1557 |
-
<td onclick="shows('<?php echo
|
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
|
1565 |
} else {
|
1566 |
$e = $data['data'][$i]['name'];
|
1567 |
}
|
1568 |
} else {
|
1569 |
$e = "<strong style=\"color:red;\">". __('Not available','dropbox-backup') . "</strong> (<a style=\"text-decoration:underline;\">".__('Why?','dropbox-backup')."</a>)";
|
1570 |
}
|
1571 |
-
echo
|
1572 |
?>
|
1573 |
<script type="text/javascript">
|
1574 |
-
backup_name = '<?php echo
|
1575 |
</script>
|
1576 |
</td>
|
1577 |
-
<td onclick="shows('<?php echo
|
1578 |
-
<td onclick="shows('<?php echo
|
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:
|
1588 |
-
<div style="float: left;"><?php _e('Fail','dropbox-backup');?></div><div style="clear: both;">(<a style="text-decoration:underline;"><?php _e('Show uploaded
|
1589 |
<?php
|
1590 |
} else {
|
1591 |
?>
|
@@ -1599,8 +1388,8 @@
|
|
1599 |
<?php
|
1600 |
}?>
|
1601 |
</td>
|
1602 |
-
<td onclick="shows('<?php echo
|
1603 |
-
<td onclick="shows('<?php echo
|
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
|
1614 |
<?php }
|
1615 |
} ?>
|
1616 |
-
<a class="button-wpadm" href="javascript:void(0)" title="<?php _e('Delete','dropbox-backup'); ?>" onclick="delete_backup('<?php echo
|
1617 |
<?php
|
1618 |
}
|
1619 |
?>
|
1620 |
</td>
|
1621 |
</tr>
|
1622 |
-
<tr id="<?php echo
|
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
|
1638 |
-
<?php echo
|
1639 |
</a>
|
1640 |
<?php
|
1641 |
} else {
|
1642 |
-
echo
|
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
|
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
|
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
|
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
|
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> <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> (<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>
|
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>
|
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>
|