Version Description
- Admin side improvement
- Bug fixed related to restore
- Schedule backup improvement
Download this release
Release Info
Developer | BackupGuard |
Plugin | ![]() |
Version | 1.2.5 |
Comparing to | |
See all releases |
Code changes from version 1.2.0 to 1.2.5
- BackupGuard.php +27 -2
- README.txt +29 -3
- backup.php +3 -2
- com/config/config.php +6 -0
- com/core/SGBoot.php +27 -0
- com/core/backup/SGBackup.php +24 -5
- com/core/backup/SGBackupDatabase.php +4 -2
- com/core/functions.php +37 -5
- com/core/notice/SGNoticeHandler.php +7 -1
- com/core/schedule/SGScheduleAdapterWordpress.php +1 -1
- com/lib/Request/SGRequestAdapterWordpress.php +22 -19
- com/lib/SGAuthClient.php +3 -0
- com/lib/SGReviewManager.php +387 -0
- public/ajax/checkPHPVersionCompatibility.php +1 -0
- public/ajax/deleteBackup.php +1 -0
- public/ajax/downloadBackup.php +1 -0
- public/ajax/modalImport.php +13 -15
- public/ajax/modalManualBackup.php +3 -3
- public/ajax/modalManualRestore.php +5 -3
- public/ajax/reviewBannerActions.php +32 -0
- public/ajax/settings.php +7 -0
- public/backups.php +15 -6
- public/cloud.php +1 -1
- public/css/bgstyle.less.css +182 -66
- public/css/bootstrap-switch.min.css +1 -1
- public/css/deactivationSurvey.css +6 -0
- public/css/popupTheme.css +3333 -0
- public/css/styles.css +68 -16
- public/img/FAQ.png +0 -0
- public/img/TW.png +0 -0
- public/img/banerLogo.png +0 -0
- public/img/contact-us.png +0 -0
- public/img/discount.png +0 -0
- public/img/fb.png +0 -0
- public/img/full-demo.png +0 -0
- public/img/logo-horizontal.png +0 -0
- public/img/notice-section-bg.png +0 -0
- public/img/reviewBannerLogo.png +0 -0
- public/img/section-1-bg.png +0 -0
- public/img/sgBackupVerticalLogo.png +0 -0
- public/img/sglogo.png +0 -0
- public/img/user-manual.png +0 -0
- public/img/youtube.png +0 -0
- public/include/functions.php +1 -1
- public/include/sidebar.php +6 -1
- public/include/uninstallSurveyPopup.php +1 -1
- public/js/deactivationSurvey.js +1 -0
- public/js/jquery.rateyo.js +1 -1
- public/js/main.js +2 -1
- public/js/popup.js +1518 -0
- public/js/sgbackup.js +4 -0
- public/js/sgschedule.js +7 -0
- public/js/sgsettings.js +1 -1
- public/restore_wordpress.php +10 -3
- public/schedule.php +1 -1
- public/settings.php +15 -4
- public/templates/notices/banner.php +1 -3
- public/templates/notices/timeout_free_error.php +13 -0
BackupGuard.php
CHANGED
@@ -82,7 +82,7 @@ else {
|
|
82 |
|
83 |
function backup_guard_admin_menu()
|
84 |
{
|
85 |
-
add_menu_page('Backups', 'BackupGuard', 'manage_options', 'backup_guard_backups', 'backup_guard_backups_page', 'data:image/svg+xml;base64,
|
86 |
|
87 |
add_submenu_page('backup_guard_backups', _backupGuardT('Backups', true), _backupGuardT('Backups', true), 'manage_options', 'backup_guard_backups', 'backup_guard_backups_page');
|
88 |
add_submenu_page('backup_guard_backups', _backupGuardT('Cloud', true), _backupGuardT('Cloud', true), 'manage_options', 'backup_guard_cloud', 'backup_guard_cloud_page');
|
@@ -293,6 +293,8 @@ function enqueue_backup_guard_scripts($hook)
|
|
293 |
wp_enqueue_script('backup-guard-rateyo-js', plugin_dir_url(__FILE__).'public/js/jquery.rateyo.js');
|
294 |
|
295 |
wp_enqueue_script('backup-guard-main-js', plugin_dir_url(__FILE__).'public/js/main.js', array('jquery'), '1.0.0', true);
|
|
|
|
|
296 |
|
297 |
// Localize the script with new data
|
298 |
wp_localize_script('backup-guard-main-js', 'BG_MAIN_STRINGS', array(
|
@@ -432,9 +434,25 @@ function backup_guard_register_ajax_callbacks()
|
|
432 |
add_action('wp_ajax_backup_guard_setUserInfoVerificationPopupState', 'backup_guard_set_user_info_verification_popup_state');
|
433 |
add_action('wp_ajax_backup_guard_storeSubscriberInfo', 'backup_guard_store_subscriber_info');
|
434 |
add_action('wp_ajax_backup_guard_storeSurveyResult', 'backup_guard_store_survey_result');
|
|
|
|
|
435 |
}
|
436 |
}
|
437 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
438 |
function backup_guard_store_survey_result()
|
439 |
{
|
440 |
check_ajax_referer('backupGuardAjaxNonce', 'token');
|
@@ -494,7 +512,6 @@ function backup_guard_awake()
|
|
494 |
|
495 |
function backup_guard_awake_nopriv()
|
496 |
{
|
497 |
-
check_ajax_referer('backupGuardAjaxNonce', 'token');
|
498 |
$token = @$_GET['token'];
|
499 |
$method = @$_GET['method'];
|
500 |
|
@@ -945,4 +962,12 @@ function backup_guard_discount_notice()
|
|
945 |
}
|
946 |
</style>
|
947 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
948 |
}
|
82 |
|
83 |
function backup_guard_admin_menu()
|
84 |
{
|
85 |
+
add_menu_page('Backups', 'BackupGuard', 'manage_options', 'backup_guard_backups', 'backup_guard_backups_page', 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MzAuMzQgNjYzLjAzIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPkFydGJvYXJkIDI8L3RpdGxlPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTUzMC4xMSwxODUuNzljLTcxLjktOC44Mi0xMzcuNzMtNDAtMTkwLTg2LjU3djkyLjY1YTI4MC41OSwyODAuNTksMCwwLDAsMTE2LjUyLDUyYy05LjE0LDg5LjQzLTUyLDE2OS41NS0xMTYuNTIsMjI4Ljg3djkwLjRDNDU5Ljg0LDQ3Ny4xMyw1MzAuNiwzMzMuNDIsNTMwLjExLDE4NS43OVoiLz48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik0xNzQuMjksMjQ0YTI4MC40NiwyODAuNDYsMCwwLDAsMTE1Ljc3LTUxLjExVjEwMGMtNTIuNDQsNDYuMjgtMTE3LjYyLDc3LTE4OS44Myw4NS4xNUM5OS41NCwzMzMsMTcwLjIyLDQ3Ni44MiwyOTAuMDYsNTYzVjQ3Mi4wOUMyMjYsNDEyLjg2LDE4My40MiwzMzMuMDYsMTc0LjI5LDI0NFoiLz48L3N2Zz4=', 74);
|
86 |
|
87 |
add_submenu_page('backup_guard_backups', _backupGuardT('Backups', true), _backupGuardT('Backups', true), 'manage_options', 'backup_guard_backups', 'backup_guard_backups_page');
|
88 |
add_submenu_page('backup_guard_backups', _backupGuardT('Cloud', true), _backupGuardT('Cloud', true), 'manage_options', 'backup_guard_cloud', 'backup_guard_cloud_page');
|
293 |
wp_enqueue_script('backup-guard-rateyo-js', plugin_dir_url(__FILE__).'public/js/jquery.rateyo.js');
|
294 |
|
295 |
wp_enqueue_script('backup-guard-main-js', plugin_dir_url(__FILE__).'public/js/main.js', array('jquery'), '1.0.0', true);
|
296 |
+
wp_enqueue_script('backup-popup.js', plugin_dir_url(__FILE__).'public/js/popup.js', array('jquery'), '1.0.0', true);
|
297 |
+
wp_enqueue_style('popupTheme.css', plugin_dir_url(__FILE__).'public/css/popupTheme.css');
|
298 |
|
299 |
// Localize the script with new data
|
300 |
wp_localize_script('backup-guard-main-js', 'BG_MAIN_STRINGS', array(
|
434 |
add_action('wp_ajax_backup_guard_setUserInfoVerificationPopupState', 'backup_guard_set_user_info_verification_popup_state');
|
435 |
add_action('wp_ajax_backup_guard_storeSubscriberInfo', 'backup_guard_store_subscriber_info');
|
436 |
add_action('wp_ajax_backup_guard_storeSurveyResult', 'backup_guard_store_survey_result');
|
437 |
+
add_action('wp_ajax_backup_guard_reviewDontShow', 'backup_guard_review_dont_show');
|
438 |
+
add_action('wp_ajax_backup_guard_review_later', 'backup_guard_review_later');
|
439 |
}
|
440 |
}
|
441 |
|
442 |
+
function backup_guard_review_dont_show()
|
443 |
+
{
|
444 |
+
check_ajax_referer('backupGuardAjaxNonce', 'token');
|
445 |
+
SGConfig::set('closeReviewBanner', 1);
|
446 |
+
wp_die();
|
447 |
+
}
|
448 |
+
|
449 |
+
function backup_guard_review_later()
|
450 |
+
{
|
451 |
+
check_ajax_referer('backupGuardAjaxNonce', 'token');
|
452 |
+
require_once(SG_PUBLIC_AJAX_PATH.'reviewBannerActions.php');
|
453 |
+
wp_die();
|
454 |
+
}
|
455 |
+
|
456 |
function backup_guard_store_survey_result()
|
457 |
{
|
458 |
check_ajax_referer('backupGuardAjaxNonce', 'token');
|
512 |
|
513 |
function backup_guard_awake_nopriv()
|
514 |
{
|
|
|
515 |
$token = @$_GET['token'];
|
516 |
$method = @$_GET['method'];
|
517 |
|
962 |
}
|
963 |
</style>
|
964 |
<?php
|
965 |
+
}
|
966 |
+
|
967 |
+
add_action('admin_notices', 'backup_guard_review_banner');
|
968 |
+
function backup_guard_review_banner()
|
969 |
+
{
|
970 |
+
require_once(SG_LIB_PATH.'SGReviewManager.php');
|
971 |
+
$reviewManager = new SGReviewManager();
|
972 |
+
$reviewManager->renderContent();
|
973 |
}
|
README.txt
CHANGED
@@ -5,8 +5,8 @@ Author: Backup Guard
|
|
5 |
Donate link: https://backup-guard.com/products/backup-wordpress
|
6 |
Tags: backup, wordpress backup plugin, backup plugin, database backup, migrate, back up
|
7 |
Requires at least: 3.8
|
8 |
-
Tested up to: 5.
|
9 |
-
Stable tag: 1.2.
|
10 |
License: GPLv2 or later
|
11 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
12 |
|
@@ -157,6 +157,32 @@ When you are facing an issue of any kind with any of our products, the first thi
|
|
157 |
6. Site backup customization
|
158 |
|
159 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
160 |
= 1.2.0 =
|
161 |
* Security improvements
|
162 |
* Amazon S3 bug fixed
|
@@ -531,4 +557,4 @@ When you are facing an issue of any kind with any of our products, the first thi
|
|
531 |
* Minor backup related bug fixes
|
532 |
|
533 |
= 1.0 =
|
534 |
-
* Initial backup plugin was commit
|
5 |
Donate link: https://backup-guard.com/products/backup-wordpress
|
6 |
Tags: backup, wordpress backup plugin, backup plugin, database backup, migrate, back up
|
7 |
Requires at least: 3.8
|
8 |
+
Tested up to: 5.4
|
9 |
+
Stable tag: 1.2.5
|
10 |
License: GPLv2 or later
|
11 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
12 |
|
157 |
6. Site backup customization
|
158 |
|
159 |
== Changelog ==
|
160 |
+
= 1.2.5 =
|
161 |
+
* Admin side improvement
|
162 |
+
* Bug fixed related to restore
|
163 |
+
* Schedule backup improvement
|
164 |
+
|
165 |
+
= 1.2.4 =
|
166 |
+
* Bug fixed related to restore
|
167 |
+
* Bug fixed related to plugin deactivation
|
168 |
+
* Login issue fixed
|
169 |
+
|
170 |
+
= 1.2.3 =
|
171 |
+
* Backup import modal improvement
|
172 |
+
* Schedule improvement
|
173 |
+
* Delete backup improvement
|
174 |
+
* Bug fixes
|
175 |
+
|
176 |
+
= 1.2.2 =
|
177 |
+
* Admin side redesign
|
178 |
+
* Download via PHP settings
|
179 |
+
* Bug fixes
|
180 |
+
|
181 |
+
= 1.2.1 =
|
182 |
+
* Schedule bug fixed
|
183 |
+
* Settings save bug fixed
|
184 |
+
* Bug fixed related to CSS design conflict.
|
185 |
+
|
186 |
= 1.2.0 =
|
187 |
* Security improvements
|
188 |
* Amazon S3 bug fixed
|
557 |
* Minor backup related bug fixes
|
558 |
|
559 |
= 1.0 =
|
560 |
+
* Initial backup plugin was commit
|
backup.php
CHANGED
@@ -1,9 +1,10 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Plugin Name: Backup
|
4 |
* Plugin URI: https://backup-guard.com/products/backup-wordpress
|
5 |
* Description: Backup Guard is the most complete site backup and restore plugin. We offer the easiest way to backup, restore or migrate your site. You can backup your files, database or both.
|
6 |
-
* Version: 1.2.
|
7 |
* Author: BackupGuard
|
8 |
* Author URI: https://backup-guard.com/products/backup-wordpress
|
9 |
* License: GPL-2.0+
|
@@ -15,7 +16,7 @@ if (function_exists('activate_backup_guard')) {
|
|
15 |
}
|
16 |
|
17 |
if (!defined('SG_BACKUP_GUARD_VERSION')) {
|
18 |
-
define('SG_BACKUP_GUARD_VERSION', '1.2.
|
19 |
}
|
20 |
|
21 |
if (!defined('SG_BACKUP_GUARD_MAIN_FILE')) {
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Plugin Name: Backup
|
5 |
* Plugin URI: https://backup-guard.com/products/backup-wordpress
|
6 |
* Description: Backup Guard is the most complete site backup and restore plugin. We offer the easiest way to backup, restore or migrate your site. You can backup your files, database or both.
|
7 |
+
* Version: 1.2.5
|
8 |
* Author: BackupGuard
|
9 |
* Author URI: https://backup-guard.com/products/backup-wordpress
|
10 |
* License: GPL-2.0+
|
16 |
}
|
17 |
|
18 |
if (!defined('SG_BACKUP_GUARD_VERSION')) {
|
19 |
+
define('SG_BACKUP_GUARD_VERSION', '1.2.5');
|
20 |
}
|
21 |
|
22 |
if (!defined('SG_BACKUP_GUARD_MAIN_FILE')) {
|
com/config/config.php
CHANGED
@@ -161,6 +161,10 @@ define('SG_BACKUP_DOWNLOAD_TYPE_SGBP', 1);
|
|
161 |
define('SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG', 2);
|
162 |
define('SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG', 3);
|
163 |
|
|
|
|
|
|
|
|
|
164 |
//The following constants can be modified at run-time
|
165 |
define('SG_ACTION_BACKUP_FILES_AVAILABLE', 1);
|
166 |
define('SG_ACTION_BACKUP_DATABASE_AVAILABLE', 1);
|
@@ -177,6 +181,8 @@ define('SG_SSH_KEY_FILE_FOLDER_NAME', 'sshKeyFolder/');
|
|
177 |
define('SG_MIGRATION_SERVICE_URL', 'https://backup-guard.com/services/migrate-wordpress');
|
178 |
define('BACKUP_GUARD_PRIVACY_POLICY_URL', "https://backup-guard.com/privacy");
|
179 |
define('BACKUP_GUARD_TERMS_OF_SERVICE_URL', 'https://backup-guard.com/terms');
|
|
|
|
|
180 |
|
181 |
define('SG_RESTORE_MODE_FULL', 'full');
|
182 |
define('SG_RESTORE_MODE_FILES', 'files');
|
161 |
define('SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG', 2);
|
162 |
define('SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG', 3);
|
163 |
|
164 |
+
define('SG_BACKUP_REVIEW_BACKUP_COUNT', 3);
|
165 |
+
define('SG_BACKUP_REVIEW_RESTORE_COUNT', 1);
|
166 |
+
define('SG_BACKUP_REVIEW_PERIOD', 30);
|
167 |
+
|
168 |
//The following constants can be modified at run-time
|
169 |
define('SG_ACTION_BACKUP_FILES_AVAILABLE', 1);
|
170 |
define('SG_ACTION_BACKUP_DATABASE_AVAILABLE', 1);
|
181 |
define('SG_MIGRATION_SERVICE_URL', 'https://backup-guard.com/services/migrate-wordpress');
|
182 |
define('BACKUP_GUARD_PRIVACY_POLICY_URL', "https://backup-guard.com/privacy");
|
183 |
define('BACKUP_GUARD_TERMS_OF_SERVICE_URL', 'https://backup-guard.com/terms');
|
184 |
+
define('BACKUP_GUARD_WORDPRESS_SUPPORT_URL', 'https://wordpress.org/support/plugin/backup/');
|
185 |
+
define('BACKUP_GUARD_WORDPRESS_REVIEW_URL', 'https://wordpress.org/support/plugin/backup/reviews/?filter=5');
|
186 |
|
187 |
define('SG_RESTORE_MODE_FULL', 'full');
|
188 |
define('SG_RESTORE_MODE_FILES', 'files');
|
com/core/SGBoot.php
CHANGED
@@ -173,12 +173,39 @@ class SGBoot
|
|
173 |
if (!self::installActionTable($sgdb)) {
|
174 |
throw new SGExceptionDatabaseError('Could not install action table');
|
175 |
}
|
|
|
|
|
176 |
}
|
177 |
catch (SGException $exception) {
|
178 |
die($exception);
|
179 |
}
|
180 |
}
|
181 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
private static function cleanupSchedules()
|
183 |
{
|
184 |
$schedules = SGBackupSchedule::getAllSchedules();
|
173 |
if (!self::installActionTable($sgdb)) {
|
174 |
throw new SGExceptionDatabaseError('Could not install action table');
|
175 |
}
|
176 |
+
|
177 |
+
self::installReviewSettings();
|
178 |
}
|
179 |
catch (SGException $exception) {
|
180 |
die($exception);
|
181 |
}
|
182 |
}
|
183 |
|
184 |
+
private static function installReviewSettings()
|
185 |
+
{
|
186 |
+
$usageDays = SGConfig::get('usageDays');
|
187 |
+
if (!$usageDays) {
|
188 |
+
SGConfig::set('usageDays', 0);
|
189 |
+
|
190 |
+
$timeDate = new \DateTime('now');
|
191 |
+
$installTime = strtotime($timeDate->format('Y-m-d H:i:s'));
|
192 |
+
SGConfig::set('installDate', $installTime);
|
193 |
+
$timeDate->modify('+'.SG_BACKUP_REVIEW_PERIOD.' day');
|
194 |
+
|
195 |
+
$timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
|
196 |
+
SGConfig::set('openNextTime', $timeNow);
|
197 |
+
}
|
198 |
+
$backupCountReview = SGConfig::get('backupReviewCount');
|
199 |
+
if (!$backupCountReview) {
|
200 |
+
SGConfig::set('backupReviewCount', SG_BACKUP_REVIEW_BACKUP_COUNT);
|
201 |
+
}
|
202 |
+
|
203 |
+
$restoreReviewCount = SGConfig::get('restoreReviewCount');
|
204 |
+
if (!$restoreReviewCount) {
|
205 |
+
SGConfig::set('restoreReviewCount', SG_BACKUP_REVIEW_RESTORE_COUNT);
|
206 |
+
}
|
207 |
+
}
|
208 |
+
|
209 |
private static function cleanupSchedules()
|
210 |
{
|
211 |
$schedules = SGBackupSchedule::getAllSchedules();
|
com/core/backup/SGBackup.php
CHANGED
@@ -518,6 +518,7 @@ class SGBackup implements SGIBackupDelegate
|
|
518 |
@unlink(SG_BACKUP_DIRECTORY.SG_STATE_FILE_NAME);
|
519 |
@unlink(SG_BACKUP_DIRECTORY.SG_RELOADER_STATE_FILE_NAME);
|
520 |
@unlink(SG_PING_FILE_PATH);
|
|
|
521 |
}
|
522 |
|
523 |
private function cleanUp()
|
@@ -531,7 +532,7 @@ class SGBackup implements SGIBackupDelegate
|
|
531 |
private function getBackupFileName()
|
532 |
{
|
533 |
if (SGConfig::get("SG_CUSTOM_BACKUP_NAME")) {
|
534 |
-
return SGConfig::get("SG_CUSTOM_BACKUP_NAME");
|
535 |
}
|
536 |
|
537 |
$sgBackupPrefix = SG_BACKUP_FILE_NAME_DEFAULT_PREFIX;
|
@@ -553,7 +554,7 @@ class SGBackup implements SGIBackupDelegate
|
|
553 |
}
|
554 |
|
555 |
//create backup folder
|
556 |
-
if (!@mkdir($backupPath))
|
557 |
{
|
558 |
throw new SGExceptionMethodNotAllowed('Cannot create folder: '.$backupPath);
|
559 |
}
|
@@ -731,6 +732,7 @@ class SGBackup implements SGIBackupDelegate
|
|
731 |
if($restoreFiles != NULL) {
|
732 |
$this->restoreFiles = $restoreFiles;
|
733 |
}
|
|
|
734 |
$this->prepareForRestore($backupName);
|
735 |
|
736 |
if ($this->state && ($this->state->getAction() == SG_STATE_ACTION_RESTORING_DATABASE || $this->state->getAction() == SG_STATE_ACTION_MIGRATING_DATABASE)) {
|
@@ -1358,20 +1360,37 @@ class SGBackup implements SGIBackupDelegate
|
|
1358 |
public static function download($filename, $type)
|
1359 |
{
|
1360 |
$backupDirectory = SG_BACKUP_DIRECTORY.$filename.'/';
|
|
|
|
|
1361 |
|
1362 |
switch ($type)
|
1363 |
{
|
1364 |
case SG_BACKUP_DOWNLOAD_TYPE_SGBP:
|
1365 |
$filename .= '.sgbp';
|
1366 |
-
|
|
|
|
|
|
|
|
|
|
|
1367 |
break;
|
1368 |
case SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG:
|
1369 |
$filename .= '_backup.log';
|
1370 |
-
|
|
|
|
|
|
|
|
|
|
|
1371 |
break;
|
1372 |
case SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG:
|
1373 |
$filename .= '_restore.log';
|
1374 |
-
|
|
|
|
|
|
|
|
|
|
|
1375 |
break;
|
1376 |
}
|
1377 |
|
518 |
@unlink(SG_BACKUP_DIRECTORY.SG_STATE_FILE_NAME);
|
519 |
@unlink(SG_BACKUP_DIRECTORY.SG_RELOADER_STATE_FILE_NAME);
|
520 |
@unlink(SG_PING_FILE_PATH);
|
521 |
+
SGConfig::set("SG_CUSTOM_BACKUP_NAME", '');
|
522 |
}
|
523 |
|
524 |
private function cleanUp()
|
532 |
private function getBackupFileName()
|
533 |
{
|
534 |
if (SGConfig::get("SG_CUSTOM_BACKUP_NAME")) {
|
535 |
+
return backupGuardRemoveSlashes(SGConfig::get("SG_CUSTOM_BACKUP_NAME"));
|
536 |
}
|
537 |
|
538 |
$sgBackupPrefix = SG_BACKUP_FILE_NAME_DEFAULT_PREFIX;
|
554 |
}
|
555 |
|
556 |
//create backup folder
|
557 |
+
if (!file_exists($backupPath) && !@mkdir($backupPath))
|
558 |
{
|
559 |
throw new SGExceptionMethodNotAllowed('Cannot create folder: '.$backupPath);
|
560 |
}
|
732 |
if($restoreFiles != NULL) {
|
733 |
$this->restoreFiles = $restoreFiles;
|
734 |
}
|
735 |
+
$backupName = backupGuardRemoveSlashes($backupName);
|
736 |
$this->prepareForRestore($backupName);
|
737 |
|
738 |
if ($this->state && ($this->state->getAction() == SG_STATE_ACTION_RESTORING_DATABASE || $this->state->getAction() == SG_STATE_ACTION_MIGRATING_DATABASE)) {
|
1360 |
public static function download($filename, $type)
|
1361 |
{
|
1362 |
$backupDirectory = SG_BACKUP_DIRECTORY.$filename.'/';
|
1363 |
+
$backupName = $filename;
|
1364 |
+
$downloadViaPhp = SGConfig::get('SG_DOWNLOAD_VIA_PHP');
|
1365 |
|
1366 |
switch ($type)
|
1367 |
{
|
1368 |
case SG_BACKUP_DOWNLOAD_TYPE_SGBP:
|
1369 |
$filename .= '.sgbp';
|
1370 |
+
if ($downloadViaPhp) {
|
1371 |
+
backupGuardDownloadViaPhp($backupName, $filename);
|
1372 |
+
}
|
1373 |
+
else {
|
1374 |
+
backupGuardDownloadFileSymlink($backupDirectory, $filename);
|
1375 |
+
}
|
1376 |
break;
|
1377 |
case SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG:
|
1378 |
$filename .= '_backup.log';
|
1379 |
+
if ($downloadViaPhp) {
|
1380 |
+
backupGuardDownloadViaPhp($backupName, $filename);
|
1381 |
+
}
|
1382 |
+
else {
|
1383 |
+
backupGuardDownloadFile($backupDirectory.$filename, 'text/plain');
|
1384 |
+
}
|
1385 |
break;
|
1386 |
case SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG:
|
1387 |
$filename .= '_restore.log';
|
1388 |
+
if ($downloadViaPhp) {
|
1389 |
+
backupGuardDownloadViaPhp($backupName, $filename);
|
1390 |
+
}
|
1391 |
+
else {
|
1392 |
+
backupGuardDownloadFile($backupDirectory.$filename, 'text/plain');
|
1393 |
+
}
|
1394 |
break;
|
1395 |
}
|
1396 |
|
com/core/backup/SGBackupDatabase.php
CHANGED
@@ -331,7 +331,7 @@ class SGBackupDatabase implements SGIMysqldumpDelegate
|
|
331 |
|
332 |
private function replaceInvalidCharacters($str)
|
333 |
{
|
334 |
-
return preg_replace('/\x00/', '', $str);;
|
335 |
}
|
336 |
|
337 |
private function getDatabaseHeaders()
|
@@ -363,6 +363,8 @@ class SGBackupDatabase implements SGIMysqldumpDelegate
|
|
363 |
$this->currentRowCount = $sgDBState->getProgressCursor();
|
364 |
$this->nextProgressUpdate = $sgDBState->getProgress();
|
365 |
$this->warningsFound = $sgDBState->getWarningsFound();
|
|
|
|
|
366 |
}
|
367 |
|
368 |
while (($row = @fgets($fileHandle)) !== false) {
|
@@ -379,7 +381,7 @@ class SGBackupDatabase implements SGIMysqldumpDelegate
|
|
379 |
}
|
380 |
|
381 |
if ($trimmedRow && substr($trimmedRow, -9) == "/*SGEnd*/") {
|
382 |
-
$queries = explode("/*SGEnd*/".PHP_EOL, $
|
383 |
foreach ($queries as $query) {
|
384 |
if (!$query) {
|
385 |
continue;
|
331 |
|
332 |
private function replaceInvalidCharacters($str)
|
333 |
{
|
334 |
+
return $str;//preg_replace('/\x00/', '', $str);;
|
335 |
}
|
336 |
|
337 |
private function getDatabaseHeaders()
|
363 |
$this->currentRowCount = $sgDBState->getProgressCursor();
|
364 |
$this->nextProgressUpdate = $sgDBState->getProgress();
|
365 |
$this->warningsFound = $sgDBState->getWarningsFound();
|
366 |
+
|
367 |
+
$importQuery = $this->getDatabaseHeaders();
|
368 |
}
|
369 |
|
370 |
while (($row = @fgets($fileHandle)) !== false) {
|
381 |
}
|
382 |
|
383 |
if ($trimmedRow && substr($trimmedRow, -9) == "/*SGEnd*/") {
|
384 |
+
$queries = explode("/*SGEnd*/".PHP_EOL, $importQuery);
|
385 |
foreach ($queries as $query) {
|
386 |
if (!$query) {
|
387 |
continue;
|
com/core/functions.php
CHANGED
@@ -455,9 +455,30 @@ function backupGuardDownloadFile($file, $type = 'application/octet-stream')
|
|
455 |
exit;
|
456 |
}
|
457 |
|
458 |
-
function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
459 |
{
|
460 |
-
$safedir = backupGuardRemoveSlashes($safedir);
|
461 |
$filename = backupGuardRemoveSlashes($filename);
|
462 |
|
463 |
$downloaddir = SG_SYMLINK_PATH;
|
@@ -472,8 +493,8 @@ function backupGuardDownloadFileSymlink($safedir, $filename)
|
|
472 |
$string = '';
|
473 |
|
474 |
for ($i = 1; $i <= rand(4,12); $i++) {
|
475 |
-
|
476 |
-
|
477 |
}
|
478 |
|
479 |
$handle = opendir($downloaddir);
|
@@ -489,8 +510,19 @@ function backupGuardDownloadFileSymlink($safedir, $filename)
|
|
489 |
}
|
490 |
|
491 |
closedir($handle);
|
492 |
-
|
493 |
mkdir($downloaddir . $string, 0777);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
494 |
$res = @symlink($safedir . $filename, $downloaddir . $string . "/" . $filename);
|
495 |
if ($res) {
|
496 |
header('Content-Description: File Transfer');
|
455 |
exit;
|
456 |
}
|
457 |
|
458 |
+
function backupGuardDownloadViaPhp($backupName, $fileName)
|
459 |
+
{
|
460 |
+
$str = backupGuardMakeSymlinkFolder($fileName);
|
461 |
+
@copy(SG_BACKUP_DIRECTORY.$backupName.'/'.$fileName, SG_SYMLINK_PATH.$str.'/'.$fileName);
|
462 |
+
|
463 |
+
if (file_exists(SG_SYMLINK_PATH.$str.'/'.$fileName)) {
|
464 |
+
$remoteGet = wp_remote_get(SG_SYMLINK_URL.$str.'/'.$fileName);
|
465 |
+
if (!is_wp_error($remoteGet)) {
|
466 |
+
$content = wp_remote_retrieve_body($remoteGet);
|
467 |
+
header('Pragma: public');
|
468 |
+
header('Expires: 0');
|
469 |
+
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
470 |
+
header('Cache-Control: private', false);
|
471 |
+
header('Content-Type: application/octet-stream');
|
472 |
+
header('Content-Disposition: attachment; filename='.$fileName.';');
|
473 |
+
header('Content-Transfer-Encoding: binary');
|
474 |
+
echo $content;
|
475 |
+
exit;
|
476 |
+
}
|
477 |
+
}
|
478 |
+
}
|
479 |
+
|
480 |
+
function backupGuardMakeSymlinkFolder($filename)
|
481 |
{
|
|
|
482 |
$filename = backupGuardRemoveSlashes($filename);
|
483 |
|
484 |
$downloaddir = SG_SYMLINK_PATH;
|
493 |
$string = '';
|
494 |
|
495 |
for ($i = 1; $i <= rand(4,12); $i++) {
|
496 |
+
$q = rand(1,24);
|
497 |
+
$string = $string.$letters[$q];
|
498 |
}
|
499 |
|
500 |
$handle = opendir($downloaddir);
|
510 |
}
|
511 |
|
512 |
closedir($handle);
|
|
|
513 |
mkdir($downloaddir . $string, 0777);
|
514 |
+
|
515 |
+
return $string;
|
516 |
+
}
|
517 |
+
|
518 |
+
function backupGuardDownloadFileSymlink($safedir, $filename)
|
519 |
+
{
|
520 |
+
$downloaddir = SG_SYMLINK_PATH;
|
521 |
+
$downloadURL = SG_SYMLINK_URL;
|
522 |
+
|
523 |
+
$safedir = backupGuardRemoveSlashes($safedir);
|
524 |
+
$string = backupGuardMakeSymlinkFolder($filename);
|
525 |
+
|
526 |
$res = @symlink($safedir . $filename, $downloaddir . $string . "/" . $filename);
|
527 |
if ($res) {
|
528 |
header('Content-Description: File Transfer');
|
com/core/notice/SGNoticeHandler.php
CHANGED
@@ -12,8 +12,14 @@ class SGNoticeHandler
|
|
12 |
|
13 |
private function checkTimeoutError()
|
14 |
{
|
|
|
15 |
if (SGConfig::get('SG_EXCEPTION_TIMEOUT_ERROR')) {
|
16 |
-
|
|
|
|
|
|
|
|
|
|
|
17 |
}
|
18 |
}
|
19 |
|
12 |
|
13 |
private function checkTimeoutError()
|
14 |
{
|
15 |
+
$pluginCapabilities = backupGuardGetCapabilities();
|
16 |
if (SGConfig::get('SG_EXCEPTION_TIMEOUT_ERROR')) {
|
17 |
+
if ($pluginCapabilities != BACKUP_GUARD_CAPABILITIES_FREE) {
|
18 |
+
SGNotice::getInstance()->addNoticeFromTemplate('timeout_error', SG_NOTICE_ERROR, true);
|
19 |
+
}
|
20 |
+
else {
|
21 |
+
SGNotice::getInstance()->addNoticeFromTemplate('timeout_free_error', SG_NOTICE_ERROR, true);
|
22 |
+
}
|
23 |
}
|
24 |
}
|
25 |
|
com/core/schedule/SGScheduleAdapterWordpress.php
CHANGED
@@ -119,6 +119,6 @@ class SGScheduleAdapterWordpress implements SGIScheduleAdapter
|
|
119 |
|
120 |
public static function isCronAvailable()
|
121 |
{
|
122 |
-
return defined('DISABLE_WP_CRON')
|
123 |
}
|
124 |
}
|
119 |
|
120 |
public static function isCronAvailable()
|
121 |
{
|
122 |
+
return defined('DISABLE_WP_CRON')?!DISABLE_WP_CRON:true;
|
123 |
}
|
124 |
}
|
com/lib/Request/SGRequestAdapterWordpress.php
CHANGED
@@ -49,6 +49,21 @@ class SGRequestAdapterWordpress implements SGIRequestAdapter
|
|
49 |
$this->params = $params;
|
50 |
}
|
51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
public function sendPostRequest()
|
53 |
{
|
54 |
$body = null;
|
@@ -58,12 +73,8 @@ class SGRequestAdapterWordpress implements SGIRequestAdapter
|
|
58 |
$body = $this->params;
|
59 |
}
|
60 |
|
61 |
-
$args =
|
62 |
-
|
63 |
-
'sslverify' => false,
|
64 |
-
'body' => $body,
|
65 |
-
'stream' => $this->stream
|
66 |
-
);
|
67 |
|
68 |
$response = wp_remote_post($this->url, $args);
|
69 |
if ($this->stream && !($response instanceof WP_Error)) {
|
@@ -91,11 +102,7 @@ class SGRequestAdapterWordpress implements SGIRequestAdapter
|
|
91 |
|
92 |
public function sendGetRequest()
|
93 |
{
|
94 |
-
$args =
|
95 |
-
'headers' => $this->headers,
|
96 |
-
'sslverify' => false,
|
97 |
-
'stream' => $this->stream
|
98 |
-
);
|
99 |
|
100 |
if (count($this->params)) {
|
101 |
$this->url = rtrim($this->url, '/').'/';
|
@@ -141,14 +148,10 @@ class SGRequestAdapterWordpress implements SGIRequestAdapter
|
|
141 |
$body = $this->params;
|
142 |
}
|
143 |
|
144 |
-
$args =
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
'body' => $body,
|
149 |
-
'stream' => $this->stream
|
150 |
-
);
|
151 |
-
|
152 |
$response = wp_remote_request($this->url, $args);
|
153 |
if ($this->stream && !($response instanceof WP_Error)) {
|
154 |
$this->body = file_get_contents($response['filename']);
|
49 |
$this->params = $params;
|
50 |
}
|
51 |
|
52 |
+
public function getRequestArgs()
|
53 |
+
{
|
54 |
+
$args = array(
|
55 |
+
'headers' => $this->headers,
|
56 |
+
'sslverify' => false,
|
57 |
+
'stream' => $this->stream
|
58 |
+
);
|
59 |
+
|
60 |
+
if (!function_exists("curl_init")) {
|
61 |
+
$args['sslverify'] = true;
|
62 |
+
}
|
63 |
+
|
64 |
+
return $args;
|
65 |
+
}
|
66 |
+
|
67 |
public function sendPostRequest()
|
68 |
{
|
69 |
$body = null;
|
73 |
$body = $this->params;
|
74 |
}
|
75 |
|
76 |
+
$args = $this->getRequestArgs();
|
77 |
+
$args['body'] = $body;
|
|
|
|
|
|
|
|
|
78 |
|
79 |
$response = wp_remote_post($this->url, $args);
|
80 |
if ($this->stream && !($response instanceof WP_Error)) {
|
102 |
|
103 |
public function sendGetRequest()
|
104 |
{
|
105 |
+
$args = $this->getRequestArgs();
|
|
|
|
|
|
|
|
|
106 |
|
107 |
if (count($this->params)) {
|
108 |
$this->url = rtrim($this->url, '/').'/';
|
148 |
$body = $this->params;
|
149 |
}
|
150 |
|
151 |
+
$args = $this->getRequestArgs();
|
152 |
+
$args['body'] = $body;
|
153 |
+
$args['method'] = $type;
|
154 |
+
|
|
|
|
|
|
|
|
|
155 |
$response = wp_remote_request($this->url, $args);
|
156 |
if ($this->stream && !($response instanceof WP_Error)) {
|
157 |
$this->body = file_get_contents($response['filename']);
|
com/lib/SGAuthClient.php
CHANGED
@@ -109,6 +109,9 @@ class SGAuthClient
|
|
109 |
|
110 |
public function isAnyLicenseAvailable($products)
|
111 |
{
|
|
|
|
|
|
|
112 |
foreach ($products as $product) {
|
113 |
if (!$product['licenses']) {
|
114 |
return true;
|
109 |
|
110 |
public function isAnyLicenseAvailable($products)
|
111 |
{
|
112 |
+
if (empty($products) || $products == -1) {
|
113 |
+
return false;
|
114 |
+
}
|
115 |
foreach ($products as $product) {
|
116 |
if (!$product['licenses']) {
|
117 |
return true;
|
com/lib/SGReviewManager.php
ADDED
@@ -0,0 +1,387 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SGReviewManager
|
4 |
+
{
|
5 |
+
public function renderContent()
|
6 |
+
{
|
7 |
+
$dontShowAgain = SGConfig::get('closeReviewBanner');
|
8 |
+
if ($dontShowAgain) {
|
9 |
+
return '';
|
10 |
+
}
|
11 |
+
// review with backup Count
|
12 |
+
$allowReviewCount = $this->isAllowToShowReviewByCount();
|
13 |
+
if ($allowReviewCount) {
|
14 |
+
// show review
|
15 |
+
$key = 'backupCount';
|
16 |
+
$backupCountReview = $this->getBackupCounts();
|
17 |
+
$customContent = 'Yay! We see that you have made '.$backupCountReview.' backups.';
|
18 |
+
echo $this->reviewContentMessage($customContent, $key);
|
19 |
+
return '';
|
20 |
+
}
|
21 |
+
// review after successfully restore
|
22 |
+
$isSuccessFullRestore = $this->isSuccessFullRestore();
|
23 |
+
if ($isSuccessFullRestore) {
|
24 |
+
// after successfully restore
|
25 |
+
$key = 'restoreCount';
|
26 |
+
$restoreReviewCount = $this->getBackupRestoreCounts();
|
27 |
+
$customContent = 'Yay! Congrats, you have restored your website for the '.$restoreReviewCount.' st time!';
|
28 |
+
echo $this->reviewContentMessage($customContent, $key);
|
29 |
+
return '';
|
30 |
+
}
|
31 |
+
|
32 |
+
// review after X days
|
33 |
+
$isAllowDaysReview = $this->isAllowDaysReview();
|
34 |
+
if ($isAllowDaysReview) {
|
35 |
+
$key = 'dayCount';
|
36 |
+
$usageDays = $this->getBackupUsageDays();
|
37 |
+
$customContent = 'Yay! You are a part of the BG team for over '.$usageDays.' days now! Hope you enjoy our service!';
|
38 |
+
echo $this->reviewContentMessage($customContent, $key);
|
39 |
+
return '';
|
40 |
+
}
|
41 |
+
|
42 |
+
return '';
|
43 |
+
}
|
44 |
+
|
45 |
+
public static function getBackupUsageDays()
|
46 |
+
{
|
47 |
+
$installDate = SGConfig::get('installDate');
|
48 |
+
|
49 |
+
$timeDate = new \DateTime('now');
|
50 |
+
$timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
|
51 |
+
$diff = $timeNow-$installDate;
|
52 |
+
$days = floor($diff/(60*60*24));
|
53 |
+
|
54 |
+
return $days;
|
55 |
+
}
|
56 |
+
|
57 |
+
public function reviewContentMessage($customContent, $type)
|
58 |
+
{
|
59 |
+
ob_start();
|
60 |
+
?>
|
61 |
+
<style>
|
62 |
+
.sg-backup-buttons-wrapper .press{
|
63 |
+
box-sizing:border-box;
|
64 |
+
cursor:pointer;
|
65 |
+
display:inline-block;
|
66 |
+
margin:0;
|
67 |
+
padding:0.5em 0.75em;
|
68 |
+
text-decoration:none;
|
69 |
+
transition:background 0.15s linear
|
70 |
+
width: 148px;
|
71 |
+
height: 50px;
|
72 |
+
}
|
73 |
+
.sg-backup-buttons-wrapper .press-grey {
|
74 |
+
border:2px solid #FFFFFF;
|
75 |
+
color: #FFF;
|
76 |
+
}
|
77 |
+
.sg-backup-buttons-wrapper .press-lightblue {
|
78 |
+
background-color:#ffffff;
|
79 |
+
border:2px solid #FFFFFF;
|
80 |
+
color: rgba(0,29,182,1);
|
81 |
+
margin: 0 20px;
|
82 |
+
}
|
83 |
+
.sg-backup-buttons-wrapper .press-lightblue:hover {
|
84 |
+
background-color: rgba(0, 0, 0, 0);
|
85 |
+
color: #FFFFFF;
|
86 |
+
}
|
87 |
+
.sg-backup-buttons-wrapper {
|
88 |
+
text-align: center;
|
89 |
+
}
|
90 |
+
.sg-backup-review-wrapper {
|
91 |
+
position: relative;
|
92 |
+
text-align: center;
|
93 |
+
background-color: #001DB6;
|
94 |
+
height: 185px;
|
95 |
+
box-sizing: border-box;
|
96 |
+
background-image: url(<?php echo SG_IMAGE_URL.'reviewBg.png' ?>);
|
97 |
+
margin-top: 45px;
|
98 |
+
margin-right: 20px;
|
99 |
+
}
|
100 |
+
.sgpb-popup-dialog-main-div-wrapper .sg-backup-review-wrapper {
|
101 |
+
margin-top: 0px;
|
102 |
+
margin-right: 0px ;
|
103 |
+
}
|
104 |
+
.sgpb-popup-dialog-main-div-wrapper .banner-x {
|
105 |
+
display: none !important;
|
106 |
+
}
|
107 |
+
.sg-backup-review-wrapper p {
|
108 |
+
color: #FFFFFF;
|
109 |
+
}
|
110 |
+
.sg-backup-review-h1 {
|
111 |
+
font-size: 22px;
|
112 |
+
font-weight: normal;
|
113 |
+
line-height: 1.384;
|
114 |
+
}
|
115 |
+
.sg-backup-review-h2 {
|
116 |
+
font-size: 23px;
|
117 |
+
font-weight: bold;
|
118 |
+
color: #FFFFFF;
|
119 |
+
margin: 10px 0;
|
120 |
+
margin-top: 30px;
|
121 |
+
}
|
122 |
+
:root {
|
123 |
+
--main-bg-color: #1ac6ff;
|
124 |
+
}
|
125 |
+
.sg-backup-review-strong {
|
126 |
+
color: var(--main-bg-color);
|
127 |
+
}
|
128 |
+
.sg-backup-review-mt20 {
|
129 |
+
margin-top: 10px;
|
130 |
+
color: #FFFFFF !important;
|
131 |
+
margin-bottom: 20px;
|
132 |
+
}
|
133 |
+
.sg-backup-wow {
|
134 |
+
font-size: 35px;
|
135 |
+
color: #FFFFFF;
|
136 |
+
margin: 15px 0;
|
137 |
+
padding-top: 16px;
|
138 |
+
}
|
139 |
+
.sg-backup-review-button {
|
140 |
+
font-size: 15px !important;
|
141 |
+
font-weight: bold;
|
142 |
+
border-radius: 8px !important;
|
143 |
+
width: 120px !important;
|
144 |
+
height: 40px !important;
|
145 |
+
}
|
146 |
+
.sg-backup-button-1, .sg-backup-backup-button-2 {
|
147 |
+
background-color: rgba(0, 0, 0, 0) !important;
|
148 |
+
color: #ffffff !important;
|
149 |
+
}
|
150 |
+
.sg-backup-button-1:hover, .sg-backup-backup-button-2:hover {
|
151 |
+
background-color: #FFFFFF !important;
|
152 |
+
color: #001DB6 !important;
|
153 |
+
border: 2px solid #FFFFFF;
|
154 |
+
}
|
155 |
+
.sg-backup-custom-content {
|
156 |
+
color: #FFFFFF;
|
157 |
+
font-size: 20px;
|
158 |
+
margin: 14px 0;
|
159 |
+
}
|
160 |
+
.sg-backup-img-wrapper,
|
161 |
+
.sg-backup-review-description-wrapper {
|
162 |
+
display: inline-block;
|
163 |
+
}
|
164 |
+
.sg-backup-img-wrapper {
|
165 |
+
width: 256px;
|
166 |
+
float: left;
|
167 |
+
background-color: #FFFFFF;
|
168 |
+
height: 100%;
|
169 |
+
}
|
170 |
+
.sg-backup-review-description-wrapper {
|
171 |
+
max-width: 100%;
|
172 |
+
vertical-align: top;
|
173 |
+
}
|
174 |
+
.sgpb-popup-dialog-main-div-wrapper .sg-backup-review-description {
|
175 |
+
padding: 0 30px;
|
176 |
+
}
|
177 |
+
.banner-x {
|
178 |
+
position: absolute;
|
179 |
+
right: 14px;
|
180 |
+
top: 5px;
|
181 |
+
display: inline !important;
|
182 |
+
cursor: pointer;
|
183 |
+
width: auto !important;
|
184 |
+
height: auto !important;
|
185 |
+
}
|
186 |
+
.banner-x:hover {
|
187 |
+
background-color: #071cb6 !important;
|
188 |
+
color: #ffffff !important;
|
189 |
+
border: none !important;
|
190 |
+
}
|
191 |
+
@media (max-width: 1350px) {
|
192 |
+
.sg-backup-wow {
|
193 |
+
font-size: 27px;
|
194 |
+
}
|
195 |
+
.sgpb-popup-dialog-main-div-wrapper .sg-backup-review-description {
|
196 |
+
padding: 0 5px;
|
197 |
+
}
|
198 |
+
}
|
199 |
+
|
200 |
+
</style>
|
201 |
+
<div id="sg-backup-review-wrapper" class="sg-backup-review-wrapper">
|
202 |
+
<span class="banner-x sg-backup-review-button sg-backup-backup-button-2 sg-backup-show-popup-period" data-message-type="<?php echo $type; ?>">x</span>
|
203 |
+
<div class="sg-backup-img-wrapper">
|
204 |
+
<img src="<?php echo SG_IMAGE_URL; ?>sgBackupVerticalLogo.png" width="200px" height="181px">
|
205 |
+
</div>
|
206 |
+
<div class="sg-backup-review-description-wrapper">
|
207 |
+
<div class="sg-backup-review-description">
|
208 |
+
<!-- <h2 class="sg-backup-custom-content"></h2>-->
|
209 |
+
<h2 class="sg-backup-review-h2"><?php echo $customContent; ?></h2>
|
210 |
+
<p class="sg-backup-review-mt20"><?php _e('Have your input in the development of our plugin, and we’ll get better and happier. Leave your 5-star positive review and help <br> us go further to the perfection!'); ?></p>
|
211 |
+
</div>
|
212 |
+
<div class="sg-backup-buttons-wrapper">
|
213 |
+
<button class="press press-grey sg-backup-review-button sg-backup-button-1 sg-already-did-review"><?php _e('I already did'); ?></button>
|
214 |
+
<button class="press press-lightblue sg-backup-review-button sg-backup-button-3 sg-backup-you-worth-it"><?php _e('You worth it!'); ?></button>
|
215 |
+
<button class="press press-grey sg-backup-review-button sg-backup-backup-button-2 sg-backup-show-popup-period" data-message-type="<?php echo $type; ?>"><?php _e('Maybe later'); ?></button>
|
216 |
+
</div>
|
217 |
+
</div>
|
218 |
+
</div>
|
219 |
+
<script type="text/javascript">
|
220 |
+
var closeBackupGuardReviewPopup = function ()
|
221 |
+
{
|
222 |
+
if (window.backupGuardReviewPopup) {
|
223 |
+
window.backupGuardReviewPopup.close();
|
224 |
+
}
|
225 |
+
};
|
226 |
+
var sgBackupDontShowAgain = function() {
|
227 |
+
closeBackupGuardReviewPopup();
|
228 |
+
jQuery('.sg-backup-review-wrapper').remove();
|
229 |
+
var data = {
|
230 |
+
action: 'backup_guard_reviewDontShow',
|
231 |
+
token: BG_BACKUP_STRINGS.nonce
|
232 |
+
};
|
233 |
+
jQuery.post(ajaxurl, data, function () {
|
234 |
+
});
|
235 |
+
};
|
236 |
+
var backupGuardReviewBannerButtons = function() {
|
237 |
+
jQuery('.sg-backup-button-3').bind('click', function () {
|
238 |
+
sgBackupDontShowAgain();
|
239 |
+
window.open("<?php echo BACKUP_GUARD_WORDPRESS_REVIEW_URL; ?>")
|
240 |
+
});
|
241 |
+
jQuery('.sg-backup-button-1').bind('click', function () {
|
242 |
+
sgBackupDontShowAgain();
|
243 |
+
});
|
244 |
+
jQuery('.sg-backup-backup-button-2').bind('click', function () {
|
245 |
+
closeBackupGuardReviewPopup();
|
246 |
+
jQuery('.sg-backup-review-wrapper').remove();
|
247 |
+
var type = jQuery(this).data('message-type');
|
248 |
+
|
249 |
+
var data = {
|
250 |
+
action: 'backup_guard_review_later',
|
251 |
+
type: type,
|
252 |
+
token: BG_BACKUP_STRINGS.nonce
|
253 |
+
};
|
254 |
+
jQuery.post(ajaxurl, data, function () {
|
255 |
+
});
|
256 |
+
});
|
257 |
+
}
|
258 |
+
backupGuardReviewBannerButtons();
|
259 |
+
|
260 |
+
jQuery(window).bind('sgpbDidOpen', function() {
|
261 |
+
backupGuardReviewBannerButtons();
|
262 |
+
});
|
263 |
+
</script>
|
264 |
+
<?php
|
265 |
+
$content = ob_get_contents();
|
266 |
+
ob_end_clean();
|
267 |
+
|
268 |
+
return $content;
|
269 |
+
}
|
270 |
+
|
271 |
+
private function isAllowDaysReview()
|
272 |
+
{
|
273 |
+
$shouldOpen = false;
|
274 |
+
$periodNextTime = SGConfig::get('openNextTime');
|
275 |
+
|
276 |
+
$dontShowAgain = SGConfig::get('closeReviewBanner');
|
277 |
+
// When period next time does not exits it means the user is old
|
278 |
+
if (!$periodNextTime) {
|
279 |
+
$usageDays = $this->getBackupTableCreationDate();
|
280 |
+
SGConfig::set('usageDays', $usageDays);
|
281 |
+
// For old users
|
282 |
+
if (defined('SG_BACKUP_REVIEW_PERIOD') && $usageDays > SG_BACKUP_REVIEW_PERIOD && !$dontShowAgain) {
|
283 |
+
return true;
|
284 |
+
}
|
285 |
+
|
286 |
+
$remainingDays = SG_BACKUP_REVIEW_PERIOD - $usageDays;
|
287 |
+
|
288 |
+
$popupTimeZone = 'America/New_York';
|
289 |
+
$timeDate = new \DateTime('now', new DateTimeZone($popupTimeZone));
|
290 |
+
$timeDate->modify('+'.$remainingDays.' day');
|
291 |
+
|
292 |
+
$timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
|
293 |
+
SGConfig::set('openNextTime', $timeNow);
|
294 |
+
|
295 |
+
return false;
|
296 |
+
}
|
297 |
+
|
298 |
+
$currentData = new \DateTime('now');
|
299 |
+
$timeNow = $currentData->format('Y-m-d H:i:s');
|
300 |
+
$timeNow = strtotime($timeNow);
|
301 |
+
|
302 |
+
if ($periodNextTime < $timeNow) {
|
303 |
+
$shouldOpen = true;
|
304 |
+
}
|
305 |
+
|
306 |
+
return $shouldOpen;
|
307 |
+
}
|
308 |
+
|
309 |
+
private function getBackupTableCreationDate()
|
310 |
+
{
|
311 |
+
$sgdb = SGDatabase::getInstance();
|
312 |
+
|
313 |
+
$results = $sgdb->query('SELECT table_name, create_time FROM information_schema.tables WHERE table_schema="%s" AND table_name="%s"', array(DB_NAME, SG_ACTION_TABLE_NAME));
|
314 |
+
|
315 |
+
if (empty($results) || empty($results[0]['create_time'])) {
|
316 |
+
return 0;
|
317 |
+
}
|
318 |
+
|
319 |
+
$createTime = $results[0]['create_time'];
|
320 |
+
$createTime = strtotime($createTime);
|
321 |
+
SGConfig::set('installDate', $createTime);
|
322 |
+
$diff = time() - $createTime;
|
323 |
+
$days = floor($diff/(60*60*24));
|
324 |
+
|
325 |
+
return $days;
|
326 |
+
}
|
327 |
+
|
328 |
+
public static function getBackupCounts()
|
329 |
+
{
|
330 |
+
$sgdb = SGDatabase::getInstance();
|
331 |
+
$result = $sgdb->query('SELECT count(id) as countBackups FROM '.SG_ACTION_TABLE_NAME.' WHERE type='.SG_ACTION_TYPE_BACKUP.' AND status='.SG_ACTION_STATUS_FINISHED);
|
332 |
+
|
333 |
+
if (empty($result[0]['countBackups'])) {
|
334 |
+
return 0;
|
335 |
+
}
|
336 |
+
|
337 |
+
return (int)$result[0]['countBackups'];;
|
338 |
+
}
|
339 |
+
|
340 |
+
private function isAllowToShowReviewByCount()
|
341 |
+
{
|
342 |
+
$status = false;
|
343 |
+
|
344 |
+
$backupsCount = SGReviewManager::getBackupCounts();
|
345 |
+
|
346 |
+
if (empty($backupsCount)) {
|
347 |
+
return $status;
|
348 |
+
}
|
349 |
+
|
350 |
+
$backupCountReview = SGConfig::get('backupReviewCount');
|
351 |
+
if (empty($backupCountReview)) {
|
352 |
+
$backupCountReview = SG_BACKUP_REVIEW_BACKUP_COUNT;
|
353 |
+
}
|
354 |
+
|
355 |
+
return ($backupsCount >= $backupCountReview);
|
356 |
+
}
|
357 |
+
|
358 |
+
public static function getBackupRestoreCounts()
|
359 |
+
{
|
360 |
+
$sgdb = SGDatabase::getInstance();
|
361 |
+
$result = $sgdb->query('SELECT count(id) as countRestores FROM '.SG_ACTION_TABLE_NAME.' WHERE type='.SG_ACTION_TYPE_RESTORE.' AND status='.SG_ACTION_STATUS_FINISHED);
|
362 |
+
|
363 |
+
if (empty($result[0]['countRestores'])) {
|
364 |
+
return 0;
|
365 |
+
}
|
366 |
+
|
367 |
+
return (int)$result[0]['countRestores'];
|
368 |
+
}
|
369 |
+
|
370 |
+
private function isSuccessFullRestore()
|
371 |
+
{
|
372 |
+
$status = false;
|
373 |
+
|
374 |
+
$countRestores = SGReviewManager::getBackupRestoreCounts();
|
375 |
+
|
376 |
+
if (empty($countRestores)) {
|
377 |
+
return $status;
|
378 |
+
}
|
379 |
+
|
380 |
+
$restoreReviewCount = SGConfig::get('restoreReviewCount');
|
381 |
+
if (empty($restoreReviewCount)) {
|
382 |
+
$restoreReviewCount = SG_BACKUP_REVIEW_RESTORE_COUNT;
|
383 |
+
}
|
384 |
+
|
385 |
+
return ($countRestores >= $restoreReviewCount);
|
386 |
+
}
|
387 |
+
}
|
public/ajax/checkPHPVersionCompatibility.php
CHANGED
@@ -6,6 +6,7 @@ require_once(SG_LIB_PATH.'SGArchive.php');
|
|
6 |
if(backupGuardIsAjax() && count($_POST)) {
|
7 |
try {
|
8 |
$name = $_POST['bname'];
|
|
|
9 |
$path = SG_BACKUP_DIRECTORY.$name.'/'.$name.'.sgbp';
|
10 |
|
11 |
$sgArchive = new SGArchive($path, 'r');
|
6 |
if(backupGuardIsAjax() && count($_POST)) {
|
7 |
try {
|
8 |
$name = $_POST['bname'];
|
9 |
+
$name = backupGuardRemoveSlashes($name);
|
10 |
$path = SG_BACKUP_DIRECTORY.$name.'/'.$name.'.sgbp';
|
11 |
|
12 |
$sgArchive = new SGArchive($path, 'r');
|
public/ajax/deleteBackup.php
CHANGED
@@ -4,6 +4,7 @@
|
|
4 |
if(isset($_POST['backupName']))
|
5 |
{
|
6 |
$backupName = backupGuardSanitizeTextField($_POST['backupName']);
|
|
|
7 |
for ($i=0; $i < count($backupName) ; $i++) {
|
8 |
SGBackup::deleteBackup($backupName[$i]);
|
9 |
}
|
4 |
if(isset($_POST['backupName']))
|
5 |
{
|
6 |
$backupName = backupGuardSanitizeTextField($_POST['backupName']);
|
7 |
+
$backupName = backupGuardRemoveSlashes($backupName);
|
8 |
for ($i=0; $i < count($backupName) ; $i++) {
|
9 |
SGBackup::deleteBackup($backupName[$i]);
|
10 |
}
|
public/ajax/downloadBackup.php
CHANGED
@@ -10,6 +10,7 @@
|
|
10 |
$downloadType == SG_BACKUP_DOWNLOAD_TYPE_SGBP)
|
11 |
{
|
12 |
$backupName = $_GET['backupName'];
|
|
|
13 |
try
|
14 |
{
|
15 |
SGBackup::download($backupName, $downloadType);
|
10 |
$downloadType == SG_BACKUP_DOWNLOAD_TYPE_SGBP)
|
11 |
{
|
12 |
$backupName = $_GET['backupName'];
|
13 |
+
$backupName = backupGuardRemoveSlashes($backupName);
|
14 |
try
|
15 |
{
|
16 |
SGBackup::download($backupName, $downloadType);
|
public/ajax/modalImport.php
CHANGED
@@ -57,18 +57,16 @@
|
|
57 |
</div>
|
58 |
</div>
|
59 |
<div class="col-md-12" id="modal-import-2">
|
60 |
-
<div class="form-group">
|
61 |
-
<
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
</span>
|
69 |
-
|
70 |
-
</div>
|
71 |
-
<br/>
|
72 |
</div>
|
73 |
</div>
|
74 |
</div>
|
@@ -91,10 +89,10 @@
|
|
91 |
<div class="clearfix"></div>
|
92 |
</div>
|
93 |
<div class="modal-footer">
|
94 |
-
<button type="button" class="pull-left btn btn-
|
95 |
-
<
|
96 |
-
<button type="button" class="btn btn-
|
97 |
-
<button type="button" data-remote="importBackup" id="uploadSgbpFile" class="btn btn-
|
98 |
</div>
|
99 |
</div>
|
100 |
</div>
|
57 |
</div>
|
58 |
</div>
|
59 |
<div class="col-md-12" id="modal-import-2">
|
60 |
+
<div class="form-group import-modal-popup-content">
|
61 |
+
<div class="col-md-9">
|
62 |
+
<input type="text" id="sg-import-file-name" class="form-control sg-backup-input" placeholder="<?php _backupGuardT('SGBP file')?>" readonly>
|
63 |
+
</div>
|
64 |
+
<div class="col-lg-3">
|
65 |
+
<span class="input-group-btn">
|
66 |
+
<span class="btn btn-primary btn-file backup-browse-btn">
|
67 |
+
<?php _backupGuardT('Browse')?>… <input class="sg-backup-upload-input" type="file" name="files[]" data-url="<?php echo admin_url('admin-ajax.php')."?action=backup_guard_importBackup" ?>" data-max-file-size="<?php echo backupGuardConvertToBytes($maxUploadSize.'B'); ?>">
|
68 |
</span>
|
69 |
+
</span>
|
|
|
|
|
70 |
</div>
|
71 |
</div>
|
72 |
</div>
|
89 |
<div class="clearfix"></div>
|
90 |
</div>
|
91 |
<div class="modal-footer">
|
92 |
+
<button type="button" class="pull-left btn btn-primary" id="switch-modal-import-pages-back" onclick="sgBackup.previousPage()"><?php _backupGuardT('Back')?></button>
|
93 |
+
<span class="modal-close-button" id="sg-close-modal-import" data-dismiss="modal"><?php _backupGuardT("Close")?></span>
|
94 |
+
<button type="button" class="btn btn-success" id="switch-modal-import-pages-next" data-remote="importBackup" onclick="sgBackup.nextPage()"><?php _backupGuardT('Next')?></button>
|
95 |
+
<button type="button" data-remote="importBackup" id="uploadSgbpFile" class="btn btn-success"><?php _backupGuardT('Import')?></button>
|
96 |
</div>
|
97 |
</div>
|
98 |
</div>
|
public/ajax/modalManualBackup.php
CHANGED
@@ -24,7 +24,7 @@
|
|
24 |
<!-- Multiple Radios -->
|
25 |
<div class="form-group">
|
26 |
<div class="col-md-12">
|
27 |
-
<input type="text" name="sg-custom-backup-name" id="sg-custom-backup-name" placeholder="Custom backup name (optional)">
|
28 |
</div>
|
29 |
<div class="col-md-12">
|
30 |
<div class="radio">
|
@@ -130,8 +130,8 @@
|
|
130 |
</div>
|
131 |
<div class="modal-footer">
|
132 |
<input type="text" name="backup-type" value="<?php echo $backupType?>" hidden>
|
133 |
-
<
|
134 |
-
<button type="button" onclick="sgBackup.manualBackup()" class="btn btn-
|
135 |
</div>
|
136 |
</form>
|
137 |
</div>
|
24 |
<!-- Multiple Radios -->
|
25 |
<div class="form-group">
|
26 |
<div class="col-md-12">
|
27 |
+
<input type="text" name="sg-custom-backup-name" id="sg-custom-backup-name" class="sg-backup-input" placeholder="Custom backup name (optional)">
|
28 |
</div>
|
29 |
<div class="col-md-12">
|
30 |
<div class="radio">
|
130 |
</div>
|
131 |
<div class="modal-footer">
|
132 |
<input type="text" name="backup-type" value="<?php echo $backupType?>" hidden>
|
133 |
+
<span class="modal-close-button" data-dismiss="modal">Close</span>
|
134 |
+
<button type="button" onclick="sgBackup.manualBackup()" class="btn btn-success"><?php _backupGuardT('Backup')?></button>
|
135 |
</div>
|
136 |
</form>
|
137 |
</div>
|
public/ajax/modalManualRestore.php
CHANGED
@@ -2,8 +2,10 @@
|
|
2 |
require_once(dirname(__FILE__).'/../boot.php');
|
3 |
require_once(SG_LIB_PATH.'SGArchive.php');
|
4 |
$backupName = $_GET['param'];
|
|
|
5 |
$backupPath = SG_BACKUP_DIRECTORY.$backupName;
|
6 |
$backupPath= $backupPath.'/'.$backupName.'.sgbp';
|
|
|
7 |
$archive = new SGArchive($backupPath,'r');
|
8 |
$headers = $archive->getArchiveHeaders();
|
9 |
if($headers["selectivRestoreable"]){
|
@@ -45,8 +47,8 @@
|
|
45 |
</div>
|
46 |
</div>
|
47 |
<div class="modal-footer">
|
48 |
-
<
|
49 |
-
<button type="button" onclick="sgBackup.startRestore('<?php echo $backupName ?>')" class="btn btn-
|
50 |
</div>
|
51 |
</form>
|
52 |
</div>
|
@@ -62,7 +64,7 @@
|
|
62 |
</div>
|
63 |
<div class="modal-footer">
|
64 |
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
65 |
-
<button type="button" onclick="sgBackup.startRestore('<?php echo $backupName ?>')" class="btn btn-primary"><?php _backupGuardT('Restore')?></button>
|
66 |
</div>
|
67 |
</div>
|
68 |
</div>
|
2 |
require_once(dirname(__FILE__).'/../boot.php');
|
3 |
require_once(SG_LIB_PATH.'SGArchive.php');
|
4 |
$backupName = $_GET['param'];
|
5 |
+
$backupName = backupGuardRemoveSlashes($backupName);
|
6 |
$backupPath = SG_BACKUP_DIRECTORY.$backupName;
|
7 |
$backupPath= $backupPath.'/'.$backupName.'.sgbp';
|
8 |
+
|
9 |
$archive = new SGArchive($backupPath,'r');
|
10 |
$headers = $archive->getArchiveHeaders();
|
11 |
if($headers["selectivRestoreable"]){
|
47 |
</div>
|
48 |
</div>
|
49 |
<div class="modal-footer">
|
50 |
+
<span class="modal-close-button" data-dismiss="modal">Close</span>
|
51 |
+
<button type="button" onclick="sgBackup.startRestore('<?php echo addslashes(htmlspecialchars($backupName)) ?>')" class="btn btn-success"><?php _backupGuardT('Restore')?></button>
|
52 |
</div>
|
53 |
</form>
|
54 |
</div>
|
64 |
</div>
|
65 |
<div class="modal-footer">
|
66 |
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
67 |
+
<button type="button" onclick="sgBackup.startRestore('<?php echo htmlspecialchars($backupName) ?>')" class="btn btn-primary"><?php _backupGuardT('Restore')?></button>
|
68 |
</div>
|
69 |
</div>
|
70 |
</div>
|
public/ajax/reviewBannerActions.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once(SG_LIB_PATH.'SGReviewManager.php');
|
3 |
+
$type = $_POST['type'];
|
4 |
+
if ($type == 'dayCount') {
|
5 |
+
$timeDate = new \DateTime('now');
|
6 |
+
$installTime = strtotime($timeDate->format('Y-m-d H:i:s'));
|
7 |
+
SGConfig::set('installDate', $installTime);
|
8 |
+
$timeDate->modify('+'.SG_BACKUP_REVIEW_PERIOD.' day');
|
9 |
+
|
10 |
+
$timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
|
11 |
+
SGConfig::set('openNextTime', $timeNow);
|
12 |
+
|
13 |
+
$usageDays = SGConfig::get('usageDays');
|
14 |
+
$usageDays += SG_BACKUP_REVIEW_PERIOD;
|
15 |
+
SGConfig::set('usageDays', $usageDays);
|
16 |
+
}
|
17 |
+
else if ($type == 'backupCount') {
|
18 |
+
$backupCountReview = SGConfig::get('backupReviewCount');
|
19 |
+
if (empty($backupCountReview)) {
|
20 |
+
$backupCountReview = SGReviewManager::getBackupCounts();
|
21 |
+
}
|
22 |
+
$backupCountReview += SG_BACKUP_REVIEW_BACKUP_COUNT;
|
23 |
+
SGConfig::set('backupReviewCount', $backupCountReview);
|
24 |
+
}
|
25 |
+
else if ($type == 'restoreCount') {
|
26 |
+
$restoreReviewCount = SGConfig::get('restoreReviewCount');
|
27 |
+
if (empty($restoreReviewCount)) {
|
28 |
+
$restoreReviewCount = SGReviewManager::getBackupRestoreCounts();
|
29 |
+
}
|
30 |
+
$restoreReviewCount += SG_BACKUP_REVIEW_RESTORE_COUNT;
|
31 |
+
SGConfig::set('restoreReviewCount', $restoreReviewCount);
|
32 |
+
}
|
public/ajax/settings.php
CHANGED
@@ -52,6 +52,13 @@ if (backupGuardIsAjax() && count($_POST)) {
|
|
52 |
SGConfig::set('SG_DISABLE_ADS', '0');
|
53 |
}
|
54 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
if (isset($_POST['sg-background-reload-method'])) {
|
56 |
SGConfig::set('SG_BACKGROUND_RELOAD_METHOD', (int)$_POST['sg-background-reload-method']);
|
57 |
}
|
52 |
SGConfig::set('SG_DISABLE_ADS', '0');
|
53 |
}
|
54 |
|
55 |
+
if (isset($_POST['sg-download-via-php'])) {
|
56 |
+
SGConfig::set('SG_DOWNLOAD_VIA_PHP', '1');
|
57 |
+
}
|
58 |
+
else {
|
59 |
+
SGConfig::set('SG_DOWNLOAD_VIA_PHP', '0');
|
60 |
+
}
|
61 |
+
|
62 |
if (isset($_POST['sg-background-reload-method'])) {
|
63 |
SGConfig::set('SG_BACKGROUND_RELOAD_METHOD', (int)$_POST['sg-background-reload-method']);
|
64 |
}
|
public/backups.php
CHANGED
@@ -6,10 +6,11 @@ require_once(SG_PUBLIC_INCLUDE_PATH.'sidebar.php');
|
|
6 |
$backups = SGBackup::getAllBackups();
|
7 |
$pluginCapabilities = backupGuardGetCapabilities();
|
8 |
$downloadUrl = admin_url('admin-post.php?action=backup_guard_downloadBackup&');
|
|
|
|
|
9 |
?>
|
10 |
<?php if(SGConfig::get('SG_REVIEW_POPUP_STATE') == SG_SHOW_REVIEW_POPUP): ?>
|
11 |
<!-- Review Box -->
|
12 |
-
<a href="javascript:void(0)" id="sg-review" class="hidden" data-toggle="modal" data-modal-name="manual-review" data-remote="modalReview"></a>
|
13 |
<script type="text/javascript">sgShowReview = 1;</script>
|
14 |
<?php endif; ?>
|
15 |
<?php if(!SGConfig::get('SG_HIDE_VERIFICATION_POPUP_STATE') && ($pluginCapabilities == BACKUP_GUARD_CAPABILITIES_FREE)): ?>
|
@@ -87,8 +88,16 @@ $downloadUrl = admin_url('admin-post.php?action=backup_guard_downloadBackup&');
|
|
87 |
<?php _backupGuardT('Migrate')?>
|
88 |
</a>
|
89 |
|
90 |
-
<a href="javascript:void(0)" id="sg-import" class="
|
|
|
|
|
|
|
|
|
91 |
|
|
|
|
|
|
|
|
|
92 |
<div class="clearfix"></div><br/>
|
93 |
<table class="table table-striped paginated sg-backup-table">
|
94 |
<thead>
|
@@ -141,7 +150,7 @@ $downloadUrl = admin_url('admin-post.php?action=backup_guard_downloadBackup&');
|
|
141 |
<a class="btn btn-danger btn-xs sg-cancel-backup" sg-data-backup-id="<?php echo $backup['id']?>" href="javascript:void(0)" title="<?php _backupGuardT('Stop')?>"> <i class="glyphicon glyphicon-stop" aria-hidden="true"></i> </a>
|
142 |
<?php endif; ?>
|
143 |
<?php else: ?>
|
144 |
-
<a href="javascript:void(0)" data-sgbackup-name="<?php echo $backup['name'];?>" data-remote="deleteBackup" class="btn btn-danger btn-xs sg-remove-backup" title="<?php _backupGuardT('Delete')?>"> <i class="glyphicon glyphicon-remove" aria-hidden="true"></i> </a>
|
145 |
<div class="btn-group">
|
146 |
<a href="javascript:void(0)" class="btn btn-primary dropdown-toggle btn-xs" data-toggle="dropdown" aria-expanded="false" title="<?php _backupGuardT('Download')?>">
|
147 |
<i class="glyphicon glyphicon-download-alt" aria-hidden="true"></i>
|
@@ -150,14 +159,14 @@ $downloadUrl = admin_url('admin-post.php?action=backup_guard_downloadBackup&');
|
|
150 |
<ul class="dropdown-menu">
|
151 |
<?php if($backup['files']):?>
|
152 |
<li>
|
153 |
-
<a href="<?php echo $downloadUrl.'backupName='
|
154 |
<i class="glyphicon glyphicon-hdd" aria-hidden="true"></i> <?php _backupGuardT('Backup')?>
|
155 |
</a>
|
156 |
</li>
|
157 |
<?php endif;?>
|
158 |
<?php if($backup['backup_log']):?>
|
159 |
<li>
|
160 |
-
<a href="<?php echo $downloadUrl.'backupName='
|
161 |
<i class="glyphicon glyphicon-list-alt" aria-hidden="true"></i> <?php _backupGuardT('Backup log')?>
|
162 |
</a>
|
163 |
</li>
|
@@ -172,7 +181,7 @@ $downloadUrl = admin_url('admin-post.php?action=backup_guard_downloadBackup&');
|
|
172 |
</ul>
|
173 |
</div>
|
174 |
<?php if(file_exists(SG_BACKUP_DIRECTORY.$backup['name'].'/'.$backup['name'].'.sgbp')):?>
|
175 |
-
<a href="javascript:void(0)" title="<?php _backupGuardT('Restore')?>" class="btn btn-success btn-xs sg-restore-button" data-toggle="modal" data-modal-name="manual-restore" data-remote="modalManualRestore" data-sgbp-params="<?php echo $backup['name']?>">
|
176 |
<i class="glyphicon glyphicon-repeat" aria-hidden="true"></i>
|
177 |
</a>
|
178 |
<?php endif;?>
|
6 |
$backups = SGBackup::getAllBackups();
|
7 |
$pluginCapabilities = backupGuardGetCapabilities();
|
8 |
$downloadUrl = admin_url('admin-post.php?action=backup_guard_downloadBackup&');
|
9 |
+
|
10 |
+
$pluginCapabilities = backupGuardGetCapabilities();
|
11 |
?>
|
12 |
<?php if(SGConfig::get('SG_REVIEW_POPUP_STATE') == SG_SHOW_REVIEW_POPUP): ?>
|
13 |
<!-- Review Box -->
|
|
|
14 |
<script type="text/javascript">sgShowReview = 1;</script>
|
15 |
<?php endif; ?>
|
16 |
<?php if(!SGConfig::get('SG_HIDE_VERIFICATION_POPUP_STATE') && ($pluginCapabilities == BACKUP_GUARD_CAPABILITIES_FREE)): ?>
|
88 |
<?php _backupGuardT('Migrate')?>
|
89 |
</a>
|
90 |
|
91 |
+
<a href="javascript:void(0)" id="sg-import" class="btn btn-primary sg-margin-left-20" data-toggle="modal" data-modal-name="import" data-remote="modalImport"><i class="glyphicon glyphicon-open"></i> <?php _backupGuardT('Import')?></a>
|
92 |
+
<?php if ($pluginCapabilities == BACKUP_GUARD_CAPABILITIES_FREE): ?>
|
93 |
+
<a href="<?php echo BACKUP_GUARD_WORDPRESS_SUPPORT_URL; ?>" target="_blank">
|
94 |
+
<button type="button" id="sg-report-problem-button" class="sg-button-red pull-right">
|
95 |
+
<i class="glyphicon glyphicon-alert"></i>
|
96 |
|
97 |
+
<?php _backupGuardT('Report issue')?>
|
98 |
+
</button>
|
99 |
+
</a>
|
100 |
+
<?php endif; ?>
|
101 |
<div class="clearfix"></div><br/>
|
102 |
<table class="table table-striped paginated sg-backup-table">
|
103 |
<thead>
|
150 |
<a class="btn btn-danger btn-xs sg-cancel-backup" sg-data-backup-id="<?php echo $backup['id']?>" href="javascript:void(0)" title="<?php _backupGuardT('Stop')?>"> <i class="glyphicon glyphicon-stop" aria-hidden="true"></i> </a>
|
151 |
<?php endif; ?>
|
152 |
<?php else: ?>
|
153 |
+
<a href="javascript:void(0)" data-sgbackup-name="<?php echo htmlspecialchars($backup['name']);?>" data-remote="deleteBackup" class="btn btn-danger btn-xs sg-remove-backup" title="<?php _backupGuardT('Delete')?>"> <i class="glyphicon glyphicon-remove" aria-hidden="true"></i> </a>
|
154 |
<div class="btn-group">
|
155 |
<a href="javascript:void(0)" class="btn btn-primary dropdown-toggle btn-xs" data-toggle="dropdown" aria-expanded="false" title="<?php _backupGuardT('Download')?>">
|
156 |
<i class="glyphicon glyphicon-download-alt" aria-hidden="true"></i>
|
159 |
<ul class="dropdown-menu">
|
160 |
<?php if($backup['files']):?>
|
161 |
<li>
|
162 |
+
<a href="<?php echo $downloadUrl.'backupName='.htmlspecialchars(@$backup['name']).'&downloadType='.SG_BACKUP_DOWNLOAD_TYPE_SGBP ?>">
|
163 |
<i class="glyphicon glyphicon-hdd" aria-hidden="true"></i> <?php _backupGuardT('Backup')?>
|
164 |
</a>
|
165 |
</li>
|
166 |
<?php endif;?>
|
167 |
<?php if($backup['backup_log']):?>
|
168 |
<li>
|
169 |
+
<a href="<?php echo $downloadUrl.'backupName='.htmlspecialchars(@$backup['name']).'&downloadType='.SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG ?>">
|
170 |
<i class="glyphicon glyphicon-list-alt" aria-hidden="true"></i> <?php _backupGuardT('Backup log')?>
|
171 |
</a>
|
172 |
</li>
|
181 |
</ul>
|
182 |
</div>
|
183 |
<?php if(file_exists(SG_BACKUP_DIRECTORY.$backup['name'].'/'.$backup['name'].'.sgbp')):?>
|
184 |
+
<a href="javascript:void(0)" title="<?php _backupGuardT('Restore')?>" class="btn btn-success btn-xs sg-restore-button" data-toggle="modal" data-modal-name="manual-restore" data-remote="modalManualRestore" data-sgbp-params="<?php echo htmlspecialchars($backup['name']) ?>">
|
185 |
<i class="glyphicon glyphicon-repeat" aria-hidden="true"></i>
|
186 |
</a>
|
187 |
<?php endif;?>
|
public/cloud.php
CHANGED
@@ -29,7 +29,7 @@ $oneDriveInfo = SGConfig::get('SG_ONE_DRIVE_CONNECTION_STRING');
|
|
29 |
</label>
|
30 |
|
31 |
<div class="col-md-7 pull-right text-right">
|
32 |
-
<input id="cloudFolder" name="cloudFolder" type="text" class="form-control input-md" value="<?php echo esc_html(SGConfig::get('SG_STORAGE_BACKUPS_FOLDER_NAME'))?>">
|
33 |
<button type="button" id="sg-save-cloud-folder" class="btn btn-success pull-right"><?php _backupGuardT('Save');?></button>
|
34 |
</div>
|
35 |
</div>
|
29 |
</label>
|
30 |
|
31 |
<div class="col-md-7 pull-right text-right">
|
32 |
+
<input id="cloudFolder" name="cloudFolder" type="text" class="form-control input-md sg-backup-input" value="<?php echo esc_html(SGConfig::get('SG_STORAGE_BACKUPS_FOLDER_NAME'))?>">
|
33 |
<button type="button" id="sg-save-cloud-folder" class="btn btn-success pull-right"><?php _backupGuardT('Save');?></button>
|
34 |
</div>
|
35 |
</div>
|
public/css/bgstyle.less.css
CHANGED
@@ -1,9 +1,17 @@
|
|
1 |
#sg-custom-backup-name {
|
2 |
width: 100%;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
}
|
4 |
|
5 |
.backup-guard-label-success {
|
6 |
-
color:
|
7 |
}
|
8 |
|
9 |
.backup-guard-label-warning {
|
@@ -60,7 +68,7 @@
|
|
60 |
margin-top: 10px;
|
61 |
width: calc(100% - 20px) !important;
|
62 |
height: 185px;
|
63 |
-
background-color: #
|
64 |
color: #FFFFFF;
|
65 |
font-size: 12px;
|
66 |
min-width: 650px;
|
@@ -91,12 +99,13 @@
|
|
91 |
|
92 |
.sg-banner-social-button {
|
93 |
display: inline-block;
|
94 |
-
width:
|
95 |
-
height:
|
96 |
border: none;
|
97 |
border-radius: 50%;
|
98 |
cursor: pointer;
|
99 |
margin-right: 3px;
|
|
|
100 |
}
|
101 |
|
102 |
#sg-banner p {
|
@@ -110,6 +119,7 @@
|
|
110 |
text-decoration: none;
|
111 |
color: #FFFFFF;
|
112 |
cursor: pointer;
|
|
|
113 |
}
|
114 |
|
115 |
#sg-banner ul {
|
@@ -125,7 +135,7 @@
|
|
125 |
#sg-right-column ul {
|
126 |
float: right;
|
127 |
padding-right: 16px;
|
128 |
-
padding-top:
|
129 |
}
|
130 |
|
131 |
#sg-right-column li {
|
@@ -141,51 +151,40 @@
|
|
141 |
}
|
142 |
|
143 |
.sg-img-class {
|
144 |
-
margin-right:
|
145 |
vertical-align: middle;
|
146 |
}
|
147 |
|
148 |
#sg-logo {
|
149 |
display: inline-block;
|
150 |
width: 140px;
|
151 |
-
height:
|
152 |
-
background-size:
|
|
|
153 |
background-repeat: no-repeat;
|
154 |
-
background-image: url("../img/
|
155 |
}
|
156 |
|
157 |
-
|
158 |
-
|
159 |
}
|
160 |
|
161 |
-
#sg-facebook
|
162 |
-
background
|
163 |
}
|
164 |
|
165 |
#sg-twitter {
|
166 |
background: url("../img/TW.png") no-repeat;
|
167 |
}
|
168 |
|
169 |
-
#sg-twitter:hover {
|
170 |
-
background-color: #2AA3EF;
|
171 |
-
}
|
172 |
-
|
173 |
#sg-google-plus {
|
174 |
background: url("../img/G+.png") no-repeat;
|
175 |
}
|
176 |
|
177 |
-
#sg-google-plus:hover {
|
178 |
-
background-color: #D9453D;
|
179 |
-
}
|
180 |
-
|
181 |
#sg-youtube {
|
182 |
background: url("../img/youtube.png") no-repeat;
|
183 |
}
|
184 |
|
185 |
-
#sg-youtube:hover {
|
186 |
-
background-color: #E32424;
|
187 |
-
}
|
188 |
-
|
189 |
.sg-star-class {
|
190 |
cursor:pointer;
|
191 |
margin-right: 3px;
|
@@ -196,18 +195,21 @@
|
|
196 |
}
|
197 |
|
198 |
#sg-buy-now {
|
199 |
-
background-color: #
|
200 |
border: none;
|
201 |
-
color: #
|
202 |
font-size: 18px;
|
203 |
vertical-align: middle;
|
204 |
cursor: pointer;
|
205 |
display: inline-block;
|
206 |
padding: 6px 15px;
|
|
|
207 |
}
|
208 |
|
209 |
#sg-buy-now:hover {
|
210 |
-
background-color: #
|
|
|
|
|
211 |
}
|
212 |
|
213 |
#sg-buy-now-text {
|
@@ -233,6 +235,7 @@
|
|
233 |
.sg-banner-rate-us-in {
|
234 |
display: inline-block;
|
235 |
height: 30px;
|
|
|
236 |
}
|
237 |
|
238 |
/* Bounce In */
|
@@ -1502,13 +1505,13 @@
|
|
1502 |
line-height: inherit;
|
1503 |
}
|
1504 |
.sg-wrapper-less a {
|
1505 |
-
color: #
|
1506 |
text-decoration: none;
|
1507 |
}
|
1508 |
.sg-wrapper-less a:hover,
|
1509 |
.sg-wrapper-less a:focus {
|
1510 |
color: #165ba8;
|
1511 |
-
text-decoration:
|
1512 |
}
|
1513 |
.sg-wrapper-less a:focus {
|
1514 |
outline: thin dotted;
|
@@ -2988,7 +2991,7 @@
|
|
2988 |
margin-bottom: 21px;
|
2989 |
font-size: 22.5px;
|
2990 |
line-height: inherit;
|
2991 |
-
color: #
|
2992 |
border: 0;
|
2993 |
border-bottom: 1px solid #e5e5e5;
|
2994 |
}
|
@@ -3137,6 +3140,17 @@
|
|
3137 |
margin-left: -20px;
|
3138 |
margin-top: 4px \9;
|
3139 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3140 |
.sg-wrapper-less .radio + .radio,
|
3141 |
.sg-wrapper-less .checkbox + .checkbox {
|
3142 |
margin-top: -5px;
|
@@ -3577,9 +3591,11 @@
|
|
3577 |
background-color: #ffffff;
|
3578 |
}
|
3579 |
.sg-wrapper-less .btn-primary {
|
3580 |
-
color: #
|
3581 |
-
background-color: #
|
3582 |
-
border-color: #
|
|
|
|
|
3583 |
}
|
3584 |
.sg-wrapper-less .btn-primary:hover,
|
3585 |
.sg-wrapper-less .btn-primary:focus,
|
@@ -3588,8 +3604,8 @@
|
|
3588 |
.sg-wrapper-less .btn-primary.active,
|
3589 |
.sg-wrapper-less .open > .dropdown-toggle.btn-primary {
|
3590 |
color: #ffffff;
|
3591 |
-
background-color: #
|
3592 |
-
border-color: #
|
3593 |
}
|
3594 |
.sg-wrapper-less .btn-primary:active,
|
3595 |
.sg-wrapper-less .btn-primary.active,
|
@@ -3614,17 +3630,19 @@
|
|
3614 |
.sg-wrapper-less .btn-primary.disabled.active,
|
3615 |
.sg-wrapper-less .btn-primary[disabled].active,
|
3616 |
.sg-wrapper-less fieldset[disabled] .btn-primary.active {
|
3617 |
-
background-color: #
|
3618 |
-
border-color: #
|
|
|
3619 |
}
|
3620 |
.sg-wrapper-less .btn-primary .badge {
|
3621 |
color: #2780e3;
|
3622 |
background-color: #ffffff;
|
3623 |
}
|
3624 |
.sg-wrapper-less .btn-success {
|
3625 |
-
color: #ffffff;
|
3626 |
-
background-color: #
|
3627 |
-
border-color: #
|
|
|
3628 |
}
|
3629 |
.sg-wrapper-less .btn-success:hover,
|
3630 |
.sg-wrapper-less .btn-success:focus,
|
@@ -3632,9 +3650,11 @@
|
|
3632 |
.sg-wrapper-less .btn-success:active,
|
3633 |
.sg-wrapper-less .btn-success.active,
|
3634 |
.sg-wrapper-less .open > .dropdown-toggle.btn-success {
|
3635 |
-
color: #
|
3636 |
-
background-color: #
|
3637 |
-
border-color: #
|
|
|
|
|
3638 |
}
|
3639 |
.sg-wrapper-less .btn-success:active,
|
3640 |
.sg-wrapper-less .btn-success.active,
|
@@ -3659,8 +3679,8 @@
|
|
3659 |
.sg-wrapper-less .btn-success.disabled.active,
|
3660 |
.sg-wrapper-less .btn-success[disabled].active,
|
3661 |
.sg-wrapper-less fieldset[disabled] .btn-success.active {
|
3662 |
-
background-color:
|
3663 |
-
border-color:
|
3664 |
}
|
3665 |
.sg-wrapper-less .btn-success .badge {
|
3666 |
color: #3fb618;
|
@@ -3758,8 +3778,9 @@
|
|
3758 |
}
|
3759 |
.sg-wrapper-less .btn-danger {
|
3760 |
color: #ffffff;
|
3761 |
-
background-color: #
|
3762 |
-
border-color: #
|
|
|
3763 |
}
|
3764 |
.sg-wrapper-less .btn-danger:hover,
|
3765 |
.sg-wrapper-less .btn-danger:focus,
|
@@ -3767,9 +3788,9 @@
|
|
3767 |
.sg-wrapper-less .btn-danger:active,
|
3768 |
.sg-wrapper-less .btn-danger.active,
|
3769 |
.sg-wrapper-less .open > .dropdown-toggle.btn-danger {
|
3770 |
-
color: #
|
3771 |
-
background-color: #
|
3772 |
-
border-color: #
|
3773 |
}
|
3774 |
.sg-wrapper-less .btn-danger:active,
|
3775 |
.sg-wrapper-less .btn-danger.active,
|
@@ -3964,7 +3985,7 @@
|
|
3964 |
.sg-wrapper-less .dropdown-menu > li > a:focus {
|
3965 |
text-decoration: none;
|
3966 |
color: #ffffff;
|
3967 |
-
background-color: #
|
3968 |
}
|
3969 |
.sg-wrapper-less .dropdown-menu > .active > a,
|
3970 |
.sg-wrapper-less .dropdown-menu > .active > a:hover,
|
@@ -4211,6 +4232,10 @@
|
|
4211 |
clip: rect(0, 0, 0, 0);
|
4212 |
pointer-events: none;
|
4213 |
}
|
|
|
|
|
|
|
|
|
4214 |
.sg-wrapper-less .input-group {
|
4215 |
position: relative;
|
4216 |
display: table;
|
@@ -6210,6 +6235,12 @@
|
|
6210 |
.sg-wrapper-less .modal-open {
|
6211 |
overflow: hidden;
|
6212 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
6213 |
.sg-wrapper-less .modal {
|
6214 |
display: none;
|
6215 |
overflow: hidden;
|
@@ -6221,6 +6252,10 @@
|
|
6221 |
z-index: 1050;
|
6222 |
-webkit-overflow-scrolling: touch;
|
6223 |
outline: 0;
|
|
|
|
|
|
|
|
|
6224 |
}
|
6225 |
.sg-wrapper-less .modal.fade .modal-dialog {
|
6226 |
-webkit-transform: translate(0, -25%);
|
@@ -6277,7 +6312,6 @@
|
|
6277 |
}
|
6278 |
.sg-wrapper-less .modal-header {
|
6279 |
padding: 20px;
|
6280 |
-
border-bottom: 1px solid #e5e5e5;
|
6281 |
min-height: 16.42857143px;
|
6282 |
}
|
6283 |
.sg-wrapper-less .modal-header .close {
|
@@ -6286,6 +6320,8 @@
|
|
6286 |
.sg-wrapper-less .modal-title {
|
6287 |
margin: 0;
|
6288 |
line-height: 1.42857143;
|
|
|
|
|
6289 |
}
|
6290 |
.sg-wrapper-less .modal-body {
|
6291 |
position: relative;
|
@@ -6294,7 +6330,7 @@
|
|
6294 |
.sg-wrapper-less .modal-footer {
|
6295 |
padding: 20px;
|
6296 |
text-align: right;
|
6297 |
-
|
6298 |
}
|
6299 |
.sg-wrapper-less .modal-footer .btn + .btn {
|
6300 |
margin-left: 5px;
|
@@ -7084,7 +7120,7 @@
|
|
7084 |
}
|
7085 |
.sg-wrapper-less .text-success,
|
7086 |
.sg-wrapper-less .text-success:hover {
|
7087 |
-
color: #
|
7088 |
}
|
7089 |
.sg-wrapper-less .text-danger,
|
7090 |
.sg-wrapper-less .text-danger:hover {
|
@@ -7246,9 +7282,9 @@
|
|
7246 |
display: block;
|
7247 |
}
|
7248 |
.sg-wrapper-less select {
|
7249 |
-
background: #ffffff url("../img/
|
7250 |
background-size: 24px 20px;
|
7251 |
-
background-position: right
|
7252 |
color: #888;
|
7253 |
outline: none;
|
7254 |
display: inline-block;
|
@@ -7260,20 +7296,25 @@
|
|
7260 |
.sg-wrapper-less #sg-wrapper {
|
7261 |
width: 100%;
|
7262 |
min-width: 650px;
|
7263 |
-
border: 1px #
|
7264 |
-
background-color: #
|
7265 |
}
|
7266 |
.sg-wrapper-less #sg-sidebar-wrapper {
|
7267 |
width: 210px;
|
7268 |
float: left;
|
7269 |
}
|
|
|
|
|
|
|
|
|
|
|
7270 |
.sg-wrapper-less #sg-content-wrapper {
|
7271 |
position: relative;
|
7272 |
float: left;
|
7273 |
width: calc(100% - 210px);
|
7274 |
/*Same as sidebar*/
|
7275 |
border-left: 1px #333333 solid;
|
7276 |
-
min-height:
|
7277 |
background-color: #ffffff;
|
7278 |
}
|
7279 |
.sg-wrapper-less .container-fluid {
|
@@ -7283,7 +7324,7 @@
|
|
7283 |
.sg-wrapper-less .metro .sidebar {
|
7284 |
margin: 0;
|
7285 |
padding: 0;
|
7286 |
-
background-color: #
|
7287 |
width: 100%;
|
7288 |
/*height: 100%;*/
|
7289 |
}
|
@@ -7295,7 +7336,7 @@
|
|
7295 |
.sg-wrapper-less .metro .sidebar > ul li {
|
7296 |
display: block;
|
7297 |
border: 0;
|
7298 |
-
border-bottom: 1px
|
7299 |
position: relative;
|
7300 |
}
|
7301 |
.sg-wrapper-less .metro .sidebar > ul li.title {
|
@@ -7321,10 +7362,10 @@
|
|
7321 |
padding: 10px 20px;
|
7322 |
text-decoration: none;
|
7323 |
color: #eeeeee;
|
7324 |
-
background-color: #
|
7325 |
}
|
7326 |
.sg-wrapper-less .metro .sidebar > ul li a:hover {
|
7327 |
-
background-color: #
|
7328 |
color: #ffffff;
|
7329 |
}
|
7330 |
.sg-wrapper-less .metro .sidebar > ul li a.dropdown-toggle:after {
|
@@ -7354,8 +7395,8 @@
|
|
7354 |
color: #555555;
|
7355 |
}
|
7356 |
.sg-wrapper-less .metro .sidebar > ul li.active a {
|
7357 |
-
background-color: #
|
7358 |
-
color: #
|
7359 |
}
|
7360 |
.sg-wrapper-less .metro .sidebar > ul ul {
|
7361 |
margin: 0;
|
@@ -7891,3 +7932,78 @@
|
|
7891 |
.form-group-custom {
|
7892 |
display: none;
|
7893 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
#sg-custom-backup-name {
|
2 |
width: 100%;
|
3 |
+
border-radius: 0;
|
4 |
+
}
|
5 |
+
|
6 |
+
.sg-backup-input {
|
7 |
+
border: none !important;
|
8 |
+
box-shadow: none !important;
|
9 |
+
border-bottom: 2px solid #000000 !important;
|
10 |
+
padding-left: 0 !important;
|
11 |
}
|
12 |
|
13 |
.backup-guard-label-success {
|
14 |
+
color: #0021C8;
|
15 |
}
|
16 |
|
17 |
.backup-guard-label-warning {
|
68 |
margin-top: 10px;
|
69 |
width: calc(100% - 20px) !important;
|
70 |
height: 185px;
|
71 |
+
background-color: #0021C8;
|
72 |
color: #FFFFFF;
|
73 |
font-size: 12px;
|
74 |
min-width: 650px;
|
99 |
|
100 |
.sg-banner-social-button {
|
101 |
display: inline-block;
|
102 |
+
width: 44px;
|
103 |
+
height: 44px;
|
104 |
border: none;
|
105 |
border-radius: 50%;
|
106 |
cursor: pointer;
|
107 |
margin-right: 3px;
|
108 |
+
background-size: contain !important;
|
109 |
}
|
110 |
|
111 |
#sg-banner p {
|
119 |
text-decoration: none;
|
120 |
color: #FFFFFF;
|
121 |
cursor: pointer;
|
122 |
+
font-weight: bold;
|
123 |
}
|
124 |
|
125 |
#sg-banner ul {
|
135 |
#sg-right-column ul {
|
136 |
float: right;
|
137 |
padding-right: 16px;
|
138 |
+
padding-top: 2px;
|
139 |
}
|
140 |
|
141 |
#sg-right-column li {
|
151 |
}
|
152 |
|
153 |
.sg-img-class {
|
154 |
+
margin-right: 3px;
|
155 |
vertical-align: middle;
|
156 |
}
|
157 |
|
158 |
#sg-logo {
|
159 |
display: inline-block;
|
160 |
width: 140px;
|
161 |
+
height: 70px;
|
162 |
+
background-size: contain;
|
163 |
+
background-position: center;
|
164 |
background-repeat: no-repeat;
|
165 |
+
background-image: url("../img/banerLogo.png");
|
166 |
}
|
167 |
|
168 |
+
.sg-logo-li {
|
169 |
+
height: 70px !important;
|
170 |
}
|
171 |
|
172 |
+
#sg-facebook {
|
173 |
+
background: url('../img/fb.png') no-repeat;
|
174 |
}
|
175 |
|
176 |
#sg-twitter {
|
177 |
background: url("../img/TW.png") no-repeat;
|
178 |
}
|
179 |
|
|
|
|
|
|
|
|
|
180 |
#sg-google-plus {
|
181 |
background: url("../img/G+.png") no-repeat;
|
182 |
}
|
183 |
|
|
|
|
|
|
|
|
|
184 |
#sg-youtube {
|
185 |
background: url("../img/youtube.png") no-repeat;
|
186 |
}
|
187 |
|
|
|
|
|
|
|
|
|
188 |
.sg-star-class {
|
189 |
cursor:pointer;
|
190 |
margin-right: 3px;
|
195 |
}
|
196 |
|
197 |
#sg-buy-now {
|
198 |
+
background-color: #ffffff;
|
199 |
border: none;
|
200 |
+
color: #0021C8 !important;
|
201 |
font-size: 18px;
|
202 |
vertical-align: middle;
|
203 |
cursor: pointer;
|
204 |
display: inline-block;
|
205 |
padding: 6px 15px;
|
206 |
+
border-radius: 8px;
|
207 |
}
|
208 |
|
209 |
#sg-buy-now:hover {
|
210 |
+
background-color: #0021C8;
|
211 |
+
border: 1px solid #ffffff !important;
|
212 |
+
color: #ffffff !important;
|
213 |
}
|
214 |
|
215 |
#sg-buy-now-text {
|
235 |
.sg-banner-rate-us-in {
|
236 |
display: inline-block;
|
237 |
height: 30px;
|
238 |
+
color:rgba(255,255,255, 0.8) !important;
|
239 |
}
|
240 |
|
241 |
/* Bounce In */
|
1505 |
line-height: inherit;
|
1506 |
}
|
1507 |
.sg-wrapper-less a {
|
1508 |
+
color: #0021C8;
|
1509 |
text-decoration: none;
|
1510 |
}
|
1511 |
.sg-wrapper-less a:hover,
|
1512 |
.sg-wrapper-less a:focus {
|
1513 |
color: #165ba8;
|
1514 |
+
text-decoration: none;
|
1515 |
}
|
1516 |
.sg-wrapper-less a:focus {
|
1517 |
outline: thin dotted;
|
2991 |
margin-bottom: 21px;
|
2992 |
font-size: 22.5px;
|
2993 |
line-height: inherit;
|
2994 |
+
color: #000000;
|
2995 |
border: 0;
|
2996 |
border-bottom: 1px solid #e5e5e5;
|
2997 |
}
|
3140 |
margin-left: -20px;
|
3141 |
margin-top: 4px \9;
|
3142 |
}
|
3143 |
+
.sg-wrapper-less input[type=radio]:checked,
|
3144 |
+
.sg-wrapper-less .radio input[type="radio"],
|
3145 |
+
.sg-wrapper-less .checkbox input[type="checkbox"] {
|
3146 |
+
background-color: #efefef;
|
3147 |
+
}
|
3148 |
+
.sg-wrapper-less input[type=radio]:checked:before {
|
3149 |
+
background-color: #0021C8;
|
3150 |
+
}
|
3151 |
+
.sg-wrapper-less .checkbox input[type="checkbox"]:checked {
|
3152 |
+
background-color: #072dc3;
|
3153 |
+
}
|
3154 |
.sg-wrapper-less .radio + .radio,
|
3155 |
.sg-wrapper-less .checkbox + .checkbox {
|
3156 |
margin-top: -5px;
|
3591 |
background-color: #ffffff;
|
3592 |
}
|
3593 |
.sg-wrapper-less .btn-primary {
|
3594 |
+
color: #0021C8;
|
3595 |
+
background-color: #ffffff;
|
3596 |
+
border-color: #0021C8;
|
3597 |
+
border-radius: 8px;
|
3598 |
+
font-weight: bold;
|
3599 |
}
|
3600 |
.sg-wrapper-less .btn-primary:hover,
|
3601 |
.sg-wrapper-less .btn-primary:focus,
|
3604 |
.sg-wrapper-less .btn-primary.active,
|
3605 |
.sg-wrapper-less .open > .dropdown-toggle.btn-primary {
|
3606 |
color: #ffffff;
|
3607 |
+
background-color: #0021C8;
|
3608 |
+
border-color: #ffffff;
|
3609 |
}
|
3610 |
.sg-wrapper-less .btn-primary:active,
|
3611 |
.sg-wrapper-less .btn-primary.active,
|