WordPress Backup and Migrate Plugin – Backup Guard - Version 1.6.5.1

Version Description

  • Bug fixed related to backup download
Download this release

Release Info

Developer BackupGuard
Plugin Icon 128x128 WordPress Backup and Migrate Plugin – Backup Guard
Version 1.6.5.1
Comparing to
See all releases

Code changes from version 1.6.0 to 1.6.5.1

BackupGuard.php CHANGED
@@ -320,7 +320,7 @@ function enqueue_backup_guard_scripts($hook)
320
  }
321
  echo 'SG_AJAX_REQUEST_FREQUENCY = "'.$sgAjaxRequestFrequency.'";';
322
  echo 'function getAjaxUrl(url) {'.
323
- 'if (url==="cloudDropbox" || url==="cloudGdrive" || url==="cloudOneDrive") return "'.admin_url('admin-post.php?action=backup_guard_').'"+url+"&token='.wp_create_nonce('backupGuardAjaxNonce').'";'.
324
  'return "'.admin_url('admin-ajax.php').'";}</script>';
325
 
326
  wp_enqueue_media();
320
  }
321
  echo 'SG_AJAX_REQUEST_FREQUENCY = "'.$sgAjaxRequestFrequency.'";';
322
  echo 'function getAjaxUrl(url) {'.
323
+ 'if (url==="cloudDropbox" || url==="cloudGdrive" || url==="cloudOneDrive" || url==="cloudPCloud" || url==="cloudBox") return "'.admin_url('admin-post.php?action=backup_guard_').'"+url+"&token='.wp_create_nonce('backupGuardAjaxNonce').'";'.
324
  'return "'.admin_url('admin-ajax.php').'";}</script>';
325
 
326
  wp_enqueue_media();
README.txt CHANGED
@@ -5,12 +5,12 @@ 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.9
8
- Tested up to: 5.6
9
- Stable tag: 1.6.0
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
13
- Backup site, restore or migrate it wherever you need it. Backup to Dropbox, Google Drive, Amazon, OneDrive, FTP / SFTP to restore or migrate WordPress.
14
 
15
  == Description ==
16
 
@@ -47,8 +47,8 @@ See <strong>BackupGuard Free</strong> in action here: <a href="https://www.youtu
47
  <li><strong>Migrate site</strong> - migrate site from one domain to another</li>
48
  <li>Fully automatic migration - no any <strong>find & replace</strong> rules are required for migration</li>
49
  <li>Multiple scheduled backups - schedule your database and files to backup with different frequencies</li>
50
- <li>Upload to Dropbox, G Drive, Amazon S3, OneDrive & SFTP/FTP</li>
51
- <li>Import from Dropbox, G Drive, Amazon S3, OneDrive & SFTP/FTP</li>
52
  <li>Mail notifications - get email when backup or restore gets finished</li>
53
  <li>Alert before updating - get an alert to backup the website before updating</li>
54
  <li>Customize backup naming - specify your custom backup prefix</li>
@@ -167,6 +167,32 @@ When you are facing an issue of any kind with any of our products, the first thi
167
  6. Site backup customization
168
 
169
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  = 1.6.0 =
171
  * Bug fixed related to security issues
172
 
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.9
8
+ Tested up to: 5.7
9
+ Stable tag: 1.6.3
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
13
+ Backup site, restore or migrate it wherever you need it. Backup to Dropbox, Google Drive, Amazon, Box, pCloud, OneDrive, FTP / SFTP to restore or migrate WordPress.
14
 
15
  == Description ==
16
 
47
  <li><strong>Migrate site</strong> - migrate site from one domain to another</li>
48
  <li>Fully automatic migration - no any <strong>find & replace</strong> rules are required for migration</li>
49
  <li>Multiple scheduled backups - schedule your database and files to backup with different frequencies</li>
50
+ <li>Upload to Dropbox, G Drive, Amazon S3, Box, pCloud, OneDrive & SFTP/FTP</li>
51
+ <li>Import from Dropbox, G Drive, Amazon S3, Box, pCloud, OneDrive & SFTP/FTP</li>
52
  <li>Mail notifications - get email when backup or restore gets finished</li>
53
  <li>Alert before updating - get an alert to backup the website before updating</li>
54
  <li>Customize backup naming - specify your custom backup prefix</li>
167
  6. Site backup customization
168
 
169
  == Changelog ==
170
+
171
+ = 1.6.5.1 =
172
+ * Bug fixed related to backup download
173
+
174
+ = 1.6.5 =
175
+ * Improvement of symlink download logic
176
+ * Bug fixed related to automatically signing out from BackupGuard plugin
177
+ * Bug fixed related to failed restore, now we show warning notice
178
+
179
+ = 1.6.4 =
180
+ * New feature: New cloud integration with "Pcloud" is added
181
+ * New feature: New cloud integration with "Box" is added
182
+ * Bug fixed related to System Info and Services tabs
183
+ * Bug fixed related to “Migrate” button, which became inactive after some activity
184
+
185
+ = 1.6.3 =
186
+ * Bug fixed related to reloads were not working if alternate cron was on
187
+
188
+ = 1.6.2 =
189
+ * Bug fixed related to download via PHP
190
+
191
+ = 1.6.1 =
192
+ * Bug fixed related to conflict with WooCommerce Alepay Gateway plugin
193
+ * Bug fixed related to dashboard statistics widget that was not displaying sometimes
194
+ * Other minor improvements
195
+
196
  = 1.6.0 =
197
  * Bug fixed related to security issues
198
 
backup.php CHANGED
@@ -1,36 +1,36 @@
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.6.0
8
- * Author: BackupGuard
9
- * Author URI: https://backup-guard.com/products/backup-wordpress
10
- * License: GPL-2.0+
11
- * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
12
- */
13
-
14
- if (function_exists('activate_backup_guard')) {
15
- die('Please deactivate any other BackupGuard version before activating this one.');
16
- }
17
-
18
- if (!defined('SG_BACKUP_GUARD_VERSION')) {
19
- define('SG_BACKUP_GUARD_VERSION', '1.6.0');
20
- }
21
-
22
- if (!defined('SG_BACKUP_GUARD_MAIN_FILE')) {
23
- define('SG_BACKUP_GUARD_MAIN_FILE', __FILE__);
24
- }
25
-
26
- if (!defined('SG_FORCE_DB_TABLES_RESET')) {
27
- define('SG_FORCE_DB_TABLES_RESET', false);
28
- }
29
-
30
- //if this file is called directly, abort.
31
- if (!defined('WPINC')) {
32
- die;
33
- }
34
-
35
- require_once(plugin_dir_path(__FILE__).'public/boot.php');
36
- require_once(plugin_dir_path(__FILE__).'BackupGuard.php');
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.6.5.1
8
+ * Author: BackupGuard
9
+ * Author URI: https://backup-guard.com/products/backup-wordpress
10
+ * License: GPL-2.0+
11
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
12
+ */
13
+
14
+ if (function_exists('activate_backup_guard')) {
15
+ die('Please deactivate any other BackupGuard version before activating this one.');
16
+ }
17
+
18
+ if (!defined('SG_BACKUP_GUARD_VERSION')) {
19
+ define('SG_BACKUP_GUARD_VERSION', '1.6.5.1');
20
+ }
21
+
22
+ if (!defined('SG_BACKUP_GUARD_MAIN_FILE')) {
23
+ define('SG_BACKUP_GUARD_MAIN_FILE', __FILE__);
24
+ }
25
+
26
+ if (!defined('SG_FORCE_DB_TABLES_RESET')) {
27
+ define('SG_FORCE_DB_TABLES_RESET', false);
28
+ }
29
+
30
+ //if this file is called directly, abort.
31
+ if (!defined('WPINC')) {
32
+ die;
33
+ }
34
+
35
+ require_once(plugin_dir_path(__FILE__).'public/boot.php');
36
+ require_once(plugin_dir_path(__FILE__).'BackupGuard.php');
com/config/config.php CHANGED
@@ -1,219 +1,228 @@
1
- <?php
2
- //Version
3
- define('SG_ARCHIVE_VERSION', '5');
4
-
5
- //Paths
6
- define('SG_APP_PATH', realpath(dirname(__FILE__).'/../').'/');
7
- define('SG_CONFIG_PATH', SG_APP_PATH.'config/');
8
- define('SG_CORE_PATH', SG_APP_PATH.'core/');
9
- define('SG_DATABASE_PATH', SG_CORE_PATH.'database/');
10
- define('SG_LOG_PATH', SG_CORE_PATH.'log/');
11
- define('SG_STORAGE_PATH', SG_CORE_PATH.'storage/');
12
- define('SG_EXCEPTION_PATH', SG_CORE_PATH.'exception/');
13
- define('SG_BACKUP_PATH', SG_CORE_PATH.'backup/');
14
- define('SG_RESTORE_PATH', SG_CORE_PATH.'restore/');
15
- define('SG_LIB_PATH', SG_APP_PATH.'lib/');
16
- define('SG_MAIL_PATH', SG_CORE_PATH.'mail/');
17
- define('SG_NOTICE_PATH', SG_CORE_PATH.'notice/');
18
- define('SG_SCHEDULE_PATH', SG_CORE_PATH.'schedule/');
19
- define('SG_WIDGET_PATH', SG_CORE_PATH.'widget/');
20
- define('SG_EXTENSION_PATH', SG_CORE_PATH.'extension/');
21
-
22
- define('SG_REQUEST_PATH', SG_LIB_PATH.'Request/');
23
-
24
- // Seal themes
25
- define('SG_SEAL_THEME_DARK', "dark");
26
- define('SG_SEAL_THEME_GREEN', "green");
27
- define('SG_SEAL_THEME_WHITE', "white");
28
-
29
- // Free days in seconds
30
- define('SG_PLUGIN_ACTIVE_INTERVAL', 259200);
31
-
32
- //Log
33
- define('SG_LOG_LEVEL_ALL', 0);
34
- define('SG_LOG_LEVEL_HIGH', 1);
35
- define('SG_LOG_LEVEL_MEDIUM', 2);
36
- define('SG_LOG_LEVEL_LOW', 4);
37
- define('SG_BACKUP_LOG_POS_START', 1);
38
- define('SG_BACKUP_LOG_POS_END', 2);
39
-
40
- //Notice
41
- define('SG_NOTICE_SUCCESS', 'success');
42
- define('SG_NOTICE_WARNING', 'warning');
43
- define('SG_NOTICE_ERROR', 'error');
44
-
45
- //Reload methods
46
- define('SG_RELOAD_METHOD_NONE', 'none');
47
- define('SG_RELOAD_METHOD_STREAM', 1);
48
- define('SG_RELOAD_METHOD_CURL', 2);
49
- define('SG_RELOAD_METHOD_SOCKET', 3);
50
- define('SG_RELOAD_METHOD_AJAX', 4);
51
-
52
- define('SG_SHCEDULE_STATUS_INACTIVE', 0);
53
- define('SG_SHCEDULE_STATUS_PENDING', 1);
54
-
55
- //Number of backups to keep on server by default
56
- define('SG_NUMBER_OF_BACKUPS_TO_KEEP', 100);
57
-
58
- //Backup timeout in seconds
59
- define('SG_BACKUP_TIMEOUT', 180);
60
- define('SG_RELOAD_TIMEOUT', 10);
61
-
62
- //Ping data update frequency
63
- define('SG_PING_DATE_UPDATE_FREQUENCY', 3);
64
-
65
- //Backup file extension
66
- define('SGBP_EXT', 'sgbp');
67
-
68
- define('SG_NOTICE_EXECUTION_TIMEOUT', 'timeout_error');
69
- define('SG_NOTICE_MIGRATION_ERROR', 'migration_error');
70
- define('SG_NOTICE_NOT_WRITABLE_ERROR', 'restore_notwritable_error');
71
-
72
- define('SG_WORDPRESS_CORE_TABLE', SG_ENV_DB_PREFIX.'options');
73
- define('SG_MAGENTO_CORE_TABLE', SG_ENV_DB_PREFIX.'core_config_data');
74
-
75
- //Backup file default prefix
76
- define('SG_BACKUP_FILE_NAME_DEFAULT_PREFIX', 'sg_backup_');
77
-
78
- //Default folder name for storage upload
79
- define('SG_BACKUP_DEFAULT_FOLDER_NAME', 'sg_backups');
80
-
81
- //Schedule action name prefix
82
- define('SG_SCHEDULE_ACTION', 'backup_guard_schedule_action');
83
-
84
- define('SG_SCHEDULER_DEFAULT_ID', 1);
85
-
86
- //one day in seconds
87
- define('SG_ONE_DAY_IN_SECONDS', 24*60*60);
88
-
89
- define('SG_ENTRY_TYPE_FILE', 1);
90
- define('SG_ENTRY_TYPE_CDR', 2);
91
-
92
- define('SG_STATE_ACTION_PREPARING_STATE_FILE', 1);
93
- define('SG_STATE_ACTION_LISTING_FILES', 2);
94
- define('SG_STATE_ACTION_COMPRESSING_FILES', 3);
95
- define('SG_STATE_ACTION_PREPARING_UPLOAD', 4);
96
- define('SG_STATE_ACTION_UPLOADING_BACKUP', 5);
97
- define('SG_STATE_ACTION_RESTORING_FILES', 6);
98
- define('SG_STATE_ACTION_EXPORTING_SQL', 7);
99
- define('SG_STATE_ACTION_RESTORING_DATABASE', 8);
100
- define('SG_STATE_ACTION_MIGRATING_DATABASE', 9);
101
-
102
- define('SG_STATE_TYPE_FILE', 1);
103
- define('SG_STATE_TYPE_DB', 2);
104
- define('SG_STATE_TYPE_UPLOAD', 3);
105
- define('SG_STATE_TYPE_MIGRATE', 4);
106
-
107
- define('SG_TREE_FILE_NAME', 'tree.json');
108
- define('SG_STATE_FILE_NAME', 'state.json');
109
-
110
- define('SG_RELOADER_STATE_FILE_NAME', 'reloaderState.json');
111
-
112
- //File name to keep upload report for email notification
113
- define('SG_REPORT_FILE_NAME', 'report.txt');
114
-
115
- //2GB in bytes
116
- define('SG_ARCHIVE_MAX_SIZE_32', 2000000000);
117
-
118
- // Valid Archive minimum file size
119
- define('SG_BACKUP_VALID_ARCHIVE_SIZE', 500);
120
-
121
- // Backup methods
122
- define('SG_BACKUP_METHOD_MIGRATE', 1);
123
- define('SG_BACKUP_METHOD_STANDARD', 2);
124
-
125
- define('SG_MIN_SUPPORTED_ARCHIVE_VERSION', 5);
126
- define('SG_MAX_SUPPORTED_ARCHIVE_VERSION', 5);
127
-
128
- //Reloader status
129
- define('SG_RELOADER_STATUS_IDLE', 1);
130
- define('SG_RELOADER_STATUS_RUNNING', 2);
131
-
132
- //External restore
133
- define('SG_EXTERNAL_RESTORE_FILE', 'bg_restore.php');
134
-
135
- //License
136
- define('SG_LICENSE_CHECK_TIMEOUT', 86400); //1 day
137
-
138
- //Mail
139
- define('SG_MAIL_BACKUP_SUCCESS_SUBJECT', 'Backup Succeeded');
140
- define('SG_MAIL_BACKUP_COMPLETED_WITH_WARNINGS_SUBJECT', 'Backup completed with warnings');
141
- define('SG_MAIL_BACKUP_FAIL_SUBJECT', 'Backup Failed');
142
- define('SG_MAIL_BACKUP_CANCELED_SUBJECT', 'Backup Canceled');
143
- define('SG_MAIL_RESTORE_SUCCESS_SUBJECT', 'Restore Succeeded');
144
- define('SG_MAIL_RESTORE_FAIL_SUBJECT', 'Restore Failed');
145
-
146
- define('SG_MAIL_UPLOAD_FAIL_SUBJECT', 'Upload Failed');
147
- define('SG_MAIL_UPLOAD_SUCCESS_SUBJECT', 'Upload Succeeded');
148
-
149
- //BackupGurad
150
- define('SG_ACTION_STATUS_CREATED', 0);
151
- define('SG_ACTION_STATUS_IN_PROGRESS_DB', 1);
152
- define('SG_ACTION_STATUS_IN_PROGRESS_FILES', 2);
153
- define('SG_ACTION_STATUS_FINISHED', 3);
154
- define('SG_ACTION_STATUS_FINISHED_WARNINGS', 4);
155
- define('SG_ACTION_STATUS_CANCELLING', 5);
156
- define('SG_ACTION_STATUS_CANCELLED', 6);
157
- define('SG_ACTION_STATUS_ERROR', 7);
158
- define('SG_ACTION_TYPE_BACKUP', 1);
159
- define('SG_ACTION_TYPE_RESTORE', 2);
160
- define('SG_ACTION_TYPE_UPLOAD', 3);
161
- define('SG_ACTION_PROGRESS_UPDATE_INTERVAL', 3); //in %
162
- define('SG_BACKUP_DATABASE_INSERT_LIMIT', 10000);
163
- define('SG_BACKUP_DOWNLOAD_TYPE_SGBP', 1);
164
- define('SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG', 2);
165
- define('SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG', 3);
166
-
167
- define('SG_BACKUP_REVIEW_BACKUP_COUNT', 3);
168
- define('SG_BACKUP_REVIEW_RESTORE_COUNT', 1);
169
- define('SG_BACKUP_REVIEW_PERIOD', 30);
170
-
171
- //The following constants can be modified at run-time
172
- define('SG_ACTION_BACKUP_FILES_AVAILABLE', 1);
173
- define('SG_ACTION_BACKUP_DATABASE_AVAILABLE', 1);
174
- define('SG_BACKUP_IN_BACKGROUND_MODE', 0);
175
- define('SG_BACKUP_UPLOAD_TO_STORAGES', ''); //list of storage ids separated by commas
176
-
177
- //Database tables
178
- define('SG_ACTION_TABLE_NAME', SG_ENV_DB_PREFIX.'sg_action');
179
- define('SG_CONFIG_TABLE_NAME', SG_ENV_DB_PREFIX.'sg_config');
180
- define('SG_SCHEDULE_TABLE_NAME', SG_ENV_DB_PREFIX.'sg_schedule');
181
-
182
- define('SG_SSH_KEY_FILE_FOLDER_NAME', 'sshKeyFolder/');
183
-
184
- define('SG_SHOW_BACKUPGUARD_CLOUD', 0);
185
- define('SG_FORGOT_PASSWORD_URL', 'https://backup-guard.com/admin/users/forgotPassword');
186
- define('SG_MIGRATION_SERVICE_URL', 'https://backup-guard.com/services/migrate-wordpress');
187
- define('BACKUP_GUARD_PRIVACY_POLICY_URL', "https://backup-guard.com/privacy");
188
- define('BACKUP_GUARD_TERMS_OF_SERVICE_URL', 'https://backup-guard.com/terms');
189
- define('BACKUP_GUARD_WORDPRESS_SUPPORT_URL', 'https://wordpress.org/support/plugin/backup/');
190
- define('BACKUP_GUARD_WORDPRESS_REVIEW_URL', 'https://wordpress.org/support/plugin/backup/reviews/?filter=5');
191
-
192
- define('SG_RESTORE_MODE_FULL', 'full');
193
- define('SG_RESTORE_MODE_FILES', 'files');
194
- define('SG_RESTORE_MODE_DB', 'db');
195
-
196
- define('SG_BADGE_SILVER_PLUS_TEXT', "Silver +");
197
- define('SG_BADGE_GOLD_PLUS_TEXT', "Gold +");
198
- define('SG_BADGE_PLATINUM_TEXT', "Platinum");
199
-
200
- define('SG_SILVER_TOOLTIP_TEXT', "This is a pro feature and it’s available starting from the Silver version!");
201
- define('SG_GOLD_TOOLTIP_TEXT', "This is a pro feature and it’s available starting from the Gold version!");
202
- define('SG_PLATINUM_TOOLTIP_TEXT', "This is a pro feature and it’s available only in Platinum version!");
203
-
204
- define('BACKUP_GUARD_CAPABILITIES_FREE', 1);
205
- define('BACKUP_GUARD_CAPABILITIES_SILVER', 2);
206
- define('BACKUP_GUARD_CAPABILITIES_GOLD', 3);
207
- define('BACKUP_GUARD_CAPABILITIES_PLATINUM', 4);
208
-
209
- define('BG_SCHEDULE_INTERVAL_HOURLY', 0);
210
- define('BG_SCHEDULE_INTERVAL_DAILY', 1);
211
- define('BG_SCHEDULE_INTERVAL_WEEKLY', 2);
212
- define('BG_SCHEDULE_INTERVAL_MONTHLY', 3);
213
- define('BG_SCHEDULE_INTERVAL_YEARLY', 4);
214
-
215
- define('BACKUP_GUARD_TEXTDOMAIN', 'backup-guard-pro');
216
-
217
- define('BACKUP_GUARD_ONE_MB', 1000000);
218
-
219
- define('BACKUP_GUARD_CLOUD_UPGRADE_URL', 'http://backup-guard.com/admin/billing/process/2');
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ //Version
4
+ define('SG_ARCHIVE_VERSION', '5');
5
+
6
+ //Paths
7
+ define('SG_APP_PATH', realpath(dirname(__FILE__) . '/../') . '/');
8
+ define('SG_CONFIG_PATH', SG_APP_PATH . 'config/');
9
+ define('SG_CORE_PATH', SG_APP_PATH . 'core/');
10
+ define('SG_DATABASE_PATH', SG_CORE_PATH . 'database/');
11
+ define('SG_LOG_PATH', SG_CORE_PATH . 'log/');
12
+ define('SG_STORAGE_PATH', SG_CORE_PATH . 'storage/');
13
+ define('SG_EXCEPTION_PATH', SG_CORE_PATH . 'exception/');
14
+ define('SG_BACKUP_PATH', SG_CORE_PATH . 'backup/');
15
+ define('SG_RESTORE_PATH', SG_CORE_PATH . 'restore/');
16
+ define('SG_LIB_PATH', SG_APP_PATH . 'lib/');
17
+ define('SG_MAIL_PATH', SG_CORE_PATH . 'mail/');
18
+ define('SG_NOTICE_PATH', SG_CORE_PATH . 'notice/');
19
+ define('SG_SCHEDULE_PATH', SG_CORE_PATH . 'schedule/');
20
+ define('SG_WIDGET_PATH', SG_CORE_PATH . 'widget/');
21
+ define('SG_EXTENSION_PATH', SG_CORE_PATH . 'extension/');
22
+ define('SG_REQUEST_PATH', SG_LIB_PATH . 'Request/');
23
+
24
+ // Seal themes
25
+ define('SG_SEAL_THEME_DARK', "dark");
26
+ define('SG_SEAL_THEME_GREEN', "green");
27
+ define('SG_SEAL_THEME_WHITE', "white");
28
+
29
+ // Free days in seconds
30
+ define('SG_PLUGIN_ACTIVE_INTERVAL', 259200);
31
+
32
+ //Log
33
+ define('SG_LOG_LEVEL_ALL', 0);
34
+ define('SG_LOG_LEVEL_HIGH', 1);
35
+ define('SG_LOG_LEVEL_MEDIUM', 2);
36
+ define('SG_LOG_LEVEL_LOW', 4);
37
+ define('SG_BACKUP_LOG_POS_START', 1);
38
+ define('SG_BACKUP_LOG_POS_END', 2);
39
+
40
+ //Notice
41
+ define('SG_NOTICE_SUCCESS', 'success');
42
+ define('SG_NOTICE_WARNING', 'warning');
43
+ define('SG_NOTICE_ERROR', 'error');
44
+
45
+ //Reload methods
46
+ define('SG_RELOAD_METHOD_NONE', 'none');
47
+ define('SG_RELOAD_METHOD_STREAM', 1);
48
+ define('SG_RELOAD_METHOD_CURL', 2);
49
+ define('SG_RELOAD_METHOD_SOCKET', 3);
50
+ define('SG_RELOAD_METHOD_AJAX', 4);
51
+
52
+ define('SG_SHCEDULE_STATUS_INACTIVE', 0);
53
+ define('SG_SHCEDULE_STATUS_PENDING', 1);
54
+
55
+ //Number of backups to keep on server by default
56
+ define('SG_NUMBER_OF_BACKUPS_TO_KEEP', 100);
57
+
58
+ //Backup timeout in seconds
59
+ define('SG_BACKUP_TIMEOUT', 180);
60
+ define('SG_RELOAD_TIMEOUT', 10);
61
+
62
+ //Ping data update frequency
63
+ define('SG_PING_DATE_UPDATE_FREQUENCY', 3);
64
+
65
+ //Backup file extension
66
+ define('SGBP_EXT', 'sgbp');
67
+
68
+ define('SG_NOTICE_EXECUTION_TIMEOUT', 'timeout_error');
69
+ define('SG_NOTICE_MIGRATION_ERROR', 'migration_error');
70
+ define('SG_NOTICE_NOT_WRITABLE_ERROR', 'restore_notwritable_error');
71
+
72
+ define('SG_WORDPRESS_CORE_TABLE', SG_ENV_DB_PREFIX . 'options');
73
+ define('SG_MAGENTO_CORE_TABLE', SG_ENV_DB_PREFIX . 'core_config_data');
74
+
75
+ //Backup file default prefix
76
+ define('SG_BACKUP_FILE_NAME_DEFAULT_PREFIX', 'sg_backup_');
77
+
78
+ //Default folder name for storage upload
79
+ define('SG_BACKUP_DEFAULT_FOLDER_NAME', 'sg_backups');
80
+
81
+ //Schedule action name prefix
82
+ define('SG_SCHEDULE_ACTION', 'backup_guard_schedule_action');
83
+
84
+ define('SG_SCHEDULER_DEFAULT_ID', 1);
85
+
86
+ //one day in seconds
87
+ define('SG_ONE_DAY_IN_SECONDS', 24 * 60 * 60);
88
+
89
+ define('SG_ENTRY_TYPE_FILE', 1);
90
+ define('SG_ENTRY_TYPE_CDR', 2);
91
+
92
+ define('SG_STATE_ACTION_PREPARING_STATE_FILE', 1);
93
+ define('SG_STATE_ACTION_LISTING_FILES', 2);
94
+ define('SG_STATE_ACTION_COMPRESSING_FILES', 3);
95
+ define('SG_STATE_ACTION_PREPARING_UPLOAD', 4);
96
+ define('SG_STATE_ACTION_UPLOADING_BACKUP', 5);
97
+ define('SG_STATE_ACTION_RESTORING_FILES', 6);
98
+ define('SG_STATE_ACTION_EXPORTING_SQL', 7);
99
+ define('SG_STATE_ACTION_RESTORING_DATABASE', 8);
100
+ define('SG_STATE_ACTION_MIGRATING_DATABASE', 9);
101
+
102
+ define('SG_STATE_TYPE_FILE', 1);
103
+ define('SG_STATE_TYPE_DB', 2);
104
+ define('SG_STATE_TYPE_UPLOAD', 3);
105
+ define('SG_STATE_TYPE_MIGRATE', 4);
106
+
107
+ define('SG_TREE_FILE_NAME', 'tree.json');
108
+ define('SG_STATE_FILE_NAME', 'state.json');
109
+
110
+ define('SG_RELOADER_STATE_FILE_NAME', 'reloaderState.json');
111
+
112
+ //File name to keep upload report for email notification
113
+ define('SG_REPORT_FILE_NAME', 'report.txt');
114
+
115
+ //2GB in bytes
116
+ define('SG_ARCHIVE_MAX_SIZE_32', 2000000000);
117
+
118
+ // Valid Archive minimum file size
119
+ define('SG_BACKUP_VALID_ARCHIVE_SIZE', 500);
120
+
121
+ // Backup methods
122
+ define('SG_BACKUP_METHOD_MIGRATE', 1);
123
+ define('SG_BACKUP_METHOD_STANDARD', 2);
124
+
125
+ define('SG_MIN_SUPPORTED_ARCHIVE_VERSION', 5);
126
+ define('SG_MAX_SUPPORTED_ARCHIVE_VERSION', 5);
127
+
128
+ //Reloader status
129
+ define('SG_RELOADER_STATUS_IDLE', 1);
130
+ define('SG_RELOADER_STATUS_RUNNING', 2);
131
+
132
+ //External restore
133
+ define('SG_EXTERNAL_RESTORE_FILE', 'bg_restore.php');
134
+
135
+ //License
136
+ define('SG_LICENSE_CHECK_TIMEOUT', 86400); //1 day
137
+
138
+ //Mail
139
+ define('SG_MAIL_BACKUP_SUCCESS_SUBJECT', 'Backup Succeeded');
140
+ define('SG_MAIL_BACKUP_COMPLETED_WITH_WARNINGS_SUBJECT', 'Backup completed with warnings');
141
+ define('SG_MAIL_BACKUP_FAIL_SUBJECT', 'Backup Failed');
142
+ define('SG_MAIL_BACKUP_CANCELED_SUBJECT', 'Backup Canceled');
143
+ define('SG_MAIL_RESTORE_SUCCESS_SUBJECT', 'Restore Succeeded');
144
+ define('SG_MAIL_RESTORE_FAIL_SUBJECT', 'Restore Failed');
145
+
146
+ define('SG_MAIL_UPLOAD_FAIL_SUBJECT', 'Upload Failed');
147
+ define('SG_MAIL_UPLOAD_SUCCESS_SUBJECT', 'Upload Succeeded');
148
+
149
+ //BackupGurad
150
+ define('SG_ACTION_STATUS_CREATED', 0);
151
+ define('SG_ACTION_STATUS_IN_PROGRESS_DB', 1);
152
+ define('SG_ACTION_STATUS_IN_PROGRESS_FILES', 2);
153
+ define('SG_ACTION_STATUS_FINISHED', 3);
154
+ define('SG_ACTION_STATUS_FINISHED_WARNINGS', 4);
155
+ define('SG_ACTION_STATUS_CANCELLING', 5);
156
+ define('SG_ACTION_STATUS_CANCELLED', 6);
157
+ define('SG_ACTION_STATUS_ERROR', 7);
158
+ define('SG_ACTION_TYPE_BACKUP', 1);
159
+ define('SG_ACTION_TYPE_RESTORE', 2);
160
+ define('SG_ACTION_TYPE_UPLOAD', 3);
161
+ define('SG_ACTION_PROGRESS_UPDATE_INTERVAL', 3); //in %
162
+ define('SG_BACKUP_DATABASE_INSERT_LIMIT', 10000);
163
+ define('SG_BACKUP_DOWNLOAD_TYPE_SGBP', 1);
164
+ define('SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG', 2);
165
+ define('SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG', 3);
166
+
167
+ define('SG_BACKUP_REVIEW_BACKUP_COUNT', 3);
168
+ define('SG_BACKUP_REVIEW_RESTORE_COUNT', 1);
169
+ define('SG_BACKUP_REVIEW_PERIOD', 30);
170
+
171
+ //The following constants can be modified at run-time
172
+ define('SG_ACTION_BACKUP_FILES_AVAILABLE', 1);
173
+ define('SG_ACTION_BACKUP_DATABASE_AVAILABLE', 1);
174
+ define('SG_BACKUP_IN_BACKGROUND_MODE', 0);
175
+ define('SG_BACKUP_UPLOAD_TO_STORAGES', ''); //list of storage ids separated by commas
176
+
177
+ //Database tables
178
+ define('SG_ACTION_TABLE_NAME', SG_ENV_DB_PREFIX . 'sg_action');
179
+ define('SG_CONFIG_TABLE_NAME', SG_ENV_DB_PREFIX . 'sg_config');
180
+ define('SG_SCHEDULE_TABLE_NAME', SG_ENV_DB_PREFIX . 'sg_schedule');
181
+
182
+ define('SG_SSH_KEY_FILE_FOLDER_NAME', 'sshKeyFolder/');
183
+
184
+ define('SG_SHOW_BACKUPGUARD_CLOUD', 0);
185
+
186
+ define('SG_FORGOT_PASSWORD_URL', 'https://backup-guard.com/admin/users/forgotPassword');
187
+ define('SG_MIGRATION_SERVICE_URL', 'https://backup-guard.com/services/migrate-wordpress');
188
+ define('BACKUP_GUARD_PRIVACY_POLICY_URL', "https://backup-guard.com/privacy");
189
+ define('BACKUP_GUARD_TERMS_OF_SERVICE_URL', 'https://backup-guard.com/terms');
190
+ define('BACKUP_GUARD_WORDPRESS_SUPPORT_URL', 'https://wordpress.org/support/plugin/backup/');
191
+ define('BACKUP_GUARD_WORDPRESS_REVIEW_URL', 'https://wordpress.org/support/plugin/backup/reviews/?filter=5');
192
+
193
+ define('SG_RESTORE_MODE_FULL', 'full');
194
+ define('SG_RESTORE_MODE_FILES', 'files');
195
+ define('SG_RESTORE_MODE_DB', 'db');
196
+
197
+ define('SG_BADGE_SILVER_PLUS_TEXT', "Silver +");
198
+ define('SG_BADGE_GOLD_PLUS_TEXT', "Gold +");
199
+ define('SG_BADGE_PLATINUM_TEXT', "Platinum");
200
+
201
+ define('SG_SILVER_TOOLTIP_TEXT', "This is a pro feature and it’s available starting from the Silver version!");
202
+ define('SG_GOLD_TOOLTIP_TEXT', "This is a pro feature and it’s available starting from the Gold version!");
203
+ define('SG_PLATINUM_TOOLTIP_TEXT', "This is a pro feature and it’s available only in Platinum version!");
204
+
205
+ define('BACKUP_GUARD_CAPABILITIES_FREE', 1);
206
+ define('BACKUP_GUARD_CAPABILITIES_SILVER', 2);
207
+ define('BACKUP_GUARD_CAPABILITIES_GOLD', 3);
208
+ define('BACKUP_GUARD_CAPABILITIES_PLATINUM', 4);
209
+
210
+ define('BG_SCHEDULE_INTERVAL_HOURLY', 0);
211
+ define('BG_SCHEDULE_INTERVAL_DAILY', 1);
212
+ define('BG_SCHEDULE_INTERVAL_WEEKLY', 2);
213
+ define('BG_SCHEDULE_INTERVAL_MONTHLY', 3);
214
+ define('BG_SCHEDULE_INTERVAL_YEARLY', 4);
215
+
216
+ define('BACKUP_GUARD_TEXTDOMAIN', 'backup-guard-pro');
217
+ define('BACKUP_GUARD_ONE_MB', 1000000);
218
+
219
+ define('BACKUP_GUARD_CLOUD_UPGRADE_URL', 'http://backup-guard.com/admin/billing/process/2');
220
+
221
+ define(
222
+ 'BACKUP_GUARD_DOWNLOAD_TYPE',
223
+ array(
224
+ 'LINK' => 0,
225
+ 'PHP' => 1,
226
+ 'SYMLINK' => 2
227
+ )
228
+ );
com/config/config.wordpress.demo.php CHANGED
@@ -1,74 +1,88 @@
1
- <?php
2
-
3
- define('SG_USER_MODE', 1);
4
-
5
- define('SG_FEATURE_DOWNLOAD_FROM_CLOUD', 1);
6
- define('SG_FEATURE_STORAGE', 1);
7
- define('SG_FEATURE_FTP', 1);
8
- define('SG_FEATURE_AMAZON', 1);
9
- define('SG_FEATURE_DROPBOX', 1);
10
- define('SG_FEATURE_GOOGLE_DRIVE', 1);
11
- define('SG_FEATURE_ONE_DRIVE', 1);
12
- define('SG_FEATURE_SCHEDULE', 1);
13
- define('SG_FEATURE_DELETE_LOCAL_BACKUP_AFTER_UPLOAD', 1);
14
- define('SG_FEATURE_ALERT_BEFORE_UPDATE', 1);
15
- define('SG_FEATURE_NUMBER_OF_BACKUPS_TO_KEEP', 1);
16
- define('SG_FEATURE_CUSTOM_BACKUP_NAME', 1);
17
- define('SG_FEATURE_SUBDIRECTORIES', 1);
18
- define('SG_FEATURE_BACKGROUND_MODE', 1);
19
- define('SG_FEATURE_NOTIFICATIONS', 1);
20
- define('SG_FEATURE_MULTI_SCHEDULE', 1);
21
- define('SG_FEATURE_SHOW_UPGRADE_PAGE', 0);
22
- define('SG_FEATURE_BACKUP_WITH_MIGRATION', 1);
23
- define('SG_FEATURE_NUMBER_OF_ROWS_TO_BACKUP', 1);
24
- define('SG_FEATURE_BACKUP_DELETION_WILL_ALSO_DELETE_FROM_CLOUD', 1);
25
- define('SG_FEATURE_SLECTIVE_RESTORE', 1);
26
- define('SG_FEATURE_HIDE_ADS', 1);
27
-
28
- //Storage
29
- define('SG_STORAGE_FTP', 1);
30
- define('SG_STORAGE_DROPBOX', 2);
31
- define('SG_STORAGE_GOOGLE_DRIVE', 3);
32
- define('SG_STORAGE_AMAZON', 4);
33
- define('SG_STORAGE_ONE_DRIVE', 5);
34
-
35
- define('SG_STORAGE_GOOGLE_DRIVE_CLIENT_ID', '1030123017859-vfdlqkjhiuuu5n36pbov93v9ruo6jpj5.apps.googleusercontent.com');
36
- define('SG_STORAGE_GOOGLE_DRIVE_SECRET', 'oUcZwC17q5ZSbYahnQkGYpyH');
37
- define('SG_STORAGE_GOOGLE_DRIVE_REDIRECT_URI', 'https://backup-guard.com/gdrive/');
38
- define('SG_STORAGE_DROPBOX_KEY', 'n3yhajm64h88m9t');
39
- define('SG_STORAGE_DROPBOX_SECRET', 's8crjkls7f9wqtd');
40
- define('SG_STORAGE_DROPBOX_CLIENT_ID', 'backup-guard');
41
- define('SG_STORAGE_DROPBOX_REDIRECT_URI', 'https://backup-guard.com/dropbox/');
42
-
43
- define('SG_STORAGE_ONE_DRIVE_SECRET', 'tdajnuNEibaaEdCB3OfaXQk');
44
- define('SG_STORAGE_ONE_DRIVE_REDIRECT_URI', "https://backup-guard.com/onedrive/");
45
- define('SG_STORAGE_ONE_DRIVE_CLIENT_ID', "48c83729-fb5b-43d5-a66d-9532f4dfefdb");
46
-
47
- $SG_BACKUP_AMAZON_REGIONS = array(
48
- array("name"=>"US East (N. Virginia)", "region"=>"us-east-1"),
49
- array("name"=>"US East (Ohio)", "region"=>"us-east-2"),
50
- array("name"=>"US West (Oregon)", "region"=>"us-west-2"),
51
- array("name"=>"US West (N. California)", "region"=>"us-west-1"),
52
- array("name"=>"EU (Ireland)", "region"=>"eu-west-1"),
53
- array("name"=>"EU (London)", "region"=>"eu-west-2"),
54
- array("name"=>"EU (Frankfurt)", "region"=>"eu-central-1"),
55
- array("name"=>"Asia Pacific (Singapore)", "region"=>"ap-southeast-1"),
56
- array("name"=>"Asia Pacific (Tokyo)", "region"=>"ap-northeast-1"),
57
- array("name"=>"Asia Pacific (Sydney)", "region"=>"ap-southeast-2"),
58
- array("name"=>"Asia Pacific (Seoul)", "region"=>"ap-northeast-2"),
59
- array("name"=>"Asia Pacific (Mumbai)", "region"=>"ap-south-1"),
60
- array("name"=>"South America (São Paulo)", "region"=>"sa-east-1"),
61
- array("name"=>"Canada (Central)", "region"=>"ca-central-1")
62
- );
63
-
64
- $SG_BACKUP_GOOGLE_REGIONS = array(
65
- array("name" => "Google Storage: EU", "region" => "google-storage"),
66
- array("name" => "Google Storage: USA", "region" => "google-storage-us"),
67
- array("name" => "Google Storage: Asia", "region" => "google-storage-asia")
68
- );
69
-
70
- define('SG_PRODUCT_IDENTIFIER', 'backup-guard-wp-platinum');
71
-
72
- //BackupGuard Support URL
73
- define('SG_BACKUP_SUPPORT_URL', 'https://help.backup-guard.com/en/');
74
- define('BG_UPGRADE_URL', 'https://backup-guard.com/products/security#pricing');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ define('SG_USER_MODE', 1);
4
+
5
+ define('SG_FEATURE_DOWNLOAD_FROM_CLOUD', 1);
6
+ define('SG_FEATURE_STORAGE', 1);
7
+ define('SG_FEATURE_FTP', 1);
8
+ define('SG_FEATURE_AMAZON', 1);
9
+ define('SG_FEATURE_DROPBOX', 1);
10
+ define('SG_FEATURE_GOOGLE_DRIVE', 1);
11
+ define('SG_FEATURE_ONE_DRIVE', 1);
12
+ define('SG_FEATURE_P_CLOUD', 1);
13
+ define('SG_FEATURE_BOX', 1);
14
+ define('SG_FEATURE_SCHEDULE', 1);
15
+ define('SG_FEATURE_DELETE_LOCAL_BACKUP_AFTER_UPLOAD', 1);
16
+ define('SG_FEATURE_ALERT_BEFORE_UPDATE', 1);
17
+ define('SG_FEATURE_NUMBER_OF_BACKUPS_TO_KEEP', 1);
18
+ define('SG_FEATURE_CUSTOM_BACKUP_NAME', 1);
19
+ define('SG_FEATURE_SUBDIRECTORIES', 1);
20
+ define('SG_FEATURE_BACKGROUND_MODE', 1);
21
+ define('SG_FEATURE_NOTIFICATIONS', 1);
22
+ define('SG_FEATURE_MULTI_SCHEDULE', 1);
23
+ define('SG_FEATURE_SHOW_UPGRADE_PAGE', 0);
24
+ define('SG_FEATURE_BACKUP_WITH_MIGRATION', 1);
25
+ define('SG_FEATURE_NUMBER_OF_ROWS_TO_BACKUP', 1);
26
+ define('SG_FEATURE_BACKUP_DELETION_WILL_ALSO_DELETE_FROM_CLOUD', 1);
27
+ define('SG_FEATURE_SLECTIVE_RESTORE', 1);
28
+ define('SG_FEATURE_HIDE_ADS', 1);
29
+
30
+ //Storage
31
+ define('SG_STORAGE_FTP', 1);
32
+ define('SG_STORAGE_DROPBOX', 2);
33
+ define('SG_STORAGE_GOOGLE_DRIVE', 3);
34
+ define('SG_STORAGE_AMAZON', 4);
35
+ define('SG_STORAGE_ONE_DRIVE', 5);
36
+ define('SG_STORAGE_P_CLOUD', 7);
37
+ define('SG_STORAGE_BOX', 8);
38
+
39
+ define('SG_STORAGE_GOOGLE_DRIVE_CLIENT_ID', '1030123017859-vfdlqkjhiuuu5n36pbov93v9ruo6jpj5.apps.googleusercontent.com');
40
+ define('SG_STORAGE_GOOGLE_DRIVE_SECRET', 'oUcZwC17q5ZSbYahnQkGYpyH');
41
+ define('SG_STORAGE_GOOGLE_DRIVE_REDIRECT_URI', 'https://backup-guard.com/gdrive/');
42
+ define('SG_STORAGE_DROPBOX_KEY', 'n3yhajm64h88m9t');
43
+ define('SG_STORAGE_DROPBOX_SECRET', 's8crjkls7f9wqtd');
44
+ define('SG_STORAGE_DROPBOX_CLIENT_ID', 'backup-guard');
45
+ define('SG_STORAGE_DROPBOX_REDIRECT_URI', 'https://backup-guard.com/dropbox/');
46
+
47
+ define('SG_STORAGE_ONE_DRIVE_SECRET', 'tdajnuNEibaaEdCB3OfaXQk');
48
+ define('SG_STORAGE_ONE_DRIVE_REDIRECT_URI', "https://backup-guard.com/onedrive/");
49
+ define('SG_STORAGE_ONE_DRIVE_CLIENT_ID', "48c83729-fb5b-43d5-a66d-9532f4dfefdb");
50
+
51
+
52
+ define('SG_STORAGE_P_CLOUD_SECRET', '4kCf1CW3euu86kLEjL0rh7wdMFfV');
53
+ define('SG_STORAGE_P_CLOUD_REDIRECT_URI', "https://backup-guard.com/pcloud");
54
+ define('SG_STORAGE_P_CLOUD_CLIENT_ID', "dr1LOH66Yu8");
55
+
56
+
57
+ define('SG_STORAGE_BOX_SECRET', 'Fv3guGigz9gTkHGsNJBilgm9oFlRARn0');
58
+ define('SG_STORAGE_BOX_REDIRECT_URI', "https://backup-guard.com/box");
59
+ define('SG_STORAGE_BOX_CLIENT_ID', "4e92lvc5g8ir2se7c9lmzhv1ahn3knfy");
60
+
61
+ $SG_BACKUP_AMAZON_REGIONS = array(
62
+ array("name"=>"US East (N. Virginia)", "region"=>"us-east-1"),
63
+ array("name"=>"US East (Ohio)", "region"=>"us-east-2"),
64
+ array("name"=>"US West (Oregon)", "region"=>"us-west-2"),
65
+ array("name"=>"US West (N. California)", "region"=>"us-west-1"),
66
+ array("name"=>"EU (Ireland)", "region"=>"eu-west-1"),
67
+ array("name"=>"EU (London)", "region"=>"eu-west-2"),
68
+ array("name"=>"EU (Frankfurt)", "region"=>"eu-central-1"),
69
+ array("name"=>"Asia Pacific (Singapore)", "region"=>"ap-southeast-1"),
70
+ array("name"=>"Asia Pacific (Tokyo)", "region"=>"ap-northeast-1"),
71
+ array("name"=>"Asia Pacific (Sydney)", "region"=>"ap-southeast-2"),
72
+ array("name"=>"Asia Pacific (Seoul)", "region"=>"ap-northeast-2"),
73
+ array("name"=>"Asia Pacific (Mumbai)", "region"=>"ap-south-1"),
74
+ array("name"=>"South America (São Paulo)", "region"=>"sa-east-1"),
75
+ array("name"=>"Canada (Central)", "region"=>"ca-central-1")
76
+ );
77
+
78
+ $SG_BACKUP_GOOGLE_REGIONS = array(
79
+ array("name" => "Google Storage: EU", "region" => "google-storage"),
80
+ array("name" => "Google Storage: USA", "region" => "google-storage-us"),
81
+ array("name" => "Google Storage: Asia", "region" => "google-storage-asia")
82
+ );
83
+
84
+ define('SG_PRODUCT_IDENTIFIER', 'backup-guard-wp-platinum');
85
+
86
+ //BackupGuard Support URL
87
+ define('SG_BACKUP_SUPPORT_URL', 'https://help.backup-guard.com/en/');
88
+ define('BG_UPGRADE_URL', 'https://backup-guard.com/products/security#pricing');
com/config/config.wordpress.free.php CHANGED
@@ -1,44 +1,48 @@
1
- <?php
2
-
3
- define('SG_FEATURE_DOWNLOAD_FROM_CLOUD', 0);
4
- define('SG_FEATURE_STORAGE', 1);
5
- define('SG_FEATURE_FTP', 0);
6
- define('SG_FEATURE_AMAZON', 0);
7
- define('SG_FEATURE_DROPBOX', 1);
8
- define('SG_FEATURE_GOOGLE_DRIVE', 0);
9
- define('SG_FEATURE_ONE_DRIVE', 0);
10
- define('SG_FEATURE_SCHEDULE', 1);
11
- define('SG_FEATURE_DELETE_LOCAL_BACKUP_AFTER_UPLOAD', 0);
12
- define('SG_FEATURE_ALERT_BEFORE_UPDATE', 0);
13
- define('SG_FEATURE_NUMBER_OF_BACKUPS_TO_KEEP', 0);
14
- define('SG_FEATURE_CUSTOM_BACKUP_NAME', 0);
15
- define('SG_FEATURE_SUBDIRECTORIES', 0);
16
- define('SG_FEATURE_BACKGROUND_MODE', 0);
17
- define('SG_FEATURE_NOTIFICATIONS', 0);
18
- define('SG_FEATURE_MULTI_SCHEDULE', 0);
19
- define('SG_FEATURE_SHOW_UPGRADE_PAGE', 1);
20
- define('SG_FEATURE_BACKUP_WITH_MIGRATION', 0);
21
- define('SG_FEATURE_NUMBER_OF_ROWS_TO_BACKUP', 1);
22
- define('SG_FEATURE_BACKUP_DELETION_WILL_ALSO_DELETE_FROM_CLOUD', 0);
23
- define('SG_FEATURE_SLECTIVE_RESTORE', 0);
24
- define('SG_FEATURE_HIDE_ADS', 0);
25
-
26
- //Storage
27
- define('SG_STORAGE_FTP', 1);
28
- define('SG_STORAGE_DROPBOX', 2);
29
- define('SG_STORAGE_GOOGLE_DRIVE', 3);
30
- define('SG_STORAGE_AMAZON', 4);
31
- define('SG_STORAGE_ONE_DRIVE', 5);
32
- define('SG_STORAGE_BACKUP_GUARD', 6);
33
-
34
- define('SG_STORAGE_DROPBOX_KEY', 'n3yhajm64h88m9t');
35
- define('SG_STORAGE_DROPBOX_SECRET', 's8crjkls7f9wqtd');
36
- define('SG_STORAGE_DROPBOX_CLIENT_ID', 'backup-guard');
37
- define('SG_STORAGE_DROPBOX_REDIRECT_URI', 'https://backup-guard.com/dropbox/');
38
- define('SG_FEATURE_BACKUP_GUARD', 1);
39
-
40
- define('SG_PRODUCT_IDENTIFIER', 'backup-guard-wp-free');
41
-
42
- //BackupGuard Support URL
43
- define('SG_BACKUP_SUPPORT_URL', 'https://help.backup-guard.com/en/');
44
- define('BG_UPGRADE_URL', 'https://backup-guard.com/products/backup-wordpress#pricing');
 
 
 
 
1
+ <?php
2
+
3
+ define('SG_FEATURE_DOWNLOAD_FROM_CLOUD', 0);
4
+ define('SG_FEATURE_STORAGE', 1);
5
+ define('SG_FEATURE_FTP', 0);
6
+ define('SG_FEATURE_AMAZON', 0);
7
+ define('SG_FEATURE_DROPBOX', 1);
8
+ define('SG_FEATURE_GOOGLE_DRIVE', 0);
9
+ define('SG_FEATURE_ONE_DRIVE', 0);
10
+ define('SG_FEATURE_P_CLOUD', 0);
11
+ define('SG_FEATURE_BOX', 0);
12
+ define('SG_FEATURE_SCHEDULE', 1);
13
+ define('SG_FEATURE_DELETE_LOCAL_BACKUP_AFTER_UPLOAD', 0);
14
+ define('SG_FEATURE_ALERT_BEFORE_UPDATE', 0);
15
+ define('SG_FEATURE_NUMBER_OF_BACKUPS_TO_KEEP', 0);
16
+ define('SG_FEATURE_CUSTOM_BACKUP_NAME', 0);
17
+ define('SG_FEATURE_SUBDIRECTORIES', 0);
18
+ define('SG_FEATURE_BACKGROUND_MODE', 0);
19
+ define('SG_FEATURE_NOTIFICATIONS', 0);
20
+ define('SG_FEATURE_MULTI_SCHEDULE', 0);
21
+ define('SG_FEATURE_SHOW_UPGRADE_PAGE', 1);
22
+ define('SG_FEATURE_BACKUP_WITH_MIGRATION', 0);
23
+ define('SG_FEATURE_NUMBER_OF_ROWS_TO_BACKUP', 1);
24
+ define('SG_FEATURE_BACKUP_DELETION_WILL_ALSO_DELETE_FROM_CLOUD', 0);
25
+ define('SG_FEATURE_SLECTIVE_RESTORE', 0);
26
+ define('SG_FEATURE_HIDE_ADS', 0);
27
+
28
+ //Storage
29
+ define('SG_STORAGE_FTP', 1);
30
+ define('SG_STORAGE_DROPBOX', 2);
31
+ define('SG_STORAGE_GOOGLE_DRIVE', 3);
32
+ define('SG_STORAGE_AMAZON', 4);
33
+ define('SG_STORAGE_ONE_DRIVE', 5);
34
+ define('SG_STORAGE_BACKUP_GUARD', 6);
35
+ define('SG_STORAGE_P_CLOUD', 7);
36
+ define('SG_STORAGE_BOX', 8);
37
+
38
+ define('SG_STORAGE_DROPBOX_KEY', 'n3yhajm64h88m9t');
39
+ define('SG_STORAGE_DROPBOX_SECRET', 's8crjkls7f9wqtd');
40
+ define('SG_STORAGE_DROPBOX_CLIENT_ID', 'backup-guard');
41
+ define('SG_STORAGE_DROPBOX_REDIRECT_URI', 'https://backup-guard.com/dropbox/');
42
+ define('SG_FEATURE_BACKUP_GUARD', 1);
43
+
44
+ define('SG_PRODUCT_IDENTIFIER', 'backup-guard-wp-free');
45
+
46
+ //BackupGuard Support URL
47
+ define('SG_BACKUP_SUPPORT_URL', 'https://help.backup-guard.com/en/');
48
+ define('BG_UPGRADE_URL', 'https://backup-guard.com/products/backup-wordpress#pricing');
com/config/config.wordpress.php CHANGED
@@ -1,124 +1,124 @@
1
- <?php
2
-
3
- global $wp_version, $wpdb;
4
- define('SG_ENV_WORDPRESS', 'Wordpress');
5
- define('SG_ENV_MAGENTO', 'Magento');
6
- define('SG_ENV_VERSION', $wp_version);
7
- define('SG_ENV_ADAPTER', SG_ENV_WORDPRESS);
8
- define('SG_ENV_DB_PREFIX', $wpdb->prefix);
9
-
10
- require_once(dirname(__FILE__).'/config.php');
11
-
12
- define('SG_ENV_CORE_TABLE', SG_WORDPRESS_CORE_TABLE);
13
- //Database
14
- define('SG_DB_ADAPTER', SG_ENV_ADAPTER);
15
- define('SG_DB_NAME', $wpdb->dbname);
16
- define('SG_BACKUP_DATABASE_EXCLUDE', SG_ACTION_TABLE_NAME.','.SG_CONFIG_TABLE_NAME.','.SG_SCHEDULE_TABLE_NAME);
17
-
18
- //Mail
19
- define('SG_MAIL_TEMPLATES_PATH', realpath(SG_APP_PATH.'../public/templates').'/');
20
- define('SG_MAIL_BACKUP_TEMPLATE', 'mail_backup.php');
21
- define('SG_MAIL_RESTORE_TEMPLATE', 'mail_restore.php');
22
- define('SG_MAIL_UPLOAD_TEMPLATE', 'mail_upload.php');
23
-
24
- //Notice
25
- define('SG_NOTICE_TEMPLATES_PATH', realpath(SG_APP_PATH.'../public/templates/notices').'/');
26
-
27
- //BackupGuard SDK
28
- define('SG_BACKUPGUARD_CLIENT_ID', 'wordpress');
29
- define('SG_BACKUPGUARD_CLIENT_SECRET', 'AAPQEgsyQrt6wqDBk7fpa24NP6W43evtayxXmUqS');
30
-
31
- define('SG_BACKUPGUARD_UPLOAD_CLIENT_ID', 'backupguard');
32
- define('SG_BACKUPGUARD_UPLOAD_CLIENT_SECRET', 'e9503d56b06b95241abf68eaa0d13194aae9503e');
33
-
34
- define('SG_BACKUPGUARD_UPLOAD_SCOPE', 'create_backups');
35
-
36
- //Backup
37
- $wpContent = basename(WP_CONTENT_DIR);
38
- $wpPlugins = basename(WP_PLUGIN_DIR);
39
- $wpThemes = basename(get_theme_root());
40
-
41
- $upload_dir = wp_upload_dir();
42
- $wpUploads = basename($upload_dir['basedir']);
43
-
44
- $dbCharset = 'utf8';
45
- if (@constant("DB_CHARSET")) {
46
- $dbCharset = DB_CHARSET;
47
- }
48
-
49
- //Define same constants in magento config file
50
- define('SG_UPLOAD_PATH', $upload_dir['basedir']);
51
- define('SG_UPLOAD_URL', $upload_dir['baseurl']);
52
- define('SG_SITE_URL', get_site_url());
53
- define('SG_HOME_URL', get_home_url());
54
- define('SG_DB_CHARSET', $dbCharset);
55
- define('SG_MYSQL_VERSION', $wpdb->db_version());
56
-
57
- $type = "standard";
58
-
59
- if (is_multisite()) {
60
- $type = "multisite";
61
- }
62
-
63
- define('SG_SITE_TYPE', $type);
64
-
65
- define('SG_PING_FILE_PATH', $upload_dir['basedir'].'/backup-guard/ping.json');
66
-
67
- //Symlink download
68
- define('SG_SYMLINK_PATH', $upload_dir['basedir'].'/sg_symlinks/');
69
- define('SG_SYMLINK_URL', $upload_dir['baseurl'].'/sg_symlinks/');
70
-
71
- define('SG_APP_ROOT_DIRECTORY', realpath(dirname(WP_CONTENT_DIR)."/")); //Wordpress Define
72
-
73
- $sgBackupFilePathsExclude = array(
74
- $wpContent.'/'.$wpPlugins.'/backup/',
75
- $wpContent.'/'.$wpPlugins.'/backup-guard-pro/',
76
- $wpContent.'/'.$wpPlugins.'/backup-guard-silver/',
77
- $wpContent.'/'.$wpPlugins.'/backup-guard-gold/',
78
- $wpContent.'/'.$wpPlugins.'/backup-guard-platinum/',
79
- $wpContent.'/'.$wpUploads.'/backup-guard/',
80
- $wpContent.'/'.$wpUploads.'/sg_symlinks/',
81
- $wpContent.'/ai1wm-backups/',
82
- $wpContent.'/aiowps_backups/',
83
- $wpContent.'/Dropbox_Backup/',
84
- $wpContent.'/updraft/',
85
- $wpContent.'/upsupsystic/',
86
- $wpContent.'/wpbackitup_backups/',
87
- $wpContent.'/wpbackitup_restore/',
88
- $wpContent.'/backups/',
89
- $wpContent.'/cache/',
90
- $wpContent.'/'.$wpUploads.'/wp-clone/',
91
- $wpContent.'/'.$wpUploads.'/wp-staging/',
92
- $wpContent.'/'.$wpUploads.'/wp-migrate-db/',
93
- $wpContent.'/'.$wpUploads.'/db-backup/',
94
- $wpContent.'/'.$wpPlugins.'/wordpress-move/backup/',
95
- $wpContent.'/as3b_backups/',
96
- $wpContent.'/'.$wpUploads.'/backupbuddy_backups/',
97
- $wpContent.'/backups-dup-pro/',
98
- $wpContent.'/managewp/backups/',
99
- $wpContent.'/'.$wpUploads.'/backupbuddy_temp/',
100
- $wpContent.'/'.$wpUploads.'/pb_backupbuddy/',
101
- $wpContent.'/'.$wpUploads.'/snapshots/',
102
- $wpContent.'/debug.log',
103
- $wpContent.'/backup-db/'
104
- );
105
-
106
- define('SG_BACKUP_FILE_PATHS_EXCLUDE', implode(',', $sgBackupFilePathsExclude));
107
- define('SG_BACKUP_DIRECTORY', $upload_dir['basedir'].'/backup-guard/'); //backups will be stored here
108
- define('SG_BACKUP_DIRECTORY_URL', SG_UPLOAD_URL.'/backup-guard/');
109
-
110
- //Storage
111
- define('SG_STORAGE_UPLOAD_CRON', '');
112
-
113
- define('SG_BACKUP_FILE_PATHS', $wpContent.','.$wpContent.'/'.$wpPlugins.','.$wpContent.'/'.$wpThemes.','.$wpContent.'/'.$wpUploads);
114
-
115
- define('SG_WP_OPTIONS_MIGRATABLE_VALUES', 'user_roles');
116
- define('SG_WP_USERMETA_MIGRATABLE_VALUES', 'capabilities,user_level,dashboard_quick_press_last_post_id,user-settings,user-settings-time');
117
- define('SG_MISC_MIGRATABLE_TABLES', SG_ENV_DB_PREFIX.'options,'.SG_ENV_DB_PREFIX.'usermeta');
118
- define('SG_MULTISITE_TABLES_TO_MIGRATE', SG_ENV_DB_PREFIX.'blogs,'.SG_ENV_DB_PREFIX.'site');
119
- define('SG_SUBDOMAIN_INSTALL', defined('SUBDOMAIN_INSTALL')?SUBDOMAIN_INSTALL:false);
120
-
121
-
122
- define('SG_BACKUP_PRODUCTS_URL', 'https://backup-guard.com/admin/products/view');
123
-
124
- define('SG_BACKUP_GUARD_SECURITY_EXTENSION', 'backup-guard-security');
1
+ <?php
2
+
3
+ global $wp_version, $wpdb;
4
+ define('SG_ENV_WORDPRESS', 'Wordpress');
5
+ define('SG_ENV_MAGENTO', 'Magento');
6
+ define('SG_ENV_VERSION', $wp_version);
7
+ define('SG_ENV_ADAPTER', SG_ENV_WORDPRESS);
8
+ define('SG_ENV_DB_PREFIX', $wpdb->prefix);
9
+
10
+ require_once(dirname(__FILE__).'/config.php');
11
+
12
+ define('SG_ENV_CORE_TABLE', SG_WORDPRESS_CORE_TABLE);
13
+ //Database
14
+ define('SG_DB_ADAPTER', SG_ENV_ADAPTER);
15
+ define('SG_DB_NAME', $wpdb->dbname);
16
+ define('SG_BACKUP_DATABASE_EXCLUDE', SG_ACTION_TABLE_NAME.','.SG_CONFIG_TABLE_NAME.','.SG_SCHEDULE_TABLE_NAME);
17
+
18
+ //Mail
19
+ define('SG_MAIL_TEMPLATES_PATH', realpath(SG_APP_PATH.'../public/templates').'/');
20
+ define('SG_MAIL_BACKUP_TEMPLATE', 'mail_backup.php');
21
+ define('SG_MAIL_RESTORE_TEMPLATE', 'mail_restore.php');
22
+ define('SG_MAIL_UPLOAD_TEMPLATE', 'mail_upload.php');
23
+
24
+ //Notice
25
+ define('SG_NOTICE_TEMPLATES_PATH', realpath(SG_APP_PATH.'../public/templates/notices').'/');
26
+
27
+ //BackupGuard SDK
28
+ define('SG_BACKUPGUARD_CLIENT_ID', 'wordpress');
29
+ define('SG_BACKUPGUARD_CLIENT_SECRET', 'AAPQEgsyQrt6wqDBk7fpa24NP6W43evtayxXmUqS');
30
+
31
+ define('SG_BACKUPGUARD_UPLOAD_CLIENT_ID', 'backupguard');
32
+ define('SG_BACKUPGUARD_UPLOAD_CLIENT_SECRET', 'e9503d56b06b95241abf68eaa0d13194aae9503e');
33
+
34
+ define('SG_BACKUPGUARD_UPLOAD_SCOPE', 'create_backups');
35
+
36
+ //Backup
37
+ $wpContent = basename(WP_CONTENT_DIR);
38
+ $wpPlugins = basename(WP_PLUGIN_DIR);
39
+ $wpThemes = basename(get_theme_root());
40
+
41
+ $upload_dir = wp_upload_dir();
42
+ $wpUploads = basename($upload_dir['basedir']);
43
+
44
+ $dbCharset = 'utf8';
45
+ if (@constant("DB_CHARSET")) {
46
+ $dbCharset = DB_CHARSET;
47
+ }
48
+
49
+ //Define same constants in magento config file
50
+ define('SG_UPLOAD_PATH', $upload_dir['basedir']);
51
+ define('SG_UPLOAD_URL', $upload_dir['baseurl']);
52
+ define('SG_SITE_URL', get_site_url());
53
+ define('SG_HOME_URL', get_home_url());
54
+ define('SG_DB_CHARSET', $dbCharset);
55
+ define('SG_MYSQL_VERSION', $wpdb->db_version());
56
+
57
+ $type = "standard";
58
+
59
+ if (is_multisite()) {
60
+ $type = "multisite";
61
+ }
62
+
63
+ define('SG_SITE_TYPE', $type);
64
+
65
+ define('SG_PING_FILE_PATH', $upload_dir['basedir'].'/backup-guard/ping.json');
66
+
67
+ //Symlink download
68
+ define('SG_SYMLINK_PATH', $upload_dir['basedir'].'/sg_symlinks/');
69
+ define('SG_SYMLINK_URL', $upload_dir['baseurl'].'/sg_symlinks/');
70
+
71
+ define('SG_APP_ROOT_DIRECTORY', realpath(dirname(WP_CONTENT_DIR)."/")); //Wordpress Define
72
+
73
+ $sgBackupFilePathsExclude = array(
74
+ $wpContent.'/'.$wpPlugins.'/backup/',
75
+ $wpContent.'/'.$wpPlugins.'/backup-guard-pro/',
76
+ $wpContent.'/'.$wpPlugins.'/backup-guard-silver/',
77
+ $wpContent.'/'.$wpPlugins.'/backup-guard-gold/',
78
+ $wpContent.'/'.$wpPlugins.'/backup-guard-platinum/',
79
+ $wpContent.'/'.$wpUploads.'/backup-guard/',
80
+ $wpContent.'/'.$wpUploads.'/sg_symlinks/',
81
+ $wpContent.'/ai1wm-backups/',
82
+ $wpContent.'/aiowps_backups/',
83
+ $wpContent.'/Dropbox_Backup/',
84
+ $wpContent.'/updraft/',
85
+ $wpContent.'/upsupsystic/',
86
+ $wpContent.'/wpbackitup_backups/',
87
+ $wpContent.'/wpbackitup_restore/',
88
+ $wpContent.'/backups/',
89
+ $wpContent.'/cache/',
90
+ $wpContent.'/'.$wpUploads.'/wp-clone/',
91
+ $wpContent.'/'.$wpUploads.'/wp-staging/',
92
+ $wpContent.'/'.$wpUploads.'/wp-migrate-db/',
93
+ $wpContent.'/'.$wpUploads.'/db-backup/',
94
+ $wpContent.'/'.$wpPlugins.'/wordpress-move/backup/',
95
+ $wpContent.'/as3b_backups/',
96
+ $wpContent.'/'.$wpUploads.'/backupbuddy_backups/',
97
+ $wpContent.'/backups-dup-pro/',
98
+ $wpContent.'/managewp/backups/',
99
+ $wpContent.'/'.$wpUploads.'/backupbuddy_temp/',
100
+ $wpContent.'/'.$wpUploads.'/pb_backupbuddy/',
101
+ $wpContent.'/'.$wpUploads.'/snapshots/',
102
+ $wpContent.'/debug.log',
103
+ $wpContent.'/backup-db/'
104
+ );
105
+
106
+ define('SG_BACKUP_FILE_PATHS_EXCLUDE', implode(',', $sgBackupFilePathsExclude));
107
+ define('SG_BACKUP_DIRECTORY', $upload_dir['basedir'].'/backup-guard/'); //backups will be stored here
108
+ define('SG_BACKUP_DIRECTORY_URL', SG_UPLOAD_URL.'/backup-guard/');
109
+
110
+ //Storage
111
+ define('SG_STORAGE_UPLOAD_CRON', '');
112
+
113
+ define('SG_BACKUP_FILE_PATHS', $wpContent.','.$wpContent.'/'.$wpPlugins.','.$wpContent.'/'.$wpThemes.','.$wpContent.'/'.$wpUploads);
114
+
115
+ define('SG_WP_OPTIONS_MIGRATABLE_VALUES', 'user_roles');
116
+ define('SG_WP_USERMETA_MIGRATABLE_VALUES', 'capabilities,user_level,dashboard_quick_press_last_post_id,user-settings,user-settings-time');
117
+ define('SG_MISC_MIGRATABLE_TABLES', SG_ENV_DB_PREFIX.'options,'.SG_ENV_DB_PREFIX.'usermeta');
118
+ define('SG_MULTISITE_TABLES_TO_MIGRATE', SG_ENV_DB_PREFIX.'blogs,'.SG_ENV_DB_PREFIX.'site');
119
+ define('SG_SUBDOMAIN_INSTALL', defined('SUBDOMAIN_INSTALL')?SUBDOMAIN_INSTALL:false);
120
+
121
+
122
+ define('SG_BACKUP_PRODUCTS_URL', 'https://backup-guard.com/admin/products/view');
123
+
124
+ define('SG_BACKUP_GUARD_SECURITY_EXTENSION', 'backup-guard-security');
com/core/SGBoot.php CHANGED
@@ -1,143 +1,148 @@
1
  <?php
 
2
  //check PHP version
3
  if (version_compare(PHP_VERSION, '5.3.3', '<')) {
4
- die('PHP >=5.3.3 version required.');
5
  }
6
 
7
- require_once(SG_EXCEPTION_PATH.'SGException.php');
8
- require_once(SG_CORE_PATH.'functions.php');
9
- backupGuardIncludeFile(SG_CORE_PATH.'functions.silver.php');
10
- backupGuardIncludeFile(SG_CORE_PATH.'functions.gold.php');
11
- backupGuardIncludeFile(SG_CORE_PATH.'functions.platinum.php');
12
- require_once(SG_CORE_PATH.'SGPing.php');
13
- require_once(SG_DATABASE_PATH.'SGDatabase.php');
14
- require_once(SG_CORE_PATH.'SGConfig.php');
15
- require_once(SG_NOTICE_PATH.'SGNotice.php');
16
- require_once(SG_NOTICE_PATH.'SGNoticeHandler.php');
17
- backupGuardIncludeFile(SG_BACKUP_PATH.'SGBackupSchedule.php');
18
- backupGuardIncludeFile(SG_EXTENSION_PATH.'SGExtension.php');
19
 
20
  class SGBoot
21
  {
22
- public static $executionTimeLimit = 0;
23
- public static $memoryLimit = 0;
24
-
25
- public static function init()
26
- {
27
- //get current execution time limit
28
- self::$executionTimeLimit = ini_get('max_execution_time');
29
-
30
- //get current memory limit
31
- self::$memoryLimit = ini_get('memory_limit');
32
-
33
- //remove execution time limit
34
- @ini_set('max_execution_time', 0);
35
-
36
- //change initial memory limit
37
- @ini_set('memory_limit', '512M');
38
-
39
- //don't let server to abort scripts
40
- @ignore_user_abort(true);
41
-
42
- //load all config variables from database
43
- SGConfig::getAll();
44
-
45
- // TODO: remove and check banners logic
46
- SGConfig::set('closeReviewBanner', 1);
47
-
48
- try {
49
- //check minimum requirements
50
- self::checkMinimumRequirements();
51
-
52
- //prepare directory for backups
53
- self::prepare();
54
- }
55
- catch (SGException $exception) {
56
- die($exception);
57
- }
58
- }
59
-
60
- public static function didInstallForFirstTime()
61
- {
62
- self::setPluginInstallUpdateDate();
63
- }
64
-
65
- public static function didUpdatePluginVersion()
66
- {
67
- self::setPluginInstallUpdateDate();
68
- }
69
-
70
- public static function setPluginInstallUpdateDate()
71
- {
72
- SGConfig::set('SG_PLUGIN_INSTALL_UPDATE_DATE', time());
73
- }
74
-
75
- private static function installConfigTable($sgdb)
76
- {
77
- $dbEngine = backupGuardGetDatabaseEngine();
78
- //create config table
79
- $res = $sgdb->query(
80
- 'CREATE TABLE IF NOT EXISTS `'.SG_CONFIG_TABLE_NAME.'` (
 
 
 
81
  `ckey` varchar(100) NOT NULL,
82
  `cvalue` text NOT NULL,
83
  PRIMARY KEY (`ckey`)
84
- ) ENGINE='.$dbEngine.' DEFAULT CHARSET=utf8;'
85
- );
86
- if ($res===false) {
87
- return false;
88
- }
89
-
90
- //delete all content from config table (just in case if wasn't dropped)
91
- $sgdb->query('DELETE FROM `'.SG_CONFIG_TABLE_NAME.'`;');
92
-
93
- //populate config table
94
- $res = $sgdb->query(
95
- "INSERT INTO `".SG_CONFIG_TABLE_NAME."` VALUES
96
- ('SG_BACKUP_GUARD_VERSION','".SG_BACKUP_GUARD_VERSION."'),
97
  ('SG_BACKUP_WITH_RELOADINGS', '1'),
98
  ('SG_BACKUP_SYNCHRONOUS_STORAGE_UPLOAD','1'),
99
  ('SG_NOTIFICATIONS_ENABLED','0'),
100
  ('SG_SHOW_STATISTICS_WIDGET','1'),
101
  ('SG_BACKUP_SEND_USAGE_STATUS','0'),
102
  ('SG_NOTIFICATIONS_EMAIL_ADDRESS',''),
103
- ('SG_STORAGE_BACKUPS_FOLDER_NAME','sg_backups');"
104
- );
105
- if ($res===false) {
106
- return false;
107
- }
108
-
109
- return true;
110
- }
111
-
112
- private static function installScheduleTable($sgdb)
113
- {
 
114
  $dbEngine = backupGuardGetDatabaseEngine();
115
 
116
- //create schedule table
117
- $res = $sgdb->query(
118
- 'CREATE TABLE IF NOT EXISTS `'.SG_SCHEDULE_TABLE_NAME.'` (
119
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
120
  `label` varchar(255) NOT NULL,
121
  `status` tinyint(3) unsigned NOT NULL,
122
  `schedule_options` varchar(255) NOT NULL,
123
  `backup_options` text NOT NULL,
124
  PRIMARY KEY (`id`)
125
- ) ENGINE='.$dbEngine.' DEFAULT CHARSET=utf8;'
126
- );
127
- if ($res===false) {
128
- return false;
129
- }
130
 
131
- return true;
132
- }
133
 
134
- private static function installActionTable($sgdb)
135
- {
136
  $dbEngine = backupGuardGetDatabaseEngine();
137
 
138
- //create action table
139
- $res = $sgdb->query(
140
- "CREATE TABLE IF NOT EXISTS `".SG_ACTION_TABLE_NAME."` (
141
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
142
  `name` varchar(255) NOT NULL,
143
  `type` tinyint(3) unsigned NOT NULL,
@@ -148,164 +153,160 @@ class SGBoot
148
  `update_date` datetime DEFAULT NULL,
149
  `options` text NOT NULL,
150
  PRIMARY KEY (`id`)
151
- ) ENGINE=".$dbEngine." DEFAULT CHARSET=utf8;"
152
- );
153
- if ($res===false) {
154
- return false;
155
- }
156
-
157
- return true;
158
- }
159
-
160
- public static function install()
161
- {
162
- $sgdb = SGDatabase::getInstance();
163
-
164
- try {
165
- if (!self::installConfigTable($sgdb)) {
166
- throw new SGExceptionDatabaseError('Could not install config table');
167
- }
168
-
169
- if (!self::installScheduleTable($sgdb)) {
170
- throw new SGExceptionDatabaseError('Could not install schedule table');
171
- }
172
-
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();
212
- foreach ($schedules as $schedule) {
213
- SGBackupSchedule::remove($schedule['id']);
214
- }
215
- }
216
-
217
- public static function uninstall($deleteBackups = false)
218
- {
219
- try {
220
- @unlink(SG_PING_FILE_PATH);
221
-
222
- if (self::isFeatureAvailable('SCHEDULE')) {
223
- self::cleanupSchedules();
224
- }
225
-
226
- $sgdb = SGDatabase::getInstance();
227
-
228
- //drop config table
229
- $res = $sgdb->query('DROP TABLE IF EXISTS `'.SG_CONFIG_TABLE_NAME.'`;');
230
- if ($res===false) {
231
- throw new SGExceptionDatabaseError('Could not execute query');
232
- }
233
-
234
- //drop schedule table
235
- $res = $sgdb->query('DROP TABLE IF EXISTS `'.SG_SCHEDULE_TABLE_NAME.'`;');
236
- if ($res===false) {
237
- throw new SGExceptionDatabaseError('Could not execute query');
238
- }
239
-
240
- //drop action table
241
- $res = $sgdb->query('DROP TABLE IF EXISTS `'.SG_ACTION_TABLE_NAME.'`;');
242
- if ($res===false) {
243
- throw new SGExceptionDatabaseError('Could not execute query');
244
- }
245
-
246
- //delete directory of backups
247
- if ($deleteBackups) {
248
- $backupPath = SGConfig::get('SG_BACKUP_DIRECTORY');
249
- backupGuardDeleteDirectory($backupPath);
250
- }
251
- }
252
- catch (SGException $exception) {
253
- die($exception);
254
- }
255
- }
256
-
257
- public static function checkRequirement($requirement)
258
- {
259
- if ($requirement=='ftp' && !extension_loaded('ftp')) {
260
- throw new SGExceptionNotFound('FTP extension is not loaded.');
261
- }
262
- else if ($requirement=='curl' && !function_exists('curl_version')) {
263
- throw new SGExceptionNotFound('cURL extension is not loaded.');
264
- }
265
- else if ($requirement=='intSize' && PHP_INT_SIZE < 8) {
266
- throw new SGExceptionIO("BackupGuard uses 64-bit integers, but it looks like we're running on a version of PHP that doesn't support 64-bit integers (PHP_INT_MAX=" . ((string) PHP_INT_MAX) . ")");
267
- }
268
- }
269
-
270
- public static function isFeatureAvailable($feature)
271
- {
272
- return ((int)SGConfig::get('SG_FEATURE_'.strtoupper($feature))===1?true:false);
273
- }
274
-
275
- private static function prepare()
276
- {
277
- $backupPath = SGConfig::get('SG_BACKUP_DIRECTORY');
278
-
279
- //create directory for backups
280
- if (!is_dir($backupPath)) {
281
- if (!@mkdir($backupPath)) {
282
- throw new SGExceptionMethodNotAllowed('Cannot create folder: '.$backupPath);
283
- }
284
-
285
- if (!@file_put_contents($backupPath.'.htaccess', 'deny from all')) {
286
- throw new SGExceptionMethodNotAllowed('Cannot create htaccess file');
287
- }
288
-
289
- if (!@file_put_contents($backupPath.'index.php', "<?php\n// Silence is golden")) {
290
- throw new SGExceptionMethodNotAllowed('Cannot create index file');
291
- }
292
- }
293
-
294
- //check permissions of backups directory
295
- if (!is_writable($backupPath)) {
296
- throw new SGExceptionForbidden('Permission denied. Directory is not writable: '.$backupPath);
297
- }
298
-
299
- //prepare notices
300
- $noticeHandler = new SGNoticeHandler();
301
- $noticeHandler->run();
302
- }
303
-
304
- private static function checkMinimumRequirements()
305
- {
306
- //check ZLib library
307
- if (!function_exists('gzdeflate')) {
308
- throw new SGExceptionNotFound('ZLib extension is not loaded.');
309
- }
310
- }
311
  }
1
  <?php
2
+
3
  //check PHP version
4
  if (version_compare(PHP_VERSION, '5.3.3', '<')) {
5
+ die('PHP >=5.3.3 version required.');
6
  }
7
 
8
+ require_once SG_EXCEPTION_PATH . 'SGException.php';
9
+ require_once SG_CORE_PATH . 'functions.php';
10
+ backupGuardIncludeFile(SG_CORE_PATH . 'functions.silver.php');
11
+ backupGuardIncludeFile(SG_CORE_PATH . 'functions.gold.php');
12
+ backupGuardIncludeFile(SG_CORE_PATH . 'functions.platinum.php');
13
+ require_once SG_CORE_PATH . 'SGPing.php';
14
+ require_once SG_DATABASE_PATH . 'SGDatabase.php';
15
+ require_once SG_CORE_PATH . 'SGConfig.php';
16
+ require_once SG_NOTICE_PATH . 'SGNotice.php';
17
+ require_once SG_NOTICE_PATH . 'SGNoticeHandler.php';
18
+ backupGuardIncludeFile(SG_BACKUP_PATH . 'SGBackupSchedule.php');
19
+ backupGuardIncludeFile(SG_EXTENSION_PATH . 'SGExtension.php');
20
 
21
  class SGBoot
22
  {
23
+ public static $executionTimeLimit = 0;
24
+ public static $memoryLimit = 0;
25
+
26
+ public static function init()
27
+ {
28
+ //get current execution time limit
29
+ self::$executionTimeLimit = ini_get('max_execution_time');
30
+
31
+ //get current memory limit
32
+ self::$memoryLimit = ini_get('memory_limit');
33
+
34
+ //remove execution time limit
35
+ @ini_set('max_execution_time', 0);
36
+
37
+ //change initial memory limit
38
+ @ini_set('memory_limit', '512M');
39
+
40
+ //don't let server to abort scripts
41
+ @ignore_user_abort(true);
42
+
43
+ //load all config variables from database
44
+ SGConfig::getAll();
45
+
46
+ // TODO: remove
47
+ backupGuardMigrateDownloadMode();
48
+
49
+ // TODO: remove and check banners logic
50
+ SGConfig::set('closeReviewBanner', 1);
51
+
52
+ try {
53
+ //check minimum requirements
54
+ self::checkMinimumRequirements();
55
+
56
+ //prepare directory for backups
57
+ self::prepare();
58
+ } catch (SGException $exception) {
59
+ die($exception);
60
+ }
61
+ }
62
+
63
+ public static function didInstallForFirstTime()
64
+ {
65
+ self::setPluginInstallUpdateDate();
66
+ }
67
+
68
+ public static function didUpdatePluginVersion()
69
+ {
70
+ self::setPluginInstallUpdateDate();
71
+ }
72
+
73
+ public static function setPluginInstallUpdateDate()
74
+ {
75
+ SGConfig::set('SG_PLUGIN_INSTALL_UPDATE_DATE', time());
76
+ }
77
+
78
+ private static function installConfigTable($sgdb)
79
+ {
80
+ $dbEngine = backupGuardGetDatabaseEngine();
81
+ $downloadMode = backupGuardCheckDownloadMode();
82
+ //create config table
83
+ $res = $sgdb->query(
84
+ 'CREATE TABLE IF NOT EXISTS `' . SG_CONFIG_TABLE_NAME . '` (
85
  `ckey` varchar(100) NOT NULL,
86
  `cvalue` text NOT NULL,
87
  PRIMARY KEY (`ckey`)
88
+ ) ENGINE=' . $dbEngine . ' DEFAULT CHARSET=utf8;'
89
+ );
90
+ if ($res === false) {
91
+ return false;
92
+ }
93
+
94
+ //delete all content from config table (just in case if wasn't dropped)
95
+ $sgdb->query('DELETE FROM `' . SG_CONFIG_TABLE_NAME . '`;');
96
+
97
+ //populate config table
98
+ $res = $sgdb->query(
99
+ "INSERT INTO `" . SG_CONFIG_TABLE_NAME . "` VALUES
100
+ ('SG_BACKUP_GUARD_VERSION','" . SG_BACKUP_GUARD_VERSION . "'),
101
  ('SG_BACKUP_WITH_RELOADINGS', '1'),
102
  ('SG_BACKUP_SYNCHRONOUS_STORAGE_UPLOAD','1'),
103
  ('SG_NOTIFICATIONS_ENABLED','0'),
104
  ('SG_SHOW_STATISTICS_WIDGET','1'),
105
  ('SG_BACKUP_SEND_USAGE_STATUS','0'),
106
  ('SG_NOTIFICATIONS_EMAIL_ADDRESS',''),
107
+ ('SG_STORAGE_BACKUPS_FOLDER_NAME','sg_backups'),
108
+ ('SG_DOWNLOAD_MODE'," . $downloadMode . ");"
109
+ );
110
+ if ($res === false) {
111
+ return false;
112
+ }
113
+
114
+ return true;
115
+ }
116
+
117
+ private static function installScheduleTable($sgdb)
118
+ {
119
  $dbEngine = backupGuardGetDatabaseEngine();
120
 
121
+ //create schedule table
122
+ $res = $sgdb->query(
123
+ 'CREATE TABLE IF NOT EXISTS `' . SG_SCHEDULE_TABLE_NAME . '` (
124
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
125
  `label` varchar(255) NOT NULL,
126
  `status` tinyint(3) unsigned NOT NULL,
127
  `schedule_options` varchar(255) NOT NULL,
128
  `backup_options` text NOT NULL,
129
  PRIMARY KEY (`id`)
130
+ ) ENGINE=' . $dbEngine . ' DEFAULT CHARSET=utf8;'
131
+ );
132
+ if ($res === false) {
133
+ return false;
134
+ }
135
 
136
+ return true;
137
+ }
138
 
139
+ private static function installActionTable($sgdb)
140
+ {
141
  $dbEngine = backupGuardGetDatabaseEngine();
142
 
143
+ //create action table
144
+ $res = $sgdb->query(
145
+ "CREATE TABLE IF NOT EXISTS `" . SG_ACTION_TABLE_NAME . "` (
146
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
147
  `name` varchar(255) NOT NULL,
148
  `type` tinyint(3) unsigned NOT NULL,
153
  `update_date` datetime DEFAULT NULL,
154
  `options` text NOT NULL,
155
  PRIMARY KEY (`id`)
156
+ ) ENGINE=" . $dbEngine . " DEFAULT CHARSET=utf8;"
157
+ );
158
+ if ($res === false) {
159
+ return false;
160
+ }
161
+
162
+ return true;
163
+ }
164
+
165
+ public static function install()
166
+ {
167
+ $sgdb = SGDatabase::getInstance();
168
+
169
+ try {
170
+ if (!self::installConfigTable($sgdb)) {
171
+ throw new SGExceptionDatabaseError('Could not install config table');
172
+ }
173
+
174
+ if (!self::installScheduleTable($sgdb)) {
175
+ throw new SGExceptionDatabaseError('Could not install schedule table');
176
+ }
177
+
178
+ if (!self::installActionTable($sgdb)) {
179
+ throw new SGExceptionDatabaseError('Could not install action table');
180
+ }
181
+
182
+ self::installReviewSettings();
183
+ } catch (SGException $exception) {
184
+ die($exception);
185
+ }
186
+ }
187
+
188
+ private static function installReviewSettings()
189
+ {
190
+ $usageDays = SGConfig::get('usageDays');
191
+ if (!$usageDays) {
192
+ SGConfig::set('usageDays', 0);
193
+
194
+ $timeDate = new \DateTime('now');
195
+ $installTime = strtotime($timeDate->format('Y-m-d H:i:s'));
196
+ SGConfig::set('installDate', $installTime);
197
+ $timeDate->modify('+' . SG_BACKUP_REVIEW_PERIOD . ' day');
198
+
199
+ $timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
200
+ SGConfig::set('openNextTime', $timeNow);
201
+ }
202
+ $backupCountReview = SGConfig::get('backupReviewCount');
203
+ if (!$backupCountReview) {
204
+ SGConfig::set('backupReviewCount', SG_BACKUP_REVIEW_BACKUP_COUNT);
205
+ }
206
+
207
+ $restoreReviewCount = SGConfig::get('restoreReviewCount');
208
+ if (!$restoreReviewCount) {
209
+ SGConfig::set('restoreReviewCount', SG_BACKUP_REVIEW_RESTORE_COUNT);
210
+ }
211
+ }
212
+
213
+ private static function cleanupSchedules()
214
+ {
215
+ $schedules = SGBackupSchedule::getAllSchedules();
216
+ foreach ($schedules as $schedule) {
217
+ SGBackupSchedule::remove($schedule['id']);
218
+ }
219
+ }
220
+
221
+ public static function uninstall($deleteBackups = false)
222
+ {
223
+ try {
224
+ @unlink(SG_PING_FILE_PATH);
225
+
226
+ if (self::isFeatureAvailable('SCHEDULE')) {
227
+ self::cleanupSchedules();
228
+ }
229
+
230
+ $sgdb = SGDatabase::getInstance();
231
+
232
+ //drop config table
233
+ $res = $sgdb->query('DROP TABLE IF EXISTS `' . SG_CONFIG_TABLE_NAME . '`;');
234
+ if ($res === false) {
235
+ throw new SGExceptionDatabaseError('Could not execute query');
236
+ }
237
+
238
+ //drop schedule table
239
+ $res = $sgdb->query('DROP TABLE IF EXISTS `' . SG_SCHEDULE_TABLE_NAME . '`;');
240
+ if ($res === false) {
241
+ throw new SGExceptionDatabaseError('Could not execute query');
242
+ }
243
+
244
+ //drop action table
245
+ $res = $sgdb->query('DROP TABLE IF EXISTS `' . SG_ACTION_TABLE_NAME . '`;');
246
+ if ($res === false) {
247
+ throw new SGExceptionDatabaseError('Could not execute query');
248
+ }
249
+
250
+ //delete directory of backups
251
+ if ($deleteBackups) {
252
+ $backupPath = SGConfig::get('SG_BACKUP_DIRECTORY');
253
+ backupGuardDeleteDirectory($backupPath);
254
+ }
255
+ } catch (SGException $exception) {
256
+ die($exception);
257
+ }
258
+ }
259
+
260
+ public static function checkRequirement($requirement)
261
+ {
262
+ if ($requirement == 'ftp' && !extension_loaded('ftp')) {
263
+ throw new SGExceptionNotFound('FTP extension is not loaded.');
264
+ } else if ($requirement == 'curl' && !function_exists('curl_version')) {
265
+ throw new SGExceptionNotFound('cURL extension is not loaded.');
266
+ } else if ($requirement == 'intSize' && PHP_INT_SIZE < 8) {
267
+ throw new SGExceptionIO("BackupGuard uses 64-bit integers, but it looks like we're running on a version of PHP that doesn't support 64-bit integers (PHP_INT_MAX=" . ((string) PHP_INT_MAX) . ")");
268
+ }
269
+ }
270
+
271
+ public static function isFeatureAvailable($feature)
272
+ {
273
+ return ((int) SGConfig::get('SG_FEATURE_' . strtoupper($feature)) === 1 ? true : false);
274
+ }
275
+
276
+ private static function prepare()
277
+ {
278
+ $backupPath = SGConfig::get('SG_BACKUP_DIRECTORY');
279
+
280
+ //create directory for backups
281
+ if (!is_dir($backupPath)) {
282
+ if (!@mkdir($backupPath)) {
283
+ throw new SGExceptionMethodNotAllowed('Cannot create folder: ' . $backupPath);
284
+ }
285
+
286
+ if (!@file_put_contents($backupPath . '.htaccess', 'deny from all')) {
287
+ throw new SGExceptionMethodNotAllowed('Cannot create htaccess file');
288
+ }
289
+
290
+ if (!@file_put_contents($backupPath . 'index.php', "<?php\n// Silence is golden")) {
291
+ throw new SGExceptionMethodNotAllowed('Cannot create index file');
292
+ }
293
+ }
294
+
295
+ //check permissions of backups directory
296
+ if (!is_writable($backupPath)) {
297
+ throw new SGExceptionForbidden('Permission denied. Directory is not writable: ' . $backupPath);
298
+ }
299
+
300
+ //prepare notices
301
+ $noticeHandler = new SGNoticeHandler();
302
+ $noticeHandler->run();
303
+ }
304
+
305
+ private static function checkMinimumRequirements()
306
+ {
307
+ //check ZLib library
308
+ if (!function_exists('gzdeflate')) {
309
+ throw new SGExceptionNotFound('ZLib extension is not loaded.');
310
+ }
311
+ }
 
 
 
 
312
  }
com/core/backup/SGBackup.php CHANGED
@@ -1,1468 +1,1449 @@
1
- <?php
2
- require_once(SG_BACKUP_PATH.'SGBackupLog.php');
3
- require_once(SG_RESTORE_PATH.'SGExternalRestore.php');
4
- require_once(SG_LIB_PATH.'SGState.php');
5
- backupGuardIncludeFile(SG_LIB_PATH.'SGBackgroundMode.php');
6
- require_once(SG_BACKUP_PATH.'SGBackupFiles.php');
7
- require_once(SG_BACKUP_PATH.'SGBackupDatabase.php');
8
- backupGuardIncludeFile(SG_BACKUP_PATH.'SGBackupStorage.php');
9
- backupGuardIncludeFile(SG_BACKUP_PATH.'SGBackupMailNotification.php');
10
- require_once(SG_LOG_PATH.'SGFileLogHandler.php');
11
- require_once(SG_LIB_PATH.'SGReloader.php');
12
- require_once(SG_LIB_PATH.'SGCallback.php');
13
-
14
- //close session for writing
15
- @session_write_close();
16
-
17
- class SGBackup implements SGIBackupDelegate
18
- {
19
- private $backupFiles = null;
20
- private $backupDatabase = null;
21
- private $actionId = null;
22
- private $filesBackupAvailable = false;
23
- private $databaseBackupAvailable = false;
24
- private $isManual = true;
25
- private $actionStartTs = 0;
26
- private $fileName = '';
27
- private $filesBackupPath = '';
28
- private $databaseBackupPath = '';
29
- private $backupLogPath = '';
30
- private $restoreLogPath = '';
31
- private $backgroundMode = false;
32
- private $pendingStorageUploads = array();
33
- private $state = null;
34
- private $token = '';
35
- private $options = array();
36
-
37
- public function __construct()
38
- {
39
- $this->backupFiles = new SGBackupFiles();
40
- $this->backupFiles->setDelegate($this);
41
-
42
- $this->backupDatabase = new SGBackupDatabase();
43
- $this->backupDatabase->setDelegate($this);
44
- }
45
-
46
- public function getScheduleParamsById($id)
47
- {
48
- $sgdb = SGDatabase::getInstance();
49
- $res = $sgdb->query('SELECT * FROM '.SG_SCHEDULE_TABLE_NAME.' WHERE id=%d', array($id));
50
- if (empty($res)) {
51
- return '';
52
- }
53
- return $res[0];
54
- }
55
-
56
- private function handleBackupExecutionTimeout()
57
- {
58
- $this->backupDatabase->setFilePath($this->databaseBackupPath);
59
- $this->backupDatabase->cancel();
60
-
61
- $this->backupFiles->setFilePath($this->filesBackupPath);
62
- $this->backupFiles->cancel();
63
-
64
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
65
- file_put_contents(dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME, 'Backup: failed', FILE_APPEND);
66
- SGBackupMailNotification::sendBackupNotification(SG_ACTION_STATUS_ERROR, array(
67
- 'flowFilePath' => dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME,
68
- 'archiveName' => $this->fileName
69
- ));
70
- }
71
- }
72
-
73
- private function handleRestoreExecutionTimeout()
74
- {
75
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
76
- file_put_contents(dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME, 'Restore: failed', FILE_APPEND);
77
- SGBackupMailNotification::sendRestoreNotification(false, array(
78
- 'flowFilePath' => dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME,
79
- 'archiveName' => $this->fileName
80
- ));
81
- }
82
- }
83
-
84
- private function handleUploadExecutionTimeout()
85
- {
86
- self::changeActionStatus($this->actionId, SG_ACTION_STATUS_FINISHED_WARNINGS);
87
-
88
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
89
- file_put_contents(dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME, 'Upload: failed', FILE_APPEND);
90
-
91
- SGBackupMailNotification::sendUploadNotification(false, array(
92
- 'flowFilePath' => dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME,
93
- 'archiveName' => $this->fileName
94
- ));
95
- }
96
- }
97
-
98
- public function handleExecutionTimeout($actionId)
99
- {
100
- $this->actionId = $actionId;
101
- $action = self::getAction($actionId);
102
- $this->fileName = $action['name'];
103
- $actionType = $action['type'];
104
- $backupPath = SG_BACKUP_DIRECTORY.$this->fileName;
105
-
106
- $this->filesBackupPath = $backupPath.'/'.$this->fileName.'.sgbp';
107
- $this->databaseBackupPath = $backupPath.'/'.$this->fileName.'.sql';
108
-
109
- if ($actionType == SG_ACTION_TYPE_RESTORE) {
110
- $this->handleRestoreExecutionTimeout();
111
- $this->prepareRestoreLogFile($backupPath, true);
112
- }
113
- elseif ($actionType == SG_ACTION_TYPE_BACKUP) {
114
- $this->handleBackupExecutionTimeout();
115
- $this->prepareBackupLogFile($backupPath, true);
116
- }
117
- else{
118
- $this->handleUploadExecutionTimeout();
119
- $this->prepareBackupLogFile($backupPath, true);
120
- }
121
-
122
- //Stop all the running actions related to the specific backup, like backup, upload...
123
- $allActions = self::getRunningActions();
124
- foreach ($allActions as $action) {
125
- self::changeActionStatus($action['id'], SG_ACTION_STATUS_ERROR);
126
- }
127
-
128
- $exception = new SGExceptionExecutionTimeError();
129
- SGBackupLog::writeExceptionObject($exception);
130
- SGConfig::set('SG_EXCEPTION_TIMEOUT_ERROR', '1', true);
131
- }
132
-
133
- public function listStorage($storage)
134
- {
135
- if (SGBoot::isFeatureAvailable('DOWNLOAD_FROM_CLOUD')) {
136
- $listOfFiles = SGBackupStorage::getInstance()->listStorage($storage);
137
- return $listOfFiles;
138
- }
139
-
140
- return array();
141
- }
142
-
143
- public function downloadBackupArchiveFromCloud($archive, $storage, $size, $backupId = null)
144
- {
145
- $result = false;
146
- if (SGBoot::isFeatureAvailable('DOWNLOAD_FROM_CLOUD')) {
147
- $result = SGBackupStorage::getInstance()->downloadBackupArchiveFromCloud($storage, $archive, $size, $backupId);
148
- }
149
-
150
- return $result;
151
- }
152
-
153
- public function getState()
154
- {
155
- return $this->state;
156
- }
157
-
158
- private function prepareFilesStateFile()
159
- {
160
- $this->state = new SGFileState();
161
-
162
- $this->state->setRanges(array());
163
- $this->state->setOffset(0);
164
- $this->state->setToken($this->token);
165
- $this->state->setAction(SG_STATE_ACTION_PREPARING_STATE_FILE);
166
- $this->state->setType(SG_STATE_TYPE_FILE);
167
- $this->state->setActionId($this->actionId);
168
- $this->state->setActionStartTs($this->actionStartTs);
169
- $this->state->setBackupFileName($this->fileName);
170
- $this->state->setBackupFilePath($this->filesBackupPath);
171
- $this->state->setPendingStorageUploads($this->pendingStorageUploads);
172
- $this->state->setCdrCursor(0);
173
- $this->state->setRestoreMode(@$this->restoreMode);
174
- $this->state->setRestoreFiles(@$this->restoreFiles);
175
- }
176
-
177
- private function prepareDBStateFile()
178
- {
179
- $this->state = new SGDBState();
180
- $this->state->setToken($this->token);
181
- $this->state->setOffset(0);
182
- $this->state->setAction(SG_STATE_ACTION_PREPARING_STATE_FILE);
183
- $this->state->setType(SG_STATE_TYPE_DB);
184
- $this->state->setActionId($this->actionId);
185
- $this->state->setActionStartTs($this->actionStartTs);
186
- $this->state->setBackupFileName($this->fileName);
187
- $this->state->setBackupFilePath($this->filesBackupPath);
188
- $this->state->setPendingStorageUploads($this->pendingStorageUploads);
189
- $this->state->setBackedUpTables(array());
190
- $this->state->setTablesToBackup(@$this->options['SG_BACKUP_TABLES_TO_BACKUP']);
191
- }
192
-
193
- private function prepareUploadStateFile()
194
- {
195
- $this->state = new SGUploadState();
196
- $this->state->setOffset(0);
197
- $this->state->setActiveDirectory('');
198
- $this->state->setCurrentUploadChunksCount(0);
199
- $this->state->setTotalUploadChunksCount(0);
200
- $this->state->setUploadId(0);
201
- $this->state->setParts(array());
202
- $this->state->setToken($this->token);
203
- $this->state->setAction(SG_STATE_ACTION_PREPARING_STATE_FILE);
204
- $this->state->setType(SG_STATE_TYPE_UPLOAD);
205
- $this->state->setActionId($this->actionId);
206
- $this->state->setActionStartTs($this->actionStartTs);
207
- $this->state->setBackupFileName($this->fileName);
208
- $this->state->setBackupFilePath($this->filesBackupPath);
209
- $this->state->setPendingStorageUploads($this->pendingStorageUploads);
210
- }
211
-
212
- public function prepareMigrateStateFile()
213
- {
214
- $this->state = new SGMigrateState();
215
- $this->state->setActionId($this->actionId);
216
- $this->state->setAction(SG_STATE_ACTION_PREPARING_STATE_FILE);
217
- $this->state->setInprogress(false);
218
- $this->state->setTableCursor(0);
219
- $this->state->setColumnCursor(0);
220
- $this->state->setToken($this->token);
221
- }
222
-
223
- public function getNoprivReloadAjaxUrl()
224
- {
225
- $url = @$_SERVER['REQUEST_URI'];
226
-
227
- if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
228
- if(strpos($url, 'wp-cron.php')) {
229
- $url = substr($url, 0, strpos($url, 'wp-cron.php'));
230
- $url .= 'wp-admin/admin-ajax.php';
231
- }
232
-
233
- $url = explode('?', $url);
234
- $url = $url[0].'?action=backup_guard_awake&token='.$this->token;
235
- }
236
-
237
- return $url;
238
- }
239
-
240
- public function reload()
241
- {
242
- $url = $this->getNoprivReloadAjaxUrl();
243
- $callback = new SGCallback("SGBackup", "reloadCallback");
244
-
245
- SGReloader::didCompleteCallback();
246
- SGReloader::registerCallback($callback);
247
- SGReloader::reloadWithAjaxUrl($url);
248
- die();
249
- }
250
-
251
- public function reloadCallback($params)
252
- {
253
- $actions = self::getRunningActions();
254
- if (count($actions)) {
255
- $action = $actions[0];
256
- $method = $params['method'];
257
-
258
- $this->state = backupGuardLoadStateData();
259
- if ($action['type'] == SG_ACTION_TYPE_RESTORE) {
260
- $this->restore($action['name']);
261
- }
262
- else {
263
- $options = json_decode($action['options'], true);
264
- $this->backup($options, $this->state, $method);
265
- }
266
- }
267
- }
268
-
269
- private function saveStateFile()
270
- {
271
- $this->state->save();
272
- }
273
-
274
- public function getToken()
275
- {
276
- return $this->token;
277
- }
278
-
279
- private function reloadMethodNameByMethodId($method)
280
- {
281
- $name = "none";
282
- switch ($method) {
283
- case SG_RELOAD_METHOD_STREAM:
284
- $name = "stream";
285
- break;
286
- case SG_RELOAD_METHOD_CURL:
287
- $name = "curl";
288
- break;
289
- case SG_RELOAD_METHOD_SOCKET:
290
- $name = "socket";
291
- break;
292
- case SG_RELOAD_METHOD_AJAX:
293
- $name = "ajax";
294
- break;
295
- default:
296
- break;
297
- }
298
-
299
- return $name;
300
- }
301
-
302
- /* Backup implementation */
303
- public function backup($options, $state = false, $reloadMethod = null)
304
- {
305
- SGPing::update();
306
-
307
- $this->options = $options;
308
- $this->token = backupGuardGenerateToken();
309
-
310
- $this->filesBackupAvailable = isset($options['SG_ACTION_BACKUP_FILES_AVAILABLE'])?$options['SG_ACTION_BACKUP_FILES_AVAILABLE']:false;
311
- $this->databaseBackupAvailable = isset($options['SG_ACTION_BACKUP_DATABASE_AVAILABLE'])?$options['SG_ACTION_BACKUP_DATABASE_AVAILABLE']:false;
312
- $this->backgroundMode = isset($options['SG_BACKUP_IN_BACKGROUND_MODE'])?$options['SG_BACKUP_IN_BACKGROUND_MODE']:false;
313
-
314
- if (!$state) {
315
- $this->fileName = $this->getBackupFileName();
316
- $this->prepareBackupFolder(SG_BACKUP_DIRECTORY.$this->fileName);
317
- $this->prepareForBackup($options);
318
- $this->prepareBackupReport();
319
-
320
- SGBackupLog::write("Reload method set to ajax");
321
- SGConfig::set('SG_RELOAD_METHOD', SG_RELOAD_METHOD_AJAX, true);
322
-
323
- if ($this->databaseBackupAvailable) {
324
- $this->prepareDBStateFile();
325
- }
326
- else {
327
- $this->prepareFilesStateFile();
328
- }
329
-
330
- $this->saveStateFile();
331
- SGReloader::reset();
332
- if (backupGuardIsReloadEnabled()) {
333
- $this->reload();
334
- }
335
- }
336
- else {
337
- $this->state = $state;
338
- $this->fileName = $state->getBackupFileName();
339
- $this->actionId = $state->getActionId();
340
- $this->actionStartTs = $state->getActionStartTs();
341
- $this->pendingStorageUploads = $state->getPendingStorageUploads();
342
-
343
- $this->prepareBackupLogFile(SG_BACKUP_DIRECTORY.$this->fileName, true);
344
- $this->setBackupPaths();
345
- $this->prepareAdditionalConfigurations();
346
- }
347
-
348
- SGPing::update();
349
-
350
- try {
351
- $rootDirectory = rtrim(SGConfig::get('SG_APP_ROOT_DIRECTORY'), '/').'/';
352
-
353
- if ($this->databaseBackupAvailable) {
354
- $this->backupDatabase->setFilePath($this->databaseBackupPath);
355
- $this->backupDatabase->setPendingStorageUploads($this->pendingStorageUploads);
356
-
357
- if (!$this->filesBackupAvailable) {
358
- $options['SG_BACKUP_FILE_PATHS'] = '';
359
- }
360
-
361
- if ($this->state->getType() == SG_STATE_TYPE_DB) {
362
- $this->backupDatabase->backup($this->databaseBackupPath);
363
- $this->prepareFilesStateFile();
364
- $this->saveStateFile();
365
- self::changeActionStatus($this->actionId, SG_ACTION_STATUS_IN_PROGRESS_FILES);
366
-
367
- if (backupGuardIsReloadEnabled()) {
368
- $this->reload();
369
- }
370
- }
371
-
372
- $path = substr($this->databaseBackupPath, strlen($rootDirectory));
373
- $this->backupFiles->addDontExclude($this->databaseBackupPath);
374
- $backupItems = $options['SG_BACKUP_FILE_PATHS'];
375
- $allItems = $backupItems?explode(',', $backupItems):array();
376
- $allItems[] = $path;
377
- $options['SG_BACKUP_FILE_PATHS'] = implode(',', $allItems);
378
-
379
- if ($this->state->getType() == SG_STATE_TYPE_DB) {
380
- $currentStatus = $this->getCurrentActionStatus();
381
- if ($currentStatus==SG_ACTION_STATUS_CANCELLING || $currentStatus==SG_ACTION_STATUS_CANCELLED) {
382
- // If action canceled during backup of database, cancelaion handling will happen here
383
- // in other cases handling will happen in respective classes
384
- $this->cancel();
385
- }
386
- }
387
- }
388
-
389
- if ($this->state->getType() == SG_STATE_TYPE_FILE) {
390
-
391
- /*
392
- * ToDo check this logic
393
- * */
394
- /*
395
- $treeFilePath = SG_BACKUP_DIRECTORY.$this->fileName.'/'.SG_TREE_FILE_NAME;
396
- $treeFilePathWithoutRootDir = substr($treeFilePath, strlen($rootDirectory));
397
- $this->backupFiles->addDontExclude($treeFilePath);
398
- $backupItems = $options['SG_BACKUP_FILE_PATHS'];
399
- $allItems = $backupItems?explode(',', $backupItems):array();
400
- $allItems[] = $treeFilePathWithoutRootDir;
401
- $options['SG_BACKUP_FILE_PATHS'] = implode(',', $allItems);
402
- */
403
-
404
- $this->backupFiles->setPendingStorageUploads($this->pendingStorageUploads);
405
- $this->backupFiles->backup($this->filesBackupPath, $options, $this->state);
406
- $this->didFinishBackup();
407
-
408
- SGPing::update();
409
-
410
- $this->prepareUploadStateFile();
411
- $this->saveStateFile();
412
- }
413
-
414
- //continue uploading backup to storages
415
- $this->backupUploadToStorages();
416
-
417
- // Clear temporary files
418
- $this->clear();
419
- }
420
- catch (SGException $exception) {
421
- if ($exception instanceof SGExceptionSkip) {
422
- $this->setCurrentActionStatusCancelled();
423
- }
424
- else {
425
- SGBackupLog::writeExceptionObject($exception);
426
-
427
- if ($this->state->getType() != SG_STATE_TYPE_UPLOAD) {
428
- if ($this->databaseBackupAvailable) {
429
- $this->backupDatabase->cancel();
430
- }
431
-
432
- $this->backupFiles->cancel();
433
- }
434
-
435
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
436
- //Writing backup status to report file
437
- file_put_contents(dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME, 'Backup: failed', FILE_APPEND);
438
- SGBackupMailNotification::sendBackupNotification(SG_ACTION_STATUS_ERROR, array(
439
- 'flowFilePath' => dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME,
440
- 'archiveName' => $this->fileName
441
- ));
442
- }
443
-
444
- self::changeActionStatus($this->actionId, SG_ACTION_STATUS_ERROR);
445
- }
446
-
447
- // Clear temporary files
448
- $this->clear();
449
- }
450
- }
451
-
452
- private function prepareBackupReport()
453
- {
454
- file_put_contents(dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME, 'Report for: '.SG_SITE_URL."\n", FILE_APPEND);
455
- }
456
-
457
- private function shouldDeleteBackupAfterUpload()
458
- {
459
- return SGConfig::get('SG_DELETE_BACKUP_AFTER_UPLOAD')?true:false;
460
- }
461
-
462
- private function backupUploadToStorages()
463
- {
464
- //check list of storages to upload if any
465
- $uploadToStorages = count($this->pendingStorageUploads)?true:false;
466
- if (SGBoot::isFeatureAvailable('STORAGE') && $uploadToStorages)
467
- {
468
- while (count($this->pendingStorageUploads))
469
- {
470
- $sgBackupStorage = SGBackupStorage::getInstance();
471
- $storageId = $this->pendingStorageUploads[0];
472
-
473
- $storageInfo = $sgBackupStorage->getStorageInfoById($storageId);
474
- if (empty($storageInfo['isConnected'])) {
475
- SGBackupLog::write($storageInfo['storageName'].' stopped');
476
- array_shift($this->pendingStorageUploads);
477
- continue;
478
- }
479
-
480
- if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
481
- // Create action for upload
482
- $this->actionId = SGBackupStorage::queueBackupForUpload($this->fileName, $storageId, $this->options);
483
- }
484
- else {
485
- // Get upload action id if it does not finished yet
486
- $this->actionId = $this->state->getActionId();
487
- }
488
-
489
-
490
- $sgBackupStorage->setDelegate($this);
491
- $sgBackupStorage->setState($this->state);
492
- $sgBackupStorage->setToken($this->token);
493
- $sgBackupStorage->setPendingStorageUploads($this->pendingStorageUploads);
494
- $sgBackupStorage->startUploadByActionId($this->actionId);
495
-
496
- array_shift($this->pendingStorageUploads);
497
- // Reset state file to defaults for next storage upload
498
- $this->prepareUploadStateFile();
499
- }
500
-
501
- $this->didFinishUpload();
502
- }
503
- }
504
-
505
- private function didFinishUpload()
506
- {
507
- //check if option is enabled
508
- $isDeleteLocalBackupFeatureAvailable = SGBoot::isFeatureAvailable('DELETE_LOCAL_BACKUP_AFTER_UPLOAD');
509
-
510
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
511
- SGBackupMailNotification::sendBackupNotification(SG_ACTION_STATUS_FINISHED, array(
512
- 'flowFilePath' => dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME,
513
- 'archiveName' => $this->fileName
514
- ));
515
- }
516
-
517
- $status = SGBackup::getActionStatus($this->actionId);
518
-
519
- if ($this->shouldDeleteBackupAfterUpload() && $isDeleteLocalBackupFeatureAvailable && $status == SG_ACTION_STATUS_FINISHED) {
520
- @unlink(SG_BACKUP_DIRECTORY.$this->fileName.'/'.$this->fileName.'.'.SGBP_EXT);
521
- }
522
- }
523
-
524
- // Delete state and flow files after upload
525
- private function clear()
526
- {
527
- @unlink(dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME);
528
- /// ToDo check this logic
529
- //@unlink(SG_BACKUP_DIRECTORY.$this->fileName.'/'.SG_TREE_FILE_NAME);
530
- @unlink(SG_BACKUP_DIRECTORY.SG_STATE_FILE_NAME);
531
- @unlink(SG_BACKUP_DIRECTORY.SG_RELOADER_STATE_FILE_NAME);
532
- @unlink(SG_PING_FILE_PATH);
533
- SGConfig::set("SG_CUSTOM_BACKUP_NAME", '');
534
- }
535
-
536
- private function cleanUp()
537
- {
538
- //delete sql file
539
- if ($this->databaseBackupAvailable) {
540
- @unlink($this->databaseBackupPath);
541
- }
542
- }
543
-
544
- private function getBackupFileName()
545
- {
546
- if (SGConfig::get("SG_CUSTOM_BACKUP_NAME")) {
547
- return backupGuardRemoveSlashes(SGConfig::get("SG_CUSTOM_BACKUP_NAME"));
548
- }
549
-
550
- $sgBackupPrefix = SG_BACKUP_FILE_NAME_DEFAULT_PREFIX;
551
- if (function_exists('backupGuardGetCustomPrefix') && SGBoot::isFeatureAvailable('CUSTOM_BACKUP_NAME')) {
552
- $sgBackupPrefix = backupGuardGetCustomPrefix();
553
- }
554
-
555
- $sgBackupPrefix .= backupGuardGetFilenameOptions($this->options);
556
-
557
- $date = backupGuardConvertDateTimezone(@date('YmdHis'), 'YmdHis');
558
- return $sgBackupPrefix.($date);
559
- }
560
-
561
- private function prepareBackupFolder($backupPath)
562
- {
563
- if (!is_writable(SG_BACKUP_DIRECTORY))
564
- {
565
- throw new SGExceptionForbidden('Permission denied. Directory is not writable: '.$backupPath);
566
- }
567
-
568
- //create backup folder
569
- if (!file_exists($backupPath) && !@mkdir($backupPath))
570
- {
571
- throw new SGExceptionMethodNotAllowed('Cannot create folder: '.$backupPath);
572
- }
573
-
574
- if (!is_writable($backupPath))
575
- {
576
- throw new SGExceptionForbidden('Permission denied. Directory is not writable: '.$backupPath);
577
- }
578
-
579
- //create backup log file
580
- $this->prepareBackupLogFile($backupPath);
581
- }
582
-
583
- private function extendLogFileHeader($content)
584
- {
585
- $isManual = $this->getIsManual();
586
- if ($isManual) {
587
- $content .= 'Backup mode: Manual'.PHP_EOL;
588
- }
589
- else {
590
- $content .= 'Backup mode: Schedule'.PHP_EOL;
591
- }
592
-
593
- return $content;
594
- }
595
-
596
- private function prepareBackupLogFile($backupPath, $exists = false)
597
- {
598
- $file = $backupPath.'/'.$this->fileName.'_backup.log';
599
- $this->backupLogPath = $file;
600
-
601
- if (!$exists)
602
- {
603
- $content = self::getLogFileHeader(SG_ACTION_TYPE_BACKUP, $this->fileName);
604
- $content = $this->extendLogFileHeader($content);
605
-
606
- $types = array();
607
- if ($this->filesBackupAvailable)
608
- {
609
- $types[] = 'files';
610
- }
611
- if ($this->databaseBackupAvailable)
612
- {
613
- $types[] = 'database';
614
- }
615
-
616
- $content .= 'Backup type: '.implode(',', $types).PHP_EOL.PHP_EOL;
617
-
618
- if (!file_put_contents($file, $content))
619
- {
620
- throw new SGExceptionMethodNotAllowed('Cannot create backup log file: '.$file);
621
- }
622
- }
623
-
624
- //create file log handler
625
- $fileLogHandler = new SGFileLogHandler($file);
626
- SGLog::registerLogHandler($fileLogHandler, SG_LOG_LEVEL_LOW, true);
627
- }
628
-
629
- private function setBackupPaths()
630
- {
631
- $this->filesBackupPath = SG_BACKUP_DIRECTORY.$this->fileName.'/'.$this->fileName.'.sgbp';
632
- $this->databaseBackupPath = SG_BACKUP_DIRECTORY.$this->fileName.'/'.$this->fileName.'.sql';
633
- }
634
-
635
- private function prepareUploadToStorages($options)
636
- {
637
- $uploadToStorages = $options['SG_BACKUP_UPLOAD_TO_STORAGES'];
638
-
639
- if (SGBoot::isFeatureAvailable('STORAGE') && $uploadToStorages) {
640
- $this->pendingStorageUploads = explode(',', $uploadToStorages);
641
- }
642
- }
643
-
644
- private function prepareAdditionalConfigurations()
645
- {
646
- $this->backupFiles->setFilePath($this->filesBackupPath);
647
- SGConfig::set('SG_RUNNING_ACTION', 1, true);
648
- }
649
-
650
- private function prepareForBackup($options)
651
- {
652
- //start logging
653
- SGBackupLog::writeAction('backup', SG_BACKUP_LOG_POS_START);
654
-
655
- //save timestamp for future use
656
- $this->actionStartTs = time();
657
-
658
- //create action inside db
659
- $status = $this->databaseBackupAvailable?SG_ACTION_STATUS_IN_PROGRESS_DB:SG_ACTION_STATUS_IN_PROGRESS_FILES;
660
- $this->actionId = self::createAction($this->fileName, SG_ACTION_TYPE_BACKUP, $status, 0, json_encode($options));
661
-
662
- //set paths
663
- $this->setBackupPaths();
664
-
665
- //prepare sgbp file
666
- @file_put_contents($this->filesBackupPath, '');
667
-
668
- if (!is_writable($this->filesBackupPath))
669
- {
670
- throw new SGExceptionForbidden('Could not create backup file: '.$this->filesBackupPath);
671
- }
672
-
673
- //additional configuration
674
- $this->prepareAdditionalConfigurations();
675
-
676
- //check if upload to storages is needed
677
- $this->prepareUploadToStorages($options);
678
- }
679
-
680
- public function cancel()
681
- {
682
- $dir = SG_BACKUP_DIRECTORY.$this->fileName;
683
-
684
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
685
- //Writing backup status to report file
686
- file_put_contents($dir.'/'.SG_REPORT_FILE_NAME, 'Backup: canceled', FILE_APPEND);
687
- SGBackupMailNotification::sendBackupNotification(SG_ACTION_STATUS_CANCELLED, array(
688
- 'flowFilePath' => dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME,
689
- 'archiveName' => $this->fileName
690
- ));
691
- }
692
-
693
- if ($dir != SG_BACKUP_DIRECTORY) {
694
- backupGuardDeleteDirectory($dir);
695
- }
696
-
697
- $this->clear();
698
- throw new SGExceptionSkip();
699
- }
700
-
701
- private function didFinishBackup()
702
- {
703
- if(SGConfig::get('SG_REVIEW_POPUP_STATE') != SG_NEVER_SHOW_REVIEW_POPUP)
704
- {
705
- SGConfig::set('SG_REVIEW_POPUP_STATE', SG_SHOW_REVIEW_POPUP);
706
- }
707
-
708
- $action = $this->didFindWarnings()?SG_ACTION_STATUS_FINISHED_WARNINGS:SG_ACTION_STATUS_FINISHED;
709
- self::changeActionStatus($this->actionId, $action);
710
-
711
- SGBackupLog::writeAction('backup', SG_BACKUP_LOG_POS_END);
712
-
713
- $report = $this->didFindWarnings()?'completed with warnings':'completed';
714
-
715
- //Writing backup status to report file
716
- file_put_contents(dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME, 'Backup: '.$report."\n", FILE_APPEND);
717
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS') && !count($this->pendingStorageUploads)) {
718
- SGBackupMailNotification::sendBackupNotification($action, array(
719
- 'flowFilePath' => dirname($this->filesBackupPath).'/'.SG_REPORT_FILE_NAME,
720
- 'archiveName' => $this->fileName
721
- ));
722
- }
723
-
724
- SGBackupLog::write('Total duration: '.backupGuardFormattedDuration($this->actionStartTs, time()));
725
- SGBackupLog::write('Memory pick usage: '.(memory_get_peak_usage(true)/1024/1024).'MB');
726
- if (function_exists('sys_getloadavg')) {
727
- SGBackupLog::write('CPU usage: '.implode(' / ', sys_getloadavg()));
728
- }
729
-
730
- $archiveSizeInBytes = backupGuardRealFilesize($this->filesBackupPath);
731
- $archiveSize = convertToReadableSize($archiveSizeInBytes);
732
- SGBackupLog::write("Archive size: ".$archiveSize." (".$archiveSizeInBytes." bytes)");
733
-
734
- $this->cleanUp();
735
- if (SGBoot::isFeatureAvailable('NUMBER_OF_BACKUPS_TO_KEEP') && function_exists('backupGuardOutdatedBackupsCleanup')) {
736
- backupGuardOutdatedBackupsCleanup(SG_BACKUP_DIRECTORY);
737
- }
738
- }
739
-
740
- public function handleMigrationErrors($exception)
741
- {
742
- SGConfig::set('SG_BACKUP_SHOW_MIGRATION_ERROR', 1);
743
- SGConfig::set('SG_BACKUP_MIGRATION_ERROR', (string)$exception);
744
- }
745
-
746
- public function getActionId()
747
- {
748
- return $this->actionId;
749
- }
750
-
751
- /* Restore implementation */
752
-
753
- public function restore($backupName, $restoreMode=NULL, $restoreFiles = NULL)
754
- {
755
- try
756
- {
757
- SGPing::update();
758
- $this->token = backupGuardGenerateToken();
759
- if($restoreMode != NULL) {
760
- $this->restoreMode = $restoreMode;
761
- }
762
- if($restoreFiles != NULL) {
763
- $this->restoreFiles = $restoreFiles;
764
- }
765
- $backupName = backupGuardRemoveSlashes($backupName);
766
- $this->prepareForRestore($backupName);
767
-
768
- if ($this->state && ($this->state->getAction() == SG_STATE_ACTION_RESTORING_DATABASE || $this->state->getAction() == SG_STATE_ACTION_MIGRATING_DATABASE)) {
769
- $this->didFinishFilesRestore();
770
- }
771
- else {
772
- $this->backupFiles->setFileName($backupName);
773
- $this->backupFiles->restore($this->filesBackupPath);
774
-
775
- $this->prepareDBStateFile();
776
- $this->didFinishFilesRestore();
777
- }
778
- }
779
- catch (SGException $exception)
780
- {
781
- if (!$exception instanceof SGExceptionSkip)
782
- {
783
- SGBackupLog::writeExceptionObject($exception);
784
-
785
- if ($exception instanceof SGExceptionMigrationError) {
786
- $this->handleMigrationErrors($exception);
787
- }
788
-
789
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS'))
790
- {
791
- SGBackupMailNotification::sendRestoreNotification(false);
792
- }
793
-
794
- self::changeActionStatus($this->actionId, SG_ACTION_STATUS_ERROR);
795
- }
796
- else
797
- {
798
- self::changeActionStatus($this->actionId, SG_ACTION_STATUS_CANCELLED);
799
- }
800
- }
801
- }
802
-
803
- private function prepareForRestore($backupName)
804
- {
805
- //prepare file name
806
- $this->fileName = $backupName;
807
-
808
- //set paths
809
- $restorePath = SG_BACKUP_DIRECTORY.$this->fileName;
810
- $this->filesBackupPath = $restorePath.'/'.$this->fileName.'.sgbp';
811
- $this->databaseBackupPath = $restorePath.'/'.$this->fileName.'.sql';
812
-
813
- if (!$this->state) {
814
- //create action inside db
815
- $this->actionId = self::createAction($this->fileName, SG_ACTION_TYPE_RESTORE, SG_ACTION_STATUS_IN_PROGRESS_FILES);
816
-
817
- //save current user credentials
818
- $this->backupDatabase->saveCurrentUser();
819
-
820
- //check if we can run external restore
821
- $externalRestoreEnabled = SGExternalRestore::getInstance()->prepare($this->actionId);
822
-
823
- //prepare folder
824
- $this->prepareRestoreFolder($restorePath);
825
-
826
- SGConfig::set('SG_RUNNING_ACTION', 1, true);
827
-
828
- //save timestamp for future use
829
- $this->actionStartTs = time();
830
-
831
- $this->prepareFilesStateFile();
832
- $this->saveStateFile();
833
- SGReloader::reset();
834
-
835
- if ($externalRestoreEnabled) {
836
- $this->reload();
837
- }
838
- }
839
- else {
840
- $this->actionId = $this->state->getActionId();
841
- $this->actionStartTs = $this->state->getActionStartTs();
842
- $this->prepareRestoreLogFile($restorePath, true);
843
- }
844
- }
845
-
846
- private function prepareRestoreFolder($restorePath)
847
- {
848
- if (!is_writable($restorePath))
849
- {
850
- SGConfig::set('SG_BACKUP_NOT_WRITABLE_DIR_PATH', $restorePath);
851
- SGConfig::set('SG_BACKUP_SHOW_NOT_WRITABLE_ERROR', 1);
852
- throw new SGExceptionForbidden('Permission denied. Directory is not writable: '.$restorePath);
853
- }
854
-
855
- $this->filesBackupAvailable = file_exists($this->filesBackupPath);
856
-
857
- //create restore log file
858
- $this->prepareRestoreLogFile($restorePath);
859
- }
860
-
861
- private function prepareRestoreLogFile($backupPath, $exists = false)
862
- {
863
- $file = $backupPath.'/'.$this->fileName.'_restore.log';
864
- $this->restoreLogPath = $file;
865
-
866
- if (!$exists) {
867
- $content = self::getLogFileHeader(SG_ACTION_TYPE_RESTORE, $this->fileName);
868
-
869
- $content .= PHP_EOL;
870
-
871
- if (!file_put_contents($file, $content)) {
872
- throw new SGExceptionMethodNotAllowed('Cannot create restore log file: '.$file);
873
- }
874
- }
875
-
876
- //create file log handler
877
- $fileLogHandler = new SGFileLogHandler($file);
878
- SGLog::registerLogHandler($fileLogHandler, SG_LOG_LEVEL_LOW, true);
879
- }
880
-
881
- private function didFinishRestore()
882
- {
883
- SGBackupLog::writeAction('restore', SG_BACKUP_LOG_POS_END);
884
-
885
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
886
- SGBackupMailNotification::sendRestoreNotification(true);
887
- }
888
-
889
- SGBackupLog::write('Memory pick usage: '.(memory_get_peak_usage(true)/1024/1024).'MB');
890
- if (function_exists('sys_getloadavg')) {
891
- SGBackupLog::write('CPU usage: '.implode(' / ', sys_getloadavg()));
892
- }
893
- SGBackupLog::write('Total duration: '.backupGuardFormattedDuration($this->actionStartTs, time()));
894
-
895
- $this->cleanUp();
896
- }
897
-
898
- private function didFinishFilesRestore()
899
- {
900
- $this->databaseBackupAvailable = file_exists($this->databaseBackupPath);
901
-
902
- if ($this->databaseBackupAvailable) {
903
- if ($this->state->getAction() == SG_STATE_ACTION_RESTORING_DATABASE) {
904
- self::changeActionStatus($this->actionId, SG_ACTION_STATUS_IN_PROGRESS_DB);
905
- }
906
-
907
- $this->backupDatabase->restore($this->databaseBackupPath);
908
- }
909
-
910
- $action = $this->didFindWarnings()?SG_ACTION_STATUS_FINISHED_WARNINGS:SG_ACTION_STATUS_FINISHED;
911
-
912
- self::changeActionStatus($this->actionId, $action);
913
-
914
- //we let the external restore to finalize the restore for itself
915
- if (SGExternalRestore::isEnabled()) {
916
- return;
917
- }
918
-
919
- $this->didFinishRestore();
920
- }
921
-
922
- public function finalizeExternalRestore($actionId)
923
- {
924
- $action = self::getAction($actionId);
925
-
926
- $this->state = backupGuardLoadStateData();
927
- $this->prepareForRestore($action['name']);
928
-
929
- $this->databaseBackupAvailable = file_exists($this->databaseBackupPath);
930
-
931
- if ($this->databaseBackupAvailable) {
932
- $this->backupDatabase->finalizeRestore();
933
- }
934
-
935
- $this->didFinishRestore();
936
- }
937
-
938
- /* General methods */
939
-
940
- public static function getLogFileHeader($actionType, $fileName)
941
- {
942
- $pluginCapabilities = backupGuardGetCapabilities();
943
-
944
- $confs = array();
945
- $confs['sg_backup_guard_version'] = SG_BACKUP_GUARD_VERSION;
946
- $confs['sg_archive_version'] = SG_ARCHIVE_VERSION;
947
- $confs['sg_user_mode'] = ($pluginCapabilities != BACKUP_GUARD_CAPABILITIES_FREE)?'pro':'free'; // Check if user is pro or free
948
- $confs['os'] = PHP_OS;
949
- $confs['server'] = @$_SERVER['SERVER_SOFTWARE'];
950
- $confs['php_version'] = PHP_VERSION;
951
- $confs['sapi'] = PHP_SAPI;
952
- $confs['mysql_version'] = SG_MYSQL_VERSION;
953
- $confs['int_size'] = PHP_INT_SIZE;
954
- $confs['method'] = backupGuardIsReloadEnabled()?'ON':'OFF';
955
-
956
- $confs['dbprefix'] = SG_ENV_DB_PREFIX;
957
- $confs['siteurl'] = SG_SITE_URL;
958
- $confs['homeurl'] = SG_HOME_URL;
959
- $confs['uploadspath'] = SG_UPLOAD_PATH;
960
- $confs['installation'] = SG_SITE_TYPE;
961
- $freeSpace = convertToReadableSize(@disk_free_space(SG_APP_ROOT_DIRECTORY));
962
- $confs['free_space'] = $freeSpace==false?'unknown':$freeSpace;
963
- $isCurlAvailable = function_exists('curl_version');
964
- $confs['curl_available'] = $isCurlAvailable ? 'Yes': 'No';
965
- $confs['email_notifications'] = SGConfig::get('SG_NOTIFICATIONS_ENABLED') ? 'ON': 'OFF';
966
- $confs['ftp_passive_mode'] = SGConfig::get('SG_FTP_PASSIVE_MODE') ? 'ON': 'OFF';
967
-
968
- if (extension_loaded('gmp')) $lib = 'gmp';
969
- else if (extension_loaded('bcmath')) $lib = 'bcmath';
970
- else $lib = 'BigInteger';
971
-
972
- $confs['int_lib'] = $lib;
973
- $confs['memory_limit'] = SGBoot::$memoryLimit;
974
- $confs['max_execution_time'] = SGBoot::$executionTimeLimit;
975
- $confs['env'] = SG_ENV_ADAPTER.' '.SG_ENV_VERSION;
976
-
977
- $content = '';
978
- $content .= 'Date: '.backupGuardConvertDateTimezone(@date('Y-m-d H:i')).' '.date_default_timezone_get().PHP_EOL;
979
- $content .= 'Reloads: '.$confs['method'].PHP_EOL;
980
-
981
- if ($actionType == SG_ACTION_TYPE_RESTORE) {
982
- $confs['restore_method'] = SGExternalRestore::isEnabled()?'external':'standard';
983
- $content .= 'Restore Method: '.$confs['restore_method'].PHP_EOL;
984
- }
985
-
986
- $content .= 'User mode: '.backupGuardGetProductName().PHP_EOL;
987
- $content .= 'BackupGuard version: '.$confs['sg_backup_guard_version'].PHP_EOL;
988
- $content .= 'Supported archive version: '.$confs['sg_archive_version'].PHP_EOL;
989
-
990
- $content .= 'Database prefix: '.$confs['dbprefix'].PHP_EOL;
991
- $content .= 'Site URL: '.$confs['siteurl'].PHP_EOL;
992
- $content .= 'Home URL: '.$confs['homeurl'].PHP_EOL;
993
- $content .= 'Uploads path: '.$confs['uploadspath'].PHP_EOL;
994
- $content .= 'Site installation: '.$confs['installation'].PHP_EOL;
995
-
996
- $content .= 'OS: '.$confs['os'].PHP_EOL;
997
- $content .= 'Server: '.$confs['server'].PHP_EOL;
998
- $content .= 'User agent: '.@$_SERVER['HTTP_USER_AGENT'].PHP_EOL;
999
- $content .= 'PHP version: '.$confs['php_version'].PHP_EOL;
1000
- $content .= 'MySQL version: '.$confs['mysql_version'].PHP_EOL;
1001
- $content .= 'Int size: '.$confs['int_size'].PHP_EOL;
1002
- $content .= 'Int lib: '.$confs['int_lib'].PHP_EOL;
1003
- $content .= 'Memory limit: '.$confs['memory_limit'].PHP_EOL;
1004
- $content .= 'Max execution time: '.$confs['max_execution_time'].PHP_EOL;
1005
- $content .= 'Disk free space: '.$confs['free_space'].PHP_EOL;
1006
- $content .= 'CURL available: '.$confs['curl_available'].PHP_EOL;
1007
- $content .= 'Openssl version: '.OPENSSL_VERSION_TEXT.PHP_EOL;
1008
- if ($isCurlAvailable) {
1009
- $cv = curl_version();
1010
- $curlVersionText = $cv['version'].' / SSL: '.$cv['ssl_version'].' / libz: '.$cv['libz_version'];
1011
- $content .= 'CURL version: '.$curlVersionText.PHP_EOL;
1012
- }
1013
- $content .= 'Email notifications: '.$confs['email_notifications'].PHP_EOL;
1014
- $content .= 'FTP passive mode: '.$confs['ftp_passive_mode'].PHP_EOL;
1015
- $content .= 'Exclude paths: '.SGConfig::get('SG_PATHS_TO_EXCLUDE').PHP_EOL;
1016
- $content .= 'Tables to exclude: '.SGConfig::get('SG_TABLES_TO_EXCLUDE').PHP_EOL;
1017
- $content .= 'Number of rows to backup: '.(int)SGConfig::get('SG_BACKUP_DATABASE_INSERT_LIMIT').PHP_EOL;
1018
- $content .= 'AJAX request frequency: '.SGConfig::get('SG_AJAX_REQUEST_FREQUENCY').PHP_EOL;
1019
-
1020
- if ($actionType == SG_ACTION_TYPE_RESTORE) {
1021
- $archivePath = SG_BACKUP_DIRECTORY.$fileName.'/'.$fileName.'.sgbp';
1022
- $archiveSizeInBytes = backupGuardRealFilesize($archivePath);
1023
- $confs['archiveSize'] = convertToReadableSize($archiveSizeInBytes);
1024
- $content .= 'Archive Size: '.$confs['archiveSize'].' ('.$archiveSizeInBytes.' bytes)'.PHP_EOL;
1025
- }
1026
-
1027
- $content .= 'Environment: '.$confs['env'].PHP_EOL;
1028
-
1029
- return $content;
1030
- }
1031
-
1032
- private function didFindWarnings()
1033
- {
1034
- $warningsDatabase = $this->databaseBackupAvailable?$this->backupDatabase->didFindWarnings():false;
1035
- $warningsFiles = $this->backupFiles->didFindWarnings();
1036
- return ($warningsFiles||$warningsDatabase);
1037
- }
1038
-
1039
- public static function createAction($name, $type, $status, $subtype = 0, $options = '')
1040
- {
1041
- $sgdb = SGDatabase::getInstance();
1042
-
1043
- $date = backupGuardConvertDateTimezone(@date('Y-m-d H:i:s'));
1044
- $res = $sgdb->query('INSERT INTO '.SG_ACTION_TABLE_NAME.' (name, type, subtype, status, start_date, options) VALUES (%s, %d, %d, %d, %s, %s)', array($name, $type, $subtype, $status, $date, $options));
1045
-
1046
- if (!$res) {
1047
- throw new SGExceptionDatabaseError('Could not create action');
1048
- }
1049
- return $sgdb->lastInsertId();
1050
- }
1051
-
1052
- private function getCurrentActionStatus()
1053
- {
1054
- return self::getActionStatus($this->actionId);
1055
- }
1056
-
1057
- private function setCurrentActionStatusCancelled()
1058
- {
1059
- $sgdb = SGDatabase::getInstance();
1060
- $date = backupGuardConvertDateTimezone(@date('Y-m-d H:i:s'));
1061
- $sgdb->query('UPDATE '.SG_ACTION_TABLE_NAME.' SET status=%d, update_date=%s WHERE name=%s', array(SG_ACTION_STATUS_CANCELLED, $date, $this->fileName));
1062
- }
1063
-
1064
- public static function changeActionStatus($actionId, $status)
1065
- {
1066
- $sgdb = SGDatabase::getInstance();
1067
-
1068
- $progress = '';
1069
- if ($status==SG_ACTION_STATUS_FINISHED || $status==SG_ACTION_STATUS_FINISHED_WARNINGS)
1070
- {
1071
- $progress = 100;
1072
- }
1073
- else if ($status==SG_ACTION_STATUS_CREATED || $status==SG_ACTION_STATUS_IN_PROGRESS_FILES || $status==SG_ACTION_STATUS_IN_PROGRESS_DB)
1074
- {
1075
- $progress = 0;
1076
- }
1077
-
1078
- if ($progress!=='')
1079
- {
1080
- $progress = ' progress='.$progress.',';
1081
- }
1082
-
1083
- $date = backupGuardConvertDateTimezone(@date('Y-m-d H:i:s'));
1084
- $res = $sgdb->query('UPDATE '.SG_ACTION_TABLE_NAME.' SET status=%d,'.$progress.' update_date=%s WHERE id=%d', array($status, $date, $actionId));
1085
- }
1086
-
1087
- public static function changeActionProgress($actionId, $progress)
1088
- {
1089
- $sgdb = SGDatabase::getInstance();
1090
- $date = backupGuardConvertDateTimezone(@date('Y-m-d H:i:s'));
1091
- $sgdb->query('UPDATE '.SG_ACTION_TABLE_NAME.' SET progress=%d, update_date=%s WHERE id=%d', array($progress, $date, $actionId));
1092
- }
1093
-
1094
- /* Methods for frontend use */
1095
-
1096
- public static function getAction($actionId)
1097
- {
1098
- $sgdb = SGDatabase::getInstance();
1099
- $res = $sgdb->query('SELECT * FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d', array($actionId));
1100
- if (empty($res))
1101
- {
1102
- return false;
1103
- }
1104
- return $res[0];
1105
- }
1106
-
1107
- public static function getActionByName($name)
1108
- {
1109
- $sgdb = SGDatabase::getInstance();
1110
- $res = $sgdb->query('SELECT * FROM '.SG_ACTION_TABLE_NAME.' WHERE name=%s', array($name));
1111
- if (empty($res)) {
1112
- return false;
1113
- }
1114
- return $res[0];
1115
- }
1116
-
1117
- public static function getActionProgress($actionId)
1118
- {
1119
- $sgdb = SGDatabase::getInstance();
1120
- $res = $sgdb->query('SELECT progress FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d', array($actionId));
1121
- if (empty($res))
1122
- {
1123
- return false;
1124
- }
1125
- return (int)$res[0]['progress'];
1126
- }
1127
-
1128
- public static function getActionStatus($actionId)
1129
- {
1130
- $sgdb = SGDatabase::getInstance();
1131
- $res = $sgdb->query('SELECT status FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d', array($actionId));
1132
- if (empty($res))
1133
- {
1134
- return false;
1135
- }
1136
- return (int)$res[0]['status'];
1137
- }
1138
-
1139
- public static function deleteActionById($actionId)
1140
- {
1141
- $sgdb = SGDatabase::getInstance();
1142
- $res = $sgdb->query('DELETE FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d', array($actionId));
1143
-
1144
- return $res;
1145
- }
1146
-
1147
- public static function cleanRunningActions($runningActions)
1148
- {
1149
- if (empty($runningActions)) {
1150
- return false;
1151
- }
1152
- foreach ($runningActions as $action) {
1153
- if (empty($action)) {
1154
- continue;
1155
- }
1156
- if ($action['status'] == SG_ACTION_STATUS_IN_PROGRESS_FILES || $action['status'] == SG_ACTION_STATUS_IN_PROGRESS_DB) {
1157
- $id = $action['id'];
1158
- SGBackup::deleteActionById($id);
1159
- }
1160
- }
1161
-
1162
- return true;
1163
- }
1164
-
1165
- public static function getRunningActions()
1166
- {
1167
- $sgdb = SGDatabase::getInstance();
1168
- $res = $sgdb->query('SELECT * FROM '.SG_ACTION_TABLE_NAME.' WHERE status=%d OR status=%d OR status=%d ORDER BY status DESC', array(SG_ACTION_STATUS_IN_PROGRESS_FILES, SG_ACTION_STATUS_IN_PROGRESS_DB, SG_ACTION_STATUS_CREATED));
1169
- return $res;
1170
- }
1171
-
1172
- public static function getBackupFileInfo($file)
1173
- {
1174
- return pathinfo(SG_BACKUP_DIRECTORY.$file);
1175
- }
1176
-
1177
- public static function autodetectBackups()
1178
- {
1179
- $path = SG_BACKUP_DIRECTORY;
1180
- $files = scandir(SG_BACKUP_DIRECTORY);
1181
- $backupLogPostfix = "_backup.log";
1182
- $restoreLogPostfix = "_restore.log";
1183
-
1184
- foreach ($files as $file) {
1185
- $fileInfo = self::getBackupFileInfo($file);
1186
-
1187
- if (!empty($fileInfo['extension']) && $fileInfo['extension'] == SGBP_EXT) {
1188
- @mkdir($path.$fileInfo['filename'], 0777);
1189
-
1190
- if(file_exists($path.$fileInfo['filename'])) {
1191
- rename($path.$file, $path.$fileInfo['filename'].'/'.$file);
1192
- }
1193
-
1194
- if(file_exists($path.$fileInfo['filename'].$backupLogPostfix)){
1195
- rename($path.$fileInfo['filename'].$backupLogPostfix, $path.$fileInfo['filename'].'/'.$fileInfo['filename'].$backupLogPostfix);
1196
- }
1197
-
1198
- if (file_exists($path.$fileInfo['filename'].$restoreLogPostfix)) {
1199
- rename($path.$fileInfo['filename'].$restoreLogPostfix, $path.$fileInfo['filename'].'/'.$fileInfo['filename'].$restoreLogPostfix);
1200
- }
1201
- }
1202
- }
1203
- }
1204
-
1205
- public static function getAllBackups()
1206
- {
1207
- $backups = array();
1208
-
1209
- $path = SG_BACKUP_DIRECTORY;
1210
- self::autodetectBackups();
1211
- clearstatcache();
1212
-
1213
- $action = self::getRunningActions();
1214
- if (SGBoot::isFeatureAvailable('NUMBER_OF_BACKUPS_TO_KEEP') && !count($action) && function_exists('backupGuardOutdatedBackupsCleanup')) {
1215
- backupGuardOutdatedBackupsCleanup($path);
1216
- }
1217
-
1218
- //remove external restore file
1219
- SGExternalRestore::getInstance()->cleanup();
1220
-
1221
- if ($handle = @opendir($path)) {
1222
- $sgdb = SGDatabase::getInstance();
1223
- $data = $sgdb->query('SELECT id, name, type, subtype, status, progress, update_date, options FROM '.SG_ACTION_TABLE_NAME);
1224
- $allBackups = array();
1225
- foreach ($data as $row) {
1226
- $allBackups[$row['name']][] = $row;
1227
- }
1228
-
1229
- while (($entry = readdir($handle)) !== false) {
1230
- if ($entry === '.' || $entry === '..' || !is_dir($path.$entry)) {
1231
- continue;
1232
- }
1233
-
1234
- $backup = array();
1235
- $backup['name'] = $entry;
1236
- $backup['id'] = '';
1237
- $backup['status'] = '';
1238
- $backup['files'] = file_exists($path.$entry.'/'.$entry.'.sgbp')?1:0;
1239
- $backup['backup_log'] = file_exists($path.$entry.'/'.$entry.'_backup.log')?1:0;
1240
- $backup['restore_log'] = file_exists($path.$entry.'/'.$entry.'_restore.log')?1:0;
1241
- $backup['options'] = '';
1242
- if (!$backup['files'] && !$backup['backup_log'] && !$backup['restore_log']) {
1243
- continue;
1244
- }
1245
- $backupRow = null;
1246
- if (isset($allBackups[$entry])) {
1247
- $skip = false;
1248
- foreach ($allBackups[$entry] as $row) {
1249
- if ($row['status']==SG_ACTION_STATUS_IN_PROGRESS_FILES || $row['status']==SG_ACTION_STATUS_IN_PROGRESS_DB) {
1250
- $backupRow = $row;
1251
- break;
1252
- }
1253
- else if (($row['status']==SG_ACTION_STATUS_CANCELLING || $row['status']==SG_ACTION_STATUS_CANCELLED) && $row['type']!=SG_ACTION_TYPE_UPLOAD) {
1254
- $skip = true;
1255
- break;
1256
- }
1257
-
1258
- $backupRow = $row;
1259
-
1260
- if ($row['status']==SG_ACTION_STATUS_FINISHED_WARNINGS || $row['status']==SG_ACTION_STATUS_ERROR) {
1261
- if ($row['type'] == SG_ACTION_TYPE_UPLOAD && file_exists(SG_BACKUP_DIRECTORY.$entry.'/'.$entry.'.sgbp')) {
1262
- $backupRow['status'] = SG_ACTION_STATUS_FINISHED_WARNINGS;
1263
- }
1264
- }
1265
- }
1266
-
1267
- if ($skip===true) {
1268
- continue;
1269
- }
1270
- }
1271
-
1272
- if ($backupRow) {
1273
- $backup['active'] = ($backupRow['status']==SG_ACTION_STATUS_IN_PROGRESS_FILES||
1274
- $backupRow['status']==SG_ACTION_STATUS_IN_PROGRESS_DB||
1275
- $backupRow['status']==SG_ACTION_STATUS_CREATED)?1:0;
1276
-
1277
- $backup['status'] = $backupRow['status'];
1278
- $backup['type'] = (int)$backupRow['type'];
1279
- $backup['subtype'] = (int)$backupRow['subtype'];
1280
- $backup['progress'] = (int)$backupRow['progress'];
1281
- $backup['id'] = (int)$backupRow['id'];
1282
- $backup['options'] = $backupRow['options'];
1283
- }
1284
- else {
1285
- $backup['active'] = 0;
1286
- }
1287
-
1288
- $size = '';
1289
- if ($backup['files']) {
1290
- $size = number_format(backupGuardRealFilesize($path.$entry.'/'.$entry.'.sgbp')/1000.0/1000.0, 2, '.', '').' MB';
1291
- }
1292
-
1293
- $backup['size'] = $size;
1294
-
1295
- $modifiedTime = filemtime($path.$entry.'/.');
1296
- $date = backupGuardConvertDateTimezone(@date('Y-m-d H:i', $modifiedTime));
1297
- $backup['date'] = $date;
1298
- $backup['modifiedTime'] = $modifiedTime;
1299
- $backups[] = $backup;
1300
- }
1301
- closedir($handle);
1302
- }
1303
-
1304
- usort($backups, array('SGBackup', 'sort'));
1305
- return array_values($backups);
1306
- }
1307
-
1308
- public static function sort($arg1, $arg2)
1309
- {
1310
- return $arg1['modifiedTime']>$arg2['modifiedTime']?-1:1;
1311
- }
1312
-
1313
- public static function deleteBackup($backupName, $deleteAction = true)
1314
- {
1315
- $isDeleteBackupFromCloudEnabled = SGConfig::get('SG_DELETE_BACKUP_FROM_CLOUD');
1316
- if($isDeleteBackupFromCloudEnabled) {
1317
- $backupRow = self::getActionByName($backupName);
1318
- if ($backupRow) {
1319
- $options = $backupRow['options'];
1320
- if ($options) {
1321
- $options = json_decode($options, true);
1322
-
1323
- if (!empty($options['SG_BACKUP_UPLOAD_TO_STORAGES'])) {
1324
- $storages = explode(',', $options['SG_BACKUP_UPLOAD_TO_STORAGES']);
1325
- self::deleteBackupFromCloud($storages, $backupName);
1326
- }
1327
- }
1328
- }
1329
- }
1330
-
1331
- backupGuardDeleteDirectory(SG_BACKUP_DIRECTORY.$backupName);
1332
-
1333
- if ($deleteAction) {
1334
- $sgdb = SGDatabase::getInstance();
1335
- $sgdb->query('DELETE FROM '.SG_ACTION_TABLE_NAME.' WHERE name=%s', array($backupName));
1336
- }
1337
- }
1338
-
1339
- private static function deleteBackupFromCloud($storages, $backupName)
1340
- {
1341
- foreach ($storages as $storage) {
1342
- $storage = (int)$storage;
1343
-
1344
- $sgBackupStorage = SGBackupStorage::getInstance();
1345
- $sgBackupStorage->deleteBackupFromStorage($storage, $backupName);
1346
- }
1347
- }
1348
-
1349
- public static function cancelAction($actionId)
1350
- {
1351
- self::changeActionStatus($actionId, SG_ACTION_STATUS_CANCELLING);
1352
- }
1353
-
1354
- public static function importKeyFile($sgSshKeyFile)
1355
- {
1356
- $filename = $sgSshKeyFile['name'];
1357
- $uploadPath = SG_BACKUP_DIRECTORY.SG_SSH_KEY_FILE_FOLDER_NAME;
1358
- $filename = $uploadPath.$filename;
1359
-
1360
- if (!@file_exists($uploadPath)) {
1361
- if (!@mkdir($uploadPath)) {
1362
- throw new SGExceptionForbidden('SSH key file folder is not accessible');
1363
- }
1364
- }
1365
-
1366
- if (!empty($sgSshKeyFile) && $sgSshKeyFile['name'] != '') {
1367
- if (!@move_uploaded_file($sgSshKeyFile['tmp_name'], $filename)) {
1368
- throw new SGExceptionForbidden('Error while uploading ssh key file');
1369
- }
1370
- }
1371
- }
1372
-
1373
- public static function upload($filesUploadSgbp)
1374
- {
1375
- $filename = str_replace('.sgbp', '', $filesUploadSgbp['name']);
1376
- $backupDirectory = $filename.'/';
1377
- $uploadPath = SG_BACKUP_DIRECTORY.$backupDirectory;
1378
- $filename = $uploadPath.$filename;
1379
-
1380
- if (!@file_exists($uploadPath))
1381
- {
1382
- if (!@mkdir($uploadPath))
1383
- {
1384
- throw new SGExceptionForbidden('Upload folder is not accessible');
1385
- }
1386
- }
1387
-
1388
- if (!empty($filesUploadSgbp) && $filesUploadSgbp['name'] != '')
1389
- {
1390
- if ($filesUploadSgbp['type'] != 'application/octet-stream')
1391
- {
1392
- throw new SGExceptionBadRequest('Not a valid backup file');
1393
- }
1394
- if (!@move_uploaded_file($filesUploadSgbp['tmp_name'], $filename.'.sgbp'))
1395
- {
1396
- throw new SGExceptionForbidden('Error while uploading file');
1397
- }
1398
- }
1399
- }
1400
-
1401
- public static function download($filename, $type)
1402
- {
1403
- $backupDirectory = SG_BACKUP_DIRECTORY.$filename.'/';
1404
- $backupName = $filename;
1405
- $downloadViaPhp = SGConfig::get('SG_DOWNLOAD_VIA_PHP');
1406
-
1407
- switch ($type)
1408
- {
1409
- case SG_BACKUP_DOWNLOAD_TYPE_SGBP:
1410
- $filename .= '.sgbp';
1411
- if ($downloadViaPhp) {
1412
- backupGuardDownloadFile($backupDirectory.$filename);
1413
- }
1414
- else {
1415
- backupGuardDownloadFileSymlink($backupDirectory, $filename);
1416
- }
1417
- break;
1418
- case SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG:
1419
- $filename .= '_backup.log';
1420
- backupGuardDownloadFile($backupDirectory.$filename, 'text/plain');
1421
- break;
1422
- case SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG:
1423
- $filename .= '_restore.log';
1424
- backupGuardDownloadFile($backupDirectory.$filename, 'text/plain');
1425
- break;
1426
- }
1427
-
1428
- exit;
1429
- }
1430
-
1431
- /* SGIBackupDelegate implementation */
1432
-
1433
- public function isCancelled()
1434
- {
1435
- $status = $this->getCurrentActionStatus();
1436
-
1437
- if ($status==SG_ACTION_STATUS_CANCELLING)
1438
- {
1439
- $this->cancel();
1440
- return true;
1441
- }
1442
-
1443
- return false;
1444
- }
1445
-
1446
- public function didUpdateProgress($progress)
1447
- {
1448
- $progress = max($progress, 0);
1449
- $progress = min($progress, 100);
1450
-
1451
- self::changeActionProgress($this->actionId, $progress);
1452
- }
1453
-
1454
- public function isBackgroundMode()
1455
- {
1456
- return $this->backgroundMode;
1457
- }
1458
-
1459
- public function setIsManual($isManual)
1460
- {
1461
- $this->isManual = $isManual;
1462
- }
1463
-
1464
- public function getIsManual()
1465
- {
1466
- return $this->isManual;
1467
- }
1468
- }
1
+ <?php
2
+
3
+ require_once SG_BACKUP_PATH . 'SGBackupLog.php';
4
+ require_once SG_RESTORE_PATH . 'SGExternalRestore.php';
5
+ require_once SG_LIB_PATH . 'SGState.php';
6
+ backupGuardIncludeFile(SG_LIB_PATH . 'SGBackgroundMode.php');
7
+ require_once SG_BACKUP_PATH . 'SGBackupFiles.php';
8
+ require_once SG_BACKUP_PATH . 'SGBackupDatabase.php';
9
+ backupGuardIncludeFile(SG_BACKUP_PATH . 'SGBackupStorage.php');
10
+ backupGuardIncludeFile(SG_BACKUP_PATH . 'SGBackupMailNotification.php');
11
+ require_once SG_LOG_PATH . 'SGFileLogHandler.php';
12
+ require_once SG_LIB_PATH . 'SGReloader.php';
13
+ require_once SG_LIB_PATH . 'SGCallback.php';
14
+
15
+ //close session for writing
16
+ @session_write_close();
17
+
18
+ class SGBackup implements SGIBackupDelegate
19
+ {
20
+ private $_backupFiles = null;
21
+ private $_backupDatabase = null;
22
+ private $_actionId = null;
23
+ private $_filesBackupAvailable = false;
24
+ private $_databaseBackupAvailable = false;
25
+ private $_isManual = true;
26
+ private $_actionStartTs = 0;
27
+ private $_fileName = '';
28
+ private $_filesBackupPath = '';
29
+ private $_databaseBackupPath = '';
30
+ private $_backupLogPath = '';
31
+ private $_restoreLogPath = '';
32
+ private $_backgroundMode = false;
33
+ private $_pendingStorageUploads = array();
34
+ private $_state = null;
35
+ private $_token = '';
36
+ private $_options = array();
37
+
38
+ public function __construct()
39
+ {
40
+ $this->_backupFiles = new SGBackupFiles();
41
+ $this->_backupFiles->setDelegate($this);
42
+
43
+ $this->_backupDatabase = new SGBackupDatabase();
44
+ $this->_backupDatabase->setDelegate($this);
45
+ }
46
+
47
+ public function getScheduleParamsById($id)
48
+ {
49
+ $sgdb = SGDatabase::getInstance();
50
+ $res = $sgdb->query('SELECT * FROM ' . SG_SCHEDULE_TABLE_NAME . ' WHERE id=%d', array($id));
51
+ if (empty($res)) {
52
+ return '';
53
+ }
54
+ return $res[0];
55
+ }
56
+
57
+ private function handleBackupExecutionTimeout()
58
+ {
59
+ $this->_backupDatabase->setFilePath($this->_databaseBackupPath);
60
+ $this->_backupDatabase->cancel();
61
+
62
+ $this->_backupFiles->setFilePath($this->_filesBackupPath);
63
+ $this->_backupFiles->cancel();
64
+
65
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
66
+ file_put_contents(dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME, 'Backup: failed', FILE_APPEND);
67
+ SGBackupMailNotification::sendBackupNotification(
68
+ SG_ACTION_STATUS_ERROR,
69
+ array(
70
+ 'flowFilePath' => dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME,
71
+ 'archiveName' => $this->_fileName
72
+ )
73
+ );
74
+ }
75
+ }
76
+
77
+ private function handleRestoreExecutionTimeout()
78
+ {
79
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
80
+ file_put_contents(dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME, 'Restore: failed', FILE_APPEND);
81
+ SGBackupMailNotification::sendRestoreNotification(
82
+ false,
83
+ array(
84
+ 'flowFilePath' => dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME,
85
+ 'archiveName' => $this->_fileName
86
+ )
87
+ );
88
+ }
89
+ }
90
+
91
+ private function handleUploadExecutionTimeout()
92
+ {
93
+ self::changeActionStatus($this->_actionId, SG_ACTION_STATUS_FINISHED_WARNINGS);
94
+
95
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
96
+ file_put_contents(dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME, 'Upload: failed', FILE_APPEND);
97
+
98
+ SGBackupMailNotification::sendUploadNotification(
99
+ false,
100
+ array(
101
+ 'flowFilePath' => dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME,
102
+ 'archiveName' => $this->_fileName
103
+ )
104
+ );
105
+ }
106
+ }
107
+
108
+ public function handleExecutionTimeout($actionId)
109
+ {
110
+ $this->_actionId = $actionId;
111
+ $action = self::getAction($actionId);
112
+ $this->_fileName = $action['name'];
113
+ $actionType = $action['type'];
114
+ $backupPath = SG_BACKUP_DIRECTORY . $this->_fileName;
115
+
116
+ $this->_filesBackupPath = $backupPath . '/' . $this->_fileName . '.sgbp';
117
+ $this->_databaseBackupPath = $backupPath . '/' . $this->_fileName . '.sql';
118
+
119
+ if ($actionType == SG_ACTION_TYPE_RESTORE) {
120
+ $this->handleRestoreExecutionTimeout();
121
+ $this->prepareRestoreLogFile($backupPath, true);
122
+ } elseif ($actionType == SG_ACTION_TYPE_BACKUP) {
123
+ $this->handleBackupExecutionTimeout();
124
+ $this->prepareBackupLogFile($backupPath, true);
125
+ } else {
126
+ $this->handleUploadExecutionTimeout();
127
+ $this->prepareBackupLogFile($backupPath, true);
128
+ }
129
+
130
+ //Stop all the running actions related to the specific backup, like backup, upload...
131
+ $allActions = self::getRunningActions();
132
+ foreach ($allActions as $action) {
133
+ self::changeActionStatus($action['id'], SG_ACTION_STATUS_ERROR);
134
+ }
135
+
136
+ $exception = new SGExceptionExecutionTimeError();
137
+ SGBackupLog::writeExceptionObject($exception);
138
+ SGConfig::set('SG_EXCEPTION_TIMEOUT_ERROR', '1', true);
139
+ }
140
+
141
+ public function listStorage($storage)
142
+ {
143
+ if (SGBoot::isFeatureAvailable('DOWNLOAD_FROM_CLOUD')) {
144
+ $listOfFiles = SGBackupStorage::getInstance()->listStorage($storage);
145
+ return $listOfFiles;
146
+ }
147
+
148
+ return array();
149
+ }
150
+
151
+ public function downloadBackupArchiveFromCloud($archive, $storage, $size, $backupId = null)
152
+ {
153
+ $result = false;
154
+ if (SGBoot::isFeatureAvailable('DOWNLOAD_FROM_CLOUD')) {
155
+ $result = SGBackupStorage::getInstance()->downloadBackupArchiveFromCloud($storage, $archive, $size, $backupId);
156
+ }
157
+
158
+ return $result;
159
+ }
160
+
161
+ public function getState()
162
+ {
163
+ return $this->_state;
164
+ }
165
+
166
+ private function prepareFilesStateFile()
167
+ {
168
+ $this->_state = new SGFileState();
169
+
170
+ $this->_state->setRanges(array());
171
+ $this->_state->setOffset(0);
172
+ $this->_state->setToken($this->_token);
173
+ $this->_state->setAction(SG_STATE_ACTION_PREPARING_STATE_FILE);
174
+ $this->_state->setType(SG_STATE_TYPE_FILE);
175
+ $this->_state->setActionId($this->_actionId);
176
+ $this->_state->setActionStartTs($this->_actionStartTs);
177
+ $this->_state->setBackupFileName($this->_fileName);
178
+ $this->_state->setBackupFilePath($this->_filesBackupPath);
179
+ $this->_state->setPendingStorageUploads($this->_pendingStorageUploads);
180
+ $this->_state->setCdrCursor(0);
181
+ $this->_state->setRestoreMode(@$this->restoreMode);
182
+ $this->_state->setRestoreFiles(@$this->restoreFiles);
183
+ }
184
+
185
+ private function prepareDBStateFile()
186
+ {
187
+ $this->_state = new SGDBState();
188
+ $this->_state->setToken($this->_token);
189
+ $this->_state->setOffset(0);
190
+ $this->_state->setAction(SG_STATE_ACTION_PREPARING_STATE_FILE);
191
+ $this->_state->setType(SG_STATE_TYPE_DB);
192
+ $this->_state->setActionId($this->_actionId);
193
+ $this->_state->setActionStartTs($this->_actionStartTs);
194
+ $this->_state->setBackupFileName($this->_fileName);
195
+ $this->_state->setBackupFilePath($this->_filesBackupPath);
196
+ $this->_state->setPendingStorageUploads($this->_pendingStorageUploads);
197
+ $this->_state->setBackedUpTables(array());
198
+ $this->_state->setTablesToBackup(@$this->_options['SG_BACKUP_TABLES_TO_BACKUP']);
199
+ }
200
+
201
+ private function prepareUploadStateFile()
202
+ {
203
+ $this->_state = new SGUploadState();
204
+ $this->_state->setOffset(0);
205
+ $this->_state->setActiveDirectory('');
206
+ $this->_state->setCurrentUploadChunksCount(0);
207
+ $this->_state->setTotalUploadChunksCount(0);
208
+ $this->_state->setUploadId(0);
209
+ $this->_state->setParts(array());
210
+ $this->_state->setToken($this->_token);
211
+ $this->_state->setAction(SG_STATE_ACTION_PREPARING_STATE_FILE);
212
+ $this->_state->setType(SG_STATE_TYPE_UPLOAD);
213
+ $this->_state->setActionId($this->_actionId);
214
+ $this->_state->setActionStartTs($this->_actionStartTs);
215
+ $this->_state->setBackupFileName($this->_fileName);
216
+ $this->_state->setBackupFilePath($this->_filesBackupPath);
217
+ $this->_state->setPendingStorageUploads($this->_pendingStorageUploads);
218
+ }
219
+
220
+ public function prepareMigrateStateFile()
221
+ {
222
+ $this->_state = new SGMigrateState();
223
+ $this->_state->setActionId($this->_actionId);
224
+ $this->_state->setAction(SG_STATE_ACTION_PREPARING_STATE_FILE);
225
+ $this->_state->setInprogress(false);
226
+ $this->_state->setTableCursor(0);
227
+ $this->_state->setColumnCursor(0);
228
+ $this->_state->setToken($this->_token);
229
+ }
230
+
231
+ public function getNoprivReloadAjaxUrl()
232
+ {
233
+ $url = @$_SERVER['REQUEST_URI'];
234
+
235
+ if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
236
+ if (strpos($url, 'wp-cron.php')) {
237
+ $url = substr($url, 0, strpos($url, 'wp-cron.php'));
238
+ $url .= 'wp-admin/admin-ajax.php';
239
+ }
240
+
241
+ //this is needed for users that use alternate cron
242
+ if (strpos($url, 'wp-admin/tools.php')) {
243
+ $url = substr($url, 0, strpos($url, 'wp-admin/tools.php'));
244
+ $url .= 'wp-admin/admin-ajax.php';
245
+ }
246
+
247
+ $url = explode('?', $url);
248
+ $url = $url[0] . '?action=backup_guard_awake&token=' . $this->_token;
249
+ }
250
+
251
+ return $url;
252
+ }
253
+
254
+ public function reload()
255
+ {
256
+ $url = $this->getNoprivReloadAjaxUrl();
257
+ $callback = new SGCallback("SGBackup", "reloadCallback");
258
+
259
+ SGReloader::didCompleteCallback();
260
+ SGReloader::registerCallback($callback);
261
+ SGReloader::reloadWithAjaxUrl($url);
262
+ die();
263
+ }
264
+
265
+ public function reloadCallback($params)
266
+ {
267
+ $actions = self::getRunningActions();
268
+ if (count($actions)) {
269
+ $action = $actions[0];
270
+ $method = $params['method'];
271
+
272
+ $this->_state = backupGuardLoadStateData();
273
+ if ($action['type'] == SG_ACTION_TYPE_RESTORE) {
274
+ $this->restore($action['name']);
275
+ } else {
276
+ $options = json_decode($action['options'], true);
277
+ $this->backup($options, $this->_state, $method);
278
+ }
279
+ }
280
+ }
281
+
282
+ private function saveStateFile()
283
+ {
284
+ $this->_state->save();
285
+ }
286
+
287
+ public function getToken()
288
+ {
289
+ return $this->_token;
290
+ }
291
+
292
+ private function reloadMethodNameByMethodId($method)
293
+ {
294
+ $name = "none";
295
+ switch ($method) {
296
+ case SG_RELOAD_METHOD_STREAM:
297
+ $name = "stream";
298
+ break;
299
+ case SG_RELOAD_METHOD_CURL:
300
+ $name = "curl";
301
+ break;
302
+ case SG_RELOAD_METHOD_SOCKET:
303
+ $name = "socket";
304
+ break;
305
+ case SG_RELOAD_METHOD_AJAX:
306
+ $name = "ajax";
307
+ break;
308
+ default:
309
+ break;
310
+ }
311
+
312
+ return $name;
313
+ }
314
+
315
+ /* Backup implementation */
316
+ public function backup($options, $state = false, $reloadMethod = null)
317
+ {
318
+ SGPing::update();
319
+
320
+ $this->_options = $options;
321
+ $this->_token = backupGuardGenerateToken();
322
+
323
+ $this->_filesBackupAvailable = isset($options['SG_ACTION_BACKUP_FILES_AVAILABLE']) ? $options['SG_ACTION_BACKUP_FILES_AVAILABLE'] : false;
324
+ $this->_databaseBackupAvailable = isset($options['SG_ACTION_BACKUP_DATABASE_AVAILABLE']) ? $options['SG_ACTION_BACKUP_DATABASE_AVAILABLE'] : false;
325
+ $this->_backgroundMode = isset($options['SG_BACKUP_IN_BACKGROUND_MODE']) ? $options['SG_BACKUP_IN_BACKGROUND_MODE'] : false;
326
+
327
+ if (!$state) {
328
+ $this->_fileName = $this->getBackupFileName();
329
+ $this->prepareBackupFolder(SG_BACKUP_DIRECTORY . $this->_fileName);
330
+ $this->prepareForBackup($options);
331
+ $this->prepareBackupReport();
332
+
333
+ SGBackupLog::write("Reload method set to ajax");
334
+ SGConfig::set('SG_RELOAD_METHOD', SG_RELOAD_METHOD_AJAX, true);
335
+
336
+ if ($this->_databaseBackupAvailable) {
337
+ $this->prepareDBStateFile();
338
+ } else {
339
+ $this->prepareFilesStateFile();
340
+ }
341
+
342
+ $this->saveStateFile();
343
+ SGReloader::reset();
344
+ if (backupGuardIsReloadEnabled()) {
345
+ $this->reload();
346
+ }
347
+ } else {
348
+ $this->_state = $state;
349
+ $this->_fileName = $state->getBackupFileName();
350
+ $this->_actionId = $state->getActionId();
351
+ $this->_actionStartTs = $state->getActionStartTs();
352
+ $this->_pendingStorageUploads = $state->getPendingStorageUploads();
353
+
354
+ $this->prepareBackupLogFile(SG_BACKUP_DIRECTORY . $this->_fileName, true);
355
+ $this->setBackupPaths();
356
+ $this->prepareAdditionalConfigurations();
357
+ }
358
+
359
+ SGPing::update();
360
+
361
+ try {
362
+ $rootDirectory = rtrim(SGConfig::get('SG_APP_ROOT_DIRECTORY'), '/') . '/';
363
+
364
+ if ($this->_databaseBackupAvailable) {
365
+ $this->_backupDatabase->setFilePath($this->_databaseBackupPath);
366
+ $this->_backupDatabase->setPendingStorageUploads($this->_pendingStorageUploads);
367
+
368
+ if (!$this->_filesBackupAvailable) {
369
+ $options['SG_BACKUP_FILE_PATHS'] = '';
370
+ }
371
+
372
+ if ($this->_state->getType() == SG_STATE_TYPE_DB) {
373
+ $this->_backupDatabase->backup($this->_databaseBackupPath);
374
+ $this->prepareFilesStateFile();
375
+ $this->saveStateFile();
376
+ self::changeActionStatus($this->_actionId, SG_ACTION_STATUS_IN_PROGRESS_FILES);
377
+
378
+ if (backupGuardIsReloadEnabled()) {
379
+ $this->reload();
380
+ }
381
+ }
382
+
383
+ $path = substr($this->_databaseBackupPath, strlen($rootDirectory));
384
+ $this->_backupFiles->addDontExclude($this->_databaseBackupPath);
385
+ $backupItems = $options['SG_BACKUP_FILE_PATHS'];
386
+ $allItems = $backupItems ? explode(',', $backupItems) : array();
387
+ $allItems[] = $path;
388
+ $options['SG_BACKUP_FILE_PATHS'] = implode(',', $allItems);
389
+
390
+ if ($this->_state->getType() == SG_STATE_TYPE_DB) {
391
+ $currentStatus = $this->getCurrentActionStatus();
392
+ if ($currentStatus == SG_ACTION_STATUS_CANCELLING || $currentStatus == SG_ACTION_STATUS_CANCELLED) {
393
+ // If action canceled during backup of database, cancelaion handling will happen here
394
+ // in other cases handling will happen in respective classes
395
+ $this->cancel();
396
+ }
397
+ }
398
+ }
399
+
400
+ if ($this->_state->getType() == SG_STATE_TYPE_FILE) {
401
+ //* TODO: check this logic
402
+ /*
403
+ $treeFilePath = SG_BACKUP_DIRECTORY.$this->_fileName.'/'.SG_TREE_FILE_NAME;
404
+ $treeFilePathWithoutRootDir = substr($treeFilePath, strlen($rootDirectory));
405
+ $this->_backupFiles->addDontExclude($treeFilePath);
406
+ $backupItems = $options['SG_BACKUP_FILE_PATHS'];
407
+ $allItems = $backupItems?explode(',', $backupItems):array();
408
+ $allItems[] = $treeFilePathWithoutRootDir;
409
+ $options['SG_BACKUP_FILE_PATHS'] = implode(',', $allItems);
410
+ */
411
+
412
+ $this->_backupFiles->setPendingStorageUploads($this->_pendingStorageUploads);
413
+ $this->_backupFiles->backup($this->_filesBackupPath, $options, $this->_state);
414
+ $this->didFinishBackup();
415
+
416
+ SGPing::update();
417
+
418
+ $this->prepareUploadStateFile();
419
+ $this->saveStateFile();
420
+ }
421
+
422
+ //continue uploading backup to storages
423
+ $this->backupUploadToStorages();
424
+
425
+ // Clear temporary files
426
+ $this->clear();
427
+ } catch (SGException $exception) {
428
+ if ($exception instanceof SGExceptionSkip) {
429
+ $this->setCurrentActionStatusCancelled();
430
+ } else {
431
+ SGBackupLog::writeExceptionObject($exception);
432
+
433
+ if ($this->_state->getType() != SG_STATE_TYPE_UPLOAD) {
434
+ if ($this->_databaseBackupAvailable) {
435
+ $this->_backupDatabase->cancel();
436
+ }
437
+
438
+ $this->_backupFiles->cancel();
439
+ }
440
+
441
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
442
+ //Writing backup status to report file
443
+ file_put_contents(dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME, 'Backup: failed', FILE_APPEND);
444
+ SGBackupMailNotification::sendBackupNotification(
445
+ SG_ACTION_STATUS_ERROR,
446
+ array(
447
+ 'flowFilePath' => dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME,
448
+ 'archiveName' => $this->_fileName
449
+ )
450
+ );
451
+ }
452
+
453
+ self::changeActionStatus($this->_actionId, SG_ACTION_STATUS_ERROR);
454
+ }
455
+
456
+ // Clear temporary files
457
+ $this->clear();
458
+ }
459
+ }
460
+
461
+ private function prepareBackupReport()
462
+ {
463
+ file_put_contents(dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME, 'Report for: ' . SG_SITE_URL . "\n", FILE_APPEND);
464
+ }
465
+
466
+ private function shouldDeleteBackupAfterUpload()
467
+ {
468
+ return SGConfig::get('SG_DELETE_BACKUP_AFTER_UPLOAD') ? true : false;
469
+ }
470
+
471
+ private function backupUploadToStorages()
472
+ {
473
+ //check list of storages to upload if any
474
+ $uploadToStorages = count($this->_pendingStorageUploads) ? true : false;
475
+ if (SGBoot::isFeatureAvailable('STORAGE') && $uploadToStorages) {
476
+ while (count($this->_pendingStorageUploads)) {
477
+ $sgBackupStorage = SGBackupStorage::getInstance();
478
+ $storageId = $this->_pendingStorageUploads[0];
479
+
480
+ $storageInfo = $sgBackupStorage->getStorageInfoById($storageId);
481
+ if (empty($storageInfo['isConnected'])) {
482
+ SGBackupLog::write($storageInfo['storageName'] . ' stopped');
483
+ array_shift($this->_pendingStorageUploads);
484
+ continue;
485
+ }
486
+
487
+ if ($this->_state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
488
+ // Create action for upload
489
+ $this->_actionId = SGBackupStorage::queueBackupForUpload($this->_fileName, $storageId, $this->_options);
490
+ } else {
491
+ // Get upload action id if it does not finished yet
492
+ $this->_actionId = $this->_state->getActionId();
493
+ }
494
+
495
+
496
+ $sgBackupStorage->setDelegate($this);
497
+ $sgBackupStorage->setState($this->_state);
498
+ $sgBackupStorage->setToken($this->_token);
499
+ $sgBackupStorage->setPendingStorageUploads($this->_pendingStorageUploads);
500
+ $sgBackupStorage->startUploadByActionId($this->_actionId);
501
+
502
+ array_shift($this->_pendingStorageUploads);
503
+ // Reset state file to defaults for next storage upload
504
+ $this->prepareUploadStateFile();
505
+ }
506
+
507
+ $this->didFinishUpload();
508
+ }
509
+ }
510
+
511
+ private function didFinishUpload()
512
+ {
513
+ //check if option is enabled
514
+ $isDeleteLocalBackupFeatureAvailable = SGBoot::isFeatureAvailable('DELETE_LOCAL_BACKUP_AFTER_UPLOAD');
515
+
516
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
517
+ SGBackupMailNotification::sendBackupNotification(
518
+ SG_ACTION_STATUS_FINISHED,
519
+ array(
520
+ 'flowFilePath' => dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME,
521
+ 'archiveName' => $this->_fileName
522
+ )
523
+ );
524
+ }
525
+
526
+ $status = SGBackup::getActionStatus($this->_actionId);
527
+
528
+ if ($this->shouldDeleteBackupAfterUpload() && $isDeleteLocalBackupFeatureAvailable && $status == SG_ACTION_STATUS_FINISHED) {
529
+ @unlink(SG_BACKUP_DIRECTORY . $this->_fileName . '/' . $this->_fileName . '.' . SGBP_EXT);
530
+ }
531
+ }
532
+
533
+ // Delete state and flow files after upload
534
+ private function clear()
535
+ {
536
+ @unlink(dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME);
537
+ /// ToDo check this logic
538
+ //@unlink(SG_BACKUP_DIRECTORY.$this->_fileName.'/'.SG_TREE_FILE_NAME);
539
+ @unlink(SG_BACKUP_DIRECTORY . SG_STATE_FILE_NAME);
540
+ @unlink(SG_BACKUP_DIRECTORY . SG_RELOADER_STATE_FILE_NAME);
541
+ @unlink(SG_PING_FILE_PATH);
542
+ SGConfig::set("SG_CUSTOM_BACKUP_NAME", '');
543
+ }
544
+
545
+ private function cleanUp()
546
+ {
547
+ //delete sql file
548
+ if ($this->_databaseBackupAvailable) {
549
+ @unlink($this->_databaseBackupPath);
550
+ }
551
+ }
552
+
553
+ private function getBackupFileName()
554
+ {
555
+ if (SGConfig::get("SG_CUSTOM_BACKUP_NAME")) {
556
+ return backupGuardRemoveSlashes(SGConfig::get("SG_CUSTOM_BACKUP_NAME"));
557
+ }
558
+
559
+ $sgBackupPrefix = SG_BACKUP_FILE_NAME_DEFAULT_PREFIX;
560
+ if (function_exists('backupGuardGetCustomPrefix') && SGBoot::isFeatureAvailable('CUSTOM_BACKUP_NAME')) {
561
+ $sgBackupPrefix = backupGuardGetCustomPrefix();
562
+ }
563
+
564
+ $sgBackupPrefix .= backupGuardGetFilenameOptions($this->_options);
565
+
566
+ $date = backupGuardConvertDateTimezone(@date('YmdHis'), 'YmdHis');
567
+ return $sgBackupPrefix . ($date);
568
+ }
569
+
570
+ private function prepareBackupFolder($backupPath)
571
+ {
572
+ if (!is_writable(SG_BACKUP_DIRECTORY)) {
573
+ throw new SGExceptionForbidden('Permission denied. Directory is not writable: ' . $backupPath);
574
+ }
575
+
576
+ //create backup folder
577
+ if (!file_exists($backupPath) && !@mkdir($backupPath)) {
578
+ throw new SGExceptionMethodNotAllowed('Cannot create folder: ' . $backupPath);
579
+ }
580
+
581
+ if (!is_writable($backupPath)) {
582
+ throw new SGExceptionForbidden('Permission denied. Directory is not writable: ' . $backupPath);
583
+ }
584
+
585
+ //create backup log file
586
+ $this->prepareBackupLogFile($backupPath);
587
+ }
588
+
589
+ private function extendLogFileHeader($content)
590
+ {
591
+ $isManual = $this->getIsManual();
592
+ if ($isManual) {
593
+ $content .= 'Backup mode: Manual' . PHP_EOL;
594
+ } else {
595
+ $content .= 'Backup mode: Schedule' . PHP_EOL;
596
+ }
597
+
598
+ return $content;
599
+ }
600
+
601
+ private function prepareBackupLogFile($backupPath, $exists = false)
602
+ {
603
+ $file = $backupPath . '/' . $this->_fileName . '_backup.log';
604
+ $this->_backupLogPath = $file;
605
+
606
+ if (!$exists) {
607
+ $content = self::getLogFileHeader(SG_ACTION_TYPE_BACKUP, $this->_fileName);
608
+ $content = $this->extendLogFileHeader($content);
609
+
610
+ $types = array();
611
+ if ($this->_filesBackupAvailable) {
612
+ $types[] = 'files';
613
+ }
614
+ if ($this->_databaseBackupAvailable) {
615
+ $types[] = 'database';
616
+ }
617
+
618
+ $content .= 'Backup type: ' . implode(',', $types) . PHP_EOL . PHP_EOL;
619
+
620
+ if (!file_put_contents($file, $content)) {
621
+ throw new SGExceptionMethodNotAllowed('Cannot create backup log file: ' . $file);
622
+ }
623
+ }
624
+
625
+ //create file log handler
626
+ $fileLogHandler = new SGFileLogHandler($file);
627
+ SGLog::registerLogHandler($fileLogHandler, SG_LOG_LEVEL_LOW, true);
628
+ }
629
+
630
+ private function setBackupPaths()
631
+ {
632
+ $this->_filesBackupPath = SG_BACKUP_DIRECTORY . $this->_fileName . '/' . $this->_fileName . '.sgbp';
633
+ $this->_databaseBackupPath = SG_BACKUP_DIRECTORY . $this->_fileName . '/' . $this->_fileName . '.sql';
634
+ }
635
+
636
+ private function prepareUploadToStorages($options)
637
+ {
638
+ $uploadToStorages = $options['SG_BACKUP_UPLOAD_TO_STORAGES'];
639
+
640
+ if (SGBoot::isFeatureAvailable('STORAGE') && $uploadToStorages) {
641
+ $this->_pendingStorageUploads = explode(',', $uploadToStorages);
642
+ }
643
+ }
644
+
645
+ private function prepareAdditionalConfigurations()
646
+ {
647
+ $this->_backupFiles->setFilePath($this->_filesBackupPath);
648
+ SGConfig::set('SG_RUNNING_ACTION', 1, true);
649
+ }
650
+
651
+ private function prepareForBackup($options)
652
+ {
653
+ //start logging
654
+ SGBackupLog::writeAction('backup', SG_BACKUP_LOG_POS_START);
655
+
656
+ //save timestamp for future use
657
+ $this->_actionStartTs = time();
658
+
659
+ //create action inside db
660
+ $status = $this->_databaseBackupAvailable ? SG_ACTION_STATUS_IN_PROGRESS_DB : SG_ACTION_STATUS_IN_PROGRESS_FILES;
661
+ $this->_actionId = self::createAction($this->_fileName, SG_ACTION_TYPE_BACKUP, $status, 0, json_encode($options));
662
+
663
+ //set paths
664
+ $this->setBackupPaths();
665
+
666
+ //prepare sgbp file
667
+ @file_put_contents($this->_filesBackupPath, '');
668
+
669
+ if (!is_writable($this->_filesBackupPath)) {
670
+ throw new SGExceptionForbidden('Could not create backup file: ' . $this->_filesBackupPath);
671
+ }
672
+
673
+ //additional configuration
674
+ $this->prepareAdditionalConfigurations();
675
+
676
+ //check if upload to storages is needed
677
+ $this->prepareUploadToStorages($options);
678
+ }
679
+
680
+ public function cancel()
681
+ {
682
+ $dir = SG_BACKUP_DIRECTORY . $this->_fileName;
683
+
684
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
685
+ //Writing backup status to report file
686
+ file_put_contents($dir . '/' . SG_REPORT_FILE_NAME, 'Backup: canceled', FILE_APPEND);
687
+ SGBackupMailNotification::sendBackupNotification(
688
+ SG_ACTION_STATUS_CANCELLED,
689
+ array(
690
+ 'flowFilePath' => dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME,
691
+ 'archiveName' => $this->_fileName
692
+ )
693
+ );
694
+ }
695
+
696
+ if ($dir != SG_BACKUP_DIRECTORY) {
697
+ backupGuardDeleteDirectory($dir);
698
+ }
699
+
700
+ $this->clear();
701
+ throw new SGExceptionSkip();
702
+ }
703
+
704
+ private function didFinishBackup()
705
+ {
706
+ if (SGConfig::get('SG_REVIEW_POPUP_STATE') != SG_NEVER_SHOW_REVIEW_POPUP) {
707
+ SGConfig::set('SG_REVIEW_POPUP_STATE', SG_SHOW_REVIEW_POPUP);
708
+ }
709
+
710
+ $action = $this->didFindWarnings() ? SG_ACTION_STATUS_FINISHED_WARNINGS : SG_ACTION_STATUS_FINISHED;
711
+ self::changeActionStatus($this->_actionId, $action);
712
+
713
+ SGBackupLog::writeAction('backup', SG_BACKUP_LOG_POS_END);
714
+
715
+ $report = $this->didFindWarnings() ? 'completed with warnings' : 'completed';
716
+
717
+ //Writing backup status to report file
718
+ file_put_contents(dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME, 'Backup: ' . $report . "\n", FILE_APPEND);
719
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS') && !count($this->_pendingStorageUploads)) {
720
+ SGBackupMailNotification::sendBackupNotification(
721
+ $action,
722
+ array(
723
+ 'flowFilePath' => dirname($this->_filesBackupPath) . '/' . SG_REPORT_FILE_NAME,
724
+ 'archiveName' => $this->_fileName
725
+ )
726
+ );
727
+ }
728
+
729
+ SGBackupLog::write('Total duration: ' . backupGuardFormattedDuration($this->_actionStartTs, time()));
730
+ SGBackupLog::write('Memory pick usage: ' . (memory_get_peak_usage(true) / 1024 / 1024) . 'MB');
731
+ if (function_exists('sys_getloadavg')) {
732
+ SGBackupLog::write('CPU usage: ' . implode(' / ', sys_getloadavg()));
733
+ }
734
+
735
+ $archiveSizeInBytes = backupGuardRealFilesize($this->_filesBackupPath);
736
+ $archiveSize = convertToReadableSize($archiveSizeInBytes);
737
+ SGBackupLog::write("Archive size: " . $archiveSize . " (" . $archiveSizeInBytes . " bytes)");
738
+
739
+ $this->cleanUp();
740
+ if (SGBoot::isFeatureAvailable('NUMBER_OF_BACKUPS_TO_KEEP') && function_exists('backupGuardOutdatedBackupsCleanup')) {
741
+ backupGuardOutdatedBackupsCleanup(SG_BACKUP_DIRECTORY);
742
+ }
743
+ }
744
+
745
+ public function handleMigrationErrors($exception)
746
+ {
747
+ SGConfig::set('SG_BACKUP_SHOW_MIGRATION_ERROR', 1);
748
+ SGConfig::set('SG_BACKUP_MIGRATION_ERROR', (string) $exception);
749
+ }
750
+
751
+ public function getActionId()
752
+ {
753
+ return $this->_actionId;
754
+ }
755
+
756
+ /* Restore implementation */
757
+
758
+ public function restore($backupName, $restoreMode = null, $restoreFiles = null)
759
+ {
760
+ try {
761
+ SGPing::update();
762
+ $this->_token = backupGuardGenerateToken();
763
+ if ($restoreMode != null) {
764
+ $this->restoreMode = $restoreMode;
765
+ }
766
+ if ($restoreFiles != null) {
767
+ $this->restoreFiles = $restoreFiles;
768
+ }
769
+ $backupName = backupGuardRemoveSlashes($backupName);
770
+ $this->prepareForRestore($backupName);
771
+
772
+ if ($this->_state && ($this->_state->getAction() == SG_STATE_ACTION_RESTORING_DATABASE || $this->_state->getAction() == SG_STATE_ACTION_MIGRATING_DATABASE)) {
773
+ $this->didFinishFilesRestore();
774
+ } else {
775
+ $this->_backupFiles->setFileName($backupName);
776
+ $this->_backupFiles->restore($this->_filesBackupPath);
777
+
778
+ $this->prepareDBStateFile();
779
+ $this->didFinishFilesRestore();
780
+ }
781
+ } catch (SGException $exception) {
782
+ if (!$exception instanceof SGExceptionSkip) {
783
+ SGBackupLog::writeExceptionObject($exception);
784
+
785
+ if ($exception instanceof SGExceptionMigrationError) {
786
+ $this->handleMigrationErrors($exception);
787
+ }
788
+
789
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
790
+ SGBackupMailNotification::sendRestoreNotification(false);
791
+ }
792
+
793
+ self::changeActionStatus($this->_actionId, SG_ACTION_STATUS_FINISHED_WARNINGS);
794
+ } else {
795
+ self::changeActionStatus($this->_actionId, SG_ACTION_STATUS_CANCELLED);
796
+ }
797
+ }
798
+ }
799
+
800
+ private function prepareForRestore($backupName)
801
+ {
802
+ //prepare file name
803
+ $this->_fileName = $backupName;
804
+
805
+ //set paths
806
+ $restorePath = SG_BACKUP_DIRECTORY . $this->_fileName;
807
+ $this->_filesBackupPath = $restorePath . '/' . $this->_fileName . '.sgbp';
808
+ $this->_databaseBackupPath = $restorePath . '/' . $this->_fileName . '.sql';
809
+
810
+ if (!$this->_state) {
811
+ //create action inside db
812
+ $this->_actionId = self::createAction($this->_fileName, SG_ACTION_TYPE_RESTORE, SG_ACTION_STATUS_IN_PROGRESS_FILES);
813
+
814
+ //save current user credentials
815
+ $this->_backupDatabase->saveCurrentUser();
816
+
817
+ //check if we can run external restore
818
+ $externalRestoreEnabled = SGExternalRestore::getInstance()->prepare($this->_actionId);
819
+
820
+ //prepare folder
821
+ $this->prepareRestoreFolder($restorePath);
822
+
823
+ SGConfig::set('SG_RUNNING_ACTION', 1, true);
824
+
825
+ //save timestamp for future use
826
+ $this->_actionStartTs = time();
827
+
828
+ $this->prepareFilesStateFile();
829
+ $this->saveStateFile();
830
+ SGReloader::reset();
831
+
832
+ if ($externalRestoreEnabled) {
833
+ $this->reload();
834
+ }
835
+ } else {
836
+ $this->_actionId = $this->_state->getActionId();
837
+ $this->_actionStartTs = $this->_state->getActionStartTs();
838
+ $this->prepareRestoreLogFile($restorePath, true);
839
+ }
840
+ }
841
+
842
+ private function prepareRestoreFolder($restorePath)
843
+ {
844
+ if (!is_writable($restorePath)) {
845
+ SGConfig::set('SG_BACKUP_NOT_WRITABLE_DIR_PATH', $restorePath);
846
+ SGConfig::set('SG_BACKUP_SHOW_NOT_WRITABLE_ERROR', 1);
847
+ throw new SGExceptionForbidden('Permission denied. Directory is not writable: ' . $restorePath);
848
+ }
849
+
850
+ $this->_filesBackupAvailable = file_exists($this->_filesBackupPath);
851
+
852
+ //create restore log file
853
+ $this->prepareRestoreLogFile($restorePath);
854
+ }
855
+
856
+ private function prepareRestoreLogFile($backupPath, $exists = false)
857
+ {
858
+ $file = $backupPath . '/' . $this->_fileName . '_restore.log';
859
+ $this->_restoreLogPath = $file;
860
+
861
+ if (!$exists) {
862
+ $content = self::getLogFileHeader(SG_ACTION_TYPE_RESTORE, $this->_fileName);
863
+
864
+ $content .= PHP_EOL;
865
+
866
+ if (!file_put_contents($file, $content)) {
867
+ throw new SGExceptionMethodNotAllowed('Cannot create restore log file: ' . $file);
868
+ }
869
+ }
870
+
871
+ //create file log handler
872
+ $fileLogHandler = new SGFileLogHandler($file);
873
+ SGLog::registerLogHandler($fileLogHandler, SG_LOG_LEVEL_LOW, true);
874
+ }
875
+
876
+ private function didFinishRestore()
877
+ {
878
+ SGBackupLog::writeAction('restore', SG_BACKUP_LOG_POS_END);
879
+
880
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
881
+ SGBackupMailNotification::sendRestoreNotification(true);
882
+ }
883
+
884
+ SGBackupLog::write('Memory pick usage: ' . (memory_get_peak_usage(true) / 1024 / 1024) . 'MB');
885
+ if (function_exists('sys_getloadavg')) {
886
+ SGBackupLog::write('CPU usage: ' . implode(' / ', sys_getloadavg()));
887
+ }
888
+ SGBackupLog::write('Total duration: ' . backupGuardFormattedDuration($this->_actionStartTs, time()));
889
+
890
+ $this->cleanUp();
891
+ }
892
+
893
+ private function didFinishFilesRestore()
894
+ {
895
+ $this->_databaseBackupAvailable = file_exists($this->_databaseBackupPath);
896
+
897
+ if ($this->_databaseBackupAvailable) {
898
+ if ($this->_state->getAction() == SG_STATE_ACTION_RESTORING_DATABASE) {
899
+ self::changeActionStatus($this->_actionId, SG_ACTION_STATUS_IN_PROGRESS_DB);
900
+ }
901
+
902
+ $this->_backupDatabase->restore($this->_databaseBackupPath);
903
+ }
904
+
905
+ $action = $this->didFindWarnings() ? SG_ACTION_STATUS_FINISHED_WARNINGS : SG_ACTION_STATUS_FINISHED;
906
+
907
+ self::changeActionStatus($this->_actionId, $action);
908
+
909
+ //we let the external restore to finalize the restore for itself
910
+ if (SGExternalRestore::isEnabled()) {
911
+ return;
912
+ }
913
+
914
+ $this->didFinishRestore();
915
+ }
916
+
917
+ public function finalizeExternalRestore($actionId)
918
+ {
919
+ $action = self::getAction($actionId);
920
+
921
+ $this->_state = backupGuardLoadStateData();
922
+ $this->prepareForRestore($action['name']);
923
+
924
+ $this->_databaseBackupAvailable = file_exists($this->_databaseBackupPath);
925
+
926
+ if ($this->_databaseBackupAvailable) {
927
+ $this->_backupDatabase->finalizeRestore();
928
+ }
929
+
930
+ $this->didFinishRestore();
931
+ }
932
+
933
+ /* General methods */
934
+
935
+ public static function getLogFileHeader($actionType, $fileName)
936
+ {
937
+ $pluginCapabilities = backupGuardGetCapabilities();
938
+
939
+ $confs = array();
940
+ $confs['sg_backup_guard_version'] = SG_BACKUP_GUARD_VERSION;
941
+ $confs['sg_archive_version'] = SG_ARCHIVE_VERSION;
942
+ $confs['sg_user_mode'] = ($pluginCapabilities != BACKUP_GUARD_CAPABILITIES_FREE) ? 'pro' : 'free'; // Check if user is pro or free
943
+ $confs['os'] = PHP_OS;
944
+ $confs['server'] = @$_SERVER['SERVER_SOFTWARE'];
945
+ $confs['php_version'] = PHP_VERSION;
946
+ $confs['sapi'] = PHP_SAPI;
947
+ $confs['mysql_version'] = SG_MYSQL_VERSION;
948
+ $confs['int_size'] = PHP_INT_SIZE;
949
+ $confs['method'] = backupGuardIsReloadEnabled() ? 'ON' : 'OFF';
950
+
951
+ $confs['dbprefix'] = SG_ENV_DB_PREFIX;
952
+ $confs['siteurl'] = SG_SITE_URL;
953
+ $confs['homeurl'] = SG_HOME_URL;
954
+ $confs['uploadspath'] = SG_UPLOAD_PATH;
955
+ $confs['installation'] = SG_SITE_TYPE;
956
+ $freeSpace = convertToReadableSize(@disk_free_space(SG_APP_ROOT_DIRECTORY));
957
+ $confs['free_space'] = $freeSpace == false ? 'unknown' : $freeSpace;
958
+ $isCurlAvailable = function_exists('curl_version');
959
+ $confs['curl_available'] = $isCurlAvailable ? 'Yes' : 'No';
960
+ $confs['email_notifications'] = SGConfig::get('SG_NOTIFICATIONS_ENABLED') ? 'ON' : 'OFF';
961
+ $confs['ftp_passive_mode'] = SGConfig::get('SG_FTP_PASSIVE_MODE') ? 'ON' : 'OFF';
962
+
963
+ if (extension_loaded('gmp')) {
964
+ $lib = 'gmp';
965
+ } else if (extension_loaded('bcmath')) {
966
+ $lib = 'bcmath';
967
+ } else {
968
+ $lib = 'BigInteger';
969
+ }
970
+
971
+ $confs['int_lib'] = $lib;
972
+ $confs['memory_limit'] = SGBoot::$memoryLimit;
973
+ $confs['max_execution_time'] = SGBoot::$executionTimeLimit;
974
+ $confs['env'] = SG_ENV_ADAPTER . ' ' . SG_ENV_VERSION;
975
+
976
+ $content = '';
977
+ $content .= 'Date: ' . backupGuardConvertDateTimezone(@date('Y-m-d H:i')) . ' ' . date_default_timezone_get() . PHP_EOL;
978
+ $content .= 'Reloads: ' . $confs['method'] . PHP_EOL;
979
+
980
+ if ($actionType == SG_ACTION_TYPE_RESTORE) {
981
+ $confs['restore_method'] = SGExternalRestore::isEnabled() ? 'external' : 'standard';
982
+ $content .= 'Restore Method: ' . $confs['restore_method'] . PHP_EOL;
983
+ }
984
+
985
+ $content .= 'User mode: ' . backupGuardGetProductName() . PHP_EOL;
986
+ $content .= 'BackupGuard version: ' . $confs['sg_backup_guard_version'] . PHP_EOL;
987
+ $content .= 'Supported archive version: ' . $confs['sg_archive_version'] . PHP_EOL;
988
+
989
+ $content .= 'Database prefix: ' . $confs['dbprefix'] . PHP_EOL;
990
+ $content .= 'Site URL: ' . $confs['siteurl'] . PHP_EOL;
991
+ $content .= 'Home URL: ' . $confs['homeurl'] . PHP_EOL;
992
+ $content .= 'Uploads path: ' . $confs['uploadspath'] . PHP_EOL;
993
+ $content .= 'Site installation: ' . $confs['installation'] . PHP_EOL;
994
+
995
+ $content .= 'OS: ' . $confs['os'] . PHP_EOL;
996
+ $content .= 'Server: ' . $confs['server'] . PHP_EOL;
997
+ $content .= 'User agent: ' . @$_SERVER['HTTP_USER_AGENT'] . PHP_EOL;
998
+ $content .= 'PHP version: ' . $confs['php_version'] . PHP_EOL;
999
+ $content .= 'MySQL version: ' . $confs['mysql_version'] . PHP_EOL;
1000
+ $content .= 'Int size: ' . $confs['int_size'] . PHP_EOL;
1001
+ $content .= 'Int lib: ' . $confs['int_lib'] . PHP_EOL;
1002
+ $content .= 'Memory limit: ' . $confs['memory_limit'] . PHP_EOL;
1003
+ $content .= 'Max execution time: ' . $confs['max_execution_time'] . PHP_EOL;
1004
+ $content .= 'Disk free space: ' . $confs['free_space'] . PHP_EOL;
1005
+ $content .= 'CURL available: ' . $confs['curl_available'] . PHP_EOL;
1006
+ $content .= 'Openssl version: ' . OPENSSL_VERSION_TEXT . PHP_EOL;
1007
+ if ($isCurlAvailable) {
1008
+ $cv = curl_version();
1009
+ $curlVersionText = $cv['version'] . ' / SSL: ' . $cv['ssl_version'] . ' / libz: ' . $cv['libz_version'];
1010
+ $content .= 'CURL version: ' . $curlVersionText . PHP_EOL;
1011
+ }
1012
+ $content .= 'Email notifications: ' . $confs['email_notifications'] . PHP_EOL;
1013
+ $content .= 'FTP passive mode: ' . $confs['ftp_passive_mode'] . PHP_EOL;
1014
+ $content .= 'Exclude paths: ' . SGConfig::get('SG_PATHS_TO_EXCLUDE') . PHP_EOL;
1015
+ $content .= 'Tables to exclude: ' . SGConfig::get('SG_TABLES_TO_EXCLUDE') . PHP_EOL;
1016
+ $content .= 'Number of rows to backup: ' . (int) SGConfig::get('SG_BACKUP_DATABASE_INSERT_LIMIT') . PHP_EOL;
1017
+ $content .= 'AJAX request frequency: ' . SGConfig::get('SG_AJAX_REQUEST_FREQUENCY') . PHP_EOL;
1018
+
1019
+ if ($actionType == SG_ACTION_TYPE_RESTORE) {
1020
+ $archivePath = SG_BACKUP_DIRECTORY . $fileName . '/' . $fileName . '.sgbp';
1021
+ $archiveSizeInBytes = backupGuardRealFilesize($archivePath);
1022
+ $confs['archiveSize'] = convertToReadableSize($archiveSizeInBytes);
1023
+ $content .= 'Archive Size: ' . $confs['archiveSize'] . ' (' . $archiveSizeInBytes . ' bytes)' . PHP_EOL;
1024
+ }
1025
+
1026
+ $content .= 'Environment: ' . $confs['env'] . PHP_EOL;
1027
+
1028
+ return $content;
1029
+ }
1030
+
1031
+ private function didFindWarnings()
1032
+ {
1033
+ $warningsDatabase = $this->_databaseBackupAvailable ? $this->_backupDatabase->didFindWarnings() : false;
1034
+ $warningsFiles = $this->_backupFiles->didFindWarnings();
1035
+ return ($warningsFiles || $warningsDatabase);
1036
+ }
1037
+
1038
+ public static function createAction($name, $type, $status, $subtype = 0, $options = '')
1039
+ {
1040
+ $sgdb = SGDatabase::getInstance();
1041
+
1042
+ $date = backupGuardConvertDateTimezone(@date('Y-m-d H:i:s'));
1043
+ $res = $sgdb->query('INSERT INTO ' . SG_ACTION_TABLE_NAME . ' (name, type, subtype, status, start_date, options) VALUES (%s, %d, %d, %d, %s, %s)', array($name, $type, $subtype, $status, $date, $options));
1044
+
1045
+ if (!$res) {
1046
+ throw new SGExceptionDatabaseError('Could not create action');
1047
+ }
1048
+ return $sgdb->lastInsertId();
1049
+ }
1050
+
1051
+ private function getCurrentActionStatus()
1052
+ {
1053
+ return self::getActionStatus($this->_actionId);
1054
+ }
1055
+
1056
+ private function setCurrentActionStatusCancelled()
1057
+ {
1058
+ $sgdb = SGDatabase::getInstance();
1059
+ $date = backupGuardConvertDateTimezone(@date('Y-m-d H:i:s'));
1060
+ $sgdb->query('UPDATE ' . SG_ACTION_TABLE_NAME . ' SET status=%d, update_date=%s WHERE name=%s', array(SG_ACTION_STATUS_CANCELLED, $date, $this->_fileName));
1061
+ }
1062
+
1063
+ public static function changeActionStatus($actionId, $status)
1064
+ {
1065
+ $sgdb = SGDatabase::getInstance();
1066
+
1067
+ $progress = '';
1068
+ if ($status == SG_ACTION_STATUS_FINISHED || $status == SG_ACTION_STATUS_FINISHED_WARNINGS) {
1069
+ $progress = 100;
1070
+ } else if ($status == SG_ACTION_STATUS_CREATED || $status == SG_ACTION_STATUS_IN_PROGRESS_FILES || $status == SG_ACTION_STATUS_IN_PROGRESS_DB) {
1071
+ $progress = 0;
1072
+ }
1073
+
1074
+ if ($progress !== '') {
1075
+ $progress = ' progress=' . $progress . ',';
1076
+ }
1077
+
1078
+ $date = backupGuardConvertDateTimezone(@date('Y-m-d H:i:s'));
1079
+ $sgdb->query('UPDATE ' . SG_ACTION_TABLE_NAME . ' SET status=%d,' . $progress . ' update_date=%s WHERE id=%d', array($status, $date, $actionId));
1080
+ }
1081
+
1082
+ public static function changeActionProgress($actionId, $progress)
1083
+ {
1084
+ $sgdb = SGDatabase::getInstance();
1085
+ $date = backupGuardConvertDateTimezone(@date('Y-m-d H:i:s'));
1086
+ $sgdb->query('UPDATE ' . SG_ACTION_TABLE_NAME . ' SET progress=%d, update_date=%s WHERE id=%d', array($progress, $date, $actionId));
1087
+ }
1088
+
1089
+ /* Methods for frontend use */
1090
+
1091
+ public static function getAction($actionId)
1092
+ {
1093
+ $sgdb = SGDatabase::getInstance();
1094
+ $res = $sgdb->query('SELECT * FROM ' . SG_ACTION_TABLE_NAME . ' WHERE id=%d', array($actionId));
1095
+ if (empty($res)) {
1096
+ return false;
1097
+ }
1098
+ return $res[0];
1099
+ }
1100
+
1101
+ public static function getActionByName($name)
1102
+ {
1103
+ $sgdb = SGDatabase::getInstance();
1104
+ $res = $sgdb->query('SELECT * FROM ' . SG_ACTION_TABLE_NAME . ' WHERE name=%s', array($name));
1105
+ if (empty($res)) {
1106
+ return false;
1107
+ }
1108
+ return $res[0];
1109
+ }
1110
+
1111
+ public static function getActionProgress($actionId)
1112
+ {
1113
+ $sgdb = SGDatabase::getInstance();
1114
+ $res = $sgdb->query('SELECT progress FROM ' . SG_ACTION_TABLE_NAME . ' WHERE id=%d', array($actionId));
1115
+ if (empty($res)) {
1116
+ return false;
1117
+ }
1118
+ return (int) $res[0]['progress'];
1119
+ }
1120
+
1121
+ public static function getActionStatus($actionId)
1122
+ {
1123
+ $sgdb = SGDatabase::getInstance();
1124
+ $res = $sgdb->query('SELECT status FROM ' . SG_ACTION_TABLE_NAME . ' WHERE id=%d', array($actionId));
1125
+ if (empty($res)) {
1126
+ return false;
1127
+ }
1128
+ return (int) $res[0]['status'];
1129
+ }
1130
+
1131
+ public static function deleteActionById($actionId)
1132
+ {
1133
+ $sgdb = SGDatabase::getInstance();
1134
+ $res = $sgdb->query('DELETE FROM ' . SG_ACTION_TABLE_NAME . ' WHERE id=%d', array($actionId));
1135
+
1136
+ return $res;
1137
+ }
1138
+
1139
+ public static function cleanRunningActions($runningActions)
1140
+ {
1141
+ if (empty($runningActions)) {
1142
+ return false;
1143
+ }
1144
+ foreach ($runningActions as $action) {
1145
+ if (empty($action)) {
1146
+ continue;
1147
+ }
1148
+ if ($action['status'] == SG_ACTION_STATUS_IN_PROGRESS_FILES || $action['status'] == SG_ACTION_STATUS_IN_PROGRESS_DB) {
1149
+ $id = $action['id'];
1150
+ SGBackup::deleteActionById($id);
1151
+ }
1152
+ }
1153
+
1154
+ return true;
1155
+ }
1156
+
1157
+ public static function getRunningActions()
1158
+ {
1159
+ $sgdb = SGDatabase::getInstance();
1160
+ $res = $sgdb->query('SELECT * FROM ' . SG_ACTION_TABLE_NAME . ' WHERE status=%d OR status=%d OR status=%d ORDER BY status DESC', array(SG_ACTION_STATUS_IN_PROGRESS_FILES, SG_ACTION_STATUS_IN_PROGRESS_DB, SG_ACTION_STATUS_CREATED));
1161
+ return $res;
1162
+ }
1163
+
1164
+ public static function getBackupFileInfo($file)
1165
+ {
1166
+ return pathinfo(SG_BACKUP_DIRECTORY . $file);
1167
+ }
1168
+
1169
+ public static function autodetectBackups()
1170
+ {
1171
+ $path = SG_BACKUP_DIRECTORY;
1172
+ $files = scandir(SG_BACKUP_DIRECTORY);
1173
+ $backupLogPostfix = "_backup.log";
1174
+ $restoreLogPostfix = "_restore.log";
1175
+
1176
+ foreach ($files as $file) {
1177
+ $fileInfo = self::getBackupFileInfo($file);
1178
+
1179
+ if (!empty($fileInfo['extension']) && $fileInfo['extension'] == SGBP_EXT) {
1180
+ @mkdir($path . $fileInfo['filename'], 0777);
1181
+
1182
+ if (file_exists($path . $fileInfo['filename'])) {
1183
+ rename($path . $file, $path . $fileInfo['filename'] . '/' . $file);
1184
+ }
1185
+
1186
+ if (file_exists($path . $fileInfo['filename'] . $backupLogPostfix)) {
1187
+ rename($path . $fileInfo['filename'] . $backupLogPostfix, $path . $fileInfo['filename'] . '/' . $fileInfo['filename'] . $backupLogPostfix);
1188
+ }
1189
+
1190
+ if (file_exists($path . $fileInfo['filename'] . $restoreLogPostfix)) {
1191
+ rename($path . $fileInfo['filename'] . $restoreLogPostfix, $path . $fileInfo['filename'] . '/' . $fileInfo['filename'] . $restoreLogPostfix);
1192
+ }
1193
+ }
1194
+ }
1195
+ }
1196
+
1197
+ public static function getAllBackups()
1198
+ {
1199
+ $backups = array();
1200
+
1201
+ $path = SG_BACKUP_DIRECTORY;
1202
+ self::autodetectBackups();
1203
+ clearstatcache();
1204
+
1205
+ $action = self::getRunningActions();
1206
+ if (SGBoot::isFeatureAvailable('NUMBER_OF_BACKUPS_TO_KEEP') && !count($action) && function_exists('backupGuardOutdatedBackupsCleanup')) {
1207
+ backupGuardOutdatedBackupsCleanup($path);
1208
+ }
1209
+
1210
+ //remove external restore file
1211
+ SGExternalRestore::getInstance()->cleanup();
1212
+
1213
+ if ($handle = @opendir($path)) {
1214
+ $sgdb = SGDatabase::getInstance();
1215
+ $data = $sgdb->query('SELECT id, name, type, subtype, status, progress, update_date, options FROM ' . SG_ACTION_TABLE_NAME);
1216
+ $allBackups = array();
1217
+ foreach ($data as $row) {
1218
+ $allBackups[$row['name']][] = $row;
1219
+ }
1220
+
1221
+ while (($entry = readdir($handle)) !== false) {
1222
+ if ($entry === '.' || $entry === '..' || !is_dir($path . $entry)) {
1223
+ continue;
1224
+ }
1225
+
1226
+ $backup = array();
1227
+ $backup['name'] = $entry;
1228
+ $backup['id'] = '';
1229
+ $backup['status'] = '';
1230
+ $backup['files'] = file_exists($path . $entry . '/' . $entry . '.sgbp') ? 1 : 0;
1231
+ $backup['backup_log'] = file_exists($path . $entry . '/' . $entry . '_backup.log') ? 1 : 0;
1232
+ $backup['restore_log'] = file_exists($path . $entry . '/' . $entry . '_restore.log') ? 1 : 0;
1233
+ $backup['options'] = '';
1234
+ if (!$backup['files'] && !$backup['backup_log'] && !$backup['restore_log']) {
1235
+ continue;
1236
+ }
1237
+ $backupRow = null;
1238
+ if (isset($allBackups[$entry])) {
1239
+ $skip = false;
1240
+ foreach ($allBackups[$entry] as $row) {
1241
+ if ($row['status'] == SG_ACTION_STATUS_IN_PROGRESS_FILES || $row['status'] == SG_ACTION_STATUS_IN_PROGRESS_DB) {
1242
+ $backupRow = $row;
1243
+ break;
1244
+ } else if (($row['status'] == SG_ACTION_STATUS_CANCELLING || $row['status'] == SG_ACTION_STATUS_CANCELLED) && $row['type'] != SG_ACTION_TYPE_UPLOAD) {
1245
+ $skip = true;
1246
+ break;
1247
+ }
1248
+
1249
+ $backupRow = $row;
1250
+
1251
+ if ($row['status'] == SG_ACTION_STATUS_FINISHED_WARNINGS || $row['status'] == SG_ACTION_STATUS_ERROR) {
1252
+ if ($row['type'] == SG_ACTION_TYPE_UPLOAD && file_exists(SG_BACKUP_DIRECTORY . $entry . '/' . $entry . '.sgbp')) {
1253
+ $backupRow['status'] = SG_ACTION_STATUS_FINISHED_WARNINGS;
1254
+ }
1255
+ }
1256
+ }
1257
+
1258
+ if ($skip === true) {
1259
+ continue;
1260
+ }
1261
+ }
1262
+
1263
+ if ($backupRow) {
1264
+ $backup['active'] = ($backupRow['status'] == SG_ACTION_STATUS_IN_PROGRESS_FILES ||
1265
+ $backupRow['status'] == SG_ACTION_STATUS_IN_PROGRESS_DB ||
1266
+ $backupRow['status'] == SG_ACTION_STATUS_CREATED) ? 1 : 0;
1267
+
1268
+ $backup['status'] = $backupRow['status'];
1269
+ $backup['type'] = (int) $backupRow['type'];
1270
+ $backup['subtype'] = (int) $backupRow['subtype'];
1271
+ $backup['progress'] = (int) $backupRow['progress'];
1272
+ $backup['id'] = (int) $backupRow['id'];
1273
+ $backup['options'] = $backupRow['options'];
1274
+ } else {
1275
+ $backup['active'] = 0;
1276
+ }
1277
+
1278
+ $size = '';
1279
+ if ($backup['files']) {
1280
+ $size = number_format(backupGuardRealFilesize($path . $entry . '/' . $entry . '.sgbp') / 1000.0 / 1000.0, 2, '.', '') . ' MB';
1281
+ }
1282
+
1283
+ $backup['size'] = $size;
1284
+
1285
+ $modifiedTime = filemtime($path . $entry . '/.');
1286
+ $date = backupGuardConvertDateTimezone(@date('Y-m-d H:i', $modifiedTime));
1287
+ $backup['date'] = $date;
1288
+ $backup['modifiedTime'] = $modifiedTime;
1289
+ $backups[] = $backup;
1290
+ }
1291
+ closedir($handle);
1292
+ }
1293
+
1294
+ usort($backups, array('SGBackup', 'sort'));
1295
+ return array_values($backups);
1296
+ }
1297
+
1298
+ public static function sort($arg1, $arg2)
1299
+ {
1300
+ return $arg1['modifiedTime'] > $arg2['modifiedTime'] ? -1 : 1;
1301
+ }
1302
+
1303
+ public static function deleteBackup($backupName, $deleteAction = true)
1304
+ {
1305
+ $isDeleteBackupFromCloudEnabled = SGConfig::get('SG_DELETE_BACKUP_FROM_CLOUD');
1306
+ if ($isDeleteBackupFromCloudEnabled) {
1307
+ $backupRow = self::getActionByName($backupName);
1308
+ if ($backupRow) {
1309
+ $options = $backupRow['options'];
1310
+ if ($options) {
1311
+ $options = json_decode($options, true);
1312
+
1313
+ if (!empty($options['SG_BACKUP_UPLOAD_TO_STORAGES'])) {
1314
+ $storages = explode(',', $options['SG_BACKUP_UPLOAD_TO_STORAGES']);
1315
+ self::deleteBackupFromCloud($storages, $backupName);
1316
+ }
1317
+ }
1318
+ }
1319
+ }
1320
+
1321
+ backupGuardDeleteDirectory(SG_BACKUP_DIRECTORY . $backupName);
1322
+
1323
+ if ($deleteAction) {
1324
+ $sgdb = SGDatabase::getInstance();
1325
+ $sgdb->query('DELETE FROM ' . SG_ACTION_TABLE_NAME . ' WHERE name=%s', array($backupName));
1326
+ }
1327
+ }
1328
+
1329
+ private static function deleteBackupFromCloud($storages, $backupName)
1330
+ {
1331
+ foreach ($storages as $storage) {
1332
+ $storage = (int) $storage;
1333
+
1334
+ $sgBackupStorage = SGBackupStorage::getInstance();
1335
+ $sgBackupStorage->deleteBackupFromStorage($storage, $backupName);
1336
+ }
1337
+ }
1338
+
1339
+ public static function cancelAction($actionId)
1340
+ {
1341
+ self::changeActionStatus($actionId, SG_ACTION_STATUS_CANCELLING);
1342
+ }
1343
+
1344
+ public static function importKeyFile($sgSshKeyFile)
1345
+ {
1346
+ $filename = $sgSshKeyFile['name'];
1347
+ $uploadPath = SG_BACKUP_DIRECTORY . SG_SSH_KEY_FILE_FOLDER_NAME;
1348
+ $filename = $uploadPath . $filename;
1349
+
1350
+ if (!@file_exists($uploadPath)) {
1351
+ if (!@mkdir($uploadPath)) {
1352
+ throw new SGExceptionForbidden('SSH key file folder is not accessible');
1353
+ }
1354
+ }
1355
+
1356
+ if (!empty($sgSshKeyFile) && $sgSshKeyFile['name'] != '') {
1357
+ if (!@move_uploaded_file($sgSshKeyFile['tmp_name'], $filename)) {
1358
+ throw new SGExceptionForbidden('Error while uploading ssh key file');
1359
+ }
1360
+ }
1361
+ }
1362
+
1363
+ public static function upload($filesUploadSgbp)
1364
+ {
1365
+ $filename = str_replace('.sgbp', '', $filesUploadSgbp['name']);
1366
+ $backupDirectory = $filename . '/';
1367
+ $uploadPath = SG_BACKUP_DIRECTORY . $backupDirectory;
1368
+ $filename = $uploadPath . $filename;
1369
+
1370
+ if (!@file_exists($uploadPath)) {
1371
+ if (!@mkdir($uploadPath)) {
1372
+ throw new SGExceptionForbidden('Upload folder is not accessible');
1373
+ }
1374
+ }
1375
+
1376
+ if (!empty($filesUploadSgbp) && $filesUploadSgbp['name'] != '') {
1377
+ if ($filesUploadSgbp['type'] != 'application/octet-stream') {
1378
+ throw new SGExceptionBadRequest('Not a valid backup file');
1379
+ }
1380
+ if (!@move_uploaded_file($filesUploadSgbp['tmp_name'], $filename . '.sgbp')) {
1381
+ throw new SGExceptionForbidden('Error while uploading file');
1382
+ }
1383
+ }
1384
+ }
1385
+
1386
+ public static function download($filename, $type)
1387
+ {
1388
+ $backupDirectory = SG_BACKUP_DIRECTORY . $filename . '/';
1389
+ $downloadMode = SGConfig::get('SG_DOWNLOAD_MODE');
1390
+
1391
+ switch ($type) {
1392
+ case SG_BACKUP_DOWNLOAD_TYPE_SGBP:
1393
+ $filename .= '.sgbp';
1394
+ if ($downloadMode == 1) {
1395
+ backupGuardDownloadFile($backupDirectory . $filename);
1396
+ } else {
1397
+ backupGuardDownloadFileViaFunction($backupDirectory, $filename, $downloadMode);
1398
+ }
1399
+ break;
1400
+ case SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG:
1401
+ $filename .= '_backup.log';
1402
+ backupGuardDownloadFile($backupDirectory . $filename, 'text/plain');
1403
+ break;
1404
+ case SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG:
1405
+ $filename .= '_restore.log';
1406
+ backupGuardDownloadFile($backupDirectory . $filename, 'text/plain');
1407
+ break;
1408
+ }
1409
+
1410
+ exit;
1411
+ }
1412
+
1413
+ /* SGIBackupDelegate implementation */
1414
+
1415
+ public function isCancelled()
1416
+ {
1417
+ $status = $this->getCurrentActionStatus();
1418
+
1419
+ if ($status == SG_ACTION_STATUS_CANCELLING) {
1420
+ $this->cancel();
1421
+ return true;
1422
+ }
1423
+
1424
+ return false;
1425
+ }
1426
+
1427
+ public function didUpdateProgress($progress)
1428
+ {
1429
+ $progress = max($progress, 0);
1430
+ $progress = min($progress, 100);
1431
+
1432
+ self::changeActionProgress($this->_actionId, $progress);
1433
+ }
1434
+
1435
+ public function isBackgroundMode()
1436
+ {
1437
+ return $this->_backgroundMode;
1438
+ }
1439
+
1440
+ public function setIsManual($isManual)
1441
+ {
1442
+ $this->_isManual = $isManual;
1443
+ }
1444
+
1445
+ public function getIsManual()
1446
+ {
1447
+ return $this->_isManual;
1448
+ }
1449
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
com/core/backup/SGBackupStorage.php CHANGED
@@ -1,494 +1,520 @@
1
- <?php
2
- require_once(SG_BACKUP_PATH.'SGBackup.php');
3
- backupGuardIncludeFile(SG_STORAGE_PATH.'SGGoogleDriveStorage.php');
4
- backupGuardIncludeFile(SG_STORAGE_PATH.'SGDropboxStorage.php');
5
- backupGuardIncludeFile(SG_STORAGE_PATH.'SGOneDriveStorage.php');
6
- backupGuardIncludeFile(SG_STORAGE_PATH.'SGFTPManager.php');
7
- backupGuardIncludeFile(SG_STORAGE_PATH.'SGAmazonStorage.php');
8
- backupGuardIncludeFile(SG_STORAGE_PATH.'BackupGuardStorage.php');
9
-
10
- class SGBackupStorage implements SGIStorageDelegate
11
- {
12
- private static $instance = null;
13
- private $actionId = null;
14
- private $currentUploadChunksCount = 0;
15
- private $totalUploadChunksCount = 0;
16
- private $progressUpdateInterval = 0;
17
- private $nextProgressUpdate = 0;
18
- private $backgroundMode = false;
19
- private $delegate = null;
20
- private $state = null;
21
- private $token = null;
22
- private $pendingStorageUploads = array();
23
- private $reloadStartTs;
24
-
25
- private function __construct()
26
- {
27
- $this->backgroundMode = SGConfig::get('SG_BACKUP_IN_BACKGROUND_MODE');
28
- $this->progressUpdateInterval = SGConfig::get('SG_ACTION_PROGRESS_UPDATE_INTERVAL');
29
- }
30
-
31
- private function __clone()
32
- {
33
-
34
- }
35
-
36
- public function setPendingStorageUploads($pendingStorageUploads)
37
- {
38
- $this->pendingStorageUploads = $pendingStorageUploads;
39
- }
40
-
41
- public function setToken($token)
42
- {
43
- $this->token = $token;
44
- }
45
-
46
- public function setState($state)
47
- {
48
- $this->state = $state;
49
- }
50
-
51
- public function setDelegate($delegate)
52
- {
53
- $this->delegate = $delegate;
54
- }
55
-
56
- public function getPendingStorageUploads()
57
- {
58
- return $this->pendingStorageUploads;
59
- }
60
-
61
- public function getState()
62
- {
63
- return $this->state;
64
- }
65
-
66
- public function getActionId()
67
- {
68
- return $this->actionId;
69
- }
70
-
71
- public function getCurrentUploadChunksCount()
72
- {
73
- return $this->currentUploadChunksCount;
74
- }
75
-
76
- public function reload()
77
- {
78
- $this->delegate->reload();
79
- }
80
-
81
- public function getToken()
82
- {
83
- return $this->token;
84
- }
85
-
86
- public function getProgress()
87
- {
88
- return $this->nextProgressUpdate;
89
- }
90
-
91
- public static function getInstance()
92
- {
93
- if (!self::$instance)
94
- {
95
- self::$instance = new self();
96
- }
97
-
98
- return self::$instance;
99
- }
100
-
101
- public function deleteBackupFromStorage($storageId, $backupName)
102
- {
103
- try {
104
- $uploadFolder = trim(SGConfig::get('SG_STORAGE_BACKUPS_FOLDER_NAME'), '/');
105
-
106
- $storage = $this->storageObjectById($storageId);
107
- $path = "/".$uploadFolder."/".$backupName.".sgbp";
108
-
109
- if ($storage) {
110
- $storage->deleteFile($path);
111
- }
112
- }
113
- catch(Exception $e) {
114
- }
115
- }
116
-
117
- public function listStorage($storageId)
118
- {
119
- $storage = $this->storageObjectById($storageId, $storageName);
120
- $listOfFiles = $storage->getListOfFiles();
121
-
122
- return $listOfFiles;
123
- }
124
-
125
- public function downloadBackupArchiveFromCloud($storageId, $archive, $size, $backupId = null)
126
- {
127
- $storage = $this->storageObjectById($storageId, $storageName);
128
- $result = $storage->downloadFile($archive, $size, $backupId);
129
-
130
- return $result?true:false;
131
- }
132
-
133
- public static function queueBackupForUpload($backupName, $storageId, $options)
134
- {
135
- return SGBackup::createAction($backupName, SG_ACTION_TYPE_UPLOAD, SG_ACTION_STATUS_CREATED, $storageId, json_encode($options));
136
- }
137
-
138
- public function startUploadByActionId($actionId)
139
- {
140
- if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
141
- $sgdb = SGDatabase::getInstance();
142
-
143
- $res = $sgdb->query('SELECT * FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d LIMIT 1', array($actionId));
144
-
145
- if (!count($res))
146
- {
147
- return false;
148
- }
149
-
150
- $row = $res[0];
151
-
152
- if ($row['type']!=SG_ACTION_TYPE_UPLOAD)
153
- {
154
- return false;
155
- }
156
-
157
- $this->actionId = $actionId;
158
- $type = $row['subtype'];
159
- $backupName = $row['name'];
160
- }
161
- else {
162
- $this->nextProgressUpdate = $this->state->getProgress()?$this->state->getProgress():$this->progressUpdateInterval;
163
- $this->actionId = $this->state->getActionId();
164
- $this->currentUploadChunksCount = $this->state->getCurrentUploadChunksCount();
165
- $type = $this->state->getStorageType();
166
- $backupName = $this->state->getBackupFileName();
167
- }
168
-
169
- $storage = $this->storageObjectById($type, $storageName);
170
- $this->startBackupUpload($backupName, $storage, $storageName);
171
-
172
- return true;
173
- }
174
-
175
- public function startDownloadByActionId($actionId)
176
- {
177
- $sgdb = SGDatabase::getInstance();
178
-
179
- $res = $sgdb->query('SELECT * FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d LIMIT 1', array($actionId));
180
-
181
- if (!count($res))
182
- {
183
- return false;
184
- }
185
-
186
- $row = $res[0];
187
-
188
- if ($row['type']!=SG_ACTION_TYPE_UPLOAD)
189
- {
190
- return false;
191
- }
192
-
193
- $this->actionId = $actionId;
194
- $storage = $this->storageObjectById($row['subtype'], $storageName);
195
-
196
- return true;
197
- }
198
-
199
- private function storageObjectById($storageId, &$storageName = '')
200
- {
201
- $res = $this->getStorageInfoById($storageId);
202
- $storageName = $res['storageName'];
203
- $storageClassName = $res['storageClassName'];
204
-
205
- if (!$storageClassName) {
206
- throw new SGExceptionNotFound('Unknown storage');
207
- }
208
-
209
- return new $storageClassName();
210
- }
211
-
212
- public function getStorageInfoById($storageId)
213
- {
214
- $storageName = '';
215
- $storageClassName = '';
216
- $storageId = (int)$storageId;
217
- $isConnected = true;
218
-
219
- switch ($storageId) {
220
- case SG_STORAGE_FTP:
221
- if (SGBoot::isFeatureAvailable('FTP')) {
222
- $connectionMethod = SGConfig::get('SG_STORAGE_CONNECTION_METHOD');
223
- $storage = null;
224
-
225
- if($connectionMethod == 'ftp') {
226
- $storageName = 'FTP';
227
- }
228
- else {
229
- $storageName = 'SFTP';
230
- }
231
- $isFtpConnected = SGConfig::get('SG_STORAGE_FTP_CONNECTED');
232
-
233
- if (empty($isFtpConnected)) {
234
- $isConnected = false;
235
- }
236
- $storageClassName = "SGFTPManager";
237
- }
238
- break;
239
- case SG_STORAGE_DROPBOX:
240
- if (SGBoot::isFeatureAvailable('DROPBOX')) {
241
- $storageName = 'Dropbox';
242
- $storageClassName = "SGDropboxStorage";
243
- }
244
- $isDropboxConnected = SGConfig::get('SG_DROPBOX_ACCESS_TOKEN');
245
-
246
- if (empty($isDropboxConnected)) {
247
- $isConnected = false;
248
- }
249
- break;
250
- case SG_STORAGE_GOOGLE_DRIVE:
251
- if (SGBoot::isFeatureAvailable('GOOGLE_DRIVE')) {
252
- $storageName = 'Google Drive';
253
- $storageClassName = "SGGoogleDriveStorage";
254
- }
255
- $isGdriveConnected = SGConfig::get('SG_GOOGLE_DRIVE_REFRESH_TOKEN');
256
-
257
- if (empty($isGdriveConnected)) {
258
- $isConnected = false;
259
- }
260
- break;
261
- case SG_STORAGE_AMAZON:
262
- if (SGBoot::isFeatureAvailable('AMAZON')) {
263
- $storageName = 'Amazon S3';
264
- $storageClassName = "SGAmazonStorage";
265
- }
266
- $isAmazonConnected = SGConfig::get('SG_STORAGE_AMAZON_CONNECTED');
267
-
268
- if (empty($isAmazonConnected)) {
269
- $isConnected = false;
270
- }
271
- break;
272
- case SG_STORAGE_ONE_DRIVE:
273
- if (SGBoot::isFeatureAvailable('ONE_DRIVE')) {
274
- $storageName = 'One Drive';
275
- $storageClassName = "SGOneDriveStorage";
276
- }
277
- $isOneDriveConnected = SGConfig::get('SG_ONE_DRIVE_REFRESH_TOKEN');
278
-
279
- if (empty($isOneDriveConnected)) {
280
- $isConnected = false;
281
- }
282
- break;
283
- case SG_STORAGE_BACKUP_GUARD:
284
- if (SGBoot::isFeatureAvailable('BACKUP_GUARD') && SG_SHOW_BACKUPGUARD_CLOUD) {
285
- $storageName = 'BackupGuard';
286
- $storageClassName = "BackupGuard\Storage";
287
- }
288
- $isBackupGuardConnected = SGConfig::get('SG_BACKUPGUARD_CLOUD_ACCOUNT')?unserialize(SGConfig::get('SG_BACKUPGUARD_CLOUD_ACCOUNT')):'';
289
-
290
- if (empty($isBackupGuardConnected)) {
291
- $isConnected = false;
292
- }
293
- break;
294
- }
295
-
296
- $res = array(
297
- 'storageName' => $storageName,
298
- 'storageClassName' => $storageClassName,
299
- 'isConnected' => $isConnected,
300
- );
301
-
302
- return $res;
303
- }
304
-
305
- public function shouldUploadNextChunk()
306
- {
307
- if (SGBoot::isFeatureAvailable('BACKGROUND_MODE') && $this->backgroundMode)
308
- {
309
- SGBackgroundMode::next();
310
- }
311
-
312
- $this->currentUploadChunksCount++;
313
- if ($this->updateProgress())
314
- {
315
- $this->checkCancellation();
316
- }
317
- return true;
318
- }
319
-
320
- public function willStartUpload($chunksCount)
321
- {
322
- $this->totalUploadChunksCount = $chunksCount;
323
-
324
- if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
325
- $this->resetProgress();
326
- }
327
- }
328
-
329
- public function updateProgressManually($progress)
330
- {
331
- if (SGBoot::isFeatureAvailable('BACKGROUND_MODE') && $this->backgroundMode)
332
- {
333
- SGBackgroundMode::next();
334
- }
335
-
336
- if ($this->updateProgress($progress))
337
- {
338
- $this->checkCancellation();
339
- }
340
- }
341
-
342
- private function updateProgress($progress = null)
343
- {
344
- if (!$progress) {
345
- $progress = (int)ceil($this->currentUploadChunksCount*100.0/$this->totalUploadChunksCount);
346
- }
347
-
348
- if ($progress >= $this->nextProgressUpdate) {
349
- $this->nextProgressUpdate += $this->progressUpdateInterval;
350
-
351
- $progress = max($progress, 0);
352
- $progress = min($progress, 100);
353
- SGBackup::changeActionProgress($this->actionId, $progress);
354
-
355
- return true;
356
- }
357
-
358
- return false;
359
- }
360
-
361
- private function resetProgress()
362
- {
363
- $this->currentUploadChunksCount = 0;
364
- $this->nextProgressUpdate = $this->progressUpdateInterval;
365
- }
366
-
367
- private function checkCancellation()
368
- {
369
- $status = SGBackup::getActionStatus($this->actionId);
370
- if ($status==SG_ACTION_STATUS_CANCELLING)
371
- {
372
- SGBackupLog::write('Upload cancelled');
373
- throw new SGExceptionSkip();
374
- }
375
- elseif ($status==SG_ACTION_STATUS_ERROR) {
376
- SGBackupLog::write('Upload timeout error');
377
- throw new SGExceptionExecutionTimeError();
378
- }
379
- }
380
-
381
- public function shouldReload()
382
- {
383
- $currentTime = time();
384
-
385
- if (($currentTime - $this->reloadStartTs) >= SG_RELOAD_TIMEOUT) {
386
- return true;
387
- }
388
-
389
- return false;
390
- }
391
-
392
- private function startBackupUpload($backupName, SGStorage $storage, $storageName)
393
- {
394
- $this->reloadStartTs = time();
395
- if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
396
- $actionStartTs = time();
397
- }
398
- else {
399
- $actionStartTs = $this->state->getActionStartTs();
400
- }
401
-
402
- SGPing::update();
403
-
404
- $backupPath = SG_BACKUP_DIRECTORY.$backupName;
405
- $filesBackupPath = $backupPath.'/'.$backupName.'.sgbp';
406
-
407
- if (!is_readable($filesBackupPath)) {
408
- SGBackup::changeActionStatus($this->actionId, SG_ACTION_STATUS_ERROR);
409
- throw new SGExceptionNotFound('Backup not found');
410
- }
411
-
412
- try {
413
- @session_write_close();
414
-
415
- if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
416
- SGBackup::changeActionStatus($this->actionId, SG_ACTION_STATUS_IN_PROGRESS_FILES);
417
-
418
- SGBackupLog::write('-');
419
- SGBackupLog::writeAction('upload to '.$storageName, SG_BACKUP_LOG_POS_START);
420
- SGBackupLog::write('Authenticating');
421
- }
422
-
423
- $storage->setDelegate($this);
424
- $storage->loadState();
425
- $storage->connectOffline();
426
-
427
- //get backups container folder
428
- $backupsFolder = $this->state->getActiveDirectory();
429
-
430
- if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
431
- SGBackupLog::write('Preparing folder');
432
-
433
- $folderTree = SG_BACKUP_DEFAULT_FOLDER_NAME;
434
-
435
- if (SGBoot::isFeatureAvailable('SUBDIRECTORIES')){
436
- $folderTree = SGConfig::get('SG_STORAGE_BACKUPS_FOLDER_NAME');
437
- }
438
-
439
- //create backups container folder, if needed
440
- $backupsFolder = $storage->createFolder($folderTree);
441
- }
442
-
443
- $storage->setActiveDirectory($backupsFolder);
444
-
445
- if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
446
- SGBackupLog::write('Uploading file');
447
- }
448
-
449
- $storage->uploadFile($filesBackupPath);
450
-
451
- SGBackupLog::writeAction('upload to '.$storageName, SG_BACKUP_LOG_POS_END);
452
-
453
- //Writing upload status to report file
454
- file_put_contents($backupPath.'/'.SG_REPORT_FILE_NAME, 'Uploaded to '.$storageName.": completed\n", FILE_APPEND);
455
- SGBackupLog::write('Total duration: '.backupGuardFormattedDuration($actionStartTs, time()));
456
-
457
- SGBackup::changeActionStatus($this->actionId, SG_ACTION_STATUS_FINISHED);
458
- }
459
- catch (Exception $exception) {
460
- if ($exception instanceof SGExceptionSkip) {
461
- SGBackup::changeActionStatus($this->actionId, SG_ACTION_STATUS_CANCELLED);
462
- //Writing upload status to report file
463
- file_put_contents($backupPath.'/'.SG_REPORT_FILE_NAME, 'Uploaded to '.$storageName.': canceled', FILE_APPEND);
464
- SGBackupMailNotification::sendBackupNotification(SG_ACTION_STATUS_CANCELLED, array(
465
- 'flowFilePath' => $backupPath.'/'.SG_REPORT_FILE_NAME,
466
- 'archiveName' => $backupName
467
- ));
468
- }
469
- else {
470
- SGBackup::changeActionStatus($this->actionId, SG_ACTION_STATUS_FINISHED_WARNINGS);
471
-
472
- if (!$exception instanceof SGExceptionExecutionTimeError) {//to prevent log duplication for timeout exception
473
- SGBackupLog::writeExceptionObject($exception);
474
- }
475
-
476
- if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
477
- //Writing upload status to report file
478
- file_put_contents($backupPath.'/'.SG_REPORT_FILE_NAME, 'Uploaded to '.$storageName.': failed', FILE_APPEND);
479
- SGBackupMailNotification::sendBackupNotification(SG_ACTION_STATUS_ERROR, array(
480
- 'flowFilePath' => $backupPath.'/'.SG_REPORT_FILE_NAME,
481
- 'archiveName' => $backupName
482
- ));
483
- }
484
- }
485
-
486
- //delete file inside storage
487
- $storageId = $this->state->getStorageType();
488
- $this->deleteBackupFromStorage($storageId, $backupName);
489
-
490
- //delete report file in case of error
491
- @unlink($backupPath.'/'.SG_REPORT_FILE_NAME);
492
- }
493
- }
494
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once(SG_BACKUP_PATH.'SGBackup.php');
3
+ backupGuardIncludeFile(SG_STORAGE_PATH.'SGGoogleDriveStorage.php');
4
+ backupGuardIncludeFile(SG_STORAGE_PATH.'SGDropboxStorage.php');
5
+ backupGuardIncludeFile(SG_STORAGE_PATH.'SGOneDriveStorage.php');
6
+ backupGuardIncludeFile(SG_STORAGE_PATH.'SGPCloudStorage.php');
7
+ backupGuardIncludeFile(SG_STORAGE_PATH.'SGBoxStorage.php');
8
+ backupGuardIncludeFile(SG_STORAGE_PATH.'SGFTPManager.php');
9
+ backupGuardIncludeFile(SG_STORAGE_PATH.'SGAmazonStorage.php');
10
+ backupGuardIncludeFile(SG_STORAGE_PATH.'BackupGuardStorage.php');
11
+
12
+ class SGBackupStorage implements SGIStorageDelegate
13
+ {
14
+ private static $instance = null;
15
+ private $actionId = null;
16
+ private $currentUploadChunksCount = 0;
17
+ private $totalUploadChunksCount = 0;
18
+ private $progressUpdateInterval = 0;
19
+ private $nextProgressUpdate = 0;
20
+ private $backgroundMode = false;
21
+ private $delegate = null;
22
+ private $state = null;
23
+ private $token = null;
24
+ private $pendingStorageUploads = array();
25
+ private $reloadStartTs;
26
+
27
+ private function __construct()
28
+ {
29
+ $this->backgroundMode = SGConfig::get('SG_BACKUP_IN_BACKGROUND_MODE');
30
+ $this->progressUpdateInterval = SGConfig::get('SG_ACTION_PROGRESS_UPDATE_INTERVAL');
31
+ }
32
+
33
+ private function __clone()
34
+ {
35
+
36
+ }
37
+
38
+ public function setPendingStorageUploads($pendingStorageUploads)
39
+ {
40
+ $this->pendingStorageUploads = $pendingStorageUploads;
41
+ }
42
+
43
+ public function setToken($token)
44
+ {
45
+ $this->token = $token;
46
+ }
47
+
48
+ public function setState($state)
49
+ {
50
+ $this->state = $state;
51
+ }
52
+
53
+ public function setDelegate($delegate)
54
+ {
55
+ $this->delegate = $delegate;
56
+ }
57
+
58
+ public function getPendingStorageUploads()
59
+ {
60
+ return $this->pendingStorageUploads;
61
+ }
62
+
63
+ public function getState()
64
+ {
65
+ return $this->state;
66
+ }
67
+
68
+ public function getActionId()
69
+ {
70
+ return $this->actionId;
71
+ }
72
+
73
+ public function getCurrentUploadChunksCount()
74
+ {
75
+ return $this->currentUploadChunksCount;
76
+ }
77
+
78
+ public function reload()
79
+ {
80
+ $this->delegate->reload();
81
+ }
82
+
83
+ public function getToken()
84
+ {
85
+ return $this->token;
86
+ }
87
+
88
+ public function getProgress()
89
+ {
90
+ return $this->nextProgressUpdate;
91
+ }
92
+
93
+ public static function getInstance()
94
+ {
95
+ if (!self::$instance)
96
+ {
97
+ self::$instance = new self();
98
+ }
99
+
100
+ return self::$instance;
101
+ }
102
+
103
+ public function deleteBackupFromStorage($storageId, $backupName)
104
+ {
105
+ try {
106
+ $uploadFolder = trim(SGConfig::get('SG_STORAGE_BACKUPS_FOLDER_NAME'), '/');
107
+
108
+ $storage = $this->storageObjectById($storageId);
109
+ $path = "/".$uploadFolder."/".$backupName.".sgbp";
110
+
111
+ if ($storage) {
112
+ $storage->deleteFile($path);
113
+ }
114
+ }
115
+ catch(Exception $e) {
116
+ }
117
+ }
118
+
119
+ public function listStorage($storageId)
120
+ {
121
+ $storage = $this->storageObjectById($storageId, $storageName);
122
+ $listOfFiles = $storage->getListOfFiles();
123
+
124
+ return $listOfFiles;
125
+ }
126
+
127
+ public function downloadBackupArchiveFromCloud($storageId, $archive, $size, $backupId = null)
128
+ {
129
+ $storage = $this->storageObjectById($storageId, $storageName);
130
+ $result = $storage->downloadFile($archive, $size, $backupId);
131
+
132
+ return $result?true:false;
133
+ }
134
+
135
+ public static function queueBackupForUpload($backupName, $storageId, $options)
136
+ {
137
+ return SGBackup::createAction($backupName, SG_ACTION_TYPE_UPLOAD, SG_ACTION_STATUS_CREATED, $storageId, json_encode($options));
138
+ }
139
+
140
+ public function startUploadByActionId($actionId)
141
+ {
142
+ if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
143
+ $sgdb = SGDatabase::getInstance();
144
+
145
+ $res = $sgdb->query('SELECT * FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d LIMIT 1', array($actionId));
146
+
147
+ if (!count($res))
148
+ {
149
+ return false;
150
+ }
151
+
152
+ $row = $res[0];
153
+
154
+ if ($row['type']!=SG_ACTION_TYPE_UPLOAD)
155
+ {
156
+ return false;
157
+ }
158
+
159
+ $this->actionId = $actionId;
160
+ $type = $row['subtype'];
161
+ $backupName = $row['name'];
162
+ }
163
+ else {
164
+ $this->nextProgressUpdate = $this->state->getProgress()?$this->state->getProgress():$this->progressUpdateInterval;
165
+ $this->actionId = $this->state->getActionId();
166
+ $this->currentUploadChunksCount = $this->state->getCurrentUploadChunksCount();
167
+ $type = $this->state->getStorageType();
168
+ $backupName = $this->state->getBackupFileName();
169
+ }
170
+
171
+ $storage = $this->storageObjectById($type, $storageName);
172
+ $this->startBackupUpload($backupName, $storage, $storageName);
173
+
174
+ return true;
175
+ }
176
+
177
+ public function startDownloadByActionId($actionId)
178
+ {
179
+ $sgdb = SGDatabase::getInstance();
180
+
181
+ $res = $sgdb->query('SELECT * FROM '.SG_ACTION_TABLE_NAME.' WHERE id=%d LIMIT 1', array($actionId));
182
+
183
+ if (!count($res))
184
+ {
185
+ return false;
186
+ }
187
+
188
+ $row = $res[0];
189
+
190
+ if ($row['type']!=SG_ACTION_TYPE_UPLOAD)
191
+ {
192
+ return false;
193
+ }
194
+
195
+ $this->actionId = $actionId;
196
+ $storage = $this->storageObjectById($row['subtype'], $storageName);
197
+
198
+ return true;
199
+ }
200
+
201
+ private function storageObjectById($storageId, &$storageName = '')
202
+ {
203
+ $res = $this->getStorageInfoById($storageId);
204
+ $storageName = $res['storageName'];
205
+ $storageClassName = $res['storageClassName'];
206
+
207
+ if (!$storageClassName) {
208
+ throw new SGExceptionNotFound('Unknown storage');
209
+ }
210
+
211
+ return new $storageClassName();
212
+ }
213
+
214
+ public function getStorageInfoById($storageId)
215
+ {
216
+ $storageName = '';
217
+ $storageClassName = '';
218
+ $storageId = (int)$storageId;
219
+ $isConnected = true;
220
+
221
+ switch ($storageId) {
222
+ case SG_STORAGE_FTP:
223
+ if (SGBoot::isFeatureAvailable('FTP')) {
224
+ $connectionMethod = SGConfig::get('SG_STORAGE_CONNECTION_METHOD');
225
+ $storage = null;
226
+
227
+ if($connectionMethod == 'ftp') {
228
+ $storageName = 'FTP';
229
+ }
230
+ else {
231
+ $storageName = 'SFTP';
232
+ }
233
+ $isFtpConnected = SGConfig::get('SG_STORAGE_FTP_CONNECTED');
234
+
235
+ if (empty($isFtpConnected)) {
236
+ $isConnected = false;
237
+ }
238
+ $storageClassName = "SGFTPManager";
239
+ }
240
+ break;
241
+ case SG_STORAGE_DROPBOX:
242
+ if (SGBoot::isFeatureAvailable('DROPBOX')) {
243
+ $storageName = 'Dropbox';
244
+ $storageClassName = "SGDropboxStorage";
245
+ }
246
+ $isDropboxConnected = SGConfig::get('SG_DROPBOX_ACCESS_TOKEN');
247
+
248
+ if (empty($isDropboxConnected)) {
249
+ $isConnected = false;
250
+ }
251
+ break;
252
+ case SG_STORAGE_GOOGLE_DRIVE:
253
+ if (SGBoot::isFeatureAvailable('GOOGLE_DRIVE')) {
254
+ $storageName = 'Google Drive';
255
+ $storageClassName = "SGGoogleDriveStorage";
256
+ }
257
+ $isGdriveConnected = SGConfig::get('SG_GOOGLE_DRIVE_REFRESH_TOKEN');
258
+
259
+ if (empty($isGdriveConnected)) {
260
+ $isConnected = false;
261
+ }
262
+ break;
263
+ case SG_STORAGE_AMAZON:
264
+ if (SGBoot::isFeatureAvailable('AMAZON')) {
265
+ $storageName = 'Amazon S3';
266
+ $storageClassName = "SGAmazonStorage";
267
+ }
268
+ $isAmazonConnected = SGConfig::get('SG_STORAGE_AMAZON_CONNECTED');
269
+
270
+ if (empty($isAmazonConnected)) {
271
+ $isConnected = false;
272
+ }
273
+ break;
274
+ case SG_STORAGE_ONE_DRIVE:
275
+ if (SGBoot::isFeatureAvailable('ONE_DRIVE')) {
276
+ $storageName = 'One Drive';
277
+ $storageClassName = "SGOneDriveStorage";
278
+ }
279
+ $isOneDriveConnected = SGConfig::get('SG_ONE_DRIVE_REFRESH_TOKEN');
280
+
281
+ if (empty($isOneDriveConnected)) {
282
+ $isConnected = false;
283
+ }
284
+ break;
285
+ case SG_STORAGE_P_CLOUD:
286
+ if (SGBoot::isFeatureAvailable('P_CLOUD')) {
287
+ $storageName = 'pCloud';
288
+ $storageClassName = "SGPCloudStorage";
289
+ }
290
+
291
+ $isPCloudConnected = SGConfig::get('SG_P_CLOUD_ACCESS_TOKEN');
292
+
293
+ if (empty($isPCloudConnected)) {
294
+ $isConnected = false;
295
+ }
296
+ break;
297
+ case SG_STORAGE_BOX:
298
+ if (SGBoot::isFeatureAvailable('BOX')) {
299
+ $storageName = 'box.com';
300
+ $storageClassName = "SGBoxStorage";
301
+ }
302
+
303
+ $isBoxConnected = SGConfig::get('SG_BOX_REFRESH_TOKEN');
304
+
305
+ if (empty($isBoxConnected)) {
306
+ $isConnected = false;
307
+ }
308
+ break;
309
+ case SG_STORAGE_BACKUP_GUARD:
310
+ if (SGBoot::isFeatureAvailable('BACKUP_GUARD') && SG_SHOW_BACKUPGUARD_CLOUD) {
311
+ $storageName = 'BackupGuard';
312
+ $storageClassName = "BackupGuard\Storage";
313
+ }
314
+ $isBackupGuardConnected = SGConfig::get('SG_BACKUPGUARD_CLOUD_ACCOUNT')?unserialize(SGConfig::get('SG_BACKUPGUARD_CLOUD_ACCOUNT')):'';
315
+
316
+ if (empty($isBackupGuardConnected)) {
317
+ $isConnected = false;
318
+ }
319
+ break;
320
+ }
321
+
322
+ $res = array(
323
+ 'storageName' => $storageName,
324
+ 'storageClassName' => $storageClassName,
325
+ 'isConnected' => $isConnected,
326
+ );
327
+
328
+ return $res;
329
+ }
330
+
331
+ public function shouldUploadNextChunk()
332
+ {
333
+ if (SGBoot::isFeatureAvailable('BACKGROUND_MODE') && $this->backgroundMode)
334
+ {
335
+ SGBackgroundMode::next();
336
+ }
337
+
338
+ $this->currentUploadChunksCount++;
339
+ if ($this->updateProgress())
340
+ {
341
+ $this->checkCancellation();
342
+ }
343
+ return true;
344
+ }
345
+
346
+ public function willStartUpload($chunksCount)
347
+ {
348
+ $this->totalUploadChunksCount = $chunksCount;
349
+
350
+ if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
351
+ $this->resetProgress();
352
+ }
353
+ }
354
+
355
+ public function updateProgressManually($progress)
356
+ {
357
+ if (SGBoot::isFeatureAvailable('BACKGROUND_MODE') && $this->backgroundMode)
358
+ {
359
+ SGBackgroundMode::next();
360
+ }
361
+
362
+ if ($this->updateProgress($progress))
363
+ {
364
+ $this->checkCancellation();
365
+ }
366
+ }
367
+
368
+ private function updateProgress($progress = null)
369
+ {
370
+ if (!$progress) {
371
+ $progress = (int)ceil($this->currentUploadChunksCount*100.0/$this->totalUploadChunksCount);
372
+ }
373
+
374
+ if ($progress >= $this->nextProgressUpdate) {
375
+ $this->nextProgressUpdate += $this->progressUpdateInterval;
376
+
377
+ $progress = max($progress, 0);
378
+ $progress = min($progress, 100);
379
+ SGBackup::changeActionProgress($this->actionId, $progress);
380
+
381
+ return true;
382
+ }
383
+
384
+ return false;
385
+ }
386
+
387
+ private function resetProgress()
388
+ {
389
+ $this->currentUploadChunksCount = 0;
390
+ $this->nextProgressUpdate = $this->progressUpdateInterval;
391
+ }
392
+
393
+ private function checkCancellation()
394
+ {
395
+ $status = SGBackup::getActionStatus($this->actionId);
396
+ if ($status==SG_ACTION_STATUS_CANCELLING)
397
+ {
398
+ SGBackupLog::write('Upload cancelled');
399
+ throw new SGExceptionSkip();
400
+ }
401
+ elseif ($status==SG_ACTION_STATUS_ERROR) {
402
+ SGBackupLog::write('Upload timeout error');
403
+ throw new SGExceptionExecutionTimeError();
404
+ }
405
+ }
406
+
407
+ public function shouldReload()
408
+ {
409
+ $currentTime = time();
410
+
411
+ if (($currentTime - $this->reloadStartTs) >= SG_RELOAD_TIMEOUT) {
412
+ return true;
413
+ }
414
+
415
+ return false;
416
+ }
417
+
418
+ private function startBackupUpload($backupName, SGStorage $storage, $storageName)
419
+ {
420
+ $this->reloadStartTs = time();
421
+ if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
422
+ $actionStartTs = time();
423
+ }
424
+ else {
425
+ $actionStartTs = $this->state->getActionStartTs();
426
+ }
427
+
428
+ SGPing::update();
429
+
430
+ $backupPath = SG_BACKUP_DIRECTORY.$backupName;
431
+ $filesBackupPath = $backupPath.'/'.$backupName.'.sgbp';
432
+
433
+ if (!is_readable($filesBackupPath)) {
434
+ SGBackup::changeActionStatus($this->actionId, SG_ACTION_STATUS_ERROR);
435
+ throw new SGExceptionNotFound('Backup not found');
436
+ }
437
+
438
+ try {
439
+ @session_write_close();
440
+
441
+ if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
442
+ SGBackup::changeActionStatus($this->actionId, SG_ACTION_STATUS_IN_PROGRESS_FILES);
443
+
444
+ SGBackupLog::write('-');
445
+ SGBackupLog::writeAction('upload to '.$storageName, SG_BACKUP_LOG_POS_START);
446
+ SGBackupLog::write('Authenticating');
447
+ }
448
+
449
+ $storage->setDelegate($this);
450
+ $storage->loadState();
451
+ $storage->connectOffline();
452
+
453
+ //get backups container folder
454
+ $backupsFolder = $this->state->getActiveDirectory();
455
+
456
+ if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
457
+ SGBackupLog::write('Preparing folder');
458
+
459
+ $folderTree = SG_BACKUP_DEFAULT_FOLDER_NAME;
460
+
461
+ if (SGBoot::isFeatureAvailable('SUBDIRECTORIES')){
462
+ $folderTree = SGConfig::get('SG_STORAGE_BACKUPS_FOLDER_NAME');
463
+ }
464
+
465
+ //create backups container folder, if needed
466
+ $backupsFolder = $storage->createFolder($folderTree);
467
+ }
468
+
469
+ $storage->setActiveDirectory($backupsFolder);
470
+
471
+ if ($this->state->getAction() == SG_STATE_ACTION_PREPARING_STATE_FILE) {
472
+ SGBackupLog::write('Uploading file');
473
+ }
474
+
475
+ $storage->uploadFile($filesBackupPath);
476
+
477
+ SGBackupLog::writeAction('upload to '.$storageName, SG_BACKUP_LOG_POS_END);
478
+
479
+ //Writing upload status to report file
480
+ file_put_contents($backupPath.'/'.SG_REPORT_FILE_NAME, 'Uploaded to '.$storageName.": completed\n", FILE_APPEND);
481
+ SGBackupLog::write('Total duration: '.backupGuardFormattedDuration($actionStartTs, time()));
482
+
483
+ SGBackup::changeActionStatus($this->actionId, SG_ACTION_STATUS_FINISHED);
484
+ }
485
+ catch (Exception $exception) {
486
+ if ($exception instanceof SGExceptionSkip) {
487
+ SGBackup::changeActionStatus($this->actionId, SG_ACTION_STATUS_CANCELLED);
488
+ //Writing upload status to report file
489
+ file_put_contents($backupPath.'/'.SG_REPORT_FILE_NAME, 'Uploaded to '.$storageName.': canceled', FILE_APPEND);
490
+ SGBackupMailNotification::sendBackupNotification(SG_ACTION_STATUS_CANCELLED, array(
491
+ 'flowFilePath' => $backupPath.'/'.SG_REPORT_FILE_NAME,
492
+ 'archiveName' => $backupName
493
+ ));
494
+ }
495
+ else {
496
+ SGBackup::changeActionStatus($this->actionId, SG_ACTION_STATUS_FINISHED_WARNINGS);
497
+
498
+ if (!$exception instanceof SGExceptionExecutionTimeError) {//to prevent log duplication for timeout exception
499
+ SGBackupLog::writeExceptionObject($exception);
500
+ }
501
+
502
+ if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) {
503
+ //Writing upload status to report file
504
+ file_put_contents($backupPath.'/'.SG_REPORT_FILE_NAME, 'Uploaded to '.$storageName.': failed', FILE_APPEND);
505
+ SGBackupMailNotification::sendBackupNotification(SG_ACTION_STATUS_ERROR, array(
506
+ 'flowFilePath' => $backupPath.'/'.SG_REPORT_FILE_NAME,
507
+ 'archiveName' => $backupName
508
+ ));
509
+ }
510
+ }
511
+
512
+ //delete file inside storage
513
+ $storageId = $this->state->getStorageType();
514
+ $this->deleteBackupFromStorage($storageId, $backupName);
515
+
516
+ //delete report file in case of error
517
+ @unlink($backupPath.'/'.SG_REPORT_FILE_NAME);
518
+ }
519
+ }
520
+ }
com/core/functions.php CHANGED
@@ -1,796 +1,904 @@
1
- <?php
2
-
3
- function backupGuardGetSiteUrl()
4
- {
5
- if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
6
- return get_site_url();
7
- }
8
- else {
9
- return sprintf(
10
- "%s://%s%s",
11
- isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
12
- $_SERVER['SERVER_NAME'],
13
- $_SERVER['REQUEST_URI']
14
- );
15
- }
16
- }
17
-
18
- function backupGuardGetCapabilities()
19
- {
20
- switch (SG_PRODUCT_IDENTIFIER) {
21
- case 'backup-guard-en':
22
- case 'backup-guard-wp-platinum':
23
- case 'backup-guard-en-regular':
24
- case 'backup-guard-en-extended':
25
- return BACKUP_GUARD_CAPABILITIES_PLATINUM;
26
- case 'backup-guard-wp-gold':
27
- return BACKUP_GUARD_CAPABILITIES_GOLD;
28
- case 'backup-guard-wp-silver':
29
- return BACKUP_GUARD_CAPABILITIES_SILVER;
30
- case 'backup-guard-wp-free':
31
- return BACKUP_GUARD_CAPABILITIES_FREE;
32
- }
33
- }
34
-
35
- function convertToReadableSize($size)
36
- {
37
- if (!$size) {
38
- return '0';
39
- }
40
-
41
- $base = log($size) / log(1000);
42
- $suffix = array("", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB");
43
- $f_base = floor($base);
44
-
45
- return round(pow(1000, $base - floor($base)), 1) . $suffix[$f_base];
46
- }
47
-
48
- function backupGuardgetSealPopup()
49
- {
50
- $currentDate = time();
51
- $sgShouldShowPopup = SGConfig::get('SG_SHOULD_SHOW_POPUP') == null ? true : SGConfig::get('SG_SHOULD_SHOW_POPUP');
52
- $sgPluginInstallUpdateDate = SGConfig::get('SG_PLUGIN_INSTALL_UPDATE_DATE') == null ? time() : SGConfig::get('SG_PLUGIN_INSTALL_UPDATE_DATE');
53
-
54
- // check ig plugin is active for free days show poup
55
- if (($currentDate - $sgPluginInstallUpdateDate >= SG_PLUGIN_ACTIVE_INTERVAL) && $sgShouldShowPopup) {
56
- ?>
57
- <script>
58
- window.SGPMPopupLoader=window.SGPMPopupLoader||{ids:[],popups:{},call:function(w,d,s,l,id){
59
- w['sgp']=w['sgp']||function(){(w['sgp'].q=w['sgp'].q||[]).push(arguments[0]);};
60
- var sg1=d.createElement(s),sg0=d.getElementsByTagName(s)[0];
61
- if(SGPMPopupLoader && SGPMPopupLoader.ids && SGPMPopupLoader.ids.length > 0){SGPMPopupLoader.ids.push(id); return;}
62
- SGPMPopupLoader.ids.push(id);
63
- sg1.onload = function(){SGPMPopup.openSGPMPopup();}; sg1.async=true; sg1.src=l;
64
- sg0.parentNode.insertBefore(sg1,sg0);
65
- return {};
66
- }};
67
- SGPMPopupLoader.call(window,document,'script','https://popupmaker.com/assets/lib/SGPMPopup.min.js','7c685e17');
68
- </script>
69
- <?php
70
- SGConfig::set('SG_SHOULD_SHOW_POPUP', 0);
71
- }
72
-
73
- return;
74
- }
75
-
76
- function backupGuardConvertDateTimezone($date, $dateFormat = "Y-m-d H:i:s", $timezone = "UTC")
77
- {
78
- if (in_array($timezone, timezone_identifiers_list())) {
79
- $date = date_create($date);
80
- $timezone = timezone_open($timezone);
81
- date_timezone_set($date, $timezone);
82
-
83
- if (!$dateFormat) {
84
- $dateFormat = "Y-m-d H:i:s";
85
- }
86
-
87
- return date_format($date, $dateFormat);
88
- }
89
-
90
- return $date;
91
- }
92
-
93
- function backupGuardRemoveSlashes($value)
94
- {
95
- if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
96
- return wp_unslash($value);
97
- }
98
- else {
99
- if (is_array($value)) {
100
- return array_map('stripslashes', $value);
101
- }
102
-
103
- return stripslashes($value);
104
- }
105
- }
106
-
107
- function backupGuardSanitizeTextField($value)
108
- {
109
- if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
110
- if (is_array($value)) {
111
- return array_map('sanitize_text_field', $value);
112
- }
113
-
114
- return sanitize_text_field($value);
115
- }
116
- else {
117
- if (is_array($value)) {
118
- return array_map('strip_tags', $value);
119
- }
120
-
121
- return strip_tags($value);
122
- }
123
- }
124
-
125
- function backupGuardIsMultisite()
126
- {
127
- if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
128
- return defined('BG_IS_MULTISITE')?BG_IS_MULTISITE:is_multisite();
129
- }
130
- else {
131
- return false;
132
- }
133
- }
134
-
135
- function backupGuardGetBanner($env, $type="plugin", $userType = null)
136
- {
137
- require_once(SG_LIB_PATH.'BackupGuard/Client.php');
138
- $client = new BackupGuard\Client();
139
- return $client->getBanner(strtolower($env), $type, $userType);
140
- }
141
-
142
- function backupGuardGetFilenameOptions($options)
143
- {
144
- $selectedPaths = explode(',', $options['SG_BACKUP_FILE_PATHS']);
145
- $pathsToExclude = explode(',', $options['SG_BACKUP_FILE_PATHS_EXCLUDE']);
146
-
147
- $opt = '';
148
-
149
- if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
150
- $opt .= 'opt(';
151
-
152
- if ($options['SG_BACKUP_TYPE'] == SG_BACKUP_TYPE_CUSTOM) {
153
- if ($options['SG_ACTION_BACKUP_DATABASE_AVAILABLE']) {
154
- $opt .= 'db_';
155
- }
156
-
157
- if ($options['SG_ACTION_BACKUP_FILES_AVAILABLE']) {
158
- if (in_array('wp-content', $selectedPaths)) {
159
- $opt .= 'wpc_';
160
- }
161
- if (!in_array('wp-content/plugins', $pathsToExclude)) {
162
- $opt .= 'plg_';
163
- }
164
- if (!in_array('wp-content/themes', $pathsToExclude)) {
165
- $opt .= 'thm_';
166
- }
167
- if (!in_array('wp-content/uploads', $pathsToExclude)) {
168
- $opt .= 'upl_';
169
- }
170
- }
171
-
172
-
173
- }
174
- else {
175
- $opt .= 'full';
176
- }
177
-
178
- $opt = trim($opt, "_");
179
- $opt .= ')_';
180
- }
181
-
182
- return $opt;
183
- }
184
-
185
- function backupGuardGenerateToken()
186
- {
187
- return md5(time());
188
- }
189
-
190
- // Parse a URL and return its components
191
- function backupGuardParseUrl($url)
192
- {
193
- $urlComponents = parse_url($url);
194
- $domain = $urlComponents['host'];
195
- $port = '';
196
-
197
- if (isset($urlComponents['port']) && strlen($urlComponents['port'])) {
198
- $port = ":".$urlComponents['port'];
199
- }
200
-
201
- $domain = preg_replace("/(www|\dww|w\dw|ww\d)\./", "", $domain);
202
-
203
- $path = "";
204
- if (isset($urlComponents['path'])) {
205
- $path = $urlComponents['path'];
206
- }
207
-
208
- return $domain.$port.$path;
209
- }
210
-
211
- function backupGuardIsReloadEnabled()
212
- {
213
- // Check if reloads option is turned on
214
- return SGConfig::get('SG_BACKUP_WITH_RELOADINGS')?true:false;
215
- }
216
-
217
- function backupGuardGetBackupOptions($options)
218
- {
219
- $backupOptions = array(
220
- 'SG_BACKUP_UPLOAD_TO_STORAGES' => '',
221
- 'SG_BACKUP_FILE_PATHS_EXCLUDE' => '',
222
- 'SG_BACKUP_FILE_PATHS' => ''
223
- );
224
-
225
- if (isset($options['sg-custom-backup-name']) && $options['sg-custom-backup-name']) {
226
- SGConfig::set("SG_CUSTOM_BACKUP_NAME", $options['sg-custom-backup-name']);
227
- }
228
- else {
229
- SGConfig::set("SG_CUSTOM_BACKUP_NAME", '');
230
- }
231
-
232
- //If background mode
233
- $isBackgroundMode = !empty($options['backgroundMode']) ? 1 : 0;
234
-
235
- if ($isBackgroundMode) {
236
- $backupOptions['SG_BACKUP_IN_BACKGROUND_MODE'] = $isBackgroundMode;
237
- }
238
-
239
- //If cloud backup
240
- if (!empty($options['backupCloud']) && count($options['backupStorages'])) {
241
- $clouds = $options['backupStorages'];
242
- $backupOptions['SG_BACKUP_UPLOAD_TO_STORAGES'] = implode(',', $clouds);
243
- }
244
-
245
- $backupOptions['SG_BACKUP_TYPE'] = $options['backupType'];
246
-
247
- if ($options['backupType'] == SG_BACKUP_TYPE_FULL) {
248
- $backupOptions['SG_ACTION_BACKUP_DATABASE_AVAILABLE']= 1;
249
- $backupOptions['SG_ACTION_BACKUP_FILES_AVAILABLE'] = 1;
250
- $backupOptions['SG_BACKUP_FILE_PATHS_EXCLUDE'] = SG_BACKUP_FILE_PATHS_EXCLUDE;
251
- $backupOptions['SG_BACKUP_FILE_PATHS'] = 'wp-content';
252
- }
253
- else if ($options['backupType'] == SG_BACKUP_TYPE_CUSTOM) {
254
- //If database backup
255
- $isDatabaseBackup = !empty($options['backupDatabase']) ? 1 : 0;
256
- $backupOptions['SG_ACTION_BACKUP_DATABASE_AVAILABLE'] = $isDatabaseBackup;
257
-
258
- //If db backup
259
- if($options['backupDBType']){
260
- $tablesToBackup = implode(',', $options['table']);
261
- $backupOptions['SG_BACKUP_TABLES_TO_BACKUP'] = $tablesToBackup;
262
- }
263
-
264
- //If files backup
265
- if (!empty($options['backupFiles']) && count($options['directory'])) {
266
- $backupFiles = explode(',', SG_BACKUP_FILE_PATHS);
267
- $filesToExclude = @array_diff($backupFiles, $options['directory']);
268
-
269
- if (in_array('wp-content', $options['directory'])) {
270
- $options['directory'] = array('wp-content');
271
- }
272
- else {
273
- $filesToExclude = array_diff($filesToExclude, array('wp-content'));
274
- }
275
-
276
- $filesToExclude = implode(',', $filesToExclude);
277
- if (strlen($filesToExclude)) {
278
- $filesToExclude = ','.$filesToExclude;
279
- }
280
-
281
- $backupOptions['SG_BACKUP_FILE_PATHS_EXCLUDE'] = SG_BACKUP_FILE_PATHS_EXCLUDE.$filesToExclude;
282
- $options['directory'] = backupGuardSanitizeTextField($options['directory']);
283
- $backupOptions['SG_BACKUP_FILE_PATHS'] = implode(',', $options['directory']);
284
- $backupOptions['SG_ACTION_BACKUP_FILES_AVAILABLE'] = 1;
285
- }
286
- else {
287
- $backupOptions['SG_ACTION_BACKUP_FILES_AVAILABLE'] = 0;
288
- $backupOptions['SG_BACKUP_FILE_PATHS'] = 0;
289
- }
290
- }
291
- return $backupOptions;
292
- }
293
-
294
- function backupGuardLoadStateData()
295
- {
296
- if (file_exists(SG_BACKUP_DIRECTORY.SG_STATE_FILE_NAME)) {
297
- $sgState = new SGState();
298
- $stateFile = file_get_contents(SG_BACKUP_DIRECTORY.SG_STATE_FILE_NAME);
299
- $sgState = $sgState->factory($stateFile);
300
- return $sgState;
301
- }
302
-
303
- return false;
304
- }
305
-
306
- function backupGuardValidateApiCall($token)
307
- {
308
- if (!strlen($token)) {
309
- exit();
310
- }
311
-
312
- $statePath = SG_BACKUP_DIRECTORY.SG_STATE_FILE_NAME;
313
-
314
- if (!file_exists($statePath)) {
315
- exit();
316
- }
317
-
318
- $state = file_get_contents($statePath);
319
- $state = json_decode($state, true);
320
- $stateToken = $state['token'];
321
-
322
- if ($stateToken != $token) {
323
- exit();
324
- }
325
-
326
- return true;
327
- }
328
-
329
- function backupGuardScanBackupsDirectory($path)
330
- {
331
- $backups = scandir($path);
332
- $backupFolders = array();
333
- foreach ($backups as $key => $backup) {
334
- if ($backup == "." || $backup == "..") {
335
- continue;
336
- }
337
-
338
- if (is_dir($path.$backup)) {
339
- $backupFolders[$backup] = filemtime($path.$backup);
340
- }
341
- }
342
- // Sort(from low to high) backups by creation date
343
- asort($backupFolders);
344
- return $backupFolders;
345
- }
346
-
347
- function backupGuardSymlinksCleanup($dir)
348
- {
349
- if (is_dir($dir)) {
350
- $objects = scandir($dir);
351
- foreach ($objects as $object) {
352
- if ($object == "." || $object == "..") {
353
- continue;
354
- }
355
-
356
- if (filetype($dir.$object) != "dir") {
357
- @unlink($dir.$object);
358
- }
359
- else {
360
- backupGuardSymlinksCleanup($dir.$object.'/');
361
- @rmdir($dir.$object);
362
- }
363
- }
364
- }
365
- else if (file_exists($dir)) {
366
- @unlink($dir);
367
- }
368
- return;
369
- }
370
-
371
- function backupGuardRealFilesize($filename)
372
- {
373
- $fp = fopen($filename, 'r');
374
- $return = false;
375
- if (is_resource($fp))
376
- {
377
- if (PHP_INT_SIZE < 8) // 32 bit
378
- {
379
- if (0 === fseek($fp, 0, SEEK_END))
380
- {
381
- $return = 0.0;
382
- $step = 0x7FFFFFFF;
383
- while ($step > 0)
384
- {
385
- if (0 === fseek($fp, - $step, SEEK_CUR))
386
- {
387
- $return += floatval($step);
388
- }
389
- else
390
- {
391
- $step >>= 1;
392
- }
393
- }
394
- }
395
- }
396
- else if (0 === fseek($fp, 0, SEEK_END)) // 64 bit
397
- {
398
- $return = ftell($fp);
399
- }
400
- }
401
-
402
- return $return;
403
- }
404
-
405
- function backupGuardFormattedDuration($startTs, $endTs)
406
- {
407
- $unit = 'seconds';
408
- $duration = $endTs-$startTs;
409
- if ($duration>=60 && $duration<3600)
410
- {
411
- $duration /= 60.0;
412
- $unit = 'minutes';
413
- }
414
- else if ($duration>=3600)
415
- {
416
- $duration /= 3600.0;
417
- $unit = 'hours';
418
- }
419
- $duration = number_format($duration, 2, '.', '');
420
-
421
- return $duration.' '.$unit;
422
- }
423
-
424
- function backupGuardDeleteDirectory($dirName)
425
- {
426
- $dirHandle = null;
427
- if (is_dir($dirName))
428
- {
429
- $dirHandle = opendir($dirName);
430
- }
431
-
432
- if (!$dirHandle)
433
- {
434
- return false;
435
- }
436
-
437
- while ($file = readdir($dirHandle))
438
- {
439
- if ($file != "." && $file != "..")
440
- {
441
- if (!is_dir($dirName."/".$file))
442
- {
443
- @unlink($dirName."/".$file);
444
- }
445
- else
446
- {
447
- backupGuardDeleteDirectory($dirName.'/'.$file);
448
- }
449
- }
450
- }
451
-
452
- closedir($dirHandle);
453
- return @rmdir($dirName);
454
- }
455
-
456
- function backupGuardDownloadFile($file, $type = 'application/octet-stream')
457
- {
458
- $file = backupGuardRemoveSlashes($file);
459
- if (file_exists($file)) {
460
- header('Content-Description: File Transfer');
461
- header('Content-Type: '.$type);
462
- header('Content-Disposition: attachment; filename="'.basename($file).'";');
463
- header('Expires: 0');
464
- header('Cache-Control: must-revalidate');
465
- header('Pragma: public');
466
- header('Content-Length: ' . filesize($file));
467
- readfile($file);
468
- }
469
-
470
- exit;
471
- }
472
-
473
- function backupGuardDownloadViaPhp($backupName, $fileName)
474
- {
475
- $str = backupGuardMakeSymlinkFolder($fileName);
476
- @copy(SG_BACKUP_DIRECTORY.$backupName.'/'.$fileName, SG_SYMLINK_PATH.$str.'/'.$fileName);
477
-
478
- if (file_exists(SG_SYMLINK_PATH.$str.'/'.$fileName)) {
479
- $remoteGet = wp_remote_get(SG_SYMLINK_URL.$str.'/'.$fileName);
480
- if (!is_wp_error($remoteGet)) {
481
- $content = wp_remote_retrieve_body($remoteGet);
482
- header('Pragma: public');
483
- header('Expires: 0');
484
- header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
485
- header('Cache-Control: private', false);
486
- header('Content-Type: application/octet-stream');
487
- header('Content-Disposition: attachment; filename='.$fileName.';');
488
- header('Content-Transfer-Encoding: binary');
489
- echo $content;
490
- exit;
491
- }
492
- }
493
- }
494
-
495
- function backupGuardMakeSymlinkFolder($filename)
496
- {
497
- $filename = backupGuardRemoveSlashes($filename);
498
-
499
- $downloaddir = SG_SYMLINK_PATH;
500
- $downloadURL = SG_SYMLINK_URL;
501
-
502
- if (!file_exists($downloaddir)) {
503
- mkdir($downloaddir, 0777);
504
- }
505
-
506
- $letters = 'abcdefghijklmnopqrstuvwxyz';
507
- srand((double) microtime() * 1000000);
508
- $string = '';
509
-
510
- for ($i = 1; $i <= rand(4,12); $i++) {
511
- $q = rand(1,24);
512
- $string = $string.$letters[$q];
513
- }
514
-
515
- $handle = opendir($downloaddir);
516
- while ($dir = readdir($handle)) {
517
- if ($dir == "." || $dir == "..") {
518
- continue;
519
- }
520
-
521
- if (is_dir($downloaddir.$dir)) {
522
- @unlink($downloaddir . $dir . "/" . $filename);
523
- @rmdir($downloaddir . $dir);
524
- }
525
- }
526
-
527
- closedir($handle);
528
- mkdir($downloaddir . $string, 0777);
529
-
530
- return $string;
531
- }
532
-
533
- function backupGuardDownloadFileSymlink($safedir, $filename)
534
- {
535
- $downloaddir = SG_SYMLINK_PATH;
536
- $downloadURL = SG_SYMLINK_URL;
537
-
538
- $safedir = backupGuardRemoveSlashes($safedir);
539
- $string = backupGuardMakeSymlinkFolder($filename);
540
-
541
- $res = @symlink($safedir . $filename, $downloaddir . $string . "/" . $filename);
542
- if ($res) {
543
- header('Content-Description: File Transfer');
544
- header('Content-Type: application/octet-stream');
545
- header('Content-Disposition: attachment;filename="'.$filename.'"');
546
- header('Content-Transfer-Encoding: binary');
547
- header("Location: " . $downloadURL . $string . "/" . $filename);
548
- }
549
- else{
550
- wp_die(_backupGuardT("Symlink / shortcut creation failed! Seems your server configurations don't allow symlink creation, so we're unable to provide you the direct download url. You can download your backup using any FTP client. All backups and related stuff we locate '/wp-content/uploads/backup-guard' directory. If you need this functionality, you should check out your server configurations and make sure you don't have any limitation related to symlink creation.", true));
551
- }
552
- exit;
553
- }
554
-
555
- function backupGuardGetCurrentUrlScheme()
556
- {
557
- return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')?'https':'http';
558
- }
559
-
560
- function backupGuardValidateLicense()
561
- {
562
- $pluginCapabilities = backupGuardGetCapabilities();
563
- if ($pluginCapabilities == BACKUP_GUARD_CAPABILITIES_FREE) {
564
- return true;
565
- }
566
-
567
- //only check once per day
568
- $ts = (int)SGConfig::get('SG_LICENSE_CHECK_TS');
569
- if (time() - $ts < SG_LICENSE_CHECK_TIMEOUT) {
570
- return true;
571
- }
572
-
573
- require_once(SG_LIB_PATH.'SGAuthClient.php');
574
-
575
- $url = site_url();
576
-
577
- $auth = SGAuthClient::getInstance();
578
- $res = $auth->validateUrl($url);
579
-
580
- if ($res === -1) { //login is required
581
- backup_guard_login_page();
582
- return false;
583
- }
584
- else if ($res === false) { //invalid license
585
- backup_guard_link_license_page();
586
- return false;
587
- }
588
- else {
589
- SGConfig::set('SG_LICENSE_CHECK_TS', time(), true);
590
- SGConfig::set('SG_LICENSE_KEY', $res, true);
591
- }
592
-
593
- return true;
594
- }
595
-
596
- //returns true if string $haystack ends with string $needle or $needle is an empty string
597
- function backupGuardStringEndsWith($haystack, $needle)
598
- {
599
- $length = strlen($needle);
600
-
601
- return $length === 0 ||
602
- (substr($haystack, -$length) === $needle);
603
- }
604
- //returns true if string $haystack starts with string $needle
605
- function backupGuardStringStartsWith($haystack, $needle)
606
- {
607
- $length = strlen($needle);
608
- return (substr($haystack, 0, $length) === $needle);
609
- }
610
-
611
- function backupGuardGetDbTables(){
612
- $sgdb = SGDatabase::getInstance();
613
- $tables = $sgdb->query("SHOW TABLES");
614
- $tablesKey = 'Tables_in_'.SG_DB_NAME;
615
- $tableNames = array();
616
- $customTablesToExclude = str_replace(' ', '', SGConfig::get('SG_TABLES_TO_EXCLUDE'));
617
- $tablesToExclude = explode(',', $customTablesToExclude);
618
- foreach ($tables as $table):
619
- $tableName = $table[$tablesKey];
620
- if($tableName != SG_ACTION_TABLE_NAME && $tableName != SG_CONFIG_TABLE_NAME && $tableName != SG_SCHEDULE_TABLE_NAME){
621
- array_push($tableNames, array('name'=>$tableName,
622
- 'current'=> backupGuardStringStartsWith($tableName, SG_ENV_DB_PREFIX)? 'true':'false',
623
- 'disabled'=>in_array($tableName,$tablesToExclude)? 'disabled':''
624
- ));
625
- }
626
- endforeach;
627
- usort($tableNames, function ($name1, $name2){
628
- if(backupGuardStringStartsWith($name1['name'], SG_ENV_DB_PREFIX)){
629
- if(backupGuardStringStartsWith($name2['name'], SG_ENV_DB_PREFIX)){
630
- return 0;
631
- }
632
- return -1;
633
- }
634
- return 1;
635
- });
636
- return $tableNames;
637
- }
638
-
639
- function backupGuardGetBackupTablesHTML($defaultChecked = false){
640
- $tables = backupGuardGetDbTables();
641
- ?>
642
-
643
- <div class="checkbox">
644
- <label for="custom-backupdb-chbx">
645
- <input type="checkbox" class="sg-custom-option" name="backupDatabase" id="custom-backupdb-chbx" <?php echo $defaultChecked?'checked':'' ?>>
646
- <span class="sg-checkbox-label-text"><?php _backupGuardT('Backup database'); ?></span>
647
- </label>
648
- <div class="col-md-12 sg-checkbox sg-backup-db-options">
649
- <div class="checkbox">
650
- <label for="custombackupdbfull-radio" class="sg-backup-db-mode" title="<?php _backupGuardT('Backup all tables found in the database')?>">
651
- <input type="radio" name="backupDBType" id="custombackupdbfull-radio" value="0" checked>
652
- <?php _backupGuardT('Full'); ?>
653
- </label>
654
- <label for="custombackupdbcurent-radio" class="sg-backup-db-mode" title="<?php echo _backupGuardT('Backup tables related to the current WordPress installation. Only tables with', true).' '.SG_ENV_DB_PREFIX.' '._backupGuardT('will be backed up', true)?>">
655
- <input type="radio" name="backupDBType" id="custombackupdbcurent-radio" value="1">
656
- <?php _backupGuardT('Only WordPress'); ?>
657
- </label>
658
- <label for="custombackupdbcustom-radio" class="sg-backup-db-mode" title="<?php _backupGuardT('Select tables you want to include in your backup') ?>">
659
- <input type="radio" name="backupDBType" id="custombackupdbcustom-radio" value="2">
660
- <?php _backupGuardT('Custom'); ?>
661
- </label>
662
- <!--Tables-->
663
- <div class="col-md-12 sg-custom-backup-tables">
664
- <?php foreach ($tables as $table): ?>
665
- <div class="checkbox">
666
- <label for="<?php echo $table['name']?>">
667
- <input type="checkbox" name="table[]" current="<?php echo $table['current'] ?>" <?php echo $table['disabled'] ?> id="<?php echo $table['name']?>" value="<?php echo $table['name'];?>">
668
- <span class="sg-checkbox-label-text"><?php echo basename($table['name']);?></span>
669
- <?php if($table['disabled']) {?>
670
- <span class="sg-disableText"><?php _backupGuardT('(excluded from settings)') ?></span>
671
- <?php } ?>
672
- </label>
673
- </div>
674
- <?php endforeach;?>
675
- </div>
676
- </div>
677
- </div>
678
-
679
- </div>
680
-
681
- <?php
682
-
683
- }
684
-
685
- function backupGuardIsAccountGold()
686
- {
687
- return strpos("gold", SG_PRODUCT_IDENTIFIER)!== false;
688
- }
689
-
690
- function backupGuardGetProductName()
691
- {
692
- $name = '';
693
- switch (SG_PRODUCT_IDENTIFIER) {
694
- case 'backup-guard-wp-silver':
695
- $name = 'Silver';
696
- break;
697
- case 'backup-guard-wp-platinum':
698
- $name = 'Platinum';
699
- break;
700
- case 'backup-guard-en':
701
- case 'backup-guard-en-regular':
702
- $name = 'Regular';
703
- break;
704
- case 'backup-guard-en-extended':
705
- $name = 'Extended';
706
- break;
707
- case 'backup-guard-wp-gold':
708
- $name = 'Gold';
709
- break;
710
- case 'backup-guard-wp-free':
711
- $name = 'Free';
712
- break;
713
- }
714
-
715
- return $name;
716
- }
717
-
718
- function backupGuardGetFileSelectiveRestore()
719
- {
720
- ?>
721
- <div class="col-md-12 sg-checkbox sg-restore-files-options">
722
- <div class="checkbox">
723
- <label for="restorefilesfull-radio" class="sg-restore-files-mode" >
724
- <input type="radio" name="restoreFilesType" checked id="restorefilesfull-radio" value="0">
725
- <?php _backupGuardT('Full'); ?>
726
- </label>
727
-
728
- <label for="restorefilescustom-radio" class="sg-restore-files-mode">
729
- <input type="radio" name="restoreFilesType" id="restorefilescustom-radio" value="1">
730
- <?php _backupGuardT('Custom'); ?>
731
- </label>
732
- <!--Files-->
733
- <div class="col-md-12 sg-file-selective-restore">
734
- <div id="fileSystemTreeContainer"></div>
735
- </div>
736
- </div>
737
- </div>
738
- <?php
739
- }
740
-
741
- function checkAllMissedTables()
742
- {
743
- $sgdb = SGDatabase::getInstance();
744
- $allTables = array(SG_CONFIG_TABLE_NAME, SG_SCHEDULE_TABLE_NAME, SG_ACTION_TABLE_NAME);
745
- $missedTables = array();
746
- $status = true;
747
-
748
- foreach ($allTables as $table) {
749
- $query = $sgdb->query("SELECT count(*) as isExists
750
- FROM information_schema.TABLES
751
- WHERE (TABLE_SCHEMA = '".DB_NAME."') AND (TABLE_NAME = '$table')"
752
- );
753
-
754
- if (empty($query[0]['isExists'])) {
755
- $status = false;
756
- }
757
- }
758
-
759
- return $status;
760
- }
761
-
762
- function backupGuardIncludeFile($filePath)
763
- {
764
- if (file_exists($filePath)) {
765
- include_once($filePath);
766
- }
767
- }
768
-
769
- function getCloudUploadDefaultMaxChunkSize()
770
- {
771
- $memory = (int)SGBoot::$memoryLimit;
772
- $uploadSize = 1;
773
-
774
- if ($memory <= 128) {
775
- $uploadSize = 4;
776
- }
777
- else if ($memory > 128 && $memory <= 256) {
778
- $uploadSize = 8;
779
- }
780
- else if ($memory > 256 && $memory <= 512) {
781
- $uploadSize = 16;
782
- }
783
- else if ($memory > 512) {
784
- $uploadSize = 32;
785
- }
786
-
787
- return $uploadSize;
788
- }
789
-
790
- function getCloudUploadChunkSize()
791
- {
792
- $cloudUploadDefaultChunkSize = (int)getCloudUploadDefaultMaxChunkSize();
793
- $savedCloudUploadChunkSize = (int)SGConfig::get('SG_BACKUP_CLOUD_UPLOAD_CHUNK_SIZE');
794
-
795
- return ($savedCloudUploadChunkSize ? $savedCloudUploadChunkSize:$cloudUploadDefaultChunkSize);
796
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ function backupGuardGetSiteUrl()
4
+ {
5
+ if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
6
+ return get_site_url();
7
+ } else {
8
+ return sprintf(
9
+ "%s://%s%s",
10
+ isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
11
+ $_SERVER['SERVER_NAME'],
12
+ $_SERVER['REQUEST_URI']
13
+ );
14
+ }
15
+ }
16
+
17
+ function backupGuardGetCapabilities()
18
+ {
19
+ switch (SG_PRODUCT_IDENTIFIER) {
20
+ case 'backup-guard-en':
21
+ case 'backup-guard-wp-platinum':
22
+ case 'backup-guard-en-regular':
23
+ case 'backup-guard-en-extended':
24
+ return BACKUP_GUARD_CAPABILITIES_PLATINUM;
25
+ case 'backup-guard-wp-gold':
26
+ return BACKUP_GUARD_CAPABILITIES_GOLD;
27
+ case 'backup-guard-wp-silver':
28
+ return BACKUP_GUARD_CAPABILITIES_SILVER;
29
+ case 'backup-guard-wp-free':
30
+ return BACKUP_GUARD_CAPABILITIES_FREE;
31
+ }
32
+ }
33
+
34
+ function convertToReadableSize($size)
35
+ {
36
+ if (!$size) {
37
+ return '0';
38
+ }
39
+
40
+ $base = log($size) / log(1000);
41
+ $suffix = array("", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB");
42
+ $fBase = floor($base);
43
+
44
+ return round(pow(1000, $base - floor($base)), 1) . $suffix[$fBase];
45
+ }
46
+
47
+ function backupGuardgetSealPopup()
48
+ {
49
+ $currentDate = time();
50
+ $sgShouldShowPopup = SGConfig::get('SG_SHOULD_SHOW_POPUP') == null ? true : SGConfig::get('SG_SHOULD_SHOW_POPUP');
51
+ $sgPluginInstallUpdateDate = SGConfig::get('SG_PLUGIN_INSTALL_UPDATE_DATE') == null ? time() : SGConfig::get('SG_PLUGIN_INSTALL_UPDATE_DATE');
52
+
53
+ // check ig plugin is active for free days show poup
54
+ if (($currentDate - $sgPluginInstallUpdateDate >= SG_PLUGIN_ACTIVE_INTERVAL) && $sgShouldShowPopup) {
55
+ ?>
56
+ <script>
57
+ window.SGPMPopupLoader = window.SGPMPopupLoader || {
58
+ ids: [], popups: {}, call: function (w, d, s, l, id) {
59
+ w['sgp'] = w['sgp'] || function () {
60
+ (w['sgp'].q = w['sgp'].q || []).push(arguments[0]);
61
+ };
62
+ var sg1 = d.createElement(s), sg0 = d.getElementsByTagName(s)[0];
63
+ if (SGPMPopupLoader && SGPMPopupLoader.ids && SGPMPopupLoader.ids.length > 0) {
64
+ SGPMPopupLoader.ids.push(id);
65
+ return;
66
+ }
67
+ SGPMPopupLoader.ids.push(id);
68
+ sg1.onload = function () {
69
+ SGPMPopup.openSGPMPopup();
70
+ };
71
+ sg1.async = true;
72
+ sg1.src = l;
73
+ sg0.parentNode.insertBefore(sg1, sg0);
74
+ return {};
75
+ }
76
+ };
77
+ SGPMPopupLoader.call(window, document, 'script', 'https://popupmaker.com/assets/lib/SGPMPopup.min.js', '7c685e17');
78
+ </script>
79
+ <?php
80
+ SGConfig::set('SG_SHOULD_SHOW_POPUP', 0);
81
+ }
82
+
83
+ return;
84
+ }
85
+
86
+ function backupGuardConvertDateTimezone($date, $dateFormat = "Y-m-d H:i:s", $timezone = "UTC")
87
+ {
88
+ if (in_array($timezone, timezone_identifiers_list())) {
89
+ $date = date_create($date);
90
+ $timezone = timezone_open($timezone);
91
+ date_timezone_set($date, $timezone);
92
+
93
+ if (!$dateFormat) {
94
+ $dateFormat = "Y-m-d H:i:s";
95
+ }
96
+
97
+ return date_format($date, $dateFormat);
98
+ }
99
+
100
+ return $date;
101
+ }
102
+
103
+ function backupGuardRemoveSlashes($value)
104
+ {
105
+ if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
106
+ return wp_unslash($value);
107
+ } else {
108
+ if (is_array($value)) {
109
+ return array_map('stripslashes', $value);
110
+ }
111
+
112
+ return stripslashes($value);
113
+ }
114
+ }
115
+
116
+ function backupGuardSanitizeTextField($value)
117
+ {
118
+ if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
119
+ if (is_array($value)) {
120
+ return array_map('sanitize_text_field', $value);
121
+ }
122
+
123
+ return sanitize_text_field($value);
124
+ } else {
125
+ if (is_array($value)) {
126
+ return array_map('strip_tags', $value);
127
+ }
128
+
129
+ return strip_tags($value);
130
+ }
131
+ }
132
+
133
+ function backupGuardIsMultisite()
134
+ {
135
+ if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
136
+ return defined('BG_IS_MULTISITE') ? BG_IS_MULTISITE : is_multisite();
137
+ } else {
138
+ return false;
139
+ }
140
+ }
141
+
142
+ function backupGuardGetBanner($env, $type = "plugin", $userType = null)
143
+ {
144
+ include_once SG_LIB_PATH . 'BackupGuard/Client.php';
145
+ $client = new BackupGuard\Client();
146
+ return $client->getBanner(strtolower($env), $type, $userType);
147
+ }
148
+
149
+ function backupGuardGetFilenameOptions($options)
150
+ {
151
+ $selectedPaths = explode(',', $options['SG_BACKUP_FILE_PATHS']);
152
+ $pathsToExclude = explode(',', $options['SG_BACKUP_FILE_PATHS_EXCLUDE']);
153
+
154
+ $opt = '';
155
+
156
+ if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
157
+ $opt .= 'opt(';
158
+
159
+ if ($options['SG_BACKUP_TYPE'] == SG_BACKUP_TYPE_CUSTOM) {
160
+ if ($options['SG_ACTION_BACKUP_DATABASE_AVAILABLE']) {
161
+ $opt .= 'db_';
162
+ }
163
+
164
+ if ($options['SG_ACTION_BACKUP_FILES_AVAILABLE']) {
165
+ if (in_array('wp-content', $selectedPaths)) {
166
+ $opt .= 'wpc_';
167
+ }
168
+ if (!in_array('wp-content/plugins', $pathsToExclude)) {
169
+ $opt .= 'plg_';
170
+ }
171
+ if (!in_array('wp-content/themes', $pathsToExclude)) {
172
+ $opt .= 'thm_';
173
+ }
174
+ if (!in_array('wp-content/uploads', $pathsToExclude)) {
175
+ $opt .= 'upl_';
176
+ }
177
+ }
178
+ } else {
179
+ $opt .= 'full';
180
+ }
181
+
182
+ $opt = trim($opt, "_");
183
+ $opt .= ')_';
184
+ }
185
+
186
+ return $opt;
187
+ }
188
+
189
+ function backupGuardGenerateToken()
190
+ {
191
+ return md5(time());
192
+ }
193
+
194
+ // Parse a URL and return its components
195
+ function backupGuardParseUrl($url)
196
+ {
197
+ $urlComponents = parse_url($url);
198
+ $domain = $urlComponents['host'];
199
+ $port = '';
200
+
201
+ if (isset($urlComponents['port']) && strlen($urlComponents['port'])) {
202
+ $port = ":" . $urlComponents['port'];
203
+ }
204
+
205
+ $domain = preg_replace("/(www|\dww|w\dw|ww\d)\./", "", $domain);
206
+
207
+ $path = "";
208
+ if (isset($urlComponents['path'])) {
209
+ $path = $urlComponents['path'];
210
+ }
211
+
212
+ return $domain . $port . $path;
213
+ }
214
+
215
+ function backupGuardIsReloadEnabled()
216
+ {
217
+ // Check if reloads option is turned on
218
+ return SGConfig::get('SG_BACKUP_WITH_RELOADINGS') ? true : false;
219
+ }
220
+
221
+ function backupGuardGetBackupOptions($options)
222
+ {
223
+ $backupOptions = array(
224
+ 'SG_BACKUP_UPLOAD_TO_STORAGES' => '',
225
+ 'SG_BACKUP_FILE_PATHS_EXCLUDE' => '',
226
+ 'SG_BACKUP_FILE_PATHS' => ''
227
+ );
228
+
229
+ if (isset($options['sg-custom-backup-name']) && $options['sg-custom-backup-name']) {
230
+ SGConfig::set("SG_CUSTOM_BACKUP_NAME", $options['sg-custom-backup-name']);
231
+ } else {
232
+ SGConfig::set("SG_CUSTOM_BACKUP_NAME", '');
233
+ }
234
+
235
+ //If background mode
236
+ $isBackgroundMode = !empty($options['backgroundMode']) ? 1 : 0;
237
+
238
+ if ($isBackgroundMode) {
239
+ $backupOptions['SG_BACKUP_IN_BACKGROUND_MODE'] = $isBackgroundMode;
240
+ }
241
+
242
+ //If cloud backup
243
+ if (!empty($options['backupCloud']) && count($options['backupStorages'])) {
244
+ $clouds = $options['backupStorages'];
245
+ $backupOptions['SG_BACKUP_UPLOAD_TO_STORAGES'] = implode(',', $clouds);
246
+ }
247
+
248
+ $backupOptions['SG_BACKUP_TYPE'] = $options['backupType'];
249
+
250
+ if ($options['backupType'] == SG_BACKUP_TYPE_FULL) {
251
+ $backupOptions['SG_ACTION_BACKUP_DATABASE_AVAILABLE'] = 1;
252
+ $backupOptions['SG_ACTION_BACKUP_FILES_AVAILABLE'] = 1;
253
+ $backupOptions['SG_BACKUP_FILE_PATHS_EXCLUDE'] = SG_BACKUP_FILE_PATHS_EXCLUDE;
254
+ $backupOptions['SG_BACKUP_FILE_PATHS'] = 'wp-content';
255
+ } else if ($options['backupType'] == SG_BACKUP_TYPE_CUSTOM) {
256
+ //If database backup
257
+ $isDatabaseBackup = !empty($options['backupDatabase']) ? 1 : 0;
258
+ $backupOptions['SG_ACTION_BACKUP_DATABASE_AVAILABLE'] = $isDatabaseBackup;
259
+
260
+ //If db backup
261
+ if ($options['backupDBType']) {
262
+ $tablesToBackup = implode(',', $options['table']);
263
+ $backupOptions['SG_BACKUP_TABLES_TO_BACKUP'] = $tablesToBackup;
264
+ }
265
+
266
+ //If files backup
267
+ if (!empty($options['backupFiles']) && count($options['directory'])) {
268
+ $backupFiles = explode(',', SG_BACKUP_FILE_PATHS);
269
+ $filesToExclude = @array_diff($backupFiles, $options['directory']);
270
+
271
+ if (in_array('wp-content', $options['directory'])) {
272
+ $options['directory'] = array('wp-content');
273
+ } else {
274
+ $filesToExclude = array_diff($filesToExclude, array('wp-content'));
275
+ }
276
+
277
+ $filesToExclude = implode(',', $filesToExclude);
278
+ if (strlen($filesToExclude)) {
279
+ $filesToExclude = ',' . $filesToExclude;
280
+ }
281
+
282
+ $backupOptions['SG_BACKUP_FILE_PATHS_EXCLUDE'] = SG_BACKUP_FILE_PATHS_EXCLUDE . $filesToExclude;
283
+ $options['directory'] = backupGuardSanitizeTextField($options['directory']);
284
+ $backupOptions['SG_BACKUP_FILE_PATHS'] = implode(',', $options['directory']);
285
+ $backupOptions['SG_ACTION_BACKUP_FILES_AVAILABLE'] = 1;
286
+ } else {
287
+ $backupOptions['SG_ACTION_BACKUP_FILES_AVAILABLE'] = 0;
288
+ $backupOptions['SG_BACKUP_FILE_PATHS'] = 0;
289
+ }
290
+ }
291
+ return $backupOptions;
292
+ }
293
+
294
+ function backupGuardLoadStateData()
295
+ {
296
+ if (file_exists(SG_BACKUP_DIRECTORY . SG_STATE_FILE_NAME)) {
297
+ $sgState = new SGState();
298
+ $stateFile = file_get_contents(SG_BACKUP_DIRECTORY . SG_STATE_FILE_NAME);
299
+ $sgState = $sgState->factory($stateFile);
300
+ return $sgState;
301
+ }
302
+
303
+ return false;
304
+ }
305
+
306
+ function backupGuardValidateApiCall($token)
307
+ {
308
+ if (!strlen($token)) {
309
+ exit();
310
+ }
311
+
312
+ $statePath = SG_BACKUP_DIRECTORY . SG_STATE_FILE_NAME;
313
+
314
+ if (!file_exists($statePath)) {
315
+ exit();
316
+ }
317
+
318
+ $state = file_get_contents($statePath);
319
+ $state = json_decode($state, true);
320
+ $stateToken = $state['token'];
321
+
322
+ if ($stateToken != $token) {
323
+ exit();
324
+ }
325
+
326
+ return true;
327
+ }
328
+
329
+ function backupGuardScanBackupsDirectory($path)
330
+ {
331
+ $backups = scandir($path);
332
+ $backupFolders = array();
333
+ foreach ($backups as $backup) {
334
+ if ($backup == "." || $backup == "..") {
335
+ continue;
336
+ }
337
+
338
+ if (is_dir($path . $backup)) {
339
+ $backupFolders[$backup] = filemtime($path . $backup);
340
+ }
341
+ }
342
+ // Sort(from low to high) backups by creation date
343
+ asort($backupFolders);
344
+ return $backupFolders;
345
+ }
346
+
347
+ function backupGuardSymlinksCleanup($dir)
348
+ {
349
+ if (is_dir($dir)) {
350
+ $objects = scandir($dir);
351
+ foreach ($objects as $object) {
352
+ if ($object == "." || $object == "..") {
353
+ continue;
354
+ }
355
+
356
+ if (filetype($dir . $object) != "dir") {
357
+ @unlink($dir . $object);
358
+ } else {
359
+ backupGuardSymlinksCleanup($dir . $object . '/');
360
+ @rmdir($dir . $object);
361
+ }
362
+ }
363
+ } else if (file_exists($dir)) {
364
+ @unlink($dir);
365
+ }
366
+ return;
367
+ }
368
+
369
+ function backupGuardRealFilesize($filename)
370
+ {
371
+ $fp = fopen($filename, 'r');
372
+ $return = false;
373
+ if (is_resource($fp)) {
374
+ if (PHP_INT_SIZE < 8) { // 32 bit
375
+ if (0 === fseek($fp, 0, SEEK_END)) {
376
+ $return = 0.0;
377
+ $step = 0x7FFFFFFF;
378
+ while ($step > 0) {
379
+ if (0 === fseek($fp, -$step, SEEK_CUR)) {
380
+ $return += floatval($step);
381
+ } else {
382
+ $step >>= 1;
383
+ }
384
+ }
385
+ }
386
+ } else if (0 === fseek($fp, 0, SEEK_END)) { // 64 bit
387
+ $return = ftell($fp);
388
+ }
389
+ }
390
+
391
+ return $return;
392
+ }
393
+
394
+ function backupGuardFormattedDuration($startTs, $endTs)
395
+ {
396
+ $unit = 'seconds';
397
+ $duration = $endTs - $startTs;
398
+ if ($duration >= 60 && $duration < 3600) {
399
+ $duration /= 60.0;
400
+ $unit = 'minutes';
401
+ } else if ($duration >= 3600) {
402
+ $duration /= 3600.0;
403
+ $unit = 'hours';
404
+ }
405
+ $duration = number_format($duration, 2, '.', '');
406
+
407
+ return $duration . ' ' . $unit;
408
+ }
409
+
410
+ function backupGuardDeleteDirectory($dirName)
411
+ {
412
+ $dirHandle = null;
413
+ if (is_dir($dirName)) {
414
+ $dirHandle = opendir($dirName);
415
+ }
416
+
417
+ if (!$dirHandle) {
418
+ return false;
419
+ }
420
+
421
+ while ($file = readdir($dirHandle)) {
422
+ if ($file != "." && $file != "..") {
423
+ if (!is_dir($dirName . "/" . $file)) {
424
+ @unlink($dirName . "/" . $file);
425
+ } else {
426
+ backupGuardDeleteDirectory($dirName . '/' . $file);
427
+ }
428
+ }
429
+ }
430
+
431
+ closedir($dirHandle);
432
+ return @rmdir($dirName);
433
+ }
434
+
435
+ function backupGuardMakeSymlinkFolder($filename)
436
+ {
437
+ $filename = backupGuardRemoveSlashes($filename);
438
+
439
+ $downloaddir = SG_SYMLINK_PATH;
440
+
441
+ if (!file_exists($downloaddir)) {
442
+ mkdir($downloaddir, 0777);
443
+ }
444
+
445
+ $letters = 'abcdefghijklmnopqrstuvwxyz';
446
+ srand((double) microtime() * 1000000);
447
+ $string = '';
448
+
449
+ for ($i = 1; $i <= rand(4, 12); $i++) {
450
+ $q = rand(1, 24);
451
+ $string = $string . $letters[$q];
452
+ }
453
+
454
+ $handle = opendir($downloaddir);
455
+ while ($dir = readdir($handle)) {
456
+ if ($dir == "." || $dir == "..") {
457
+ continue;
458
+ }
459
+
460
+ if (is_dir($downloaddir . $dir)) {
461
+ @unlink($downloaddir . $dir . "/" . $filename);
462
+ @rmdir($downloaddir . $dir);
463
+ }
464
+ }
465
+
466
+ closedir($handle);
467
+ mkdir($downloaddir . $string, 0777);
468
+
469
+ return $string;
470
+ }
471
+
472
+ function backupGuardDownloadFile($file, $type = 'application/octet-stream')
473
+ {
474
+ if (ob_get_level()) {
475
+ ob_end_clean();
476
+ }
477
+
478
+ $file = backupGuardRemoveSlashes($file);
479
+ if (file_exists($file)) {
480
+ header('Content-Description: File Transfer');
481
+ header('Content-Type: ' . $type);
482
+ header('Content-Disposition: attachment; filename="' . basename($file) . '";');
483
+ header('Expires: 0');
484
+ header('Cache-Control: must-revalidate');
485
+ header('Pragma: public');
486
+ header('Content-Length: ' . filesize($file));
487
+ readfile($file);
488
+ }
489
+
490
+ exit;
491
+ }
492
+
493
+ function backupGuardDownloadViaPhp($backupName, $fileName)
494
+ {
495
+ $str = backupGuardMakeSymlinkFolder($fileName);
496
+ @copy(SG_BACKUP_DIRECTORY . $backupName . '/' . $fileName, SG_SYMLINK_PATH . $str . '/' . $fileName);
497
+
498
+ if (file_exists(SG_SYMLINK_PATH . $str . '/' . $fileName)) {
499
+ $remoteGet = wp_remote_get(SG_SYMLINK_URL . $str . '/' . $fileName);
500
+ if (!is_wp_error($remoteGet)) {
501
+ $content = wp_remote_retrieve_body($remoteGet);
502
+ header('Pragma: public');
503
+ header('Expires: 0');
504
+ header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
505
+ header('Cache-Control: private', false);
506
+ header('Content-Type: application/octet-stream');
507
+ header('Content-Disposition: attachment; filename=' . $fileName . ';');
508
+ header('Content-Transfer-Encoding: binary');
509
+ echo $content;
510
+ exit;
511
+ }
512
+ }
513
+ }
514
+
515
+ function backupGuardDownloadFileViaFunction($safeDir, $fileName, $type)
516
+ {
517
+ $downloadDir = SG_SYMLINK_PATH;
518
+ $downloadURL = SG_SYMLINK_URL;
519
+
520
+ $safeDir = backupGuardRemoveSlashes($safeDir);
521
+ $string = backupGuardMakeSymlinkFolder($fileName);
522
+
523
+ $target = $safeDir . $fileName;
524
+ $link = $downloadDir . $string . '/' . $fileName;
525
+
526
+ if ($type == BACKUP_GUARD_DOWNLOAD_TYPE['LINK']) {
527
+ $res = @link($target, $link);
528
+ $name = 'link';
529
+ } else {
530
+ $res = @symlink($target, $link);
531
+ $name = 'symlink';
532
+ }
533
+
534
+ if ($res) {
535
+ header('Content-Description: File Transfer');
536
+ header('Content-Type: application/octet-stream');
537
+ header('Content-Disposition: attachment;filename="' . $fileName . '"');
538
+ header('Content-Transfer-Encoding: binary');
539
+ header("Location: " . $downloadURL . $string . "/" . $fileName);
540
+ } else {
541
+ wp_die(_backupGuardT(ucfirst($name) . " / shortcut creation failed! Seems your server configurations don't allow $name creation, so we're unable to provide you the direct download url. You can download your backup using any FTP client. All backups and related stuff we locate '/wp-content/uploads/backup-guard' directory. If you need this functionality, you should check out your server configurations and make sure you don't have any limitation related to $name creation.", true));
542
+ }
543
+ exit;
544
+ }
545
+
546
+ function backupGuardDownloadFileSymlink($safedir, $filename)
547
+ {
548
+ $downloaddir = SG_SYMLINK_PATH;
549
+ $downloadURL = SG_SYMLINK_URL;
550
+
551
+ $safedir = backupGuardRemoveSlashes($safedir);
552
+ $string = backupGuardMakeSymlinkFolder($filename);
553
+
554
+ $res = @symlink($safedir . $filename, $downloaddir . $string . "/" . $filename);
555
+ if ($res) {
556
+ header('Content-Description: File Transfer');
557
+ header('Content-Type: application/octet-stream');
558
+ header('Content-Disposition: attachment;filename="' . $filename . '"');
559
+ header('Content-Transfer-Encoding: binary');
560
+ header("Location: " . $downloadURL . $string . "/" . $filename);
561
+ } else {
562
+ wp_die(_backupGuardT("Symlink / shortcut creation failed! Seems your server configurations don't allow symlink creation, so we're unable to provide you the direct download url. You can download your backup using any FTP client. All backups and related stuff we locate '/wp-content/uploads/backup-guard' directory. If you need this functionality, you should check out your server configurations and make sure you don't have any limitation related to symlink creation.", true));
563
+ }
564
+ exit;
565
+ }
566
+
567
+ function backupGuardDownloadFileLink($safedir, $filename)
568
+ {
569
+ $downloaddir = SG_SYMLINK_PATH;
570
+ $downloadURL = SG_SYMLINK_URL;
571
+
572
+ $safedir = backupGuardRemoveSlashes($safedir);
573
+ $string = backupGuardMakeSymlinkFolder($filename);
574
+
575
+ $res = @link($safedir . $filename, $downloaddir . $string . "/" . $filename);
576
+ if ($res) {
577
+ header('Content-Description: File Transfer');
578
+ header('Content-Type: application/octet-stream');
579
+ header('Content-Disposition: attachment;filename="' . $filename . '"');
580
+ header('Content-Transfer-Encoding: binary');
581
+ header("Location: " . $downloadURL . $string . "/" . $filename);
582
+ } else {
583
+ wp_die(_backupGuardT("Link / shortcut creation failed! Seems your server configurations don't allow link creation, so we're unable to provide you the direct download url. You can download your backup using any FTP client. All backups and related stuff we locate '/wp-content/uploads/backup-guard' directory. If you need this functionality, you should check out your server configurations and make sure you don't have any limitation related to link creation.", true));
584
+ }
585
+ exit;
586
+ }
587
+
588
+ function backupGuardGetCurrentUrlScheme()
589
+ {
590
+ return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
591
+ }
592
+
593
+ function backupGuardValidateLicense()
594
+ {
595
+ $pluginCapabilities = backupGuardGetCapabilities();
596
+ if ($pluginCapabilities == BACKUP_GUARD_CAPABILITIES_FREE) {
597
+ return true;
598
+ }
599
+
600
+ //only check once per day
601
+ $ts = (int) SGConfig::get('SG_LICENSE_CHECK_TS');
602
+ if (time() - $ts < SG_LICENSE_CHECK_TIMEOUT) {
603
+ return true;
604
+ }
605
+
606
+ include_once SG_LIB_PATH . 'SGAuthClient.php';
607
+
608
+ $url = site_url();
609
+
610
+ $auth = SGAuthClient::getInstance();
611
+ $res = $auth->validateUrl($url);
612
+
613
+ if ($res === -1) { //login is required
614
+ backup_guard_login_page();
615
+ return false;
616
+ } else if ($res === false) { //invalid license
617
+ backup_guard_link_license_page();
618
+ return false;
619
+ } else {
620
+ SGConfig::set('SG_LICENSE_CHECK_TS', time(), true);
621
+ SGConfig::set('SG_LICENSE_KEY', $res, true);
622
+ }
623
+
624
+ return true;
625
+ }
626
+
627
+ //returns true if string $haystack ends with string $needle or $needle is an empty string
628
+ function backupGuardStringEndsWith($haystack, $needle)
629
+ {
630
+ $length = strlen($needle);
631
+
632
+ return $length === 0 ||
633
+ (substr($haystack, -$length) === $needle);
634
+ }
635
+
636
+ //returns true if string $haystack starts with string $needle
637
+ function backupGuardStringStartsWith($haystack, $needle)
638
+ {
639
+ $length = strlen($needle);
640
+ return (substr($haystack, 0, $length) === $needle);
641
+ }
642
+
643
+ function backupGuardGetDbTables()
644
+ {
645
+ $sgdb = SGDatabase::getInstance();
646
+ $tables = $sgdb->query("SHOW TABLES");
647
+ $tablesKey = 'Tables_in_' . SG_DB_NAME;
648
+ $tableNames = array();
649
+ $customTablesToExclude = str_replace(' ', '', SGConfig::get('SG_TABLES_TO_EXCLUDE'));
650
+ $tablesToExclude = explode(',', $customTablesToExclude);
651
+ foreach ($tables as $table) :
652
+ $tableName = $table[$tablesKey];
653
+ if ($tableName != SG_ACTION_TABLE_NAME && $tableName != SG_CONFIG_TABLE_NAME && $tableName != SG_SCHEDULE_TABLE_NAME) {
654
+ array_push(
655
+ $tableNames,
656
+ array('name' => $tableName, 'current' => backupGuardStringStartsWith($tableName, SG_ENV_DB_PREFIX) ? 'true' : 'false', 'disabled' => in_array($tableName, $tablesToExclude) ? 'disabled' : '')
657
+ );
658
+ }
659
+ endforeach;
660
+ usort(
661
+ $tableNames,
662
+ function ($name1, $name2) {
663
+ if (backupGuardStringStartsWith($name1['name'], SG_ENV_DB_PREFIX)) {
664
+ if (backupGuardStringStartsWith($name2['name'], SG_ENV_DB_PREFIX)) {
665
+ return 0;
666
+ }
667
+ return -1;
668
+ }
669
+ return 1;
670
+ }
671
+ );
672
+ return $tableNames;
673
+ }
674
+
675
+ function backupGuardGetBackupTablesHTML($defaultChecked = false)
676
+ {
677
+ $tables = backupGuardGetDbTables();
678
+ ?>
679
+
680
+ <div class="checkbox">
681
+ <label for="custom-backupdb-chbx">
682
+ <input type="checkbox" class="sg-custom-option" name="backupDatabase"
683
+ id="custom-backupdb-chbx" <?php echo $defaultChecked ? 'checked' : '' ?>>
684
+ <span class="sg-checkbox-label-text"><?php _backupGuardT('Backup database'); ?></span>
685
+ </label>
686
+ <div class="col-md-12 sg-checkbox sg-backup-db-options">
687
+ <div class="checkbox">
688
+ <label for="custombackupdbfull-radio" class="sg-backup-db-mode"
689
+ title="<?php _backupGuardT('Backup all tables found in the database') ?>">
690
+ <input type="radio" name="backupDBType" id="custombackupdbfull-radio" value="0" checked>
691
+ <?php _backupGuardT('Full'); ?>
692
+ </label>
693
+ <label for="custombackupdbcurent-radio" class="sg-backup-db-mode"
694
+ title="<?php echo _backupGuardT('Backup tables related to the current WordPress installation. Only tables with', true) . ' ' . SG_ENV_DB_PREFIX . ' ' . _backupGuardT('will be backed up', true) ?>">
695
+ <input type="radio" name="backupDBType" id="custombackupdbcurent-radio" value="1">
696
+ <?php _backupGuardT('Only WordPress'); ?>
697
+ </label>
698
+ <label for="custombackupdbcustom-radio" class="sg-backup-db-mode"
699
+ title="<?php _backupGuardT('Select tables you want to include in your backup') ?>">
700
+ <input type="radio" name="backupDBType" id="custombackupdbcustom-radio" value="2">
701
+ <?php _backupGuardT('Custom'); ?>
702
+ </label>
703
+ <!--Tables-->
704
+ <div class="col-md-12 sg-custom-backup-tables">
705
+ <?php foreach ($tables as $table) : ?>
706
+ <div class="checkbox">
707
+ <label for="<?php echo $table['name'] ?>">
708
+ <input type="checkbox" name="table[]"
709
+ current="<?php echo $table['current'] ?>" <?php echo $table['disabled'] ?>
710
+ id="<?php echo $table['name'] ?>" value="<?php echo $table['name']; ?>">
711
+ <span class="sg-checkbox-label-text"><?php echo basename($table['name']); ?></span>
712
+ <?php if ($table['disabled']) { ?>
713
+ <span class="sg-disableText"><?php _backupGuardT('(excluded from settings)') ?></span>
714
+ <?php } ?>
715
+ </label>
716
+ </div>
717
+ <?php endforeach; ?>
718
+ </div>
719
+ </div>
720
+ </div>
721
+
722
+ </div>
723
+
724
+ <?php
725
+ }
726
+
727
+ function backupGuardIsAccountGold()
728
+ {
729
+ return strpos("gold", SG_PRODUCT_IDENTIFIER) !== false;
730
+ }
731
+
732
+ function backupGuardGetProductName()
733
+ {
734
+ $name = '';
735
+ switch (SG_PRODUCT_IDENTIFIER) {
736
+ case 'backup-guard-wp-silver':
737
+ $name = 'Silver';
738
+ break;
739
+ case 'backup-guard-wp-platinum':
740
+ $name = 'Platinum';
741
+ break;
742
+ case 'backup-guard-en':
743
+ case 'backup-guard-en-regular':
744
+ $name = 'Regular';
745
+ break;
746
+ case 'backup-guard-en-extended':
747
+ $name = 'Extended';
748
+ break;
749
+ case 'backup-guard-wp-gold':
750
+ $name = 'Gold';
751
+ break;
752
+ case 'backup-guard-wp-free':
753
+ $name = 'Free';
754
+ break;
755
+ }
756
+
757
+ return $name;
758
+ }
759
+
760
+ function backupGuardGetFileSelectiveRestore()
761
+ {
762
+ ?>
763
+ <div class="col-md-12 sg-checkbox sg-restore-files-options">
764
+ <div class="checkbox">
765
+ <label for="restorefilesfull-radio" class="sg-restore-files-mode">
766
+ <input type="radio" name="restoreFilesType" checked id="restorefilesfull-radio" value="0">
767
+ <?php _backupGuardT('Full'); ?>
768
+ </label>
769
+
770
+ <label for="restorefilescustom-radio" class="sg-restore-files-mode">
771
+ <input type="radio" name="restoreFilesType" id="restorefilescustom-radio" value="1">
772
+ <?php _backupGuardT('Custom'); ?>
773
+ </label>
774
+ <!--Files-->
775
+ <div class="col-md-12 sg-file-selective-restore">
776
+ <div id="fileSystemTreeContainer"></div>
777
+ </div>
778
+ </div>
779
+ </div>
780
+ <?php
781
+ }
782
+
783
+ function checkAllMissedTables()
784
+ {
785
+ $sgdb = SGDatabase::getInstance();
786
+ $allTables = array(SG_CONFIG_TABLE_NAME, SG_SCHEDULE_TABLE_NAME, SG_ACTION_TABLE_NAME);
787
+ $status = true;
788
+
789
+ foreach ($allTables as $table) {
790
+ $query = $sgdb->query(
791
+ "SELECT count(*) as isExists
792
+ FROM information_schema.TABLES
793
+ WHERE (TABLE_SCHEMA = '" . DB_NAME . "') AND (TABLE_NAME = '$table')"
794
+ );
795
+
796
+ if (empty($query[0]['isExists'])) {
797
+ $status = false;
798
+ }
799
+ }
800
+
801
+ return $status;
802
+ }
803
+
804
+ function backupGuardIncludeFile($filePath)
805
+ {
806
+ if (file_exists($filePath)) {
807
+ include_once $filePath;
808
+ }
809
+ }
810
+
811
+ function getCloudUploadDefaultMaxChunkSize()
812
+ {
813
+ $memory = (int) SGBoot::$memoryLimit;
814
+ $uploadSize = 1;
815
+
816
+ if ($memory <= 128) {
817
+ $uploadSize = 4;
818
+ } else if ($memory > 128 && $memory <= 256) {
819
+ $uploadSize = 8;
820
+ } else if ($memory > 256 && $memory <= 512) {
821
+ $uploadSize = 16;
822
+ } else if ($memory > 512) {
823
+ $uploadSize = 32;
824
+ }
825
+
826
+ return $uploadSize;
827
+ }
828
+
829
+ function getCloudUploadChunkSize()
830
+ {
831
+ $cloudUploadDefaultChunkSize = (int) getCloudUploadDefaultMaxChunkSize();
832
+ $savedCloudUploadChunkSize = (int) SGConfig::get('SG_BACKUP_CLOUD_UPLOAD_CHUNK_SIZE');
833
+
834
+ return ($savedCloudUploadChunkSize ? $savedCloudUploadChunkSize : $cloudUploadDefaultChunkSize);
835
+ }
836
+
837
+ function backupGuardCheckOS()
838
+ {
839
+ $os = strtoupper(substr(PHP_OS, 0, 3));
840
+
841
+ if ($os === 'WIN') {
842
+ return 'windows';
843
+ } else if ($os === 'LIN') {
844
+ return 'linux';
845
+ }
846
+
847
+ return 'other';
848
+ }
849
+
850
+ function backupGuardCheckDownloadMode()
851
+ {
852
+ $system = backupGuardCheckOS();
853
+
854
+ if (!file_exists(SG_SYMLINK_PATH)) {
855
+ mkdir(SG_SYMLINK_PATH);
856
+ }
857
+
858
+ $file = fopen(SG_SYMLINK_PATH . 'test.log', 'w');
859
+
860
+ if (!$file) {
861
+ return BACKUP_GUARD_DOWNLOAD_TYPE['PHP'];
862
+ }
863
+
864
+ $link = @link(SG_SYMLINK_PATH . 'test.log', SG_SYMLINK_PATH . 'link.log');
865
+ $symlink = @symlink(SG_SYMLINK_PATH . 'test.log', SG_SYMLINK_PATH . 'symlink.log');
866
+
867
+ @unlink(SG_SYMLINK_PATH . 'test.log');
868
+ @unlink(SG_SYMLINK_PATH . 'link.log');
869
+ @unlink(SG_SYMLINK_PATH . 'symlink.log');
870
+
871
+ if ($system == 'windows') {
872
+ if ($symlink) {
873
+ return BACKUP_GUARD_DOWNLOAD_TYPE['SYMLINK'];
874
+ }
875
+ } else {
876
+ if ($link) {
877
+ return BACKUP_GUARD_DOWNLOAD_TYPE['LINK'];
878
+ } elseif ($symlink) {
879
+ return BACKUP_GUARD_DOWNLOAD_TYPE['SYMLINK'];
880
+ }
881
+ }
882
+
883
+ return BACKUP_GUARD_DOWNLOAD_TYPE['PHP'];
884
+ }
885
+
886
+ function backupGuardMigrateDownloadMode()
887
+ {
888
+ $downloadModeRow = SGConfig::get('SG_DOWNLOAD_MODE', true);
889
+
890
+ if (!is_null($downloadModeRow)) {
891
+ return true;
892
+ }
893
+
894
+ $downloadMode = BACKUP_GUARD_DOWNLOAD_TYPE['PHP'];
895
+ $downloadViaPhp = SGConfig::get('SG_DOWNLOAD_VIA_PHP', true);
896
+
897
+ if ($downloadViaPhp != BACKUP_GUARD_DOWNLOAD_TYPE['PHP']) {
898
+ $downloadMode = backupGuardCheckDownloadMode();
899
+ }
900
+
901
+ SGConfig::set('SG_DOWNLOAD_MODE', $downloadMode);
902
+
903
+ return true;
904
+ }
com/lib/SGReloader.php CHANGED
@@ -1,86 +1,89 @@
1
- <?php
2
-
3
- require_once(SG_BACKUP_PATH.'SGBackup.php');
4
- require_once(SG_LIB_PATH.'SGReloaderState.php');
5
- require_once(SG_LIB_PATH.'SGReloadHandler.php');
6
- require_once(SG_LIB_PATH.'SGCallback.php');
7
-
8
- class SGReloader
9
- {
10
- public static function awake($method = null)
11
- {
12
- $reloaderState = SGReloaderState::loadState();
13
- if ($reloaderState['callback'] != "" && $reloaderState['state'] == SG_RELOADER_STATUS_IDLE) {
14
-
15
- $callbackJson = json_decode($reloaderState['callback']);
16
- $callbackJson->params['method'] = $method;
17
- $callback = new SGCallback($callbackJson->class, $callbackJson->method, $callbackJson->params);
18
-
19
- if ($callback->canPerform()) {
20
- self::saveState('', SG_RELOADER_STATUS_RUNNING);
21
- $callback->perform();
22
- }
23
- }
24
-
25
- return;
26
- }
27
-
28
- private static function saveState($callback, $state = SG_RELOADER_STATUS_IDLE)
29
- {
30
- $sgReloaderState = new SGReloaderState();
31
- $sgReloaderState->setCallback($callback);
32
- $sgReloaderState->setState($state);
33
- $sgReloaderState->update();
34
- }
35
-
36
- public static function didCompleteCallback()
37
- {
38
- self::saveState('', SG_RELOADER_STATUS_IDLE);
39
- }
40
-
41
- public static function registerCallback(SGCallback $callback)
42
- {
43
- self::saveState((string)$callback);
44
- }
45
-
46
- public static function reset()
47
- {
48
- SGReloaderState::reset();
49
- }
50
-
51
- public static function reloadWithAjaxUrl($awakeURL)
52
- {
53
- //external restore works only with ajax requests
54
- if (defined('BG_EXTERNAL_RESTORE_RUNNING') && BG_EXTERNAL_RESTORE_RUNNING) {
55
- return;
56
- }
57
-
58
- // awake frequency in miliseconds
59
- $sgAwakeFrequency = SGConfig::get('SG_AJAX_REQUEST_FREQUENCY')?SGConfig::get('SG_AJAX_REQUEST_FREQUENCY'):SG_AJAX_DEFAULT_REQUEST_FREQUENCY;
60
- $sgAwakeFrequency = $sgAwakeFrequency/1000; // awake frequency in seconds
61
-
62
- // add 3 seconds to awake frequency
63
- $timeout = $sgAwakeFrequency + 3;
64
- while ($timeout) {
65
-
66
- $reloaderState = SGReloaderState::loadState();
67
- $state = $reloaderState['state'];
68
-
69
- if ($state == SG_RELOADER_STATUS_RUNNING) {
70
- return;
71
- }
72
-
73
- sleep(1);
74
- $timeout--;
75
- }
76
-
77
- self::reload($awakeURL);
78
- }
79
-
80
- private static function reload($awakeURL)
81
- {
82
- $sgReloadHandler = new SGReloadHandler($awakeURL);
83
- $sgReloadHandler->reload();
84
- return;
85
- }
86
- }
 
 
 
1
+ <?php
2
+
3
+ require_once(SG_BACKUP_PATH.'SGBackup.php');
4
+ require_once(SG_LIB_PATH.'SGReloaderState.php');
5
+ require_once(SG_LIB_PATH.'SGReloadHandler.php');
6
+ require_once(SG_LIB_PATH.'SGCallback.php');
7
+
8
+ class SGReloader
9
+ {
10
+ public static function awake($method = null)
11
+ {
12
+ $reloaderState = SGReloaderState::loadState();
13
+ if ($reloaderState['callback'] != "" && $reloaderState['state'] == SG_RELOADER_STATUS_IDLE) {
14
+
15
+ $callbackJson = json_decode($reloaderState['callback']);
16
+ $callbackJson->params['method'] = $method;
17
+ $callback = new SGCallback($callbackJson->class, $callbackJson->method, $callbackJson->params);
18
+
19
+ if ($callback->canPerform()) {
20
+ self::saveState('', SG_RELOADER_STATUS_RUNNING);
21
+ $callback->perform();
22
+ }
23
+ }
24
+
25
+ return;
26
+ }
27
+
28
+ private static function saveState($callback, $state = SG_RELOADER_STATUS_IDLE)
29
+ {
30
+ $sgReloaderState = new SGReloaderState();
31
+ $sgReloaderState->setCallback($callback);
32
+ $sgReloaderState->setState($state);
33
+ $sgReloaderState->update();
34
+ }
35
+
36
+ public static function didCompleteCallback()
37
+ {
38
+ self::saveState('', SG_RELOADER_STATUS_IDLE);
39
+ }
40
+
41
+ public static function registerCallback(SGCallback $callback)
42
+ {
43
+ self::saveState((string)$callback);
44
+ }
45
+
46
+ public static function reset()
47
+ {
48
+ SGReloaderState::reset();
49
+ }
50
+
51
+ public static function reloadWithAjaxUrl($awakeURL)
52
+ {
53
+ //external restore works only with ajax requests
54
+ if (defined('BG_EXTERNAL_RESTORE_RUNNING') && BG_EXTERNAL_RESTORE_RUNNING) {
55
+ return;
56
+ }
57
+
58
+ @ob_end_clean();
59
+ @session_write_close();
60
+
61
+ // awake frequency in miliseconds
62
+ $sgAwakeFrequency = SGConfig::get('SG_AJAX_REQUEST_FREQUENCY')?SGConfig::get('SG_AJAX_REQUEST_FREQUENCY'):SG_AJAX_DEFAULT_REQUEST_FREQUENCY;
63
+ $sgAwakeFrequency = $sgAwakeFrequency/1000; // awake frequency in seconds
64
+
65
+ // add 3 seconds to awake frequency
66
+ $timeout = $sgAwakeFrequency + 3;
67
+ while ($timeout) {
68
+
69
+ $reloaderState = SGReloaderState::loadState();
70
+ $state = $reloaderState['state'];
71
+
72
+ if ($state == SG_RELOADER_STATUS_RUNNING) {
73
+ return;
74
+ }
75
+
76
+ sleep(1);
77
+ $timeout--;
78
+ }
79
+
80
+ self::reload($awakeURL);
81
+ }
82
+
83
+ private static function reload($awakeURL)
84
+ {
85
+ $sgReloadHandler = new SGReloadHandler($awakeURL);
86
+ $sgReloadHandler->reload();
87
+ return;
88
+ }
89
+ }
com/lib/SGUploadState.php CHANGED
@@ -1,151 +1,162 @@
1
- <?php
2
-
3
- require_once(dirname(__FILE__).'/SGState.php');
4
-
5
- class SGUploadState extends SGState
6
- {
7
- private $activeDirectory = '';
8
- private $currentUploadChunksCount = 0;
9
- private $totalUploadChunksCount = 0;
10
- private $uploadId = 0;
11
- private $parts = array();
12
- private $storageType = null;
13
- private $backupId = null;
14
- private $profileId = null;
15
-
16
- function __construct()
17
- {
18
- $this->type = SG_STATE_TYPE_UPLOAD;
19
- }
20
-
21
- public function setBackupId($backupId)
22
- {
23
- $this->backupId = $backupId;
24
- }
25
-
26
- public function getBackupId()
27
- {
28
- return $this->backupId;
29
- }
30
-
31
- public function setProfileId($profileId)
32
- {
33
- $this->profileId = $profileId;
34
- }
35
-
36
- public function getProfileId()
37
- {
38
- return $this->profileId;
39
- }
40
-
41
- public function setActiveDirectory($activeDirectory)
42
- {
43
- $this->activeDirectory = $activeDirectory;
44
- }
45
-
46
- public function setCurrentUploadChunksCount($currentUploadChunksCount)
47
- {
48
- $this->currentUploadChunksCount = $currentUploadChunksCount;
49
- }
50
-
51
- public function setTotalUploadChunksCount($totalUploadChunksCount)
52
- {
53
- $this->totalUploadChunksCount = $totalUploadChunksCount;
54
- }
55
-
56
- public function setUploadId($uploadId)
57
- {
58
- $this->uploadId = $uploadId;
59
- }
60
-
61
- public function setParts($parts)
62
- {
63
- $this->parts = $parts;
64
- }
65
-
66
- public function setStorageType($storageType)
67
- {
68
- $this->storageType = $storageType;
69
- }
70
-
71
- public function getStorageType()
72
- {
73
- return $this->storageType;
74
- }
75
-
76
- public function getCurrentUploadChunksCount()
77
- {
78
- return $this->currentUploadChunksCount;
79
- }
80
-
81
- public function getTotalUploadChunksCount()
82
- {
83
- return $this->totalUploadChunksCount;
84
- }
85
-
86
- public function getUploadId()
87
- {
88
- return $this->uploadId;
89
- }
90
-
91
- public function getParts()
92
- {
93
- return $this->parts;
94
- }
95
-
96
- public function getActiveDirectory()
97
- {
98
- return $this->activeDirectory;
99
- }
100
-
101
- public function init($stateJson)
102
- {
103
- $this->type = $stateJson['type'];
104
- $this->parts = $stateJson['parts'];
105
- $this->offset = $stateJson['offset'];
106
- $this->action = $stateJson['action'];
107
- $this->uploadId = $stateJson['uploadId'];
108
- $this->actionId = $stateJson['actionId'];
109
- $this->progress = $stateJson['progress'];
110
- $this->backupId = $stateJson['backupId'];
111
- $this->profileId = $stateJson['profileId'];
112
- $this->inprogress = $stateJson['inprogress'];
113
- $this->storageType = $stateJson['storageType'];
114
- $this->actionStartTs = $stateJson['actionStartTs'];
115
- $this->warningsFound = $stateJson['warningsFound'];
116
- $this->backupFileName = $stateJson['backupFileName'];
117
- $this->backupFilePath = $stateJson['backupFilePath'];
118
- $this->activeDirectory = $stateJson['activeDirectory'];
119
- $this->pendingStorageUploads = $stateJson['pendingStorageUploads'];
120
- $this->totalUploadChunksCount = $stateJson['totalUploadChunksCount'];
121
- $this->currentUploadChunksCount = $stateJson['currentUploadChunksCount'];
122
-
123
- return $this;
124
- }
125
-
126
- public function save()
127
- {
128
- file_put_contents(SG_BACKUP_DIRECTORY.SG_STATE_FILE_NAME, json_encode(array(
129
- 'type' => $this->type,
130
- 'parts' => $this->parts,
131
- 'token' => $this->token,
132
- 'offset' => $this->offset,
133
- 'action' => $this->action,
134
- 'uploadId' => $this->uploadId,
135
- 'actionId' => $this->actionId,
136
- 'progress' => $this->progress,
137
- 'backupId' => $this->backupId,
138
- 'profileId' => $this->profileId,
139
- 'inprogress' => $this->inprogress,
140
- 'storageType' => $this->storageType,
141
- 'actionStartTs' => $this->actionStartTs,
142
- 'warningsFound' => $this->warningsFound,
143
- 'backupFileName' => $this->backupFileName,
144
- 'backupFilePath' => $this->backupFilePath,
145
- 'activeDirectory' => $this->activeDirectory,
146
- 'pendingStorageUploads' => $this->pendingStorageUploads,
147
- 'totalUploadChunksCount' => $this->totalUploadChunksCount,
148
- 'currentUploadChunksCount' => $this->currentUploadChunksCount
149
- )));
150
- }
151
- }
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ require_once(dirname(__FILE__).'/SGState.php');
4
+
5
+ class SGUploadState extends SGState
6
+ {
7
+ private $activeDirectory = '';
8
+ private $currentUploadChunksCount = 0;
9
+ private $totalUploadChunksCount = 0;
10
+ private $uploadId = 0;
11
+ private $chunkSize = 0;
12
+ private $parts = array();
13
+ private $storageType = null;
14
+ private $backupId = null;
15
+ private $profileId = null;
16
+
17
+ function __construct()
18
+ {
19
+ $this->type = SG_STATE_TYPE_UPLOAD;
20
+ }
21
+
22
+ public function setBackupId($backupId)
23
+ {
24
+ $this->backupId = $backupId;
25
+ }
26
+
27
+ public function getBackupId()
28
+ {
29
+ return $this->backupId;
30
+ }
31
+
32
+ public function setProfileId($profileId)
33
+ {
34
+ $this->profileId = $profileId;
35
+ }
36
+
37
+ public function getProfileId()
38
+ {
39
+ return $this->profileId;
40
+ }
41
+
42
+ public function setActiveDirectory($activeDirectory)
43
+ {
44
+ $this->activeDirectory = $activeDirectory;
45
+ }
46
+
47
+ public function setCurrentUploadChunksCount($currentUploadChunksCount)
48
+ {
49
+ $this->currentUploadChunksCount = $currentUploadChunksCount;
50
+ }
51
+
52
+ public function setTotalUploadChunksCount($totalUploadChunksCount)
53
+ {
54
+ $this->totalUploadChunksCount = $totalUploadChunksCount;
55
+ }
56
+
57
+ public function setUploadId($uploadId)
58
+ {
59
+ $this->uploadId = $uploadId;
60
+ }
61
+
62
+ public function setParts($parts)
63
+ {
64
+ $this->parts = $parts;
65
+ }
66
+
67
+ public function setStorageType($storageType)
68
+ {
69
+ $this->storageType = $storageType;
70
+ }
71
+
72
+ public function getStorageType()
73
+ {
74
+ return $this->storageType;
75
+ }
76
+
77
+ public function getCurrentUploadChunksCount()
78
+ {
79
+ return $this->currentUploadChunksCount;
80
+ }
81
+
82
+ public function getTotalUploadChunksCount()
83
+ {
84
+ return $this->totalUploadChunksCount;
85
+ }
86
+
87
+ public function getUploadId()
88
+ {
89
+ return $this->uploadId;
90
+ }
91
+
92
+ public function getParts()
93
+ {
94
+ return $this->parts;
95
+ }
96
+
97
+ public function getChunkSize(){
98
+ return $this->chunkSize;
99
+ }
100
+
101
+ public function setChunkSize($chunkSize){
102
+ $this->chunkSize = $chunkSize;
103
+ }
104
+
105
+ public function getActiveDirectory()
106
+ {
107
+ return $this->activeDirectory;
108
+ }
109
+
110
+ public function init($stateJson)
111
+ {
112
+ $this->type = $stateJson['type'];
113
+ $this->parts = $stateJson['parts'];
114
+ $this->offset = $stateJson['offset'];
115
+ $this->action = $stateJson['action'];
116
+ $this->uploadId = $stateJson['uploadId'];
117
+ $this->actionId = $stateJson['actionId'];
118
+ $this->progress = $stateJson['progress'];
119
+ $this->backupId = $stateJson['backupId'];
120
+ $this->profileId = $stateJson['profileId'];
121
+ $this->inprogress = $stateJson['inprogress'];
122
+ $this->storageType = $stateJson['storageType'];
123
+ $this->actionStartTs = $stateJson['actionStartTs'];
124
+ $this->warningsFound = $stateJson['warningsFound'];
125
+ $this->backupFileName = $stateJson['backupFileName'];
126
+ $this->backupFilePath = $stateJson['backupFilePath'];
127
+ $this->activeDirectory = $stateJson['activeDirectory'];
128
+ $this->chunkSize = $stateJson['chunkSize'];
129
+ $this->pendingStorageUploads = $stateJson['pendingStorageUploads'];
130
+ $this->totalUploadChunksCount = $stateJson['totalUploadChunksCount'];
131
+ $this->currentUploadChunksCount = $stateJson['currentUploadChunksCount'];
132
+
133
+ return $this;
134
+ }
135
+
136
+ public function save()
137
+ {
138
+ file_put_contents(SG_BACKUP_DIRECTORY.SG_STATE_FILE_NAME, json_encode(array(
139
+ 'type' => $this->type,
140
+ 'parts' => $this->parts,
141
+ 'token' => $this->token,
142
+ 'offset' => $this->offset,
143
+ 'action' => $this->action,
144
+ 'uploadId' => $this->uploadId,
145
+ 'chunkSize' => $this->chunkSize,
146
+ 'actionId' => $this->actionId,
147
+ 'progress' => $this->progress,
148
+ 'backupId' => $this->backupId,
149
+ 'profileId' => $this->profileId,
150
+ 'inprogress' => $this->inprogress,
151
+ 'storageType' => $this->storageType,
152
+ 'actionStartTs' => $this->actionStartTs,
153
+ 'warningsFound' => $this->warningsFound,
154
+ 'backupFileName' => $this->backupFileName,
155
+ 'backupFilePath' => $this->backupFilePath,
156
+ 'activeDirectory' => $this->activeDirectory,
157
+ 'pendingStorageUploads' => $this->pendingStorageUploads,
158
+ 'totalUploadChunksCount' => $this->totalUploadChunksCount,
159
+ 'currentUploadChunksCount' => $this->currentUploadChunksCount
160
+ )));
161
+ }
162
+ }
public/ajax/modalImport.php CHANGED
@@ -7,6 +7,8 @@
7
  $ftp = SGConfig::get('SG_STORAGE_FTP_CONNECTED');
8
  $amazon = SGConfig::get('SG_AMAZON_KEY');
9
  $oneDrive = SGConfig::get('SG_ONE_DRIVE_REFRESH_TOKEN');
 
 
10
  $backupGuard = SGConfig::get('SG_BACKUPGUARD_UPLOAD_ACCESS_TOKEN');
11
  ?>
12
  <div class="modal-dialog">
@@ -58,6 +60,16 @@
58
  <td><span class="btn-xs sg-status-icon sg-status-35 active">&nbsp;</span></td>
59
  <td><?php echo 'One Drive' ?></td>
60
  </tr>
 
 
 
 
 
 
 
 
 
 
61
  <?php endif; ?>
62
  </tbody>
63
  </table>
7
  $ftp = SGConfig::get('SG_STORAGE_FTP_CONNECTED');
8
  $amazon = SGConfig::get('SG_AMAZON_KEY');
9
  $oneDrive = SGConfig::get('SG_ONE_DRIVE_REFRESH_TOKEN');
10
+ $pCloud = SGConfig::get('SG_STORAGE_P_CLOUD');
11
+ $box = SGConfig::get('SG_STORAGE_BOX');
12
  $backupGuard = SGConfig::get('SG_BACKUPGUARD_UPLOAD_ACCESS_TOKEN');
13
  ?>
14
  <div class="modal-dialog">
60
  <td><span class="btn-xs sg-status-icon sg-status-35 active">&nbsp;</span></td>
61
  <td><?php echo 'One Drive' ?></td>
62
  </tr>
63
+ <tr>
64
+ <td class="file-select-radio"><input name="storage-radio" type="radio" value="<?php echo SG_STORAGE_P_CLOUD?>" <?php echo empty($pCloud)?'disabled="disabled"':''?>></td>
65
+ <td><span class="btn-xs sg-status-icon sg-status-37 active">&nbsp;</span></td>
66
+ <td><?php echo 'pCloud' ?></td>
67
+ </tr>
68
+ <tr>
69
+ <td class="file-select-radio"><input name="storage-radio" type="radio" value="<?php echo SG_STORAGE_BOX?>" <?php echo empty($box)?'disabled="disabled"':''?>></td>
70
+ <td><span class="btn-xs sg-status-icon sg-status-38 active">&nbsp;</span></td>
71
+ <td><?php echo 'box.com' ?></td>
72
+ </tr>
73
  <?php endif; ?>
74
  </tbody>
75
  </table>
public/ajax/modalManualBackup.php CHANGED
@@ -1,149 +1,167 @@
1
- <?php
2
- require_once(dirname(__FILE__).'/../boot.php');
3
-
4
- $directories = SG_BACKUP_FILE_PATHS;
5
- $directories = explode(',', $directories);
6
- $dropbox = SGConfig::get('SG_DROPBOX_ACCESS_TOKEN');
7
- $gdrive = SGConfig::get('SG_GOOGLE_DRIVE_REFRESH_TOKEN');
8
- $ftp = SGConfig::get('SG_STORAGE_FTP_CONNECTED');
9
- $amazon = SGConfig::get('SG_AMAZON_KEY');
10
- $oneDrive = SGConfig::get('SG_ONE_DRIVE_REFRESH_TOKEN');
11
- $backupGuard = SGConfig::get('SG_BACKUPGUARD_UPLOAD_ACCESS_TOKEN');
12
-
13
- $backupType = (int)@$_GET['backupType'];
14
- $infoIconHtml = '<span class="dashicons dashicons-editor-help sgbg-info-icon"></span>';
15
- ?>
16
- <div class="modal-dialog">
17
- <div class="modal-content">
18
- <div class="modal-header">
19
- <div id="sg-modal-manual-backup-header">
20
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
21
- <h4 class="modal-title"><?php ($backupType == SG_BACKUP_METHOD_MIGRATE)?_backupGuardT("Prepare migration package"):_backupGuardT("Manual Backup") ?></h4>
22
- </div>
23
- </div>
24
- <form class="form-horizontal" method="post" id="manualBackup">
25
- <div class="modal-body sg-modal-body">
26
- <!-- Multiple Radios -->
27
- <div class="form-group">
28
- <div class="col-md-12">
29
- <input type="text" name="sg-custom-backup-name" id="sg-custom-backup-name" class="sg-backup-input" placeholder="Custom backup name (optional)">
30
- </div>
31
- <div class="col-md-12">
32
- <div class="radio">
33
- <label for="full-backup-radio">
34
- <input type="radio" name="backupType" id="full-backup-radio" value="1" checked="checked">
35
- <?php _backupGuardT('Full backup'); ?>
36
- </label>
37
- </div>
38
- <div class="radio">
39
- <label for="custom-backup-radio">
40
- <input type="radio" name="backupType" id="custom-backup-radio" value="2">
41
- <?php _backupGuardT('Custom backup'); ?>
42
- </label>
43
- </div>
44
- <div class="col-md-12 sg-custom-backup">
45
- <?php backupGuardGetBackupTablesHTML(); ?>
46
- <div class="checkbox sg-no-padding-top">
47
- <label for="custom-backupfiles-chbx">
48
- <input type="checkbox" class="sg-custom-option" name="backupFiles" id="custom-backupfiles-chbx">
49
- <span class="sg-checkbox-label-text"><?php _backupGuardT('Backup files'); ?></span>
50
- </label>
51
- <!--Files-->
52
- <div class="col-md-12 sg-checkbox sg-custom-backup-files">
53
- <?php foreach ($directories as $directory): ?>
54
- <div class="checkbox">
55
- <label for="<?php echo 'sgbg'.$directory?>">
56
- <input type="checkbox" name="directory[]" id="<?php echo 'sgbg'.$directory;?>" value="<?php echo $directory;?>">
57
- <span class="sg-checkbox-label-text"><?php echo basename($directory);?></span>
58
- </label>
59
- </div>
60
- <?php endforeach;?>
61
- </div>
62
- </div>
63
- </div>
64
- <div class="clearfix"></div>
65
- <?php if(SGBoot::isFeatureAvailable('STORAGE')): ?>
66
- <!--Cloud-->
67
- <div class="checkbox sg-no-padding-top">
68
- <label for="custom-backupcloud-chbx">
69
- <input type="checkbox" name="backupCloud" id="custom-backupcloud-chbx">
70
- <span class="sg-checkbox-label-text"><?php _backupGuardT('Upload to cloud'); ?></span>
71
- </label>
72
- <!--Storages-->
73
- <div class="col-md-12 sg-checkbox sg-custom-backup-cloud">
74
- <?php if(SGBoot::isFeatureAvailable('BACKUP_GUARD') && SG_SHOW_BACKUPGUARD_CLOUD): ?>
75
- <div class="checkbox">
76
- <label for="cloud-backup-guard" <?php echo empty($backupGuard)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('BackupGuard is not active.',true).'"':''?>>
77
- <input type="checkbox" name="backupStorages[]" id="cloud-backup-guard" value="<?php echo SG_STORAGE_BACKUP_GUARD ?>" <?php echo empty($backupGuard)?'disabled="disabled"':''?>>
78
- <span class="sg-checkbox-label-text"><?php echo 'BackupGuard' ?></span>
79
- </label>
80
- </div>
81
- <?php endif; ?>
82
- <?php if(SGBoot::isFeatureAvailable('FTP')): ?>
83
- <div class="checkbox">
84
- <label for="cloud-ftp" <?php echo empty($ftp)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('FTP is not active.',true).'"':''?>>
85
- <input type="checkbox" name="backupStorages[]" id="cloud-ftp" value="<?php echo SG_STORAGE_FTP ?>" <?php echo empty($ftp)?'disabled="disabled"':''?>>
86
- <span class="sg-checkbox-label-text"><?php echo 'FTP' ?></span>
87
- </label>
88
- </div>
89
- <?php endif; ?>
90
- <?php if(SGBoot::isFeatureAvailable('DROPBOX')): ?>
91
- <div class="checkbox">
92
- <label for="cloud-dropbox" <?php echo empty($dropbox)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('Dropbox is not active.',true).'"':''?>>
93
- <input type="checkbox" name="backupStorages[]" id="cloud-dropbox" value="<?php echo SG_STORAGE_DROPBOX ?>"
94
- <?php echo empty($dropbox)?'disabled="disabled"':''?>>
95
- <span class="sg-checkbox-label-text"><?php echo 'Dropbox' ?></span>
96
- </label>
97
- </div>
98
- <?php endif; ?>
99
- <?php if(SGBoot::isFeatureAvailable('GOOGLE_DRIVE')): ?>
100
- <div class="checkbox">
101
- <label for="cloud-gdrive" <?php echo empty($gdrive)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('Google Drive is not active.',true).'"':''?>>
102
- <input type="checkbox" name="backupStorages[]" id="cloud-gdrive" value="<?php echo SG_STORAGE_GOOGLE_DRIVE?>"
103
- <?php echo empty($gdrive)?'disabled="disabled"':''?>>
104
- <span class="sg-checkbox-label-text"><?php echo 'Google Drive' ?></span>
105
- </label>
106
- </div>
107
- <?php endif; ?>
108
- <?php if(SGBoot::isFeatureAvailable('AMAZON')): ?>
109
- <div class="checkbox">
110
- <label for="cloud-amazon" <?php echo empty($amazon)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT((backupGuardIsAccountGold()? 'Amazon ':'').'S3 is not active.',true).'"':''?>>
111
- <input type="checkbox" name="backupStorages[]" id="cloud-amazon" value="<?php echo SG_STORAGE_AMAZON?>"
112
- <?php echo empty($amazon)?'disabled="disabled"':''?>>
113
- <span class="sg-checkbox-label-text"><?php echo (backupGuardIsAccountGold()? 'Amazon ':'').'S3' ?></span>
114
- </label>
115
- </div>
116
- <?php endif; ?>
117
- <?php if(SGBoot::isFeatureAvailable('ONE_DRIVE')): ?>
118
- <div class="checkbox">
119
- <label for="cloud-one-drive" <?php echo empty($oneDrive)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('One Drive is not active.', true).'"':''?>>
120
- <input type="checkbox" name="backupStorages[]" id="cloud-one-drive" value="<?php echo SG_STORAGE_ONE_DRIVE?>" <?php echo empty($oneDrive)?'disabled="disabled"':''?>>
121
- <span class="sg-checkbox-label-text"><?php echo 'One Drive' ?></span>
122
- </label>
123
- </div>
124
- <?php endif;?>
125
- </div>
126
- <div class="clearfix"></div>
127
- </div>
128
- <?php endif; ?>
129
- <!-- Background mode -->
130
- <?php if(SGBoot::isFeatureAvailable('BACKGROUND_MODE')): ?>
131
- <div class="checkbox">
132
- <label for="sg-background-chbx">
133
- <input type="checkbox" name="backgroundMode" id="sg-background-chbx">
134
- <span class="sg-checkbox-label-text"><?php _backupGuardT('Background mode'); ?></span><?php echo $infoIconHtml; ?>
135
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Enable background mode to avoid CPU overload')?></span>
136
- </label>
137
- </div>
138
- <?php endif; ?>
139
- </div>
140
- </div>
141
- </div>
142
- <div class="modal-footer">
143
- <input type="text" name="backup-type" value="<?php echo $backupType?>" hidden>
144
- <span class="modal-close-button" data-dismiss="modal">Close</span>
145
- <button type="button" onclick="sgBackup.manualBackup()" class="btn btn-success"><?php _backupGuardT('Backup')?></button>
146
- </div>
147
- </form>
148
- </div>
149
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once(dirname(__FILE__).'/../boot.php');
3
+
4
+ $directories = SG_BACKUP_FILE_PATHS;
5
+ $directories = explode(',', $directories);
6
+ $dropbox = SGConfig::get('SG_DROPBOX_ACCESS_TOKEN');
7
+ $gdrive = SGConfig::get('SG_GOOGLE_DRIVE_REFRESH_TOKEN');
8
+ $ftp = SGConfig::get('SG_STORAGE_FTP_CONNECTED');
9
+ $amazon = SGConfig::get('SG_AMAZON_KEY');
10
+ $oneDrive = SGConfig::get('SG_ONE_DRIVE_REFRESH_TOKEN');
11
+ $pCloud = SGConfig::get('SG_P_CLOUD_ACCESS_TOKEN');
12
+ $box = SGConfig::get('SG_BOX_REFRESH_TOKEN');
13
+ $backupGuard = SGConfig::get('SG_BACKUPGUARD_UPLOAD_ACCESS_TOKEN');
14
+
15
+ $backupType = (int)@$_GET['backupType'];
16
+ $infoIconHtml = '<span class="dashicons dashicons-editor-help sgbg-info-icon"></span>';
17
+ ?>
18
+ <div class="modal-dialog">
19
+ <div class="modal-content">
20
+ <div class="modal-header">
21
+ <div id="sg-modal-manual-backup-header">
22
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
23
+ <h4 class="modal-title"><?php ($backupType == SG_BACKUP_METHOD_MIGRATE)?_backupGuardT("Prepare migration package"):_backupGuardT("Manual Backup") ?></h4>
24
+ </div>
25
+ </div>
26
+ <form class="form-horizontal" method="post" id="manualBackup">
27
+ <div class="modal-body sg-modal-body">
28
+ <!-- Multiple Radios -->
29
+ <div class="form-group">
30
+ <div class="col-md-12">
31
+ <input type="text" name="sg-custom-backup-name" id="sg-custom-backup-name" class="sg-backup-input" placeholder="Custom backup name (optional)">
32
+ </div>
33
+ <div class="col-md-12">
34
+ <div class="radio">
35
+ <label for="full-backup-radio">
36
+ <input type="radio" name="backupType" id="full-backup-radio" value="1" checked="checked">
37
+ <?php _backupGuardT('Full backup'); ?>
38
+ </label>
39
+ </div>
40
+ <div class="radio">
41
+ <label for="custom-backup-radio">
42
+ <input type="radio" name="backupType" id="custom-backup-radio" value="2">
43
+ <?php _backupGuardT('Custom backup'); ?>
44
+ </label>
45
+ </div>
46
+ <div class="col-md-12 sg-custom-backup">
47
+ <?php backupGuardGetBackupTablesHTML(); ?>
48
+ <div class="checkbox sg-no-padding-top">
49
+ <label for="custom-backupfiles-chbx">
50
+ <input type="checkbox" class="sg-custom-option" name="backupFiles" id="custom-backupfiles-chbx">
51
+ <span class="sg-checkbox-label-text"><?php _backupGuardT('Backup files'); ?></span>
52
+ </label>
53
+ <!--Files-->
54
+ <div class="col-md-12 sg-checkbox sg-custom-backup-files">
55
+ <?php foreach ($directories as $directory): ?>
56
+ <div class="checkbox">
57
+ <label for="<?php echo 'sgbg'.$directory?>">
58
+ <input type="checkbox" name="directory[]" id="<?php echo 'sgbg'.$directory;?>" value="<?php echo $directory;?>">
59
+ <span class="sg-checkbox-label-text"><?php echo basename($directory);?></span>
60
+ </label>
61
+ </div>
62
+ <?php endforeach;?>
63
+ </div>
64
+ </div>
65
+ </div>
66
+ <div class="clearfix"></div>
67
+ <?php if(SGBoot::isFeatureAvailable('STORAGE')): ?>
68
+ <!--Cloud-->
69
+ <div class="checkbox sg-no-padding-top">
70
+ <label for="custom-backupcloud-chbx">
71
+ <input type="checkbox" name="backupCloud" id="custom-backupcloud-chbx">
72
+ <span class="sg-checkbox-label-text"><?php _backupGuardT('Upload to cloud'); ?></span>
73
+ </label>
74
+ <!--Storages-->
75
+ <div class="col-md-12 sg-checkbox sg-custom-backup-cloud">
76
+ <?php if(SGBoot::isFeatureAvailable('BACKUP_GUARD') && SG_SHOW_BACKUPGUARD_CLOUD): ?>
77
+ <div class="checkbox">
78
+ <label for="cloud-backup-guard" <?php echo empty($backupGuard)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('BackupGuard is not active.',true).'"':''?>>
79
+ <input type="checkbox" name="backupStorages[]" id="cloud-backup-guard" value="<?php echo SG_STORAGE_BACKUP_GUARD ?>" <?php echo empty($backupGuard)?'disabled="disabled"':''?>>
80
+ <span class="sg-checkbox-label-text"><?php echo 'BackupGuard' ?></span>
81
+ </label>
82
+ </div>
83
+ <?php endif; ?>
84
+ <?php if(SGBoot::isFeatureAvailable('FTP')): ?>
85
+ <div class="checkbox">
86
+ <label for="cloud-ftp" <?php echo empty($ftp)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('FTP is not active.',true).'"':''?>>
87
+ <input type="checkbox" name="backupStorages[]" id="cloud-ftp" value="<?php echo SG_STORAGE_FTP ?>" <?php echo empty($ftp)?'disabled="disabled"':''?>>
88
+ <span class="sg-checkbox-label-text"><?php echo 'FTP' ?></span>
89
+ </label>
90
+ </div>
91
+ <?php endif; ?>
92
+ <?php if(SGBoot::isFeatureAvailable('DROPBOX')): ?>
93
+ <div class="checkbox">
94
+ <label for="cloud-dropbox" <?php echo empty($dropbox)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('Dropbox is not active.',true).'"':''?>>
95
+ <input type="checkbox" name="backupStorages[]" id="cloud-dropbox" value="<?php echo SG_STORAGE_DROPBOX ?>"
96
+ <?php echo empty($dropbox)?'disabled="disabled"':''?>>
97
+ <span class="sg-checkbox-label-text"><?php echo 'Dropbox' ?></span>
98
+ </label>
99
+ </div>
100
+ <?php endif; ?>
101
+ <?php if(SGBoot::isFeatureAvailable('GOOGLE_DRIVE')): ?>
102
+ <div class="checkbox">
103
+ <label for="cloud-gdrive" <?php echo empty($gdrive)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('Google Drive is not active.',true).'"':''?>>
104
+ <input type="checkbox" name="backupStorages[]" id="cloud-gdrive" value="<?php echo SG_STORAGE_GOOGLE_DRIVE?>"
105
+ <?php echo empty($gdrive)?'disabled="disabled"':''?>>
106
+ <span class="sg-checkbox-label-text"><?php echo 'Google Drive' ?></span>
107
+ </label>
108
+ </div>
109
+ <?php endif; ?>
110
+ <?php if(SGBoot::isFeatureAvailable('AMAZON')): ?>
111
+ <div class="checkbox">
112
+ <label for="cloud-amazon" <?php echo empty($amazon)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT((backupGuardIsAccountGold()? 'Amazon ':'').'S3 is not active.',true).'"':''?>>
113
+ <input type="checkbox" name="backupStorages[]" id="cloud-amazon" value="<?php echo SG_STORAGE_AMAZON?>"
114
+ <?php echo empty($amazon)?'disabled="disabled"':''?>>
115
+ <span class="sg-checkbox-label-text"><?php echo (backupGuardIsAccountGold()? 'Amazon ':'').'S3' ?></span>
116
+ </label>
117
+ </div>
118
+ <?php endif; ?>
119
+ <?php if(SGBoot::isFeatureAvailable('ONE_DRIVE')): ?>
120
+ <div class="checkbox">
121
+ <label for="cloud-one-drive" <?php echo empty($oneDrive)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('One Drive is not active.', true).'"':''?>>
122
+ <input type="checkbox" name="backupStorages[]" id="cloud-one-drive" value="<?php echo SG_STORAGE_ONE_DRIVE?>" <?php echo empty($oneDrive)?'disabled="disabled"':''?>>
123
+ <span class="sg-checkbox-label-text"><?php echo 'One Drive' ?></span>
124
+ </label>
125
+ </div>
126
+ <?php endif;?>
127
+ <?php if(SGBoot::isFeatureAvailable('P_CLOUD')): ?>
128
+ <div class="checkbox">
129
+ <label for="cloud-p-cloud" <?php echo empty($pCloud)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('pCloud is not active.', true).'"':''?>>
130
+ <input type="checkbox" name="backupStorages[]" id="cloud-p-cloud" value="<?php echo SG_STORAGE_P_CLOUD?>" <?php echo empty($pCloud)?'disabled="disabled"':''?>>
131
+ <span class="sg-checkbox-label-text"><?php echo 'pCloud' ?></span>
132
+ </label>
133
+ </div>
134
+ <?php endif;?>
135
+ <?php if(SGBoot::isFeatureAvailable('BOX')): ?>
136
+ <div class="checkbox">
137
+ <label for="cloud-box" <?php echo empty($box)?'data-toggle="tooltip" data-placement="right" title="'._backupGuardT('box.com is not active.', true).'"':''?>>
138
+ <input type="checkbox" name="backupStorages[]" id="cloud-box" value="<?php echo SG_STORAGE_BOX?>" <?php echo empty($box)?'disabled="disabled"':''?>>
139
+ <span class="sg-checkbox-label-text"><?php echo 'box.com' ?></span>
140
+ </label>
141
+ </div>
142
+ <?php endif;?>
143
+ </div>
144
+ <div class="clearfix"></div>
145
+ </div>
146
+ <?php endif; ?>
147
+ <!-- Background mode -->
148
+ <?php if(SGBoot::isFeatureAvailable('BACKGROUND_MODE')): ?>
149
+ <div class="checkbox">
150
+ <label for="sg-background-chbx">
151
+ <input type="checkbox" name="backgroundMode" id="sg-background-chbx">
152
+ <span class="sg-checkbox-label-text"><?php _backupGuardT('Background mode'); ?></span><?php echo $infoIconHtml; ?>
153
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Enable background mode to avoid CPU overload')?></span>
154
+ </label>
155
+ </div>
156
+ <?php endif; ?>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ <div class="modal-footer">
161
+ <input type="text" name="backup-type" value="<?php echo $backupType?>" hidden>
162
+ <span class="modal-close-button" data-dismiss="modal">Close</span>
163
+ <button type="button" onclick="sgBackup.manualBackup()" class="btn btn-success"><?php _backupGuardT('Backup')?></button>
164
+ </div>
165
+ </form>
166
+ </div>
167
+ </div>
public/ajax/settings.php CHANGED
@@ -1,157 +1,143 @@
1
- <?php
2
- require_once(dirname(__FILE__).'/../boot.php');
3
- $error = array();
4
- $success = array('success'=>1);
5
-
6
- if (backupGuardIsAjax() && isset($_POST['cancel'])) {
7
- SGConfig::set('SG_NOTIFICATIONS_ENABLED', '0');
8
- SGConfig::set('SG_NOTIFICATIONS_EMAIL_ADDRESS', '');
9
-
10
- die(json_encode($success));
11
- }
12
-
13
- if (backupGuardIsAjax() && count($_POST)) {
14
- $_POST = backupGuardRemoveSlashes($_POST);
15
- $_POST = backupGuardSanitizeTextField($_POST);
16
-
17
- $amountOfBackupsToKeep = (int)@$_POST['amount-of-backups-to-keep'];
18
- if ($amountOfBackupsToKeep <= 0) {
19
- $amountOfBackupsToKeep = SG_NUMBER_OF_BACKUPS_TO_KEEP;
20
- }
21
- SGConfig::set('SG_AMOUNT_OF_BACKUPS_TO_KEEP', $amountOfBackupsToKeep);
22
-
23
- SGConfig::set('SG_NOTIFICATIONS_ENABLED', '0');
24
- $emails = '';
25
- if (isset($_POST['sgIsEmailNotification'])) {
26
- $emails = @$_POST['sgUserEmail'];
27
- $emailsArray = explode(',', $emails);
28
-
29
- if (empty($emails)) {
30
- array_push($error, _backupGuardT('Email is required.', true));
31
- }
32
-
33
- foreach ($emailsArray as $email) {
34
- $email = trim($email);
35
- if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
36
- array_push($error, _backupGuardT('Invalid email address.', true));
37
- }
38
- }
39
-
40
- SGConfig::set('SG_NOTIFICATIONS_ENABLED', '1');
41
- }
42
- $ajaxInterval = (int)$_POST['ajaxInterval'];
43
-
44
- if (count($error)) {
45
- die(json_decode($error));
46
- }
47
-
48
- if (isset($_POST['sg-hide-ads'])) {
49
- SGConfig::set('SG_DISABLE_ADS', '1');
50
- }
51
- else {
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
- }
65
- else {
66
- SGConfig::set('SG_BACKGROUND_RELOAD_METHOD', SG_RELOAD_METHOD_CURL);
67
- }
68
-
69
- if (isset($_POST['delete-backup-after-upload'])) {
70
- SGConfig::set('SG_DELETE_BACKUP_AFTER_UPLOAD', '1');
71
- }
72
- else {
73
- SGConfig::set('SG_DELETE_BACKUP_AFTER_UPLOAD', '0');
74
- }
75
-
76
- if (isset($_POST['delete-backup-from-cloud'])) {
77
- SGConfig::set('SG_DELETE_BACKUP_FROM_CLOUD', '1');
78
- }
79
- else {
80
- SGConfig::set('SG_DELETE_BACKUP_FROM_CLOUD', '0');
81
- }
82
-
83
- if (isset($_POST['alert-before-update'])) {
84
- SGConfig::set('SG_ALERT_BEFORE_UPDATE', '1');
85
- }
86
- else {
87
- SGConfig::set('SG_ALERT_BEFORE_UPDATE', '0');
88
- }
89
-
90
- if (isset($_POST['show-statistics-widget'])) {
91
- SGConfig::set('SG_SHOW_STATISTICS_WIDGET', '1');
92
-
93
- }
94
- else {
95
- SGConfig::set('SG_SHOW_STATISTICS_WIDGET', '0');
96
- }
97
-
98
- if (isset($_POST['ftp-passive-mode'])) {
99
- SGConfig::set('SG_FTP_PASSIVE_MODE', '1');
100
- }
101
- else {
102
- SGConfig::set('SG_FTP_PASSIVE_MODE', '0');
103
- }
104
-
105
- if (isset($_POST['sg-number-of-rows-to-backup'])) {
106
- SGConfig::set('SG_BACKUP_DATABASE_INSERT_LIMIT', (int)$_POST['sg-number-of-rows-to-backup']);
107
- }
108
- else {
109
- SGConfig::set('SG_BACKUP_DATABASE_INSERT_LIMIT', SG_BACKUP_DATABASE_INSERT_LIMIT);
110
- }
111
-
112
- $backupFileName = 'sg_backup_';
113
- if (isset($_POST['backup-file-name'])) {
114
- $backupFileName = $_POST['backup-file-name'];
115
- }
116
-
117
- $isReloadingsEnabled = 0;
118
- if (isset($_POST['backup-with-reloadings'])) {
119
- $isReloadingsEnabled = 1;
120
- }
121
-
122
- if (isset($_POST['sg-paths-to-exclude'])) {
123
- SGConfig::set('SG_PATHS_TO_EXCLUDE', $_POST['sg-paths-to-exclude']);
124
- }
125
- else {
126
- SGConfig::set('SG_PATHS_TO_EXCLUDE', '');
127
- }
128
-
129
- if (isset($_POST['sg-tables-to-exclude'])) {
130
- SGConfig::set('SG_TABLES_TO_EXCLUDE', $_POST['sg-tables-to-exclude']);
131
- }
132
- else {
133
- SGConfig::set('SG_TABLES_TO_EXCLUDE', '');
134
- }
135
-
136
- if (isset($_POST['sg-upload-cloud-chunk-size'])) {
137
- SGConfig::set('SG_BACKUP_CLOUD_UPLOAD_CHUNK_SIZE', $_POST['sg-upload-cloud-chunk-size']);
138
- }
139
- else {
140
- SGConfig::set('SG_BACKUP_CLOUD_UPLOAD_CHUNK_SIZE', '');
141
- }
142
-
143
- SGConfig::set('SG_BACKUP_WITH_RELOADINGS', $isReloadingsEnabled);
144
- SGConfig::set('SG_BACKUP_FILE_NAME_PREFIX', $backupFileName);
145
- SGConfig::set('SG_AJAX_REQUEST_FREQUENCY', $ajaxInterval);
146
- SGConfig::set('SG_NOTIFICATIONS_EMAIL_ADDRESS', $emails);
147
- die(json_encode($success));
148
- }
149
-
150
- if (backupGuardIsAjax() && $_SERVER['REQUEST_METHOD'] === 'GET') {
151
- if ($_GET["type"] == "updateSetting") {
152
- //disable alert-before-update from updates page
153
- if (isset($_GET["alert-before-update"])) {
154
- SGConfig::set('SG_ALERT_BEFORE_UPDATE', $_GET["alert-before-update"]);
155
- }
156
- }
157
- }
1
+ <?php
2
+
3
+ require_once dirname(__FILE__) . '/../boot.php';
4
+ $error = array();
5
+ $success = array('success' => 1);
6
+
7
+ if (backupGuardIsAjax() && isset($_POST['cancel'])) {
8
+ SGConfig::set('SG_NOTIFICATIONS_ENABLED', '0');
9
+ SGConfig::set('SG_NOTIFICATIONS_EMAIL_ADDRESS', '');
10
+
11
+ die(json_encode($success));
12
+ }
13
+
14
+ if (backupGuardIsAjax() && count($_POST)) {
15
+ $_POST = backupGuardRemoveSlashes($_POST);
16
+ $_POST = backupGuardSanitizeTextField($_POST);
17
+
18
+ $amountOfBackupsToKeep = (int) @$_POST['amount-of-backups-to-keep'];
19
+ if ($amountOfBackupsToKeep <= 0) {
20
+ $amountOfBackupsToKeep = SG_NUMBER_OF_BACKUPS_TO_KEEP;
21
+ }
22
+ SGConfig::set('SG_AMOUNT_OF_BACKUPS_TO_KEEP', $amountOfBackupsToKeep);
23
+
24
+ SGConfig::set('SG_NOTIFICATIONS_ENABLED', '0');
25
+ $emails = '';
26
+ if (isset($_POST['sgIsEmailNotification'])) {
27
+ $emails = @$_POST['sgUserEmail'];
28
+ $emailsArray = explode(',', $emails);
29
+
30
+ if (empty($emails)) {
31
+ array_push($error, _backupGuardT('Email is required.', true));
32
+ }
33
+
34
+ foreach ($emailsArray as $email) {
35
+ $email = trim($email);
36
+ if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
37
+ array_push($error, _backupGuardT('Invalid email address.', true));
38
+ }
39
+ }
40
+
41
+ SGConfig::set('SG_NOTIFICATIONS_ENABLED', '1');
42
+ }
43
+ $ajaxInterval = (int) $_POST['ajaxInterval'];
44
+
45
+ if (count($error)) {
46
+ die(json_decode($error));
47
+ }
48
+
49
+ if (isset($_POST['sg-hide-ads'])) {
50
+ SGConfig::set('SG_DISABLE_ADS', '1');
51
+ } else {
52
+ SGConfig::set('SG_DISABLE_ADS', '0');
53
+ }
54
+
55
+ if (isset($_POST['sg-download-mode'])) {
56
+ SGConfig::set('SG_DOWNLOAD_MODE', (int) $_POST['sg-download-mode']);
57
+ }
58
+
59
+ if (isset($_POST['sg-background-reload-method'])) {
60
+ SGConfig::set('SG_BACKGROUND_RELOAD_METHOD', (int) $_POST['sg-background-reload-method']);
61
+ } else {
62
+ SGConfig::set('SG_BACKGROUND_RELOAD_METHOD', SG_RELOAD_METHOD_CURL);
63
+ }
64
+
65
+ if (isset($_POST['delete-backup-after-upload'])) {
66
+ SGConfig::set('SG_DELETE_BACKUP_AFTER_UPLOAD', '1');
67
+ } else {
68
+ SGConfig::set('SG_DELETE_BACKUP_AFTER_UPLOAD', '0');
69
+ }
70
+
71
+ if (isset($_POST['delete-backup-from-cloud'])) {
72
+ SGConfig::set('SG_DELETE_BACKUP_FROM_CLOUD', '1');
73
+ } else {
74
+ SGConfig::set('SG_DELETE_BACKUP_FROM_CLOUD', '0');
75
+ }
76
+
77
+ if (isset($_POST['alert-before-update'])) {
78
+ SGConfig::set('SG_ALERT_BEFORE_UPDATE', '1');
79
+ } else {
80
+ SGConfig::set('SG_ALERT_BEFORE_UPDATE', '0');
81
+ }
82
+
83
+ if (isset($_POST['show-statistics-widget'])) {
84
+ SGConfig::set('SG_SHOW_STATISTICS_WIDGET', '1');
85
+ } else {
86
+ SGConfig::set('SG_SHOW_STATISTICS_WIDGET', '0');
87
+ }
88
+
89
+ if (isset($_POST['ftp-passive-mode'])) {
90
+ SGConfig::set('SG_FTP_PASSIVE_MODE', '1');
91
+ } else {
92
+ SGConfig::set('SG_FTP_PASSIVE_MODE', '0');
93
+ }
94
+
95
+ if (isset($_POST['sg-number-of-rows-to-backup'])) {
96
+ SGConfig::set('SG_BACKUP_DATABASE_INSERT_LIMIT', (int) $_POST['sg-number-of-rows-to-backup']);
97
+ } else {
98
+ SGConfig::set('SG_BACKUP_DATABASE_INSERT_LIMIT', SG_BACKUP_DATABASE_INSERT_LIMIT);
99
+ }
100
+
101
+ $backupFileName = 'sg_backup_';
102
+ if (isset($_POST['backup-file-name'])) {
103
+ $backupFileName = $_POST['backup-file-name'];
104
+ }
105
+
106
+ $isReloadingsEnabled = 0;
107
+ if (isset($_POST['backup-with-reloadings'])) {
108
+ $isReloadingsEnabled = 1;
109
+ }
110
+
111
+ if (isset($_POST['sg-paths-to-exclude'])) {
112
+ SGConfig::set('SG_PATHS_TO_EXCLUDE', $_POST['sg-paths-to-exclude']);
113
+ } else {
114
+ SGConfig::set('SG_PATHS_TO_EXCLUDE', '');
115
+ }
116
+
117
+ if (isset($_POST['sg-tables-to-exclude'])) {
118
+ SGConfig::set('SG_TABLES_TO_EXCLUDE', $_POST['sg-tables-to-exclude']);
119
+ } else {
120
+ SGConfig::set('SG_TABLES_TO_EXCLUDE', '');
121
+ }
122
+
123
+ if (isset($_POST['sg-upload-cloud-chunk-size'])) {
124
+ SGConfig::set('SG_BACKUP_CLOUD_UPLOAD_CHUNK_SIZE', $_POST['sg-upload-cloud-chunk-size']);
125
+ } else {
126
+ SGConfig::set('SG_BACKUP_CLOUD_UPLOAD_CHUNK_SIZE', '');
127
+ }
128
+
129
+ SGConfig::set('SG_BACKUP_WITH_RELOADINGS', $isReloadingsEnabled);
130
+ SGConfig::set('SG_BACKUP_FILE_NAME_PREFIX', $backupFileName);
131
+ SGConfig::set('SG_AJAX_REQUEST_FREQUENCY', $ajaxInterval);
132
+ SGConfig::set('SG_NOTIFICATIONS_EMAIL_ADDRESS', $emails);
133
+ die(json_encode($success));
134
+ }
135
+
136
+ if (backupGuardIsAjax() && $_SERVER['REQUEST_METHOD'] === 'GET') {
137
+ if ($_GET["type"] == "updateSetting") {
138
+ //disable alert-before-update from updates page
139
+ if (isset($_GET["alert-before-update"])) {
140
+ SGConfig::set('SG_ALERT_BEFORE_UPDATE', $_GET["alert-before-update"]);
141
+ }
142
+ }
143
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
public/backups.php CHANGED
@@ -1,228 +1,289 @@
1
- <?php
2
- $backups = SGBackup::getAllBackups();
3
- $downloadUrl = admin_url('admin-post.php?action=backup_guard_downloadBackup&');
4
- $contentClassName = getBackupPageContentClassName('backups');
5
- $allowDataCollection = SGConfig::get('SG_BACKUP_SEND_USAGE_STATUS');
6
- ?>
7
- <div id="sg-backup-page-content-backups" class="sg-backup-page-content <?php echo $contentClassName; ?>">
8
- <?php if(SGConfig::get('SG_REVIEW_POPUP_STATE') == SG_SHOW_REVIEW_POPUP): ?>
9
- <!-- Review Box -->
10
- <script type="text/javascript">sgShowReview = 1;</script>
11
- <?php endif; ?>
12
- <?php if(!SGConfig::get('SG_HIDE_VERIFICATION_POPUP_STATE') && ($pluginCapabilities == BACKUP_GUARD_CAPABILITIES_FREE)): ?>
13
- <div id="bg-verify-user-info-container" class="bg-verify-user-info-container">
14
- <div class="bg-verify-user-info-overlay"></div>
15
- <div class="bg-verify-user-info-popup-tbl">
16
- <div class="bg-verify-user-info-popup-cel">
17
- <div class="bg-verify-user-info-popup-content">
18
- <a href="javascript:void(0)" class="bg-verify-user-info-cancel"><img src="<?php echo SG_IMAGE_URL.'popupClose.png' ?>" class="wp_fm_loader" /></a>
19
- <div class="bg-verify-user-info-popup-inner-content">
20
- <?php
21
- $displayName = 'Admin';
22
- if (function_exists('wp_get_current_user')) {
23
- $currentUser = wp_get_current_user();
24
- }
25
- if (!empty($currentUser)) {
26
- $displayName = $currentUser->display_name;
27
- $displayName = ucfirst($displayName);
28
- }
29
- ?>
30
- <h3 class="sgbg-welcome-title"><?php _backupGuardT('Hey');echo " ".$displayName;?>!</h3>
31
- <p class="bg-verify-user-info-desc">
32
- <?php _backupGuardT('Thank you for choosing Backup Guard - the greatest WordPress backup plugin.
33
- We recommend filling in the form below before starting to use the plugin.
34
- This will provide us with an opportunity to make the experience so much better for you!'); ?>
35
- </p>
36
- <form>
37
- <div class="bg-verify-user-info-form-group">
38
- <div class="bg-verify-user-info-form-twocol">
39
- <input name="bg-verify-user-info-name" id="bg-verify-user-info-name" class="regular-text sg-backup-input" type="text" value="" placeholder="First Name" />
40
- <span id="bg-verify-user-info-name-error" class="bg-verify-user-info-error-message"><?php _backupGuardT('Please Enter First Name.'); ?></span>
41
- </div>
42
- <div class="bg-verify-user-info-form-twocol">
43
- <input name="bg-verify-user-info-last-name" id="bg-verify-user-info-last-name" class="regular-text sg-backup-input" type="text" value="" placeholder="Last Name" />
44
- <span id="bg-verify-user-info-last-name-error" class="bg-verify-user-info-error-message"><?php _backupGuardT('Please Enter Last Name.'); ?></span>
45
- </div>
46
- </div>
47
- <div class="bg-verify-user-info-form-group">
48
- <div class="bg-verify-user-info-form-onecol">
49
- <input name="bg-verify-user-info-email" id="bg-verify-user-info-email" class="regular-text sg-backup-input" type="text" value="" placeholder="Email Address" />
50
- <span id="bg-verify-user-info-email-error" class="bg-verify-user-info-error-message"><?php _backupGuardT('Please Enter Valid Email Address.'); ?></span>
51
- </div>
52
- </div>
53
- <div class="bg-verify-user-info-form-group">
54
- <div class="bg-verify-user-info-form-onecol">
55
- <select name="bg-verify-user-prioraty" id="bg-verify-user-prioraty">
56
- <option value=""><?php _backupGuardT('What will you use the plugin for?') ?></option>
57
- <option value="local backup"><?php _backupGuardT('Local Backup') ?></option>
58
- <option value="cloud backup"><?php _backupGuardT('Cloud Backup') ?></option>
59
- <option value="migration"><?php _backupGuardT('Migration') ?></option>
60
- <option value="other"><?php _backupGuardT('Other Feature(s)') ?></option>
61
- </select>
62
- <span id="bg-verify-user-info-priority-error" class="bg-verify-user-info-error-message"><?php _backupGuardT('Please Select Your Priority.'); ?></span>
63
- </div>
64
- </div>
65
- <div class="bg-verify-user-info-form-group">
66
- <div class="bg-verify-user-info-form-onecol">
67
- <input name="bg-verify-user-priorati-custom" id="bg-verify-user-priorati-custom" class="regular-text sg-backup-input" type="text" placeholder="<?php _backupGuardT('Feature(s)') ?>" hidden>
68
- <span id="bg-verify-user-info-priority-custom-error" class="bg-verify-user-info-error-message"><?php _backupGuardT('Please Enter Your Priority.'); ?></span>
69
- </div>
70
- </div>
71
- <div class="bg-verify-user-info-control-buttons-container">
72
- <button class="bg-verify-user-info-verify-email button button-primary"><?php _backupGuardT("Subscribe") ?></button>
73
- </div>
74
- </form>
75
- <div class="row sgbg-send-usage-data-wrapper">
76
- <div class="sg-data-collection-label">
77
- <label class="sg-control-label"><?php _backupGuardT('Automatically send anonymous diagnostic and usage data')?></label>
78
- </div>
79
- <div class="backup-send-usage-data-status-wrapper">
80
- <label class="sg-switch-container">
81
- <input type="checkbox" name="backup-send-usage-data-status" class="sg-switch backup-send-usage-data-status" checked="checked">
82
- </label>
83
- </div>
84
- </div>
85
- </div>
86
- <div class="bg-initial-privacy-links-container">
87
- <a href="<?php echo BACKUP_GUARD_TERMS_OF_SERVICE_URL ?>" target="_blank"><?php _backupGuardT('Terms of Service'); ?></a>
88
- <a href="<?php echo BACKUP_GUARD_PRIVACY_POLICY_URL ?>" target="_blank"><?php _backupGuardT('Privacy Policy'); ?></a>
89
- </div>
90
- </div>
91
- </div>
92
- </div>
93
- </div>
94
-
95
- <?php endif; ?>
96
- <fieldset>
97
- <div><h1 class="sg-backup-page-title"><?php _backupGuardT('Backups')?></h1></div>
98
-
99
- <a href="javascript:void(0)" id="sg-manual-backup" class="pull-left btn btn-success sg-backup-action-buttons" data-toggle="modal" data-modal-name="manual-backup" data-remote="modalManualBackup" sg-data-backup-type="<?php echo SG_BACKUP_METHOD_STANDARD ?>">
100
- <span class="sg-backup-start sg-backup-buttons-content"></span>
101
- <span class="sg-backup-buttons-content sg-backup-buttons-text"><?php _backupGuardT('Backup')?></span>
102
- </a>
103
-
104
- <a href="javascript:void(0)" id="sg-backup-with-migration" class="pull-left btn btn-primary sg-backup-action-buttons" data-toggle="modal" data-modal-name="manual-backup" data-remote="modalManualBackup" sg-data-backup-type="<?php echo SG_BACKUP_METHOD_MIGRATE ?>"<?php echo SGBoot::isFeatureAvailable('BACKUP_WITH_MIGRATION')?'':'disabled' ?>>
105
- <span class="sg-backup-migrate sg-backup-buttons-content"></span>
106
- <span class="sg-backup-buttons-text sg-backup-buttons-content"><?php _backupGuardT('Migrate')?></span>
107
- </a>
108
- <?php if (!(defined('SG_USER_MODE') && SG_USER_MODE)): ?>
109
- <a href="javascript:void(0)" id="sg-import" class="btn btn-primary sg-margin-left-12 pull-left sg-backup-action-buttons" data-toggle="modal" data-modal-name="import" data-remote="modalImport">
110
- <span class="sg-backup-import sg-backup-buttons-content"></span>
111
- <span class="sg-backup-buttons-text sg-backup-buttons-content"><?php _backupGuardT('Import')?><span>
112
- </a>
113
- <?php endif; ?>
114
- <?php if ($pluginCapabilities == BACKUP_GUARD_CAPABILITIES_FREE): ?>
115
- <a href="<?php echo BACKUP_GUARD_WORDPRESS_SUPPORT_URL; ?>" target="_blank">
116
- <button type="button" id="sg-report-problem-button" class="btn btn btn-primary sg-margin-left-12 pull-right sg-backup-action-buttons sg-button-red pull-right">
117
- <span class="sg-backup-report"></span>
118
-
119
- <span class="sg-backup-buttons-text sg-backup-buttons-content"><?php _backupGuardT('Report issue')?></span>
120
- </button>
121
- </a>
122
- <?php endif; ?>
123
- <a id="sg-delete-multi-backups" class="pull-right btn btn-danger sg-margin-left-12 sg-backup-action-buttons">
124
- <span class="sg-backup-delete sg-backup-buttons-content"></span>
125
- <span class="sg-backup-buttons-text sg-backup-buttons-content"><?php _backupGuardT('Delete')?></span>
126
- </a>
127
- <div class="clearfix"></div><br/>
128
- <table class="table table-striped paginated sg-backup-table sg-backups">
129
- <thead>
130
- <tr>
131
- <th><input type="checkbox" id="sg-checkbox-select-all" autocomplete="off"></th>
132
- <th><?php _backupGuardT('Filename')?></th>
133
- <th><?php _backupGuardT('Size')?></th>
134
- <th><?php _backupGuardT('Date')?></th>
135
- <th><?php _backupGuardT('Status')?></th>
136
- <th><?php _backupGuardT('Actions')?></th>
137
- </tr>
138
- </thead>
139
- <tbody>
140
- <?php if(empty($backups)):?>
141
- <tr>
142
- <td colspan="6"><?php _backupGuardT('No backups found.')?></td>
143
- </tr>
144
- <?php endif;?>
145
- <?php foreach($backups as $backup): ?>
146
- <tr>
147
- <td><input type="checkbox" autocomplete="off" value="<?php echo $backup['name']?>" <?php echo $backup['active']?'disabled':''?>></td>
148
- <td><?php echo $backup['name'] ?></td>
149
- <td><?php echo !$backup['active']?$backup['size']:'' ?></td>
150
- <td><?php echo backupGuardConvertDateTimezone($backup['date']) ?></td>
151
- <td id="sg-status-tabe-data-<?php echo $backup['id']?>" <?php echo $backup['active']?'data-toggle="tooltip" data-placement="top" data-original-title="" data-container="#sg-wrapper"':''?>>
152
- <?php if($backup['active']):
153
- $filteredStatuses = backupGuardFilterStatusesByActionType($backup, $backup['options']);
154
- ?>
155
- <input type="hidden" class="sg-active-action-id" value="<?php echo $backup['id'];?>"/>
156
- <?php foreach ($filteredStatuses as $statusCode): ?>
157
- <span class="btn-xs sg-status-icon sg-status-<?php echo $statusCode; ?>">&nbsp;</span>
158
- <?php endforeach; ?>
159
- <div class="sg-progress progress">
160
- <div class="progress-bar"></div>
161
- </div>
162
- <?php else: ?>
163
- <?php if ($backup['status'] == SG_ACTION_STATUS_FINISHED_WARNINGS): ?>
164
- <span class="btn-xs text-warning" data-toggle="tooltip" data-placement="top" data-original-title="<?php if($backup['type']==SG_ACTION_TYPE_BACKUP): echo _backupGuardT('Warnings found during backup',true); elseif($backup['type']==SG_ACTION_TYPE_RESTORE): echo _backupGuardT('Warnings found during restore',true); else: echo _backupGuardT('Warnings found during upload',true); endif; ?>" data-container="#sg-wrapper"><?php _backupGuardT('Warning')?></span>
165
- <?php elseif ($backup['status'] == SG_ACTION_STATUS_ERROR): ?>
166
- <span class="btn-xs text-danger" data-toggle="tooltip" data-placement="top" data-original-title="<?php if($backup['type']==SG_ACTION_TYPE_BACKUP): echo _backupGuardT('Errors found during backup',true); elseif($backup['type']==SG_ACTION_TYPE_RESTORE): echo _backupGuardT('Errors found during restore',true); else: echo _backupGuardT('Errors found during upload',true);
167
- endif; ?>" data-container="#sg-wrapper"><?php _backupGuardT('Failed')?></span>
168
- <?php else: ?>
169
- <span class="btn-xs sg-text-success"><?php _backupGuardT('Success')?></span>
170
- <?php endif;?>
171
- <?php endif; ?>
172
- </td>
173
- <td class="sg-backup-actions-td">
174
- <?php if($backup['active']): ?>
175
- <?php if($backup['type'] != SG_ACTION_TYPE_RESTORE): ?>
176
- <a class="btn-xs sg-cancel-backup" sg-data-backup-id="<?php echo $backup['id']?>" href="javascript:void(0)" title="<?php _backupGuardT('Stop')?>">&nbsp;&nbsp;</a>
177
- <?php endif; ?>
178
- <?php else: ?>
179
- <a href="javascript:void(0)" data-sgbackup-name="<?php echo htmlspecialchars($backup['name']);?>" data-remote="deleteBackup" class="sg-remove-backup btn-xs" title="<?php _backupGuardT('Delete')?>">&nbsp;&nbsp;</a>
180
- <div class="btn-group">
181
- <a href="javascript:void(0)" class="sg-bg-download-button btn-xs" data-toggle="dropdown1" aria-expanded="false" title="<?php _backupGuardT('Download')?>">
182
-
183
- </a>
184
- <ul class="dropdown-menu">
185
- <?php if($backup['files']):?>
186
- <li>
187
- <a href="<?php echo $downloadUrl.'backupName='.htmlspecialchars(@$backup['name']).'&downloadType='.SG_BACKUP_DOWNLOAD_TYPE_SGBP ?>">
188
- <i class="glyphicon glyphicon-hdd" aria-hidden="true"></i> <?php _backupGuardT('Backup')?>
189
- </a>
190
- </li>
191
- <?php endif;?>
192
- <?php if($backup['backup_log']):?>
193
- <li>
194
- <a href="<?php echo $downloadUrl.'backupName='.htmlspecialchars(@$backup['name']).'&downloadType='.SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG ?>">
195
- <i class="glyphicon glyphicon-list-alt" aria-hidden="true"></i> <?php _backupGuardT('Backup log')?>
196
- </a>
197
- </li>
198
- <?php endif;?>
199
- <?php if($backup['restore_log']):?>
200
- <li>
201
- <a href="<?php echo $downloadUrl.'backupName='.@$backup['name'].'&downloadType='.SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG ?>">
202
- <i class="glyphicon glyphicon-th-list" aria-hidden="true"></i> <?php _backupGuardT('Restore log')?>
203
- </a>
204
- </li>
205
- <?php endif;?>
206
- </ul>
207
- </div>
208
- <?php
209
- $path = SG_BACKUP_DIRECTORY.$backup['name'].'/'.$backup['name'].'.sgbp';
210
- ?>
211
- <?php if(file_exists($path) && ($backup['status'] != SG_ACTION_STATUS_ERROR) && (filesize($path) > SG_BACKUP_VALID_ARCHIVE_SIZE)):?>
212
- <a href="javascript:void(0)" title="<?php _backupGuardT('Restore')?>" class="sg-restore-button btn-xs" data-toggle="modal" data-modal-name="manual-restore" data-remote="modalManualRestore" data-sgbp-params="<?php echo htmlspecialchars($backup['name']) ?>">
213
-
214
- </a>
215
- <?php endif;?>
216
- <?php endif; ?>
217
- </td>
218
- </tr>
219
- <?php endforeach; ?>
220
- </tbody>
221
- </table>
222
-
223
- <div class="text-right sg-backups">
224
- <ul class="pagination"></ul>
225
- </div>
226
- </fieldset>
227
- <div class="clearfix"></div>
228
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $backups = SGBackup::getAllBackups();
3
+ $downloadUrl = admin_url('admin-post.php?action=backup_guard_downloadBackup&');
4
+ $contentClassName = getBackupPageContentClassName('backups');
5
+ $allowDataCollection = SGConfig::get('SG_BACKUP_SEND_USAGE_STATUS');
6
+ ?>
7
+ <div id="sg-backup-page-content-backups" class="sg-backup-page-content <?php echo $contentClassName; ?>">
8
+ <?php if (SGConfig::get('SG_REVIEW_POPUP_STATE') == SG_SHOW_REVIEW_POPUP) : ?>
9
+ <!-- Review Box -->
10
+ <script type="text/javascript">sgShowReview = 1;</script>
11
+ <?php endif; ?>
12
+ <?php if (!SGConfig::get('SG_HIDE_VERIFICATION_POPUP_STATE') && ($pluginCapabilities == BACKUP_GUARD_CAPABILITIES_FREE)) : ?>
13
+ <div id="bg-verify-user-info-container" class="bg-verify-user-info-container">
14
+ <div class="bg-verify-user-info-overlay"></div>
15
+ <div class="bg-verify-user-info-popup-tbl">
16
+ <div class="bg-verify-user-info-popup-cel">
17
+ <div class="bg-verify-user-info-popup-content">
18
+ <a href="javascript:void(0)" class="bg-verify-user-info-cancel"><img
19
+ src="<?php echo SG_IMAGE_URL . 'popupClose.png' ?>" class="wp_fm_loader"/></a>
20
+ <div class="bg-verify-user-info-popup-inner-content">
21
+ <?php
22
+ $displayName = 'Admin';
23
+ if (function_exists('wp_get_current_user')) {
24
+ $currentUser = wp_get_current_user();
25
+ }
26
+ if (!empty($currentUser)) {
27
+ // phpcs:disable
28
+ $displayName = $currentUser->display_name;
29
+ // phpcs:enable
30
+ $displayName = ucfirst($displayName);
31
+ }
32
+ ?>
33
+ <h3 class="sgbg-welcome-title"><?php _backupGuardT('Hey');
34
+ echo " " . $displayName; ?>!</h3>
35
+ <p class="bg-verify-user-info-desc">
36
+ <?php _backupGuardT(
37
+ 'Thank you for choosing BackupGuard - the greatest WordPress backup plugin.
38
+ We recommend filling in the form below before starting to use the plugin.
39
+ This will provide us with an opportunity to make the experience so much better for you!'
40
+ ); ?>
41
+ </p>
42
+ <form>
43
+ <div class="bg-verify-user-info-form-group">
44
+ <div class="bg-verify-user-info-form-twocol">
45
+ <input name="bg-verify-user-info-name" id="bg-verify-user-info-name"
46
+ class="regular-text sg-backup-input" type="text" value=""
47
+ placeholder="First Name"/>
48
+ <span id="bg-verify-user-info-name-error"
49
+ class="bg-verify-user-info-error-message"><?php _backupGuardT('Please Enter First Name.'); ?></span>
50
+ </div>
51
+ <div class="bg-verify-user-info-form-twocol">
52
+ <input name="bg-verify-user-info-last-name" id="bg-verify-user-info-last-name"
53
+ class="regular-text sg-backup-input" type="text" value=""
54
+ placeholder="Last Name"/>
55
+ <span id="bg-verify-user-info-last-name-error"
56
+ class="bg-verify-user-info-error-message"><?php _backupGuardT('Please Enter Last Name.'); ?></span>
57
+ </div>
58
+ </div>
59
+ <div class="bg-verify-user-info-form-group">
60
+ <div class="bg-verify-user-info-form-onecol">
61
+ <input name="bg-verify-user-info-email" id="bg-verify-user-info-email"
62
+ class="regular-text sg-backup-input" type="text" value=""
63
+ placeholder="Email Address"/>
64
+ <span id="bg-verify-user-info-email-error"
65
+ class="bg-verify-user-info-error-message"><?php _backupGuardT('Please Enter Valid Email Address.'); ?></span>
66
+ </div>
67
+ </div>
68
+ <div class="bg-verify-user-info-form-group">
69
+ <div class="bg-verify-user-info-form-onecol">
70
+ <select name="bg-verify-user-prioraty" id="bg-verify-user-prioraty">
71
+ <option value=""><?php _backupGuardT('What will you use the plugin for?') ?></option>
72
+ <option value="local backup"><?php _backupGuardT('Local Backup') ?></option>
73
+ <option value="cloud backup"><?php _backupGuardT('Cloud Backup') ?></option>
74
+ <option value="migration"><?php _backupGuardT('Migration') ?></option>
75
+ <option value="other"><?php _backupGuardT('Other Feature(s)') ?></option>
76
+ </select>
77
+ <span id="bg-verify-user-info-priority-error"
78
+ class="bg-verify-user-info-error-message"><?php _backupGuardT('Please Select Your Priority.'); ?></span>
79
+ </div>
80
+ </div>
81
+ <div class="bg-verify-user-info-form-group">
82
+ <div class="bg-verify-user-info-form-onecol">
83
+ <input name="bg-verify-user-priorati-custom" id="bg-verify-user-priorati-custom"
84
+ class="regular-text sg-backup-input" type="text"
85
+ placeholder="<?php _backupGuardT('Feature(s)') ?>" hidden>
86
+ <span id="bg-verify-user-info-priority-custom-error"
87
+ class="bg-verify-user-info-error-message"><?php _backupGuardT('Please Enter Your Priority.'); ?></span>
88
+ </div>
89
+ </div>
90
+ <div class="bg-verify-user-info-control-buttons-container">
91
+ <button class="bg-verify-user-info-verify-email button button-primary"><?php _backupGuardT("Subscribe") ?></button>
92
+ </div>
93
+ </form>
94
+ <div class="row sgbg-send-usage-data-wrapper">
95
+ <div class="sg-data-collection-label">
96
+ <label class="sg-control-label"><?php _backupGuardT('Automatically send anonymous diagnostic and usage data') ?></label>
97
+ </div>
98
+ <div class="backup-send-usage-data-status-wrapper">
99
+ <label class="sg-switch-container">
100
+ <input type="checkbox" name="backup-send-usage-data-status"
101
+ class="sg-switch backup-send-usage-data-status" checked="checked">
102
+ </label>
103
+ </div>
104
+ </div>
105
+ </div>
106
+ <div class="bg-initial-privacy-links-container">
107
+ <a href="<?php echo BACKUP_GUARD_TERMS_OF_SERVICE_URL ?>"
108
+ target="_blank"><?php _backupGuardT('Terms of Service'); ?></a>
109
+ <a href="<?php echo BACKUP_GUARD_PRIVACY_POLICY_URL ?>"
110
+ target="_blank"><?php _backupGuardT('Privacy Policy'); ?></a>
111
+ </div>
112
+ </div>
113
+ </div>
114
+ </div>
115
+ </div>
116
+
117
+ <?php endif; ?>
118
+ <fieldset>
119
+ <div><h1 class="sg-backup-page-title"><?php _backupGuardT('Backups') ?></h1></div>
120
+
121
+ <a href="javascript:void(0)" id="sg-manual-backup" class="pull-left btn btn-success sg-backup-action-buttons"
122
+ data-toggle="modal" data-modal-name="manual-backup" data-remote="modalManualBackup"
123
+ sg-data-backup-type="<?php echo SG_BACKUP_METHOD_STANDARD ?>">
124
+ <span class="sg-backup-start sg-backup-buttons-content"></span>
125
+ <span class="sg-backup-buttons-content sg-backup-buttons-text"><?php _backupGuardT('Backup') ?></span>
126
+ </a>
127
+
128
+ <a href="javascript:void(0)" id="sg-backup-with-migration"
129
+ class="pull-left btn btn-primary sg-backup-action-buttons" data-toggle="modal"
130
+ data-modal-name="manual-backup" data-remote="modalManualBackup"
131
+ sg-data-backup-type="<?php echo SG_BACKUP_METHOD_MIGRATE ?>"<?php echo SGBoot::isFeatureAvailable('BACKUP_WITH_MIGRATION') ? '' : 'disabled' ?>>
132
+ <span class="sg-backup-migrate sg-backup-buttons-content"></span>
133
+ <span class="sg-backup-buttons-text sg-backup-buttons-content"><?php _backupGuardT('Migrate') ?></span>
134
+ </a>
135
+ <?php if (!(defined('SG_USER_MODE') && SG_USER_MODE)) : ?>
136
+ <a href="javascript:void(0)" id="sg-import"
137
+ class="btn btn-primary sg-margin-left-12 pull-left sg-backup-action-buttons" data-toggle="modal"
138
+ data-modal-name="import" data-remote="modalImport">
139
+ <span class="sg-backup-import sg-backup-buttons-content"></span>
140
+ <span class="sg-backup-buttons-text sg-backup-buttons-content"><?php _backupGuardT('Import') ?><span>
141
+ </a>
142
+ <?php endif; ?>
143
+ <?php if ($pluginCapabilities == BACKUP_GUARD_CAPABILITIES_FREE) : ?>
144
+ <a href="<?php echo BACKUP_GUARD_WORDPRESS_SUPPORT_URL; ?>" target="_blank">
145
+ <button type="button" id="sg-report-problem-button"
146
+ class="btn btn btn-primary sg-margin-left-12 pull-right sg-backup-action-buttons sg-button-red pull-right">
147
+ <span class="sg-backup-report"></span>
148
+
149
+ <span class="sg-backup-buttons-text sg-backup-buttons-content"><?php _backupGuardT('Report issue') ?></span>
150
+ </button>
151
+ </a>
152
+ <?php endif; ?>
153
+ <a id="sg-delete-multi-backups" class="pull-right btn btn-danger sg-margin-left-12 sg-backup-action-buttons">
154
+ <span class="sg-backup-delete sg-backup-buttons-content"></span>
155
+ <span class="sg-backup-buttons-text sg-backup-buttons-content"><?php _backupGuardT('Delete') ?></span>
156
+ </a>
157
+ <div class="clearfix"></div>
158
+ <br/>
159
+ <table class="table table-striped paginated sg-backup-table sg-backups">
160
+ <thead>
161
+ <tr>
162
+ <th><input type="checkbox" id="sg-checkbox-select-all" autocomplete="off"></th>
163
+ <th><?php _backupGuardT('Filename') ?></th>
164
+ <th><?php _backupGuardT('Size') ?></th>
165
+ <th><?php _backupGuardT('Date') ?></th>
166
+ <th><?php _backupGuardT('Status') ?></th>
167
+ <th><?php _backupGuardT('Actions') ?></th>
168
+ </tr>
169
+ </thead>
170
+ <tbody>
171
+ <?php if (empty($backups)) : ?>
172
+ <tr>
173
+ <td colspan="6"><?php _backupGuardT('No backups found.') ?></td>
174
+ </tr>
175
+ <?php endif; ?>
176
+ <?php foreach ($backups as $backup) : ?>
177
+ <tr>
178
+ <td><input type="checkbox" autocomplete="off"
179
+ value="<?php echo $backup['name'] ?>" <?php echo $backup['active'] ? 'disabled' : '' ?>>
180
+ </td>
181
+ <td><?php echo $backup['name'] ?></td>
182
+ <td><?php echo !$backup['active'] ? $backup['size'] : '' ?></td>
183
+ <td><?php echo backupGuardConvertDateTimezone($backup['date']) ?></td>
184
+ <td id="sg-status-tabe-data-<?php echo $backup['id'] ?>" <?php echo $backup['active'] ? 'data-toggle="tooltip" data-placement="top" data-original-title="" data-container="#sg-wrapper"' : '' ?>>
185
+ <?php if ($backup['active']) :
186
+ $filteredStatuses = backupGuardFilterStatusesByActionType($backup, $backup['options']);
187
+ ?>
188
+ <input type="hidden" class="sg-active-action-id" value="<?php echo $backup['id']; ?>"/>
189
+ <?php foreach ($filteredStatuses as $statusCode) : ?>
190
+ <span class="btn-xs sg-status-icon sg-status-<?php echo $statusCode; ?>">&nbsp;</span>
191
+ <?php endforeach; ?>
192
+ <div class="sg-progress progress">
193
+ <div class="progress-bar"></div>
194
+ </div>
195
+ <?php else : ?>
196
+ <?php
197
+ if ($backup['status'] == SG_ACTION_STATUS_FINISHED_WARNINGS) : ?>
198
+ <span class="btn-xs text-warning" data-toggle="tooltip" data-placement="top"
199
+ data-original-title="
200
+ <?php if ($backup['type'] == SG_ACTION_TYPE_BACKUP) :
201
+ echo _backupGuardT('Warnings found during backup', true);
202
+ elseif ($backup['type'] == SG_ACTION_TYPE_RESTORE) :
203
+ echo _backupGuardT('Warnings found during restore', true);
204
+ else :
205
+ echo _backupGuardT('Warnings found during upload', true);
206
+ endif; ?>
207
+ " data-container="#sg-wrapper"><?php _backupGuardT('Warning') ?></span>
208
+ <?php elseif ($backup['status'] == SG_ACTION_STATUS_ERROR) : ?>
209
+ <span class="btn-xs text-danger" data-toggle="tooltip" data-placement="top"
210
+ data-original-title="
211
+ <?php if ($backup['type'] == SG_ACTION_TYPE_BACKUP) :
212
+ echo _backupGuardT('Errors found during backup', true);
213
+ elseif ($backup['type'] == SG_ACTION_TYPE_RESTORE) :
214
+ echo _backupGuardT('Errors found during restore', true);
215
+ else :
216
+ echo _backupGuardT('Errors found during upload', true);
217
+ endif; ?>
218
+ " data-container="#sg-wrapper"><?php _backupGuardT('Failed') ?></span>
219
+ <?php else : ?>
220
+ <span class="btn-xs sg-text-success"><?php _backupGuardT('Success') ?></span>
221
+ <?php endif; ?>
222
+ <?php endif; ?>
223
+ </td>
224
+ <td class="sg-backup-actions-td">
225
+ <?php if ($backup['active']) : ?>
226
+ <?php if ($backup['type'] != SG_ACTION_TYPE_RESTORE) : ?>
227
+ <a class="btn-xs sg-cancel-backup" sg-data-backup-id="<?php echo $backup['id'] ?>"
228
+ href="javascript:void(0)" title="<?php _backupGuardT('Stop') ?>">&nbsp;&nbsp;</a>
229
+ <?php endif; ?>
230
+ <?php else : ?>
231
+ <a href="javascript:void(0)"
232
+ data-sgbackup-name="<?php echo htmlspecialchars($backup['name']); ?>"
233
+ data-remote="deleteBackup" class="sg-remove-backup btn-xs"
234
+ title="<?php _backupGuardT('Delete') ?>">&nbsp;&nbsp;</a>
235
+ <div class="btn-group">
236
+ <a href="javascript:void(0)" class="sg-bg-download-button btn-xs"
237
+ data-toggle="dropdown1" aria-expanded="false"
238
+ title="<?php _backupGuardT('Download') ?>">
239
+
240
+ </a>
241
+ <ul class="dropdown-menu">
242
+ <?php if ($backup['files']) : ?>
243
+ <li>
244
+ <a href="<?php echo $downloadUrl . 'backupName=' . htmlspecialchars(@$backup['name']) . '&downloadType=' . SG_BACKUP_DOWNLOAD_TYPE_SGBP ?>">
245
+ <i class="glyphicon glyphicon-hdd"
246
+ aria-hidden="true"></i> <?php _backupGuardT('Backup') ?>
247
+ </a>
248
+ </li>
249
+ <?php endif; ?>
250
+ <?php if ($backup['backup_log']) : ?>
251
+ <li>
252
+ <a href="<?php echo $downloadUrl . 'backupName=' . htmlspecialchars(@$backup['name']) . '&downloadType=' . SG_BACKUP_DOWNLOAD_TYPE_BACKUP_LOG ?>">
253
+ <i class="glyphicon glyphicon-list-alt"
254
+ aria-hidden="true"></i> <?php _backupGuardT('Backup log') ?>
255
+ </a>
256
+ </li>
257
+ <?php endif; ?>
258
+ <?php if ($backup['restore_log']) : ?>
259
+ <li>
260
+ <a href="<?php echo $downloadUrl . 'backupName=' . @$backup['name'] . '&downloadType=' . SG_BACKUP_DOWNLOAD_TYPE_RESTORE_LOG ?>">
261
+ <i class="glyphicon glyphicon-th-list"
262
+ aria-hidden="true"></i> <?php _backupGuardT('Restore log') ?>
263
+ </a>
264
+ </li>
265
+ <?php endif; ?>
266
+ </ul>
267
+ </div>
268
+ <?php
269
+ $path = SG_BACKUP_DIRECTORY . $backup['name'] . '/' . $backup['name'] . '.sgbp';
270
+ ?>
271
+ <?php if (file_exists($path) && ($backup['status'] != SG_ACTION_STATUS_ERROR) && (filesize($path) > SG_BACKUP_VALID_ARCHIVE_SIZE)) : ?>
272
+ <a href="javascript:void(0)" title="<?php _backupGuardT('Restore') ?>"
273
+ class="sg-restore-button btn-xs" data-toggle="modal" data-modal-name="manual-restore"
274
+ data-remote="modalManualRestore"
275
+ data-sgbp-params="<?php echo htmlspecialchars($backup['name']) ?>">
276
+ </a>
277
+ <?php endif; ?>
278
+ <?php endif; ?>
279
+ </td>
280
+ </tr>
281
+ <?php endforeach; ?>
282
+ </tbody>
283
+ </table>
284
+ <div class="text-right sg-backups">
285
+ <ul class="pagination"></ul>
286
+ </div>
287
+ </fieldset>
288
+ <div class="clearfix"></div>
289
+ </div>
public/cloud.php CHANGED
@@ -1,199 +1,250 @@
1
- <?php
2
- $dropbox = SGConfig::get('SG_DROPBOX_ACCESS_TOKEN');
3
- $gdrive = SGConfig::get('SG_GOOGLE_DRIVE_REFRESH_TOKEN');
4
- $ftp = SGConfig::get('SG_STORAGE_FTP_CONNECTED');
5
- $amazon = SGConfig::get('SG_STORAGE_AMAZON_CONNECTED');
6
- $oneDrive = SGConfig::get('SG_ONE_DRIVE_REFRESH_TOKEN');
7
-
8
- $ftpUsername = SGConfig::get('SG_FTP_CONNECTION_STRING');
9
- $gdriveUsername = SGConfig::get('SG_GOOGLE_DRIVE_CONNECTION_STRING');
10
- $dropboxUsername = SGConfig::get('SG_DROPBOX_CONNECTION_STRING');
11
- $amazonInfo = SGConfig::get('SG_AMAZON_BUCKET');
12
-
13
- $oneDriveInfo = SGConfig::get('SG_ONE_DRIVE_CONNECTION_STRING');
14
-
15
- $contentClassName = getBackupPageContentClassName('cloud');
16
-
17
-
18
- $backupGuardCloudAccount = SGConfig::get('SG_BACKUPGUARD_CLOUD_ACCOUNT')?unserialize(SGConfig::get('SG_BACKUPGUARD_CLOUD_ACCOUNT')):'';
19
- $backupGuardCloudAccountEmail = SGConfig::get('SG_BACKUPGUARD_CLOUD_ACCOUNT_EMAIL');
20
-
21
- $backupGuardConnectionString = "<span>". _backupGuardT('Connect now and get 1 GB storage space for FREE', true)."</span>";
22
-
23
- if (!empty($backupGuardCloudAccount)) {
24
- $usedSpace = $backupGuardCloudAccount['usedStorage'];
25
- $storage = $backupGuardCloudAccount['package']['storage'];
26
- $availableSpaceInpercents = $usedSpace*100/$storage;
27
-
28
- if ($availableSpaceInpercents < 25) {
29
- $usedSpaceTextColor = "green";
30
- }
31
- else if ((25 <= $availableSpaceInpercents) && ($availableSpaceInpercents < 50)) {
32
- $usedSpaceTextColor = "black";
33
- }
34
- else if ((50 <= $availableSpaceInpercents) && ($availableSpaceInpercents <= 75)) {
35
- $usedSpaceTextColor = "orange";
36
- }
37
- else if ($availableSpaceInpercents >= 75) {
38
- $usedSpaceTextColor = "red";
39
- }
40
-
41
- $backupGuardConnectionString = $backupGuardCloudAccountEmail.' | <span style="color: '.$usedSpaceTextColor.';">'.convertToReadableSize($usedSpace*BACKUP_GUARD_ONE_MB).' / '.convertToReadableSize($storage*BACKUP_GUARD_ONE_MB).'</span> | <a target="_blank" href="'.BACKUP_GUARD_CLOUD_UPGRADE_URL.'">Upgrade for more space</a>';
42
- }
43
- ?>
44
- <div id="sg-backup-page-content-cloud" class="sg-backup-page-content <?php echo $contentClassName; ?>">
45
- <div class="row sg-cloud-container">
46
- <div class="col-md-12">
47
- <form class="form-horizontal">
48
- <fieldset>
49
- <div><h1 class="sg-backup-page-title"><?php _backupGuardT('Cloud settings')?></h1></div>
50
- <?php if (SGBoot::isFeatureAvailable('SUBDIRECTORIES')): ?>
51
- <div class="form-group form-inline">
52
- <label class="col-md-5 sg-control-label">
53
- <?php _backupGuardT('Destination folder')?>
54
- </label>
55
- <div class="col-md-3">
56
- <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'))?>">
57
- <button type="button" id="sg-save-cloud-folder" class="btn btn-success pull-right"><?php _backupGuardT('Save');?></button>
58
- </div>
59
- </div>
60
- <?php endif; ?>
61
- <!-- BackupGuard -->
62
- <?php if (SGBoot::isFeatureAvailable('BACKUP_GUARD') && SG_SHOW_BACKUPGUARD_CLOUD): ?>
63
- <div class="form-group">
64
- <label class="col-md-5 sg-control-label sg-user-info">
65
- <div class="sg-cloud-icon-wrapper">
66
- <span class="sg-cloud-icon sg-cloud-backup-guard"></span>
67
- </div>
68
- <div class="sg-cloud-label-with-info">
69
- <span><?php echo 'BackupGuard' ?></span>
70
- <span class="sg-backupguard-user sg-helper-block">
71
- <?php echo $backupGuardConnectionString ?>
72
- </span>
73
- </div>
74
- </label>
75
- <div class="col-md-3">
76
- <label class="sg-switch-container">
77
- <input type="checkbox" data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="BACKUP_GUARD" data-remote="bgLogin" class="sg-switch" <?php echo !empty($backupGuardCloudAccount)?'checked="checked"':''?>>
78
- <a id="backup-guard-details" href="javascript:void(0)" class="hide" data-toggle="modal" data-modal-name="backup-guard-details" data-remote="modalBackupGuardDetails"></a>
79
- </label>
80
- </div>
81
- </div>
82
- <?php endif; ?>
83
- <!-- Dropbox -->
84
- <?php if (SGBoot::isFeatureAvailable('DROPBOX')): ?>
85
- <div class="form-group">
86
- <label class="col-md-5 sg-control-label">
87
- <div class="sg-cloud-icon-wrapper">
88
- <span class="sg-cloud-icon sg-cloud-dropbox"></span>
89
- </div>
90
- <div class="sg-cloud-label-wrapper">
91
- <span><?php echo 'Dropbox' ?></span>
92
- <?php if(!empty($dropboxUsername)): ?>
93
- <br/>
94
- <span class="text-muted sg-dropbox-user sg-helper-block"><?php echo $dropboxUsername;?></span>
95
- <?php endif;?>
96
- </div>
97
- </label>
98
- <div class="col-md-3">
99
- <label class="sg-switch-container">
100
- <input data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="DROPBOX" data-remote="cloudDropbox" type="checkbox" class="sg-switch" <?php echo !empty($dropbox)?'checked="checked"':''?>>
101
- </label>
102
- </div>
103
- </div>
104
- <?php endif; ?>
105
- <!-- Google Drive -->
106
- <?php if (SGBoot::isFeatureAvailable('GOOGLE_DRIVE')): ?>
107
- <div class="form-group">
108
- <label class="col-md-5 sg-control-label">
109
- <div class="sg-cloud-icon-wrapper">
110
- <span class="sg-cloud-icon sg-cloud-google-drive"></span>
111
- </div>
112
- <div class="sg-cloud-label-wrapper">
113
- <?php echo 'Google Drive' ?>
114
- <?php if(!empty($gdriveUsername)): ?>
115
- <br/>
116
- <span class="text-muted sg-gdrive-user sg-helper-block"><?php echo $gdriveUsername;?></span>
117
- <?php endif;?>
118
- </div>
119
- </label>
120
- <div class="col-md-3">
121
- <label class="sg-switch-container">
122
- <input data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="GOOGLE_DRIVE" data-remote="cloudGdrive" type="checkbox" class="sg-switch" <?php echo !empty($gdrive)?'checked="checked"':''?>>
123
- </label>
124
- </div>
125
- </div>
126
- <?php endif; ?>
127
- <!-- FTP -->
128
- <?php if (SGBoot::isFeatureAvailable('FTP')): ?>
129
- <div class="form-group">
130
- <label class="col-md-5 sg-control-label sg-user-info">
131
- <div class="sg-cloud-icon-wrapper">
132
- <span class="sg-cloud-icon sg-cloud-ftp"></span>
133
- </div>
134
- <div class="sg-cloud-label-wrapper">
135
- <?php echo 'FTP / SFTP' ?>
136
- <?php if(!empty($ftpUsername)): ?>
137
- <br/>
138
- <span class="text-muted sg-ftp-user sg-helper-block"><?php echo $ftpUsername;?></span>
139
- <?php endif;?>
140
- </div>
141
- </label>
142
- <div class="col-md-3">
143
- <label class="sg-switch-container">
144
- <input type="checkbox" data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="FTP" data-remote="cloudFtp" class="sg-switch" <?php echo !empty($ftp)?'checked="checked"':''?>>
145
- <a id="ftp-settings" href="javascript:void(0)" class="hide" data-toggle="modal" data-modal-name="ftp-settings" data-remote="modalFtpSettings"><?php echo 'FTP '._backupGuardT('Settings', true) ?></a>
146
- </label>
147
- </div>
148
- </div>
149
- <?php endif; ?>
150
- <!-- Amazon S3 -->
151
- <?php if (SGBoot::isFeatureAvailable('AMAZON')): ?>
152
- <div class="form-group">
153
- <label class="col-md-5 sg-control-label">
154
- <div class="sg-cloud-icon-wrapper">
155
- <span class="sg-cloud-icon sg-cloud-amazon"></span>
156
- </div>
157
- <div class="sg-cloud-label-wrapper">
158
- <?php echo (backupGuardIsAccountGold()? 'Amazon ':'').'S3'?>
159
- <?php if (!empty($amazonInfo)):?>
160
- <br/>
161
- <span class="text-muted sg-amazonr-user sg-helper-block"><?php echo $amazonInfo;?></span>
162
- <?php endif;?>
163
- </div>
164
- </label>
165
- <div class="col-md-3">
166
- <label class="sg-switch-container">
167
- <input type="checkbox" data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="AMAZON" data-remote="cloudAmazon" class="sg-switch" <?php echo !empty($amazon)?'checked="checked"':''?>>
168
- <a id="amazon-settings" href="javascript:void(0)" class="hide" data-toggle="modal" data-modal-name="amazon-settings" data-remote="modalAmazonSettings"><?php echo 'Amazon'._backupGuardT('Settings', true)?></a>
169
- </label>
170
- </div>
171
- </div>
172
- <?php endif; ?>
173
- <!-- One Drive -->
174
- <?php if (SGBoot::isFeatureAvailable('ONE_DRIVE')): ?>
175
- <div class="form-group">
176
- <label class="col-md-5 sg-control-label">
177
- <div class="sg-cloud-icon-wrapper">
178
- <span class="sg-cloud-icon sg-cloud-one-drive"></span>
179
- </div>
180
- <div class="sg-cloud-label-wrapper">
181
- <?php echo 'One Drive' ?>
182
- <?php if(!empty($oneDriveInfo)): ?>
183
- <br/>
184
- <span class="text-muted sg-gdrive-user sg-helper-block"><?php echo $oneDriveInfo;?></span>
185
- <?php endif;?>
186
- </div>
187
- </label>
188
- <div class="col-md-3">
189
- <label class="sg-switch-container">
190
- <input data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="ONE_DRIVE" data-remote="cloudOneDrive" type="checkbox" class="sg-switch" <?php echo !empty($oneDrive)?'checked="checked"':''?>>
191
- </label>
192
- </div>
193
- </div>
194
- <?php endif; ?>
195
- </fieldset>
196
- </form>
197
- </div>
198
- </div>
199
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $dropbox = SGConfig::get('SG_DROPBOX_ACCESS_TOKEN');
3
+ $gdrive = SGConfig::get('SG_GOOGLE_DRIVE_REFRESH_TOKEN');
4
+ $ftp = SGConfig::get('SG_STORAGE_FTP_CONNECTED');
5
+ $amazon = SGConfig::get('SG_STORAGE_AMAZON_CONNECTED');
6
+ $oneDrive = SGConfig::get('SG_ONE_DRIVE_REFRESH_TOKEN');
7
+ $pCloud = SGConfig::get('SG_P_CLOUD_ACCESS_TOKEN');
8
+ $box = SGConfig::get('SG_BOX_REFRESH_TOKEN');
9
+ $ftpUsername = SGConfig::get('SG_FTP_CONNECTION_STRING');
10
+ $gdriveUsername = SGConfig::get('SG_GOOGLE_DRIVE_CONNECTION_STRING');
11
+ $dropboxUsername = SGConfig::get('SG_DROPBOX_CONNECTION_STRING');
12
+ $amazonInfo = SGConfig::get('SG_AMAZON_BUCKET');
13
+
14
+ $oneDriveInfo = SGConfig::get('SG_ONE_DRIVE_CONNECTION_STRING');
15
+ $pCloudInfo = SGConfig::get('SG_P_CLOUD_CONNECTION_STRING');
16
+ $boxInfo = SGConfig::get('SG_BOX_CONNECTION_STRING');
17
+
18
+ $contentClassName = getBackupPageContentClassName('cloud');
19
+
20
+
21
+ $backupGuardCloudAccount = SGConfig::get('SG_BACKUPGUARD_CLOUD_ACCOUNT')?unserialize(SGConfig::get('SG_BACKUPGUARD_CLOUD_ACCOUNT')):'';
22
+ $backupGuardCloudAccountEmail = SGConfig::get('SG_BACKUPGUARD_CLOUD_ACCOUNT_EMAIL');
23
+
24
+ $backupGuardConnectionString = "<span>". _backupGuardT('Connect now and get 1 GB storage space for FREE', true)."</span>";
25
+
26
+ if (!empty($backupGuardCloudAccount)) {
27
+ $usedSpace = $backupGuardCloudAccount['usedStorage'];
28
+ $storage = $backupGuardCloudAccount['package']['storage'];
29
+ $availableSpaceInpercents = $usedSpace*100/$storage;
30
+
31
+ if ($availableSpaceInpercents < 25) {
32
+ $usedSpaceTextColor = "green";
33
+ }
34
+ else if ((25 <= $availableSpaceInpercents) && ($availableSpaceInpercents < 50)) {
35
+ $usedSpaceTextColor = "black";
36
+ }
37
+ else if ((50 <= $availableSpaceInpercents) && ($availableSpaceInpercents <= 75)) {
38
+ $usedSpaceTextColor = "orange";
39
+ }
40
+ else if ($availableSpaceInpercents >= 75) {
41
+ $usedSpaceTextColor = "red";
42
+ }
43
+
44
+ $backupGuardConnectionString = $backupGuardCloudAccountEmail.' | <span style="color: '.$usedSpaceTextColor.';">'.convertToReadableSize($usedSpace*BACKUP_GUARD_ONE_MB).' / '.convertToReadableSize($storage*BACKUP_GUARD_ONE_MB).'</span> | <a target="_blank" href="'.BACKUP_GUARD_CLOUD_UPGRADE_URL.'">Upgrade for more space</a>';
45
+ }
46
+ ?>
47
+ <div id="sg-backup-page-content-cloud" class="sg-backup-page-content <?php echo $contentClassName; ?>">
48
+ <div class="row sg-cloud-container">
49
+ <div class="col-md-12">
50
+ <form class="form-horizontal">
51
+ <fieldset>
52
+ <div><h1 class="sg-backup-page-title"><?php _backupGuardT('Cloud settings')?></h1></div>
53
+ <?php if (SGBoot::isFeatureAvailable('SUBDIRECTORIES')): ?>
54
+ <div class="form-group form-inline">
55
+ <label class="col-md-5 sg-control-label">
56
+ <?php _backupGuardT('Destination folder')?>
57
+ </label>
58
+ <div class="col-md-3">
59
+ <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'))?>">
60
+ <button type="button" id="sg-save-cloud-folder" class="btn btn-success pull-right"><?php _backupGuardT('Save');?></button>
61
+ </div>
62
+ </div>
63
+ <?php endif; ?>
64
+ <!-- BackupGuard -->
65
+ <?php if (SGBoot::isFeatureAvailable('BACKUP_GUARD') && SG_SHOW_BACKUPGUARD_CLOUD): ?>
66
+ <div class="form-group">
67
+ <label class="col-md-5 sg-control-label sg-user-info">
68
+ <div class="sg-cloud-icon-wrapper">
69
+ <span class="sg-cloud-icon sg-cloud-backup-guard"></span>
70
+ </div>
71
+ <div class="sg-cloud-label-with-info">
72
+ <span><?php echo 'BackupGuard' ?></span>
73
+ <span class="sg-backupguard-user sg-helper-block">
74
+ <?php echo $backupGuardConnectionString ?>
75
+ </span>
76
+ </div>
77
+ </label>
78
+ <div class="col-md-3">
79
+ <label class="sg-switch-container">
80
+ <input type="checkbox" data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="BACKUP_GUARD" data-remote="bgLogin" class="sg-switch" <?php echo !empty($backupGuardCloudAccount)?'checked="checked"':''?>>
81
+ <a id="backup-guard-details" href="javascript:void(0)" class="hide" data-toggle="modal" data-modal-name="backup-guard-details" data-remote="modalBackupGuardDetails"></a>
82
+ </label>
83
+ </div>
84
+ </div>
85
+ <?php endif; ?>
86
+ <!-- Dropbox -->
87
+ <?php if (SGBoot::isFeatureAvailable('DROPBOX')): ?>
88
+ <div class="form-group">
89
+ <label class="col-md-5 sg-control-label">
90
+ <div class="sg-cloud-icon-wrapper">
91
+ <span class="sg-cloud-icon sg-cloud-dropbox"></span>
92
+ </div>
93
+ <div class="sg-cloud-label-wrapper">
94
+ <span><?php echo 'Dropbox' ?></span>
95
+ <?php if(!empty($dropboxUsername)): ?>
96
+ <br/>
97
+ <span class="text-muted sg-dropbox-user sg-helper-block"><?php echo $dropboxUsername;?></span>
98
+ <?php endif;?>
99
+ </div>
100
+ </label>
101
+ <div class="col-md-3">
102
+ <label class="sg-switch-container">
103
+ <input data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="DROPBOX" data-remote="cloudDropbox" type="checkbox" class="sg-switch" <?php echo !empty($dropbox)?'checked="checked"':''?>>
104
+ </label>
105
+ </div>
106
+ </div>
107
+ <?php endif; ?>
108
+ <!-- Google Drive -->
109
+ <?php if (SGBoot::isFeatureAvailable('GOOGLE_DRIVE')): ?>
110
+ <div class="form-group">
111
+ <label class="col-md-5 sg-control-label">
112
+ <div class="sg-cloud-icon-wrapper">
113
+ <span class="sg-cloud-icon sg-cloud-google-drive"></span>
114
+ </div>
115
+ <div class="sg-cloud-label-wrapper">
116
+ <?php echo 'Google Drive' ?>
117
+ <?php if(!empty($gdriveUsername)): ?>
118
+ <br/>
119
+ <span class="text-muted sg-gdrive-user sg-helper-block"><?php echo $gdriveUsername;?></span>
120
+ <?php endif;?>
121
+ </div>
122
+ </label>
123
+ <div class="col-md-3">
124
+ <label class="sg-switch-container">
125
+ <input data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="GOOGLE_DRIVE" data-remote="cloudGdrive" type="checkbox" class="sg-switch" <?php echo !empty($gdrive)?'checked="checked"':''?>>
126
+ </label>
127
+ </div>
128
+ </div>
129
+ <?php endif; ?>
130
+ <!-- FTP -->
131
+ <?php if (SGBoot::isFeatureAvailable('FTP')): ?>
132
+ <div class="form-group">
133
+ <label class="col-md-5 sg-control-label sg-user-info">
134
+ <div class="sg-cloud-icon-wrapper">
135
+ <span class="sg-cloud-icon sg-cloud-ftp"></span>
136
+ </div>
137
+ <div class="sg-cloud-label-wrapper">
138
+ <?php echo 'FTP / SFTP' ?>
139
+ <?php if(!empty($ftpUsername)): ?>
140
+ <br/>
141
+ <span class="text-muted sg-ftp-user sg-helper-block"><?php echo $ftpUsername;?></span>
142
+ <?php endif;?>
143
+ </div>
144
+ </label>
145
+ <div class="col-md-3">
146
+ <label class="sg-switch-container">
147
+ <input type="checkbox" data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="FTP" data-remote="cloudFtp" class="sg-switch" <?php echo !empty($ftp)?'checked="checked"':''?>>
148
+ <a id="ftp-settings" href="javascript:void(0)" class="hide" data-toggle="modal" data-modal-name="ftp-settings" data-remote="modalFtpSettings"><?php echo 'FTP '._backupGuardT('Settings', true) ?></a>
149
+ </label>
150
+ </div>
151
+ </div>
152
+ <?php endif; ?>
153
+ <!-- Amazon S3 -->
154
+ <?php if (SGBoot::isFeatureAvailable('AMAZON')): ?>
155
+ <div class="form-group">
156
+ <label class="col-md-5 sg-control-label">
157
+ <div class="sg-cloud-icon-wrapper">
158
+ <span class="sg-cloud-icon sg-cloud-amazon"></span>
159
+ </div>
160
+ <div class="sg-cloud-label-wrapper">
161
+ <?php echo (backupGuardIsAccountGold()? 'Amazon ':'').'S3'?>
162
+ <?php if (!empty($amazonInfo)):?>
163
+ <br/>
164
+ <span class="text-muted sg-amazonr-user sg-helper-block"><?php echo $amazonInfo;?></span>
165
+ <?php endif;?>
166
+ </div>
167
+ </label>
168
+ <div class="col-md-3">
169
+ <label class="sg-switch-container">
170
+ <input type="checkbox" data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="AMAZON" data-remote="cloudAmazon" class="sg-switch" <?php echo !empty($amazon)?'checked="checked"':''?>>
171
+ <a id="amazon-settings" href="javascript:void(0)" class="hide" data-toggle="modal" data-modal-name="amazon-settings" data-remote="modalAmazonSettings"><?php echo 'Amazon'._backupGuardT('Settings', true)?></a>
172
+ </label>
173
+ </div>
174
+ </div>
175
+ <?php endif; ?>
176
+ <!-- One Drive -->
177
+ <?php if (SGBoot::isFeatureAvailable('ONE_DRIVE')): ?>
178
+ <div class="form-group">
179
+ <label class="col-md-5 sg-control-label">
180
+ <div class="sg-cloud-icon-wrapper">
181
+ <span class="sg-cloud-icon sg-cloud-one-drive"></span>
182
+ </div>
183
+ <div class="sg-cloud-label-wrapper">
184
+ <?php echo 'One Drive' ?>
185
+ <?php if(!empty($oneDriveInfo)): ?>
186
+ <br/>
187
+ <span class="text-muted sg-gdrive-user sg-helper-block"><?php echo $oneDriveInfo;?></span>
188
+ <?php endif;?>
189
+ </div>
190
+ </label>
191
+ <div class="col-md-3">
192
+ <label class="sg-switch-container">
193
+ <input data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="ONE_DRIVE" data-remote="cloudOneDrive" type="checkbox" class="sg-switch" <?php echo !empty($oneDrive)?'checked="checked"':''?>>
194
+ </label>
195
+ </div>
196
+ </div>
197
+ <?php endif; ?>
198
+
199
+ <!-- PCloud -->
200
+ <?php if ( SGBoot::isFeatureAvailable( 'P_CLOUD' ) ): ?>
201
+ <div class="form-group">
202
+ <label class="col-md-5 sg-control-label">
203
+ <div class="sg-cloud-icon-wrapper">
204
+ <span class="sg-cloud-icon sg-cloud-pcloud"></span>
205
+ </div>
206
+ <div class="sg-cloud-label-wrapper">
207
+ <?php echo 'pCloud' ?>
208
+ <?php if ( ! empty( $pCloudInfo ) ): ?>
209
+ <br/>
210
+ <span class="text-muted sg-gdrive-user sg-helper-block"><?php echo json_decode( $pCloudInfo, true )['email']; ?></span>
211
+ <?php endif; ?>
212
+ </div>
213
+ </label>
214
+ <div class="col-md-3">
215
+ <label class="sg-switch-container">
216
+ <input data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="P_CLOUD" data-remote="cloudPCloud" type="checkbox" class="sg-switch" <?php echo !empty($pCloud)?'checked="checked"':''?>>
217
+ </label>
218
+ </div>
219
+ </div>
220
+ <?php endif; ?>
221
+
222
+ <!-- Box -->
223
+ <?php if ( SGBoot::isFeatureAvailable( 'BOX' ) ): ?>
224
+ <div class="form-group">
225
+ <label class="col-md-5 sg-control-label">
226
+ <div class="sg-cloud-icon-wrapper">
227
+ <span class="sg-cloud-icon sg-cloud-box"></span>
228
+ </div>
229
+ <div class="sg-cloud-label-wrapper">
230
+ <?php echo 'box.com' ?>
231
+ <?php if ( ! empty( $boxInfo ) ): ?>
232
+ <br/>
233
+ <span class="text-muted sg-gdrive-user sg-helper-block"><?php echo json_decode( $boxInfo, true )['login']; ?></span>
234
+ <?php endif; ?>
235
+ </div>
236
+ </label>
237
+ <div class="col-md-3">
238
+ <label class="sg-switch-container">
239
+ <input data-on-text="<?php _backupGuardT('ON')?>" data-off-text="<?php _backupGuardT('OFF')?>" data-storage="BOX" data-remote="cloudBox" type="checkbox" class="sg-switch" <?php echo !empty($box)?'checked="checked"':''?>>
240
+ </label>
241
+ </div>
242
+ </div>
243
+ <?php endif; ?>
244
+
245
+
246
+ </fieldset>
247
+ </form>
248
+ </div>
249
+ </div>
250
+ </div>
public/css/bgstyle.less.css CHANGED
@@ -1,8370 +1,8386 @@
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: 1px 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 {
18
- color: #ff7518;
19
- }
20
-
21
- .sg-feature-alert-text {
22
- color: gray;
23
- font-size: 13px;
24
- font-style: italic;
25
- text-align: center;
26
- }
27
-
28
- #sg-product-name-div {
29
- position: absolute;
30
- font-size: 10px;
31
- color: orange;
32
- bottom: 15px;
33
- text-align: center;
34
- width: 100%;
35
- margin-left: -20px;
36
- }
37
-
38
- .sg-badge-warning {
39
- background-color: #ff7518 !important;
40
- border-color: #ff4309 !important;
41
- border-radius: 2px !important;
42
- color: #ffffff !important;
43
- }
44
-
45
- .sg-margin-left-20 {
46
- margin-left: 20px;
47
- }
48
-
49
- .sg-margin-left-12 {
50
- margin-left: 12px !important;
51
- }
52
-
53
- .sg-service-container {
54
- width: 100%;
55
- margin: 0;
56
- background: #FFFFFF 0% 0% no-repeat padding-box;
57
- box-shadow: 0px 0px 15px #0000001A;
58
- border-radius: 10px;
59
- opacity: 1;
60
- }
61
-
62
- .sg-service-container .plugin-card-top {
63
- padding-bottom: 40px;
64
- }
65
-
66
- .sg-migration-icon {
67
- height: 264px;
68
- background-image: url("../img/wordPress-migration-service-product.png");
69
- background-size: contain;
70
- background-repeat: no-repeat;
71
- background-position: center;
72
- }
73
-
74
- .sg-right-arrow {
75
- display: inline-block;
76
- width: 15px;
77
- height: 9px;
78
- background-image: url("../img/arrow-right.png");
79
- }
80
-
81
- .sg-migration-info {
82
- text-align: left;
83
- }
84
-
85
- .sg-migration-info a {
86
- color: #010101 !important;
87
- }
88
-
89
- .sg-migration-info h1 {
90
- margin-bottom: 30px !important;
91
- }
92
-
93
- .column-description-p {
94
- margin-bottom: 25px !important;
95
- }
96
-
97
- .sg-migration-features {
98
- margin-bottom: 17px !important;
99
- }
100
-
101
- .migration-price-wrapper {
102
- position: absolute !important;
103
- bottom: 0px !important;
104
- }
105
-
106
- .sg-migration-right-column {
107
- position: relative;
108
- height: 300px;
109
- }
110
-
111
- .sg-services-arrow {
112
- margin-right: 6px;
113
- }
114
-
115
- .sg-service-container h3 {
116
- margin-top: 0px !important;
117
- }
118
-
119
- .sg-service-container .plugin-card-top {
120
- margin-bottom: 20px;
121
- }
122
-
123
- #sg-migration-service-price {
124
- font-size: 32px;
125
- text-align: center;
126
- }
127
-
128
- .sg-migration-price-ul {
129
- margin-bottom: 0px !important;
130
- }
131
-
132
- .sg-migration-price-ul li:nth-child(1) {
133
- margin-bottom: 19px !important;
134
- }
135
-
136
- .sg-migration-price-ul li:nth-child(2) {
137
- margin-bottom: 0 !important;
138
- }
139
- .sg-migration-price-ul li p {
140
- line-height: 1;
141
- }
142
-
143
- #sg-banner {
144
- margin-top: 10px;
145
- width: calc(100% - 20px) !important;
146
- height: 185px;
147
- background-color: #0021C8;
148
- color: #FFFFFF;
149
- font-size: 12px;
150
- min-width: 650px;
151
- }
152
-
153
- #sg-left-column {
154
- width: 18%;
155
- float: left;
156
- display: inline-block;
157
- }
158
-
159
- #sg-left-column ul {
160
- display: inline-block;
161
- }
162
-
163
- #sg-center-column {
164
- width: 60%;
165
- padding-top: 17px;
166
- text-align: center;
167
- display: inline-block;
168
- }
169
-
170
- #sg-right-column {
171
- width: 22%;
172
- float: right;
173
- display: inline-block;
174
- position: relative;
175
- }
176
-
177
- .sg-close-free-banner {
178
- position: absolute;
179
- cursor: pointer;
180
- line-height: 1;
181
- font-size: 15px;
182
- right: 7px;
183
- top: 7px;
184
- background-image: url(../img/close-button.png);
185
- width: 9px;
186
- height: 9px;
187
- background-size: contain;
188
- background-repeat: no-repeat;
189
- }
190
-
191
- .sg-banner-social-button {
192
- display: inline-block;
193
- width: 44px;
194
- height: 44px;
195
- border: none;
196
- border-radius: 50%;
197
- cursor: pointer;
198
- margin-right: 3px;
199
- background-size: contain !important;
200
- }
201
-
202
- #sg-banner p {
203
- width: 100%;
204
- text-align: center;
205
- font-size: 13px !important;
206
- }
207
-
208
- #sg-banner a {
209
- vertical-align: middle;
210
- text-decoration: none;
211
- color: #FFFFFF;
212
- cursor: pointer;
213
- font-weight: bold;
214
- }
215
-
216
- #sg-banner ul {
217
- list-style-type: none;
218
- }
219
-
220
- #sg-banner li {
221
- vertical-align: middle;
222
- margin-bottom: 5px;
223
- height: 32px;
224
- }
225
-
226
- #sg-right-column ul {
227
- float: right;
228
- padding-right: 16px;
229
- padding-top: 2px;
230
- }
231
-
232
- #sg-right-column li {
233
- vertical-align: middle;
234
- }
235
-
236
- #sg-left-column li {
237
- padding-left: 20px;
238
- }
239
-
240
- #sg-left-column ul {
241
- padding-top: 10px;
242
- }
243
-
244
- .sg-img-class {
245
- margin-right: 3px;
246
- vertical-align: middle;
247
- }
248
-
249
- #sg-logo {
250
- display: inline-block;
251
- width: 140px;
252
- height: 70px;
253
- background-size: contain;
254
- background-position: center;
255
- background-repeat: no-repeat;
256
- background-image: url("../img/banerLogo.png");
257
- }
258
-
259
- .sg-logo-li {
260
- height: 70px !important;
261
- }
262
-
263
- #sg-facebook {
264
- background: url('../img/fb.png') no-repeat;
265
- }
266
-
267
- #sg-twitter {
268
- background: url("../img/TW.png") no-repeat;
269
- }
270
-
271
- #sg-google-plus {
272
- background: url("../img/G+.png") no-repeat;
273
- }
274
-
275
- #sg-youtube {
276
- background: url("../img/youtube.png") no-repeat;
277
- }
278
-
279
- .sg-star-class {
280
- cursor:pointer;
281
- margin-right: 3px;
282
- }
283
-
284
- #rateYo {
285
- display: inline-block;
286
- }
287
-
288
- #sg-buy-now {
289
- background-color: #ffffff;
290
- border: none;
291
- color: #0021C8 !important;
292
- font-size: 18px;
293
- vertical-align: middle;
294
- cursor: pointer;
295
- display: inline-block;
296
- padding: 6px 15px;
297
- border-radius: 8px;
298
- }
299
-
300
- #sg-buy-now:hover {
301
- background-color: #0021C8;
302
- border: 1px solid #ffffff !important;
303
- color: #ffffff !important;
304
- }
305
-
306
- #sg-buy-now-text {
307
- vertical-align: middle;
308
- }
309
-
310
- #sg-banner-clarification {
311
- font-size: 10px;
312
- }
313
-
314
- #sg-rate-us {
315
- height: 32px;
316
- position: relative;
317
- }
318
-
319
- #sg-banner-test {
320
- position: absolute;
321
- top:50%;
322
- width: 100%;
323
- margin-top: -15px;
324
- }
325
-
326
- .sg-banner-rate-us-in {
327
- display: inline-block;
328
- height: 30px;
329
- color:rgba(255,255,255, 0.8) !important;
330
- }
331
-
332
- /* Bounce In */
333
- .hvr-bounce-in {
334
- /*display: inline-block;*/
335
- vertical-align: middle;
336
- -webkit-transition-duration: 0.04s;
337
- transition-duration: 0.04s;
338
- cursor: pointer;
339
- }
340
- .hvr-bounce-in:hover, .hvr-bounce-in:focus, .hvr-bounce-in:active {
341
- -ms-transform: translate(4px, 0);
342
- -webkit-transform: translate(4px, 0);
343
- transform: translate(4px, 0);
344
- }
345
-
346
- @media (max-width: 835px) {
347
- #sg-banner {
348
- font-size: 8px;
349
- }
350
-
351
- #sg-banner p {
352
- font-size: 8px !important;
353
- }
354
-
355
- #sg-center-column {
356
- width: 50%;
357
- }
358
-
359
- #sg-left-column {
360
- width: 23%;
361
- }
362
-
363
- #sg-right-column {
364
- width: 27%;
365
- }
366
- }
367
-
368
- /**************************************/
369
-
370
- #sg-backup-with-migration {
371
- margin-left: 12px;
372
- }
373
-
374
- #modal-import-1,
375
- #sg-modal-inport-from,
376
- #modal-import-3 {
377
- padding: 0;
378
- }
379
-
380
- #sg-checkbox-select-all {
381
- margin-top: 0;
382
- }
383
-
384
- .sg-wrap-container {
385
- height: 650px;
386
- width: 100%;
387
- }
388
-
389
- #sg-backup-guard-iframe {
390
- width: 100%;
391
- height: 100%;
392
- }
393
-
394
- #modal-import-2 {
395
- margin-top: 15px;
396
- }
397
-
398
- #modal-import-1 .form-group{
399
- margin-bottom: 0;
400
- }
401
-
402
- #modal-import-1 .table{
403
- margin-bottom: 0;
404
- }
405
-
406
- #modal-import-3 .form-group{
407
- margin-bottom: 0;
408
- }
409
-
410
- #modal-import-3 .table{
411
- margin-bottom: 0;
412
- }
413
-
414
- .file-select-radio {
415
- padding-left: 15px !important;
416
- }
417
-
418
- .sg-wrapper-less {
419
- /* vietnamese */
420
- /* latin-ext */
421
- /* latin */
422
- /* vietnamese */
423
- /* latin-ext */
424
- /* latin */
425
- /* vietnamese */
426
- /* latin-ext */
427
- /* latin */
428
- /*!
429
- * bootswatch v3.3.4+1
430
- * Homepage: http://bootswatch.com
431
- * Copyright 2012-2015 Thomas Park
432
- * Licensed under MIT
433
- * Based on Bootstrap
434
- */
435
- /*! normalize.css v3.0.2 | MIT License | git.io/normalize */
436
- /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
437
- /* Sidebar Styles */
438
- /*Files*/
439
- /*ftp*/
440
- /*dropbox*/
441
- /*gdrive*/
442
- /*rdb*/
443
- /*rfiles*/
444
- }
445
- @font-face {
446
- font-family: 'Source Sans Pro';
447
- font-style: normal;
448
- font-weight: 300;
449
- src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/toadOcfmlt9b38dHJxOBGCD5K6T8I4oZ1X3Xvlj_UeP3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
450
- unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
451
- }
452
- @font-face {
453
- font-family: 'Source Sans Pro';
454
- font-style: normal;
455
- font-weight: 300;
456
- src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/toadOcfmlt9b38dHJxOBGDOFnJNygIkrHciC8BWzbCz3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
457
- unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
458
- }
459
- @font-face {
460
- font-family: 'Source Sans Pro';
461
- font-style: normal;
462
- font-weight: 300;
463
- src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/toadOcfmlt9b38dHJxOBGCP2LEk6lMzYsRqr3dHFImA.woff2') format('woff2');
464
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
465
- }
466
- @font-face {
467
- font-family: 'Source Sans Pro';
468
- font-style: normal;
469
- font-weight: 400;
470
- src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../fonts/ODelI1aHBYDBqgeIAH2zlCxe5Tewm2_XWfbGchcXw4g.woff2') format('woff2');
471
- unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
472
- }
473
- @font-face {
474
- font-family: 'Source Sans Pro';
475
- font-style: normal;
476
- font-weight: 400;
477
- src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../fonts/ODelI1aHBYDBqgeIAH2zlIa1YDtoarzwSXxTHggEXMw.woff2') format('woff2');
478
- unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
479
- }
480
- @font-face {
481
- font-family: 'Source Sans Pro';
482
- font-style: normal;
483
- font-weight: 400;
484
- src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../fonts/ODelI1aHBYDBqgeIAH2zlJbPFduIYtoLzwST68uhz_Y.woff2') format('woff2');
485
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
486
- }
487
- @font-face {
488
- font-family: 'Source Sans Pro';
489
- font-style: normal;
490
- font-weight: 700;
491
- src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/toadOcfmlt9b38dHJxOBGMms7UHsIbjUxEJqIwog-i_3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
492
- unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
493
- }
494
- @font-face {
495
- font-family: 'Source Sans Pro';
496
- font-style: normal;
497
- font-weight: 700;
498
- src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/toadOcfmlt9b38dHJxOBGO4s1Ux4PuImWPk5fSr6HPL3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
499
- unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
500
- }
501
- @font-face {
502
- font-family: 'Source Sans Pro';
503
- font-style: normal;
504
- font-weight: 700;
505
- src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/toadOcfmlt9b38dHJxOBGJkF8H8ye47wsfpWywda8og.woff2') format('woff2');
506
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
507
- }
508
- .sg-wrapper-less html {
509
- font-family: sans-serif;
510
- -ms-text-size-adjust: 100%;
511
- -webkit-text-size-adjust: 100%;
512
- }
513
- .sg-wrapper-less body {
514
- margin: 0;
515
- }
516
- .sg-wrapper-less article,
517
- .sg-wrapper-less aside,
518
- .sg-wrapper-less details,
519
- .sg-wrapper-less figcaption,
520
- .sg-wrapper-less figure,
521
- .sg-wrapper-less footer,
522
- .sg-wrapper-less header,
523
- .sg-wrapper-less hgroup,
524
- .sg-wrapper-less main,
525
- .sg-wrapper-less menu,
526
- .sg-wrapper-less nav,
527
- .sg-wrapper-less section,
528
- .sg-wrapper-less summary {
529
- display: block;
530
- }
531
- .sg-wrapper-less audio,
532
- .sg-wrapper-less canvas,
533
- .sg-wrapper-less progress,
534
- .sg-wrapper-less video {
535
- display: inline-block;
536
- vertical-align: baseline;
537
- }
538
- .sg-wrapper-less audio:not([controls]) {
539
- display: none;
540
- height: 0;
541
- }
542
- .sg-wrapper-less [hidden],
543
- .sg-wrapper-less template {
544
- display: none;
545
- }
546
- .sg-wrapper-less a {
547
- background-color: transparent;
548
- }
549
- .sg-wrapper-less a:active,
550
- .sg-wrapper-less a:hover {
551
- outline: 0;
552
- }
553
- .sg-wrapper-less abbr[title] {
554
- border-bottom: 1px dotted;
555
- }
556
- .sg-wrapper-less b,
557
- .sg-wrapper-less strong {
558
- font-weight: bold;
559
- }
560
- .sg-wrapper-less dfn {
561
- font-style: italic;
562
- }
563
- .sg-wrapper-less h1 {
564
- font-size: 2em;
565
- margin: 0.67em 0;
566
- }
567
- .sg-wrapper-less mark {
568
- background: #ff0;
569
- color: #000;
570
- }
571
- .sg-wrapper-less small {
572
- font-size: 80%;
573
- }
574
- .sg-wrapper-less sub,
575
- .sg-wrapper-less sup {
576
- font-size: 75%;
577
- line-height: 0;
578
- position: relative;
579
- vertical-align: baseline;
580
- }
581
- .sg-wrapper-less sup {
582
- top: -0.5em;
583
- }
584
- .sg-wrapper-less sub {
585
- bottom: -0.25em;
586
- }
587
- .sg-wrapper-less img {
588
- border: 0;
589
- }
590
- .sg-wrapper-less svg:not(:root) {
591
- overflow: hidden;
592
- }
593
- .sg-wrapper-less figure {
594
- margin: 1em 40px;
595
- }
596
- .sg-wrapper-less hr {
597
- -moz-box-sizing: content-box;
598
- -webkit-box-sizing: content-box;
599
- box-sizing: content-box;
600
- height: 0;
601
- }
602
- .sg-wrapper-less pre {
603
- overflow: auto;
604
- }
605
- .sg-wrapper-less code,
606
- .sg-wrapper-less kbd,
607
- .sg-wrapper-less pre,
608
- .sg-wrapper-less samp {
609
- font-family: monospace, monospace;
610
- font-size: 1em;
611
- }
612
- .sg-wrapper-less button,
613
- .sg-wrapper-less input,
614
- .sg-wrapper-less optgroup,
615
- .sg-wrapper-less select,
616
- .sg-wrapper-less textarea {
617
- color: inherit;
618
- font: inherit;
619
- margin: 0;
620
- }
621
- .sg-wrapper-less button {
622
- overflow: visible;
623
- }
624
- .sg-wrapper-less button,
625
- .sg-wrapper-less select {
626
- text-transform: none;
627
- }
628
- .sg-wrapper-less button,
629
- .sg-wrapper-less html input[type="button"],
630
- .sg-wrapper-less input[type="reset"],
631
- .sg-wrapper-less input[type="submit"] {
632
- -webkit-appearance: button;
633
- cursor: pointer;
634
- }
635
- .sg-wrapper-less button[disabled],
636
- .sg-wrapper-less html input[disabled] {
637
- cursor: default;
638
- }
639
- .sg-wrapper-less button::-moz-focus-inner,
640
- .sg-wrapper-less input::-moz-focus-inner {
641
- border: 0;
642
- padding: 0;
643
- }
644
- .sg-wrapper-less input {
645
- line-height: normal;
646
- }
647
- .sg-wrapper-less input[type="checkbox"],
648
- .sg-wrapper-less input[type="radio"] {
649
- -webkit-box-sizing: border-box;
650
- -moz-box-sizing: border-box;
651
- box-sizing: border-box;
652
- padding: 0;
653
- }
654
- .sg-wrapper-less input[type="number"]::-webkit-inner-spin-button,
655
- .sg-wrapper-less input[type="number"]::-webkit-outer-spin-button {
656
- height: auto;
657
- }
658
- .sg-wrapper-less input[type="search"] {
659
- -webkit-appearance: textfield;
660
- -moz-box-sizing: content-box;
661
- -webkit-box-sizing: content-box;
662
- box-sizing: content-box;
663
- }
664
- .sg-wrapper-less input[type="search"]::-webkit-search-cancel-button,
665
- .sg-wrapper-less input[type="search"]::-webkit-search-decoration {
666
- -webkit-appearance: none;
667
- }
668
- .sg-wrapper-less fieldset {
669
- border: 1px solid #c0c0c0;
670
- margin: 0 2px;
671
- padding: 0.35em 0.625em 0.75em;
672
- }
673
- .sg-wrapper-less legend {
674
- border: 0;
675
- padding: 0;
676
- }
677
- .sg-wrapper-less textarea {
678
- overflow: auto;
679
- }
680
- .sg-wrapper-less optgroup {
681
- font-weight: bold;
682
- }
683
- .sg-wrapper-less table {
684
- border-collapse: collapse;
685
- border-spacing: 0;
686
- }
687
- .sg-wrapper-less td,
688
- .sg-wrapper-less th {
689
- padding: 0;
690
- }
691
- @media print {
692
- .sg-wrapper-less *,
693
- .sg-wrapper-less *:before,
694
- .sg-wrapper-less *:after {
695
- background: transparent !important;
696
- color: #000 !important;
697
- -webkit-box-shadow: none !important;
698
- box-shadow: none !important;
699
- text-shadow: none !important;
700
- }
701
- .sg-wrapper-less a,
702
- .sg-wrapper-less a:visited {
703
- text-decoration: underline;
704
- }
705
- .sg-wrapper-less a[href]:after {
706
- content: " (" attr(href) ")";
707
- }
708
- .sg-wrapper-less abbr[title]:after {
709
- content: " (" attr(title) ")";
710
- }
711
- .sg-wrapper-less a[href^="#"]:after,
712
- .sg-wrapper-less a[href^="javascript:"]:after {
713
- content: "";
714
- }
715
- .sg-wrapper-less pre,
716
- .sg-wrapper-less blockquote {
717
- border: 1px solid #999;
718
- page-break-inside: avoid;
719
- }
720
- .sg-wrapper-less thead {
721
- display: table-header-group;
722
- }
723
- .sg-wrapper-less tr,
724
- .sg-wrapper-less img {
725
- page-break-inside: avoid;
726
- }
727
- .sg-wrapper-less img {
728
- max-width: 100% !important;
729
- }
730
- .sg-wrapper-less p,
731
- .sg-wrapper-less h2,
732
- .sg-wrapper-less h3 {
733
- orphans: 3;
734
- widows: 3;
735
- }
736
- .sg-wrapper-less h2,
737
- .sg-wrapper-less h3 {
738
- page-break-after: avoid;
739
- }
740
- .sg-wrapper-less select {
741
- background: #fff !important;
742
- }
743
- .sg-wrapper-less .navbar {
744
- display: none;
745
- }
746
- .sg-wrapper-less .btn > .caret,
747
- .sg-wrapper-less .dropup > .btn > .caret {
748
- border-top-color: #000 !important;
749
- }
750
- .sg-wrapper-less .label {
751
- border: 1px solid #000;
752
- }
753
- .sg-wrapper-less .table {
754
- border-collapse: collapse !important;
755
- }
756
- .sg-wrapper-less .table td,
757
- .sg-wrapper-less .table th {
758
- background-color: #fff !important;
759
- }
760
- .sg-wrapper-less .table-bordered th,
761
- .sg-wrapper-less .table-bordered td {
762
- border: 1px solid #ddd !important;
763
- }
764
- }
765
- @font-face {
766
- font-family: 'Glyphicons Halflings';
767
- src: url('../fonts/glyphicons-halflings-regular.eot');
768
- src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
769
- }
770
- .sg-wrapper-less .glyphicon {
771
- position: relative;
772
- top: 1px;
773
- display: inline-block;
774
- font-family: 'Glyphicons Halflings';
775
- font-style: normal;
776
- font-weight: normal;
777
- line-height: 1;
778
- -webkit-font-smoothing: antialiased;
779
- -moz-osx-font-smoothing: grayscale;
780
- }
781
- .sg-wrapper-less .glyphicon-asterisk:before {
782
- content: "\2a";
783
- }
784
- .sg-wrapper-less .glyphicon-plus:before {
785
- content: "\2b";
786
- }
787
- .sg-wrapper-less .glyphicon-euro:before,
788
- .sg-wrapper-less .glyphicon-eur:before {
789
- content: "\20ac";
790
- }
791
- .sg-wrapper-less .glyphicon-minus:before {
792
- content: "\2212";
793
- }
794
- .sg-wrapper-less .glyphicon-cloud:before {
795
- content: "\2601";
796
- }
797
- .sg-wrapper-less .glyphicon-envelope:before {
798
- content: "\2709";
799
- }
800
- .sg-wrapper-less .glyphicon-pencil:before {
801
- content: "\270f";
802
- }
803
- .sg-wrapper-less .glyphicon-glass:before {
804
- content: "\e001";
805
- }
806
- .sg-wrapper-less .glyphicon-music:before {
807
- content: "\e002";
808
- }
809
- .sg-wrapper-less .glyphicon-search:before {
810
- content: "\e003";
811
- }
812
- .sg-wrapper-less .glyphicon-heart:before {
813
- content: "\e005";
814
- }
815
- .sg-wrapper-less .glyphicon-star:before {
816
- content: "\e006";
817
- }
818
- .sg-wrapper-less .glyphicon-star-empty:before {
819
- content: "\e007";
820
- }
821
- .sg-wrapper-less .glyphicon-user:before {
822
- content: "\e008";
823
- }
824
- .sg-wrapper-less .glyphicon-film:before {
825
- content: "\e009";
826
- }
827
- .sg-wrapper-less .glyphicon-th-large:before {
828
- content: "\e010";
829
- }
830
- .sg-wrapper-less .glyphicon-th:before {
831
- content: "\e011";
832
- }
833
- .sg-wrapper-less .glyphicon-th-list:before {
834
- content: "\e012";
835
- }
836
- .sg-wrapper-less .glyphicon-ok:before {
837
- content: "\e013";
838
- }
839
- .sg-wrapper-less .glyphicon-remove:before {
840
- content: "\e014";
841
- }
842
- .sg-wrapper-less .glyphicon-zoom-in:before {
843
- content: "\e015";
844
- }
845
- .sg-wrapper-less .glyphicon-zoom-out:before {
846
- content: "\e016";
847
- }
848
- .sg-wrapper-less .glyphicon-off:before {
849
- content: "\e017";
850
- }
851
- .sg-wrapper-less .glyphicon-signal:before {
852
- content: "\e018";
853
- }
854
- .sg-wrapper-less .glyphicon-cog:before {
855
- content: "\e019";
856
- }
857
- .sg-wrapper-less .glyphicon-trash:before {
858
- content: "\e020";
859
- }
860
- .sg-wrapper-less .glyphicon-home:before {
861
- content: "\e021";
862
- }
863
- .sg-wrapper-less .glyphicon-file:before {
864
- content: "\e022";
865
- }
866
- .sg-wrapper-less .glyphicon-time:before {
867
- content: "\e023";
868
- }
869
- .sg-wrapper-less .glyphicon-road:before {
870
- content: "\e024";
871
- }
872
- .sg-wrapper-less .glyphicon-download-alt:before {
873
- content: "\e025";
874
- }
875
- .sg-wrapper-less .glyphicon-download:before {
876
- content: "\e026";
877
- }
878
- .sg-wrapper-less .glyphicon-upload:before {
879
- content: "\e027";
880
- }
881
- .sg-wrapper-less .glyphicon-inbox:before {
882
- content: "\e028";
883
- }
884
- .sg-wrapper-less .glyphicon-play-circle:before {
885
- content: "\e029";
886
- }
887
- .sg-wrapper-less .glyphicon-repeat:before {
888
- content: "\e030";
889
- }
890
- .sg-wrapper-less .glyphicon-refresh:before {
891
- content: "\e031";
892
- }
893
- .sg-wrapper-less .glyphicon-list-alt:before {
894
- content: "\e032";
895
- }
896
- .sg-wrapper-less .glyphicon-lock:before {
897
- content: "\e033";
898
- }
899
- .sg-wrapper-less .glyphicon-flag:before {
900
- content: "\e034";
901
- }
902
- .sg-wrapper-less .glyphicon-headphones:before {
903
- content: "\e035";
904
- }
905
- .sg-wrapper-less .glyphicon-volume-off:before {
906
- content: "\e036";
907
- }
908
- .sg-wrapper-less .glyphicon-volume-down:before {
909
- content: "\e037";
910
- }
911
- .sg-wrapper-less .glyphicon-volume-up:before {
912
- content: "\e038";
913
- }
914
- .sg-wrapper-less .glyphicon-qrcode:before {
915
- content: "\e039";
916
- }
917
- .sg-wrapper-less .glyphicon-barcode:before {
918
- content: "\e040";
919
- }
920
- .sg-wrapper-less .glyphicon-tag:before {
921
- content: "\e041";
922
- }
923
- .sg-wrapper-less .glyphicon-tags:before {
924
- content: "\e042";
925
- }
926
- .sg-wrapper-less .glyphicon-book:before {
927
- content: "\e043";
928
- }
929
- .sg-wrapper-less .glyphicon-bookmark:before {
930
- content: "\e044";
931
- }
932
- .sg-wrapper-less .glyphicon-print:before {
933
- content: "\e045";
934
- }
935
- .sg-wrapper-less .glyphicon-camera:before {
936
- content: "\e046";
937
- }
938
- .sg-wrapper-less .glyphicon-font:before {
939
- content: "\e047";
940
- }
941
- .sg-wrapper-less .glyphicon-bold:before {
942
- content: "\e048";
943
- }
944
- .sg-wrapper-less .glyphicon-italic:before {
945
- content: "\e049";
946
- }
947
- .sg-wrapper-less .glyphicon-text-height:before {
948
- content: "\e050";
949
- }
950
- .sg-wrapper-less .glyphicon-text-width:before {
951
- content: "\e051";
952
- }
953
- .sg-wrapper-less .glyphicon-align-left:before {
954
- content: "\e052";
955
- }
956
- .sg-wrapper-less .glyphicon-align-center:before {
957
- content: "\e053";
958
- }
959
- .sg-wrapper-less .glyphicon-align-right:before {
960
- content: "\e054";
961
- }
962
- .sg-wrapper-less .glyphicon-align-justify:before {
963
- content: "\e055";
964
- }
965
- .sg-wrapper-less .glyphicon-list:before {
966
- content: "\e056";
967
- }
968
- .sg-wrapper-less .glyphicon-indent-left:before {
969
- content: "\e057";
970
- }
971
- .sg-wrapper-less .glyphicon-indent-right:before {
972
- content: "\e058";
973
- }
974
- .sg-wrapper-less .glyphicon-facetime-video:before {
975
- content: "\e059";
976
- }
977
- .sg-wrapper-less .glyphicon-picture:before {
978
- content: "\e060";
979
- }
980
- .sg-wrapper-less .glyphicon-map-marker:before {
981
- content: "\e062";
982
- }
983
- .sg-wrapper-less .glyphicon-adjust:before {
984
- content: "\e063";
985
- }
986
- .sg-wrapper-less .glyphicon-tint:before {
987
- content: "\e064";
988
- }
989
- .sg-wrapper-less .glyphicon-edit:before {
990
- content: "\e065";
991
- }
992
- .sg-wrapper-less .glyphicon-share:before {
993
- content: "\e066";
994
- }
995
- .sg-wrapper-less .glyphicon-check:before {
996
- content: "\e067";
997
- }
998
- .sg-wrapper-less .glyphicon-move:before {
999
- content: "\e068";
1000
- }
1001
- .sg-wrapper-less .glyphicon-step-backward:before {
1002
- content: "\e069";
1003
- }
1004
- .sg-wrapper-less .glyphicon-fast-backward:before {
1005
- content: "\e070";
1006
- }
1007
- .sg-wrapper-less .glyphicon-backward:before {
1008
- content: "\e071";
1009
- }
1010
- .sg-wrapper-less .glyphicon-play:before {
1011
- content: "\e072";
1012
- }
1013
- .sg-wrapper-less .glyphicon-pause:before {
1014
- content: "\e073";
1015
- }
1016
- .sg-wrapper-less .glyphicon-stop:before {
1017
- content: "\e074";
1018
- }
1019
- .sg-wrapper-less .glyphicon-forward:before {
1020
- content: "\e075";
1021
- }
1022
- .sg-wrapper-less .glyphicon-fast-forward:before {
1023
- content: "\e076";
1024
- }
1025
- .sg-wrapper-less .glyphicon-step-forward:before {
1026
- content: "\e077";
1027
- }
1028
- .sg-wrapper-less .glyphicon-eject:before {
1029
- content: "\e078";
1030
- }
1031
- .sg-wrapper-less .glyphicon-chevron-left:before {
1032
- content: "\e079";
1033
- }
1034
- .sg-wrapper-less .glyphicon-chevron-right:before {
1035
- content: "\e080";
1036
- }
1037
- .sg-wrapper-less .glyphicon-plus-sign:before {
1038
- content: "\e081";
1039
- }
1040
- .sg-wrapper-less .glyphicon-minus-sign:before {
1041
- content: "\e082";
1042
- }
1043
- .sg-wrapper-less .glyphicon-remove-sign:before {
1044
- content: "\e083";
1045
- }
1046
- .sg-wrapper-less .glyphicon-ok-sign:before {
1047
- content: "\e084";
1048
- }
1049
- .sg-wrapper-less .glyphicon-question-sign:before {
1050
- content: "\e085";
1051
- }
1052
- .sg-wrapper-less .glyphicon-info-sign:before {
1053
- content: "\e086";
1054
- }
1055
- .sg-wrapper-less .glyphicon-screenshot:before {
1056
- content: "\e087";
1057
- }
1058
- .sg-wrapper-less .glyphicon-remove-circle:before {
1059
- content: "\e088";
1060
- }
1061
- .sg-wrapper-less .glyphicon-ok-circle:before {
1062
- content: "\e089";
1063
- }
1064
- .sg-wrapper-less .glyphicon-ban-circle:before {
1065
- content: "\e090";
1066
- }
1067
- .sg-wrapper-less .glyphicon-arrow-left:before {
1068
- content: "\e091";
1069
- }
1070
- .sg-wrapper-less .glyphicon-arrow-right:before {
1071
- content: "\e092";
1072
- }
1073
- .sg-wrapper-less .glyphicon-arrow-up:before {
1074
- content: "\e093";
1075
- }
1076
- .sg-wrapper-less .glyphicon-arrow-down:before {
1077
- content: "\e094";
1078
- }
1079
- .sg-wrapper-less .glyphicon-share-alt:before {
1080
- content: "\e095";
1081
- }
1082
- .sg-wrapper-less .glyphicon-resize-full:before {
1083
- content: "\e096";
1084
- }
1085
- .sg-wrapper-less .glyphicon-resize-small:before {
1086
- content: "\e097";
1087
- }
1088
- .sg-wrapper-less .glyphicon-exclamation-sign:before {
1089
- content: "\e101";
1090
- }
1091
- .sg-wrapper-less .glyphicon-gift:before {
1092
- content: "\e102";
1093
- }
1094
- .sg-wrapper-less .glyphicon-leaf:before {
1095
- content: "\e103";
1096
- }
1097
- .sg-wrapper-less .glyphicon-fire:before {
1098
- content: "\e104";
1099
- }
1100
- .sg-wrapper-less .glyphicon-eye-open:before {
1101
- content: "\e105";
1102
- }
1103
- .sg-wrapper-less .glyphicon-eye-close:before {
1104
- content: "\e106";
1105
- }
1106
- .sg-wrapper-less .glyphicon-warning-sign:before {
1107
- content: "\e107";
1108
- }
1109
- .sg-wrapper-less .glyphicon-plane:before {
1110
- content: "\e108";
1111
- }
1112
- .sg-wrapper-less .glyphicon-calendar:before {
1113
- content: "\e109";
1114
- }
1115
- .sg-wrapper-less .glyphicon-random:before {
1116
- content: "\e110";
1117
- }
1118
- .sg-wrapper-less .glyphicon-comment:before {
1119
- content: "\e111";
1120
- }
1121
- .sg-wrapper-less .glyphicon-magnet:before {
1122
- content: "\e112";
1123
- }
1124
- .sg-wrapper-less .glyphicon-chevron-up:before {
1125
- content: "\e113";
1126
- }
1127
- .sg-wrapper-less .glyphicon-chevron-down:before {
1128
- content: "\e114";
1129
- }
1130
- .sg-wrapper-less .glyphicon-retweet:before {
1131
- content: "\e115";
1132
- }
1133
- .sg-wrapper-less .glyphicon-shopping-cart:before {
1134
- content: "\e116";
1135
- }
1136
- .sg-wrapper-less .glyphicon-folder-close:before {
1137
- content: "\e117";
1138
- }
1139
- .sg-wrapper-less .glyphicon-folder-open:before {
1140
- content: "\e118";
1141
- }
1142
- .sg-wrapper-less .glyphicon-resize-vertical:before {
1143
- content: "\e119";
1144
- }
1145
- .sg-wrapper-less .glyphicon-resize-horizontal:before {
1146
- content: "\e120";
1147
- }
1148
- .sg-wrapper-less .glyphicon-hdd:before {
1149
- content: "\e121";
1150
- }
1151
- .sg-wrapper-less .glyphicon-bullhorn:before {
1152
- content: "\e122";
1153
- }
1154
- .sg-wrapper-less .glyphicon-bell:before {
1155
- content: "\e123";
1156
- }
1157
- .sg-wrapper-less .glyphicon-certificate:before {
1158
- content: "\e124";
1159
- }
1160
- .sg-wrapper-less .glyphicon-thumbs-up:before {
1161
- content: "\e125";
1162
- }
1163
- .sg-wrapper-less .glyphicon-thumbs-down:before {
1164
- content: "\e126";
1165
- }
1166
- .sg-wrapper-less .glyphicon-hand-right:before {
1167
- content: "\e127";
1168
- }
1169
- .sg-wrapper-less .glyphicon-hand-left:before {
1170
- content: "\e128";
1171
- }
1172
- .sg-wrapper-less .glyphicon-hand-up:before {
1173
- content: "\e129";
1174
- }
1175
- .sg-wrapper-less .glyphicon-hand-down:before {
1176
- content: "\e130";
1177
- }
1178
- .sg-wrapper-less .glyphicon-circle-arrow-right:before {
1179
- content: "\e131";
1180
- }
1181
- .sg-wrapper-less .glyphicon-circle-arrow-left:before {
1182
- content: "\e132";
1183
- }
1184
- .sg-wrapper-less .glyphicon-circle-arrow-up:before {
1185
- content: "\e133";
1186
- }
1187
- .sg-wrapper-less .glyphicon-circle-arrow-down:before {
1188
- content: "\e134";
1189
- }
1190
- .sg-wrapper-less .glyphicon-globe:before {
1191
- content: "\e135";
1192
- }
1193
- .sg-wrapper-less .glyphicon-wrench:before {
1194
- content: "\e136";
1195
- }
1196
- .sg-wrapper-less .glyphicon-tasks:before {
1197
- content: "\e137";
1198
- }
1199
- .sg-wrapper-less .glyphicon-filter:before {
1200
- content: "\e138";
1201
- }
1202
- .sg-wrapper-less .glyphicon-briefcase:before {
1203
- content: "\e139";
1204
- }
1205
- .sg-wrapper-less .glyphicon-fullscreen:before {
1206
- content: "\e140";
1207
- }
1208
- .sg-wrapper-less .glyphicon-dashboard:before {
1209
- content: "\e141";
1210
- }
1211
- .sg-wrapper-less .glyphicon-paperclip:before {
1212
- content: "\e142";
1213
- }
1214
- .sg-wrapper-less .glyphicon-heart-empty:before {
1215
- content: "\e143";
1216
- }
1217
- .sg-wrapper-less .glyphicon-link:before {
1218
- content: "\e144";
1219
- }
1220
- .sg-wrapper-less .glyphicon-phone:before {
1221
- content: "\e145";
1222
- }
1223
- .sg-wrapper-less .glyphicon-pushpin:before {
1224
- content: "\e146";
1225
- }
1226
- .sg-wrapper-less .glyphicon-usd:before {
1227
- content: "\e148";
1228
- }
1229
- .sg-wrapper-less .glyphicon-gbp:before {
1230
- content: "\e149";
1231
- }
1232
- .sg-wrapper-less .glyphicon-sort:before {
1233
- content: "\e150";
1234
- }
1235
- .sg-wrapper-less .glyphicon-sort-by-alphabet:before {
1236
- content: "\e151";
1237
- }
1238
- .sg-wrapper-less .glyphicon-sort-by-alphabet-alt:before {
1239
- content: "\e152";
1240
- }
1241
- .sg-wrapper-less .glyphicon-sort-by-order:before {
1242
- content: "\e153";
1243
- }
1244
- .sg-wrapper-less .glyphicon-sort-by-order-alt:before {
1245
- content: "\e154";
1246
- }
1247
- .sg-wrapper-less .glyphicon-sort-by-attributes:before {
1248
- content: "\e155";
1249
- }
1250
- .sg-wrapper-less .glyphicon-sort-by-attributes-alt:before {
1251
- content: "\e156";
1252
- }
1253
- .sg-wrapper-less .glyphicon-unchecked:before {
1254
- content: "\e157";
1255
- }
1256
- .sg-wrapper-less .glyphicon-expand:before {
1257
- content: "\e158";
1258
- }
1259
- .sg-wrapper-less .glyphicon-collapse-down:before {
1260
- content: "\e159";
1261
- }
1262
- .sg-wrapper-less .glyphicon-collapse-up:before {
1263
- content: "\e160";
1264
- }
1265
- .sg-wrapper-less .glyphicon-log-in:before {
1266
- content: "\e161";
1267
- }
1268
- .sg-wrapper-less .glyphicon-flash:before {
1269
- content: "\e162";
1270
- }
1271
- .sg-wrapper-less .glyphicon-log-out:before {
1272
- content: "\e163";
1273
- }
1274
- .sg-wrapper-less .glyphicon-new-window:before {
1275
- content: "\e164";
1276
- }
1277
- .sg-wrapper-less .glyphicon-record:before {
1278
- content: "\e165";
1279
- }
1280
- .sg-wrapper-less .glyphicon-save:before {
1281
- content: "\e166";
1282
- }
1283
- .sg-wrapper-less .glyphicon-open:before {
1284
- content: "\e167";
1285
- }
1286
- .sg-wrapper-less .glyphicon-saved:before {
1287
- content: "\e168";
1288
- }
1289
- .sg-wrapper-less .glyphicon-import:before {
1290
- content: "\e169";
1291
- }
1292
- .sg-wrapper-less .glyphicon-export:before {
1293
- content: "\e170";
1294
- }
1295
- .sg-wrapper-less .glyphicon-send:before {
1296
- content: "\e171";
1297
- }
1298
- .sg-wrapper-less .glyphicon-floppy-disk:before {
1299
- content: "\e172";
1300
- }
1301
- .sg-wrapper-less .glyphicon-floppy-saved:before {
1302
- content: "\e173";
1303
- }
1304
- .sg-wrapper-less .glyphicon-floppy-remove:before {
1305
- content: "\e174";
1306
- }
1307
- .sg-wrapper-less .glyphicon-floppy-save:before {
1308
- content: "\e175";
1309
- }
1310
- .sg-wrapper-less .glyphicon-floppy-open:before {
1311
- content: "\e176";
1312
- }
1313
- .sg-wrapper-less .glyphicon-credit-card:before {
1314
- content: "\e177";
1315
- }
1316
- .sg-wrapper-less .glyphicon-transfer:before {
1317
- content: "\e178";
1318
- }
1319
- .sg-wrapper-less .glyphicon-cutlery:before {
1320
- content: "\e179";
1321
- }
1322
- .sg-wrapper-less .glyphicon-header:before {
1323
- content: "\e180";
1324
- }
1325
- .sg-wrapper-less .glyphicon-compressed:before {
1326
- content: "\e181";
1327
- }
1328
- .sg-wrapper-less .glyphicon-earphone:before {
1329
- content: "\e182";
1330
- }
1331
- .sg-wrapper-less .glyphicon-phone-alt:before {
1332
- content: "\e183";
1333
- }
1334
- .sg-wrapper-less .glyphicon-tower:before {
1335
- content: "\e184";
1336
- }
1337
- .sg-wrapper-less .glyphicon-stats:before {
1338
- content: "\e185";
1339
- }
1340
- .sg-wrapper-less .glyphicon-sd-video:before {
1341
- content: "\e186";
1342
- }
1343
- .sg-wrapper-less .glyphicon-hd-video:before {
1344
- content: "\e187";
1345
- }
1346
- .sg-wrapper-less .glyphicon-subtitles:before {
1347
- content: "\e188";
1348
- }
1349
- .sg-wrapper-less .glyphicon-sound-stereo:before {
1350
- content: "\e189";
1351
- }
1352
- .sg-wrapper-less .glyphicon-sound-dolby:before {
1353
- content: "\e190";
1354
- }
1355
- .sg-wrapper-less .glyphicon-sound-5-1:before {
1356
- content: "\e191";
1357
- }
1358
- .sg-wrapper-less .glyphicon-sound-6-1:before {
1359
- content: "\e192";
1360
- }
1361
- .sg-wrapper-less .glyphicon-sound-7-1:before {
1362
- content: "\e193";
1363
- }
1364
- .sg-wrapper-less .glyphicon-copyright-mark:before {
1365
- content: "\e194";
1366
- }
1367
- .sg-wrapper-less .glyphicon-registration-mark:before {
1368
- content: "\e195";
1369
- }
1370
- .sg-wrapper-less .glyphicon-cloud-download:before {
1371
- content: "\e197";
1372
- }
1373
- .sg-wrapper-less .glyphicon-cloud-upload:before {
1374
- content: "\e198";
1375
- }
1376
- .sg-wrapper-less .glyphicon-tree-conifer:before {
1377
- content: "\e199";
1378
- }
1379
- .sg-wrapper-less .glyphicon-tree-deciduous:before {
1380
- content: "\e200";
1381
- }
1382
- .sg-wrapper-less .glyphicon-cd:before {
1383
- content: "\e201";
1384
- }
1385
- .sg-wrapper-less .glyphicon-save-file:before {
1386
- content: "\e202";
1387
- }
1388
- .sg-wrapper-less .glyphicon-open-file:before {
1389
- content: "\e203";
1390
- }
1391
- .sg-wrapper-less .glyphicon-level-up:before {
1392
- content: "\e204";
1393
- }
1394
- .sg-wrapper-less .glyphicon-copy:before {
1395
- content: "\e205";
1396
- }
1397
- .sg-wrapper-less .glyphicon-paste:before {
1398
- content: "\e206";
1399
- }
1400
- .sg-wrapper-less .glyphicon-alert:before {
1401
- content: "\e209";
1402
- }
1403
- .sg-wrapper-less .glyphicon-equalizer:before {
1404
- content: "\e210";
1405
- }
1406
- .sg-wrapper-less .glyphicon-king:before {
1407
- content: "\e211";
1408
- }
1409
- .sg-wrapper-less .glyphicon-queen:before {
1410
- content: "\e212";
1411
- }
1412
- .sg-wrapper-less .glyphicon-pawn:before {
1413
- content: "\e213";
1414
- }
1415
- .sg-wrapper-less .glyphicon-bishop:before {
1416
- content: "\e214";
1417
- }
1418
- .sg-wrapper-less .glyphicon-knight:before {
1419
- content: "\e215";
1420
- }
1421
- .sg-wrapper-less .glyphicon-baby-formula:before {
1422
- content: "\e216";
1423
- }
1424
- .sg-wrapper-less .glyphicon-tent:before {
1425
- content: "\26fa";
1426
- }
1427
- .sg-wrapper-less .glyphicon-blackboard:before {
1428
- content: "\e218";
1429
- }
1430
- .sg-wrapper-less .glyphicon-bed:before {
1431
- content: "\e219";
1432
- }
1433
- .sg-wrapper-less .glyphicon-apple:before {
1434
- content: "\f8ff";
1435
- }
1436
- .sg-wrapper-less .glyphicon-erase:before {
1437
- content: "\e221";
1438
- }
1439
- .sg-wrapper-less .glyphicon-hourglass:before {
1440
- content: "\231b";
1441
- }
1442
- .sg-wrapper-less .glyphicon-lamp:before {
1443
- content: "\e223";
1444
- }
1445
- .sg-wrapper-less .glyphicon-duplicate:before {
1446
- content: "\e224";
1447
- }
1448
- .sg-wrapper-less .glyphicon-piggy-bank:before {
1449
- content: "\e225";
1450
- }
1451
- .sg-wrapper-less .glyphicon-scissors:before {
1452
- content: "\e226";
1453
- }
1454
- .sg-wrapper-less .glyphicon-bitcoin:before {
1455
- content: "\e227";
1456
- }
1457
- .sg-wrapper-less .glyphicon-btc:before {
1458
- content: "\e227";
1459
- }
1460
- .sg-wrapper-less .glyphicon-xbt:before {
1461
- content: "\e227";
1462
- }
1463
- .sg-wrapper-less .glyphicon-yen:before {
1464
- content: "\00a5";
1465
- }
1466
- .sg-wrapper-less .glyphicon-jpy:before {
1467
- content: "\00a5";
1468
- }
1469
- .sg-wrapper-less .glyphicon-ruble:before {
1470
- content: "\20bd";
1471
- }
1472
- .sg-wrapper-less .glyphicon-rub:before {
1473
- content: "\20bd";
1474
- }
1475
- .sg-wrapper-less .glyphicon-scale:before {
1476
- content: "\e230";
1477
- }
1478
- .sg-wrapper-less .glyphicon-ice-lolly:before {
1479
- content: "\e231";
1480
- }
1481
- .sg-wrapper-less .glyphicon-ice-lolly-tasted:before {
1482
- content: "\e232";
1483
- }
1484
- .sg-wrapper-less .glyphicon-education:before {
1485
- content: "\e233";
1486
- }
1487
- .sg-wrapper-less .glyphicon-option-horizontal:before {
1488
- content: "\e234";
1489
- }
1490
- .sg-wrapper-less .glyphicon-option-vertical:before {
1491
- content: "\e235";
1492
- }
1493
- .sg-wrapper-less .glyphicon-menu-hamburger:before {
1494
- content: "\e236";
1495
- }
1496
- .sg-wrapper-less .glyphicon-modal-window:before {
1497
- content: "\e237";
1498
- }
1499
- .sg-wrapper-less .glyphicon-oil:before {
1500
- content: "\e238";
1501
- }
1502
- .sg-wrapper-less .glyphicon-grain:before {
1503
- content: "\e239";
1504
- }
1505
- .sg-wrapper-less .glyphicon-sunglasses:before {
1506
- content: "\e240";
1507
- }
1508
- .sg-wrapper-less .glyphicon-text-size:before {
1509
- content: "\e241";
1510
- }
1511
- .sg-wrapper-less .glyphicon-text-color:before {
1512
- content: "\e242";
1513
- }
1514
- .sg-wrapper-less .glyphicon-text-background:before {
1515
- content: "\e243";
1516
- }
1517
- .sg-wrapper-less .glyphicon-object-align-top:before {
1518
- content: "\e244";
1519
- }
1520
- .sg-wrapper-less .glyphicon-object-align-bottom:before {
1521
- content: "\e245";
1522
- }
1523
- .sg-wrapper-less .glyphicon-object-align-horizontal:before {
1524
- content: "\e246";
1525
- }
1526
- .sg-wrapper-less .glyphicon-object-align-left:before {
1527
- content: "\e247";
1528
- }
1529
- .sg-wrapper-less .glyphicon-object-align-vertical:before {
1530
- content: "\e248";
1531
- }
1532
- .sg-wrapper-less .glyphicon-object-align-right:before {
1533
- content: "\e249";
1534
- }
1535
- .sg-wrapper-less .glyphicon-triangle-right:before {
1536
- content: "\e250";
1537
- }
1538
- .sg-wrapper-less .glyphicon-triangle-left:before {
1539
- content: "\e251";
1540
- }
1541
- .sg-wrapper-less .glyphicon-triangle-bottom:before {
1542
- content: "\e252";
1543
- }
1544
- .sg-wrapper-less .glyphicon-triangle-top:before {
1545
- content: "\e253";
1546
- }
1547
- .sg-wrapper-less .glyphicon-console:before {
1548
- content: "\e254";
1549
- }
1550
- .sg-wrapper-less .glyphicon-superscript:before {
1551
- content: "\e255";
1552
- }
1553
- .sg-wrapper-less .glyphicon-subscript:before {
1554
- content: "\e256";
1555
- }
1556
- .sg-wrapper-less .glyphicon-menu-left:before {
1557
- content: "\e257";
1558
- }
1559
- .sg-wrapper-less .glyphicon-menu-right:before {
1560
- content: "\e258";
1561
- }
1562
- .sg-wrapper-less .glyphicon-menu-down:before {
1563
- content: "\e259";
1564
- }
1565
- .sg-wrapper-less .glyphicon-menu-up:before {
1566
- content: "\e260";
1567
- }
1568
- .sg-wrapper-less * {
1569
- -webkit-box-sizing: border-box;
1570
- -moz-box-sizing: border-box;
1571
- box-sizing: border-box;
1572
- }
1573
- .sg-wrapper-less *:before,
1574
- .sg-wrapper-less *:after {
1575
- -webkit-box-sizing: border-box;
1576
- -moz-box-sizing: border-box;
1577
- box-sizing: border-box;
1578
- }
1579
- .sg-wrapper-less html {
1580
- font-size: 10px;
1581
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
1582
- }
1583
- .sg-wrapper-less #sg-wrapper {
1584
- font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
1585
- font-size: 15px;
1586
- line-height: 1.42857143;
1587
- color: #333333;
1588
- background-color: #ffffff;
1589
- }
1590
- .sg-wrapper-less input,
1591
- .sg-wrapper-less button,
1592
- .sg-wrapper-less select,
1593
- .sg-wrapper-less textarea {
1594
- font-family: inherit;
1595
- font-size: inherit;
1596
- line-height: inherit;
1597
- }
1598
- .sg-wrapper-less a {
1599
- color: #0021C8;
1600
- text-decoration: none;
1601
- }
1602
- .sg-wrapper-less a:hover,
1603
- .sg-wrapper-less a:focus {
1604
- color: #165ba8;
1605
- text-decoration: none;
1606
- }
1607
- .sg-wrapper-less a:focus {
1608
- outline: thin dotted;
1609
- outline: 5px auto -webkit-focus-ring-color;
1610
- outline-offset: -2px;
1611
- }
1612
- .sg-wrapper-less figure {
1613
- margin: 0;
1614
- }
1615
- .sg-wrapper-less img {
1616
- vertical-align: middle;
1617
- }
1618
- .sg-wrapper-less .img-responsive,
1619
- .sg-wrapper-less .thumbnail > img,
1620
- .sg-wrapper-less .thumbnail a > img,
1621
- .sg-wrapper-less .carousel-inner > .item > img,
1622
- .sg-wrapper-less .carousel-inner > .item > a > img {
1623
- display: block;
1624
- max-width: 100%;
1625
- height: auto;
1626
- }
1627
- .sg-wrapper-less .img-rounded {
1628
- border-radius: 0;
1629
- }
1630
- .sg-wrapper-less .img-thumbnail {
1631
- padding: 4px;
1632
- line-height: 1.42857143;
1633
- background-color: #ffffff;
1634
- border: 1px solid #dddddd;
1635
- border-radius: 0;
1636
- -webkit-transition: all 0.2s ease-in-out;
1637
- -o-transition: all 0.2s ease-in-out;
1638
- transition: all 0.2s ease-in-out;
1639
- display: inline-block;
1640
- max-width: 100%;
1641
- height: auto;
1642
- }
1643
- .sg-wrapper-less .img-circle {
1644
- border-radius: 50%;
1645
- }
1646
- .sg-wrapper-less hr {
1647
- margin-top: 21px;
1648
- margin-bottom: 21px;
1649
- border: 0;
1650
- border-top: 1px solid #e6e6e6;
1651
- }
1652
- .sg-wrapper-less .sr-only {
1653
- position: absolute;
1654
- width: 1px;
1655
- height: 1px;
1656
- margin: -1px;
1657
- padding: 0;
1658
- overflow: hidden;
1659
- clip: rect(0, 0, 0, 0);
1660
- border: 0;
1661
- }
1662
- .sg-wrapper-less .sr-only-focusable:active,
1663
- .sg-wrapper-less .sr-only-focusable:focus {
1664
- position: static;
1665
- width: auto;
1666
- height: auto;
1667
- margin: 0;
1668
- overflow: visible;
1669
- clip: auto;
1670
- }
1671
- .sg-wrapper-less [role="button"] {
1672
- cursor: pointer;
1673
- }
1674
- .sg-wrapper-less h1,
1675
- .sg-wrapper-less h2,
1676
- .sg-wrapper-less h3,
1677
- .sg-wrapper-less h4,
1678
- .sg-wrapper-less h5,
1679
- .sg-wrapper-less h6,
1680
- .sg-wrapper-less .h1,
1681
- .sg-wrapper-less .h2,
1682
- .sg-wrapper-less .h3,
1683
- .sg-wrapper-less .h4,
1684
- .sg-wrapper-less .h5,
1685
- .sg-wrapper-less .h6 {
1686
- font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
1687
- font-weight: 300;
1688
- line-height: 1.1;
1689
- color: inherit;
1690
- }
1691
- .sg-wrapper-less h1 small,
1692
- .sg-wrapper-less h2 small,
1693
- .sg-wrapper-less h3 small,
1694
- .sg-wrapper-less h4 small,
1695
- .sg-wrapper-less h5 small,
1696
- .sg-wrapper-less h6 small,
1697
- .sg-wrapper-less .h1 small,
1698
- .sg-wrapper-less .h2 small,
1699
- .sg-wrapper-less .h3 small,
1700
- .sg-wrapper-less .h4 small,
1701
- .sg-wrapper-less .h5 small,
1702
- .sg-wrapper-less .h6 small,
1703
- .sg-wrapper-less h1 .small,
1704
- .sg-wrapper-less h2 .small,
1705
- .sg-wrapper-less h3 .small,
1706
- .sg-wrapper-less h4 .small,
1707
- .sg-wrapper-less h5 .small,
1708
- .sg-wrapper-less h6 .small,
1709
- .sg-wrapper-less .h1 .small,
1710
- .sg-wrapper-less .h2 .small,
1711
- .sg-wrapper-less .h3 .small,
1712
- .sg-wrapper-less .h4 .small,
1713
- .sg-wrapper-less .h5 .small,
1714
- .sg-wrapper-less .h6 .small {
1715
- font-weight: normal;
1716
- line-height: 1;
1717
- color: #999999;
1718
- }
1719
- .sg-wrapper-less h1,
1720
- .sg-wrapper-less .h1,
1721
- .sg-wrapper-less h2,
1722
- .sg-wrapper-less .h2,
1723
- .sg-wrapper-less h3,
1724
- .sg-wrapper-less .h3 {
1725
- margin-top: 21px;
1726
- margin-bottom: 10.5px;
1727
- }
1728
- .sg-wrapper-less h1 small,
1729
- .sg-wrapper-less .h1 small,
1730
- .sg-wrapper-less h2 small,
1731
- .sg-wrapper-less .h2 small,
1732
- .sg-wrapper-less h3 small,
1733
- .sg-wrapper-less .h3 small,
1734
- .sg-wrapper-less h1 .small,
1735
- .sg-wrapper-less .h1 .small,
1736
- .sg-wrapper-less h2 .small,
1737
- .sg-wrapper-less .h2 .small,
1738
- .sg-wrapper-less h3 .small,
1739
- .sg-wrapper-less .h3 .small {
1740
- font-size: 65%;
1741
- }
1742
- .sg-wrapper-less h4,
1743
- .sg-wrapper-less .h4,
1744
- .sg-wrapper-less h5,
1745
- .sg-wrapper-less .h5,
1746
- .sg-wrapper-less h6,
1747
- .sg-wrapper-less .h6 {
1748
- margin-top: 10.5px;
1749
- margin-bottom: 10.5px;
1750
- }
1751
- .sg-wrapper-less h4 small,
1752
- .sg-wrapper-less .h4 small,
1753
- .sg-wrapper-less h5 small,
1754
- .sg-wrapper-less .h5 small,
1755
- .sg-wrapper-less h6 small,
1756
- .sg-wrapper-less .h6 small,
1757
- .sg-wrapper-less h4 .small,
1758
- .sg-wrapper-less .h4 .small,
1759
- .sg-wrapper-less h5 .small,
1760
- .sg-wrapper-less .h5 .small,
1761
- .sg-wrapper-less h6 .small,
1762
- .sg-wrapper-less .h6 .small {
1763
- font-size: 75%;
1764
- }
1765
- .sg-wrapper-less h1,
1766
- .sg-wrapper-less .h1 {
1767
- font-size: 39px;
1768
- }
1769
- .sg-wrapper-less h2,
1770
- .sg-wrapper-less .h2 {
1771
- font-size: 32px;
1772
- }
1773
- .sg-wrapper-less h3,
1774
- .sg-wrapper-less .h3 {
1775
- font-size: 26px;
1776
- }
1777
- .sg-wrapper-less h4,
1778
- .sg-wrapper-less .h4 {
1779
- font-size: 19px;
1780
- }
1781
- .sg-wrapper-less h5,
1782
- .sg-wrapper-less .h5 {
1783
- font-size: 15px;
1784
- }
1785
- .sg-wrapper-less h6,
1786
- .sg-wrapper-less .h6 {
1787
- font-size: 13px;
1788
- }
1789
- .sg-wrapper-less p {
1790
- margin: 0 0 9.5px;
1791
- }
1792
- .sg-wrapper-less .lead {
1793
- margin-bottom: 21px;
1794
- font-size: 17px;
1795
- font-weight: 300;
1796
- line-height: 1.4;
1797
- }
1798
- @media (min-width: 768px) {
1799
- .sg-wrapper-less .lead {
1800
- font-size: 22.5px;
1801
- }
1802
- }
1803
- .sg-wrapper-less small,
1804
- .sg-wrapper-less .small {
1805
- font-size: 86%;
1806
- }
1807
- .sg-wrapper-less mark,
1808
- .sg-wrapper-less .mark {
1809
- background-color: #ff7518;
1810
- padding: .2em;
1811
- }
1812
- .sg-wrapper-less .text-left {
1813
- text-align: left;
1814
- }
1815
- .sg-wrapper-less .text-right {
1816
- text-align: right;
1817
- }
1818
- .sg-wrapper-less .text-center {
1819
- text-align: center;
1820
- }
1821
- .sg-wrapper-less .text-justify {
1822
- text-align: justify;
1823
- }
1824
- .sg-wrapper-less .text-nowrap {
1825
- white-space: nowrap;
1826
- }
1827
- .sg-wrapper-less .text-lowercase {
1828
- text-transform: lowercase;
1829
- }
1830
- .sg-wrapper-less .text-uppercase {
1831
- text-transform: uppercase;
1832
- }
1833
- .sg-wrapper-less .text-capitalize {
1834
- text-transform: capitalize;
1835
- }
1836
- .sg-wrapper-less .text-muted {
1837
- color: #999999;
1838
- }
1839
- .sg-wrapper-less .text-primary {
1840
- color: #2780e3;
1841
- }
1842
- .sg-wrapper-less a.text-primary:hover {
1843
- color: #1967be;
1844
- }
1845
- .sg-wrapper-less .text-success {
1846
- color: #ffffff;
1847
- }
1848
- .sg-wrapper-less a.text-success:hover {
1849
- color: #e6e6e6;
1850
- }
1851
- .sg-wrapper-less .text-info {
1852
- color: #ffffff;
1853
- }
1854
- .sg-wrapper-less a.text-info:hover {
1855
- color: #e6e6e6;
1856
- }
1857
- .sg-wrapper-less .text-warning {
1858
- color: #ffffff;
1859
- }
1860
- .sg-wrapper-less a.text-warning:hover {
1861
- color: #e6e6e6;
1862
- }
1863
- .sg-wrapper-less .text-danger {
1864
- color: #ffffff;
1865
- }
1866
- .sg-wrapper-less a.text-danger:hover {
1867
- color: #e6e6e6;
1868
- }
1869
- .sg-wrapper-less .bg-primary {
1870
- color: #fff;
1871
- background-color: #2780e3;
1872
- }
1873
- .sg-wrapper-less a.bg-primary:hover {
1874
- background-color: #1967be;
1875
- }
1876
- .sg-wrapper-less .bg-success {
1877
- background-color: #3fb618;
1878
- }
1879
- .sg-wrapper-less a.bg-success:hover {
1880
- background-color: #2f8912;
1881
- }
1882
- .sg-wrapper-less .bg-info {
1883
- background-color: #9954bb;
1884
- }
1885
- .sg-wrapper-less a.bg-info:hover {
1886
- background-color: #7e3f9d;
1887
- }
1888
- .sg-wrapper-less .bg-warning {
1889
- background-color: #ff7518;
1890
- }
1891
- .sg-wrapper-less a.bg-warning:hover {
1892
- background-color: #e45c00;
1893
- }
1894
- .sg-wrapper-less .bg-danger {
1895
- background-color: #ff0039;
1896
- }
1897
- .sg-wrapper-less a.bg-danger:hover {
1898
- background-color: #cc002e;
1899
- }
1900
- .sg-wrapper-less .page-header {
1901
- padding-bottom: 9.5px;
1902
- margin: 42px 0 21px;
1903
- border-bottom: 1px solid #e6e6e6;
1904
- }
1905
- .sg-wrapper-less ul,
1906
- .sg-wrapper-less ol {
1907
- margin-top: 0;
1908
- margin-bottom: 10.5px;
1909
- }
1910
- .sg-wrapper-less ul ul,
1911
- .sg-wrapper-less ol ul,
1912
- .sg-wrapper-less ul ol,
1913
- .sg-wrapper-less ol ol {
1914
- margin-bottom: 0;
1915
- }
1916
- .sg-wrapper-less .list-unstyled {
1917
- padding-left: 0;
1918
- list-style: none;
1919
- }
1920
- .sg-wrapper-less .list-inline {
1921
- padding-left: 0;
1922
- list-style: none;
1923
- margin-left: -5px;
1924
- }
1925
- .sg-wrapper-less .list-inline > li {
1926
- display: inline-block;
1927
- padding-left: 5px;
1928
- padding-right: 5px;
1929
- }
1930
- .sg-wrapper-less dl {
1931
- margin-top: 0;
1932
- margin-bottom: 21px;
1933
- }
1934
- .sg-wrapper-less dt,
1935
- .sg-wrapper-less dd {
1936
- line-height: 1.42857143;
1937
- }
1938
- .sg-wrapper-less dt {
1939
- font-weight: bold;
1940
- }
1941
- .sg-wrapper-less dd {
1942
- margin-left: 0;
1943
- }
1944
- @media (min-width: 768px) {
1945
- .sg-wrapper-less .dl-horizontal dt {
1946
- float: left;
1947
- width: 160px;
1948
- clear: left;
1949
- text-align: right;
1950
- overflow: hidden;
1951
- text-overflow: ellipsis;
1952
- white-space: nowrap;
1953
- }
1954
- .sg-wrapper-less .dl-horizontal dd {
1955
- margin-left: 180px;
1956
- }
1957
- }
1958
- .sg-wrapper-less abbr[title],
1959
- .sg-wrapper-less abbr[data-original-title] {
1960
- cursor: help;
1961
- border-bottom: 1px dotted #999999;
1962
- }
1963
- .sg-wrapper-less .initialism {
1964
- font-size: 90%;
1965
- text-transform: uppercase;
1966
- }
1967
- .sg-wrapper-less blockquote {
1968
- padding: 10.5px 21px;
1969
- margin: 0 0 21px;
1970
- font-size: 18.75px;
1971
- border-left: 5px solid #e6e6e6;
1972
- }
1973
- .sg-wrapper-less blockquote p:last-child,
1974
- .sg-wrapper-less blockquote ul:last-child,
1975
- .sg-wrapper-less blockquote ol:last-child {
1976
- margin-bottom: 0;
1977
- }
1978
- .sg-wrapper-less blockquote footer,
1979
- .sg-wrapper-less blockquote small,
1980
- .sg-wrapper-less blockquote .small {
1981
- display: block;
1982
- font-size: 80%;
1983
- line-height: 1.42857143;
1984
- color: #999999;
1985
- }
1986
- .sg-wrapper-less blockquote footer:before,
1987
- .sg-wrapper-less blockquote small:before,
1988
- .sg-wrapper-less blockquote .small:before {
1989
- content: '\2014 \00A0';
1990
- }
1991
- .sg-wrapper-less .blockquote-reverse,
1992
- .sg-wrapper-less blockquote.pull-right {
1993
- padding-right: 15px;
1994
- padding-left: 0;
1995
- border-right: 5px solid #e6e6e6;
1996
- border-left: 0;
1997
- text-align: right;
1998
- }
1999
- .sg-wrapper-less .blockquote-reverse footer:before,
2000
- .sg-wrapper-less blockquote.pull-right footer:before,
2001
- .sg-wrapper-less .blockquote-reverse small:before,
2002
- .sg-wrapper-less blockquote.pull-right small:before,
2003
- .sg-wrapper-less .blockquote-reverse .small:before,
2004
- .sg-wrapper-less blockquote.pull-right .small:before {
2005
- content: '';
2006
- }
2007
- .sg-wrapper-less .blockquote-reverse footer:after,
2008
- .sg-wrapper-less blockquote.pull-right footer:after,
2009
- .sg-wrapper-less .blockquote-reverse small:after,
2010
- .sg-wrapper-less blockquote.pull-right small:after,
2011
- .sg-wrapper-less .blockquote-reverse .small:after,
2012
- .sg-wrapper-less blockquote.pull-right .small:after {
2013
- content: '\00A0 \2014';
2014
- }
2015
- .sg-wrapper-less address {
2016
- margin-bottom: 21px;
2017
- font-style: normal;
2018
- line-height: 1.42857143;
2019
- }
2020
- .sg-wrapper-less code,
2021
- .sg-wrapper-less kbd,
2022
- .sg-wrapper-less pre,
2023
- .sg-wrapper-less samp {
2024
- font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
2025
- }
2026
- .sg-wrapper-less code {
2027
- padding: 2px 4px;
2028
- font-size: 90%;
2029
- color: #c7254e;
2030
- background-color: #f9f2f4;
2031
- border-radius: 0;
2032
- }
2033
- .sg-wrapper-less kbd {
2034
- padding: 2px 4px;
2035
- font-size: 90%;
2036
- color: #ffffff;
2037
- background-color: #333333;
2038
- border-radius: 0;
2039
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
2040
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
2041
- }
2042
- .sg-wrapper-less kbd kbd {
2043
- padding: 0;
2044
- font-size: 100%;
2045
- font-weight: bold;
2046
- -webkit-box-shadow: none;
2047
- box-shadow: none;
2048
- }
2049
- .sg-wrapper-less pre {
2050
- display: block;
2051
- padding: 10px;
2052
- margin: 0 0 10.5px;
2053
- font-size: 14px;
2054
- line-height: 1.42857143;
2055
- word-break: break-all;
2056
- word-wrap: break-word;
2057
- color: #333333;
2058
- background-color: #f5f5f5;
2059
- border: 1px solid #cccccc;
2060
- border-radius: 0;
2061
- }
2062
- .sg-wrapper-less pre code {
2063
- padding: 0;
2064
- font-size: inherit;
2065
- color: inherit;
2066
- white-space: pre-wrap;
2067
- background-color: transparent;
2068
- border-radius: 0;
2069
- }
2070
- .sg-wrapper-less .pre-scrollable {
2071
- max-height: 340px;
2072
- overflow-y: scroll;
2073
- }
2074
- .sg-wrapper-less .container {
2075
- margin-right: auto;
2076
- margin-left: auto;
2077
- padding-left: 15px;
2078
- padding-right: 15px;
2079
- }
2080
- @media (min-width: 768px) {
2081
- .sg-wrapper-less .container {
2082
- width: 750px;
2083
- }
2084
- }
2085
- @media (min-width: 992px) {
2086
- .sg-wrapper-less .container {
2087
- width: 970px;
2088
- }
2089
- }
2090
- @media (min-width: 1200px) {
2091
- .sg-wrapper-less .container {
2092
- width: 1170px;
2093
- }
2094
- }
2095
- .sg-wrapper-less .container-fluid {
2096
- margin-right: auto;
2097
- margin-left: auto;
2098
- padding-left: 15px;
2099
- padding-right: 15px;
2100
- }
2101
- .sg-wrapper-less .row {
2102
- margin-left: -15px;
2103
- margin-right: -15px;
2104
- }
2105
- .sg-wrapper-less .col-xs-1,
2106
- .sg-wrapper-less .col-sm-1,
2107
- .sg-wrapper-less .col-md-1,
2108
- .sg-wrapper-less .col-lg-1,
2109
- .sg-wrapper-less .col-xs-2,
2110
- .sg-wrapper-less .col-sm-2,
2111
- .sg-wrapper-less .col-md-2,
2112
- .sg-wrapper-less .col-lg-2,
2113
- .sg-wrapper-less .col-xs-3,
2114
- .sg-wrapper-less .col-sm-3,
2115
- .sg-wrapper-less .col-md-3,
2116
- .sg-wrapper-less .col-lg-3,
2117
- .sg-wrapper-less .col-xs-4,
2118
- .sg-wrapper-less .col-sm-4,
2119
- .sg-wrapper-less .col-md-4,
2120
- .sg-wrapper-less .col-lg-4,
2121
- .sg-wrapper-less .col-xs-5,
2122
- .sg-wrapper-less .col-sm-5,
2123
- .sg-wrapper-less .col-md-5,
2124
- .sg-wrapper-less .col-lg-5,
2125
- .sg-wrapper-less .col-xs-6,
2126
- .sg-wrapper-less .col-sm-6,
2127
- .sg-wrapper-less .col-md-6,
2128
- .sg-wrapper-less .col-lg-6,
2129
- .sg-wrapper-less .col-xs-7,
2130
- .sg-wrapper-less .col-sm-7,
2131
- .sg-wrapper-less .col-md-7,
2132
- .sg-wrapper-less .col-lg-7,
2133
- .sg-wrapper-less .col-xs-8,
2134
- .sg-wrapper-less .col-sm-8,
2135
- .sg-wrapper-less .col-md-8,
2136
- .sg-wrapper-less .col-lg-8,
2137
- .sg-wrapper-less .col-xs-9,
2138
- .sg-wrapper-less .col-sm-9,
2139
- .sg-wrapper-less .col-md-9,
2140
- .sg-wrapper-less .col-lg-9,
2141
- .sg-wrapper-less .col-xs-10,
2142
- .sg-wrapper-less .col-sm-10,
2143
- .sg-wrapper-less .col-md-10,
2144
- .sg-wrapper-less .col-lg-10,
2145
- .sg-wrapper-less .col-xs-11,
2146
- .sg-wrapper-less .col-sm-11,
2147
- .sg-wrapper-less .col-md-11,
2148
- .sg-wrapper-less .col-lg-11,
2149
- .sg-wrapper-less .col-xs-12,
2150
- .sg-wrapper-less .col-sm-12,
2151
- .sg-wrapper-less .col-md-12,
2152
- .sg-wrapper-less .col-lg-12 {
2153
- position: relative;
2154
- min-height: 1px;
2155
- padding-left: 15px;
2156
- padding-right: 15px;
2157
- }
2158
- .sg-wrapper-less .col-xs-1,
2159
- .sg-wrapper-less .col-xs-2,
2160
- .sg-wrapper-less .col-xs-3,
2161
- .sg-wrapper-less .col-xs-4,
2162
- .sg-wrapper-less .col-xs-5,
2163
- .sg-wrapper-less .col-xs-6,
2164
- .sg-wrapper-less .col-xs-7,
2165
- .sg-wrapper-less .col-xs-8,
2166
- .sg-wrapper-less .col-xs-9,
2167
- .sg-wrapper-less .col-xs-10,
2168
- .sg-wrapper-less .col-xs-11,
2169
- .sg-wrapper-less .col-xs-12 {
2170
- float: left;
2171
- }
2172
- .sg-wrapper-less .col-xs-12 {
2173
- width: 100%;
2174
- }
2175
- .sg-wrapper-less .col-xs-11 {
2176
- width: 91.66666667%;
2177
- }
2178
- .sg-wrapper-less .col-xs-10 {
2179
- width: 83.33333333%;
2180
- }
2181
- .sg-wrapper-less .col-xs-9 {
2182
- width: 75%;
2183
- }
2184
- .sg-wrapper-less .col-xs-8 {
2185
- width: 66.66666667%;
2186
- }
2187
- .sg-wrapper-less .col-xs-7 {
2188
- width: 58.33333333%;
2189
- }
2190
- .sg-wrapper-less .col-xs-6 {
2191
- width: 50%;
2192
- }
2193
- .sg-wrapper-less .col-xs-5 {
2194
- width: 41.66666667%;
2195
- }
2196
- .sg-wrapper-less .col-xs-4 {
2197
- width: 33.33333333%;
2198
- }
2199
- .sg-wrapper-less .col-xs-3 {
2200
- width: 25%;
2201
- }
2202
- .sg-wrapper-less .col-xs-2 {
2203
- width: 16.66666667%;
2204
- }
2205
- .sg-wrapper-less .col-xs-1 {
2206
- width: 8.33333333%;
2207
- }
2208
- .sg-wrapper-less .col-xs-pull-12 {
2209
- right: 100%;
2210
- }
2211
- .sg-wrapper-less .col-xs-pull-11 {
2212
- right: 91.66666667%;
2213
- }
2214
- .sg-wrapper-less .col-xs-pull-10 {
2215
- right: 83.33333333%;
2216
- }
2217
- .sg-wrapper-less .col-xs-pull-9 {
2218
- right: 75%;
2219
- }
2220
- .sg-wrapper-less .col-xs-pull-8 {
2221
- right: 66.66666667%;
2222
- }
2223
- .sg-wrapper-less .col-xs-pull-7 {
2224
- right: 58.33333333%;
2225
- }
2226
- .sg-wrapper-less .col-xs-pull-6 {
2227
- right: 50%;
2228
- }
2229
- .sg-wrapper-less .col-xs-pull-5 {
2230
- right: 41.66666667%;
2231
- }
2232
- .sg-wrapper-less .col-xs-pull-4 {
2233
- right: 33.33333333%;
2234
- }
2235
- .sg-wrapper-less .col-xs-pull-3 {
2236
- right: 25%;
2237
- }
2238
- .sg-wrapper-less .col-xs-pull-2 {
2239
- right: 16.66666667%;
2240
- }
2241
- .sg-wrapper-less .col-xs-pull-1 {
2242
- right: 8.33333333%;
2243
- }
2244
- .sg-wrapper-less .col-xs-pull-0 {
2245
- right: auto;
2246
- }
2247
- .sg-wrapper-less .col-xs-push-12 {
2248
- left: 100%;
2249
- }
2250
- .sg-wrapper-less .col-xs-push-11 {
2251
- left: 91.66666667%;
2252
- }
2253
- .sg-wrapper-less .col-xs-push-10 {
2254
- left: 83.33333333%;
2255
- }
2256
- .sg-wrapper-less .col-xs-push-9 {
2257
- left: 75%;
2258
- }
2259
- .sg-wrapper-less .col-xs-push-8 {
2260
- left: 66.66666667%;
2261
- }
2262
- .sg-wrapper-less .col-xs-push-7 {
2263
- left: 58.33333333%;
2264
- }
2265
- .sg-wrapper-less .col-xs-push-6 {
2266
- left: 50%;
2267
- }
2268
- .sg-wrapper-less .col-xs-push-5 {
2269
- left: 41.66666667%;
2270
- }
2271
- .sg-wrapper-less .col-xs-push-4 {
2272
- left: 33.33333333%;
2273
- }
2274
- .sg-wrapper-less .col-xs-push-3 {
2275
- left: 25%;
2276
- }
2277
- .sg-wrapper-less .col-xs-push-2 {
2278
- left: 16.66666667%;
2279
- }
2280
- .sg-wrapper-less .col-xs-push-1 {
2281
- left: 8.33333333%;
2282
- }
2283
- .sg-wrapper-less .col-xs-push-0 {
2284
- left: auto;
2285
- }
2286
- .sg-wrapper-less .col-xs-offset-12 {
2287
- margin-left: 100%;
2288
- }
2289
- .sg-wrapper-less .col-xs-offset-11 {
2290
- margin-left: 91.66666667%;
2291
- }
2292
- .sg-wrapper-less .col-xs-offset-10 {
2293
- margin-left: 83.33333333%;
2294
- }
2295
- .sg-wrapper-less .col-xs-offset-9 {
2296
- margin-left: 75%;
2297
- }
2298
- .sg-wrapper-less .col-xs-offset-8 {
2299
- margin-left: 66.66666667%;
2300
- }
2301
- .sg-wrapper-less .col-xs-offset-7 {
2302
- margin-left: 58.33333333%;
2303
- }
2304
- .sg-wrapper-less .col-xs-offset-6 {
2305
- margin-left: 50%;
2306
- }
2307
- .sg-wrapper-less .col-xs-offset-5 {
2308
- margin-left: 41.66666667%;
2309
- }
2310
- .sg-wrapper-less .col-xs-offset-4 {
2311
- margin-left: 33.33333333%;
2312
- }
2313
- .sg-wrapper-less .col-xs-offset-3 {
2314
- margin-left: 25%;
2315
- }
2316
- .sg-wrapper-less .col-xs-offset-2 {
2317
- margin-left: 16.66666667%;
2318
- }
2319
- .sg-wrapper-less .col-xs-offset-1 {
2320
- margin-left: 8.33333333%;
2321
- }
2322
- .sg-wrapper-less .col-xs-offset-0 {
2323
- margin-left: 0%;
2324
- }
2325
- @media (min-width: 768px) {
2326
- .sg-wrapper-less .col-sm-1,
2327
- .sg-wrapper-less .col-sm-2,
2328
- .sg-wrapper-less .col-sm-3,
2329
- .sg-wrapper-less .col-sm-4,
2330
- .sg-wrapper-less .col-sm-5,
2331
- .sg-wrapper-less .col-sm-6,
2332
- .sg-wrapper-less .col-sm-7,
2333
- .sg-wrapper-less .col-sm-8,
2334
- .sg-wrapper-less .col-sm-9,
2335
- .sg-wrapper-less .col-sm-10,
2336
- .sg-wrapper-less .col-sm-11,
2337
- .sg-wrapper-less .col-sm-12 {
2338
- float: left;
2339
- }
2340
- .sg-wrapper-less .col-sm-12 {
2341
- width: 100%;
2342
- }
2343
- .sg-wrapper-less .col-sm-11 {
2344
- width: 91.66666667%;
2345
- }
2346
- .sg-wrapper-less .col-sm-10 {
2347
- width: 83.33333333%;
2348
- }
2349
- .sg-wrapper-less .col-sm-9 {
2350
- width: 75%;
2351
- }
2352
- .sg-wrapper-less .col-sm-8 {
2353
- width: 66.66666667%;
2354
- }
2355
- .sg-wrapper-less .col-sm-7 {
2356
- width: 58.33333333%;
2357
- }
2358
- .sg-wrapper-less .col-sm-6 {
2359
- width: 50%;
2360
- }
2361
- .sg-wrapper-less .col-sm-5 {
2362
- width: 41.66666667%;
2363
- }
2364
- .sg-wrapper-less .col-sm-4 {
2365
- width: 33.33333333%;
2366
- }
2367
- .sg-wrapper-less .col-sm-3 {
2368
- width: 25%;
2369
- }
2370
- .sg-wrapper-less .col-sm-2 {
2371
- width: 16.66666667%;
2372
- }
2373
- .sg-wrapper-less .col-sm-1 {
2374
- width: 8.33333333%;
2375
- }
2376
- .sg-wrapper-less .col-sm-pull-12 {
2377
- right: 100%;
2378
- }
2379
- .sg-wrapper-less .col-sm-pull-11 {
2380
- right: 91.66666667%;
2381
- }
2382
- .sg-wrapper-less .col-sm-pull-10 {
2383
- right: 83.33333333%;
2384
- }
2385
- .sg-wrapper-less .col-sm-pull-9 {
2386
- right: 75%;
2387
- }
2388
- .sg-wrapper-less .col-sm-pull-8 {
2389
- right: 66.66666667%;
2390
- }
2391
- .sg-wrapper-less .col-sm-pull-7 {
2392
- right: 58.33333333%;
2393
- }
2394
- .sg-wrapper-less .col-sm-pull-6 {
2395
- right: 50%;
2396
- }
2397
- .sg-wrapper-less .col-sm-pull-5 {
2398
- right: 41.66666667%;
2399
- }
2400
- .sg-wrapper-less .col-sm-pull-4 {
2401
- right: 33.33333333%;
2402
- }
2403
- .sg-wrapper-less .col-sm-pull-3 {
2404
- right: 25%;
2405
- }
2406
- .sg-wrapper-less .col-sm-pull-2 {
2407
- right: 16.66666667%;
2408
- }
2409
- .sg-wrapper-less .col-sm-pull-1 {
2410
- right: 8.33333333%;
2411
- }
2412
- .sg-wrapper-less .col-sm-pull-0 {
2413
- right: auto;
2414
- }
2415
- .sg-wrapper-less .col-sm-push-12 {
2416
- left: 100%;
2417
- }
2418
- .sg-wrapper-less .col-sm-push-11 {
2419
- left: 91.66666667%;
2420
- }
2421
- .sg-wrapper-less .col-sm-push-10 {
2422
- left: 83.33333333%;
2423
- }
2424
- .sg-wrapper-less .col-sm-push-9 {
2425
- left: 75%;
2426
- }
2427
- .sg-wrapper-less .col-sm-push-8 {
2428
- left: 66.66666667%;
2429
- }
2430
- .sg-wrapper-less .col-sm-push-7 {
2431
- left: 58.33333333%;
2432
- }
2433
- .sg-wrapper-less .col-sm-push-6 {
2434
- left: 50%;
2435
- }
2436
- .sg-wrapper-less .col-sm-push-5 {
2437
- left: 41.66666667%;
2438
- }
2439
- .sg-wrapper-less .col-sm-push-4 {
2440
- left: 33.33333333%;
2441
- }
2442
- .sg-wrapper-less .col-sm-push-3 {
2443
- left: 25%;
2444
- }
2445
- .sg-wrapper-less .col-sm-push-2 {
2446
- left: 16.66666667%;
2447
- }
2448
- .sg-wrapper-less .col-sm-push-1 {
2449
- left: 8.33333333%;
2450
- }
2451
- .sg-wrapper-less .col-sm-push-0 {
2452
- left: auto;
2453
- }
2454
- .sg-wrapper-less .col-sm-offset-12 {
2455
- margin-left: 100%;
2456
- }
2457
- .sg-wrapper-less .col-sm-offset-11 {
2458
- margin-left: 91.66666667%;
2459
- }
2460
- .sg-wrapper-less .col-sm-offset-10 {
2461
- margin-left: 83.33333333%;
2462
- }
2463
- .sg-wrapper-less .col-sm-offset-9 {
2464
- margin-left: 75%;
2465
- }
2466
- .sg-wrapper-less .col-sm-offset-8 {
2467
- margin-left: 66.66666667%;
2468
- }
2469
- .sg-wrapper-less .col-sm-offset-7 {
2470
- margin-left: 58.33333333%;
2471
- }
2472
- .sg-wrapper-less .col-sm-offset-6 {
2473
- margin-left: 50%;
2474
- }
2475
- .sg-wrapper-less .col-sm-offset-5 {
2476
- margin-left: 41.66666667%;
2477
- }
2478
- .sg-wrapper-less .col-sm-offset-4 {
2479
- margin-left: 33.33333333%;
2480
- }
2481
- .sg-wrapper-less .col-sm-offset-3 {
2482
- margin-left: 25%;
2483
- }
2484
- .sg-wrapper-less .col-sm-offset-2 {
2485
- margin-left: 16.66666667%;
2486
- }
2487
- .sg-wrapper-less .col-sm-offset-1 {
2488
- margin-left: 8.33333333%;
2489
- }
2490
- .sg-wrapper-less .col-sm-offset-0 {
2491
- margin-left: 0%;
2492
- }
2493
- }
2494
- @media (min-width: 992px) {
2495
- .sg-wrapper-less .col-md-1,
2496
- .sg-wrapper-less .col-md-2,
2497
- .sg-wrapper-less .col-md-3,
2498
- .sg-wrapper-less .col-md-4,
2499
- .sg-wrapper-less .col-md-5,
2500
- .sg-wrapper-less .col-md-6,
2501
- .sg-wrapper-less .col-md-7,
2502
- .sg-wrapper-less .col-md-8,
2503
- .sg-wrapper-less .col-md-9,
2504
- .sg-wrapper-less .col-md-10,
2505
- .sg-wrapper-less .col-md-11,
2506
- .sg-wrapper-less .col-md-12 {
2507
- float: left;
2508
- }
2509
- .sg-wrapper-less .col-md-12 {
2510
- width: 100%;
2511
- }
2512
- .sg-wrapper-less .col-md-11 {
2513
- width: 91.66666667%;
2514
- }
2515
- .sg-wrapper-less .col-md-10 {
2516
- width: 83.33333333%;
2517
- }
2518
- .sg-wrapper-less .col-md-9 {
2519
- width: 75%;
2520
- }
2521
- .sg-wrapper-less .col-md-8 {
2522
- width: 66.66666667%;
2523
- }
2524
- .sg-wrapper-less .col-md-7 {
2525
- width: 58.33333333%;
2526
- }
2527
- .sg-wrapper-less .col-md-6 {
2528
- width: 50%;
2529
- }
2530
- .sg-wrapper-less .col-md-5 {
2531
- width: 41.66666667%;
2532
- }
2533
- .sg-wrapper-less .col-md-4 {
2534
- width: 33.33333333%;
2535
- }
2536
- .sg-wrapper-less .col-md-3 {
2537
- width: 25%;
2538
- }
2539
- .sg-wrapper-less .col-md-2 {
2540
- width: 16.66666667%;
2541
- }
2542
- .sg-wrapper-less .col-md-1 {
2543
- width: 8.33333333%;
2544
- }
2545
- .sg-wrapper-less .col-md-pull-12 {
2546
- right: 100%;
2547
- }
2548
- .sg-wrapper-less .col-md-pull-11 {
2549
- right: 91.66666667%;
2550
- }
2551
- .sg-wrapper-less .col-md-pull-10 {
2552
- right: 83.33333333%;
2553
- }
2554
- .sg-wrapper-less .col-md-pull-9 {
2555
- right: 75%;
2556
- }
2557
- .sg-wrapper-less .col-md-pull-8 {
2558
- right: 66.66666667%;
2559
- }
2560
- .sg-wrapper-less .col-md-pull-7 {
2561
- right: 58.33333333%;
2562
- }
2563
- .sg-wrapper-less .col-md-pull-6 {
2564
- right: 50%;
2565
- }
2566
- .sg-wrapper-less .col-md-pull-5 {
2567
- right: 41.66666667%;
2568
- }
2569
- .sg-wrapper-less .col-md-pull-4 {
2570
- right: 33.33333333%;
2571
- }
2572
- .sg-wrapper-less .col-md-pull-3 {
2573
- right: 25%;
2574
- }
2575
- .sg-wrapper-less .col-md-pull-2 {
2576
- right: 16.66666667%;
2577
- }
2578
- .sg-wrapper-less .col-md-pull-1 {
2579
- right: 8.33333333%;
2580
- }
2581
- .sg-wrapper-less .col-md-pull-0 {
2582
- right: auto;
2583
- }
2584
- .sg-wrapper-less .col-md-push-12 {
2585
- left: 100%;
2586
- }
2587
- .sg-wrapper-less .col-md-push-11 {
2588
- left: 91.66666667%;
2589
- }
2590
- .sg-wrapper-less .col-md-push-10 {
2591
- left: 83.33333333%;
2592
- }
2593
- .sg-wrapper-less .col-md-push-9 {
2594
- left: 75%;
2595
- }
2596
- .sg-wrapper-less .col-md-push-8 {
2597
- left: 66.66666667%;
2598
- }
2599
- .sg-wrapper-less .col-md-push-7 {
2600
- left: 58.33333333%;
2601
- }
2602
- .sg-wrapper-less .col-md-push-6 {
2603
- left: 50%;
2604
- }
2605
- .sg-wrapper-less .col-md-push-5 {
2606
- left: 41.66666667%;
2607
- }
2608
- .sg-wrapper-less .col-md-push-4 {
2609
- left: 33.33333333%;
2610
- }
2611
- .sg-wrapper-less .col-md-push-3 {
2612
- left: 25%;
2613
- }
2614
- .sg-wrapper-less .col-md-push-2 {
2615
- left: 16.66666667%;
2616
- }
2617
- .sg-wrapper-less .col-md-push-1 {
2618
- left: 8.33333333%;
2619
- }
2620
- .sg-wrapper-less .col-md-push-0 {
2621
- left: auto;
2622
- }
2623
- .sg-wrapper-less .col-md-offset-12 {
2624
- margin-left: 100%;
2625
- }
2626
- .sg-wrapper-less .col-md-offset-11 {
2627
- margin-left: 91.66666667%;
2628
- }
2629
- .sg-wrapper-less .col-md-offset-10 {
2630
- margin-left: 83.33333333%;
2631
- }
2632
- .sg-wrapper-less .col-md-offset-9 {
2633
- margin-left: 75%;
2634
- }
2635
- .sg-wrapper-less .col-md-offset-8 {
2636
- margin-left: 66.66666667%;
2637
- }
2638
- .sg-wrapper-less .col-md-offset-7 {
2639
- margin-left: 58.33333333%;
2640
- }
2641
- .sg-wrapper-less .col-md-offset-6 {
2642
- margin-left: 50%;
2643
- }
2644
- .sg-wrapper-less .col-md-offset-5 {
2645
- margin-left: 41.66666667%;
2646
- }
2647
- .sg-wrapper-less .col-md-offset-4 {
2648
- margin-left: 33.33333333%;
2649
- }
2650
- .sg-wrapper-less .col-md-offset-3 {
2651
- margin-left: 25%;
2652
- }
2653
- .sg-wrapper-less .col-md-offset-2 {
2654
- margin-left: 16.66666667%;
2655
- }
2656
- .sg-wrapper-less .col-md-offset-1 {
2657
- margin-left: 8.33333333%;
2658
- }
2659
- .sg-wrapper-less .col-md-offset-0 {
2660
- margin-left: 0%;
2661
- }
2662
- }
2663
- @media (min-width: 1200px) {
2664
- .sg-wrapper-less .col-lg-1,
2665
- .sg-wrapper-less .col-lg-2,
2666
- .sg-wrapper-less .col-lg-3,
2667
- .sg-wrapper-less .col-lg-4,
2668
- .sg-wrapper-less .col-lg-5,
2669
- .sg-wrapper-less .col-lg-6,
2670
- .sg-wrapper-less .col-lg-7,
2671
- .sg-wrapper-less .col-lg-8,
2672
- .sg-wrapper-less .col-lg-9,
2673
- .sg-wrapper-less .col-lg-10,
2674
- .sg-wrapper-less .col-lg-11,
2675
- .sg-wrapper-less .col-lg-12 {
2676
- float: left;
2677
- }
2678
- .sg-wrapper-less .col-lg-12 {
2679
- width: 100%;
2680
- }
2681
- .sg-wrapper-less .col-lg-11 {
2682
- width: 91.66666667%;
2683
- }
2684
- .sg-wrapper-less .col-lg-10 {
2685
- width: 83.33333333%;
2686
- }
2687
- .sg-wrapper-less .col-lg-9 {
2688
- width: 75%;
2689
- }
2690
- .sg-wrapper-less .col-lg-8 {
2691
- width: 66.66666667%;
2692
- }
2693
- .sg-wrapper-less .col-lg-7 {
2694
- width: 58.33333333%;
2695
- }
2696
- .sg-wrapper-less .col-lg-6 {
2697
- width: 50%;
2698
- }
2699
- .sg-wrapper-less .col-lg-5 {
2700
- width: 41.66666667%;
2701
- }
2702
- .sg-wrapper-less .col-lg-4 {
2703
- width: 33.33333333%;
2704
- }
2705
- .sg-wrapper-less .col-lg-3 {
2706
- width: 25%;
2707
- }
2708
- .sg-wrapper-less .col-lg-2 {
2709
- width: 16.66666667%;
2710
- }
2711
- .sg-wrapper-less .col-lg-1 {
2712
- width: 8.33333333%;
2713
- }
2714
- .sg-wrapper-less .col-lg-pull-12 {
2715
- right: 100%;
2716
- }
2717
- .sg-wrapper-less .col-lg-pull-11 {
2718
- right: 91.66666667%;
2719
- }
2720
- .sg-wrapper-less .col-lg-pull-10 {
2721
- right: 83.33333333%;
2722
- }
2723
- .sg-wrapper-less .col-lg-pull-9 {
2724
- right: 75%;
2725
- }
2726
- .sg-wrapper-less .col-lg-pull-8 {
2727
- right: 66.66666667%;
2728
- }
2729
- .sg-wrapper-less .col-lg-pull-7 {
2730
- right: 58.33333333%;
2731
- }
2732
- .sg-wrapper-less .col-lg-pull-6 {
2733
- right: 50%;
2734
- }
2735
- .sg-wrapper-less .col-lg-pull-5 {
2736
- right: 41.66666667%;
2737
- }
2738
- .sg-wrapper-less .col-lg-pull-4 {
2739
- right: 33.33333333%;
2740
- }
2741
- .sg-wrapper-less .col-lg-pull-3 {
2742
- right: 25%;
2743
- }
2744
- .sg-wrapper-less .col-lg-pull-2 {
2745
- right: 16.66666667%;
2746
- }
2747
- .sg-wrapper-less .col-lg-pull-1 {
2748
- right: 8.33333333%;
2749
- }
2750
- .sg-wrapper-less .col-lg-pull-0 {
2751
- right: auto;
2752
- }
2753
- .sg-wrapper-less .col-lg-push-12 {
2754
- left: 100%;
2755
- }
2756
- .sg-wrapper-less .col-lg-push-11 {
2757
- left: 91.66666667%;
2758
- }
2759
- .sg-wrapper-less .col-lg-push-10 {
2760
- left: 83.33333333%;
2761
- }
2762
- .sg-wrapper-less .col-lg-push-9 {
2763
- left: 75%;
2764
- }
2765
- .sg-wrapper-less .col-lg-push-8 {
2766
- left: 66.66666667%;
2767
- }
2768
- .sg-wrapper-less .col-lg-push-7 {
2769
- left: 58.33333333%;
2770
- }
2771
- .sg-wrapper-less .col-lg-push-6 {
2772
- left: 50%;
2773
- }
2774
- .sg-wrapper-less .col-lg-push-5 {
2775
- left: 41.66666667%;
2776
- }
2777
- .sg-wrapper-less .col-lg-push-4 {
2778
- left: 33.33333333%;
2779
- }
2780
- .sg-wrapper-less .col-lg-push-3 {
2781
- left: 25%;
2782
- }
2783
- .sg-wrapper-less .col-lg-push-2 {
2784
- left: 16.66666667%;
2785
- }
2786
- .sg-wrapper-less .col-lg-push-1 {
2787
- left: 8.33333333%;
2788
- }
2789
- .sg-wrapper-less .col-lg-push-0 {
2790
- left: auto;
2791
- }
2792
- .sg-wrapper-less .col-lg-offset-12 {
2793
- margin-left: 100%;
2794
- }
2795
- .sg-wrapper-less .col-lg-offset-11 {
2796
- margin-left: 91.66666667%;
2797
- }
2798
- .sg-wrapper-less .col-lg-offset-10 {
2799
- margin-left: 83.33333333%;
2800
- }
2801
- .sg-wrapper-less .col-lg-offset-9 {
2802
- margin-left: 75%;
2803
- }
2804
- .sg-wrapper-less .col-lg-offset-8 {
2805
- margin-left: 66.66666667%;
2806
- }
2807
- .sg-wrapper-less .col-lg-offset-7 {
2808
- margin-left: 58.33333333%;
2809
- }
2810
- .sg-wrapper-less .col-lg-offset-6 {
2811
- margin-left: 50%;
2812
- }
2813
- .sg-wrapper-less .col-lg-offset-5 {
2814
- margin-left: 41.66666667%;
2815
- }
2816
- .sg-wrapper-less .col-lg-offset-4 {
2817
- margin-left: 33.33333333%;
2818
- }
2819
- .sg-wrapper-less .col-lg-offset-3 {
2820
- margin-left: 25%;
2821
- }
2822
- .sg-wrapper-less .col-lg-offset-2 {
2823
- margin-left: 16.66666667%;
2824
- }
2825
- .sg-wrapper-less .col-lg-offset-1 {
2826
- margin-left: 8.33333333%;
2827
- }
2828
- .sg-wrapper-less .col-lg-offset-0 {
2829
- margin-left: 0%;
2830
- }
2831
- }
2832
- .sg-wrapper-less table {
2833
- background-color: transparent;
2834
- }
2835
- .sg-wrapper-less caption {
2836
- padding-top: 8px;
2837
- padding-bottom: 8px;
2838
- color: #999999;
2839
- text-align: left;
2840
- }
2841
- .sg-wrapper-less th {
2842
- text-align: left;
2843
- }
2844
- .sg-wrapper-less .table {
2845
- width: 100%;
2846
- max-width: 100%;
2847
- margin-bottom: 21px;
2848
- }
2849
- .sg-backup-table .checkbox {
2850
- margin: 0 !important;
2851
- }
2852
- .sg-wrapper-less .table > thead > tr > th,
2853
- .sg-wrapper-less .table > tbody > tr > th,
2854
- .sg-wrapper-less .table > tfoot > tr > th,
2855
- .sg-wrapper-less .table > thead > tr > td,
2856
- .sg-wrapper-less .table > tbody > tr > td,
2857
- .sg-wrapper-less .table > tfoot > tr > td {
2858
- padding: 8px;
2859
- line-height: 1.42857143;
2860
- vertical-align: middle;
2861
- border-top: 1px solid #EBEBEB;
2862
- height: 65px;
2863
- }
2864
- .sg-wrapper-less .table > thead > tr > th {
2865
- vertical-align: middle;
2866
- border-bottom: 1px solid #EBEBEB;
2867
- }
2868
- .sg-wrapper-less .table > caption + thead > tr:first-child > th,
2869
- .sg-wrapper-less .table > colgroup + thead > tr:first-child > th,
2870
- .sg-wrapper-less .table > thead:first-child > tr:first-child > th,
2871
- .sg-wrapper-less .table > caption + thead > tr:first-child > td,
2872
- .sg-wrapper-less .table > colgroup + thead > tr:first-child > td,
2873
- .sg-wrapper-less .table > thead:first-child > tr:first-child > td {
2874
- border-top: 0;
2875
- }
2876
- .sg-wrapper-less .table > tbody + tbody {
2877
- border-top: 2px solid #dddddd;
2878
- }
2879
- .sg-wrapper-less .table .table {
2880
- background-color: #ffffff;
2881
- }
2882
- .sg-wrapper-less .table-condensed > thead > tr > th,
2883
- .sg-wrapper-less .table-condensed > tbody > tr > th,
2884
- .sg-wrapper-less .table-condensed > tfoot > tr > th,
2885
- .sg-wrapper-less .table-condensed > thead > tr > td,
2886
- .sg-wrapper-less .table-condensed > tbody > tr > td,
2887
- .sg-wrapper-less .table-condensed > tfoot > tr > td {
2888
- padding: 5px;
2889
- }
2890
- .sg-wrapper-less .table-bordered {
2891
- border: 1px solid #dddddd;
2892
- }
2893
- .sg-wrapper-less .table-bordered > thead > tr > th,
2894
- .sg-wrapper-less .table-bordered > tbody > tr > th,
2895
- .sg-wrapper-less .table-bordered > tfoot > tr > th,
2896
- .sg-wrapper-less .table-bordered > thead > tr > td,
2897
- .sg-wrapper-less .table-bordered > tbody > tr > td,
2898
- .sg-wrapper-less .table-bordered > tfoot > tr > td {
2899
- border: 1px solid #dddddd;
2900
- }
2901
- .sg-wrapper-less .table-bordered > thead > tr > th,
2902
- .sg-wrapper-less .table-bordered > thead > tr > td {
2903
- border-bottom-width: 2px;
2904
- }
2905
- /*
2906
- .sg-wrapper-less .table-striped > tbody > tr:nth-of-type(odd) {
2907
- background-color: #f9f9f9;
2908
- }*/
2909
- .sg-wrapper-less .table-striped > tbody > tr,
2910
- .sg-wrapper-less .table-striped > th {
2911
- height: 65px;
2912
- }
2913
- .sg-wrapper-less .table-hover > tbody > tr:hover {
2914
- background-color: #f5f5f5;
2915
- }
2916
- .sg-wrapper-less table col[class*="col-"] {
2917
- position: static;
2918
- float: none;
2919
- display: table-column;
2920
- }
2921
- .sg-wrapper-less table td[class*="col-"],
2922
- .sg-wrapper-less table th[class*="col-"] {
2923
- position: static;
2924
- float: none;
2925
- display: table-cell;
2926
- }
2927
- .sg-wrapper-less .table > thead > tr > td.active,
2928
- .sg-wrapper-less .table > tbody > tr > td.active,
2929
- .sg-wrapper-less .table > tfoot > tr > td.active,
2930
- .sg-wrapper-less .table > thead > tr > th.active,
2931
- .sg-wrapper-less .table > tbody > tr > th.active,
2932
- .sg-wrapper-less .table > tfoot > tr > th.active,
2933
- .sg-wrapper-less .table > thead > tr.active > td,
2934
- .sg-wrapper-less .table > tbody > tr.active > td,
2935
- .sg-wrapper-less .table > tfoot > tr.active > td,
2936
- .sg-wrapper-less .table > thead > tr.active > th,
2937
- .sg-wrapper-less .table > tbody > tr.active > th,
2938
- .sg-wrapper-less .table > tfoot > tr.active > th {
2939
- background-color: #f5f5f5;
2940
- }
2941
- .sg-wrapper-less .table-hover > tbody > tr > td.active:hover,
2942
- .sg-wrapper-less .table-hover > tbody > tr > th.active:hover,
2943
- .sg-wrapper-less .table-hover > tbody > tr.active:hover > td,
2944
- .sg-wrapper-less .table-hover > tbody > tr:hover > .active,
2945
- .sg-wrapper-less .table-hover > tbody > tr.active:hover > th {
2946
- background-color: #e8e8e8;
2947
- }
2948
- .sg-wrapper-less .table > thead > tr > td.success,
2949
- .sg-wrapper-less .table > tbody > tr > td.success,
2950
- .sg-wrapper-less .table > tfoot > tr > td.success,
2951
- .sg-wrapper-less .table > thead > tr > th.success,
2952
- .sg-wrapper-less .table > tbody > tr > th.success,
2953
- .sg-wrapper-less .table > tfoot > tr > th.success,
2954
- .sg-wrapper-less .table > thead > tr.success > td,
2955
- .sg-wrapper-less .table > tbody > tr.success > td,
2956
- .sg-wrapper-less .table > tfoot > tr.success > td,
2957
- .sg-wrapper-less .table > thead > tr.success > th,
2958
- .sg-wrapper-less .table > tbody > tr.success > th,
2959
- .sg-wrapper-less .table > tfoot > tr.success > th {
2960
- background-color: #3fb618;
2961
- }
2962
- .sg-wrapper-less .table-hover > tbody > tr > td.success:hover,
2963
- .sg-wrapper-less .table-hover > tbody > tr > th.success:hover,
2964
- .sg-wrapper-less .table-hover > tbody > tr.success:hover > td,
2965
- .sg-wrapper-less .table-hover > tbody > tr:hover > .success,
2966
- .sg-wrapper-less .table-hover > tbody > tr.success:hover > th {
2967
- background-color: #379f15;
2968
- }
2969
- .sg-wrapper-less .table > thead > tr > td.info,
2970
- .sg-wrapper-less .table > tbody > tr > td.info,
2971
- .sg-wrapper-less .table > tfoot > tr > td.info,
2972
- .sg-wrapper-less .table > thead > tr > th.info,
2973
- .sg-wrapper-less .table > tbody > tr > th.info,
2974
- .sg-wrapper-less .table > tfoot > tr > th.info,
2975
- .sg-wrapper-less .table > thead > tr.info > td,
2976
- .sg-wrapper-less .table > tbody > tr.info > td,
2977
- .sg-wrapper-less .table > tfoot > tr.info > td,
2978
- .sg-wrapper-less .table > thead > tr.info > th,
2979
- .sg-wrapper-less .table > tbody > tr.info > th,
2980
- .sg-wrapper-less .table > tfoot > tr.info > th {
2981
- background-color: #9954bb;
2982
- }
2983
- .sg-wrapper-less .table-hover > tbody > tr > td.info:hover,
2984
- .sg-wrapper-less .table-hover > tbody > tr > th.info:hover,
2985
- .sg-wrapper-less .table-hover > tbody > tr.info:hover > td,
2986
- .sg-wrapper-less .table-hover > tbody > tr:hover > .info,
2987
- .sg-wrapper-less .table-hover > tbody > tr.info:hover > th {
2988
- background-color: #8d46b0;
2989
- }
2990
- .sg-wrapper-less .table > thead > tr > td.warning,
2991
- .sg-wrapper-less .table > tbody > tr > td.warning,
2992
- .sg-wrapper-less .table > tfoot > tr > td.warning,
2993
- .sg-wrapper-less .table > thead > tr > th.warning,
2994
- .sg-wrapper-less .table > tbody > tr > th.warning,
2995
- .sg-wrapper-less .table > tfoot > tr > th.warning,
2996
- .sg-wrapper-less .table > thead > tr.warning > td,
2997
- .sg-wrapper-less .table > tbody > tr.warning > td,
2998
- .sg-wrapper-less .table > tfoot > tr.warning > td,
2999
- .sg-wrapper-less .table > thead > tr.warning > th,
3000
- .sg-wrapper-less .table > tbody > tr.warning > th,
3001
- .sg-wrapper-less .table > tfoot > tr.warning > th {
3002
- background-color: #ff7518;
3003
- }
3004
- .sg-wrapper-less .table-hover > tbody > tr > td.warning:hover,
3005
- .sg-wrapper-less .table-hover > tbody > tr > th.warning:hover,
3006
- .sg-wrapper-less .table-hover > tbody > tr.warning:hover > td,
3007
- .sg-wrapper-less .table-hover > tbody > tr:hover > .warning,
3008
- .sg-wrapper-less .table-hover > tbody > tr.warning:hover > th {
3009
- background-color: #fe6600;
3010
- }
3011
- .sg-wrapper-less .table > thead > tr > td.danger,
3012
- .sg-wrapper-less .table > tbody > tr > td.danger,
3013
- .sg-wrapper-less .table > tfoot > tr > td.danger,
3014
- .sg-wrapper-less .table > thead > tr > th.danger,
3015
- .sg-wrapper-less .table > tbody > tr > th.danger,
3016
- .sg-wrapper-less .table > tfoot > tr > th.danger,
3017
- .sg-wrapper-less .table > thead > tr.danger > td,
3018
- .sg-wrapper-less .table > tbody > tr.danger > td,
3019
- .sg-wrapper-less .table > tfoot > tr.danger > td,
3020
- .sg-wrapper-less .table > thead > tr.danger > th,
3021
- .sg-wrapper-less .table > tbody > tr.danger > th,
3022
- .sg-wrapper-less .table > tfoot > tr.danger > th {
3023
- background-color: #ff0039;
3024
- }
3025
- .sg-wrapper-less .table-hover > tbody > tr > td.danger:hover,
3026
- .sg-wrapper-less .table-hover > tbody > tr > th.danger:hover,
3027
- .sg-wrapper-less .table-hover > tbody > tr.danger:hover > td,
3028
- .sg-wrapper-less .table-hover > tbody > tr:hover > .danger,
3029
- .sg-wrapper-less .table-hover > tbody > tr.danger:hover > th {
3030
- background-color: #e60033;
3031
- }
3032
- .sg-wrapper-less .table-responsive {
3033
- overflow-x: auto;
3034
- min-height: 0.01%;
3035
- }
3036
- @media screen and (max-width: 767px) {
3037
- .sg-wrapper-less .table-responsive {
3038
- width: 100%;
3039
- margin-bottom: 15.75px;
3040
- overflow-y: hidden;
3041
- -ms-overflow-style: -ms-autohiding-scrollbar;
3042
- border: 1px solid #dddddd;
3043
- }
3044
- .sg-wrapper-less .table-responsive > .table {
3045
- margin-bottom: 0;
3046
- }
3047
- .sg-wrapper-less .table-responsive > .table > thead > tr > th,
3048
- .sg-wrapper-less .table-responsive > .table > tbody > tr > th,
3049
- .sg-wrapper-less .table-responsive > .table > tfoot > tr > th,
3050
- .sg-wrapper-less .table-responsive > .table > thead > tr > td,
3051
- .sg-wrapper-less .table-responsive > .table > tbody > tr > td,
3052
- .sg-wrapper-less .table-responsive > .table > tfoot > tr > td {
3053
- white-space: nowrap;
3054
- }
3055
- .sg-wrapper-less .table-responsive > .table-bordered {
3056
- border: 0;
3057
- }
3058
- .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > th:first-child,
3059
- .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > th:first-child,
3060
- .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > th:first-child,
3061
- .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > td:first-child,
3062
- .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > td:first-child,
3063
- .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > td:first-child {
3064
- border-left: 0;
3065
- }
3066
- .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > th:last-child,
3067
- .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > th:last-child,
3068
- .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > th:last-child,
3069
- .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > td:last-child,
3070
- .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > td:last-child,
3071
- .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > td:last-child {
3072
- border-right: 0;
3073
- }
3074
- .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr:last-child > th,
3075
- .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr:last-child > th,
3076
- .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr:last-child > td,
3077
- .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr:last-child > td {
3078
- border-bottom: 0;
3079
- }
3080
- }
3081
- .sg-wrapper-less fieldset {
3082
- padding: 0;
3083
- margin: 0;
3084
- border: 0;
3085
- min-width: 0;
3086
- }
3087
- .sg-wrapper-less legend {
3088
- display: block;
3089
- width: 100%;
3090
- padding: 0;
3091
- margin-bottom: 21px;
3092
- font-size: 22.5px;
3093
- line-height: inherit;
3094
- color: #000000;
3095
- border: 0;
3096
- border-bottom: 1px solid #e5e5e5;
3097
- }
3098
- .sg-wrapper-less label {
3099
- display: inline-block;
3100
- max-width: 100%;
3101
- margin-bottom: 5px;
3102
- font-weight: bold;
3103
- }
3104
- .sg-wrapper-less input[type="search"] {
3105
- -webkit-box-sizing: border-box;
3106
- -moz-box-sizing: border-box;
3107
- box-sizing: border-box;
3108
- }
3109
- .sg-wrapper-less input[type="radio"],
3110
- .sg-wrapper-less input[type="checkbox"] {
3111
- margin: 4px 0 0;
3112
- margin-top: 1px \9;
3113
- line-height: normal;
3114
- }
3115
- .sg-wrapper-less input[type="file"] {
3116
- display: block;
3117
- }
3118
- .sg-wrapper-less input[type="range"] {
3119
- display: block;
3120
- width: 100%;
3121
- }
3122
- .sg-wrapper-less select[multiple],
3123
- .sg-wrapper-less select[size] {
3124
- height: auto;
3125
- }
3126
- /*
3127
- .sg-wrapper-less input[type="file"]:focus,
3128
- .sg-wrapper-less input[type="radio"]:focus,
3129
- .sg-wrapper-less input[type="checkbox"]:focus {
3130
- outline: thin dotted;
3131
- outline: 5px auto -webkit-focus-ring-color;
3132
- outline-offset: -2px;
3133
- }
3134
- */
3135
- .sg-wrapper-less output {
3136
- display: block;
3137
- padding-top: 11px;
3138
- font-size: 15px;
3139
- line-height: 1.42857143;
3140
- color: #333333;
3141
- }
3142
- .sg-wrapper-less .form-control {
3143
- display: block;
3144
- width: 100%;
3145
- height: 43px;
3146
- padding: 10px 18px;
3147
- font-size: 15px;
3148
- line-height: 1.42857143;
3149
- color: #333333;
3150
- background-color: #ffffff;
3151
- background-image: none;
3152
- border: 1px solid #cccccc;
3153
- border-radius: 0;
3154
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3155
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3156
- -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s;
3157
- -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
3158
- transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
3159
- }
3160
- .sg-wrapper-less .form-control:focus {
3161
- border-color: #66afe9;
3162
- outline: 0;
3163
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
3164
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
3165
- }
3166
- .sg-wrapper-less .form-control::-moz-placeholder {
3167
- color: #999999;
3168
- opacity: 1;
3169
- }
3170
- .sg-wrapper-less .form-control:-ms-input-placeholder {
3171
- color: #999999;
3172
- }
3173
- .sg-wrapper-less .form-control::-webkit-input-placeholder {
3174
- color: #999999;
3175
- }
3176
- .sg-wrapper-less .form-control[disabled],
3177
- .sg-wrapper-less .form-control[readonly],
3178
- .sg-wrapper-less fieldset[disabled] .form-control {
3179
- background-color: #e6e6e6;
3180
- opacity: 1;
3181
- }
3182
- .sg-wrapper-less .form-control[disabled],
3183
- .sg-wrapper-less fieldset[disabled] .form-control {
3184
- cursor: not-allowed;
3185
- }
3186
- .sg-wrapper-less textarea.form-control {
3187
- height: auto;
3188
- }
3189
- .sg-wrapper-less input[type="search"] {
3190
- -webkit-appearance: none;
3191
- }
3192
- @media screen and (-webkit-min-device-pixel-ratio: 0) {
3193
- .sg-wrapper-less input[type="date"],
3194
- .sg-wrapper-less input[type="time"],
3195
- .sg-wrapper-less input[type="datetime-local"],
3196
- .sg-wrapper-less input[type="month"] {
3197
- line-height: 43px;
3198
- }
3199
- .sg-wrapper-less input[type="date"].input-sm,
3200
- .sg-wrapper-less input[type="time"].input-sm,
3201
- .sg-wrapper-less input[type="datetime-local"].input-sm,
3202
- .sg-wrapper-less input[type="month"].input-sm,
3203
- .sg-wrapper-less .input-group-sm input[type="date"],
3204
- .sg-wrapper-less .input-group-sm input[type="time"],
3205
- .sg-wrapper-less .input-group-sm input[type="datetime-local"],
3206
- .sg-wrapper-less .input-group-sm input[type="month"] {
3207
- line-height: 31px;
3208
- }
3209
- .sg-wrapper-less input[type="date"].input-lg,
3210
- .sg-wrapper-less input[type="time"].input-lg,
3211
- .sg-wrapper-less input[type="datetime-local"].input-lg,
3212
- .sg-wrapper-less input[type="month"].input-lg,
3213
- .sg-wrapper-less .input-group-lg input[type="date"],
3214
- .sg-wrapper-less .input-group-lg input[type="time"],
3215
- .sg-wrapper-less .input-group-lg input[type="datetime-local"],
3216
- .sg-wrapper-less .input-group-lg input[type="month"] {
3217
- line-height: 64px;
3218
- }
3219
- }
3220
- .sg-wrapper-less .form-group {
3221
- margin-bottom: 15px;
3222
- }
3223
- .sg-wrapper-less .radio,
3224
- .sg-wrapper-less .checkbox {
3225
- display: block;
3226
- margin-top: 10px;
3227
- margin-bottom: 10px;
3228
- }
3229
- .sg-wrapper-less .radio label,
3230
- .sg-wrapper-less .checkbox label {
3231
- min-height: 21px;
3232
- padding-left: 20px;
3233
- margin-bottom: 0;
3234
- font-weight: normal;
3235
- cursor: pointer;
3236
- }
3237
- .sg-wrapper-less .radio input[type="radio"],
3238
- .sg-wrapper-less .radio-inline input[type="radio"],
3239
- .sg-wrapper-less .checkbox input[type="checkbox"],
3240
- .sg-wrapper-less .checkbox-inline input[type="checkbox"] {
3241
- position: absolute;
3242
- margin-left: -20px;
3243
- margin-top: 4px \9;
3244
- }
3245
- .sg-wrapper-less input[type=radio]:checked,
3246
- .sg-wrapper-less .radio input[type="radio"],
3247
- .sg-wrapper-less .checkbox input[type="checkbox"] {
3248
- background-color: #efefef;
3249
- }
3250
- .sg-wrapper-less input[type=radio]:checked:before {
3251
- background-color: #0021C8;
3252
- }
3253
- .sg-wrapper-less input[type="checkbox"]:checked {
3254
- background-color: #072dc3;
3255
- }
3256
- .sg-wrapper-less .radio + .radio,
3257
- .sg-wrapper-less .checkbox + .checkbox {
3258
- margin-top: -5px;
3259
- }
3260
- .sg-wrapper-less .radio-inline,
3261
- .sg-wrapper-less .checkbox-inline {
3262
- position: relative;
3263
- display: inline-block;
3264
- padding-left: 20px;
3265
- margin-bottom: 0;
3266
- vertical-align: middle;
3267
- font-weight: normal;
3268
- cursor: pointer;
3269
- }
3270
- .sg-wrapper-less .radio-inline + .radio-inline,
3271
- .sg-wrapper-less .checkbox-inline + .checkbox-inline {
3272
- margin-top: 0;
3273
- margin-left: 10px;
3274
- }
3275
- .sg-wrapper-less input[type="radio"][disabled],
3276
- .sg-wrapper-less input[type="checkbox"][disabled],
3277
- .sg-wrapper-less input[type="radio"].disabled,
3278
- .sg-wrapper-less input[type="checkbox"].disabled,
3279
- .sg-wrapper-less fieldset[disabled] input[type="radio"],
3280
- .sg-wrapper-less fieldset[disabled] input[type="checkbox"] {
3281
- cursor: not-allowed;
3282
- }
3283
- .sg-wrapper-less .radio-inline.disabled,
3284
- .sg-wrapper-less .checkbox-inline.disabled,
3285
- .sg-wrapper-less fieldset[disabled] .radio-inline,
3286
- .sg-wrapper-less fieldset[disabled] .checkbox-inline {
3287
- cursor: not-allowed;
3288
- }
3289
- .sg-wrapper-less .radio.disabled label,
3290
- .sg-wrapper-less .checkbox.disabled label,
3291
- .sg-wrapper-less fieldset[disabled] .radio label,
3292
- .sg-wrapper-less fieldset[disabled] .checkbox label {
3293
- cursor: not-allowed;
3294
- }
3295
- .sg-wrapper-less .form-control-static {
3296
- padding-top: 11px;
3297
- padding-bottom: 11px;
3298
- margin-bottom: 0;
3299
- min-height: 36px;
3300
- }
3301
- .sg-wrapper-less .form-control-static.input-lg,
3302
- .sg-wrapper-less .form-control-static.input-sm {
3303
- padding-left: 0;
3304
- padding-right: 0;
3305
- }
3306
- .sg-wrapper-less .input-sm {
3307
- height: 31px;
3308
- padding: 5px 10px;
3309
- font-size: 13px;
3310
- line-height: 1.5;
3311
- border-radius: 0;
3312
- }
3313
- .sg-wrapper-less select.input-sm {
3314
- height: 31px;
3315
- line-height: 31px;
3316
- }
3317
- .sg-wrapper-less textarea.input-sm,
3318
- .sg-wrapper-less select[multiple].input-sm {
3319
- height: auto;
3320
- }
3321
- .sg-wrapper-less .form-group-sm .form-control {
3322
- height: 31px;
3323
- padding: 5px 10px;
3324
- font-size: 13px;
3325
- line-height: 1.5;
3326
- border-radius: 0;
3327
- }
3328
- .sg-wrapper-less select.form-group-sm .form-control {
3329
- height: 31px;
3330
- line-height: 31px;
3331
- }
3332
- .sg-wrapper-less textarea.form-group-sm .form-control,
3333
- .sg-wrapper-less select[multiple].form-group-sm .form-control {
3334
- height: auto;
3335
- }
3336
- .sg-wrapper-less .form-group-sm .form-control-static {
3337
- height: 31px;
3338
- padding: 5px 10px;
3339
- font-size: 13px;
3340
- line-height: 1.5;
3341
- min-height: 34px;
3342
- }
3343
- .sg-wrapper-less .input-lg {
3344
- height: 64px;
3345
- padding: 18px 30px;
3346
- font-size: 19px;
3347
- line-height: 1.3333333;
3348
- border-radius: 0;
3349
- }
3350
- .sg-wrapper-less select.input-lg {
3351
- height: 64px;
3352
- line-height: 64px;
3353
- }
3354
- .sg-wrapper-less textarea.input-lg,
3355
- .sg-wrapper-less select[multiple].input-lg {
3356
- height: auto;
3357
- }
3358
- .sg-wrapper-less .form-group-lg .form-control {
3359
- height: 64px;
3360
- padding: 18px 30px;
3361
- font-size: 19px;
3362
- line-height: 1.3333333;
3363
- border-radius: 0;
3364
- }
3365
- .sg-wrapper-less select.form-group-lg .form-control {
3366
- height: 64px;
3367
- line-height: 64px;
3368
- }
3369
- .sg-wrapper-less textarea.form-group-lg .form-control,
3370
- .sg-wrapper-less select[multiple].form-group-lg .form-control {
3371
- height: auto;
3372
- }
3373
- .sg-wrapper-less .form-group-lg .form-control-static {
3374
- height: 64px;
3375
- padding: 18px 30px;
3376
- font-size: 19px;
3377
- line-height: 1.3333333;
3378
- min-height: 40px;
3379
- }
3380
- .sg-wrapper-less .has-feedback {
3381
- position: relative;
3382
- }
3383
- .sg-wrapper-less .has-feedback .form-control {
3384
- padding-right: 53.75px;
3385
- }
3386
- .sg-wrapper-less .form-control-feedback {
3387
- position: absolute;
3388
- top: 0;
3389
- right: 0;
3390
- z-index: 2;
3391
- display: block;
3392
- width: 43px;
3393
- height: 43px;
3394
- line-height: 43px;
3395
- text-align: center;
3396
- pointer-events: none;
3397
- }
3398
- .sg-wrapper-less .input-lg + .form-control-feedback {
3399
- width: 64px;
3400
- height: 64px;
3401
- line-height: 64px;
3402
- }
3403
- .sg-wrapper-less .input-sm + .form-control-feedback {
3404
- width: 31px;
3405
- height: 31px;
3406
- line-height: 31px;
3407
- }
3408
- .sg-wrapper-less .has-success .help-block,
3409
- .sg-wrapper-less .has-success .control-label,
3410
- .sg-wrapper-less .has-success .radio,
3411
- .sg-wrapper-less .has-success .checkbox,
3412
- .sg-wrapper-less .has-success .radio-inline,
3413
- .sg-wrapper-less .has-success .checkbox-inline,
3414
- .sg-wrapper-less .has-success.radio label,
3415
- .sg-wrapper-less .has-success.checkbox label,
3416
- .sg-wrapper-less .has-success.radio-inline label,
3417
- .sg-wrapper-less .has-success.checkbox-inline label {
3418
- color: #ffffff;
3419
- }
3420
- .sg-wrapper-less .has-success .form-control {
3421
- border-color: #ffffff;
3422
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3423
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3424
- }
3425
- .sg-wrapper-less .has-success .form-control:focus {
3426
- border-color: #e6e6e6;
3427
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3428
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3429
- }
3430
- .sg-wrapper-less .has-success .input-group-addon {
3431
- color: #ffffff;
3432
- border-color: #ffffff;
3433
- background-color: #3fb618;
3434
- }
3435
- .sg-wrapper-less .has-success .form-control-feedback {
3436
- color: #ffffff;
3437
- }
3438
- .sg-wrapper-less .has-warning .help-block,
3439
- .sg-wrapper-less .has-warning .control-label,
3440
- .sg-wrapper-less .has-warning .radio,
3441
- .sg-wrapper-less .has-warning .checkbox,
3442
- .sg-wrapper-less .has-warning .radio-inline,
3443
- .sg-wrapper-less .has-warning .checkbox-inline,
3444
- .sg-wrapper-less .has-warning.radio label,
3445
- .sg-wrapper-less .has-warning.checkbox label,
3446
- .sg-wrapper-less .has-warning.radio-inline label,
3447
- .sg-wrapper-less .has-warning.checkbox-inline label {
3448
- color: #ffffff;
3449
- }
3450
- .sg-wrapper-less .has-warning .form-control {
3451
- border-color: #ffffff;
3452
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3453
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3454
- }
3455
- .sg-wrapper-less .has-warning .form-control:focus {
3456
- border-color: #e6e6e6;
3457
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3458
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3459
- }
3460
- .sg-wrapper-less .has-warning .input-group-addon {
3461
- color: #ffffff;
3462
- border-color: #ffffff;
3463
- background-color: #ff7518;
3464
- }
3465
- .sg-wrapper-less .has-warning .form-control-feedback {
3466
- color: #ffffff;
3467
- }
3468
- .sg-wrapper-less .has-error .help-block,
3469
- .sg-wrapper-less .has-error .control-label,
3470
- .sg-wrapper-less .has-error .radio,
3471
- .sg-wrapper-less .has-error .checkbox,
3472
- .sg-wrapper-less .has-error .radio-inline,
3473
- .sg-wrapper-less .has-error .checkbox-inline,
3474
- .sg-wrapper-less .has-error.radio label,
3475
- .sg-wrapper-less .has-error.checkbox label,
3476
- .sg-wrapper-less .has-error.radio-inline label,
3477
- .sg-wrapper-less .has-error.checkbox-inline label {
3478
- color: #ffffff;
3479
- }
3480
- .sg-wrapper-less .has-error .form-control {
3481
- border-color: #ffffff;
3482
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3483
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3484
- }
3485
- .sg-wrapper-less .has-error .form-control:focus {
3486
- border-color: #e6e6e6;
3487
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3488
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3489
- }
3490
- .sg-wrapper-less .has-error .input-group-addon {
3491
- color: #ffffff;
3492
- border-color: #ffffff;
3493
- background-color: #ff0039;
3494
- }
3495
- .sg-wrapper-less .has-error .form-control-feedback {
3496
- color: #ffffff;
3497
- }
3498
- .sg-wrapper-less .has-feedback label ~ .form-control-feedback {
3499
- top: 26px;
3500
- }
3501
- .sg-wrapper-less .has-feedback label.sr-only ~ .form-control-feedback {
3502
- top: 0;
3503
- }
3504
- .sg-wrapper-less .help-block {
3505
- display: block;
3506
- margin-top: 5px;
3507
- margin-bottom: 10px;
3508
- color: #737373;
3509
- }
3510
- @media (min-width: 768px) {
3511
- .sg-wrapper-less .form-inline .form-group {
3512
- display: inline-block;
3513
- margin-bottom: 0;
3514
- vertical-align: middle;
3515
- }
3516
- .sg-wrapper-less .form-inline .form-control {
3517
- display: inline-block;
3518
- width: auto;
3519
- vertical-align: middle;
3520
- }
3521
- .sg-wrapper-less .form-inline .form-control-static {
3522
- display: inline-block;
3523
- }
3524
- .sg-wrapper-less .form-inline .input-group {
3525
- display: inline-table;
3526
- vertical-align: middle;
3527
- }
3528
- .sg-wrapper-less .form-inline .input-group .input-group-addon,
3529
- .sg-wrapper-less .form-inline .input-group .input-group-btn,
3530
- .sg-wrapper-less .form-inline .input-group .form-control {
3531
- width: auto;
3532
- }
3533
- .sg-wrapper-less .form-inline .input-group > .form-control {
3534
- width: 100%;
3535
- }
3536
- .sg-wrapper-less .form-inline .control-label {
3537
- margin-bottom: 0;
3538
- vertical-align: middle;
3539
- }
3540
- .sg-wrapper-less .form-inline .radio,
3541
- .sg-wrapper-less .form-inline .checkbox {
3542
- display: inline-block;
3543
- margin-top: 0;
3544
- margin-bottom: 0;
3545
- vertical-align: middle;
3546
- }
3547
- .sg-wrapper-less .form-inline .radio label,
3548
- .sg-wrapper-less .form-inline .checkbox label {
3549
- padding-left: 0;
3550
- }
3551
- .sg-wrapper-less .form-inline .radio input[type="radio"],
3552
- .sg-wrapper-less .form-inline .checkbox input[type="checkbox"] {
3553
- position: relative;
3554
- margin-left: 0;
3555
- }
3556
- .sg-wrapper-less .form-inline .has-feedback .form-control-feedback {
3557
- top: 0;
3558
- }
3559
- }
3560
- .sg-wrapper-less .form-horizontal .radio,
3561
- .sg-wrapper-less .form-horizontal .checkbox,
3562
- .sg-wrapper-less .form-horizontal .radio-inline,
3563
- .sg-wrapper-less .form-horizontal .checkbox-inline {
3564
- margin-top: 0;
3565
- margin-bottom: 0;
3566
- padding-top: 11px;
3567
- }
3568
- .sg-wrapper-less .form-horizontal .radio,
3569
- .sg-wrapper-less .form-horizontal .checkbox {
3570
- min-height: 32px;
3571
- }
3572
- .sg-wrapper-less .form-horizontal .form-group {
3573
- margin-left: -15px;
3574
- margin-right: -15px;
3575
- }
3576
- @media (min-width: 768px) {
3577
- .sg-wrapper-less .form-horizontal .control-label {
3578
- text-align: right;
3579
- margin-bottom: 0;
3580
- padding-top: 11px;
3581
- }
3582
- }
3583
- .sg-wrapper-less .form-horizontal .has-feedback .form-control-feedback {
3584
- right: 15px;
3585
- }
3586
- @media (min-width: 768px) {
3587
- .sg-wrapper-less .form-horizontal .form-group-lg .control-label {
3588
- padding-top: 24.9999994px;
3589
- }
3590
- }
3591
- @media (min-width: 768px) {
3592
- .sg-wrapper-less .form-horizontal .form-group-sm .control-label {
3593
- padding-top: 6px;
3594
- }
3595
- }
3596
- .sg-wrapper-less .btn {
3597
- display: inline-block;
3598
- margin-bottom: 0;
3599
- font-weight: normal;
3600
- text-align: center;
3601
- vertical-align: middle;
3602
- -ms-touch-action: manipulation;
3603
- touch-action: manipulation;
3604
- cursor: pointer;
3605
- background-image: none;
3606
- border: 1px solid transparent;
3607
- white-space: nowrap;
3608
- padding: 10px 18px;
3609
- font-size: 15px;
3610
- line-height: 1.42857143;
3611
- border-radius: 0;
3612
- -webkit-user-select: none;
3613
- -moz-user-select: none;
3614
- -ms-user-select: none;
3615
- user-select: none;
3616
- }
3617
- /*
3618
- .sg-wrapper-less .btn:focus,
3619
- .sg-wrapper-less .btn:active:focus,
3620
- .sg-wrapper-less .btn.active:focus,
3621
- .sg-wrapper-less .btn.focus,
3622
- .sg-wrapper-less .btn:active.focus,
3623
- .sg-wrapper-less .btn.active.focus {
3624
- outline: thin dotted;
3625
- outline: 5px auto -webkit-focus-ring-color;
3626
- outline-offset: -2px;
3627
- }*/
3628
- .sg-wrapper-less .btn:hover,
3629
- .sg-wrapper-less .btn:focus,
3630
- .sg-wrapper-less .btn.focus {
3631
- color: #ffffff;
3632
- text-decoration: none;
3633
- }
3634
- .sg-wrapper-less .btn:active,
3635
- .sg-wrapper-less .btn.active {
3636
- outline: 0;
3637
- background-image: none;
3638
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3639
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3640
- }
3641
- .sg-wrapper-less .btn.disabled,
3642
- .sg-wrapper-less .btn[disabled],
3643
- .sg-wrapper-less fieldset[disabled] .btn {
3644
- cursor: not-allowed;
3645
- pointer-events: none;
3646
- opacity: 0.65;
3647
- filter: alpha(opacity=65);
3648
- -webkit-box-shadow: none;
3649
- box-shadow: none;
3650
- }
3651
- .sg-wrapper-less .btn-default {
3652
- color: #ffffff;
3653
- background-color: #222222;
3654
- border-color: #222222;
3655
- }
3656
- .sg-wrapper-less .btn-default:hover,
3657
- .sg-wrapper-less .btn-default:focus,
3658
- .sg-wrapper-less .btn-default.focus,
3659
- .sg-wrapper-less .btn-default:active,
3660
- .sg-wrapper-less .btn-default.active,
3661
- .sg-wrapper-less .open > .dropdown-toggle.btn-default {
3662
- color: #ffffff;
3663
- background-color: #090909;
3664
- border-color: #040404;
3665
- }
3666
- .sg-wrapper-less .btn-default:active,
3667
- .sg-wrapper-less .btn-default.active,
3668
- .sg-wrapper-less .open > .dropdown-toggle.btn-default {
3669
- background-image: none;
3670
- }
3671
- .sg-wrapper-less .btn-default.disabled,
3672
- .sg-wrapper-less .btn-default[disabled],
3673
- .sg-wrapper-less fieldset[disabled] .btn-default,
3674
- .sg-wrapper-less .btn-default.disabled:hover,
3675
- .sg-wrapper-less .btn-default[disabled]:hover,
3676
- .sg-wrapper-less fieldset[disabled] .btn-default:hover,
3677
- .sg-wrapper-less .btn-default.disabled:focus,
3678
- .sg-wrapper-less .btn-default[disabled]:focus,
3679
- .sg-wrapper-less fieldset[disabled] .btn-default:focus,
3680
- .sg-wrapper-less .btn-default.disabled.focus,
3681
- .sg-wrapper-less .btn-default[disabled].focus,
3682
- .sg-wrapper-less fieldset[disabled] .btn-default.focus,
3683
- .sg-wrapper-less .btn-default.disabled:active,
3684
- .sg-wrapper-less .btn-default[disabled]:active,
3685
- .sg-wrapper-less fieldset[disabled] .btn-default:active,
3686
- .sg-wrapper-less .btn-default.disabled.active,
3687
- .sg-wrapper-less .btn-default[disabled].active,
3688
- .sg-wrapper-less fieldset[disabled] .btn-default.active {
3689
- background-color: #222222;
3690
- border-color: #222222;
3691
- }
3692
- .sg-wrapper-less .btn-default .badge {
3693
- color: #222222;
3694
- background-color: #ffffff;
3695
- }
3696
- .sg-wrapper-less .btn-primary {
3697
- color: #0021C8;
3698
- background-color: #ffffff;
3699
- border-color: #0021C8;
3700
- border-radius: 8px;
3701
- font-weight: bold;
3702
- }
3703
- .sg-wrapper-less .btn-primary:hover,
3704
- .sg-wrapper-less .btn-primary:focus,
3705
- .sg-wrapper-less .btn-primary.focus,
3706
- .sg-wrapper-less .btn-primary:active,
3707
- .sg-wrapper-less .btn-primary.active,
3708
- .sg-wrapper-less .open > .dropdown-toggle.btn-primary {
3709
- color: #ffffff;
3710
- background-color: #0021C8;
3711
- border-color: #ffffff;
3712
- }
3713
- .sg-wrapper-less .btn-primary:active,
3714
- .sg-wrapper-less .btn-primary.active,
3715
- .sg-wrapper-less .open > .dropdown-toggle.btn-primary {
3716
- background-image: none;
3717
- }
3718
- .sg-wrapper-less .btn-primary.disabled,
3719
- .sg-wrapper-less .btn-primary[disabled],
3720
- .sg-wrapper-less fieldset[disabled] .btn-primary,
3721
- .sg-wrapper-less .btn-primary.disabled:hover,
3722
- .sg-wrapper-less .btn-primary[disabled]:hover,
3723
- .sg-wrapper-less fieldset[disabled] .btn-primary:hover,
3724
- .sg-wrapper-less .btn-primary.disabled:focus,
3725
- .sg-wrapper-less .btn-primary[disabled]:focus,
3726
- .sg-wrapper-less fieldset[disabled] .btn-primary:focus,
3727
- .sg-wrapper-less .btn-primary.disabled.focus,
3728
- .sg-wrapper-less .btn-primary[disabled].focus,
3729
- .sg-wrapper-less fieldset[disabled] .btn-primary.focus,
3730
- .sg-wrapper-less .btn-primary.disabled:active,
3731
- .sg-wrapper-less .btn-primary[disabled]:active,
3732
- .sg-wrapper-less fieldset[disabled] .btn-primary:active,
3733
- .sg-wrapper-less .btn-primary.disabled.active,
3734
- .sg-wrapper-less .btn-primary[disabled].active,
3735
- .sg-wrapper-less fieldset[disabled] .btn-primary.active {
3736
- background-color: #ffffff;
3737
- border-color: #989898;
3738
- color: #C9C9C9;
3739
- }
3740
- .sg-wrapper-less .btn-primary .badge {
3741
- color: #2780e3;
3742
- background-color: #ffffff;
3743
- }
3744
- .sg-wrapper-less .btn-success {
3745
- color: #ffffff !important;
3746
- background-color: #0021C8;
3747
- border-color: #0021C8;
3748
- border-radius: 8px;
3749
- }
3750
- .sg-wrapper-less .btn-success:hover,
3751
- .sg-wrapper-less .btn-success:focus,
3752
- .sg-wrapper-less .btn-success.focus,
3753
- .sg-wrapper-less .btn-success:active,
3754
- .sg-wrapper-less .btn-success.active,
3755
- .sg-wrapper-less .open > .dropdown-toggle.btn-success {
3756
- color: #0021C8 !important;
3757
- background-color: #ffffff;
3758
- border-color: #0021C8;
3759
- box-shadow: none;
3760
- text-decoration: none !important;
3761
- }
3762
- .sg-wrapper-less .btn-success:active,
3763
- .sg-wrapper-less .btn-success.active,
3764
- .sg-wrapper-less .open > .dropdown-toggle.btn-success {
3765
- background-image: none;
3766
- }
3767
- .sg-wrapper-less .btn-success.disabled,
3768
- .sg-wrapper-less .btn-success[disabled],
3769
- .sg-wrapper-less fieldset[disabled] .btn-success,
3770
- .sg-wrapper-less .btn-success.disabled:hover,
3771
- .sg-wrapper-less .btn-success[disabled]:hover,
3772
- .sg-wrapper-less fieldset[disabled] .btn-success:hover,
3773
- .sg-wrapper-less .btn-success.disabled:focus,
3774
- .sg-wrapper-less .btn-success[disabled]:focus,
3775
- .sg-wrapper-less fieldset[disabled] .btn-success:focus,
3776
- .sg-wrapper-less .btn-success.disabled.focus,
3777
- .sg-wrapper-less .btn-success[disabled].focus,
3778
- .sg-wrapper-less fieldset[disabled] .btn-success.focus,
3779
- .sg-wrapper-less .btn-success.disabled:active,
3780
- .sg-wrapper-less .btn-success[disabled]:active,
3781
- .sg-wrapper-less fieldset[disabled] .btn-success:active,
3782
- .sg-wrapper-less .btn-success.disabled.active,
3783
- .sg-wrapper-less .btn-success[disabled].active,
3784
- .sg-wrapper-less fieldset[disabled] .btn-success.active {
3785
- background-color: rgba(0, 33, 200, 0.2);
3786
- border-color: rgba(0, 33, 200, 0.2);
3787
- }
3788
- .sg-wrapper-less .btn-success .badge {
3789
- color: #3fb618;
3790
- background-color: #ffffff;
3791
- }
3792
- .sg-wrapper-less .btn-info {
3793
- color: #ffffff;
3794
- background-color: #9954bb;
3795
- border-color: #9954bb;
3796
- }
3797
- .sg-wrapper-less .btn-info:hover,
3798
- .sg-wrapper-less .btn-info:focus,
3799
- .sg-wrapper-less .btn-info.focus,
3800
- .sg-wrapper-less .btn-info:active,
3801
- .sg-wrapper-less .btn-info.active,
3802
- .sg-wrapper-less .open > .dropdown-toggle.btn-info {
3803
- color: #ffffff;
3804
- background-color: #7e3f9d;
3805
- border-color: #783c96;
3806
- }
3807
- .sg-wrapper-less .btn-info:active,
3808
- .sg-wrapper-less .btn-info.active,
3809
- .sg-wrapper-less .open > .dropdown-toggle.btn-info {
3810
- background-image: none;
3811
- }
3812
- .sg-wrapper-less .btn-info.disabled,
3813
- .sg-wrapper-less .btn-info[disabled],
3814
- .sg-wrapper-less fieldset[disabled] .btn-info,
3815
- .sg-wrapper-less .btn-info.disabled:hover,
3816
- .sg-wrapper-less .btn-info[disabled]:hover,
3817
- .sg-wrapper-less fieldset[disabled] .btn-info:hover,
3818
- .sg-wrapper-less .btn-info.disabled:focus,
3819
- .sg-wrapper-less .btn-info[disabled]:focus,
3820
- .sg-wrapper-less fieldset[disabled] .btn-info:focus,
3821
- .sg-wrapper-less .btn-info.disabled.focus,
3822
- .sg-wrapper-less .btn-info[disabled].focus,
3823
- .sg-wrapper-less fieldset[disabled] .btn-info.focus,
3824
- .sg-wrapper-less .btn-info.disabled:active,
3825
- .sg-wrapper-less .btn-info[disabled]:active,
3826
- .sg-wrapper-less fieldset[disabled] .btn-info:active,
3827
- .sg-wrapper-less .btn-info.disabled.active,
3828
- .sg-wrapper-less .btn-info[disabled].active,
3829
- .sg-wrapper-less fieldset[disabled] .btn-info.active {
3830
- background-color: #9954bb;
3831
- border-color: #9954bb;
3832
- }
3833
- .sg-wrapper-less .btn-info .badge {
3834
- color: #9954bb;
3835
- background-color: #ffffff;
3836
- }
3837
- .sg-wrapper-less .btn-warning {
3838
- color: #ffffff;
3839
- background-color: #ff7518;
3840
- border-color: #ff7518;
3841
- }
3842
- .sg-wrapper-less .btn-warning:hover,
3843
- .sg-wrapper-less .btn-warning:focus,
3844
- .sg-wrapper-less .btn-warning.focus,
3845
- .sg-wrapper-less .btn-warning:active,
3846
- .sg-wrapper-less .btn-warning.active,
3847
- .sg-wrapper-less .open > .dropdown-toggle.btn-warning {
3848
- color: #ffffff;
3849
- background-color: #e45c00;
3850
- border-color: #da5800;
3851
- }
3852
- .sg-wrapper-less .btn-warning:active,
3853
- .sg-wrapper-less .btn-warning.active,
3854
- .sg-wrapper-less .open > .dropdown-toggle.btn-warning {
3855
- background-image: none;
3856
- }
3857
- .sg-wrapper-less .btn-warning.disabled,
3858
- .sg-wrapper-less .btn-warning[disabled],
3859
- .sg-wrapper-less fieldset[disabled] .btn-warning,
3860
- .sg-wrapper-less .btn-warning.disabled:hover,
3861
- .sg-wrapper-less .btn-warning[disabled]:hover,
3862
- .sg-wrapper-less fieldset[disabled] .btn-warning:hover,
3863
- .sg-wrapper-less .btn-warning.disabled:focus,
3864
- .sg-wrapper-less .btn-warning[disabled]:focus,
3865
- .sg-wrapper-less fieldset[disabled] .btn-warning:focus,
3866
- .sg-wrapper-less .btn-warning.disabled.focus,
3867
- .sg-wrapper-less .btn-warning[disabled].focus,
3868
- .sg-wrapper-less fieldset[disabled] .btn-warning.focus,
3869
- .sg-wrapper-less .btn-warning.disabled:active,
3870
- .sg-wrapper-less .btn-warning[disabled]:active,
3871
- .sg-wrapper-less fieldset[disabled] .btn-warning:active,
3872
- .sg-wrapper-less .btn-warning.disabled.active,
3873
- .sg-wrapper-less .btn-warning[disabled].active,
3874
- .sg-wrapper-less fieldset[disabled] .btn-warning.active {
3875
- background-color: #ff7518;
3876
- border-color: #ff7518;
3877
- }
3878
- .sg-wrapper-less .btn-warning .badge {
3879
- color: #ff7518;
3880
- background-color: #ffffff;
3881
- }
3882
- .sg-wrapper-less .btn-danger {
3883
- color: #ffffff;
3884
- background-color: #C20000;
3885
- border-color: #C20000;
3886
- border-radius: 8px;
3887
- }
3888
- .sg-wrapper-less .btn-danger:hover,
3889
- .sg-wrapper-less .btn-danger:focus,
3890
- .sg-wrapper-less .btn-danger.focus,
3891
- .sg-wrapper-less .btn-danger:active,
3892
- .sg-wrapper-less .btn-danger.active,
3893
- .sg-wrapper-less .open > .dropdown-toggle.btn-danger {
3894
- color: #C20000;
3895
- background-color: #ffffff;
3896
- border-color: #C20000;
3897
- }
3898
- .sg-wrapper-less .btn-danger:active,
3899
- .sg-wrapper-less .btn-danger.active,
3900
- .sg-wrapper-less .open > .dropdown-toggle.btn-danger {
3901
- background-image: none;
3902
- }
3903
- .sg-wrapper-less .btn-danger.disabled,
3904
- .sg-wrapper-less .btn-danger[disabled],
3905
- .sg-wrapper-less fieldset[disabled] .btn-danger,
3906
- .sg-wrapper-less .btn-danger.disabled:hover,
3907
- .sg-wrapper-less .btn-danger[disabled]:hover,
3908
- .sg-wrapper-less fieldset[disabled] .btn-danger:hover,
3909
- .sg-wrapper-less .btn-danger.disabled:focus,
3910
- .sg-wrapper-less .btn-danger[disabled]:focus,
3911
- .sg-wrapper-less fieldset[disabled] .btn-danger:focus,
3912
- .sg-wrapper-less .btn-danger.disabled.focus,
3913
- .sg-wrapper-less .btn-danger[disabled].focus,
3914
- .sg-wrapper-less fieldset[disabled] .btn-danger.focus,
3915
- .sg-wrapper-less .btn-danger.disabled:active,
3916
- .sg-wrapper-less .btn-danger[disabled]:active,
3917
- .sg-wrapper-less fieldset[disabled] .btn-danger:active,
3918
- .sg-wrapper-less .btn-danger.disabled.active,
3919
- .sg-wrapper-less .btn-danger[disabled].active,
3920
- .sg-wrapper-less fieldset[disabled] .btn-danger.active {
3921
- background-color: #ff0039;
3922
- border-color: #ff0039;
3923
- }
3924
- .sg-wrapper-less .btn-danger .badge {
3925
- color: #ff0039;
3926
- background-color: #ffffff;
3927
- }
3928
- .sg-wrapper-less .btn-link {
3929
- color: #2780e3;
3930
- font-weight: normal;
3931
- border-radius: 0;
3932
- }
3933
- .sg-wrapper-less .btn-link,
3934
- .sg-wrapper-less .btn-link:active,
3935
- .sg-wrapper-less .btn-link.active,
3936
- .sg-wrapper-less .btn-link[disabled],
3937
- .sg-wrapper-less fieldset[disabled] .btn-link {
3938
- background-color: transparent;
3939
- -webkit-box-shadow: none;
3940
- box-shadow: none;
3941
- }
3942
- .sg-wrapper-less .btn-link,
3943
- .sg-wrapper-less .btn-link:hover,
3944
- .sg-wrapper-less .btn-link:focus,
3945
- .sg-wrapper-less .btn-link:active {
3946
- border-color: transparent;
3947
- }
3948
- .sg-wrapper-less .btn-link:hover,
3949
- .sg-wrapper-less .btn-link:focus {
3950
- color: #165ba8;
3951
- text-decoration: underline;
3952
- background-color: transparent;
3953
- }
3954
- .sg-wrapper-less .btn-link[disabled]:hover,
3955
- .sg-wrapper-less fieldset[disabled] .btn-link:hover,
3956
- .sg-wrapper-less .btn-link[disabled]:focus,
3957
- .sg-wrapper-less fieldset[disabled] .btn-link:focus {
3958
- color: #999999;
3959
- text-decoration: none;
3960
- }
3961
- .sg-wrapper-less .btn-lg,
3962
- .sg-wrapper-less .btn-group-lg > .btn {
3963
- padding: 18px 30px;
3964
- font-size: 19px;
3965
- line-height: 1.3333333;
3966
- border-radius: 0;
3967
- }
3968
- .sg-wrapper-less .btn-sm,
3969
- .sg-wrapper-less .btn-group-sm > .btn {
3970
- padding: 5px 10px;
3971
- font-size: 13px;
3972
- line-height: 1.5;
3973
- border-radius: 0;
3974
- }
3975
- .sg-wrapper-less .btn-xs,
3976
- .sg-wrapper-less .btn-group-xs > .btn {
3977
- padding: 1px 5px;
3978
- font-size: 13px;
3979
- line-height: 1.5;
3980
- border-radius: 0;
3981
- }
3982
- .sg-wrapper-less .btn-block {
3983
- display: block;
3984
- width: 100%;
3985
- }
3986
- .sg-wrapper-less .btn-block + .btn-block {
3987
- margin-top: 5px;
3988
- }
3989
- .sg-wrapper-less input[type="submit"].btn-block,
3990
- .sg-wrapper-less input[type="reset"].btn-block,
3991
- .sg-wrapper-less input[type="button"].btn-block {
3992
- width: 100%;
3993
- }
3994
- .sg-wrapper-less .fade {
3995
- opacity: 0;
3996
- -webkit-transition: opacity 0.15s linear;
3997
- -o-transition: opacity 0.15s linear;
3998
- transition: opacity 0.15s linear;
3999
- }
4000
- .sg-wrapper-less .fade.in {
4001
- opacity: 1;
4002
- }
4003
- .sg-wrapper-less .collapse {
4004
- display: none;
4005
- }
4006
- .sg-wrapper-less .collapse.in {
4007
- display: block;
4008
- }
4009
- .sg-wrapper-less tr.collapse.in {
4010
- display: table-row;
4011
- }
4012
- .sg-wrapper-less tbody.collapse.in {
4013
- display: table-row-group;
4014
- }
4015
- .sg-wrapper-less .collapsing {
4016
- position: relative;
4017
- height: 0;
4018
- overflow: hidden;
4019
- -webkit-transition-property: height, visibility;
4020
- -o-transition-property: height, visibility;
4021
- transition-property: height, visibility;
4022
- -webkit-transition-duration: 0.35s;
4023
- -o-transition-duration: 0.35s;
4024
- transition-duration: 0.35s;
4025
- -webkit-transition-timing-function: ease;
4026
- -o-transition-timing-function: ease;
4027
- transition-timing-function: ease;
4028
- }
4029
- .sg-wrapper-less .caret {
4030
- display: inline-block;
4031
- width: 0;
4032
- height: 0;
4033
- margin-left: 2px;
4034
- vertical-align: middle;
4035
- border-top: 4px dashed;
4036
- border-right: 4px solid transparent;
4037
- border-left: 4px solid transparent;
4038
- }
4039
- .sg-wrapper-less .dropup,
4040
- .sg-wrapper-less .dropdown {
4041
- position: relative;
4042
- }
4043
- .sg-wrapper-less .dropdown-toggle:focus {
4044
- outline: 0;
4045
- }
4046
- .sg-wrapper-less .dropdown-menu {
4047
- position: absolute;
4048
- top: 100%;
4049
- left: 0;
4050
- z-index: 1000;
4051
- display: none;
4052
- float: left;
4053
- min-width: 160px;
4054
- padding: 5px 0;
4055
- margin: 2px 0 0;
4056
- list-style: none;
4057
- font-size: 15px;
4058
- text-align: left;
4059
- background-color: #ffffff;
4060
- border: 1px solid #cccccc;
4061
- border: 1px solid rgba(0, 0, 0, 0.15);
4062
- border-radius: 0;
4063
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
4064
- box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
4065
- -webkit-background-clip: padding-box;
4066
- background-clip: padding-box;
4067
- }
4068
- .sg-wrapper-less .dropdown-menu.pull-right {
4069
- right: 0;
4070
- left: auto;
4071
- }
4072
- .sg-wrapper-less .dropdown-menu .divider {
4073
- height: 1px;
4074
- margin: 9.5px 0;
4075
- overflow: hidden;
4076
- background-color: #e5e5e5;
4077
- }
4078
- .sg-wrapper-less .dropdown-menu > li > a {
4079
- display: block;
4080
- padding: 3px 20px;
4081
- clear: both;
4082
- font-weight: normal;
4083
- line-height: 1.42857143;
4084
- color: #333333;
4085
- white-space: nowrap;
4086
- }
4087
- .sg-wrapper-less .dropdown-menu > li > a:hover,
4088
- .sg-wrapper-less .dropdown-menu > li > a:focus {
4089
- text-decoration: none;
4090
- color: #ffffff;
4091
- background-color: #0021C8;
4092
- }
4093
- .sg-wrapper-less .dropdown-menu > .active > a,
4094
- .sg-wrapper-less .dropdown-menu > .active > a:hover,
4095
- .sg-wrapper-less .dropdown-menu > .active > a:focus {
4096
- color: #ffffff;
4097
- text-decoration: none;
4098
- outline: 0;
4099
- background-color: #2780e3;
4100
- }
4101
- .sg-wrapper-less .dropdown-menu > .disabled > a,
4102
- .sg-wrapper-less .dropdown-menu > .disabled > a:hover,
4103
- .sg-wrapper-less .dropdown-menu > .disabled > a:focus {
4104
- color: #999999;
4105
- }
4106
- .sg-wrapper-less .dropdown-menu > .disabled > a:hover,
4107
- .sg-wrapper-less .dropdown-menu > .disabled > a:focus {
4108
- text-decoration: none;
4109
- background-color: transparent;
4110
- background-image: none;
4111
- filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
4112
- cursor: not-allowed;
4113
- }
4114
- .sg-wrapper-less .open > .dropdown-menu {
4115
- display: block;
4116
- }
4117
- .sg-wrapper-less .open > a {
4118
- outline: 0;
4119
- }
4120
- .sg-wrapper-less .dropdown-menu-right {
4121
- left: auto;
4122
- right: 0;
4123
- }
4124
- .sg-wrapper-less .dropdown-menu-left {
4125
- left: 0;
4126
- right: auto;
4127
- }
4128
- .sg-wrapper-less .dropdown-header {
4129
- display: block;
4130
- padding: 3px 20px;
4131
- font-size: 13px;
4132
- line-height: 1.42857143;
4133
- color: #999999;
4134
- white-space: nowrap;
4135
- }
4136
- .sg-wrapper-less .dropdown-backdrop {
4137
- position: fixed;
4138
- left: 0;
4139
- right: 0;
4140
- bottom: 0;
4141
- top: 0;
4142
- z-index: 990;
4143
- }
4144
- .sg-wrapper-less .pull-right > .dropdown-menu {
4145
- right: 0;
4146
- left: auto;
4147
- }
4148
- .sg-wrapper-less .dropup .caret,
4149
- .sg-wrapper-less .navbar-fixed-bottom .dropdown .caret {
4150
- border-top: 0;
4151
- border-bottom: 4px solid;
4152
- content: "";
4153
- }
4154
- .sg-wrapper-less .dropup .dropdown-menu,
4155
- .sg-wrapper-less .navbar-fixed-bottom .dropdown .dropdown-menu {
4156
- top: auto;
4157
- bottom: 100%;
4158
- margin-bottom: 2px;
4159
- }
4160
- @media (min-width: 768px) {
4161
- .sg-wrapper-less .navbar-right .dropdown-menu {
4162
- left: auto;
4163
- right: 0;
4164
- }
4165
- .sg-wrapper-less .navbar-right .dropdown-menu-left {
4166
- left: 0;
4167
- right: auto;
4168
- }
4169
- }
4170
- .sg-wrapper-less .btn-group,
4171
- .sg-wrapper-less .btn-group-vertical {
4172
- position: relative;
4173
- display: inline-block;
4174
- vertical-align: middle;
4175
- }
4176
- .sg-wrapper-less .btn-group > .btn,
4177
- .sg-wrapper-less .btn-group-vertical > .btn {
4178
- position: relative;
4179
- float: left;
4180
- }
4181
- .sg-wrapper-less .btn-group > .btn:hover,
4182
- .sg-wrapper-less .btn-group-vertical > .btn:hover,
4183
- .sg-wrapper-less .btn-group > .btn:focus,
4184
- .sg-wrapper-less .btn-group-vertical > .btn:focus,
4185
- .sg-wrapper-less .btn-group > .btn:active,
4186
- .sg-wrapper-less .btn-group-vertical > .btn:active,
4187
- .sg-wrapper-less .btn-group > .btn.active,
4188
- .sg-wrapper-less .btn-group-vertical > .btn.active {
4189
- z-index: 2;
4190
- }
4191
- .sg-wrapper-less .btn-group .btn + .btn,
4192
- .sg-wrapper-less .btn-group .btn + .btn-group,
4193
- .sg-wrapper-less .btn-group .btn-group + .btn,
4194
- .sg-wrapper-less .btn-group .btn-group + .btn-group {
4195
- margin-left: -1px;
4196
- }
4197
- .sg-wrapper-less .btn-toolbar {
4198
- margin-left: -5px;
4199
- }
4200
- .sg-wrapper-less .btn-toolbar .btn-group,
4201
- .sg-wrapper-less .btn-toolbar .input-group {
4202
- float: left;
4203
- }
4204
- .sg-wrapper-less .btn-toolbar > .btn,
4205
- .sg-wrapper-less .btn-toolbar > .btn-group,
4206
- .sg-wrapper-less .btn-toolbar > .input-group {
4207
- margin-left: 5px;
4208
- }
4209
- .sg-wrapper-less .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
4210
- border-radius: 0;
4211
- }
4212
- .sg-wrapper-less .btn-group > .btn:first-child {
4213
- margin-left: 0;
4214
- }
4215
- .sg-wrapper-less .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
4216
- border-bottom-right-radius: 0;
4217
- border-top-right-radius: 0;
4218
- }
4219
- .sg-wrapper-less .btn-group > .btn:last-child:not(:first-child),
4220
- .sg-wrapper-less .btn-group > .dropdown-toggle:not(:first-child) {
4221
- border-bottom-left-radius: 0;
4222
- border-top-left-radius: 0;
4223
- }
4224
- .sg-wrapper-less .btn-group > .btn-group {
4225
- float: left;
4226
- }
4227
- .sg-wrapper-less .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
4228
- border-radius: 0;
4229
- }
4230
- .sg-wrapper-less .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
4231
- .sg-wrapper-less .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
4232
- border-bottom-right-radius: 0;
4233
- border-top-right-radius: 0;
4234
- }
4235
- .sg-wrapper-less .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
4236
- border-bottom-left-radius: 0;
4237
- border-top-left-radius: 0;
4238
- }
4239
- .sg-wrapper-less .btn-group .dropdown-toggle:active,
4240
- .sg-wrapper-less .btn-group.open .dropdown-toggle {
4241
- outline: 0;
4242
- }
4243
- .sg-wrapper-less .btn-group > .btn + .dropdown-toggle {
4244
- padding-left: 8px;
4245
- padding-right: 8px;
4246
- }
4247
- .sg-wrapper-less .btn-group > .btn-lg + .dropdown-toggle {
4248
- padding-left: 12px;
4249
- padding-right: 12px;
4250
- }
4251
- .sg-wrapper-less .btn-group.open .dropdown-toggle {
4252
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
4253
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
4254
- }
4255
- .sg-wrapper-less .btn-group.open .dropdown-toggle.btn-link {
4256
- -webkit-box-shadow: none;
4257
- box-shadow: none;
4258
- }
4259
- .sg-wrapper-less .btn .caret {
4260
- margin-left: 0;
4261
- }
4262
- .sg-wrapper-less .btn-lg .caret {
4263
- border-width: 5px 5px 0;
4264
- border-bottom-width: 0;
4265
- }
4266
- .sg-wrapper-less .dropup .btn-lg .caret {
4267
- border-width: 0 5px 5px;
4268
- }
4269
- .sg-wrapper-less .btn-group-vertical > .btn,
4270
- .sg-wrapper-less .btn-group-vertical > .btn-group,
4271
- .sg-wrapper-less .btn-group-vertical > .btn-group > .btn {
4272
- display: block;
4273
- float: none;
4274
- width: 100%;
4275
- max-width: 100%;
4276
- }
4277
- .sg-wrapper-less .btn-group-vertical > .btn-group > .btn {
4278
- float: none;
4279
- }
4280
- .sg-wrapper-less .btn-group-vertical > .btn + .btn,
4281
- .sg-wrapper-less .btn-group-vertical > .btn + .btn-group,
4282
- .sg-wrapper-less .btn-group-vertical > .btn-group + .btn,
4283
- .sg-wrapper-less .btn-group-vertical > .btn-group + .btn-group {
4284
- margin-top: -1px;
4285
- margin-left: 0;
4286
- }
4287
- .sg-wrapper-less .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
4288
- border-radius: 0;
4289
- }
4290
- .sg-wrapper-less .btn-group-vertical > .btn:first-child:not(:last-child) {
4291
- border-top-right-radius: 0;
4292
- border-bottom-right-radius: 0;
4293
- border-bottom-left-radius: 0;
4294
- }
4295
- .sg-wrapper-less .btn-group-vertical > .btn:last-child:not(:first-child) {
4296
- border-bottom-left-radius: 0;
4297
- border-top-right-radius: 0;
4298
- border-top-left-radius: 0;
4299
- }
4300
- .sg-wrapper-less .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
4301
- border-radius: 0;
4302
- }
4303
- .sg-wrapper-less .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
4304
- .sg-wrapper-less .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
4305
- border-bottom-right-radius: 0;
4306
- border-bottom-left-radius: 0;
4307
- }
4308
- .sg-wrapper-less .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
4309
- border-top-right-radius: 0;
4310
- border-top-left-radius: 0;
4311
- }
4312
- .sg-wrapper-less .btn-group-justified {
4313
- display: table;
4314
- width: 100%;
4315
- table-layout: fixed;
4316
- border-collapse: separate;
4317
- }
4318
- .sg-wrapper-less .btn-group-justified > .btn,
4319
- .sg-wrapper-less .btn-group-justified > .btn-group {
4320
- float: none;
4321
- display: table-cell;
4322
- width: 1%;
4323
- }
4324
- .sg-wrapper-less .btn-group-justified > .btn-group .btn {
4325
- width: 100%;
4326
- }
4327
- .sg-wrapper-less .btn-group-justified > .btn-group .dropdown-menu {
4328
- left: auto;
4329
- }
4330
- .sg-wrapper-less [data-toggle="buttons"] > .btn input[type="radio"],
4331
- .sg-wrapper-less [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
4332
- .sg-wrapper-less [data-toggle="buttons"] > .btn input[type="checkbox"],
4333
- .sg-wrapper-less [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
4334
- position: absolute;
4335
- clip: rect(0, 0, 0, 0);
4336
- pointer-events: none;
4337
- }
4338
-
4339
- .sg-wrapper-less input[type=radio]:checked:before {
4340
- color: #0021c8 !important;
4341
- }
4342
- .sg-wrapper-less .input-group {
4343
- position: relative;
4344
- display: table;
4345
- border-collapse: separate;
4346
- }
4347
- .sg-wrapper-less .input-group[class*="col-"] {
4348
- float: none;
4349
- padding-left: 0;
4350
- padding-right: 0;
4351
- }
4352
- .sg-wrapper-less .input-group .form-control {
4353
- position: relative;
4354
- z-index: 2;
4355
- float: left;
4356
- width: 100%;
4357
- margin-bottom: 0;
4358
- }
4359
- .sg-wrapper-less .input-group-lg > .form-control,
4360
- .sg-wrapper-less .input-group-lg > .input-group-addon,
4361
- .sg-wrapper-less .input-group-lg > .input-group-btn > .btn {
4362
- height: 64px;
4363
- padding: 18px 30px;
4364
- font-size: 19px;
4365
- line-height: 1.3333333;
4366
- border-radius: 0;
4367
- }
4368
- .sg-wrapper-less select.input-group-lg > .form-control,
4369
- .sg-wrapper-less select.input-group-lg > .input-group-addon,
4370
- .sg-wrapper-less select.input-group-lg > .input-group-btn > .btn {
4371
- height: 64px;
4372
- line-height: 64px;
4373
- }
4374
- .sg-wrapper-less textarea.input-group-lg > .form-control,
4375
- .sg-wrapper-less textarea.input-group-lg > .input-group-addon,
4376
- .sg-wrapper-less textarea.input-group-lg > .input-group-btn > .btn,
4377
- .sg-wrapper-less select[multiple].input-group-lg > .form-control,
4378
- .sg-wrapper-less select[multiple].input-group-lg > .input-group-addon,
4379
- .sg-wrapper-less select[multiple].input-group-lg > .input-group-btn > .btn {
4380
- height: auto;
4381
- }
4382
- .sg-wrapper-less .input-group-sm > .form-control,
4383
- .sg-wrapper-less .input-group-sm > .input-group-addon,
4384
- .sg-wrapper-less .input-group-sm > .input-group-btn > .btn {
4385
- height: 31px;
4386
- padding: 5px 10px;
4387
- font-size: 13px;
4388
- line-height: 1.5;
4389
- border-radius: 0;
4390
- }
4391
- .sg-wrapper-less select.input-group-sm > .form-control,
4392
- .sg-wrapper-less select.input-group-sm > .input-group-addon,
4393
- .sg-wrapper-less select.input-group-sm > .input-group-btn > .btn {
4394
- height: 31px;
4395
- line-height: 31px;
4396
- }
4397
- .sg-wrapper-less textarea.input-group-sm > .form-control,
4398
- .sg-wrapper-less textarea.input-group-sm > .input-group-addon,
4399
- .sg-wrapper-less textarea.input-group-sm > .input-group-btn > .btn,
4400
- .sg-wrapper-less select[multiple].input-group-sm > .form-control,
4401
- .sg-wrapper-less select[multiple].input-group-sm > .input-group-addon,
4402
- .sg-wrapper-less select[multiple].input-group-sm > .input-group-btn > .btn {
4403
- height: auto;
4404
- }
4405
- .sg-wrapper-less .input-group-addon,
4406
- .sg-wrapper-less .input-group-btn,
4407
- .sg-wrapper-less .input-group .form-control {
4408
- display: table-cell;
4409
- }
4410
- .sg-wrapper-less .input-group-addon:not(:first-child):not(:last-child),
4411
- .sg-wrapper-less .input-group-btn:not(:first-child):not(:last-child),
4412
- .sg-wrapper-less .input-group .form-control:not(:first-child):not(:last-child) {
4413
- border-radius: 0;
4414
- }
4415
- .sg-wrapper-less .input-group-addon,
4416
- .sg-wrapper-less .input-group-btn {
4417
- width: 1%;
4418
- white-space: nowrap;
4419
- vertical-align: middle;
4420
- }
4421
- .sg-wrapper-less .input-group-addon {
4422
- padding: 10px 18px;
4423
- font-size: 15px;
4424
- font-weight: normal;
4425
- line-height: 1;
4426
- color: #333333;
4427
- text-align: center;
4428
- background-color: #e6e6e6;
4429
- border: 1px solid #cccccc;
4430
- border-radius: 0;
4431
- }
4432
- .sg-wrapper-less .input-group-addon.input-sm {
4433
- padding: 5px 10px;
4434
- font-size: 13px;
4435
- border-radius: 0;
4436
- }
4437
- .sg-wrapper-less .input-group-addon.input-lg {
4438
- padding: 18px 30px;
4439
- font-size: 19px;
4440
- border-radius: 0;
4441
- }
4442
- .sg-wrapper-less .input-group-addon input[type="radio"],
4443
- .sg-wrapper-less .input-group-addon input[type="checkbox"] {
4444
- margin-top: 0;
4445
- }
4446
- .sg-wrapper-less .input-group .form-control:first-child,
4447
- .sg-wrapper-less .input-group-addon:first-child,
4448
- .sg-wrapper-less .input-group-btn:first-child > .btn,
4449
- .sg-wrapper-less .input-group-btn:first-child > .btn-group > .btn,
4450
- .sg-wrapper-less .input-group-btn:first-child > .dropdown-toggle,
4451
- .sg-wrapper-less .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
4452
- .sg-wrapper-less .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
4453
- border-bottom-right-radius: 0;
4454
- border-top-right-radius: 0;
4455
- }
4456
- .sg-wrapper-less .input-group-addon:first-child {
4457
- border-right: 0;
4458
- }
4459
- .sg-wrapper-less .input-group .form-control:last-child,
4460
- .sg-wrapper-less .input-group-addon:last-child,
4461
- .sg-wrapper-less .input-group-btn:last-child > .btn,
4462
- .sg-wrapper-less .input-group-btn:last-child > .btn-group > .btn,
4463
- .sg-wrapper-less .input-group-btn:last-child > .dropdown-toggle,
4464
- .sg-wrapper-less .input-group-btn:first-child > .btn:not(:first-child),
4465
- .sg-wrapper-less .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
4466
- border-bottom-left-radius: 0;
4467
- border-top-left-radius: 0;
4468
- }
4469
- .sg-wrapper-less .input-group-addon:last-child {
4470
- border-left: 0;
4471
- }
4472
- .sg-wrapper-less .input-group-btn {
4473
- position: relative;
4474
- font-size: 0;
4475
- white-space: nowrap;
4476
- }
4477
- .sg-wrapper-less .input-group-btn > .btn {
4478
- position: relative;
4479
- }
4480
- .sg-wrapper-less .input-group-btn > .btn + .btn {
4481
- margin-left: -1px;
4482
- }
4483
- .sg-wrapper-less .input-group-btn > .btn:hover,
4484
- .sg-wrapper-less .input-group-btn > .btn:focus,
4485
- .sg-wrapper-less .input-group-btn > .btn:active {
4486
- z-index: 2;
4487
- }
4488
- .sg-wrapper-less .input-group-btn:first-child > .btn,
4489
- .sg-wrapper-less .input-group-btn:first-child > .btn-group {
4490
- margin-right: -1px;
4491
- }
4492
- .sg-wrapper-less .input-group-btn:last-child > .btn,
4493
- .sg-wrapper-less .input-group-btn:last-child > .btn-group {
4494
- margin-left: -1px;
4495
- }
4496
- .sg-wrapper-less .nav {
4497
- margin-bottom: 0;
4498
- padding-left: 0;
4499
- list-style: none;
4500
- }
4501
- .sg-wrapper-less .nav > li {
4502
- position: relative;
4503
- display: block;
4504
- }
4505
- .sg-wrapper-less .nav > li > a {
4506
- position: relative;
4507
- display: block;
4508
- padding: 10px 15px;
4509
- }
4510
- .sg-wrapper-less .nav > li > a:hover,
4511
- .sg-wrapper-less .nav > li > a:focus {
4512
- text-decoration: none;
4513
- background-color: #e6e6e6;
4514
- }
4515
- .sg-wrapper-less .nav > li.disabled > a {
4516
- color: #999999;
4517
- }
4518
- .sg-wrapper-less .nav > li.disabled > a:hover,
4519
- .sg-wrapper-less .nav > li.disabled > a:focus {
4520
- color: #999999;
4521
- text-decoration: none;
4522
- background-color: transparent;
4523
- cursor: not-allowed;
4524
- }
4525
- .sg-wrapper-less .nav .open > a,
4526
- .sg-wrapper-less .nav .open > a:hover,
4527
- .sg-wrapper-less .nav .open > a:focus {
4528
- background-color: #e6e6e6;
4529
- border-color: #2780e3;
4530
- }
4531
- .sg-wrapper-less .nav .nav-divider {
4532
- height: 1px;
4533
- margin: 9.5px 0;
4534
- overflow: hidden;
4535
- background-color: #e5e5e5;
4536
- }
4537
- .sg-wrapper-less .nav > li > a > img {
4538
- max-width: none;
4539
- }
4540
- .sg-wrapper-less .nav-tabs {
4541
- border-bottom: 1px solid #dddddd;
4542
- }
4543
- .sg-wrapper-less .nav-tabs > li {
4544
- float: left;
4545
- margin-bottom: -1px;
4546
- }
4547
- .sg-wrapper-less .nav-tabs > li > a {
4548
- margin-right: 2px;
4549
- line-height: 1.42857143;
4550
- border: 1px solid transparent;
4551
- border-radius: 0 0 0 0;
4552
- }
4553
- .sg-wrapper-less .nav-tabs > li > a:hover {
4554
- border-color: #e6e6e6 #e6e6e6 #dddddd;
4555
- }
4556
- .sg-wrapper-less .nav-tabs > li.active > a,
4557
- .sg-wrapper-less .nav-tabs > li.active > a:hover,
4558
- .sg-wrapper-less .nav-tabs > li.active > a:focus {
4559
- color: #555555;
4560
- background-color: #ffffff;
4561
- border: 1px solid #dddddd;
4562
- border-bottom-color: transparent;
4563
- cursor: default;
4564
- }
4565
- .sg-wrapper-less .nav-tabs.nav-justified {
4566
- width: 100%;
4567
- border-bottom: 0;
4568
- }
4569
- .sg-wrapper-less .nav-tabs.nav-justified > li {
4570
- float: none;
4571
- }
4572
- .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4573
- text-align: center;
4574
- margin-bottom: 5px;
4575
- }
4576
- .sg-wrapper-less .nav-tabs.nav-justified > .dropdown .dropdown-menu {
4577
- top: auto;
4578
- left: auto;
4579
- }
4580
- @media (min-width: 768px) {
4581
- .sg-wrapper-less .nav-tabs.nav-justified > li {
4582
- display: table-cell;
4583
- width: 1%;
4584
- }
4585
- .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4586
- margin-bottom: 0;
4587
- }
4588
- }
4589
- .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4590
- margin-right: 0;
4591
- border-radius: 0;
4592
- }
4593
- .sg-wrapper-less .nav-tabs.nav-justified > .active > a,
4594
- .sg-wrapper-less .nav-tabs.nav-justified > .active > a:hover,
4595
- .sg-wrapper-less .nav-tabs.nav-justified > .active > a:focus {
4596
- border: 1px solid #dddddd;
4597
- }
4598
- @media (min-width: 768px) {
4599
- .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4600
- border-bottom: 1px solid #dddddd;
4601
- border-radius: 0 0 0 0;
4602
- }
4603
- .sg-wrapper-less .nav-tabs.nav-justified > .active > a,
4604
- .sg-wrapper-less .nav-tabs.nav-justified > .active > a:hover,
4605
- .sg-wrapper-less .nav-tabs.nav-justified > .active > a:focus {
4606
- border-bottom-color: #ffffff;
4607
- }
4608
- }
4609
- .sg-wrapper-less .nav-pills > li {
4610
- float: left;
4611
- }
4612
- .sg-wrapper-less .nav-pills > li > a {
4613
- border-radius: 0;
4614
- }
4615
- .sg-wrapper-less .nav-pills > li + li {
4616
- margin-left: 2px;
4617
- }
4618
- .sg-wrapper-less .nav-pills > li.active > a,
4619
- .sg-wrapper-less .nav-pills > li.active > a:hover,
4620
- .sg-wrapper-less .nav-pills > li.active > a:focus {
4621
- color: #ffffff;
4622
- background-color: #2780e3;
4623
- }
4624
- .sg-wrapper-less .nav-stacked > li {
4625
- float: none;
4626
- }
4627
- .sg-wrapper-less .nav-stacked > li + li {
4628
- margin-top: 2px;
4629
- margin-left: 0;
4630
- }
4631
- .sg-wrapper-less .nav-justified {
4632
- width: 100%;
4633
- }
4634
- .sg-wrapper-less .nav-justified > li {
4635
- float: none;
4636
- }
4637
- .sg-wrapper-less .nav-justified > li > a {
4638
- text-align: center;
4639
- margin-bottom: 5px;
4640
- }
4641
- .sg-wrapper-less .nav-justified > .dropdown .dropdown-menu {
4642
- top: auto;
4643
- left: auto;
4644
- }
4645
- @media (min-width: 768px) {
4646
- .sg-wrapper-less .nav-justified > li {
4647
- display: table-cell;
4648
- width: 1%;
4649
- }
4650
- .sg-wrapper-less .nav-justified > li > a {
4651
- margin-bottom: 0;
4652
- }
4653
- }
4654
- .sg-wrapper-less .nav-tabs-justified {
4655
- border-bottom: 0;
4656
- }
4657
- .sg-wrapper-less .nav-tabs-justified > li > a {
4658
- margin-right: 0;
4659
- border-radius: 0;
4660
- }
4661
- .sg-wrapper-less .nav-tabs-justified > .active > a,
4662
- .sg-wrapper-less .nav-tabs-justified > .active > a:hover,
4663
- .sg-wrapper-less .nav-tabs-justified > .active > a:focus {
4664
- border: 1px solid #dddddd;
4665
- }
4666
- @media (min-width: 768px) {
4667
- .sg-wrapper-less .nav-tabs-justified > li > a {
4668
- border-bottom: 1px solid #dddddd;
4669
- border-radius: 0 0 0 0;
4670
- }
4671
- .sg-wrapper-less .nav-tabs-justified > .active > a,
4672
- .sg-wrapper-less .nav-tabs-justified > .active > a:hover,
4673
- .sg-wrapper-less .nav-tabs-justified > .active > a:focus {
4674
- border-bottom-color: #ffffff;
4675
- }
4676
- }
4677
- .sg-wrapper-less .tab-content > .tab-pane {
4678
- display: none;
4679
- }
4680
- .sg-wrapper-less .tab-content > .active {
4681
- display: block;
4682
- }
4683
- .sg-wrapper-less .nav-tabs .dropdown-menu {
4684
- margin-top: -1px;
4685
- border-top-right-radius: 0;
4686
- border-top-left-radius: 0;
4687
- }
4688
- .sg-wrapper-less .navbar {
4689
- position: relative;
4690
- min-height: 50px;
4691
- margin-bottom: 21px;
4692
- border: 1px solid transparent;
4693
- }
4694
- @media (min-width: 768px) {
4695
- .sg-wrapper-less .navbar {
4696
- border-radius: 0;
4697
- }
4698
- }
4699
- @media (min-width: 768px) {
4700
- .sg-wrapper-less .navbar-header {
4701
- float: left;
4702
- }
4703
- }
4704
- .sg-wrapper-less .navbar-collapse {
4705
- overflow-x: visible;
4706
- padding-right: 15px;
4707
- padding-left: 15px;
4708
- border-top: 1px solid transparent;
4709
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
4710
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
4711
- -webkit-overflow-scrolling: touch;
4712
- }
4713
- .sg-wrapper-less .navbar-collapse.in {
4714
- overflow-y: auto;
4715
- }
4716
- @media (min-width: 768px) {
4717
- .sg-wrapper-less .navbar-collapse {
4718
- width: auto;
4719
- border-top: 0;
4720
- -webkit-box-shadow: none;
4721
- box-shadow: none;
4722
- }
4723
- .sg-wrapper-less .navbar-collapse.collapse {
4724
- display: block !important;
4725
- height: auto !important;
4726
- padding-bottom: 0;
4727
- overflow: visible !important;
4728
- }
4729
- .sg-wrapper-less .navbar-collapse.in {
4730
- overflow-y: visible;
4731
- }
4732
- .sg-wrapper-less .navbar-fixed-top .navbar-collapse,
4733
- .sg-wrapper-less .navbar-static-top .navbar-collapse,
4734
- .sg-wrapper-less .navbar-fixed-bottom .navbar-collapse {
4735
- padding-left: 0;
4736
- padding-right: 0;
4737
- }
4738
- }
4739
- .sg-wrapper-less .navbar-fixed-top .navbar-collapse,
4740
- .sg-wrapper-less .navbar-fixed-bottom .navbar-collapse {
4741
- max-height: 340px;
4742
- }
4743
- @media (max-device-width: 480px) and (orientation: landscape) {
4744
- .sg-wrapper-less .navbar-fixed-top .navbar-collapse,
4745
- .sg-wrapper-less .navbar-fixed-bottom .navbar-collapse {
4746
- max-height: 200px;
4747
- }
4748
- }
4749
- .sg-wrapper-less .container > .navbar-header,
4750
- .sg-wrapper-less .container-fluid > .navbar-header,
4751
- .sg-wrapper-less .container > .navbar-collapse,
4752
- .sg-wrapper-less .container-fluid > .navbar-collapse {
4753
- margin-right: -15px;
4754
- margin-left: -15px;
4755
- }
4756
- @media (min-width: 768px) {
4757
- .sg-wrapper-less .container > .navbar-header,
4758
- .sg-wrapper-less .container-fluid > .navbar-header,
4759
- .sg-wrapper-less .container > .navbar-collapse,
4760
- .sg-wrapper-less .container-fluid > .navbar-collapse {
4761
- margin-right: 0;
4762
- margin-left: 0;
4763
- }
4764
- }
4765
- .sg-wrapper-less .navbar-static-top {
4766
- z-index: 1000;
4767
- border-width: 0 0 1px;
4768
- }
4769
- @media (min-width: 768px) {
4770
- .sg-wrapper-less .navbar-static-top {
4771
- border-radius: 0;
4772
- }
4773
- }
4774
- .sg-wrapper-less .navbar-fixed-top,
4775
- .sg-wrapper-less .navbar-fixed-bottom {
4776
- position: fixed;
4777
- right: 0;
4778
- left: 0;
4779
- z-index: 1030;
4780
- }
4781
- @media (min-width: 768px) {
4782
- .sg-wrapper-less .navbar-fixed-top,
4783
- .sg-wrapper-less .navbar-fixed-bottom {
4784
- border-radius: 0;
4785
- }
4786
- }
4787
- .sg-wrapper-less .navbar-fixed-top {
4788
- top: 0;
4789
- border-width: 0 0 1px;
4790
- }
4791
- .sg-wrapper-less .navbar-fixed-bottom {
4792
- bottom: 0;
4793
- margin-bottom: 0;
4794
- border-width: 1px 0 0;
4795
- }
4796
- .sg-wrapper-less .navbar-brand {
4797
- float: left;
4798
- padding: 14.5px 15px;
4799
- font-size: 19px;
4800
- line-height: 21px;
4801
- height: 50px;
4802
- }
4803
- .sg-wrapper-less .navbar-brand:hover,
4804
- .sg-wrapper-less .navbar-brand:focus {
4805
- text-decoration: none;
4806
- }
4807
- .sg-wrapper-less .navbar-brand > img {
4808
- display: block;
4809
- }
4810
- @media (min-width: 768px) {
4811
- .sg-wrapper-less .navbar > .container .navbar-brand,
4812
- .sg-wrapper-less .navbar > .container-fluid .navbar-brand {
4813
- margin-left: -15px;
4814
- }
4815
- }
4816
- .sg-wrapper-less .navbar-toggle {
4817
- position: relative;
4818
- float: right;
4819
- margin-right: 15px;
4820
- padding: 9px 10px;
4821
- margin-top: 8px;
4822
- margin-bottom: 8px;
4823
- background-color: transparent;
4824
- background-image: none;
4825
- border: 1px solid transparent;
4826
- border-radius: 0;
4827
- }
4828
- .sg-wrapper-less .navbar-toggle:focus {
4829
- outline: 0;
4830
- }
4831
- .sg-wrapper-less .navbar-toggle .icon-bar {
4832
- display: block;
4833
- width: 22px;
4834
- height: 2px;
4835
- border-radius: 1px;
4836
- }
4837
- .sg-wrapper-less .navbar-toggle .icon-bar + .icon-bar {
4838
- margin-top: 4px;
4839
- }
4840
- @media (min-width: 768px) {
4841
- .sg-wrapper-less .navbar-toggle {
4842
- display: none;
4843
- }
4844
- }
4845
- .sg-wrapper-less .navbar-nav {
4846
- margin: 7.25px -15px;
4847
- }
4848
- .sg-wrapper-less .navbar-nav > li > a {
4849
- padding-top: 10px;
4850
- padding-bottom: 10px;
4851
- line-height: 21px;
4852
- }
4853
- @media (max-width: 767px) {
4854
- .sg-wrapper-less .navbar-nav .open .dropdown-menu {
4855
- position: static;
4856
- float: none;
4857
- width: auto;
4858
- margin-top: 0;
4859
- background-color: transparent;
4860
- border: 0;
4861
- -webkit-box-shadow: none;
4862
- box-shadow: none;
4863
- }
4864
- .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a,
4865
- .sg-wrapper-less .navbar-nav .open .dropdown-menu .dropdown-header {
4866
- padding: 5px 15px 5px 25px;
4867
- }
4868
- .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a {
4869
- line-height: 21px;
4870
- }
4871
- .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a:hover,
4872
- .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a:focus {
4873
- background-image: none;
4874
- }
4875
- }
4876
- @media (min-width: 768px) {
4877
- .sg-wrapper-less .navbar-nav {
4878
- float: left;
4879
- margin: 0;
4880
- }
4881
- .sg-wrapper-less .navbar-nav > li {
4882
- float: left;
4883
- }
4884
- .sg-wrapper-less .navbar-nav > li > a {
4885
- padding-top: 14.5px;
4886
- padding-bottom: 14.5px;
4887
- }
4888
- }
4889
- .sg-wrapper-less .navbar-form {
4890
- margin-left: -15px;
4891
- margin-right: -15px;
4892
- padding: 10px 15px;
4893
- border-top: 1px solid transparent;
4894
- border-bottom: 1px solid transparent;
4895
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4896
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4897
- margin-top: 3.5px;
4898
- margin-bottom: 3.5px;
4899
- }
4900
- @media (min-width: 768px) {
4901
- .sg-wrapper-less .navbar-form .form-group {
4902
- display: inline-block;
4903
- margin-bottom: 0;
4904
- vertical-align: middle;
4905
- }
4906
- .sg-wrapper-less .navbar-form .form-control {
4907
- display: inline-block;
4908
- width: auto;
4909
- vertical-align: middle;
4910
- }
4911
- .sg-wrapper-less .navbar-form .form-control-static {
4912
- display: inline-block;
4913
- }
4914
- .sg-wrapper-less .navbar-form .input-group {
4915
- display: inline-table;
4916
- vertical-align: middle;
4917
- }
4918
- .sg-wrapper-less .navbar-form .input-group .input-group-addon,
4919
- .sg-wrapper-less .navbar-form .input-group .input-group-btn,
4920
- .sg-wrapper-less .navbar-form .input-group .form-control {
4921
- width: auto;
4922
- }
4923
- .sg-wrapper-less .navbar-form .input-group > .form-control {
4924
- width: 100%;
4925
- }
4926
- .sg-wrapper-less .navbar-form .control-label {
4927
- margin-bottom: 0;
4928
- vertical-align: middle;
4929
- }
4930
- .sg-wrapper-less .navbar-form .radio,
4931
- .sg-wrapper-less .navbar-form .checkbox {
4932
- display: inline-block;
4933
- margin-top: 0;
4934
- margin-bottom: 0;
4935
- vertical-align: middle;
4936
- }
4937
- .sg-wrapper-less .navbar-form .radio label,
4938
- .sg-wrapper-less .navbar-form .checkbox label {
4939
- padding-left: 0;
4940
- }
4941
- .sg-wrapper-less .navbar-form .radio input[type="radio"],
4942
- .sg-wrapper-less .navbar-form .checkbox input[type="checkbox"] {
4943
- position: relative;
4944
- margin-left: 0;
4945
- }
4946
- .sg-wrapper-less .navbar-form .has-feedback .form-control-feedback {
4947
- top: 0;
4948
- }
4949
- }
4950
- @media (max-width: 767px) {
4951
- .sg-wrapper-less .navbar-form .form-group {
4952
- margin-bottom: 5px;
4953
- }
4954
- .sg-wrapper-less .navbar-form .form-group:last-child {
4955
- margin-bottom: 0;
4956
- }
4957
- }
4958
- @media (min-width: 768px) {
4959
- .sg-wrapper-less .navbar-form {
4960
- width: auto;
4961
- border: 0;
4962
- margin-left: 0;
4963
- margin-right: 0;
4964
- padding-top: 0;
4965
- padding-bottom: 0;
4966
- -webkit-box-shadow: none;
4967
- box-shadow: none;
4968
- }
4969
- }
4970
- .sg-wrapper-less .navbar-nav > li > .dropdown-menu {
4971
- margin-top: 0;
4972
- border-top-right-radius: 0;
4973
- border-top-left-radius: 0;
4974
- }
4975
- .sg-wrapper-less .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4976
- margin-bottom: 0;
4977
- border-top-right-radius: 0;
4978
- border-top-left-radius: 0;
4979
- border-bottom-right-radius: 0;
4980
- border-bottom-left-radius: 0;
4981
- }
4982
- .sg-wrapper-less .navbar-btn {
4983
- margin-top: 3.5px;
4984
- margin-bottom: 3.5px;
4985
- }
4986
- .sg-wrapper-less .navbar-btn.btn-sm {
4987
- margin-top: 9.5px;
4988
- margin-bottom: 9.5px;
4989
- }
4990
- .sg-wrapper-less .navbar-btn.btn-xs {
4991
- margin-top: 14px;
4992
- margin-bottom: 14px;
4993
- }
4994
- .sg-wrapper-less .navbar-text {
4995
- margin-top: 14.5px;
4996
- margin-bottom: 14.5px;
4997
- }
4998
- @media (min-width: 768px) {
4999
- .sg-wrapper-less .navbar-text {
5000
- float: left;
5001
- margin-left: 15px;
5002
- margin-right: 15px;
5003
- }
5004
- }
5005
- @media (min-width: 768px) {
5006
- .sg-wrapper-less .navbar-left {
5007
- float: left !important;
5008
- }
5009
- .sg-wrapper-less .navbar-right {
5010
- float: right !important;
5011
- margin-right: -15px;
5012
- }
5013
- .sg-wrapper-less .navbar-right ~ .navbar-right {
5014
- margin-right: 0;
5015
- }
5016
- }
5017
- .sg-wrapper-less .navbar-default {
5018
- background-color: #222222;
5019
- border-color: #121212;
5020
- }
5021
- .sg-wrapper-less .navbar-default .navbar-brand {
5022
- color: #ffffff;
5023
- }
5024
- .sg-wrapper-less .navbar-default .navbar-brand:hover,
5025
- .sg-wrapper-less .navbar-default .navbar-brand:focus {
5026
- color: #ffffff;
5027
- background-color: none;
5028
- }
5029
- .sg-wrapper-less .navbar-default .navbar-text {
5030
- color: #ffffff;
5031
- }
5032
- .sg-wrapper-less .navbar-default .navbar-nav > li > a {
5033
- color: #ffffff;
5034
- }
5035
- .sg-wrapper-less .navbar-default .navbar-nav > li > a:hover,
5036
- .sg-wrapper-less .navbar-default .navbar-nav > li > a:focus {
5037
- color: #ffffff;
5038
- background-color: #090909;
5039
- }
5040
- .sg-wrapper-less .navbar-default .navbar-nav > .active > a,
5041
- .sg-wrapper-less .navbar-default .navbar-nav > .active > a:hover,
5042
- .sg-wrapper-less .navbar-default .navbar-nav > .active > a:focus {
5043
- color: #ffffff;
5044
- background-color: #090909;
5045
- }
5046
- .sg-wrapper-less .navbar-default .navbar-nav > .disabled > a,
5047
- .sg-wrapper-less .navbar-default .navbar-nav > .disabled > a:hover,
5048
- .sg-wrapper-less .navbar-default .navbar-nav > .disabled > a:focus {
5049
- color: #cccccc;
5050
- background-color: transparent;
5051
- }
5052
- .sg-wrapper-less .navbar-default .navbar-toggle {
5053
- border-color: transparent;
5054
- }
5055
- .sg-wrapper-less .navbar-default .navbar-toggle:hover,
5056
- .sg-wrapper-less .navbar-default .navbar-toggle:focus {
5057
- background-color: #090909;
5058
- }
5059
- .sg-wrapper-less .navbar-default .navbar-toggle .icon-bar {
5060
- background-color: #ffffff;
5061
- }
5062
- .sg-wrapper-less .navbar-default .navbar-collapse,
5063
- .sg-wrapper-less .navbar-default .navbar-form {
5064
- border-color: #121212;
5065
- }
5066
- .sg-wrapper-less .navbar-default .navbar-nav > .open > a,
5067
- .sg-wrapper-less .navbar-default .navbar-nav > .open > a:hover,
5068
- .sg-wrapper-less .navbar-default .navbar-nav > .open > a:focus {
5069
- background-color: #090909;
5070
- color: #ffffff;
5071
- }
5072
- @media (max-width: 767px) {
5073
- .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > li > a {
5074
- color: #ffffff;
5075
- }
5076
- .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
5077
- .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
5078
- color: #ffffff;
5079
- background-color: #090909;
5080
- }
5081
- .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
5082
- .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
5083
- .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
5084
- color: #ffffff;
5085
- background-color: #090909;
5086
- }
5087
- .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
5088
- .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
5089
- .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
5090
- color: #cccccc;
5091
- background-color: transparent;
5092
- }
5093
- }
5094
- .sg-wrapper-less .navbar-default .navbar-link {
5095
- color: #ffffff;
5096
- }
5097
- .sg-wrapper-less .navbar-default .navbar-link:hover {
5098
- color: #ffffff;
5099
- }
5100
- .sg-wrapper-less .navbar-default .btn-link {
5101
- color: #ffffff;
5102
- }
5103
- .sg-wrapper-less .navbar-default .btn-link:hover,
5104
- .sg-wrapper-less .navbar-default .btn-link:focus {
5105
- color: #ffffff;
5106
- }
5107
- .sg-wrapper-less .navbar-default .btn-link[disabled]:hover,
5108
- .sg-wrapper-less fieldset[disabled] .navbar-default .btn-link:hover,
5109
- .sg-wrapper-less .navbar-default .btn-link[disabled]:focus,
5110
- .sg-wrapper-less fieldset[disabled] .navbar-default .btn-link:focus {
5111
- color: #cccccc;
5112
- }
5113
- .sg-wrapper-less .navbar-inverse {
5114
- background-color: #2780e3;
5115
- border-color: #1967be;
5116
- }
5117
- .sg-wrapper-less .navbar-inverse .navbar-brand {
5118
- color: #ffffff;
5119
- }
5120
- .sg-wrapper-less .navbar-inverse .navbar-brand:hover,
5121
- .sg-wrapper-less .navbar-inverse .navbar-brand:focus {
5122
- color: #ffffff;
5123
- background-color: none;
5124
- }
5125
- .sg-wrapper-less .navbar-inverse .navbar-text {
5126
- color: #ffffff;
5127
- }
5128
- .sg-wrapper-less .navbar-inverse .navbar-nav > li > a {
5129
- color: #ffffff;
5130
- }
5131
- .sg-wrapper-less .navbar-inverse .navbar-nav > li > a:hover,
5132
- .sg-wrapper-less .navbar-inverse .navbar-nav > li > a:focus {
5133
- color: #ffffff;
5134
- background-color: #1967be;
5135
- }
5136
- .sg-wrapper-less .navbar-inverse .navbar-nav > .active > a,
5137
- .sg-wrapper-less .navbar-inverse .navbar-nav > .active > a:hover,
5138
- .sg-wrapper-less .navbar-inverse .navbar-nav > .active > a:focus {
5139
- color: #ffffff;
5140
- background-color: #1967be;
5141
- }
5142
- .sg-wrapper-less .navbar-inverse .navbar-nav > .disabled > a,
5143
- .sg-wrapper-less .navbar-inverse .navbar-nav > .disabled > a:hover,
5144
- .sg-wrapper-less .navbar-inverse .navbar-nav > .disabled > a:focus {
5145
- color: #ffffff;
5146
- background-color: transparent;
5147
- }
5148
- .sg-wrapper-less .navbar-inverse .navbar-toggle {
5149
- border-color: transparent;
5150
- }
5151
- .sg-wrapper-less .navbar-inverse .navbar-toggle:hover,
5152
- .sg-wrapper-less .navbar-inverse .navbar-toggle:focus {
5153
- background-color: #1967be;
5154
- }
5155
- .sg-wrapper-less .navbar-inverse .navbar-toggle .icon-bar {
5156
- background-color: #ffffff;
5157
- }
5158
- .sg-wrapper-less .navbar-inverse .navbar-collapse,
5159
- .sg-wrapper-less .navbar-inverse .navbar-form {
5160
- border-color: #1a6ecc;
5161
- }
5162
- .sg-wrapper-less .navbar-inverse .navbar-nav > .open > a,
5163
- .sg-wrapper-less .navbar-inverse .navbar-nav > .open > a:hover,
5164
- .sg-wrapper-less .navbar-inverse .navbar-nav > .open > a:focus {
5165
- background-color: #1967be;
5166
- color: #ffffff;
5167
- }
5168
- @media (max-width: 767px) {
5169
- .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
5170
- border-color: #1967be;
5171
- }
5172
- .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
5173
- background-color: #1967be;
5174
- }
5175
- .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
5176
- color: #ffffff;
5177
- }
5178
- .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
5179
- .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
5180
- color: #ffffff;
5181
- background-color: #1967be;
5182
- }
5183
- .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
5184
- .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
5185
- .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
5186
- color: #ffffff;
5187
- background-color: #1967be;
5188
- }
5189
- .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
5190
- .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
5191
- .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
5192
- color: #ffffff;
5193
- background-color: transparent;
5194
- }
5195
- }
5196
- .sg-wrapper-less .navbar-inverse .navbar-link {
5197
- color: #ffffff;
5198
- }
5199
- .sg-wrapper-less .navbar-inverse .navbar-link:hover {
5200
- color: #ffffff;
5201
- }
5202
- .sg-wrapper-less .navbar-inverse .btn-link {
5203
- color: #ffffff;
5204
- }
5205
- .sg-wrapper-less .navbar-inverse .btn-link:hover,
5206
- .sg-wrapper-less .navbar-inverse .btn-link:focus {
5207
- color: #ffffff;
5208
- }
5209
- .sg-wrapper-less .navbar-inverse .btn-link[disabled]:hover,
5210
- .sg-wrapper-less fieldset[disabled] .navbar-inverse .btn-link:hover,
5211
- .sg-wrapper-less .navbar-inverse .btn-link[disabled]:focus,
5212
- .sg-wrapper-less fieldset[disabled] .navbar-inverse .btn-link:focus {
5213
- color: #ffffff;
5214
- }
5215
- .sg-wrapper-less .breadcrumb {
5216
- padding: 8px 15px;
5217
- margin-bottom: 21px;
5218
- list-style: none;
5219
- background-color: #f5f5f5;
5220
- border-radius: 0;
5221
- }
5222
- .sg-wrapper-less .breadcrumb > li {
5223
- display: inline-block;
5224
- }
5225
- .sg-wrapper-less .breadcrumb > li + li:before {
5226
- content: "/\00a0";
5227
- padding: 0 5px;
5228
- color: #cccccc;
5229
- }
5230
- .sg-wrapper-less .breadcrumb > .active {
5231
- color: #999999;
5232
- }
5233
- .sg-wrapper-less .pagination {
5234
- display: inline-block;
5235
- padding-left: 0;
5236
- margin: 21px 0;
5237
- border-radius: 0;
5238
- }
5239
- .sg-wrapper-less .pagination > li {
5240
- display: inline;
5241
- }
5242
- .sg-wrapper-less .pagination > li > a,
5243
- .sg-wrapper-less .pagination > li > span {
5244
- position: relative;
5245
- float: left;
5246
- padding: 10px 18px;
5247
- line-height: 1.42857143;
5248
- text-decoration: none;
5249
- color: #2780e3;
5250
- background-color: #ffffff;
5251
- border: 1px solid #dddddd;
5252
- margin-left: -1px;
5253
- }
5254
- .sg-wrapper-less .pagination > li:first-child > a,
5255
- .sg-wrapper-less .pagination > li:first-child > span {
5256
- margin-left: 0;
5257
- border-bottom-left-radius: 0;
5258
- border-top-left-radius: 0;
5259
- }
5260
- .sg-wrapper-less .pagination > li:last-child > a,
5261
- .sg-wrapper-less .pagination > li:last-child > span {
5262
- border-bottom-right-radius: 0;
5263
- border-top-right-radius: 0;
5264
- }
5265
- .sg-wrapper-less .pagination > li > a:hover,
5266
- .sg-wrapper-less .pagination > li > span:hover,
5267
- .sg-wrapper-less .pagination > li > a:focus,
5268
- .sg-wrapper-less .pagination > li > span:focus {
5269
- color: #165ba8;
5270
- background-color: #e6e6e6;
5271
- border-color: #dddddd;
5272
- }
5273
- .sg-wrapper-less .pagination > .active > a,
5274
- .sg-wrapper-less .pagination > .active > span,
5275
- .sg-wrapper-less .pagination > .active > a:hover,
5276
- .sg-wrapper-less .pagination > .active > span:hover,
5277
- .sg-wrapper-less .pagination > .active > a:focus,
5278
- .sg-wrapper-less .pagination > .active > span:focus {
5279
- z-index: 2;
5280
- color: #999999;
5281
- background-color: #f5f5f5;
5282
- border-color: #dddddd;
5283
- cursor: default;
5284
- }
5285
- .sg-wrapper-less .pagination > .disabled > span,
5286
- .sg-wrapper-less .pagination > .disabled > span:hover,
5287
- .sg-wrapper-less .pagination > .disabled > span:focus,
5288
- .sg-wrapper-less .pagination > .disabled > a,
5289
- .sg-wrapper-less .pagination > .disabled > a:hover,
5290
- .sg-wrapper-less .pagination > .disabled > a:focus {
5291
- color: #999999;
5292
- background-color: #ffffff;
5293
- border-color: #dddddd;
5294
- cursor: not-allowed;
5295
- }
5296
- .sg-wrapper-less .pagination-lg > li > a,
5297
- .sg-wrapper-less .pagination-lg > li > span {
5298
- padding: 18px 30px;
5299
- font-size: 19px;
5300
- }
5301
- .sg-wrapper-less .pagination-lg > li:first-child > a,
5302
- .sg-wrapper-less .pagination-lg > li:first-child > span {
5303
- border-bottom-left-radius: 0;
5304
- border-top-left-radius: 0;
5305
- }
5306
- .sg-wrapper-less .pagination-lg > li:last-child > a,
5307
- .sg-wrapper-less .pagination-lg > li:last-child > span {
5308
- border-bottom-right-radius: 0;
5309
- border-top-right-radius: 0;
5310
- }
5311
- .sg-wrapper-less .pagination-sm > li > a,
5312
- .sg-wrapper-less .pagination-sm > li > span {
5313
- padding: 5px 10px;
5314
- font-size: 13px;
5315
- }
5316
- .sg-wrapper-less .pagination-sm > li:first-child > a,
5317
- .sg-wrapper-less .pagination-sm > li:first-child > span {
5318
- border-bottom-left-radius: 0;
5319
- border-top-left-radius: 0;
5320
- }
5321
- .sg-wrapper-less .pagination-sm > li:last-child > a,
5322
- .sg-wrapper-less .pagination-sm > li:last-child > span {
5323
- border-bottom-right-radius: 0;
5324
- border-top-right-radius: 0;
5325
- }
5326
- .sg-wrapper-less .pager {
5327
- padding-left: 0;
5328
- margin: 21px 0;
5329
- list-style: none;
5330
- text-align: center;
5331
- }
5332
- .sg-wrapper-less .pager li {
5333
- display: inline;
5334
- }
5335
- .sg-wrapper-less .pager li > a,
5336
- .sg-wrapper-less .pager li > span {
5337
- display: inline-block;
5338
- padding: 5px 14px;
5339
- background-color: #ffffff;
5340
- border: 1px solid #dddddd;
5341
- border-radius: 0;
5342
- }
5343
- .sg-wrapper-less .pager li > a:hover,
5344
- .sg-wrapper-less .pager li > a:focus {
5345
- text-decoration: none;
5346
- background-color: #e6e6e6;
5347
- }
5348
- .sg-wrapper-less .pager .next > a,
5349
- .sg-wrapper-less .pager .next > span {
5350
- float: right;
5351
- }
5352
- .sg-wrapper-less .pager .previous > a,
5353
- .sg-wrapper-less .pager .previous > span {
5354
- float: left;
5355
- }
5356
- .sg-wrapper-less .pager .disabled > a,
5357
- .sg-wrapper-less .pager .disabled > a:hover,
5358
- .sg-wrapper-less .pager .disabled > a:focus,
5359
- .sg-wrapper-less .pager .disabled > span {
5360
- color: #999999;
5361
- background-color: #ffffff;
5362
- cursor: not-allowed;
5363
- }
5364
- .sg-wrapper-less .label {
5365
- display: inline;
5366
- padding: .2em .6em .3em;
5367
- font-size: 75%;
5368
- font-weight: bold;
5369
- line-height: 1;
5370
- color: #ffffff;
5371
- text-align: center;
5372
- white-space: nowrap;
5373
- vertical-align: baseline;
5374
- border-radius: .25em;
5375
- }
5376
- .sg-wrapper-less a.label:hover,
5377
- .sg-wrapper-less a.label:focus {
5378
- color: #ffffff;
5379
- text-decoration: none;
5380
- cursor: pointer;
5381
- }
5382
- .sg-wrapper-less .label:empty {
5383
- display: none;
5384
- }
5385
- .sg-wrapper-less .btn .label {
5386
- position: relative;
5387
- top: -1px;
5388
- }
5389
- .sg-wrapper-less .label-default {
5390
- background-color: #222222;
5391
- }
5392
- .sg-wrapper-less .label-default[href]:hover,
5393
- .sg-wrapper-less .label-default[href]:focus {
5394
- background-color: #090909;
5395
- }
5396
- .sg-wrapper-less .label-primary {
5397
- background-color: #2780e3;
5398
- }
5399
- .sg-wrapper-less .label-primary[href]:hover,
5400
- .sg-wrapper-less .label-primary[href]:focus {
5401
- background-color: #1967be;
5402
- }
5403
- .sg-wrapper-less .label-success {
5404
- background-color: #3fb618;
5405
- }
5406
- .sg-wrapper-less .label-success[href]:hover,
5407
- .sg-wrapper-less .label-success[href]:focus {
5408
- background-color: #2f8912;
5409
- }
5410
- .sg-wrapper-less .label-info {
5411
- background-color: #9954bb;
5412
- }
5413
- .sg-wrapper-less .label-info[href]:hover,
5414
- .sg-wrapper-less .label-info[href]:focus {
5415
- background-color: #7e3f9d;
5416
- }
5417
- .sg-wrapper-less .label-warning {
5418
- background-color: #ff7518;
5419
- }
5420
- .sg-wrapper-less .label-warning[href]:hover,
5421
- .sg-wrapper-less .label-warning[href]:focus {
5422
- background-color: #e45c00;
5423
- }
5424
- .sg-wrapper-less .label-danger {
5425
- background-color: #ff0039;
5426
- }
5427
- .sg-wrapper-less .label-danger[href]:hover,
5428
- .sg-wrapper-less .label-danger[href]:focus {
5429
- background-color: #cc002e;
5430
- }
5431
- .sg-wrapper-less .badge {
5432
- display: inline-block;
5433
- min-width: 10px;
5434
- padding: 3px 7px;
5435
- font-size: 13px;
5436
- font-weight: bold;
5437
- color: #ffffff;
5438
- line-height: 1;
5439
- vertical-align: baseline;
5440
- white-space: nowrap;
5441
- text-align: center;
5442
- background-color: #2780e3;
5443
- border-radius: 10px;
5444
- }
5445
- .sg-wrapper-less .badge:empty {
5446
- display: none;
5447
- }
5448
- .sg-wrapper-less .btn .badge {
5449
- position: relative;
5450
- top: -1px;
5451
- }
5452
- .sg-wrapper-less .btn-xs .badge,
5453
- .sg-wrapper-less .btn-group-xs > .btn .badge {
5454
- top: 0;
5455
- padding: 1px 5px;
5456
- }
5457
- .sg-wrapper-less a.badge:hover,
5458
- .sg-wrapper-less a.badge:focus {
5459
- color: #ffffff;
5460
- text-decoration: none;
5461
- cursor: pointer;
5462
- }
5463
- .sg-wrapper-less .list-group-item.active > .badge,
5464
- .sg-wrapper-less .nav-pills > .active > a > .badge {
5465
- color: #2780e3;
5466
- background-color: #ffffff;
5467
- }
5468
- .sg-wrapper-less .list-group-item > .badge {
5469
- float: right;
5470
- }
5471
- .sg-wrapper-less .list-group-item > .badge + .badge {
5472
- margin-right: 5px;
5473
- }
5474
- .sg-wrapper-less .nav-pills > li > a > .badge {
5475
- margin-left: 3px;
5476
- }
5477
- .sg-wrapper-less .jumbotron {
5478
- padding: 30px 15px;
5479
- margin-bottom: 30px;
5480
- color: inherit;
5481
- background-color: #e6e6e6;
5482
- }
5483
- .sg-wrapper-less .jumbotron h1,
5484
- .sg-wrapper-less .jumbotron .h1 {
5485
- color: inherit;
5486
- }
5487
- .sg-wrapper-less .jumbotron p {
5488
- margin-bottom: 15px;
5489
- font-size: 23px;
5490
- font-weight: 200;
5491
- }
5492
- .sg-wrapper-less .jumbotron > hr {
5493
- border-top-color: #cccccc;
5494
- }
5495
- .sg-wrapper-less .container .jumbotron,
5496
- .sg-wrapper-less .container-fluid .jumbotron {
5497
- border-radius: 0;
5498
- }
5499
- .sg-wrapper-less .jumbotron .container {
5500
- max-width: 100%;
5501
- }
5502
- @media screen and (min-width: 768px) {
5503
- .sg-wrapper-less .jumbotron {
5504
- padding: 48px 0;
5505
- }
5506
- .sg-wrapper-less .container .jumbotron,
5507
- .sg-wrapper-less .container-fluid .jumbotron {
5508
- padding-left: 60px;
5509
- padding-right: 60px;
5510
- }
5511
- .sg-wrapper-less .jumbotron h1,
5512
- .sg-wrapper-less .jumbotron .h1 {
5513
- font-size: 67.5px;
5514
- }
5515
- }
5516
- .sg-wrapper-less .thumbnail {
5517
- display: block;
5518
- padding: 4px;
5519
- margin-bottom: 21px;
5520
- line-height: 1.42857143;
5521
- background-color: #ffffff;
5522
- border: 1px solid #dddddd;
5523
- border-radius: 0;
5524
- -webkit-transition: border 0.2s ease-in-out;
5525
- -o-transition: border 0.2s ease-in-out;
5526
- transition: border 0.2s ease-in-out;
5527
- }
5528
- .sg-wrapper-less .thumbnail > img,
5529
- .sg-wrapper-less .thumbnail a > img {
5530
- margin-left: auto;
5531
- margin-right: auto;
5532
- }
5533
- .sg-wrapper-less a.thumbnail:hover,
5534
- .sg-wrapper-less a.thumbnail:focus,
5535
- .sg-wrapper-less a.thumbnail.active {
5536
- border-color: #2780e3;
5537
- }
5538
- .sg-wrapper-less .thumbnail .caption {
5539
- padding: 9px;
5540
- color: #333333;
5541
- }
5542
- .sg-wrapper-less .alert {
5543
- padding: 15px;
5544
- margin-bottom: 21px;
5545
- border: 1px solid transparent;
5546
- border-radius: 0;
5547
- }
5548
- .sg-wrapper-less .alert h4 {
5549
- margin-top: 0;
5550
- color: inherit;
5551
- }
5552
- .sg-wrapper-less .alert .alert-link {
5553
- font-weight: bold;
5554
- }
5555
- .sg-wrapper-less .alert > p,
5556
- .sg-wrapper-less .alert > ul {
5557
- margin-bottom: 0;
5558
- }
5559
- .sg-wrapper-less .alert > p + p {
5560
- margin-top: 5px;
5561
- }
5562
- .sg-wrapper-less .alert-dismissable,
5563
- .sg-wrapper-less .alert-dismissible {
5564
- padding-right: 35px;
5565
- }
5566
- .sg-wrapper-less .alert-dismissable .close,
5567
- .sg-wrapper-less .alert-dismissible .close {
5568
- position: relative;
5569
- top: -2px;
5570
- right: -21px;
5571
- color: inherit;
5572
- }
5573
- .sg-wrapper-less .alert-success {
5574
- background-color: #3fb618;
5575
- border-color: #4e9f15;
5576
- color: #ffffff;
5577
- }
5578
- .sg-wrapper-less .alert-success hr {
5579
- border-top-color: #438912;
5580
- }
5581
- .sg-wrapper-less .alert-success .alert-link {
5582
- color: #e6e6e6;
5583
- }
5584
- .sg-wrapper-less .alert-info {
5585
- background-color: #9954bb;
5586
- border-color: #7643a8;
5587
- color: #ffffff;
5588
- }
5589
- .sg-wrapper-less .alert-info hr {
5590
- border-top-color: #693c96;
5591
- }
5592
- .sg-wrapper-less .alert-info .alert-link {
5593
- color: #e6e6e6;
5594
- }
5595
- .sg-wrapper-less .alert-warning {
5596
- background-color: #ff7518;
5597
- border-color: #ff4309;
5598
- color: #ffffff;
5599
- }
5600
- .sg-wrapper-less .alert-warning hr {
5601
- border-top-color: #ee3800;
5602
- }
5603
- .sg-wrapper-less .alert-warning .alert-link {
5604
- color: #e6e6e6;
5605
- }
5606
- .sg-wrapper-less .alert-danger {
5607
- background-color: #ff0039;
5608
- border-color: #f0005e;
5609
- color: #ffffff;
5610
- }
5611
- .sg-wrapper-less .alert-danger hr {
5612
- border-top-color: #d60054;
5613
- }
5614
- .sg-wrapper-less .alert-danger .alert-link {
5615
- color: #e6e6e6;
5616
- }
5617
- @-webkit-keyframes progress-bar-stripes {
5618
- from {
5619
- background-position: 40px 0;
5620
- }
5621
- to {
5622
- background-position: 0 0;
5623
- }
5624
- }
5625
- @-o-keyframes progress-bar-stripes {
5626
- from {
5627
- background-position: 40px 0;
5628
- }
5629
- to {
5630
- background-position: 0 0;
5631
- }
5632
- }
5633
- @keyframes progress-bar-stripes {
5634
- from {
5635
- background-position: 40px 0;
5636
- }
5637
- to {
5638
- background-position: 0 0;
5639
- }
5640
- }
5641
- .sg-wrapper-less .progress {
5642
- overflow: hidden;
5643
- height: 21px;
5644
- margin-bottom: 21px;
5645
- background-color: #cccccc;
5646
- border-radius: 0;
5647
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5648
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5649
- }
5650
- .sg-wrapper-less .progress-bar {
5651
- float: left;
5652
- width: 0%;
5653
- height: 100%;
5654
- font-size: 13px;
5655
- line-height: 21px;
5656
- color: #ffffff;
5657
- text-align: center;
5658
- background-color: #2780e3;
5659
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5660
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5661
- -webkit-transition: width 0.6s ease;
5662
- -o-transition: width 0.6s ease;
5663
- transition: width 0.6s ease;
5664
- }
5665
- .sg-wrapper-less .progress-striped .progress-bar,
5666
- .sg-wrapper-less .progress-bar-striped {
5667
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5668
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5669
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5670
- -webkit-background-size: 40px 40px;
5671
- background-size: 40px 40px;
5672
- }
5673
- .sg-wrapper-less .progress.active .progress-bar,
5674
- .sg-wrapper-less .progress-bar.active {
5675
- -webkit-animation: progress-bar-stripes 2s linear infinite;
5676
- -o-animation: progress-bar-stripes 2s linear infinite;
5677
- animation: progress-bar-stripes 2s linear infinite;
5678
- }
5679
- .sg-wrapper-less .progress-bar-success {
5680
- background-color: #3fb618;
5681
- }
5682
- .sg-wrapper-less .progress-striped .progress-bar-success {
5683
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5684
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5685
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5686
- }
5687
- .sg-wrapper-less .progress-bar-info {
5688
- background-color: #9954bb;
5689
- }
5690
- .sg-wrapper-less .progress-striped .progress-bar-info {
5691
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5692
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5693
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5694
- }
5695
- .sg-wrapper-less .progress-bar-warning {
5696
- background-color: #ff7518;
5697
- }
5698
- .sg-wrapper-less .progress-striped .progress-bar-warning {
5699
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5700
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5701
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5702
- }
5703
- .sg-wrapper-less .progress-bar-danger {
5704
- background-color: #ff0039;
5705
- }
5706
- .sg-wrapper-less .progress-striped .progress-bar-danger {
5707
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5708
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5709
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5710
- }
5711
- .sg-wrapper-less .media {
5712
- margin-top: 15px;
5713
- }
5714
- .sg-wrapper-less .media:first-child {
5715
- margin-top: 0;
5716
- }
5717
- .sg-wrapper-less .media,
5718
- .sg-wrapper-less .media-body {
5719
- zoom: 1;
5720
- overflow: hidden;
5721
- }
5722
- .sg-wrapper-less .media-body {
5723
- width: 10000px;
5724
- }
5725
- .sg-wrapper-less .media-object {
5726
- display: block;
5727
- }
5728
- .sg-wrapper-less .media-right,
5729
- .sg-wrapper-less .media > .pull-right {
5730
- padding-left: 10px;
5731
- }
5732
- .sg-wrapper-less .media-left,
5733
- .sg-wrapper-less .media > .pull-left {
5734
- padding-right: 10px;
5735
- }
5736
- .sg-wrapper-less .media-left,
5737
- .sg-wrapper-less .media-right,
5738
- .sg-wrapper-less .media-body {
5739
- display: table-cell;
5740
- vertical-align: top;
5741
- }
5742
- .sg-wrapper-less .media-middle {
5743
- vertical-align: middle;
5744
- }
5745
- .sg-wrapper-less .media-bottom {
5746
- vertical-align: bottom;
5747
- }
5748
- .sg-wrapper-less .media-heading {
5749
- margin-top: 0;
5750
- margin-bottom: 5px;
5751
- }
5752
- .sg-wrapper-less .media-list {
5753
- padding-left: 0;
5754
- list-style: none;
5755
- }
5756
- .sg-wrapper-less .list-group {
5757
- margin-bottom: 20px;
5758
- padding-left: 0;
5759
- }
5760
- .sg-wrapper-less .list-group-item {
5761
- position: relative;
5762
- display: block;
5763
- padding: 10px 15px;
5764
- margin-bottom: -1px;
5765
- background-color: #ffffff;
5766
- border: 1px solid #dddddd;
5767
- }
5768
- .sg-wrapper-less .list-group-item:first-child {
5769
- border-top-right-radius: 0;
5770
- border-top-left-radius: 0;
5771
- }
5772
- .sg-wrapper-less .list-group-item:last-child {
5773
- margin-bottom: 0;
5774
- border-bottom-right-radius: 0;
5775
- border-bottom-left-radius: 0;
5776
- }
5777
- .sg-wrapper-less a.list-group-item {
5778
- color: #555555;
5779
- }
5780
- .sg-wrapper-less a.list-group-item .list-group-item-heading {
5781
- color: #333333;
5782
- }
5783
- .sg-wrapper-less a.list-group-item:hover,
5784
- .sg-wrapper-less a.list-group-item:focus {
5785
- text-decoration: none;
5786
- color: #555555;
5787
- background-color: #f5f5f5;
5788
- }
5789
- .sg-wrapper-less .list-group-item.disabled,
5790
- .sg-wrapper-less .list-group-item.disabled:hover,
5791
- .sg-wrapper-less .list-group-item.disabled:focus {
5792
- background-color: #e6e6e6;
5793
- color: #999999;
5794
- cursor: not-allowed;
5795
- }
5796
- .sg-wrapper-less .list-group-item.disabled .list-group-item-heading,
5797
- .sg-wrapper-less .list-group-item.disabled:hover .list-group-item-heading,
5798
- .sg-wrapper-less .list-group-item.disabled:focus .list-group-item-heading {
5799
- color: inherit;
5800
- }
5801
- .sg-wrapper-less .list-group-item.disabled .list-group-item-text,
5802
- .sg-wrapper-less .list-group-item.disabled:hover .list-group-item-text,
5803
- .sg-wrapper-less .list-group-item.disabled:focus .list-group-item-text {
5804
- color: #999999;
5805
- }
5806
- .sg-wrapper-less .list-group-item.active,
5807
- .sg-wrapper-less .list-group-item.active:hover,
5808
- .sg-wrapper-less .list-group-item.active:focus {
5809
- z-index: 2;
5810
- color: #ffffff;
5811
- background-color: #2780e3;
5812
- border-color: #dddddd;
5813
- }
5814
- .sg-wrapper-less .list-group-item.active .list-group-item-heading,
5815
- .sg-wrapper-less .list-group-item.active:hover .list-group-item-heading,
5816
- .sg-wrapper-less .list-group-item.active:focus .list-group-item-heading,
5817
- .sg-wrapper-less .list-group-item.active .list-group-item-heading > small,
5818
- .sg-wrapper-less .list-group-item.active:hover .list-group-item-heading > small,
5819
- .sg-wrapper-less .list-group-item.active:focus .list-group-item-heading > small,
5820
- .sg-wrapper-less .list-group-item.active .list-group-item-heading > .small,
5821
- .sg-wrapper-less .list-group-item.active:hover .list-group-item-heading > .small,
5822
- .sg-wrapper-less .list-group-item.active:focus .list-group-item-heading > .small {
5823
- color: inherit;
5824
- }
5825
- .sg-wrapper-less .list-group-item.active .list-group-item-text,
5826
- .sg-wrapper-less .list-group-item.active:hover .list-group-item-text,
5827
- .sg-wrapper-less .list-group-item.active:focus .list-group-item-text {
5828
- color: #dceafa;
5829
- }
5830
- .sg-wrapper-less .list-group-item-success {
5831
- color: #ffffff;
5832
- background-color: #3fb618;
5833
- }
5834
- .sg-wrapper-less a.list-group-item-success {
5835
- color: #ffffff;
5836
- }
5837
- .sg-wrapper-less a.list-group-item-success .list-group-item-heading {
5838
- color: inherit;
5839
- }
5840
- .sg-wrapper-less a.list-group-item-success:hover,
5841
- .sg-wrapper-less a.list-group-item-success:focus {
5842
- color: #ffffff;
5843
- background-color: #379f15;
5844
- }
5845
- .sg-wrapper-less a.list-group-item-success.active,
5846
- .sg-wrapper-less a.list-group-item-success.active:hover,
5847
- .sg-wrapper-less a.list-group-item-success.active:focus {
5848
- color: #fff;
5849
- background-color: #ffffff;
5850
- border-color: #ffffff;
5851
- }
5852
- .sg-wrapper-less .list-group-item-info {
5853
- color: #ffffff;
5854
- background-color: #9954bb;
5855
- }
5856
- .sg-wrapper-less a.list-group-item-info {
5857
- color: #ffffff;
5858
- }
5859
- .sg-wrapper-less a.list-group-item-info .list-group-item-heading {
5860
- color: inherit;
5861
- }
5862
- .sg-wrapper-less a.list-group-item-info:hover,
5863
- .sg-wrapper-less a.list-group-item-info:focus {
5864
- color: #ffffff;
5865
- background-color: #8d46b0;
5866
- }
5867
- .sg-wrapper-less a.list-group-item-info.active,
5868
- .sg-wrapper-less a.list-group-item-info.active:hover,
5869
- .sg-wrapper-less a.list-group-item-info.active:focus {
5870
- color: #fff;
5871
- background-color: #ffffff;
5872
- border-color: #ffffff;
5873
- }
5874
- .sg-wrapper-less .list-group-item-warning {
5875
- color: #ffffff;
5876
- background-color: #ff7518;
5877
- }
5878
- .sg-wrapper-less a.list-group-item-warning {
5879
- color: #ffffff;
5880
- }
5881
- .sg-wrapper-less a.list-group-item-warning .list-group-item-heading {
5882
- color: inherit;
5883
- }
5884
- .sg-wrapper-less a.list-group-item-warning:hover,
5885
- .sg-wrapper-less a.list-group-item-warning:focus {
5886
- color: #ffffff;
5887
- background-color: #fe6600;
5888
- }
5889
- .sg-wrapper-less a.list-group-item-warning.active,
5890
- .sg-wrapper-less a.list-group-item-warning.active:hover,
5891
- .sg-wrapper-less a.list-group-item-warning.active:focus {
5892
- color: #fff;
5893
- background-color: #ffffff;
5894
- border-color: #ffffff;
5895
- }
5896
- .sg-wrapper-less .list-group-item-danger {
5897
- color: #ffffff;
5898
- background-color: #ff0039;
5899
- }
5900
- .sg-wrapper-less a.list-group-item-danger {
5901
- color: #ffffff;
5902
- }
5903
- .sg-wrapper-less a.list-group-item-danger .list-group-item-heading {
5904
- color: inherit;
5905
- }
5906
- .sg-wrapper-less a.list-group-item-danger:hover,
5907
- .sg-wrapper-less a.list-group-item-danger:focus {
5908
- color: #ffffff;
5909
- background-color: #e60033;
5910
- }
5911
- .sg-wrapper-less a.list-group-item-danger.active,
5912
- .sg-wrapper-less a.list-group-item-danger.active:hover,
5913
- .sg-wrapper-less a.list-group-item-danger.active:focus {
5914
- color: #fff;
5915
- background-color: #ffffff;
5916
- border-color: #ffffff;
5917
- }
5918
- .sg-wrapper-less .list-group-item-heading {
5919
- margin-top: 0;
5920
- margin-bottom: 5px;
5921
- }
5922
- .sg-wrapper-less .list-group-item-text {
5923
- margin-bottom: 0;
5924
- line-height: 1.3;
5925
- }
5926
- .sg-wrapper-less .panel {
5927
- margin-bottom: 21px;
5928
- background-color: #ffffff;
5929
- border: 1px solid transparent;
5930
- border-radius: 0;
5931
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5932
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5933
- }
5934
- .sg-wrapper-less .panel-body {
5935
- padding: 15px;
5936
- }
5937
- .sg-wrapper-less .panel-heading {
5938
- padding: 10px 15px;
5939
- border-bottom: 1px solid transparent;
5940
- border-top-right-radius: -1;
5941
- border-top-left-radius: -1;
5942
- }
5943
- .sg-wrapper-less .panel-heading > .dropdown .dropdown-toggle {
5944
- color: inherit;
5945
- }
5946
- .sg-wrapper-less .panel-title {
5947
- margin-top: 0;
5948
- margin-bottom: 0;
5949
- font-size: 17px;
5950
- color: inherit;
5951
- }
5952
- .sg-wrapper-less .panel-title > a,
5953
- .sg-wrapper-less .panel-title > small,
5954
- .sg-wrapper-less .panel-title > .small,
5955
- .sg-wrapper-less .panel-title > small > a,
5956
- .sg-wrapper-less .panel-title > .small > a {
5957
- color: inherit;
5958
- }
5959
- .sg-wrapper-less .panel-footer {
5960
- padding: 10px 15px;
5961
- background-color: #f5f5f5;
5962
- border-top: 1px solid #dddddd;
5963
- border-bottom-right-radius: -1;
5964
- border-bottom-left-radius: -1;
5965
- }
5966
- .sg-wrapper-less .panel > .list-group,
5967
- .sg-wrapper-less .panel > .panel-collapse > .list-group {
5968
- margin-bottom: 0;
5969
- }
5970
- .sg-wrapper-less .panel > .list-group .list-group-item,
5971
- .sg-wrapper-less .panel > .panel-collapse > .list-group .list-group-item {
5972
- border-width: 1px 0;
5973
- border-radius: 0;
5974
- }
5975
- .sg-wrapper-less .panel > .list-group:first-child .list-group-item:first-child,
5976
- .sg-wrapper-less .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
5977
- border-top: 0;
5978
- border-top-right-radius: -1;
5979
- border-top-left-radius: -1;
5980
- }
5981
- .sg-wrapper-less .panel > .list-group:last-child .list-group-item:last-child,
5982
- .sg-wrapper-less .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
5983
- border-bottom: 0;
5984
- border-bottom-right-radius: -1;
5985
- border-bottom-left-radius: -1;
5986
- }
5987
- .sg-wrapper-less .panel-heading + .list-group .list-group-item:first-child {
5988
- border-top-width: 0;
5989
- }
5990
- .sg-wrapper-less .list-group + .panel-footer {
5991
- border-top-width: 0;
5992
- }
5993
- .sg-wrapper-less .panel > .table,
5994
- .sg-wrapper-less .panel > .table-responsive > .table,
5995
- .sg-wrapper-less .panel > .panel-collapse > .table {
5996
- margin-bottom: 0;
5997
- }
5998
- .sg-wrapper-less .panel > .table caption,
5999
- .sg-wrapper-less .panel > .table-responsive > .table caption,
6000
- .sg-wrapper-less .panel > .panel-collapse > .table caption {
6001
- padding-left: 15px;
6002
- padding-right: 15px;
6003
- }
6004
- .sg-wrapper-less .panel > .table:first-child,
6005
- .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child {
6006
- border-top-right-radius: -1;
6007
- border-top-left-radius: -1;
6008
- }
6009
- .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child,
6010
- .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
6011
- .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child,
6012
- .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
6013
- border-top-left-radius: -1;
6014
- border-top-right-radius: -1;
6015
- }
6016
- .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
6017
- .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
6018
- .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
6019
- .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
6020
- .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
6021
- .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
6022
- .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
6023
- .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
6024
- border-top-left-radius: -1;
6025
- }
6026
- .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
6027
- .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
6028
- .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
6029
- .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
6030
- .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
6031
- .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
6032
- .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
6033
- .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
6034
- border-top-right-radius: -1;
6035
- }
6036
- .sg-wrapper-less .panel > .table:last-child,
6037
- .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child {
6038
- border-bottom-right-radius: -1;
6039
- border-bottom-left-radius: -1;
6040
- }
6041
- .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child,
6042
- .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
6043
- .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child,
6044
- .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
6045
- border-bottom-left-radius: -1;
6046
- border-bottom-right-radius: -1;
6047
- }
6048
- .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
6049
- .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
6050
- .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
6051
- .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
6052
- .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
6053
- .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
6054
- .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
6055
- .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
6056
- border-bottom-left-radius: -1;
6057
- }
6058
- .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
6059
- .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
6060
- .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
6061
- .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
6062
- .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
6063
- .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
6064
- .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
6065
- .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
6066
- border-bottom-right-radius: -1;
6067
- }
6068
- .sg-wrapper-less .panel > .panel-body + .table,
6069
- .sg-wrapper-less .panel > .panel-body + .table-responsive,
6070
- .sg-wrapper-less .panel > .table + .panel-body,
6071
- .sg-wrapper-less .panel > .table-responsive + .panel-body {
6072
- border-top: 1px solid #dddddd;
6073
- }
6074
- .sg-wrapper-less .panel > .table > tbody:first-child > tr:first-child th,
6075
- .sg-wrapper-less .panel > .table > tbody:first-child > tr:first-child td {
6076
- border-top: 0;
6077
- }
6078
- .sg-wrapper-less .panel > .table-bordered,
6079
- .sg-wrapper-less .panel > .table-responsive > .table-bordered {
6080
- border: 0;
6081
- }
6082
- .sg-wrapper-less .panel > .table-bordered > thead > tr > th:first-child,
6083
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
6084
- .sg-wrapper-less .panel > .table-bordered > tbody > tr > th:first-child,
6085
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
6086
- .sg-wrapper-less .panel > .table-bordered > tfoot > tr > th:first-child,
6087
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
6088
- .sg-wrapper-less .panel > .table-bordered > thead > tr > td:first-child,
6089
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
6090
- .sg-wrapper-less .panel > .table-bordered > tbody > tr > td:first-child,
6091
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
6092
- .sg-wrapper-less .panel > .table-bordered > tfoot > tr > td:first-child,
6093
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
6094
- border-left: 0;
6095
- }
6096
- .sg-wrapper-less .panel > .table-bordered > thead > tr > th:last-child,
6097
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
6098
- .sg-wrapper-less .panel > .table-bordered > tbody > tr > th:last-child,
6099
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
6100
- .sg-wrapper-less .panel > .table-bordered > tfoot > tr > th:last-child,
6101
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
6102
- .sg-wrapper-less .panel > .table-bordered > thead > tr > td:last-child,
6103
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
6104
- .sg-wrapper-less .panel > .table-bordered > tbody > tr > td:last-child,
6105
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
6106
- .sg-wrapper-less .panel > .table-bordered > tfoot > tr > td:last-child,
6107
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
6108
- border-right: 0;
6109
- }
6110
- .sg-wrapper-less .panel > .table-bordered > thead > tr:first-child > td,
6111
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
6112
- .sg-wrapper-less .panel > .table-bordered > tbody > tr:first-child > td,
6113
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
6114
- .sg-wrapper-less .panel > .table-bordered > thead > tr:first-child > th,
6115
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
6116
- .sg-wrapper-less .panel > .table-bordered > tbody > tr:first-child > th,
6117
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
6118
- border-bottom: 0;
6119
- }
6120
- .sg-wrapper-less .panel > .table-bordered > tbody > tr:last-child > td,
6121
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
6122
- .sg-wrapper-less .panel > .table-bordered > tfoot > tr:last-child > td,
6123
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
6124
- .sg-wrapper-less .panel > .table-bordered > tbody > tr:last-child > th,
6125
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
6126
- .sg-wrapper-less .panel > .table-bordered > tfoot > tr:last-child > th,
6127
- .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
6128
- border-bottom: 0;
6129
- }
6130
- .sg-wrapper-less .panel > .table-responsive {
6131
- border: 0;
6132
- margin-bottom: 0;
6133
- }
6134
- .sg-wrapper-less .panel-group {
6135
- margin-bottom: 21px;
6136
- }
6137
- .sg-wrapper-less .panel-group .panel {
6138
- margin-bottom: 0;
6139
- border-radius: 0;
6140
- }
6141
- .sg-wrapper-less .panel-group .panel + .panel {
6142
- margin-top: 5px;
6143
- }
6144
- .sg-wrapper-less .panel-group .panel-heading {
6145
- border-bottom: 0;
6146
- }
6147
- .sg-wrapper-less .panel-group .panel-heading + .panel-collapse > .panel-body,
6148
- .sg-wrapper-less .panel-group .panel-heading + .panel-collapse > .list-group {
6149
- border-top: 1px solid #dddddd;
6150
- }
6151
- .sg-wrapper-less .panel-group .panel-footer {
6152
- border-top: 0;
6153
- }
6154
- .sg-wrapper-less .panel-group .panel-footer + .panel-collapse .panel-body {
6155
- border-bottom: 1px solid #dddddd;
6156
- }
6157
- .sg-wrapper-less .panel-default {
6158
- border-color: #dddddd;
6159
- }
6160
- .sg-wrapper-less .panel-default > .panel-heading {
6161
- color: #333333;
6162
- background-color: #f5f5f5;
6163
- border-color: #dddddd;
6164
- }
6165
- .sg-wrapper-less .panel-default > .panel-heading + .panel-collapse > .panel-body {
6166
- border-top-color: #dddddd;
6167
- }
6168
- .sg-wrapper-less .panel-default > .panel-heading .badge {
6169
- color: #f5f5f5;
6170
- background-color: #333333;
6171
- }
6172
- .sg-wrapper-less .panel-default > .panel-footer + .panel-collapse > .panel-body {
6173
- border-bottom-color: #dddddd;
6174
- }
6175
- .sg-wrapper-less .panel-primary {
6176
- border-color: #2780e3;
6177
- }
6178
- .sg-wrapper-less .panel-primary > .panel-heading {
6179
- color: #ffffff;
6180
- background-color: #2780e3;
6181
- border-color: #2780e3;
6182
- }
6183
- .sg-wrapper-less .panel-primary > .panel-heading + .panel-collapse > .panel-body {
6184
- border-top-color: #2780e3;
6185
- }
6186
- .sg-wrapper-less .panel-primary > .panel-heading .badge {
6187
- color: #2780e3;
6188
- background-color: #ffffff;
6189
- }
6190
- .sg-wrapper-less .panel-primary > .panel-footer + .panel-collapse > .panel-body {
6191
- border-bottom-color: #2780e3;
6192
- }
6193
- .sg-wrapper-less .panel-success {
6194
- border-color: #4e9f15;
6195
- }
6196
- .sg-wrapper-less .panel-success > .panel-heading {
6197
- color: #ffffff;
6198
- background-color: #3fb618;
6199
- border-color: #4e9f15;
6200
- }
6201
- .sg-wrapper-less .panel-success > .panel-heading + .panel-collapse > .panel-body {
6202
- border-top-color: #4e9f15;
6203
- }
6204
- .sg-wrapper-less .panel-success > .panel-heading .badge {
6205
- color: #3fb618;
6206
- background-color: #ffffff;
6207
- }
6208
- .sg-wrapper-less .panel-success > .panel-footer + .panel-collapse > .panel-body {
6209
- border-bottom-color: #4e9f15;
6210
- }
6211
- .sg-wrapper-less .panel-info {
6212
- border-color: #7643a8;
6213
- }
6214
- .sg-wrapper-less .panel-info > .panel-heading {
6215
- color: #ffffff;
6216
- background-color: #9954bb;
6217
- border-color: #7643a8;
6218
- }
6219
- .sg-wrapper-less .panel-info > .panel-heading + .panel-collapse > .panel-body {
6220
- border-top-color: #7643a8;
6221
- }
6222
- .sg-wrapper-less .panel-info > .panel-heading .badge {
6223
- color: #9954bb;
6224
- background-color: #ffffff;
6225
- }
6226
- .sg-wrapper-less .panel-info > .panel-footer + .panel-collapse > .panel-body {
6227
- border-bottom-color: #7643a8;
6228
- }
6229
- .sg-wrapper-less .panel-warning {
6230
- border-color: #ff4309;
6231
- }
6232
- .sg-wrapper-less .panel-warning > .panel-heading {
6233
- color: #ffffff;
6234
- background-color: #ff7518;
6235
- border-color: #ff4309;
6236
- }
6237
- .sg-wrapper-less .panel-warning > .panel-heading + .panel-collapse > .panel-body {
6238
- border-top-color: #ff4309;
6239
- }
6240
- .sg-wrapper-less .panel-warning > .panel-heading .badge {
6241
- color: #ff7518;
6242
- background-color: #ffffff;
6243
- }
6244
- .sg-wrapper-less .panel-warning > .panel-footer + .panel-collapse > .panel-body {
6245
- border-bottom-color: #ff4309;
6246
- }
6247
- .sg-wrapper-less .panel-danger {
6248
- border-color: #f0005e;
6249
- }
6250
- .sg-wrapper-less .panel-danger > .panel-heading {
6251
- color: #ffffff;
6252
- background-color: #ff0039;
6253
- border-color: #f0005e;
6254
- }
6255
- .sg-wrapper-less .panel-danger > .panel-heading + .panel-collapse > .panel-body {
6256
- border-top-color: #f0005e;
6257
- }
6258
- .sg-wrapper-less .panel-danger > .panel-heading .badge {
6259
- color: #ff0039;
6260
- background-color: #ffffff;
6261
- }
6262
- .sg-wrapper-less .panel-danger > .panel-footer + .panel-collapse > .panel-body {
6263
- border-bottom-color: #f0005e;
6264
- }
6265
- .sg-wrapper-less .embed-responsive {
6266
- position: relative;
6267
- display: block;
6268
- height: 0;
6269
- padding: 0;
6270
- overflow: hidden;
6271
- }
6272
- .sg-wrapper-less .embed-responsive .embed-responsive-item,
6273
- .sg-wrapper-less .embed-responsive iframe,
6274
- .sg-wrapper-less .embed-responsive embed,
6275
- .sg-wrapper-less .embed-responsive object,
6276
- .sg-wrapper-less .embed-responsive video {
6277
- position: absolute;
6278
- top: 0;
6279
- left: 0;
6280
- bottom: 0;
6281
- height: 100%;
6282
- width: 100%;
6283
- border: 0;
6284
- }
6285
- .sg-wrapper-less .embed-responsive-16by9 {
6286
- padding-bottom: 56.25%;
6287
- }
6288
- .sg-wrapper-less .embed-responsive-4by3 {
6289
- padding-bottom: 75%;
6290
- }
6291
- .sg-wrapper-less .well {
6292
- min-height: 20px;
6293
- padding: 19px;
6294
- margin-bottom: 20px;
6295
- background-color: #f5f5f5;
6296
- border: 1px solid #e3e3e3;
6297
- border-radius: 0;
6298
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
6299
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
6300
- }
6301
- .sg-wrapper-less .well blockquote {
6302
- border-color: #ddd;
6303
- border-color: rgba(0, 0, 0, 0.15);
6304
- }
6305
- .sg-wrapper-less .well-lg {
6306
- padding: 24px;
6307
- border-radius: 0;
6308
- }
6309
- .sg-wrapper-less .well-sm {
6310
- padding: 9px;
6311
- border-radius: 0;
6312
- }
6313
- .sg-wrapper-less .close {
6314
- float: right;
6315
- font-size: 22.5px;
6316
- font-weight: bold;
6317
- line-height: 1;
6318
- color: #ffffff;
6319
- text-shadow: 0 1px 0 #ffffff;
6320
- opacity: 0.2;
6321
- filter: alpha(opacity=20);
6322
- }
6323
- .sg-wrapper-less .close:hover,
6324
- .sg-wrapper-less .close:focus {
6325
- color: #ffffff;
6326
- text-decoration: none;
6327
- cursor: pointer;
6328
- opacity: 0.5;
6329
- filter: alpha(opacity=50);
6330
- }
6331
- .sg-wrapper-less button.close {
6332
- padding: 0;
6333
- cursor: pointer;
6334
- background: transparent;
6335
- border: 0;
6336
- -webkit-appearance: none;
6337
- }
6338
- .sg-wrapper-less .modal-open {
6339
- overflow: hidden;
6340
- }
6341
- .modal-close-button {
6342
- display: inline-block;
6343
- margin-right: 15px;
6344
- color: #000000;
6345
- cursor: pointer;
6346
- }
6347
- .sg-wrapper-less .modal {
6348
- display: none;
6349
- overflow: hidden;
6350
- position: fixed;
6351
- top: 0;
6352
- right: 0;
6353
- bottom: 0;
6354
- left: 0;
6355
- z-index: 1050;
6356
- -webkit-overflow-scrolling: touch;
6357
- outline: 0;
6358
- max-width: none;
6359
- width: 100%;
6360
- background: none;
6361
- padding: 0;
6362
- }
6363
- .sg-wrapper-less .modal.fade .modal-dialog {
6364
- -webkit-transform: translate(0, -25%);
6365
- -ms-transform: translate(0, -25%);
6366
- -o-transform: translate(0, -25%);
6367
- transform: translate(0, -25%);
6368
- -webkit-transition: -webkit-transform 0.3s ease-out;
6369
- -o-transition: -o-transform 0.3s ease-out;
6370
- transition: transform 0.3s ease-out;
6371
- }
6372
- .sg-wrapper-less .modal.in .modal-dialog {
6373
- -webkit-transform: translate(0, 0);
6374
- -ms-transform: translate(0, 0);
6375
- -o-transform: translate(0, 0);
6376
- transform: translate(0, 0);
6377
- }
6378
- .sg-wrapper-less .modal-open .modal {
6379
- overflow-x: hidden;
6380
- overflow-y: auto;
6381
- }
6382
- .sg-wrapper-less .modal-dialog {
6383
- position: relative;
6384
- width: auto;
6385
- margin: 10px;
6386
- }
6387
- .sg-wrapper-less .modal-content {
6388
- position: relative;
6389
- background-color: #ffffff;
6390
- border: 1px solid #999999;
6391
- border: 1px solid transparent;
6392
- border-radius: 0;
6393
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
6394
- box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
6395
- -webkit-background-clip: padding-box;
6396
- background-clip: padding-box;
6397
- outline: 0;
6398
- }
6399
- .sg-wrapper-less .modal-backdrop {
6400
- position: fixed;
6401
- top: 0;
6402
- right: 0;
6403
- bottom: 0;
6404
- left: 0;
6405
- z-index: 1040;
6406
- background-color: #000000;
6407
- }
6408
- .sg-wrapper-less .modal-backdrop.fade {
6409
- opacity: 0;
6410
- filter: alpha(opacity=0);
6411
- }
6412
- .sg-wrapper-less .modal-backdrop.in {
6413
- opacity: 0.5;
6414
- filter: alpha(opacity=50);
6415
- }
6416
- .sg-wrapper-less .modal-header {
6417
- padding: 20px;
6418
- min-height: 16.42857143px;
6419
- background: #f8f8f8;
6420
- }
6421
- .sg-wrapper-less .modal-header .close {
6422
- margin-top: -2px;
6423
- }
6424
- .sg-wrapper-less .modal-title {
6425
- margin: 0;
6426
- line-height: 1.42857143;
6427
- color: #000000;
6428
- font-weight: bold;
6429
- }
6430
- .sg-wrapper-less .modal-body {
6431
- position: relative;
6432
- padding: 20px;
6433
- }
6434
- .sg-wrapper-less .modal-footer {
6435
- padding: 20px;
6436
- text-align: right;
6437
- background-color: #f8f8f8;
6438
- }
6439
- .sg-wrapper-less .modal-footer .btn + .btn {
6440
- margin-left: 5px;
6441
- margin-bottom: 0;
6442
- }
6443
- .sg-wrapper-less .modal-footer .btn-group .btn + .btn {
6444
- margin-left: -1px;
6445
- }
6446
- .sg-wrapper-less .modal-footer .btn-block + .btn-block {
6447
- margin-left: 0;
6448
- }
6449
- .sg-wrapper-less .modal-scrollbar-measure {
6450
- position: absolute;
6451
- top: -9999px;
6452
- width: 50px;
6453
- height: 50px;
6454
- overflow: scroll;
6455
- }
6456
- @media (min-width: 768px) {
6457
- .sg-wrapper-less .modal-dialog {
6458
- width: 600px;
6459
- margin: 30px auto;
6460
- }
6461
- .sg-wrapper-less .modal-content {
6462
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
6463
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
6464
- }
6465
- .sg-wrapper-less .modal-sm {
6466
- width: 300px;
6467
- }
6468
- }
6469
- @media (min-width: 992px) {
6470
- .sg-wrapper-less .modal-lg {
6471
- width: 900px;
6472
- }
6473
- }
6474
- .sg-wrapper-less .tooltip {
6475
- position: absolute;
6476
- z-index: 1070;
6477
- display: block;
6478
- font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
6479
- font-size: 13px;
6480
- font-weight: normal;
6481
- line-height: 1.4;
6482
- opacity: 0;
6483
- filter: alpha(opacity=0);
6484
- }
6485
- .sg-wrapper-less .tooltip.in {
6486
- opacity: 0.9;
6487
- filter: alpha(opacity=90);
6488
- }
6489
- .sg-wrapper-less .tooltip.top {
6490
- margin-top: -3px;
6491
- padding: 5px 0;
6492
- }
6493
- .sg-wrapper-less .tooltip.right {
6494
- margin-left: 3px;
6495
- padding: 0 5px;
6496
- }
6497
- .sg-wrapper-less .tooltip.bottom {
6498
- margin-top: 3px;
6499
- padding: 5px 0;
6500
- }
6501
- .sg-wrapper-less .tooltip.left {
6502
- margin-left: -3px;
6503
- padding: 0 5px;
6504
- }
6505
- .sg-wrapper-less .tooltip-inner {
6506
- max-width: 200px;
6507
- padding: 3px 8px;
6508
- color: #ffffff;
6509
- text-align: center;
6510
- text-decoration: none;
6511
- background-color: #000000;
6512
- border-radius: 0;
6513
- }
6514
- .sg-wrapper-less .tooltip-arrow {
6515
- position: absolute;
6516
- width: 0;
6517
- height: 0;
6518
- border-color: transparent;
6519
- border-style: solid;
6520
- }
6521
- .sg-wrapper-less .tooltip.top .tooltip-arrow {
6522
- bottom: 0;
6523
- left: 50%;
6524
- margin-left: -5px;
6525
- border-width: 5px 5px 0;
6526
- border-top-color: #000000;
6527
- }
6528
- .sg-wrapper-less .tooltip.top-left .tooltip-arrow {
6529
- bottom: 0;
6530
- right: 5px;
6531
- margin-bottom: -5px;
6532
- border-width: 5px 5px 0;
6533
- border-top-color: #000000;
6534
- }
6535
- .sg-wrapper-less .tooltip.top-right .tooltip-arrow {
6536
- bottom: 0;
6537
- left: 5px;
6538
- margin-bottom: -5px;
6539
- border-width: 5px 5px 0;
6540
- border-top-color: #000000;
6541
- }
6542
- .sg-wrapper-less .tooltip.right .tooltip-arrow {
6543
- top: 50%;
6544
- left: 0;
6545
- margin-top: -5px;
6546
- border-width: 5px 5px 5px 0;
6547
- border-right-color: #000000;
6548
- }
6549
- .sg-wrapper-less .tooltip.left .tooltip-arrow {
6550
- top: 50%;
6551
- right: 0;
6552
- margin-top: -5px;
6553
- border-width: 5px 0 5px 5px;
6554
- border-left-color: #000000;
6555
- }
6556
- .sg-wrapper-less .tooltip.bottom .tooltip-arrow {
6557
- top: 0;
6558
- left: 50%;
6559
- margin-left: -5px;
6560
- border-width: 0 5px 5px;
6561
- border-bottom-color: #000000;
6562
- }
6563
- .sg-wrapper-less .tooltip.bottom-left .tooltip-arrow {
6564
- top: 0;
6565
- right: 5px;
6566
- margin-top: -5px;
6567
- border-width: 0 5px 5px;
6568
- border-bottom-color: #000000;
6569
- }
6570
- .sg-wrapper-less .tooltip.bottom-right .tooltip-arrow {
6571
- top: 0;
6572
- left: 5px;
6573
- margin-top: -5px;
6574
- border-width: 0 5px 5px;
6575
- border-bottom-color: #000000;
6576
- }
6577
- .sg-wrapper-less .popover {
6578
- position: absolute;
6579
- top: 0;
6580
- left: 0;
6581
- z-index: 1060;
6582
- display: none;
6583
- max-width: 276px;
6584
- padding: 1px;
6585
- font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
6586
- font-size: 15px;
6587
- font-weight: normal;
6588
- line-height: 1.42857143;
6589
- text-align: left;
6590
- background-color: #ffffff;
6591
- -webkit-background-clip: padding-box;
6592
- background-clip: padding-box;
6593
- border: 1px solid #cccccc;
6594
- border: 1px solid rgba(0, 0, 0, 0.2);
6595
- border-radius: 0;
6596
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6597
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6598
- white-space: normal;
6599
- }
6600
- .sg-wrapper-less .popover.top {
6601
- margin-top: -10px;
6602
- }
6603
- .sg-wrapper-less .popover.right {
6604
- margin-left: 10px;
6605
- }
6606
- .sg-wrapper-less .popover.bottom {
6607
- margin-top: 10px;
6608
- }
6609
- .sg-wrapper-less .popover.left {
6610
- margin-left: -10px;
6611
- }
6612
- .sg-wrapper-less .popover-title {
6613
- margin: 0;
6614
- padding: 8px 14px;
6615
- font-size: 15px;
6616
- background-color: #f7f7f7;
6617
- border-bottom: 1px solid #ebebeb;
6618
- border-radius: -1 -1 0 0;
6619
- }
6620
- .sg-wrapper-less .popover-content {
6621
- padding: 9px 14px;
6622
- }
6623
- .sg-wrapper-less .popover > .arrow,
6624
- .sg-wrapper-less .popover > .arrow:after {
6625
- position: absolute;
6626
- display: block;
6627
- width: 0;
6628
- height: 0;
6629
- border-color: transparent;
6630
- border-style: solid;
6631
- }
6632
- .sg-wrapper-less .popover > .arrow {
6633
- border-width: 11px;
6634
- }
6635
- .sg-wrapper-less .popover > .arrow:after {
6636
- border-width: 10px;
6637
- content: "";
6638
- }
6639
- .sg-wrapper-less .popover.top > .arrow {
6640
- left: 50%;
6641
- margin-left: -11px;
6642
- border-bottom-width: 0;
6643
- border-top-color: #999999;
6644
- border-top-color: rgba(0, 0, 0, 0.25);
6645
- bottom: -11px;
6646
- }
6647
- .sg-wrapper-less .popover.top > .arrow:after {
6648
- content: " ";
6649
- bottom: 1px;
6650
- margin-left: -10px;
6651
- border-bottom-width: 0;
6652
- border-top-color: #ffffff;
6653
- }
6654
- .sg-wrapper-less .popover.right > .arrow {
6655
- top: 50%;
6656
- left: -11px;
6657
- margin-top: -11px;
6658
- border-left-width: 0;
6659
- border-right-color: #999999;
6660
- border-right-color: rgba(0, 0, 0, 0.25);
6661
- }
6662
- .sg-wrapper-less .popover.right > .arrow:after {
6663
- content: " ";
6664
- left: 1px;
6665
- bottom: -10px;
6666
- border-left-width: 0;
6667
- border-right-color: #ffffff;
6668
- }
6669
- .sg-wrapper-less .popover.bottom > .arrow {
6670
- left: 50%;
6671
- margin-left: -11px;
6672
- border-top-width: 0;
6673
- border-bottom-color: #999999;
6674
- border-bottom-color: rgba(0, 0, 0, 0.25);
6675
- top: -11px;
6676
- }
6677
- .sg-wrapper-less .popover.bottom > .arrow:after {
6678
- content: " ";
6679
- top: 1px;
6680
- margin-left: -10px;
6681
- border-top-width: 0;
6682
- border-bottom-color: #ffffff;
6683
- }
6684
- .sg-wrapper-less .popover.left > .arrow {
6685
- top: 50%;
6686
- right: -11px;
6687
- margin-top: -11px;
6688
- border-right-width: 0;
6689
- border-left-color: #999999;
6690
- border-left-color: rgba(0, 0, 0, 0.25);
6691
- }
6692
- .sg-wrapper-less .popover.left > .arrow:after {
6693
- content: " ";
6694
- right: 1px;
6695
- border-right-width: 0;
6696
- border-left-color: #ffffff;
6697
- bottom: -10px;
6698
- }
6699
- .sg-wrapper-less .carousel {
6700
- position: relative;
6701
- }
6702
- .sg-wrapper-less .carousel-inner {
6703
- position: relative;
6704
- overflow: hidden;
6705
- width: 100%;
6706
- }
6707
- .sg-wrapper-less .carousel-inner > .item {
6708
- display: none;
6709
- position: relative;
6710
- -webkit-transition: 0.6s ease-in-out left;
6711
- -o-transition: 0.6s ease-in-out left;
6712
- transition: 0.6s ease-in-out left;
6713
- }
6714
- .sg-wrapper-less .carousel-inner > .item > img,
6715
- .sg-wrapper-less .carousel-inner > .item > a > img {
6716
- line-height: 1;
6717
- }
6718
- @media all and (transform-3d), (-webkit-transform-3d) {
6719
- .sg-wrapper-less .carousel-inner > .item {
6720
- -webkit-transition: -webkit-transform 0.6s ease-in-out;
6721
- -o-transition: -o-transform 0.6s ease-in-out;
6722
- transition: transform 0.6s ease-in-out;
6723
- -webkit-backface-visibility: hidden;
6724
- backface-visibility: hidden;
6725
- -webkit-perspective: 1000;
6726
- perspective: 1000;
6727
- }
6728
- .sg-wrapper-less .carousel-inner > .item.next,
6729
- .sg-wrapper-less .carousel-inner > .item.active.right {
6730
- -webkit-transform: translate3d(100%, 0, 0);
6731
- transform: translate3d(100%, 0, 0);
6732
- left: 0;
6733
- }
6734
- .sg-wrapper-less .carousel-inner > .item.prev,
6735
- .sg-wrapper-less .carousel-inner > .item.active.left {
6736
- -webkit-transform: translate3d(-100%, 0, 0);
6737
- transform: translate3d(-100%, 0, 0);
6738
- left: 0;
6739
- }
6740
- .sg-wrapper-less .carousel-inner > .item.next.left,
6741
- .sg-wrapper-less .carousel-inner > .item.prev.right,
6742
- .sg-wrapper-less .carousel-inner > .item.active {
6743
- -webkit-transform: translate3d(0, 0, 0);
6744
- transform: translate3d(0, 0, 0);
6745
- left: 0;
6746
- }
6747
- }
6748
- .sg-wrapper-less .carousel-inner > .active,
6749
- .sg-wrapper-less .carousel-inner > .next,
6750
- .sg-wrapper-less .carousel-inner > .prev {
6751
- display: block;
6752
- }
6753
- .sg-wrapper-less .carousel-inner > .active {
6754
- left: 0;
6755
- }
6756
- .sg-wrapper-less .carousel-inner > .next,
6757
- .sg-wrapper-less .carousel-inner > .prev {
6758
- position: absolute;
6759
- top: 0;
6760
- width: 100%;
6761
- }
6762
- .sg-wrapper-less .carousel-inner > .next {
6763
- left: 100%;
6764
- }
6765
- .sg-wrapper-less .carousel-inner > .prev {
6766
- left: -100%;
6767
- }
6768
- .sg-wrapper-less .carousel-inner > .next.left,
6769
- .sg-wrapper-less .carousel-inner > .prev.right {
6770
- left: 0;
6771
- }
6772
- .sg-wrapper-less .carousel-inner > .active.left {
6773
- left: -100%;
6774
- }
6775
- .sg-wrapper-less .carousel-inner > .active.right {
6776
- left: 100%;
6777
- }
6778
- .sg-wrapper-less .carousel-control {
6779
- position: absolute;
6780
- top: 0;
6781
- left: 0;
6782
- bottom: 0;
6783
- width: 15%;
6784
- opacity: 0.5;
6785
- filter: alpha(opacity=50);
6786
- font-size: 20px;
6787
- color: #ffffff;
6788
- text-align: center;
6789
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6790
- }
6791
- .sg-wrapper-less .carousel-control.left {
6792
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6793
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6794
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));
6795
- background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6796
- background-repeat: repeat-x;
6797
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
6798
- }
6799
- .sg-wrapper-less .carousel-control.right {
6800
- left: auto;
6801
- right: 0;
6802
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6803
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6804
- background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));
6805
- background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6806
- background-repeat: repeat-x;
6807
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
6808
- }
6809
- .sg-wrapper-less .carousel-control:hover,
6810
- .sg-wrapper-less .carousel-control:focus {
6811
- outline: 0;
6812
- color: #ffffff;
6813
- text-decoration: none;
6814
- opacity: 0.9;
6815
- filter: alpha(opacity=90);
6816
- }
6817
- .sg-wrapper-less .carousel-control .icon-prev,
6818
- .sg-wrapper-less .carousel-control .icon-next,
6819
- .sg-wrapper-less .carousel-control .glyphicon-chevron-left,
6820
- .sg-wrapper-less .carousel-control .glyphicon-chevron-right {
6821
- position: absolute;
6822
- top: 50%;
6823
- z-index: 5;
6824
- display: inline-block;
6825
- }
6826
- .sg-wrapper-less .carousel-control .icon-prev,
6827
- .sg-wrapper-less .carousel-control .glyphicon-chevron-left {
6828
- left: 50%;
6829
- margin-left: -10px;
6830
- }
6831
- .sg-wrapper-less .carousel-control .icon-next,
6832
- .sg-wrapper-less .carousel-control .glyphicon-chevron-right {
6833
- right: 50%;
6834
- margin-right: -10px;
6835
- }
6836
- .sg-wrapper-less .carousel-control .icon-prev,
6837
- .sg-wrapper-less .carousel-control .icon-next {
6838
- width: 20px;
6839
- height: 20px;
6840
- margin-top: -10px;
6841
- line-height: 1;
6842
- font-family: serif;
6843
- }
6844
- .sg-wrapper-less .carousel-control .icon-prev:before {
6845
- content: '\2039';
6846
- }
6847
- .sg-wrapper-less .carousel-control .icon-next:before {
6848
- content: '\203a';
6849
- }
6850
- .sg-wrapper-less .carousel-indicators {
6851
- position: absolute;
6852
- bottom: 10px;
6853
- left: 50%;
6854
- z-index: 15;
6855
- width: 60%;
6856
- margin-left: -30%;
6857
- padding-left: 0;
6858
- list-style: none;
6859
- text-align: center;
6860
- }
6861
- .sg-wrapper-less .carousel-indicators li {
6862
- display: inline-block;
6863
- width: 10px;
6864
- height: 10px;
6865
- margin: 1px;
6866
- text-indent: -999px;
6867
- border: 1px solid #ffffff;
6868
- border-radius: 10px;
6869
- cursor: pointer;
6870
- background-color: #000 \9;
6871
- background-color: rgba(0, 0, 0, 0);
6872
- }
6873
- .sg-wrapper-less .carousel-indicators .active {
6874
- margin: 0;
6875
- width: 12px;
6876
- height: 12px;
6877
- background-color: #ffffff;
6878
- }
6879
- .sg-wrapper-less .carousel-caption {
6880
- position: absolute;
6881
- left: 15%;
6882
- right: 15%;
6883
- bottom: 20px;
6884
- z-index: 10;
6885
- padding-top: 20px;
6886
- padding-bottom: 20px;
6887
- color: #ffffff;
6888
- text-align: center;
6889
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6890
- }
6891
- .sg-wrapper-less .carousel-caption .btn {
6892
- text-shadow: none;
6893
- }
6894
- @media screen and (min-width: 768px) {
6895
- .sg-wrapper-less .carousel-control .glyphicon-chevron-left,
6896
- .sg-wrapper-less .carousel-control .glyphicon-chevron-right,
6897
- .sg-wrapper-less .carousel-control .icon-prev,
6898
- .sg-wrapper-less .carousel-control .icon-next {
6899
- width: 30px;
6900
- height: 30px;
6901
- margin-top: -15px;
6902
- font-size: 30px;
6903
- }
6904
- .sg-wrapper-less .carousel-control .glyphicon-chevron-left,
6905
- .sg-wrapper-less .carousel-control .icon-prev {
6906
- margin-left: -15px;
6907
- }
6908
- .sg-wrapper-less .carousel-control .glyphicon-chevron-right,
6909
- .sg-wrapper-less .carousel-control .icon-next {
6910
- margin-right: -15px;
6911
- }
6912
- .sg-wrapper-less .carousel-caption {
6913
- left: 20%;
6914
- right: 20%;
6915
- padding-bottom: 30px;
6916
- }
6917
- .sg-wrapper-less .carousel-indicators {
6918
- bottom: 20px;
6919
- }
6920
- }
6921
- .sg-wrapper-less .clearfix:before,
6922
- .sg-wrapper-less .clearfix:after,
6923
- .sg-wrapper-less .dl-horizontal dd:before,
6924
- .sg-wrapper-less .dl-horizontal dd:after,
6925
- .sg-wrapper-less .container:before,
6926
- .sg-wrapper-less .container:after,
6927
- .sg-wrapper-less .container-fluid:before,
6928
- .sg-wrapper-less .container-fluid:after,
6929
- .sg-wrapper-less .row:before,
6930
- .sg-wrapper-less .row:after,
6931
- .sg-wrapper-less .form-horizontal .form-group:before,
6932
- .sg-wrapper-less .form-horizontal .form-group:after,
6933
- .sg-wrapper-less .btn-toolbar:before,
6934
- .sg-wrapper-less .btn-toolbar:after,
6935
- .sg-wrapper-less .btn-group-vertical > .btn-group:before,
6936
- .sg-wrapper-less .btn-group-vertical > .btn-group:after,
6937
- .sg-wrapper-less .nav:before,
6938
- .sg-wrapper-less .nav:after,
6939
- .sg-wrapper-less .navbar:before,
6940
- .sg-wrapper-less .navbar:after,
6941
- .sg-wrapper-less .navbar-header:before,
6942
- .sg-wrapper-less .navbar-header:after,
6943
- .sg-wrapper-less .navbar-collapse:before,
6944
- .sg-wrapper-less .navbar-collapse:after,
6945
- .sg-wrapper-less .pager:before,
6946
- .sg-wrapper-less .pager:after,
6947
- .sg-wrapper-less .panel-body:before,
6948
- .sg-wrapper-less .panel-body:after,
6949
- .sg-wrapper-less .modal-footer:before,
6950
- .sg-wrapper-less .modal-footer:after {
6951
- content: " ";
6952
- display: table;
6953
- }
6954
- .sg-wrapper-less .clearfix:after,
6955
- .sg-wrapper-less .dl-horizontal dd:after,
6956
- .sg-wrapper-less .container:after,
6957
- .sg-wrapper-less .container-fluid:after,
6958
- .sg-wrapper-less .row:after,
6959
- .sg-wrapper-less .form-horizontal .form-group:after,
6960
- .sg-wrapper-less .btn-toolbar:after,
6961
- .sg-wrapper-less .btn-group-vertical > .btn-group:after,
6962
- .sg-wrapper-less .nav:after,
6963
- .sg-wrapper-less .navbar:after,
6964
- .sg-wrapper-less .navbar-header:after,
6965
- .sg-wrapper-less .navbar-collapse:after,
6966
- .sg-wrapper-less .pager:after,
6967
- .sg-wrapper-less .panel-body:after,
6968
- .sg-wrapper-less .modal-footer:after {
6969
- clear: both;
6970
- }
6971
- .sg-wrapper-less .center-block {
6972
- display: block;
6973
- margin-left: auto;
6974
- margin-right: auto;
6975
- }
6976
- .sg-wrapper-less .pull-right {
6977
- float: right !important;
6978
- }
6979
- .sg-wrapper-less .pull-left {
6980
- float: left !important;
6981
- }
6982
- .sg-wrapper-less .hide {
6983
- display: none !important;
6984
- }
6985
- .sg-wrapper-less .show {
6986
- display: block !important;
6987
- }
6988
- .sg-wrapper-less .invisible {
6989
- visibility: hidden;
6990
- }
6991
- .sg-wrapper-less .text-hide {
6992
- font: 0/0 a;
6993
- color: transparent;
6994
- text-shadow: none;
6995
- background-color: transparent;
6996
- border: 0;
6997
- }
6998
- .sg-wrapper-less .hidden {
6999
- display: none !important;
7000
- }
7001
- .sg-wrapper-less .affix {
7002
- position: fixed;
7003
- }
7004
- @-ms-viewport {
7005
- width: device-width;
7006
- }
7007
- .sg-wrapper-less .visible-xs,
7008
- .sg-wrapper-less .visible-sm,
7009
- .sg-wrapper-less .visible-md,
7010
- .sg-wrapper-less .visible-lg {
7011
- display: none !important;
7012
- }
7013
- .sg-wrapper-less .visible-xs-block,
7014
- .sg-wrapper-less .visible-xs-inline,
7015
- .sg-wrapper-less .visible-xs-inline-block,
7016
- .sg-wrapper-less .visible-sm-block,
7017
- .sg-wrapper-less .visible-sm-inline,
7018
- .sg-wrapper-less .visible-sm-inline-block,
7019
- .sg-wrapper-less .visible-md-block,
7020
- .sg-wrapper-less .visible-md-inline,
7021
- .sg-wrapper-less .visible-md-inline-block,
7022
- .sg-wrapper-less .visible-lg-block,
7023
- .sg-wrapper-less .visible-lg-inline,
7024
- .sg-wrapper-less .visible-lg-inline-block {
7025
- display: none !important;
7026
- }
7027
- @media (max-width: 767px) {
7028
- .sg-wrapper-less .visible-xs {
7029
- display: block !important;
7030
- }
7031
- .sg-wrapper-less table.visible-xs {
7032
- display: table;
7033
- }
7034
- .sg-wrapper-less tr.visible-xs {
7035
- display: table-row !important;
7036
- }
7037
- .sg-wrapper-less th.visible-xs,
7038
- .sg-wrapper-less td.visible-xs {
7039
- display: table-cell !important;
7040
- }
7041
- }
7042
- @media (max-width: 767px) {
7043
- .sg-wrapper-less .visible-xs-block {
7044
- display: block !important;
7045
- }
7046
- }
7047
- @media (max-width: 767px) {
7048
- .sg-wrapper-less .visible-xs-inline {
7049
- display: inline !important;
7050
- }
7051
- }
7052
- @media (max-width: 767px) {
7053
- .sg-wrapper-less .visible-xs-inline-block {
7054
- display: inline-block !important;
7055
- }
7056
- }
7057
- @media (min-width: 768px) and (max-width: 991px) {
7058
- .sg-wrapper-less .visible-sm {
7059
- display: block !important;
7060
- }
7061
- .sg-wrapper-less table.visible-sm {
7062
- display: table;
7063
- }
7064
- .sg-wrapper-less tr.visible-sm {
7065
- display: table-row !important;
7066
- }
7067
- .sg-wrapper-less th.visible-sm,
7068
- .sg-wrapper-less td.visible-sm {
7069
- display: table-cell !important;
7070
- }
7071
- }
7072
- @media (min-width: 768px) and (max-width: 991px) {
7073
- .sg-wrapper-less .visible-sm-block {
7074
- display: block !important;
7075
- }
7076
- }
7077
- @media (min-width: 768px) and (max-width: 991px) {
7078
- .sg-wrapper-less .visible-sm-inline {
7079
- display: inline !important;
7080
- }
7081
- }
7082
- @media (min-width: 768px) and (max-width: 991px) {
7083
- .sg-wrapper-less .visible-sm-inline-block {
7084
- display: inline-block !important;
7085
- }
7086
- }
7087
- @media (min-width: 992px) and (max-width: 1199px) {
7088
- .sg-wrapper-less .visible-md {
7089
- display: block !important;
7090
- }
7091
- .sg-wrapper-less table.visible-md {
7092
- display: table;
7093
- }
7094
- .sg-wrapper-less tr.visible-md {
7095
- display: table-row !important;
7096
- }
7097
- .sg-wrapper-less th.visible-md,
7098
- .sg-wrapper-less td.visible-md {
7099
- display: table-cell !important;
7100
- }
7101
- }
7102
- @media (min-width: 992px) and (max-width: 1199px) {
7103
- .sg-wrapper-less .visible-md-block {
7104
- display: block !important;
7105
- }
7106
- }
7107
- @media (min-width: 992px) and (max-width: 1199px) {
7108
- .sg-wrapper-less .visible-md-inline {
7109
- display: inline !important;
7110
- }
7111
- }
7112
- @media (min-width: 992px) and (max-width: 1199px) {
7113
- .sg-wrapper-less .visible-md-inline-block {
7114
- display: inline-block !important;
7115
- }
7116
- }
7117
- @media (min-width: 1200px) {
7118
- .sg-wrapper-less .visible-lg {
7119
- display: block !important;
7120
- }
7121
- .sg-wrapper-less table.visible-lg {
7122
- display: table;
7123
- }
7124
- .sg-wrapper-less tr.visible-lg {
7125
- display: table-row !important;
7126
- }
7127
- .sg-wrapper-less th.visible-lg,
7128
- .sg-wrapper-less td.visible-lg {
7129
- display: table-cell !important;
7130
- }
7131
- }
7132
- @media (min-width: 1200px) {
7133
- .sg-wrapper-less .visible-lg-block {
7134
- display: block !important;
7135
- }
7136
- }
7137
- @media (min-width: 1200px) {
7138
- .sg-wrapper-less .visible-lg-inline {
7139
- display: inline !important;
7140
- }
7141
- }
7142
- @media (min-width: 1200px) {
7143
- .sg-wrapper-less .visible-lg-inline-block {
7144
- display: inline-block !important;
7145
- }
7146
- }
7147
- @media (max-width: 767px) {
7148
- .sg-wrapper-less .hidden-xs {
7149
- display: none !important;
7150
- }
7151
- }
7152
- @media (min-width: 768px) and (max-width: 991px) {
7153
- .sg-wrapper-less .hidden-sm {
7154
- display: none !important;
7155
- }
7156
- }
7157
- @media (min-width: 992px) and (max-width: 1199px) {
7158
- .sg-wrapper-less .hidden-md {
7159
- display: none !important;
7160
- }
7161
- }
7162
- @media (min-width: 1200px) {
7163
- .sg-wrapper-less .hidden-lg {
7164
- display: none !important;
7165
- }
7166
- }
7167
- .sg-wrapper-less .visible-print {
7168
- display: none !important;
7169
- }
7170
- @media print {
7171
- .sg-wrapper-less .visible-print {
7172
- display: block !important;
7173
- }
7174
- .sg-wrapper-less table.visible-print {
7175
- display: table;
7176
- }
7177
- .sg-wrapper-less tr.visible-print {
7178
- display: table-row !important;
7179
- }
7180
- .sg-wrapper-less th.visible-print,
7181
- .sg-wrapper-less td.visible-print {
7182
- display: table-cell !important;
7183
- }
7184
- }
7185
- .sg-wrapper-less .visible-print-block {
7186
- display: none !important;
7187
- }
7188
- @media print {
7189
- .sg-wrapper-less .visible-print-block {
7190
- display: block !important;
7191
- }
7192
- }
7193
- .sg-wrapper-less .visible-print-inline {
7194
- display: none !important;
7195
- }
7196
- @media print {
7197
- .sg-wrapper-less .visible-print-inline {
7198
- display: inline !important;
7199
- }
7200
- }
7201
- .sg-wrapper-less .visible-print-inline-block {
7202
- display: none !important;
7203
- }
7204
- @media print {
7205
- .sg-wrapper-less .visible-print-inline-block {
7206
- display: inline-block !important;
7207
- }
7208
- }
7209
- @media print {
7210
- .sg-wrapper-less .hidden-print {
7211
- display: none !important;
7212
- }
7213
- }
7214
- .sg-wrapper-less .navbar-inverse .badge {
7215
- background-color: #fff;
7216
- color: #2780e3;
7217
- }
7218
- .sg-wrapper-less body {
7219
- -webkit-font-smoothing: antialiased;
7220
- }
7221
- .sg-wrapper-less .text-primary,
7222
- .sg-wrapper-less .text-primary:hover {
7223
- color: #2780e3;
7224
- }
7225
- .sg-wrapper-less .text-success,
7226
- .sg-wrapper-less .text-success:hover {
7227
- color: #0021C8;
7228
- }
7229
- .sg-wrapper-less .text-danger,
7230
- .sg-wrapper-less .text-danger:hover {
7231
- color: #ff0039;
7232
- }
7233
- .sg-wrapper-less .text-warning,
7234
- .sg-wrapper-less .text-warning:hover {
7235
- color: #ff7518;
7236
- }
7237
- .sg-wrapper-less .text-info,
7238
- .sg-wrapper-less .text-info:hover {
7239
- color: #9954bb;
7240
- }
7241
- .sg-wrapper-less table a:not(.btn),
7242
- .sg-wrapper-less .table a:not(.btn) {
7243
- text-decoration: underline;
7244
- }
7245
- .sg-wrapper-less table .dropdown-menu a,
7246
- .sg-wrapper-less .table .dropdown-menu a {
7247
- text-decoration: none;
7248
- }
7249
- .sg-wrapper-less table .success,
7250
- .sg-wrapper-less .table .success,
7251
- .sg-wrapper-less table .warning,
7252
- .sg-wrapper-less .table .warning,
7253
- .sg-wrapper-less table .danger,
7254
- .sg-wrapper-less .table .danger,
7255
- .sg-wrapper-less table .info,
7256
- .sg-wrapper-less .table .info {
7257
- color: #fff;
7258
- }
7259
- .sg-wrapper-less table .success a,
7260
- .sg-wrapper-less .table .success a,
7261
- .sg-wrapper-less table .warning a,
7262
- .sg-wrapper-less .table .warning a,
7263
- .sg-wrapper-less table .danger a,
7264
- .sg-wrapper-less .table .danger a,
7265
- .sg-wrapper-less table .info a,
7266
- .sg-wrapper-less .table .info a {
7267
- color: #fff;
7268
- }
7269
- .sg-wrapper-less .has-warning .help-block,
7270
- .sg-wrapper-less .has-warning .control-label,
7271
- .sg-wrapper-less .has-warning .form-control-feedback {
7272
- color: #ff7518;
7273
- }
7274
- .sg-wrapper-less .has-warning .form-control,
7275
- .sg-wrapper-less .has-warning .form-control:focus,
7276
- .sg-wrapper-less .has-warning .input-group-addon {
7277
- border: 1px solid #ff7518;
7278
- }
7279
- .sg-wrapper-less .has-error .help-block,
7280
- .sg-wrapper-less .has-error .control-label,
7281
- .sg-wrapper-less .has-error .form-control-feedback {
7282
- color: #ff0039;
7283
- }
7284
- .sg-wrapper-less .has-error .form-control,
7285
- .sg-wrapper-less .has-error .form-control:focus,
7286
- .sg-wrapper-less .has-error .input-group-addon {
7287
- border: 1px solid #ff0039;
7288
- }
7289
- .sg-wrapper-less .has-success .help-block,
7290
- .sg-wrapper-less .has-success .control-label,
7291
- .sg-wrapper-less .has-success .form-control-feedback {
7292
- color: #3fb618;
7293
- }
7294
- .sg-wrapper-less .has-success .form-control,
7295
- .sg-wrapper-less .has-success .form-control:focus,
7296
- .sg-wrapper-less .has-success .input-group-addon {
7297
- border: 1px solid #3fb618;
7298
- }
7299
- .sg-wrapper-less .nav-pills > li > a {
7300
- border-radius: 0;
7301
- }
7302
- .sg-wrapper-less .dropdown-menu > li > a:hover,
7303
- .sg-wrapper-less .dropdown-menu > li > a:focus {
7304
- background-image: none;
7305
- }
7306
- .sg-wrapper-less .close {
7307
- text-decoration: none;
7308
- text-shadow: none;
7309
- opacity: 0.4;
7310
- }
7311
- .sg-wrapper-less .close:hover,
7312
- .sg-wrapper-less .close:focus {
7313
- opacity: 1;
7314
- }
7315
- .sg-wrapper-less .alert {
7316
- border: none;
7317
- }
7318
- .sg-wrapper-less .alert .alert-link {
7319
- text-decoration: underline;
7320
- color: #fff;
7321
- }
7322
- .sg-wrapper-less .label {
7323
- border-radius: 0;
7324
- }
7325
- .sg-wrapper-less .progress {
7326
- height: 8px;
7327
- -webkit-box-shadow: none;
7328
- box-shadow: none;
7329
- }
7330
- .sg-wrapper-less .progress .progress-bar {
7331
- font-size: 8px;
7332
- line-height: 8px;
7333
- }
7334
- .sg-wrapper-less .panel-heading,
7335
- .sg-wrapper-less .panel-footer {
7336
- border-top-right-radius: 0;
7337
- border-top-left-radius: 0;
7338
- }
7339
- .sg-wrapper-less .panel-default .close {
7340
- color: #333333;
7341
- }
7342
- .sg-wrapper-less a.list-group-item-success.active {
7343
- background-color: #3fb618;
7344
- }
7345
- .sg-wrapper-less a.list-group-item-success.active:hover,
7346
- .sg-wrapper-less a.list-group-item-success.active:focus {
7347
- background-color: #379f15;
7348
- }
7349
- .sg-wrapper-less a.list-group-item-warning.active {
7350
- background-color: #ff7518;
7351
- }
7352
- .sg-wrapper-less a.list-group-item-warning.active:hover,
7353
- .sg-wrapper-less a.list-group-item-warning.active:focus {
7354
- background-color: #fe6600;
7355
- }
7356
- .sg-wrapper-less a.list-group-item-danger.active {
7357
- background-color: #ff0039;
7358
- }
7359
- .sg-wrapper-less a.list-group-item-danger.active:hover,
7360
- .sg-wrapper-less a.list-group-item-danger.active:focus {
7361
- background-color: #e60033;
7362
- }
7363
- .sg-wrapper-less .modal .close {
7364
- color: #333333;
7365
- }
7366
- .sg-wrapper-less .popover {
7367
- color: #333333;
7368
- }
7369
- .sg-wrapper-less .btn-file {
7370
- position: relative;
7371
- overflow: hidden;
7372
- }
7373
- .sg-wrapper-less .btn-file input[type=file] {
7374
- position: absolute;
7375
- top: 0;
7376
- right: 0;
7377
- min-width: 100%;
7378
- min-height: 100%;
7379
- font-size: 100px;
7380
- text-align: right;
7381
- filter: alpha(opacity=0);
7382
- opacity: 0;
7383
- outline: none;
7384
- background: white;
7385
- cursor: inherit;
7386
- display: block;
7387
- }
7388
- .sg-wrapper-less select {
7389
- background: #ffffff url("../img/select-arrow.png") no-repeat !important;
7390
- background-size: 24px 20px;
7391
- background-position: right 5px bottom 45% !important;
7392
- color: #888;
7393
- outline: none;
7394
- display: inline-block;
7395
- -webkit-appearance: none;
7396
- -moz-appearance: none;
7397
- appearance: none;
7398
- cursor: pointer;
7399
- border: none !important;
7400
- box-shadow: none !important;
7401
- padding-left: 0 !important;
7402
- border-bottom: 1px solid #000000 !important;
7403
- }
7404
- .sg-wrapper-less #sg-wrapper {
7405
- width: 100%;
7406
- min-width: 650px;
7407
- border: 1px #ffffff solid;
7408
- background-color: #F9F9F9;
7409
- }
7410
- .sg-wrapper-less #sg-sidebar-wrapper {
7411
- width: 210px;
7412
- float: left;
7413
- }
7414
- #sg-sidebar-wrapper li {
7415
- position: relative;
7416
- }
7417
- .sg-wrapper-less #sg-sidebar-wrapper a:focus {
7418
- box-shadow: none !important;
7419
- outline: 0px solid #cccccc !important;
7420
- }
7421
- .sg-wrapper-less #sg-content-wrapper {
7422
- position: relative;
7423
- float: left;
7424
- width: calc(100% - 210px);
7425
- border-left: 1px solid #F7F7F7;
7426
- /*Same as sidebar*/
7427
- min-height: 680px;
7428
- background-color: #ffffff;
7429
- }
7430
- .sg-wrapper-less .container-fluid {
7431
- min-height: 380px;
7432
- margin-top: 23px;
7433
- }
7434
- .sg-wrapper-less .metro .sidebar {
7435
- margin: 0;
7436
- padding: 0;
7437
- background-color: #F9F9F9;
7438
- width: 100%;
7439
- padding-top: 31px;
7440
- /*height: 100%;*/
7441
- }
7442
- .sg-wrapper-less .metro .sidebar > ul {
7443
- margin: 0;
7444
- padding: 0;
7445
- list-style: none;
7446
- }
7447
- .sg-wrapper-less .metro .sidebar > ul li {
7448
- display: block;
7449
- border: 0;
7450
- border-bottom: 1px rgba(255, 255, 255, 0.2) solid;
7451
- position: relative;
7452
- }
7453
- .sg-wrapper-less .title {
7454
- padding: 20px 20px 10px 20px;
7455
- margin-top: 18px;
7456
- font-weight: 300;
7457
- letter-spacing: 0.00em;
7458
- font-size: 2.5rem;
7459
- line-height: 2.5rem;
7460
- letter-spacing: 0.01em;
7461
- color: #000000;
7462
- font-size: 2.2rem;
7463
- line-height: 2.2rem;
7464
- color: #ffffff;
7465
- height: 33px;
7466
- width: 136px;
7467
- background-image: url("../img/logo-horizontal.png");
7468
- background-size: cover;
7469
- background-repeat: no-repeat;
7470
- margin-left: 16px;
7471
- }
7472
- .sg-wrapper-less .metro .sidebar > ul li a {
7473
- display: block;
7474
- position: relative;
7475
- padding: 10px 20px;
7476
- text-decoration: none;
7477
- color: #000000;
7478
- background-color: #F9F9F9;
7479
- }
7480
- .sg-wrapper-less .metro .sidebar > ul li a:hover {
7481
- color: #0021C8;
7482
- }
7483
- .sg-wrapper-less .metro .sidebar > ul li a:hover + .sg-action-menu-arrow {
7484
- display: inline-block;
7485
- }
7486
- .sg-wrapper-less .metro .sidebar > ul li a.dropdown-toggle:after {
7487
- right: 10px;
7488
- bottom: 5px;
7489
- }
7490
- .sg-wrapper-less .metro .sidebar > ul li a [class*="icon-"] {
7491
- margin-right: 15px;
7492
- }
7493
- .sg-wrapper-less .metro .sidebar > ul li.stick {
7494
- position: relative;
7495
- }
7496
- .sg-wrapper-less .metro .sidebar > ul li.stick:before {
7497
- content: "";
7498
- position: absolute;
7499
- width: 7px;
7500
- height: 40px;
7501
- left: -7px;
7502
- text-indent: -9999px;
7503
- border-top-left-radius: 5px;
7504
- border-bottom-left-radius: 5px;
7505
- background-color: inherit;
7506
- }
7507
- .sg-wrapper-less .metro .sidebar > ul li.disabled a {
7508
- background-color: #8a8a8a;
7509
- cursor: default;
7510
- color: #555555;
7511
- }
7512
- .sg-wrapper-less .metro .sidebar > ul li.active a {
7513
- color: #0021C8;
7514
- border-left: 2px solid #0021C8;
7515
- }
7516
-
7517
- .sg-wrapper-less .metro .sidebar > ul li.active .sg-action-menu-arrow {
7518
- display: inline-block !important;
7519
- }
7520
- .sg-wrapper-less .metro .sidebar > ul ul {
7521
- margin: 0;
7522
- padding: 0;
7523
- list-style: none;
7524
- position: absolute;
7525
- display: none;
7526
- z-index: 1000;
7527
- background: #ffffff;
7528
- min-width: 220px;
7529
- width: auto;
7530
- border: 1px solid #dcddde;
7531
- box-shadow: none;
7532
- position: relative !important;
7533
- background-color: #e5e5e5;
7534
- min-width: 100%;
7535
- }
7536
- .sg-wrapper-less .metro .sidebar > ul ul li {
7537
- display: block;
7538
- margin: 10px 0;
7539
- padding: 0;
7540
- vertical-align: baseline;
7541
- position: relative;
7542
- font-family: 'Segoe UI_', 'Open Sans', Verdana, Arial, Helvetica, sans-serif;
7543
- }
7544
- .sg-wrapper-less .metro .sidebar > ul ul li a {
7545
- display: block;
7546
- text-decoration: none;
7547
- font-family: 'Segoe UI Light_', 'Open Sans Light', Verdana, Arial, Helvetica, sans-serif;
7548
- font-weight: 300;
7549
- letter-spacing: 0.00em;
7550
- font-size: 2.5rem;
7551
- line-height: 2.5rem;
7552
- letter-spacing: 0.01em;
7553
- color: #000000;
7554
- line-height: 2.2rem;
7555
- font-size: 2.2rem;
7556
- color: inherit;
7557
- }
7558
- .sg-wrapper-less .metro .sidebar > ul ul li.title {
7559
- font-family: 'Segoe UI Light_', 'Open Sans Light', Verdana, Arial, Helvetica, sans-serif;
7560
- font-weight: 300;
7561
- color: #000000;
7562
- letter-spacing: 0.00em;
7563
- font-size: 2.5rem;
7564
- line-height: 2.5rem;
7565
- letter-spacing: 0.01em;
7566
- font-size: 4rem;
7567
- margin-bottom: 20px;
7568
- }
7569
- .sg-wrapper-less .metro .sidebar > ul ul.compact a {
7570
- font-weight: normal;
7571
- font-size: 10.5pt;
7572
- line-height: 12pt;
7573
- color: inherit;
7574
- }
7575
- .sg-wrapper-less .metro .sidebar > ul ul.compact li.title {
7576
- margin-bottom: 10px;
7577
- font-family: 'Segoe UI Semibold_', 'Open Sans Bold', Verdana, Arial, Helvetica, sans-serif;
7578
- font-weight: bold;
7579
- color: #000000;
7580
- font-size: 1.6rem;
7581
- line-height: 1.6rem;
7582
- letter-spacing: 0.02em;
7583
- }
7584
- .sg-wrapper-less .metro .sidebar > ul ul ul.secondary {
7585
- margin: 0;
7586
- padding: 0;
7587
- list-style: none;
7588
- margin-left: 15px;
7589
- }
7590
- .sg-wrapper-less .metro .sidebar > ul ul ul.secondary li a {
7591
- font-family: 'Segoe UI Semibold_', 'Open Sans Bold', Verdana, Arial, Helvetica, sans-serif;
7592
- font-weight: bold;
7593
- color: #000000;
7594
- font-size: 1.6rem;
7595
- line-height: 1.6rem;
7596
- letter-spacing: 0.02em;
7597
- font-weight: normal;
7598
- font-style: normal;
7599
- line-height: 1.4rem;
7600
- color: inherit;
7601
- }
7602
- .sg-wrapper-less .metro .sidebar > ul ul.shadow {
7603
- box-shadow: 3px 3px 0 rgba(236, 236, 236, 0.7);
7604
- }
7605
- .sg-wrapper-less .metro .sidebar > ul ul li {
7606
- margin: 5px 0 0;
7607
- width: 100%;
7608
- border: 1px transparent solid;
7609
- }
7610
- .sg-wrapper-less .metro .sidebar > ul ul li:last-child {
7611
- margin-bottom: 5px;
7612
- }
7613
- .sg-wrapper-less .metro .sidebar > ul ul li.disabled,
7614
- .sg-wrapper-less .metro .sidebar > ul ul li.disabled:hover {
7615
- cursor: default !important;
7616
- background: transparent !important;
7617
- color: #eeeeee;
7618
- }
7619
- .sg-wrapper-less .metro .sidebar > ul ul li.disabled a,
7620
- .sg-wrapper-less .metro .sidebar > ul ul li.disabled:hover a {
7621
- color: inherit;
7622
- cursor: inherit;
7623
- background: inherit;
7624
- }
7625
- .sg-wrapper-less .metro .sidebar > ul ul a {
7626
- padding: 8px 32px !important;
7627
- color: inherit;
7628
- font-size: 15px !important;
7629
- line-height: 14px !important;
7630
- cursor: pointer;
7631
- }
7632
- .sg-wrapper-less .metro .sidebar > ul ul li:hover {
7633
- background: #edf4fc;
7634
- border-color: #a8d2fd;
7635
- }
7636
- .sg-wrapper-less .metro .sidebar > ul ul li.checked a:before,
7637
- .sg-wrapper-less .metro .sidebar > ul ul li.checked-partial a:before,
7638
- .sg-wrapper-less .metro .sidebar > ul ul li.unchecked a:before {
7639
- font-family: metroSysIcons;
7640
- position: absolute;
7641
- left: 10px;
7642
- content: "\e004";
7643
- }
7644
- .sg-wrapper-less .metro .sidebar > ul ul li.checked-partial a:before {
7645
- content: "\e005";
7646
- }
7647
- .sg-wrapper-less .metro .sidebar > ul ul li.unchecked a:before {
7648
- content: "\e005";
7649
- }
7650
- .sg-wrapper-less .metro .sidebar > ul ul.place-right {
7651
- right: -15px;
7652
- left: auto;
7653
- }
7654
- .sg-wrapper-less .metro .sidebar > ul ul .divider {
7655
- padding: 0;
7656
- height: 1px;
7657
- margin: 9px 1px;
7658
- overflow: hidden;
7659
- background-color: #e5e5e5;
7660
- border-width: 0;
7661
- }
7662
- .sg-wrapper-less .metro .sidebar > ul ul .divider:hover {
7663
- background: #e5e5e5;
7664
- }
7665
- .sg-wrapper-less .metro .sidebar > ul ul.open {
7666
- display: block !important;
7667
- }
7668
- .sg-wrapper-less .metro .sidebar > ul ul .dropdown-menu {
7669
- left: 100%;
7670
- top: -10%;
7671
- }
7672
- .sg-wrapper-less .metro .sidebar > ul ul > li:hover > .dropdown-menu[data-show="hover"] {
7673
- display: block;
7674
- }
7675
- .sg-wrapper-less .metro .sidebar > ul ul > li > a.dropdown-toggle:after {
7676
- font-family: metroSysIcons;
7677
- font-size: .7em;
7678
- content: "\e001";
7679
- left: 90%;
7680
- top: 50%;
7681
- margin-top: -1.4em;
7682
- -webkit-transform: rotate(-90deg);
7683
- -moz-transform: rotate(-90deg);
7684
- -ms-transform: rotate(-90deg);
7685
- -o-transform: rotate(-90deg);
7686
- transform: rotate(-90deg);
7687
- }
7688
- .sg-wrapper-less .metro .sidebar > ul ul.drop-left {
7689
- left: -100%;
7690
- }
7691
- .sg-wrapper-less .metro .sidebar > ul ul.drop-up {
7692
- top: auto;
7693
- bottom: 0;
7694
- }
7695
- .sg-wrapper-less .metro .sidebar > ul ul .menu-title {
7696
- background-color: #f6f7f8;
7697
- font-size: 12px;
7698
- line-height: 14px;
7699
- padding: 4px 8px;
7700
- border: 0;
7701
- border-bottom: 1px #dcddde solid;
7702
- border-top: 1px #dcddde solid;
7703
- color: #646464;
7704
- }
7705
- .sg-wrapper-less .metro .sidebar > ul ul .menu-title:first-child {
7706
- margin: 0;
7707
- border-top-width: 0;
7708
- }
7709
- .sg-wrapper-less .metro .sidebar > ul ul .menu-title:first-child:hover {
7710
- border-top-width: 0;
7711
- }
7712
- .sg-wrapper-less .metro .sidebar > ul ul .menu-title:hover {
7713
- background-color: #f6f7f8;
7714
- cursor: default;
7715
- border: 0;
7716
- border-bottom: 1px #dcddde solid;
7717
- border-top: 1px #dcddde solid;
7718
- }
7719
- .sg-wrapper-less .metro .sidebar > ul ul.inverse {
7720
- border: 2px #3b3b3b solid;
7721
- }
7722
- .sg-wrapper-less .metro .sidebar > ul ul.inverse li {
7723
- border: 0;
7724
- }
7725
- .sg-wrapper-less .metro .sidebar > ul ul.inverse li a {
7726
- padding: 9px 32px !important;
7727
- }
7728
- .sg-wrapper-less .metro .sidebar > ul ul.inverse li:hover {
7729
- border: 0;
7730
- background-color: #e5e5e5;
7731
- }
7732
- .sg-wrapper-less .metro .sidebar > ul ul.inverse .menu-title:hover {
7733
- background-color: #f6f7f8;
7734
- }
7735
- .sg-wrapper-less .metro .sidebar > ul ul.inverse .divider {
7736
- margin-left: 0;
7737
- margin-right: 0;
7738
- }
7739
- .sg-wrapper-less .metro .sidebar > ul ul.dark {
7740
- background-color: #333333;
7741
- border: 2px #333333 solid;
7742
- color: #ffffff;
7743
- }
7744
- .sg-wrapper-less .metro .sidebar > ul ul.dark.opacity {
7745
- background-color: rgba(61, 61, 61, 0.9);
7746
- }
7747
- .sg-wrapper-less .metro .sidebar > ul ul.dark li {
7748
- border: 0;
7749
- color: inherit;
7750
- }
7751
- .sg-wrapper-less .metro .sidebar > ul ul.dark li a {
7752
- padding: 9px 32px !important;
7753
- color: inherit;
7754
- }
7755
- .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled,
7756
- .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled:hover {
7757
- cursor: default !important;
7758
- background: transparent !important;
7759
- color: #555555;
7760
- }
7761
- .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled a,
7762
- .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled:hover a {
7763
- color: inherit;
7764
- cursor: inherit;
7765
- background: inherit;
7766
- }
7767
- .sg-wrapper-less .metro .sidebar > ul ul.dark li:hover {
7768
- border: 0;
7769
- background-color: #201a1a;
7770
- color: #ffffff;
7771
- }
7772
- .sg-wrapper-less .metro .sidebar > ul ul.dark .menu-title {
7773
- background-color: #3b3b3b;
7774
- }
7775
- .sg-wrapper-less .metro .sidebar > ul ul.dark .menu-title:hover {
7776
- background-color: #3b3b3b;
7777
- }
7778
- .sg-wrapper-less .metro .sidebar > ul ul.dark .divider {
7779
- margin-left: 0;
7780
- margin-right: 0;
7781
- background-color: #555555;
7782
- }
7783
- .sg-wrapper-less .metro .sidebar > ul ul.dark .divider:hover {
7784
- background: #555555;
7785
- }
7786
- .sg-wrapper-less .metro .sidebar > ul ul li {
7787
- border: 0;
7788
- }
7789
- .sg-wrapper-less .metro .sidebar > ul ul li a {
7790
- background-color: #e5e5e5;
7791
- }
7792
- .sg-wrapper-less .metro .sidebar > ul ul li.divider {
7793
- background-color: #c2c2c2;
7794
- }
7795
- .sg-wrapper-less .metro .sidebar > ul ul li.divider:hover {
7796
- background-color: #c2c2c2;
7797
- }
7798
- .sg-wrapper-less .metro .sidebar > ul ul li.disabled a {
7799
- color: #999999;
7800
- }
7801
- .sg-wrapper-less .metro .sidebar > ul ul li.disabled a:hover {
7802
- color: #999999;
7803
- }
7804
- .sg-wrapper-less .metro .sidebar > ul ul.open {
7805
- display: block;
7806
- }
7807
- .sg-wrapper-less .metro .sidebar.light {
7808
- background-color: #ffffff;
7809
- }
7810
- .sg-wrapper-less .metro .sidebar.light li {
7811
- border-bottom-color: #eeeeee;
7812
- }
7813
- .sg-wrapper-less .metro .sidebar.light li.title {
7814
- color: #1d1d1d;
7815
- }
7816
- .sg-wrapper-less .metro .sidebar.light li a {
7817
- color: #1d1d1d;
7818
- background-color: #ffffff;
7819
- }
7820
- .sg-wrapper-less .metro .sidebar.light li a:hover {
7821
- background-color: #00aff0;
7822
- }
7823
- .sg-wrapper-less .metro .sidebar.light li ul {
7824
- background-color: #ffffff;
7825
- border: 1px transparent solid;
7826
- }
7827
- .sg-wrapper-less .metro .sidebar.light li .divider {
7828
- background-color: #eeeeee;
7829
- }
7830
- .sg-wrapper-less .metro .sidebar.light li .divider:hover {
7831
- background-color: #eeeeee;
7832
- }
7833
- .sg-wrapper-less .metro .sidebar.light li.disabled a {
7834
- background-color: #ffffff;
7835
- cursor: default;
7836
- color: #999999;
7837
- }
7838
- .sg-wrapper-less .metro .sidebar.light li.active a {
7839
- background-color: #1ba1e2;
7840
- color: #ffffff;
7841
- }
7842
- .sg-wrapper-less .sg-site-url {
7843
- width: 100%;
7844
- height: 100%;
7845
- background-color: transparent !important;
7846
- }
7847
- .sg-wrapper-less .sg-footer {
7848
- text-align: center;
7849
- border-top: 1px #eaeaea solid;
7850
- height: 45px;
7851
- }
7852
- .sg-wrapper-less .sg-footer .row {
7853
- margin-left: 0;
7854
- margin-right: 0;
7855
- }
7856
- .sg-wrapper-less .sg-footer .sg-version {
7857
- position: absolute;
7858
- right: 5px;
7859
- }
7860
- .sg-wrapper-less .sg-checkbox .checkbox,
7861
- .sg-wrapper-less .sg-custom-backup .checkbox {
7862
- padding-top: 2px;
7863
- min-height: 10px;
7864
- }
7865
- .sg-wrapper-less .sg-close,
7866
- .sg-wrapper-less .sg-custom-backup,
7867
- .sg-wrapper-less .sg-custom-backup-files,
7868
- .sg-wrapper-less .sg-custom-backup-tables,
7869
- .sg-wrapper-less .sg-backup-db-options,
7870
- .sg-wrapper-less .sg-custom-backup-cloud,
7871
- .sg-wrapper-less .sg-schedule-settings-closed {
7872
- display: none;
7873
- }
7874
- .sg-wrapper-less .sg-open {
7875
- display: block;
7876
- }
7877
- .sg-wrapper-less .sg-switch-container {
7878
- margin-top: 7px;
7879
- }
7880
- .sg-wrapper-less .sg-schedule-settings-opened {
7881
- display: block;
7882
- }
7883
- .sg-wrapper-less .sg-custom-backup-schedule .checkbox:not:first-child {
7884
- padding-top: 0 !important;
7885
- }
7886
- .sg-wrapper-less .sg-general-settings {
7887
- display: none;
7888
- }
7889
- .sg-wrapper-less .sg-progress {
7890
- height: 2px;
7891
- margin: 0;
7892
- margin-top: 1px;
7893
- }
7894
- .sg-wrapper-less #sg-status-tabe-data {
7895
- padding: 7px;
7896
- }
7897
- .sg-wrapper-less .sg-status-icon {
7898
- display: inline-block;
7899
- width: 20px;
7900
- height: 20px;
7901
- background-image: url('../img/backup-icons.png');
7902
- background-repeat: no-repeat;
7903
- background-size: 205px 40px;
7904
- }
7905
- @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-resolution: 240dpi) {
7906
- .sg-wrapper-less .sg-status-icon {
7907
- background-image: url('../img/backup-icons.png');
7908
- }
7909
- }
7910
- .sg-wrapper-less .sg-status-36 {
7911
- background-position: -184px 0px;
7912
- }
7913
- .sg-wrapper-less .sg-status-36.active {
7914
- background-position: -184px -21px;
7915
- }
7916
- .sg-wrapper-less .sg-status-35 {
7917
- background-position: -123px 1px;
7918
- width: 28px;
7919
- }
7920
- .sg-wrapper-less .sg-status-35.active {
7921
- background-position: -123px -21px;
7922
- width: 28px;
7923
- }
7924
- .sg-wrapper-less .sg-status-34 {
7925
- background-position: -96px 1px;
7926
- }
7927
- .sg-wrapper-less .sg-status-34.active {
7928
- background-position: -96px -21px;
7929
- }
7930
- .sg-wrapper-less .sg-status-1 {
7931
- background-position: 0px 1px;
7932
- background-size: 154px 40px;
7933
- width: 16px;
7934
- }
7935
- .sg-wrapper-less .sg-status-1.active {
7936
- background-position: 0px -21px;
7937
- }
7938
- .sg-wrapper-less .sg-status-2 {
7939
- background-position: -23px 0px;
7940
- }
7941
- .sg-wrapper-less .sg-status-2.active {
7942
- background-position: -23px -21px;
7943
- }
7944
- .sg-wrapper-less .sg-status-31 {
7945
- background-position: -72px 1px
7946
- }
7947
- .sg-wrapper-less .sg-status-31.active {
7948
- background-position: -72px -21px;
7949
- }
7950
- .sg-wrapper-less .sg-status-32 {
7951
- background-position: -47px 1px;
7952
- }
7953
- .sg-wrapper-less .sg-status-32.active {
7954
- background-position: -47px -21px;
7955
- }
7956
- .sg-wrapper-less .sg-status-33 {
7957
- background-position: -158px 1px;
7958
- }
7959
- .sg-wrapper-less .sg-status-33.active {
7960
- background-position: -159px -21px;
7961
- }
7962
- .sg-wrapper-less .sg-status-22 {
7963
- background-position: -180px -20px;
7964
- }
7965
- .sg-wrapper-less .sg-status-22.active {
7966
- background-position: -180px 0px;
7967
- }
7968
- .sg-wrapper-less .sg-status-21 {
7969
- background-position: -200px -20px;
7970
- }
7971
- .sg-wrapper-less .sg-status-21.active {
7972
- background-position: -200px 0px;
7973
- }
7974
- .sg-wrapper-less .sg-helper-block {
7975
- font-size: 12px;
7976
- padding-left: 0px;
7977
- text-align: left;
7978
- display: block;
7979
- font-weight: normal;
7980
- margin-top: 5px;
7981
- }
7982
- .sg-wrapper-less .sg-control-label {
7983
- text-align: left;
7984
- margin-bottom: 0;
7985
- margin-top: 11px;
7986
- }
7987
- .sg-wrapper-less .sg-upload-label {
7988
- padding-left: 0px;
7989
- padding-top: 12px;
7990
- }
7991
- .sg-wrapper-less .sg-modal-body {
7992
- max-height: calc(100vh - 210px);
7993
- overflow-y: auto;
7994
- }
7995
-
7996
- .sg-wrapper-less .sg-justify {
7997
- text-align: justify;
7998
- }
7999
- .sg-wrapper-less #sg-save-cloud-folder {
8000
- margin-left: 5px;
8001
- display: none;
8002
- }
8003
-
8004
- .sg-wrapper-less .sg-alert-pro {
8005
- color: white;
8006
- margin: 20px;
8007
- text-align: left;
8008
- }
8009
-
8010
- .sg-upgrade-text {
8011
- color: #010101;
8012
- margin-bottom: 30px !important;
8013
- }
8014
-
8015
- .sg-wrapper-less .sg-star {
8016
- color: gold;
8017
- font-size: 24px;
8018
- }
8019
- .sg-wrapper-less .sg-no-margin-bottom {
8020
- margin-bottom: 0 !important;
8021
- }
8022
- .sg-wrapper-less .sg-no-padding-left {
8023
- padding-left: 0 !important;
8024
- }
8025
- .sg-wrapper-less .sg-btn-grey {
8026
- background-color: #999;
8027
- border-color: #999;
8028
- color: #ffffff;
8029
- }
8030
- .sg-wrapper-less .sg-btn-grey:hover {
8031
- background-color: #777;
8032
- border-color: #777;
8033
- }
8034
-
8035
- .sg-custom-backup-tables .sg-disableText {
8036
- color: #bbb;
8037
- font-size: 12px;
8038
- }
8039
-
8040
- .sg-backup-db-options .checkbox .sg-backup-db-mode,
8041
- .sg-restore-files-options .checkbox .sg-restore-files-mode {
8042
- padding-left: 15px;
8043
- }
8044
- .sg-backup-db-options .checkbox .sg-backup-db-mode:first-child,
8045
- .sg-restore-files-options .checkbox .sg-restore-files-mode:first-child {
8046
- padding-left: 0px;
8047
- }
8048
-
8049
- .sg-backup-db-options .checkbox .sg-backup-db-mode input,
8050
- .sg-restore-files-options .checkbox .sg-restore-files-mode input {
8051
- margin: 0px;
8052
- }
8053
-
8054
- .sg-restore-files-options {
8055
- display: none;
8056
- }
8057
-
8058
- .sg-custom-backup-schedule .col-md-8 {
8059
- width: 100%;
8060
- margin-left: 0px;
8061
- }
8062
-
8063
- .sg-file-selective-restore {
8064
- display: none;
8065
- }
8066
- .form-group-google,
8067
- .form-group-custom {
8068
- display: none;
8069
- }
8070
- .schedule-modal-close {
8071
- margin-top: 10px;
8072
- }
8073
- #manualBackup {
8074
- margin-bottom: 0;
8075
- }
8076
- .backup-browse-btn {
8077
- border: none !important;
8078
- color: #000000 !important;
8079
- font-weight: 500 !important;
8080
- }
8081
- .backup-browse-btn:hover {
8082
- background-color: #ffffff !important;
8083
- color: #000000 !important;
8084
- }
8085
- input.sg-backup-input[readonly] {
8086
- background-color: rgba(255, 255, 255, 0.2) !important;
8087
- }
8088
- .bg-import-browse-button {
8089
- margin-left: 2px;
8090
- }
8091
- .import-modal-popup-content {
8092
- margin-bottom: 90px !important;
8093
- }
8094
- .backup-browse-btn:active {
8095
- box-shadow: none !important;
8096
- }
8097
- .sg-button-red {
8098
- border: 1px solid #C20000 !important;
8099
- color: #C20000 !important;
8100
- display: inline-block;
8101
- background-color: transparent;
8102
- border-radius: 8px;
8103
- cursor: pointer;
8104
- padding: 10px 18px;
8105
- text-transform: uppercase;
8106
- outline: 0;
8107
- transition: background-color .2s ease-out;
8108
- text-decoration: none;
8109
- font-weight: bold !important;
8110
- }
8111
-
8112
- .sg-button-red:hover {
8113
- background-color: #C20000 !important;
8114
- color: #FFFFFF !important;
8115
- }
8116
-
8117
- .sg-red-color {
8118
- color: #C20000 !important;
8119
- }
8120
-
8121
- .sg-black-color {
8122
- color: black !important;
8123
- }
8124
-
8125
- .sg-notice-error-h2 {
8126
- margin-bottom: 5px;
8127
- margin-top: 0;
8128
- }
8129
-
8130
- .sg-error-notice-wrapper {
8131
- text-align: left;
8132
- }
8133
-
8134
- .sg-notice-contact-wrapper {
8135
- margin-top: 0px !important;
8136
- }
8137
-
8138
- .sg-notice-error-p {
8139
- margin-top: 2px !important;
8140
- }
8141
-
8142
- .sg-error-notice-h2-first {
8143
- font-size: 1.8em;
8144
- }
8145
-
8146
- .sg-wrapper-less input[type=checkbox]:checked::before {
8147
- content: url(../img/checkbox-content.svg);
8148
- margin: -1px -1px;
8149
- float: inherit !important;
8150
- font-size: inherit !important;
8151
- vertical-align: top !important;
8152
- }
8153
-
8154
- .sg-wrapper-less input[type=checkbox] {
8155
- width: 20px !important;
8156
- height: 20px !important;
8157
- }
8158
-
8159
- .sg-wrapper-less input[type=checkbox]:focus {
8160
- border: 1px solid #7e8993;
8161
- box-shadow: none;
8162
- }
8163
-
8164
- a#sg-logo:focus {
8165
- box-shadow: none !important;
8166
- }
8167
-
8168
- .sg-visibility-hidden {
8169
- display: none;
8170
- }
8171
-
8172
- .sg-checkbox-label-text {
8173
- display: inline-block;
8174
- margin-left: 5px;
8175
- margin-top: 3px;
8176
- }
8177
-
8178
- /*Pricing table page CSS*/
8179
- .sg-backup-table-row div {
8180
- border-bottom: 1px solid #C9C9C9;
8181
- border-right: 1px solid #C9C9C9;
8182
- padding-top: 25px;
8183
- padding-bottom: 25px;
8184
- padding-left: 25px !important;
8185
- }
8186
- .sg-backup-table-row div:last-child {
8187
- border-right: 0px !important;
8188
- }
8189
- .sg-pricing-table-header-label {
8190
- font-size: 25px;
8191
- color: #000000;
8192
- font-weight: bold;
8193
- display: block;
8194
- margin-bottom: 20px;
8195
- }
8196
- .sg-pricing-table-blue-label {
8197
- color: #0021C8;
8198
- font-size: 39px;
8199
- line-height: 1;
8200
- }
8201
- .sg-pricing-table-header-first-column {
8202
- height: 145px;
8203
- }
8204
- @font-face {
8205
- font-family: 'pricingTableFonts';
8206
- src: url('../fonts/pricingTableFonts.eot');
8207
- src: url('../fonts/pricingTableFonts.eot?#iefix') format('embedded-opentype'),
8208
- url('../fonts/pricingTableFonts.woff') format('woff'),
8209
- url('../fonts/pricingTableFonts.ttf') format('truetype'),
8210
- url('../fonts/pricingTableFonts.svg#Glyphter') format('svg');
8211
- font-weight: normal;
8212
- font-style: normal;
8213
- }
8214
- [class*='backup-plan-']:before{
8215
- display: inline-block;
8216
- font-family: 'pricingTableFonts' !important;
8217
- font-style: normal;
8218
- font-weight: normal;
8219
- line-height: 1;
8220
- -webkit-font-smoothing: antialiased;
8221
- -moz-osx-font-smoothing: grayscale
8222
- }
8223
- .sg-backup-plan-included:before{content:'\0057';}
8224
- .sg-backup-plan-excluded:before{content:'\0058';}
8225
-
8226
- .sg-backup-plan-excluded, .sg-backup-plan-included {
8227
- color: #0021C8;
8228
- }
8229
- .sg-backup-table-options-wrapper {
8230
- text-align: center;
8231
- }
8232
-
8233
- .sg-backup-table-options-wrapper .sg-backup-table-row:last-child div {
8234
- border-bottom: 0;
8235
- margin-bottom: 30px;
8236
- }
8237
-
8238
- .sg-pricing-table-wrapper {
8239
- box-shadow: 0px 0px 20px #0000000D;
8240
- margin-top: 10px;
8241
- padding: 10px 10px 30px 10px;
8242
- }
8243
- .sg-backup-guard-plans-title {
8244
- text-align: center;
8245
- color: #0021C8 !important;
8246
- font-size: 24px !important;
8247
- margin-top: 37px !important;
8248
- font-weight: bold !important;
8249
- margin-bottom: 60px !important;
8250
- }
8251
- .sg-pricing-table-option-wrapper {
8252
- text-align: left;
8253
- }
8254
- .sg-backup-pricing-currency {
8255
- font-size: 28px;
8256
- vertical-align: top;
8257
- }
8258
- @media (max-width: 1284px) {
8259
- .sg-pricing-table-blue-label {
8260
- font-size: 31px;
8261
- vertical-align: top;
8262
- }
8263
- .sg-pricing-table-header-first-column {
8264
- height: 137px;
8265
- }
8266
- }
8267
- /*Pricing table page CSS*/
8268
-
8269
- .sgbg-welcome-title {
8270
- margin-top: 0 !important;
8271
- margin-bottom: 6px !important;
8272
- }
8273
-
8274
- .sg-data-collection-label {
8275
- text-align: left;
8276
- display: inline-block;
8277
- margin-right: 10px;
8278
- vertical-align: text-bottom;
8279
- }
8280
-
8281
- .sg-data-collection-label label {
8282
- font-weight: normal;
8283
- }
8284
-
8285
- .backup-send-usage-data-status-wrapper {
8286
- text-align: left;
8287
- display: inline-block;
8288
- }
8289
-
8290
- .bg-initial-privacy-links-container {
8291
- border-top: 1px solid #ddd;
8292
- padding-top: 20px;
8293
- margin-top: 20px;;
8294
- }
8295
-
8296
- .bg-initial-privacy-links-container a {
8297
- font-size: 16px;
8298
- text-decoration: none;
8299
- margin: 0 15px;
8300
- color: #016cb0;
8301
- }
8302
-
8303
- .sgbg-send-usage-data-wrapper {
8304
- margin-top: 20px;
8305
- text-align: center;
8306
- }
8307
-
8308
- .sgbg-send-usage-data-wrapper span.bootstrap-switch-handle-on.bootstrap-switch-primary {
8309
- background: #007cba;
8310
- }
8311
-
8312
- .bg-invalid-login {
8313
- color: red;
8314
- }
8315
-
8316
- #backupGuardDetailsModal .control-label {
8317
- text-align: left !important;
8318
- }
8319
-
8320
- #backupGuardDetailsModal label.error {
8321
- color: red;
8322
- font-size: 14px;
8323
- margin-top: 4px;
8324
- font-weight: normal;
8325
- }
8326
-
8327
- #backupGuardDetailsModal button {
8328
- outline: none;
8329
- }
8330
-
8331
- .bg-email-confirmation {
8332
- color: #000;
8333
- }
8334
-
8335
- .sgbg-info-icon {
8336
- margin-left: 5px;
8337
- margin-top: 1px;
8338
- }
8339
-
8340
- .sgbg-info-text {
8341
- color: #3879D9;
8342
- font: 14px Arial;
8343
- width: 200px;
8344
- border: 1px solid #ccc;
8345
- position: absolute;
8346
- min-width: 20px;
8347
- min-height: 13px;
8348
- display: none;
8349
- margin-top: 3px;
8350
- margin-left: 5px;
8351
- box-shadow: 0px 0px 5px #ccc;
8352
- padding: 5px;
8353
- z-index: 9999;
8354
- background-color: white;
8355
- border-radius: 5px;
8356
- display: none;
8357
- }
8358
-
8359
- .sgbg-info-icon:hover + .sgbg-info-text {
8360
- display: inline-block !important;
8361
- }
8362
-
8363
- .modal-content .sgbg-info-icon {
8364
- margin-top: 4px;
8365
- }
8366
-
8367
- .modal-content .sgbg-info-text {
8368
- margin-top: 3px;
8369
- margin-left: 5px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8370
  }
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: 1px 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 {
18
+ color: #ff7518;
19
+ }
20
+
21
+ .sg-feature-alert-text {
22
+ color: gray;
23
+ font-size: 13px;
24
+ font-style: italic;
25
+ text-align: center;
26
+ }
27
+
28
+ #sg-product-name-div {
29
+ position: absolute;
30
+ font-size: 10px;
31
+ color: orange;
32
+ bottom: 15px;
33
+ text-align: center;
34
+ width: 100%;
35
+ margin-left: -20px;
36
+ }
37
+
38
+ .sg-badge-warning {
39
+ background-color: #ff7518 !important;
40
+ border-color: #ff4309 !important;
41
+ border-radius: 2px !important;
42
+ color: #ffffff !important;
43
+ }
44
+
45
+ .sg-margin-left-20 {
46
+ margin-left: 20px;
47
+ }
48
+
49
+ .sg-margin-left-12 {
50
+ margin-left: 12px !important;
51
+ }
52
+
53
+ .sg-service-container {
54
+ width: 100%;
55
+ margin: 0;
56
+ background: #FFFFFF 0% 0% no-repeat padding-box;
57
+ box-shadow: 0px 0px 15px #0000001A;
58
+ border-radius: 10px;
59
+ opacity: 1;
60
+ }
61
+
62
+ .sg-service-container .plugin-card-top {
63
+ padding-bottom: 40px;
64
+ }
65
+
66
+ .sg-migration-icon {
67
+ height: 264px;
68
+ background-image: url("../img/wordPress-migration-service-product.png");
69
+ background-size: contain;
70
+ background-repeat: no-repeat;
71
+ background-position: center;
72
+ }
73
+
74
+ .sg-right-arrow {
75
+ display: inline-block;
76
+ width: 15px;
77
+ height: 9px;
78
+ background-image: url("../img/arrow-right.png");
79
+ }
80
+
81
+ .sg-migration-info {
82
+ text-align: left;
83
+ }
84
+
85
+ .sg-migration-info a {
86
+ color: #010101 !important;
87
+ }
88
+
89
+ .sg-migration-info h1 {
90
+ margin-bottom: 30px !important;
91
+ }
92
+
93
+ .column-description-p {
94
+ margin-bottom: 25px !important;
95
+ }
96
+
97
+ .sg-migration-features {
98
+ margin-bottom: 17px !important;
99
+ }
100
+
101
+ .migration-price-wrapper {
102
+ position: absolute !important;
103
+ bottom: 0px !important;
104
+ }
105
+
106
+ .sg-migration-right-column {
107
+ position: relative;
108
+ height: 300px;
109
+ }
110
+
111
+ .sg-services-arrow {
112
+ margin-right: 6px;
113
+ }
114
+
115
+ .sg-service-container h3 {
116
+ margin-top: 0px !important;
117
+ }
118
+
119
+ .sg-service-container .plugin-card-top {
120
+ margin-bottom: 20px;
121
+ }
122
+
123
+ #sg-migration-service-price {
124
+ font-size: 32px;
125
+ text-align: center;
126
+ }
127
+
128
+ .sg-migration-price-ul {
129
+ margin-bottom: 0px !important;
130
+ }
131
+
132
+ .sg-migration-price-ul li:nth-child(1) {
133
+ margin-bottom: 19px !important;
134
+ }
135
+
136
+ .sg-migration-price-ul li:nth-child(2) {
137
+ margin-bottom: 0 !important;
138
+ }
139
+ .sg-migration-price-ul li p {
140
+ line-height: 1;
141
+ }
142
+
143
+ #sg-banner {
144
+ margin-top: 10px;
145
+ width: calc(100% - 20px) !important;
146
+ height: 185px;
147
+ background-color: #0021C8;
148
+ color: #FFFFFF;
149
+ font-size: 12px;
150
+ min-width: 650px;
151
+ }
152
+
153
+ #sg-left-column {
154
+ width: 18%;
155
+ float: left;
156
+ display: inline-block;
157
+ }
158
+
159
+ #sg-left-column ul {
160
+ display: inline-block;
161
+ }
162
+
163
+ #sg-center-column {
164
+ width: 60%;
165
+ padding-top: 17px;
166
+ text-align: center;
167
+ display: inline-block;
168
+ }
169
+
170
+ #sg-right-column {
171
+ width: 22%;
172
+ float: right;
173
+ display: inline-block;
174
+ position: relative;
175
+ }
176
+
177
+ .sg-close-free-banner {
178
+ position: absolute;
179
+ cursor: pointer;
180
+ line-height: 1;
181
+ font-size: 15px;
182
+ right: 7px;
183
+ top: 7px;
184
+ background-image: url(../img/close-button.png);
185
+ width: 9px;
186
+ height: 9px;
187
+ background-size: contain;
188
+ background-repeat: no-repeat;
189
+ }
190
+
191
+ .sg-banner-social-button {
192
+ display: inline-block;
193
+ width: 44px;
194
+ height: 44px;
195
+ border: none;
196
+ border-radius: 50%;
197
+ cursor: pointer;
198
+ margin-right: 3px;
199
+ background-size: contain !important;
200
+ }
201
+
202
+ #sg-banner p {
203
+ width: 100%;
204
+ text-align: center;
205
+ font-size: 13px !important;
206
+ }
207
+
208
+ #sg-banner a {
209
+ vertical-align: middle;
210
+ text-decoration: none;
211
+ color: #FFFFFF;
212
+ cursor: pointer;
213
+ font-weight: bold;
214
+ }
215
+
216
+ #sg-banner ul {
217
+ list-style-type: none;
218
+ }
219
+
220
+ #sg-banner li {
221
+ vertical-align: middle;
222
+ margin-bottom: 5px;
223
+ height: 32px;
224
+ }
225
+
226
+ #sg-right-column ul {
227
+ float: right;
228
+ padding-right: 16px;
229
+ padding-top: 2px;
230
+ }
231
+
232
+ #sg-right-column li {
233
+ vertical-align: middle;
234
+ }
235
+
236
+ #sg-left-column li {
237
+ padding-left: 20px;
238
+ }
239
+
240
+ #sg-left-column ul {
241
+ padding-top: 10px;
242
+ }
243
+
244
+ .sg-img-class {
245
+ margin-right: 3px;
246
+ vertical-align: middle;
247
+ }
248
+
249
+ #sg-logo {
250
+ display: inline-block;
251
+ width: 140px;
252
+ height: 70px;
253
+ background-size: contain;
254
+ background-position: center;
255
+ background-repeat: no-repeat;
256
+ background-image: url("../img/banerLogo.png");
257
+ }
258
+
259
+ .sg-logo-li {
260
+ height: 70px !important;
261
+ }
262
+
263
+ #sg-facebook {
264
+ background: url('../img/fb.png') no-repeat;
265
+ }
266
+
267
+ #sg-twitter {
268
+ background: url("../img/TW.png") no-repeat;
269
+ }
270
+
271
+ #sg-google-plus {
272
+ background: url("../img/G+.png") no-repeat;
273
+ }
274
+
275
+ #sg-youtube {
276
+ background: url("../img/youtube.png") no-repeat;
277
+ }
278
+
279
+ .sg-star-class {
280
+ cursor:pointer;
281
+ margin-right: 3px;
282
+ }
283
+
284
+ #rateYo {
285
+ display: inline-block;
286
+ }
287
+
288
+ #sg-buy-now {
289
+ background-color: #ffffff;
290
+ border: none;
291
+ color: #0021C8 !important;
292
+ font-size: 18px;
293
+ vertical-align: middle;
294
+ cursor: pointer;
295
+ display: inline-block;
296
+ padding: 6px 15px;
297
+ border-radius: 8px;
298
+ }
299
+
300
+ #sg-buy-now:hover {
301
+ background-color: #0021C8;
302
+ border: 1px solid #ffffff !important;
303
+ color: #ffffff !important;
304
+ }
305
+
306
+ #sg-buy-now-text {
307
+ vertical-align: middle;
308
+ }
309
+
310
+ #sg-banner-clarification {
311
+ font-size: 10px;
312
+ }
313
+
314
+ #sg-rate-us {
315
+ height: 32px;
316
+ position: relative;
317
+ }
318
+
319
+ #sg-banner-test {
320
+ position: absolute;
321
+ top:50%;
322
+ width: 100%;
323
+ margin-top: -15px;
324
+ }
325
+
326
+ .sg-banner-rate-us-in {
327
+ display: inline-block;
328
+ height: 30px;
329
+ color:rgba(255,255,255, 0.8) !important;
330
+ }
331
+
332
+ /* Bounce In */
333
+ .hvr-bounce-in {
334
+ /*display: inline-block;*/
335
+ vertical-align: middle;
336
+ -webkit-transition-duration: 0.04s;
337
+ transition-duration: 0.04s;
338
+ cursor: pointer;
339
+ }
340
+ .hvr-bounce-in:hover, .hvr-bounce-in:focus, .hvr-bounce-in:active {
341
+ -ms-transform: translate(4px, 0);
342
+ -webkit-transform: translate(4px, 0);
343
+ transform: translate(4px, 0);
344
+ }
345
+
346
+ @media (max-width: 835px) {
347
+ #sg-banner {
348
+ font-size: 8px;
349
+ }
350
+
351
+ #sg-banner p {
352
+ font-size: 8px !important;
353
+ }
354
+
355
+ #sg-center-column {
356
+ width: 50%;
357
+ }
358
+
359
+ #sg-left-column {
360
+ width: 23%;
361
+ }
362
+
363
+ #sg-right-column {
364
+ width: 27%;
365
+ }
366
+ }
367
+
368
+ /**************************************/
369
+
370
+ #sg-backup-with-migration {
371
+ margin-left: 12px;
372
+ }
373
+
374
+ #modal-import-1,
375
+ #sg-modal-inport-from,
376
+ #modal-import-3 {
377
+ padding: 0;
378
+ }
379
+
380
+ #sg-checkbox-select-all {
381
+ margin-top: 0;
382
+ }
383
+
384
+ .sg-wrap-container {
385
+ height: 650px;
386
+ width: 100%;
387
+ }
388
+
389
+ #sg-backup-guard-iframe {
390
+ width: 100%;
391
+ height: 100%;
392
+ }
393
+
394
+ #modal-import-2 {
395
+ margin-top: 15px;
396
+ }
397
+
398
+ #modal-import-1 .form-group{
399
+ margin-bottom: 0;
400
+ }
401
+
402
+ #modal-import-1 .table{
403
+ margin-bottom: 0;
404
+ }
405
+
406
+ #modal-import-3 .form-group{
407
+ margin-bottom: 0;
408
+ }
409
+
410
+ #modal-import-3 .table{
411
+ margin-bottom: 0;
412
+ }
413
+
414
+ .file-select-radio {
415
+ padding-left: 15px !important;
416
+ }
417
+
418
+ .sg-wrapper-less {
419
+ /* vietnamese */
420
+ /* latin-ext */
421
+ /* latin */
422
+ /* vietnamese */
423
+ /* latin-ext */
424
+ /* latin */
425
+ /* vietnamese */
426
+ /* latin-ext */
427
+ /* latin */
428
+ /*!
429
+ * bootswatch v3.3.4+1
430
+ * Homepage: http://bootswatch.com
431
+ * Copyright 2012-2015 Thomas Park
432
+ * Licensed under MIT
433
+ * Based on Bootstrap
434
+ */
435
+ /*! normalize.css v3.0.2 | MIT License | git.io/normalize */
436
+ /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
437
+ /* Sidebar Styles */
438
+ /*Files*/
439
+ /*ftp*/
440
+ /*dropbox*/
441
+ /*gdrive*/
442
+ /*rdb*/
443
+ /*rfiles*/
444
+ }
445
+ @font-face {
446
+ font-family: 'Source Sans Pro';
447
+ font-style: normal;
448
+ font-weight: 300;
449
+ src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/toadOcfmlt9b38dHJxOBGCD5K6T8I4oZ1X3Xvlj_UeP3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
450
+ unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
451
+ }
452
+ @font-face {
453
+ font-family: 'Source Sans Pro';
454
+ font-style: normal;
455
+ font-weight: 300;
456
+ src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/toadOcfmlt9b38dHJxOBGDOFnJNygIkrHciC8BWzbCz3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
457
+ unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
458
+ }
459
+ @font-face {
460
+ font-family: 'Source Sans Pro';
461
+ font-style: normal;
462
+ font-weight: 300;
463
+ src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/toadOcfmlt9b38dHJxOBGCP2LEk6lMzYsRqr3dHFImA.woff2') format('woff2');
464
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
465
+ }
466
+ @font-face {
467
+ font-family: 'Source Sans Pro';
468
+ font-style: normal;
469
+ font-weight: 400;
470
+ src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../fonts/ODelI1aHBYDBqgeIAH2zlCxe5Tewm2_XWfbGchcXw4g.woff2') format('woff2');
471
+ unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
472
+ }
473
+ @font-face {
474
+ font-family: 'Source Sans Pro';
475
+ font-style: normal;
476
+ font-weight: 400;
477
+ src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../fonts/ODelI1aHBYDBqgeIAH2zlIa1YDtoarzwSXxTHggEXMw.woff2') format('woff2');
478
+ unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
479
+ }
480
+ @font-face {
481
+ font-family: 'Source Sans Pro';
482
+ font-style: normal;
483
+ font-weight: 400;
484
+ src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../fonts/ODelI1aHBYDBqgeIAH2zlJbPFduIYtoLzwST68uhz_Y.woff2') format('woff2');
485
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
486
+ }
487
+ @font-face {
488
+ font-family: 'Source Sans Pro';
489
+ font-style: normal;
490
+ font-weight: 700;
491
+ src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/toadOcfmlt9b38dHJxOBGMms7UHsIbjUxEJqIwog-i_3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
492
+ unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
493
+ }
494
+ @font-face {
495
+ font-family: 'Source Sans Pro';
496
+ font-style: normal;
497
+ font-weight: 700;
498
+ src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/toadOcfmlt9b38dHJxOBGO4s1Ux4PuImWPk5fSr6HPL3rGVtsTkPsbDajuO5ueQw.woff2') format('woff2');
499
+ unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
500
+ }
501
+ @font-face {
502
+ font-family: 'Source Sans Pro';
503
+ font-style: normal;
504
+ font-weight: 700;
505
+ src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/toadOcfmlt9b38dHJxOBGJkF8H8ye47wsfpWywda8og.woff2') format('woff2');
506
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
507
+ }
508
+ .sg-wrapper-less html {
509
+ font-family: sans-serif;
510
+ -ms-text-size-adjust: 100%;
511
+ -webkit-text-size-adjust: 100%;
512
+ }
513
+ .sg-wrapper-less body {
514
+ margin: 0;
515
+ }
516
+ .sg-wrapper-less article,
517
+ .sg-wrapper-less aside,
518
+ .sg-wrapper-less details,
519
+ .sg-wrapper-less figcaption,
520
+ .sg-wrapper-less figure,
521
+ .sg-wrapper-less footer,
522
+ .sg-wrapper-less header,
523
+ .sg-wrapper-less hgroup,
524
+ .sg-wrapper-less main,
525
+ .sg-wrapper-less menu,
526
+ .sg-wrapper-less nav,
527
+ .sg-wrapper-less section,
528
+ .sg-wrapper-less summary {
529
+ display: block;
530
+ }
531
+ .sg-wrapper-less audio,
532
+ .sg-wrapper-less canvas,
533
+ .sg-wrapper-less progress,
534
+ .sg-wrapper-less video {
535
+ display: inline-block;
536
+ vertical-align: baseline;
537
+ }
538
+ .sg-wrapper-less audio:not([controls]) {
539
+ display: none;
540
+ height: 0;
541
+ }
542
+ .sg-wrapper-less [hidden],
543
+ .sg-wrapper-less template {
544
+ display: none;
545
+ }
546
+ .sg-wrapper-less a {
547
+ background-color: transparent;
548
+ }
549
+ .sg-wrapper-less a:active,
550
+ .sg-wrapper-less a:hover {
551
+ outline: 0;
552
+ }
553
+ .sg-wrapper-less abbr[title] {
554
+ border-bottom: 1px dotted;
555
+ }
556
+ .sg-wrapper-less b,
557
+ .sg-wrapper-less strong {
558
+ font-weight: bold;
559
+ }
560
+ .sg-wrapper-less dfn {
561
+ font-style: italic;
562
+ }
563
+ .sg-wrapper-less h1 {
564
+ font-size: 2em;
565
+ margin: 0.67em 0;
566
+ }
567
+ .sg-wrapper-less mark {
568
+ background: #ff0;
569
+ color: #000;
570
+ }
571
+ .sg-wrapper-less small {
572
+ font-size: 80%;
573
+ }
574
+ .sg-wrapper-less sub,
575
+ .sg-wrapper-less sup {
576
+ font-size: 75%;
577
+ line-height: 0;
578
+ position: relative;
579
+ vertical-align: baseline;
580
+ }
581
+ .sg-wrapper-less sup {
582
+ top: -0.5em;
583
+ }
584
+ .sg-wrapper-less sub {
585
+ bottom: -0.25em;
586
+ }
587
+ .sg-wrapper-less img {
588
+ border: 0;
589
+ }
590
+ .sg-wrapper-less svg:not(:root) {
591
+ overflow: hidden;
592
+ }
593
+ .sg-wrapper-less figure {
594
+ margin: 1em 40px;
595
+ }
596
+ .sg-wrapper-less hr {
597
+ -moz-box-sizing: content-box;
598
+ -webkit-box-sizing: content-box;
599
+ box-sizing: content-box;
600
+ height: 0;
601
+ }
602
+ .sg-wrapper-less pre {
603
+ overflow: auto;
604
+ }
605
+ .sg-wrapper-less code,
606
+ .sg-wrapper-less kbd,
607
+ .sg-wrapper-less pre,
608
+ .sg-wrapper-less samp {
609
+ font-family: monospace, monospace;
610
+ font-size: 1em;
611
+ }
612
+ .sg-wrapper-less button,
613
+ .sg-wrapper-less input,
614
+ .sg-wrapper-less optgroup,
615
+ .sg-wrapper-less select,
616
+ .sg-wrapper-less textarea {
617
+ color: inherit;
618
+ font: inherit;
619
+ margin: 0;
620
+ }
621
+ .sg-wrapper-less button {
622
+ overflow: visible;
623
+ }
624
+ .sg-wrapper-less button,
625
+ .sg-wrapper-less select {
626
+ text-transform: none;
627
+ }
628
+ .sg-wrapper-less button,
629
+ .sg-wrapper-less html input[type="button"],
630
+ .sg-wrapper-less input[type="reset"],
631
+ .sg-wrapper-less input[type="submit"] {
632
+ -webkit-appearance: button;
633
+ cursor: pointer;
634
+ }
635
+ .sg-wrapper-less button[disabled],
636
+ .sg-wrapper-less html input[disabled] {
637
+ cursor: default;
638
+ }
639
+ .sg-wrapper-less button::-moz-focus-inner,
640
+ .sg-wrapper-less input::-moz-focus-inner {
641
+ border: 0;
642
+ padding: 0;
643
+ }
644
+ .sg-wrapper-less input {
645
+ line-height: normal;
646
+ }
647
+ .sg-wrapper-less input[type="checkbox"],
648
+ .sg-wrapper-less input[type="radio"] {
649
+ -webkit-box-sizing: border-box;
650
+ -moz-box-sizing: border-box;
651
+ box-sizing: border-box;
652
+ padding: 0;
653
+ }
654
+ .sg-wrapper-less input[type="number"]::-webkit-inner-spin-button,
655
+ .sg-wrapper-less input[type="number"]::-webkit-outer-spin-button {
656
+ height: auto;
657
+ }
658
+ .sg-wrapper-less input[type="search"] {
659
+ -webkit-appearance: textfield;
660
+ -moz-box-sizing: content-box;
661
+ -webkit-box-sizing: content-box;
662
+ box-sizing: content-box;
663
+ }
664
+ .sg-wrapper-less input[type="search"]::-webkit-search-cancel-button,
665
+ .sg-wrapper-less input[type="search"]::-webkit-search-decoration {
666
+ -webkit-appearance: none;
667
+ }
668
+ .sg-wrapper-less fieldset {
669
+ border: 1px solid #c0c0c0;
670
+ margin: 0 2px;
671
+ padding: 0.35em 0.625em 0.75em;
672
+ }
673
+ .sg-wrapper-less legend {
674
+ border: 0;
675
+ padding: 0;
676
+ }
677
+ .sg-wrapper-less textarea {
678
+ overflow: auto;
679
+ }
680
+ .sg-wrapper-less optgroup {
681
+ font-weight: bold;
682
+ }
683
+ .sg-wrapper-less table {
684
+ border-collapse: collapse;
685
+ border-spacing: 0;
686
+ }
687
+ .sg-wrapper-less td,
688
+ .sg-wrapper-less th {
689
+ padding: 0;
690
+ }
691
+ @media print {
692
+ .sg-wrapper-less *,
693
+ .sg-wrapper-less *:before,
694
+ .sg-wrapper-less *:after {
695
+ background: transparent !important;
696
+ color: #000 !important;
697
+ -webkit-box-shadow: none !important;
698
+ box-shadow: none !important;
699
+ text-shadow: none !important;
700
+ }
701
+ .sg-wrapper-less a,
702
+ .sg-wrapper-less a:visited {
703
+ text-decoration: underline;
704
+ }
705
+ .sg-wrapper-less a[href]:after {
706
+ content: " (" attr(href) ")";
707
+ }
708
+ .sg-wrapper-less abbr[title]:after {
709
+ content: " (" attr(title) ")";
710
+ }
711
+ .sg-wrapper-less a[href^="#"]:after,
712
+ .sg-wrapper-less a[href^="javascript:"]:after {
713
+ content: "";
714
+ }
715
+ .sg-wrapper-less pre,
716
+ .sg-wrapper-less blockquote {
717
+ border: 1px solid #999;
718
+ page-break-inside: avoid;
719
+ }
720
+ .sg-wrapper-less thead {
721
+ display: table-header-group;
722
+ }
723
+ .sg-wrapper-less tr,
724
+ .sg-wrapper-less img {
725
+ page-break-inside: avoid;
726
+ }
727
+ .sg-wrapper-less img {
728
+ max-width: 100% !important;
729
+ }
730
+ .sg-wrapper-less p,
731
+ .sg-wrapper-less h2,
732
+ .sg-wrapper-less h3 {
733
+ orphans: 3;
734
+ widows: 3;
735
+ }
736
+ .sg-wrapper-less h2,
737
+ .sg-wrapper-less h3 {
738
+ page-break-after: avoid;
739
+ }
740
+ .sg-wrapper-less select {
741
+ background: #fff !important;
742
+ }
743
+ .sg-wrapper-less .navbar {
744
+ display: none;
745
+ }
746
+ .sg-wrapper-less .btn > .caret,
747
+ .sg-wrapper-less .dropup > .btn > .caret {
748
+ border-top-color: #000 !important;
749
+ }
750
+ .sg-wrapper-less .label {
751
+ border: 1px solid #000;
752
+ }
753
+ .sg-wrapper-less .table {
754
+ border-collapse: collapse !important;
755
+ }
756
+ .sg-wrapper-less .table td,
757
+ .sg-wrapper-less .table th {
758
+ background-color: #fff !important;
759
+ }
760
+ .sg-wrapper-less .table-bordered th,
761
+ .sg-wrapper-less .table-bordered td {
762
+ border: 1px solid #ddd !important;
763
+ }
764
+ }
765
+ @font-face {
766
+ font-family: 'Glyphicons Halflings';
767
+ src: url('../fonts/glyphicons-halflings-regular.eot');
768
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
769
+ }
770
+ .sg-wrapper-less .glyphicon {
771
+ position: relative;
772
+ top: 1px;
773
+ display: inline-block;
774
+ font-family: 'Glyphicons Halflings';
775
+ font-style: normal;
776
+ font-weight: normal;
777
+ line-height: 1;
778
+ -webkit-font-smoothing: antialiased;
779
+ -moz-osx-font-smoothing: grayscale;
780
+ }
781
+ .sg-wrapper-less .glyphicon-asterisk:before {
782
+ content: "\2a";
783
+ }
784
+ .sg-wrapper-less .glyphicon-plus:before {
785
+ content: "\2b";
786
+ }
787
+ .sg-wrapper-less .glyphicon-euro:before,
788
+ .sg-wrapper-less .glyphicon-eur:before {
789
+ content: "\20ac";
790
+ }
791
+ .sg-wrapper-less .glyphicon-minus:before {
792
+ content: "\2212";
793
+ }
794
+ .sg-wrapper-less .glyphicon-cloud:before {
795
+ content: "\2601";
796
+ }
797
+ .sg-wrapper-less .glyphicon-envelope:before {
798
+ content: "\2709";
799
+ }
800
+ .sg-wrapper-less .glyphicon-pencil:before {
801
+ content: "\270f";
802
+ }
803
+ .sg-wrapper-less .glyphicon-glass:before {
804
+ content: "\e001";
805
+ }
806
+ .sg-wrapper-less .glyphicon-music:before {
807
+ content: "\e002";
808
+ }
809
+ .sg-wrapper-less .glyphicon-search:before {
810
+ content: "\e003";
811
+ }
812
+ .sg-wrapper-less .glyphicon-heart:before {
813
+ content: "\e005";
814
+ }
815
+ .sg-wrapper-less .glyphicon-star:before {
816
+ content: "\e006";
817
+ }
818
+ .sg-wrapper-less .glyphicon-star-empty:before {
819
+ content: "\e007";
820
+ }
821
+ .sg-wrapper-less .glyphicon-user:before {
822
+ content: "\e008";
823
+ }
824
+ .sg-wrapper-less .glyphicon-film:before {
825
+ content: "\e009";
826
+ }
827
+ .sg-wrapper-less .glyphicon-th-large:before {
828
+ content: "\e010";
829
+ }
830
+ .sg-wrapper-less .glyphicon-th:before {
831
+ content: "\e011";
832
+ }
833
+ .sg-wrapper-less .glyphicon-th-list:before {
834
+ content: "\e012";
835
+ }
836
+ .sg-wrapper-less .glyphicon-ok:before {
837
+ content: "\e013";
838
+ }
839
+ .sg-wrapper-less .glyphicon-remove:before {
840
+ content: "\e014";
841
+ }
842
+ .sg-wrapper-less .glyphicon-zoom-in:before {
843
+ content: "\e015";
844
+ }
845
+ .sg-wrapper-less .glyphicon-zoom-out:before {
846
+ content: "\e016";
847
+ }
848
+ .sg-wrapper-less .glyphicon-off:before {
849
+ content: "\e017";
850
+ }
851
+ .sg-wrapper-less .glyphicon-signal:before {
852
+ content: "\e018";
853
+ }
854
+ .sg-wrapper-less .glyphicon-cog:before {
855
+ content: "\e019";
856
+ }
857
+ .sg-wrapper-less .glyphicon-trash:before {
858
+ content: "\e020";
859
+ }
860
+ .sg-wrapper-less .glyphicon-home:before {
861
+ content: "\e021";
862
+ }
863
+ .sg-wrapper-less .glyphicon-file:before {
864
+ content: "\e022";
865
+ }
866
+ .sg-wrapper-less .glyphicon-time:before {
867
+ content: "\e023";
868
+ }
869
+ .sg-wrapper-less .glyphicon-road:before {
870
+ content: "\e024";
871
+ }
872
+ .sg-wrapper-less .glyphicon-download-alt:before {
873
+ content: "\e025";
874
+ }
875
+ .sg-wrapper-less .glyphicon-download:before {
876
+ content: "\e026";
877
+ }
878
+ .sg-wrapper-less .glyphicon-upload:before {
879
+ content: "\e027";
880
+ }
881
+ .sg-wrapper-less .glyphicon-inbox:before {
882
+ content: "\e028";
883
+ }
884
+ .sg-wrapper-less .glyphicon-play-circle:before {
885
+ content: "\e029";
886
+ }
887
+ .sg-wrapper-less .glyphicon-repeat:before {
888
+ content: "\e030";
889
+ }
890
+ .sg-wrapper-less .glyphicon-refresh:before {
891
+ content: "\e031";
892
+ }
893
+ .sg-wrapper-less .glyphicon-list-alt:before {
894
+ content: "\e032";
895
+ }
896
+ .sg-wrapper-less .glyphicon-lock:before {
897
+ content: "\e033";
898
+ }
899
+ .sg-wrapper-less .glyphicon-flag:before {
900
+ content: "\e034";
901
+ }
902
+ .sg-wrapper-less .glyphicon-headphones:before {
903
+ content: "\e035";
904
+ }
905
+ .sg-wrapper-less .glyphicon-volume-off:before {
906
+ content: "\e036";
907
+ }
908
+ .sg-wrapper-less .glyphicon-volume-down:before {
909
+ content: "\e037";
910
+ }
911
+ .sg-wrapper-less .glyphicon-volume-up:before {
912
+ content: "\e038";
913
+ }
914
+ .sg-wrapper-less .glyphicon-qrcode:before {
915
+ content: "\e039";
916
+ }
917
+ .sg-wrapper-less .glyphicon-barcode:before {
918
+ content: "\e040";
919
+ }
920
+ .sg-wrapper-less .glyphicon-tag:before {
921
+ content: "\e041";
922
+ }
923
+ .sg-wrapper-less .glyphicon-tags:before {
924
+ content: "\e042";
925
+ }
926
+ .sg-wrapper-less .glyphicon-book:before {
927
+ content: "\e043";
928
+ }
929
+ .sg-wrapper-less .glyphicon-bookmark:before {
930
+ content: "\e044";
931
+ }
932
+ .sg-wrapper-less .glyphicon-print:before {
933
+ content: "\e045";
934
+ }
935
+ .sg-wrapper-less .glyphicon-camera:before {
936
+ content: "\e046";
937
+ }
938
+ .sg-wrapper-less .glyphicon-font:before {
939
+ content: "\e047";
940
+ }
941
+ .sg-wrapper-less .glyphicon-bold:before {
942
+ content: "\e048";
943
+ }
944
+ .sg-wrapper-less .glyphicon-italic:before {
945
+ content: "\e049";
946
+ }
947
+ .sg-wrapper-less .glyphicon-text-height:before {
948
+ content: "\e050";
949
+ }
950
+ .sg-wrapper-less .glyphicon-text-width:before {
951
+ content: "\e051";
952
+ }
953
+ .sg-wrapper-less .glyphicon-align-left:before {
954
+ content: "\e052";
955
+ }
956
+ .sg-wrapper-less .glyphicon-align-center:before {
957
+ content: "\e053";
958
+ }
959
+ .sg-wrapper-less .glyphicon-align-right:before {
960
+ content: "\e054";
961
+ }
962
+ .sg-wrapper-less .glyphicon-align-justify:before {
963
+ content: "\e055";
964
+ }
965
+ .sg-wrapper-less .glyphicon-list:before {
966
+ content: "\e056";
967
+ }
968
+ .sg-wrapper-less .glyphicon-indent-left:before {
969
+ content: "\e057";
970
+ }
971
+ .sg-wrapper-less .glyphicon-indent-right:before {
972
+ content: "\e058";
973
+ }
974
+ .sg-wrapper-less .glyphicon-facetime-video:before {
975
+ content: "\e059";
976
+ }
977
+ .sg-wrapper-less .glyphicon-picture:before {
978
+ content: "\e060";
979
+ }
980
+ .sg-wrapper-less .glyphicon-map-marker:before {
981
+ content: "\e062";
982
+ }
983
+ .sg-wrapper-less .glyphicon-adjust:before {
984
+ content: "\e063";
985
+ }
986
+ .sg-wrapper-less .glyphicon-tint:before {
987
+ content: "\e064";
988
+ }
989
+ .sg-wrapper-less .glyphicon-edit:before {
990
+ content: "\e065";
991
+ }
992
+ .sg-wrapper-less .glyphicon-share:before {
993
+ content: "\e066";
994
+ }
995
+ .sg-wrapper-less .glyphicon-check:before {
996
+ content: "\e067";
997
+ }
998
+ .sg-wrapper-less .glyphicon-move:before {
999
+ content: "\e068";
1000
+ }
1001
+ .sg-wrapper-less .glyphicon-step-backward:before {
1002
+ content: "\e069";
1003
+ }
1004
+ .sg-wrapper-less .glyphicon-fast-backward:before {
1005
+ content: "\e070";
1006
+ }
1007
+ .sg-wrapper-less .glyphicon-backward:before {
1008
+ content: "\e071";
1009
+ }
1010
+ .sg-wrapper-less .glyphicon-play:before {
1011
+ content: "\e072";
1012
+ }
1013
+ .sg-wrapper-less .glyphicon-pause:before {
1014
+ content: "\e073";
1015
+ }
1016
+ .sg-wrapper-less .glyphicon-stop:before {
1017
+ content: "\e074";
1018
+ }
1019
+ .sg-wrapper-less .glyphicon-forward:before {
1020
+ content: "\e075";
1021
+ }
1022
+ .sg-wrapper-less .glyphicon-fast-forward:before {
1023
+ content: "\e076";
1024
+ }
1025
+ .sg-wrapper-less .glyphicon-step-forward:before {
1026
+ content: "\e077";
1027
+ }
1028
+ .sg-wrapper-less .glyphicon-eject:before {
1029
+ content: "\e078";
1030
+ }
1031
+ .sg-wrapper-less .glyphicon-chevron-left:before {
1032
+ content: "\e079";
1033
+ }
1034
+ .sg-wrapper-less .glyphicon-chevron-right:before {
1035
+ content: "\e080";
1036
+ }
1037
+ .sg-wrapper-less .glyphicon-plus-sign:before {
1038
+ content: "\e081";
1039
+ }
1040
+ .sg-wrapper-less .glyphicon-minus-sign:before {
1041
+ content: "\e082";
1042
+ }
1043
+ .sg-wrapper-less .glyphicon-remove-sign:before {
1044
+ content: "\e083";
1045
+ }
1046
+ .sg-wrapper-less .glyphicon-ok-sign:before {
1047
+ content: "\e084";
1048
+ }
1049
+ .sg-wrapper-less .glyphicon-question-sign:before {
1050
+ content: "\e085";
1051
+ }
1052
+ .sg-wrapper-less .glyphicon-info-sign:before {
1053
+ content: "\e086";
1054
+ }
1055
+ .sg-wrapper-less .glyphicon-screenshot:before {
1056
+ content: "\e087";
1057
+ }
1058
+ .sg-wrapper-less .glyphicon-remove-circle:before {
1059
+ content: "\e088";
1060
+ }
1061
+ .sg-wrapper-less .glyphicon-ok-circle:before {
1062
+ content: "\e089";
1063
+ }
1064
+ .sg-wrapper-less .glyphicon-ban-circle:before {
1065
+ content: "\e090";
1066
+ }
1067
+ .sg-wrapper-less .glyphicon-arrow-left:before {
1068
+ content: "\e091";
1069
+ }
1070
+ .sg-wrapper-less .glyphicon-arrow-right:before {
1071
+ content: "\e092";
1072
+ }
1073
+ .sg-wrapper-less .glyphicon-arrow-up:before {
1074
+ content: "\e093";
1075
+ }
1076
+ .sg-wrapper-less .glyphicon-arrow-down:before {
1077
+ content: "\e094";
1078
+ }
1079
+ .sg-wrapper-less .glyphicon-share-alt:before {
1080
+ content: "\e095";
1081
+ }
1082
+ .sg-wrapper-less .glyphicon-resize-full:before {
1083
+ content: "\e096";
1084
+ }
1085
+ .sg-wrapper-less .glyphicon-resize-small:before {
1086
+ content: "\e097";
1087
+ }
1088
+ .sg-wrapper-less .glyphicon-exclamation-sign:before {
1089
+ content: "\e101";
1090
+ }
1091
+ .sg-wrapper-less .glyphicon-gift:before {
1092
+ content: "\e102";
1093
+ }
1094
+ .sg-wrapper-less .glyphicon-leaf:before {
1095
+ content: "\e103";
1096
+ }
1097
+ .sg-wrapper-less .glyphicon-fire:before {
1098
+ content: "\e104";
1099
+ }
1100
+ .sg-wrapper-less .glyphicon-eye-open:before {
1101
+ content: "\e105";
1102
+ }
1103
+ .sg-wrapper-less .glyphicon-eye-close:before {
1104
+ content: "\e106";
1105
+ }
1106
+ .sg-wrapper-less .glyphicon-warning-sign:before {
1107
+ content: "\e107";
1108
+ }
1109
+ .sg-wrapper-less .glyphicon-plane:before {
1110
+ content: "\e108";
1111
+ }
1112
+ .sg-wrapper-less .glyphicon-calendar:before {
1113
+ content: "\e109";
1114
+ }
1115
+ .sg-wrapper-less .glyphicon-random:before {
1116
+ content: "\e110";
1117
+ }
1118
+ .sg-wrapper-less .glyphicon-comment:before {
1119
+ content: "\e111";
1120
+ }
1121
+ .sg-wrapper-less .glyphicon-magnet:before {
1122
+ content: "\e112";
1123
+ }
1124
+ .sg-wrapper-less .glyphicon-chevron-up:before {
1125
+ content: "\e113";
1126
+ }
1127
+ .sg-wrapper-less .glyphicon-chevron-down:before {
1128
+ content: "\e114";
1129
+ }
1130
+ .sg-wrapper-less .glyphicon-retweet:before {
1131
+ content: "\e115";
1132
+ }
1133
+ .sg-wrapper-less .glyphicon-shopping-cart:before {
1134
+ content: "\e116";
1135
+ }
1136
+ .sg-wrapper-less .glyphicon-folder-close:before {
1137
+ content: "\e117";
1138
+ }
1139
+ .sg-wrapper-less .glyphicon-folder-open:before {
1140
+ content: "\e118";
1141
+ }
1142
+ .sg-wrapper-less .glyphicon-resize-vertical:before {
1143
+ content: "\e119";
1144
+ }
1145
+ .sg-wrapper-less .glyphicon-resize-horizontal:before {
1146
+ content: "\e120";
1147
+ }
1148
+ .sg-wrapper-less .glyphicon-hdd:before {
1149
+ content: "\e121";
1150
+ }
1151
+ .sg-wrapper-less .glyphicon-bullhorn:before {
1152
+ content: "\e122";
1153
+ }
1154
+ .sg-wrapper-less .glyphicon-bell:before {
1155
+ content: "\e123";
1156
+ }
1157
+ .sg-wrapper-less .glyphicon-certificate:before {
1158
+ content: "\e124";
1159
+ }
1160
+ .sg-wrapper-less .glyphicon-thumbs-up:before {
1161
+ content: "\e125";
1162
+ }
1163
+ .sg-wrapper-less .glyphicon-thumbs-down:before {
1164
+ content: "\e126";
1165
+ }
1166
+ .sg-wrapper-less .glyphicon-hand-right:before {
1167
+ content: "\e127";
1168
+ }
1169
+ .sg-wrapper-less .glyphicon-hand-left:before {
1170
+ content: "\e128";
1171
+ }
1172
+ .sg-wrapper-less .glyphicon-hand-up:before {
1173
+ content: "\e129";
1174
+ }
1175
+ .sg-wrapper-less .glyphicon-hand-down:before {
1176
+ content: "\e130";
1177
+ }
1178
+ .sg-wrapper-less .glyphicon-circle-arrow-right:before {
1179
+ content: "\e131";
1180
+ }
1181
+ .sg-wrapper-less .glyphicon-circle-arrow-left:before {
1182
+ content: "\e132";
1183
+ }
1184
+ .sg-wrapper-less .glyphicon-circle-arrow-up:before {
1185
+ content: "\e133";
1186
+ }
1187
+ .sg-wrapper-less .glyphicon-circle-arrow-down:before {
1188
+ content: "\e134";
1189
+ }
1190
+ .sg-wrapper-less .glyphicon-globe:before {
1191
+ content: "\e135";
1192
+ }
1193
+ .sg-wrapper-less .glyphicon-wrench:before {
1194
+ content: "\e136";
1195
+ }
1196
+ .sg-wrapper-less .glyphicon-tasks:before {
1197
+ content: "\e137";
1198
+ }
1199
+ .sg-wrapper-less .glyphicon-filter:before {
1200
+ content: "\e138";
1201
+ }
1202
+ .sg-wrapper-less .glyphicon-briefcase:before {
1203
+ content: "\e139";
1204
+ }
1205
+ .sg-wrapper-less .glyphicon-fullscreen:before {
1206
+ content: "\e140";
1207
+ }
1208
+ .sg-wrapper-less .glyphicon-dashboard:before {
1209
+ content: "\e141";
1210
+ }
1211
+ .sg-wrapper-less .glyphicon-paperclip:before {
1212
+ content: "\e142";
1213
+ }
1214
+ .sg-wrapper-less .glyphicon-heart-empty:before {
1215
+ content: "\e143";
1216
+ }
1217
+ .sg-wrapper-less .glyphicon-link:before {
1218
+ content: "\e144";
1219
+ }
1220
+ .sg-wrapper-less .glyphicon-phone:before {
1221
+ content: "\e145";
1222
+ }
1223
+ .sg-wrapper-less .glyphicon-pushpin:before {
1224
+ content: "\e146";
1225
+ }
1226
+ .sg-wrapper-less .glyphicon-usd:before {
1227
+ content: "\e148";
1228
+ }
1229
+ .sg-wrapper-less .glyphicon-gbp:before {
1230
+ content: "\e149";
1231
+ }
1232
+ .sg-wrapper-less .glyphicon-sort:before {
1233
+ content: "\e150";
1234
+ }
1235
+ .sg-wrapper-less .glyphicon-sort-by-alphabet:before {
1236
+ content: "\e151";
1237
+ }
1238
+ .sg-wrapper-less .glyphicon-sort-by-alphabet-alt:before {
1239
+ content: "\e152";
1240
+ }
1241
+ .sg-wrapper-less .glyphicon-sort-by-order:before {
1242
+ content: "\e153";
1243
+ }
1244
+ .sg-wrapper-less .glyphicon-sort-by-order-alt:before {
1245
+ content: "\e154";
1246
+ }
1247
+ .sg-wrapper-less .glyphicon-sort-by-attributes:before {
1248
+ content: "\e155";
1249
+ }
1250
+ .sg-wrapper-less .glyphicon-sort-by-attributes-alt:before {
1251
+ content: "\e156";
1252
+ }
1253
+ .sg-wrapper-less .glyphicon-unchecked:before {
1254
+ content: "\e157";
1255
+ }
1256
+ .sg-wrapper-less .glyphicon-expand:before {
1257
+ content: "\e158";
1258
+ }
1259
+ .sg-wrapper-less .glyphicon-collapse-down:before {
1260
+ content: "\e159";
1261
+ }
1262
+ .sg-wrapper-less .glyphicon-collapse-up:before {
1263
+ content: "\e160";
1264
+ }
1265
+ .sg-wrapper-less .glyphicon-log-in:before {
1266
+ content: "\e161";
1267
+ }
1268
+ .sg-wrapper-less .glyphicon-flash:before {
1269
+ content: "\e162";
1270
+ }
1271
+ .sg-wrapper-less .glyphicon-log-out:before {
1272
+ content: "\e163";
1273
+ }
1274
+ .sg-wrapper-less .glyphicon-new-window:before {
1275
+ content: "\e164";
1276
+ }
1277
+ .sg-wrapper-less .glyphicon-record:before {
1278
+ content: "\e165";
1279
+ }
1280
+ .sg-wrapper-less .glyphicon-save:before {
1281
+ content: "\e166";
1282
+ }
1283
+ .sg-wrapper-less .glyphicon-open:before {
1284
+ content: "\e167";
1285
+ }
1286
+ .sg-wrapper-less .glyphicon-saved:before {
1287
+ content: "\e168";
1288
+ }
1289
+ .sg-wrapper-less .glyphicon-import:before {
1290
+ content: "\e169";
1291
+ }
1292
+ .sg-wrapper-less .glyphicon-export:before {
1293
+ content: "\e170";
1294
+ }
1295
+ .sg-wrapper-less .glyphicon-send:before {
1296
+ content: "\e171";
1297
+ }
1298
+ .sg-wrapper-less .glyphicon-floppy-disk:before {
1299
+ content: "\e172";
1300
+ }
1301
+ .sg-wrapper-less .glyphicon-floppy-saved:before {
1302
+ content: "\e173";
1303
+ }
1304
+ .sg-wrapper-less .glyphicon-floppy-remove:before {
1305
+ content: "\e174";
1306
+ }
1307
+ .sg-wrapper-less .glyphicon-floppy-save:before {
1308
+ content: "\e175";
1309
+ }
1310
+ .sg-wrapper-less .glyphicon-floppy-open:before {
1311
+ content: "\e176";
1312
+ }
1313
+ .sg-wrapper-less .glyphicon-credit-card:before {
1314
+ content: "\e177";
1315
+ }
1316
+ .sg-wrapper-less .glyphicon-transfer:before {
1317
+ content: "\e178";
1318
+ }
1319
+ .sg-wrapper-less .glyphicon-cutlery:before {
1320
+ content: "\e179";
1321
+ }
1322
+ .sg-wrapper-less .glyphicon-header:before {
1323
+ content: "\e180";
1324
+ }
1325
+ .sg-wrapper-less .glyphicon-compressed:before {
1326
+ content: "\e181";
1327
+ }
1328
+ .sg-wrapper-less .glyphicon-earphone:before {
1329
+ content: "\e182";
1330
+ }
1331
+ .sg-wrapper-less .glyphicon-phone-alt:before {
1332
+ content: "\e183";
1333
+ }
1334
+ .sg-wrapper-less .glyphicon-tower:before {
1335
+ content: "\e184";
1336
+ }
1337
+ .sg-wrapper-less .glyphicon-stats:before {
1338
+ content: "\e185";
1339
+ }
1340
+ .sg-wrapper-less .glyphicon-sd-video:before {
1341
+ content: "\e186";
1342
+ }
1343
+ .sg-wrapper-less .glyphicon-hd-video:before {
1344
+ content: "\e187";
1345
+ }
1346
+ .sg-wrapper-less .glyphicon-subtitles:before {
1347
+ content: "\e188";
1348
+ }
1349
+ .sg-wrapper-less .glyphicon-sound-stereo:before {
1350
+ content: "\e189";
1351
+ }
1352
+ .sg-wrapper-less .glyphicon-sound-dolby:before {
1353
+ content: "\e190";
1354
+ }
1355
+ .sg-wrapper-less .glyphicon-sound-5-1:before {
1356
+ content: "\e191";
1357
+ }
1358
+ .sg-wrapper-less .glyphicon-sound-6-1:before {
1359
+ content: "\e192";
1360
+ }
1361
+ .sg-wrapper-less .glyphicon-sound-7-1:before {
1362
+ content: "\e193";
1363
+ }
1364
+ .sg-wrapper-less .glyphicon-copyright-mark:before {
1365
+ content: "\e194";
1366
+ }
1367
+ .sg-wrapper-less .glyphicon-registration-mark:before {
1368
+ content: "\e195";
1369
+ }
1370
+ .sg-wrapper-less .glyphicon-cloud-download:before {
1371
+ content: "\e197";
1372
+ }
1373
+ .sg-wrapper-less .glyphicon-cloud-upload:before {
1374
+ content: "\e198";
1375
+ }
1376
+ .sg-wrapper-less .glyphicon-tree-conifer:before {
1377
+ content: "\e199";
1378
+ }
1379
+ .sg-wrapper-less .glyphicon-tree-deciduous:before {
1380
+ content: "\e200";
1381
+ }
1382
+ .sg-wrapper-less .glyphicon-cd:before {
1383
+ content: "\e201";
1384
+ }
1385
+ .sg-wrapper-less .glyphicon-save-file:before {
1386
+ content: "\e202";
1387
+ }
1388
+ .sg-wrapper-less .glyphicon-open-file:before {
1389
+ content: "\e203";
1390
+ }
1391
+ .sg-wrapper-less .glyphicon-level-up:before {
1392
+ content: "\e204";
1393
+ }
1394
+ .sg-wrapper-less .glyphicon-copy:before {
1395
+ content: "\e205";
1396
+ }
1397
+ .sg-wrapper-less .glyphicon-paste:before {
1398
+ content: "\e206";
1399
+ }
1400
+ .sg-wrapper-less .glyphicon-alert:before {
1401
+ content: "\e209";
1402
+ }
1403
+ .sg-wrapper-less .glyphicon-equalizer:before {
1404
+ content: "\e210";
1405
+ }
1406
+ .sg-wrapper-less .glyphicon-king:before {
1407
+ content: "\e211";
1408
+ }
1409
+ .sg-wrapper-less .glyphicon-queen:before {
1410
+ content: "\e212";
1411
+ }
1412
+ .sg-wrapper-less .glyphicon-pawn:before {
1413
+ content: "\e213";
1414
+ }
1415
+ .sg-wrapper-less .glyphicon-bishop:before {
1416
+ content: "\e214";
1417
+ }
1418
+ .sg-wrapper-less .glyphicon-knight:before {
1419
+ content: "\e215";
1420
+ }
1421
+ .sg-wrapper-less .glyphicon-baby-formula:before {
1422
+ content: "\e216";
1423
+ }
1424
+ .sg-wrapper-less .glyphicon-tent:before {
1425
+ content: "\26fa";
1426
+ }
1427
+ .sg-wrapper-less .glyphicon-blackboard:before {
1428
+ content: "\e218";
1429
+ }
1430
+ .sg-wrapper-less .glyphicon-bed:before {
1431
+ content: "\e219";
1432
+ }
1433
+ .sg-wrapper-less .glyphicon-apple:before {
1434
+ content: "\f8ff";
1435
+ }
1436
+ .sg-wrapper-less .glyphicon-erase:before {
1437
+ content: "\e221";
1438
+ }
1439
+ .sg-wrapper-less .glyphicon-hourglass:before {
1440
+ content: "\231b";
1441
+ }
1442
+ .sg-wrapper-less .glyphicon-lamp:before {
1443
+ content: "\e223";
1444
+ }
1445
+ .sg-wrapper-less .glyphicon-duplicate:before {
1446
+ content: "\e224";
1447
+ }
1448
+ .sg-wrapper-less .glyphicon-piggy-bank:before {
1449
+ content: "\e225";
1450
+ }
1451
+ .sg-wrapper-less .glyphicon-scissors:before {
1452
+ content: "\e226";
1453
+ }
1454
+ .sg-wrapper-less .glyphicon-bitcoin:before {
1455
+ content: "\e227";
1456
+ }
1457
+ .sg-wrapper-less .glyphicon-btc:before {
1458
+ content: "\e227";
1459
+ }
1460
+ .sg-wrapper-less .glyphicon-xbt:before {
1461
+ content: "\e227";
1462
+ }
1463
+ .sg-wrapper-less .glyphicon-yen:before {
1464
+ content: "\00a5";
1465
+ }
1466
+ .sg-wrapper-less .glyphicon-jpy:before {
1467
+ content: "\00a5";
1468
+ }
1469
+ .sg-wrapper-less .glyphicon-ruble:before {
1470
+ content: "\20bd";
1471
+ }
1472
+ .sg-wrapper-less .glyphicon-rub:before {
1473
+ content: "\20bd";
1474
+ }
1475
+ .sg-wrapper-less .glyphicon-scale:before {
1476
+ content: "\e230";
1477
+ }
1478
+ .sg-wrapper-less .glyphicon-ice-lolly:before {
1479
+ content: "\e231";
1480
+ }
1481
+ .sg-wrapper-less .glyphicon-ice-lolly-tasted:before {
1482
+ content: "\e232";
1483
+ }
1484
+ .sg-wrapper-less .glyphicon-education:before {
1485
+ content: "\e233";
1486
+ }
1487
+ .sg-wrapper-less .glyphicon-option-horizontal:before {
1488
+ content: "\e234";
1489
+ }
1490
+ .sg-wrapper-less .glyphicon-option-vertical:before {
1491
+ content: "\e235";
1492
+ }
1493
+ .sg-wrapper-less .glyphicon-menu-hamburger:before {
1494
+ content: "\e236";
1495
+ }
1496
+ .sg-wrapper-less .glyphicon-modal-window:before {
1497
+ content: "\e237";
1498
+ }
1499
+ .sg-wrapper-less .glyphicon-oil:before {
1500
+ content: "\e238";
1501
+ }
1502
+ .sg-wrapper-less .glyphicon-grain:before {
1503
+ content: "\e239";
1504
+ }
1505
+ .sg-wrapper-less .glyphicon-sunglasses:before {
1506
+ content: "\e240";
1507
+ }
1508
+ .sg-wrapper-less .glyphicon-text-size:before {
1509
+ content: "\e241";
1510
+ }
1511
+ .sg-wrapper-less .glyphicon-text-color:before {
1512
+ content: "\e242";
1513
+ }
1514
+ .sg-wrapper-less .glyphicon-text-background:before {
1515
+ content: "\e243";
1516
+ }
1517
+ .sg-wrapper-less .glyphicon-object-align-top:before {
1518
+ content: "\e244";
1519
+ }
1520
+ .sg-wrapper-less .glyphicon-object-align-bottom:before {
1521
+ content: "\e245";
1522
+ }
1523
+ .sg-wrapper-less .glyphicon-object-align-horizontal:before {
1524
+ content: "\e246";
1525
+ }
1526
+ .sg-wrapper-less .glyphicon-object-align-left:before {
1527
+ content: "\e247";
1528
+ }
1529
+ .sg-wrapper-less .glyphicon-object-align-vertical:before {
1530
+ content: "\e248";
1531
+ }
1532
+ .sg-wrapper-less .glyphicon-object-align-right:before {
1533
+ content: "\e249";
1534
+ }
1535
+ .sg-wrapper-less .glyphicon-triangle-right:before {
1536
+ content: "\e250";
1537
+ }
1538
+ .sg-wrapper-less .glyphicon-triangle-left:before {
1539
+ content: "\e251";
1540
+ }
1541
+ .sg-wrapper-less .glyphicon-triangle-bottom:before {
1542
+ content: "\e252";
1543
+ }
1544
+ .sg-wrapper-less .glyphicon-triangle-top:before {
1545
+ content: "\e253";
1546
+ }
1547
+ .sg-wrapper-less .glyphicon-console:before {
1548
+ content: "\e254";
1549
+ }
1550
+ .sg-wrapper-less .glyphicon-superscript:before {
1551
+ content: "\e255";
1552
+ }
1553
+ .sg-wrapper-less .glyphicon-subscript:before {
1554
+ content: "\e256";
1555
+ }
1556
+ .sg-wrapper-less .glyphicon-menu-left:before {
1557
+ content: "\e257";
1558
+ }
1559
+ .sg-wrapper-less .glyphicon-menu-right:before {
1560
+ content: "\e258";
1561
+ }
1562
+ .sg-wrapper-less .glyphicon-menu-down:before {
1563
+ content: "\e259";
1564
+ }
1565
+ .sg-wrapper-less .glyphicon-menu-up:before {
1566
+ content: "\e260";
1567
+ }
1568
+ .sg-wrapper-less * {
1569
+ -webkit-box-sizing: border-box;
1570
+ -moz-box-sizing: border-box;
1571
+ box-sizing: border-box;
1572
+ }
1573
+ .sg-wrapper-less *:before,
1574
+ .sg-wrapper-less *:after {
1575
+ -webkit-box-sizing: border-box;
1576
+ -moz-box-sizing: border-box;
1577
+ box-sizing: border-box;
1578
+ }
1579
+ .sg-wrapper-less html {
1580
+ font-size: 10px;
1581
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
1582
+ }
1583
+ .sg-wrapper-less #sg-wrapper {
1584
+ font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
1585
+ font-size: 15px;
1586
+ line-height: 1.42857143;
1587
+ color: #333333;
1588
+ background-color: #ffffff;
1589
+ }
1590
+ .sg-wrapper-less input,
1591
+ .sg-wrapper-less button,
1592
+ .sg-wrapper-less select,
1593
+ .sg-wrapper-less textarea {
1594
+ font-family: inherit;
1595
+ font-size: inherit;
1596
+ line-height: inherit;
1597
+ }
1598
+ .sg-wrapper-less a {
1599
+ color: #0021C8;
1600
+ text-decoration: none;
1601
+ }
1602
+ .sg-wrapper-less a:hover,
1603
+ .sg-wrapper-less a:focus {
1604
+ color: #165ba8;
1605
+ text-decoration: none;
1606
+ }
1607
+ .sg-wrapper-less a:focus {
1608
+ outline: thin dotted;
1609
+ outline: 5px auto -webkit-focus-ring-color;
1610
+ outline-offset: -2px;
1611
+ }
1612
+ .sg-wrapper-less figure {
1613
+ margin: 0;
1614
+ }
1615
+ .sg-wrapper-less img {
1616
+ vertical-align: middle;
1617
+ }
1618
+ .sg-wrapper-less .img-responsive,
1619
+ .sg-wrapper-less .thumbnail > img,
1620
+ .sg-wrapper-less .thumbnail a > img,
1621
+ .sg-wrapper-less .carousel-inner > .item > img,
1622
+ .sg-wrapper-less .carousel-inner > .item > a > img {
1623
+ display: block;
1624
+ max-width: 100%;
1625
+ height: auto;
1626
+ }
1627
+ .sg-wrapper-less .img-rounded {
1628
+ border-radius: 0;
1629
+ }
1630
+ .sg-wrapper-less .img-thumbnail {
1631
+ padding: 4px;
1632
+ line-height: 1.42857143;
1633
+ background-color: #ffffff;
1634
+ border: 1px solid #dddddd;
1635
+ border-radius: 0;
1636
+ -webkit-transition: all 0.2s ease-in-out;
1637
+ -o-transition: all 0.2s ease-in-out;
1638
+ transition: all 0.2s ease-in-out;
1639
+ display: inline-block;
1640
+ max-width: 100%;
1641
+ height: auto;
1642
+ }
1643
+ .sg-wrapper-less .img-circle {
1644
+ border-radius: 50%;
1645
+ }
1646
+ .sg-wrapper-less hr {
1647
+ margin-top: 21px;
1648
+ margin-bottom: 21px;
1649
+ border: 0;
1650
+ border-top: 1px solid #e6e6e6;
1651
+ }
1652
+ .sg-wrapper-less .sr-only {
1653
+ position: absolute;
1654
+ width: 1px;
1655
+ height: 1px;
1656
+ margin: -1px;
1657
+ padding: 0;
1658
+ overflow: hidden;
1659
+ clip: rect(0, 0, 0, 0);
1660
+ border: 0;
1661
+ }
1662
+ .sg-wrapper-less .sr-only-focusable:active,
1663
+ .sg-wrapper-less .sr-only-focusable:focus {
1664
+ position: static;
1665
+ width: auto;
1666
+ height: auto;
1667
+ margin: 0;
1668
+ overflow: visible;
1669
+ clip: auto;
1670
+ }
1671
+ .sg-wrapper-less [role="button"] {
1672
+ cursor: pointer;
1673
+ }
1674
+ .sg-wrapper-less h1,
1675
+ .sg-wrapper-less h2,
1676
+ .sg-wrapper-less h3,
1677
+ .sg-wrapper-less h4,
1678
+ .sg-wrapper-less h5,
1679
+ .sg-wrapper-less h6,
1680
+ .sg-wrapper-less .h1,
1681
+ .sg-wrapper-less .h2,
1682
+ .sg-wrapper-less .h3,
1683
+ .sg-wrapper-less .h4,
1684
+ .sg-wrapper-less .h5,
1685
+ .sg-wrapper-less .h6 {
1686
+ font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
1687
+ font-weight: 300;
1688
+ line-height: 1.1;
1689
+ color: inherit;
1690
+ }
1691
+ .sg-wrapper-less h1 small,
1692
+ .sg-wrapper-less h2 small,
1693
+ .sg-wrapper-less h3 small,
1694
+ .sg-wrapper-less h4 small,
1695
+ .sg-wrapper-less h5 small,
1696
+ .sg-wrapper-less h6 small,
1697
+ .sg-wrapper-less .h1 small,
1698
+ .sg-wrapper-less .h2 small,
1699
+ .sg-wrapper-less .h3 small,
1700
+ .sg-wrapper-less .h4 small,
1701
+ .sg-wrapper-less .h5 small,
1702
+ .sg-wrapper-less .h6 small,
1703
+ .sg-wrapper-less h1 .small,
1704
+ .sg-wrapper-less h2 .small,
1705
+ .sg-wrapper-less h3 .small,
1706
+ .sg-wrapper-less h4 .small,
1707
+ .sg-wrapper-less h5 .small,
1708
+ .sg-wrapper-less h6 .small,
1709
+ .sg-wrapper-less .h1 .small,
1710
+ .sg-wrapper-less .h2 .small,
1711
+ .sg-wrapper-less .h3 .small,
1712
+ .sg-wrapper-less .h4 .small,
1713
+ .sg-wrapper-less .h5 .small,
1714
+ .sg-wrapper-less .h6 .small {
1715
+ font-weight: normal;
1716
+ line-height: 1;
1717
+ color: #999999;
1718
+ }
1719
+ .sg-wrapper-less h1,
1720
+ .sg-wrapper-less .h1,
1721
+ .sg-wrapper-less h2,
1722
+ .sg-wrapper-less .h2,
1723
+ .sg-wrapper-less h3,
1724
+ .sg-wrapper-less .h3 {
1725
+ margin-top: 21px;
1726
+ margin-bottom: 10.5px;
1727
+ }
1728
+ .sg-wrapper-less h1 small,
1729
+ .sg-wrapper-less .h1 small,
1730
+ .sg-wrapper-less h2 small,
1731
+ .sg-wrapper-less .h2 small,
1732
+ .sg-wrapper-less h3 small,
1733
+ .sg-wrapper-less .h3 small,
1734
+ .sg-wrapper-less h1 .small,
1735
+ .sg-wrapper-less .h1 .small,
1736
+ .sg-wrapper-less h2 .small,
1737
+ .sg-wrapper-less .h2 .small,
1738
+ .sg-wrapper-less h3 .small,
1739
+ .sg-wrapper-less .h3 .small {
1740
+ font-size: 65%;
1741
+ }
1742
+ .sg-wrapper-less h4,
1743
+ .sg-wrapper-less .h4,
1744
+ .sg-wrapper-less h5,
1745
+ .sg-wrapper-less .h5,
1746
+ .sg-wrapper-less h6,
1747
+ .sg-wrapper-less .h6 {
1748
+ margin-top: 10.5px;
1749
+ margin-bottom: 10.5px;
1750
+ }
1751
+ .sg-wrapper-less h4 small,
1752
+ .sg-wrapper-less .h4 small,
1753
+ .sg-wrapper-less h5 small,
1754
+ .sg-wrapper-less .h5 small,
1755
+ .sg-wrapper-less h6 small,
1756
+ .sg-wrapper-less .h6 small,
1757
+ .sg-wrapper-less h4 .small,
1758
+ .sg-wrapper-less .h4 .small,
1759
+ .sg-wrapper-less h5 .small,
1760
+ .sg-wrapper-less .h5 .small,
1761
+ .sg-wrapper-less h6 .small,
1762
+ .sg-wrapper-less .h6 .small {
1763
+ font-size: 75%;
1764
+ }
1765
+ .sg-wrapper-less h1,
1766
+ .sg-wrapper-less .h1 {
1767
+ font-size: 39px;
1768
+ }
1769
+ .sg-wrapper-less h2,
1770
+ .sg-wrapper-less .h2 {
1771
+ font-size: 32px;
1772
+ }
1773
+ .sg-wrapper-less h3,
1774
+ .sg-wrapper-less .h3 {
1775
+ font-size: 26px;
1776
+ }
1777
+ .sg-wrapper-less h4,
1778
+ .sg-wrapper-less .h4 {
1779
+ font-size: 19px;
1780
+ }
1781
+ .sg-wrapper-less h5,
1782
+ .sg-wrapper-less .h5 {
1783
+ font-size: 15px;
1784
+ }
1785
+ .sg-wrapper-less h6,
1786
+ .sg-wrapper-less .h6 {
1787
+ font-size: 13px;
1788
+ }
1789
+ .sg-wrapper-less p {
1790
+ margin: 0 0 9.5px;
1791
+ }
1792
+ .sg-wrapper-less .lead {
1793
+ margin-bottom: 21px;
1794
+ font-size: 17px;
1795
+ font-weight: 300;
1796
+ line-height: 1.4;
1797
+ }
1798
+ @media (min-width: 768px) {
1799
+ .sg-wrapper-less .lead {
1800
+ font-size: 22.5px;
1801
+ }
1802
+ }
1803
+ .sg-wrapper-less small,
1804
+ .sg-wrapper-less .small {
1805
+ font-size: 86%;
1806
+ }
1807
+ .sg-wrapper-less mark,
1808
+ .sg-wrapper-less .mark {
1809
+ background-color: #ff7518;
1810
+ padding: .2em;
1811
+ }
1812
+ .sg-wrapper-less .text-left {
1813
+ text-align: left;
1814
+ }
1815
+ .sg-wrapper-less .text-right {
1816
+ text-align: right;
1817
+ }
1818
+ .sg-wrapper-less .text-center {
1819
+ text-align: center;
1820
+ }
1821
+ .sg-wrapper-less .text-justify {
1822
+ text-align: justify;
1823
+ }
1824
+ .sg-wrapper-less .text-nowrap {
1825
+ white-space: nowrap;
1826
+ }
1827
+ .sg-wrapper-less .text-lowercase {
1828
+ text-transform: lowercase;
1829
+ }
1830
+ .sg-wrapper-less .text-uppercase {
1831
+ text-transform: uppercase;
1832
+ }
1833
+ .sg-wrapper-less .text-capitalize {
1834
+ text-transform: capitalize;
1835
+ }
1836
+ .sg-wrapper-less .text-muted {
1837
+ color: #999999;
1838
+ }
1839
+ .sg-wrapper-less .text-primary {
1840
+ color: #2780e3;
1841
+ }
1842
+ .sg-wrapper-less a.text-primary:hover {
1843
+ color: #1967be;
1844
+ }
1845
+ .sg-wrapper-less .text-success {
1846
+ color: #ffffff;
1847
+ }
1848
+ .sg-wrapper-less a.text-success:hover {
1849
+ color: #e6e6e6;
1850
+ }
1851
+ .sg-wrapper-less .text-info {
1852
+ color: #ffffff;
1853
+ }
1854
+ .sg-wrapper-less a.text-info:hover {
1855
+ color: #e6e6e6;
1856
+ }
1857
+ .sg-wrapper-less .text-warning {
1858
+ color: #ffffff;
1859
+ }
1860
+ .sg-wrapper-less a.text-warning:hover {
1861
+ color: #e6e6e6;
1862
+ }
1863
+ .sg-wrapper-less .text-danger {
1864
+ color: #ffffff;
1865
+ }
1866
+ .sg-wrapper-less a.text-danger:hover {
1867
+ color: #e6e6e6;
1868
+ }
1869
+ .sg-wrapper-less .bg-primary {
1870
+ color: #fff;
1871
+ background-color: #2780e3;
1872
+ }
1873
+ .sg-wrapper-less a.bg-primary:hover {
1874
+ background-color: #1967be;
1875
+ }
1876
+ .sg-wrapper-less .bg-success {
1877
+ background-color: #3fb618;
1878
+ }
1879
+ .sg-wrapper-less a.bg-success:hover {
1880
+ background-color: #2f8912;
1881
+ }
1882
+ .sg-wrapper-less .bg-info {
1883
+ background-color: #9954bb;
1884
+ }
1885
+ .sg-wrapper-less a.bg-info:hover {
1886
+ background-color: #7e3f9d;
1887
+ }
1888
+ .sg-wrapper-less .bg-warning {
1889
+ background-color: #ff7518;
1890
+ }
1891
+ .sg-wrapper-less a.bg-warning:hover {
1892
+ background-color: #e45c00;
1893
+ }
1894
+ .sg-wrapper-less .bg-danger {
1895
+ background-color: #ff0039;
1896
+ }
1897
+ .sg-wrapper-less a.bg-danger:hover {
1898
+ background-color: #cc002e;
1899
+ }
1900
+ .sg-wrapper-less .page-header {
1901
+ padding-bottom: 9.5px;
1902
+ margin: 42px 0 21px;
1903
+ border-bottom: 1px solid #e6e6e6;
1904
+ }
1905
+ .sg-wrapper-less ul,
1906
+ .sg-wrapper-less ol {
1907
+ margin-top: 0;
1908
+ margin-bottom: 10.5px;
1909
+ }
1910
+ .sg-wrapper-less ul ul,
1911
+ .sg-wrapper-less ol ul,
1912
+ .sg-wrapper-less ul ol,
1913
+ .sg-wrapper-less ol ol {
1914
+ margin-bottom: 0;
1915
+ }
1916
+ .sg-wrapper-less .list-unstyled {
1917
+ padding-left: 0;
1918
+ list-style: none;
1919
+ }
1920
+ .sg-wrapper-less .list-inline {
1921
+ padding-left: 0;
1922
+ list-style: none;
1923
+ margin-left: -5px;
1924
+ }
1925
+ .sg-wrapper-less .list-inline > li {
1926
+ display: inline-block;
1927
+ padding-left: 5px;
1928
+ padding-right: 5px;
1929
+ }
1930
+ .sg-wrapper-less dl {
1931
+ margin-top: 0;
1932
+ margin-bottom: 21px;
1933
+ }
1934
+ .sg-wrapper-less dt,
1935
+ .sg-wrapper-less dd {
1936
+ line-height: 1.42857143;
1937
+ }
1938
+ .sg-wrapper-less dt {
1939
+ font-weight: bold;
1940
+ }
1941
+ .sg-wrapper-less dd {
1942
+ margin-left: 0;
1943
+ }
1944
+ @media (min-width: 768px) {
1945
+ .sg-wrapper-less .dl-horizontal dt {
1946
+ float: left;
1947
+ width: 160px;
1948
+ clear: left;
1949
+ text-align: right;
1950
+ overflow: hidden;
1951
+ text-overflow: ellipsis;
1952
+ white-space: nowrap;
1953
+ }
1954
+ .sg-wrapper-less .dl-horizontal dd {
1955
+ margin-left: 180px;
1956
+ }
1957
+ }
1958
+ .sg-wrapper-less abbr[title],
1959
+ .sg-wrapper-less abbr[data-original-title] {
1960
+ cursor: help;
1961
+ border-bottom: 1px dotted #999999;
1962
+ }
1963
+ .sg-wrapper-less .initialism {
1964
+ font-size: 90%;
1965
+ text-transform: uppercase;
1966
+ }
1967
+ .sg-wrapper-less blockquote {
1968
+ padding: 10.5px 21px;
1969
+ margin: 0 0 21px;
1970
+ font-size: 18.75px;
1971
+ border-left: 5px solid #e6e6e6;
1972
+ }
1973
+ .sg-wrapper-less blockquote p:last-child,
1974
+ .sg-wrapper-less blockquote ul:last-child,
1975
+ .sg-wrapper-less blockquote ol:last-child {
1976
+ margin-bottom: 0;
1977
+ }
1978
+ .sg-wrapper-less blockquote footer,
1979
+ .sg-wrapper-less blockquote small,
1980
+ .sg-wrapper-less blockquote .small {
1981
+ display: block;
1982
+ font-size: 80%;
1983
+ line-height: 1.42857143;
1984
+ color: #999999;
1985
+ }
1986
+ .sg-wrapper-less blockquote footer:before,
1987
+ .sg-wrapper-less blockquote small:before,
1988
+ .sg-wrapper-less blockquote .small:before {
1989
+ content: '\2014 \00A0';
1990
+ }
1991
+ .sg-wrapper-less .blockquote-reverse,
1992
+ .sg-wrapper-less blockquote.pull-right {
1993
+ padding-right: 15px;
1994
+ padding-left: 0;
1995
+ border-right: 5px solid #e6e6e6;
1996
+ border-left: 0;
1997
+ text-align: right;
1998
+ }
1999
+ .sg-wrapper-less .blockquote-reverse footer:before,
2000
+ .sg-wrapper-less blockquote.pull-right footer:before,
2001
+ .sg-wrapper-less .blockquote-reverse small:before,
2002
+ .sg-wrapper-less blockquote.pull-right small:before,
2003
+ .sg-wrapper-less .blockquote-reverse .small:before,
2004
+ .sg-wrapper-less blockquote.pull-right .small:before {
2005
+ content: '';
2006
+ }
2007
+ .sg-wrapper-less .blockquote-reverse footer:after,
2008
+ .sg-wrapper-less blockquote.pull-right footer:after,
2009
+ .sg-wrapper-less .blockquote-reverse small:after,
2010
+ .sg-wrapper-less blockquote.pull-right small:after,
2011
+ .sg-wrapper-less .blockquote-reverse .small:after,
2012
+ .sg-wrapper-less blockquote.pull-right .small:after {
2013
+ content: '\00A0 \2014';
2014
+ }
2015
+ .sg-wrapper-less address {
2016
+ margin-bottom: 21px;
2017
+ font-style: normal;
2018
+ line-height: 1.42857143;
2019
+ }
2020
+ .sg-wrapper-less code,
2021
+ .sg-wrapper-less kbd,
2022
+ .sg-wrapper-less pre,
2023
+ .sg-wrapper-less samp {
2024
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
2025
+ }
2026
+ .sg-wrapper-less code {
2027
+ padding: 2px 4px;
2028
+ font-size: 90%;
2029
+ color: #c7254e;
2030
+ background-color: #f9f2f4;
2031
+ border-radius: 0;
2032
+ }
2033
+ .sg-wrapper-less kbd {
2034
+ padding: 2px 4px;
2035
+ font-size: 90%;
2036
+ color: #ffffff;
2037
+ background-color: #333333;
2038
+ border-radius: 0;
2039
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
2040
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
2041
+ }
2042
+ .sg-wrapper-less kbd kbd {
2043
+ padding: 0;
2044
+ font-size: 100%;
2045
+ font-weight: bold;
2046
+ -webkit-box-shadow: none;
2047
+ box-shadow: none;
2048
+ }
2049
+ .sg-wrapper-less pre {
2050
+ display: block;
2051
+ padding: 10px;
2052
+ margin: 0 0 10.5px;
2053
+ font-size: 14px;
2054
+ line-height: 1.42857143;
2055
+ word-break: break-all;
2056
+ word-wrap: break-word;
2057
+ color: #333333;
2058
+ background-color: #f5f5f5;
2059
+ border: 1px solid #cccccc;
2060
+ border-radius: 0;
2061
+ }
2062
+ .sg-wrapper-less pre code {
2063
+ padding: 0;
2064
+ font-size: inherit;
2065
+ color: inherit;
2066
+ white-space: pre-wrap;
2067
+ background-color: transparent;
2068
+ border-radius: 0;
2069
+ }
2070
+ .sg-wrapper-less .pre-scrollable {
2071
+ max-height: 340px;
2072
+ overflow-y: scroll;
2073
+ }
2074
+ .sg-wrapper-less .container {
2075
+ margin-right: auto;
2076
+ margin-left: auto;
2077
+ padding-left: 15px;
2078
+ padding-right: 15px;
2079
+ }
2080
+ @media (min-width: 768px) {
2081
+ .sg-wrapper-less .container {
2082
+ width: 750px;
2083
+ }
2084
+ }
2085
+ @media (min-width: 992px) {
2086
+ .sg-wrapper-less .container {
2087
+ width: 970px;
2088
+ }
2089
+ }
2090
+ @media (min-width: 1200px) {
2091
+ .sg-wrapper-less .container {
2092
+ width: 1170px;
2093
+ }
2094
+ }
2095
+ .sg-wrapper-less .container-fluid {
2096
+ margin-right: auto;
2097
+ margin-left: auto;
2098
+ padding-left: 15px;
2099
+ padding-right: 15px;
2100
+ }
2101
+ .sg-wrapper-less .row {
2102
+ margin-left: -15px;
2103
+ margin-right: -15px;
2104
+ }
2105
+ .sg-wrapper-less .col-xs-1,
2106
+ .sg-wrapper-less .col-sm-1,
2107
+ .sg-wrapper-less .col-md-1,
2108
+ .sg-wrapper-less .col-lg-1,
2109
+ .sg-wrapper-less .col-xs-2,
2110
+ .sg-wrapper-less .col-sm-2,
2111
+ .sg-wrapper-less .col-md-2,
2112
+ .sg-wrapper-less .col-lg-2,
2113
+ .sg-wrapper-less .col-xs-3,
2114
+ .sg-wrapper-less .col-sm-3,
2115
+ .sg-wrapper-less .col-md-3,
2116
+ .sg-wrapper-less .col-lg-3,
2117
+ .sg-wrapper-less .col-xs-4,
2118
+ .sg-wrapper-less .col-sm-4,
2119
+ .sg-wrapper-less .col-md-4,
2120
+ .sg-wrapper-less .col-lg-4,
2121
+ .sg-wrapper-less .col-xs-5,
2122
+ .sg-wrapper-less .col-sm-5,
2123
+ .sg-wrapper-less .col-md-5,
2124
+ .sg-wrapper-less .col-lg-5,
2125
+ .sg-wrapper-less .col-xs-6,
2126
+ .sg-wrapper-less .col-sm-6,
2127
+ .sg-wrapper-less .col-md-6,
2128
+ .sg-wrapper-less .col-lg-6,
2129
+ .sg-wrapper-less .col-xs-7,
2130
+ .sg-wrapper-less .col-sm-7,
2131
+ .sg-wrapper-less .col-md-7,
2132
+ .sg-wrapper-less .col-lg-7,
2133
+ .sg-wrapper-less .col-xs-8,
2134
+ .sg-wrapper-less .col-sm-8,
2135
+ .sg-wrapper-less .col-md-8,
2136
+ .sg-wrapper-less .col-lg-8,
2137
+ .sg-wrapper-less .col-xs-9,
2138
+ .sg-wrapper-less .col-sm-9,
2139
+ .sg-wrapper-less .col-md-9,
2140
+ .sg-wrapper-less .col-lg-9,
2141
+ .sg-wrapper-less .col-xs-10,
2142
+ .sg-wrapper-less .col-sm-10,
2143
+ .sg-wrapper-less .col-md-10,
2144
+ .sg-wrapper-less .col-lg-10,
2145
+ .sg-wrapper-less .col-xs-11,
2146
+ .sg-wrapper-less .col-sm-11,
2147
+ .sg-wrapper-less .col-md-11,
2148
+ .sg-wrapper-less .col-lg-11,
2149
+ .sg-wrapper-less .col-xs-12,
2150
+ .sg-wrapper-less .col-sm-12,
2151
+ .sg-wrapper-less .col-md-12,
2152
+ .sg-wrapper-less .col-lg-12 {
2153
+ position: relative;
2154
+ min-height: 1px;
2155
+ padding-left: 15px;
2156
+ padding-right: 15px;
2157
+ }
2158
+ .sg-wrapper-less .col-xs-1,
2159
+ .sg-wrapper-less .col-xs-2,
2160
+ .sg-wrapper-less .col-xs-3,
2161
+ .sg-wrapper-less .col-xs-4,
2162
+ .sg-wrapper-less .col-xs-5,
2163
+ .sg-wrapper-less .col-xs-6,
2164
+ .sg-wrapper-less .col-xs-7,
2165
+ .sg-wrapper-less .col-xs-8,
2166
+ .sg-wrapper-less .col-xs-9,
2167
+ .sg-wrapper-less .col-xs-10,
2168
+ .sg-wrapper-less .col-xs-11,
2169
+ .sg-wrapper-less .col-xs-12 {
2170
+ float: left;
2171
+ }
2172
+ .sg-wrapper-less .col-xs-12 {
2173
+ width: 100%;
2174
+ }
2175
+ .sg-wrapper-less .col-xs-11 {
2176
+ width: 91.66666667%;
2177
+ }
2178
+ .sg-wrapper-less .col-xs-10 {
2179
+ width: 83.33333333%;
2180
+ }
2181
+ .sg-wrapper-less .col-xs-9 {
2182
+ width: 75%;
2183
+ }
2184
+ .sg-wrapper-less .col-xs-8 {
2185
+ width: 66.66666667%;
2186
+ }
2187
+ .sg-wrapper-less .col-xs-7 {
2188
+ width: 58.33333333%;
2189
+ }
2190
+ .sg-wrapper-less .col-xs-6 {
2191
+ width: 50%;
2192
+ }
2193
+ .sg-wrapper-less .col-xs-5 {
2194
+ width: 41.66666667%;
2195
+ }
2196
+ .sg-wrapper-less .col-xs-4 {
2197
+ width: 33.33333333%;
2198
+ }
2199
+ .sg-wrapper-less .col-xs-3 {
2200
+ width: 25%;
2201
+ }
2202
+ .sg-wrapper-less .col-xs-2 {
2203
+ width: 16.66666667%;
2204
+ }
2205
+ .sg-wrapper-less .col-xs-1 {
2206
+ width: 8.33333333%;
2207
+ }
2208
+ .sg-wrapper-less .col-xs-pull-12 {
2209
+ right: 100%;
2210
+ }
2211
+ .sg-wrapper-less .col-xs-pull-11 {
2212
+ right: 91.66666667%;
2213
+ }
2214
+ .sg-wrapper-less .col-xs-pull-10 {
2215
+ right: 83.33333333%;
2216
+ }
2217
+ .sg-wrapper-less .col-xs-pull-9 {
2218
+ right: 75%;
2219
+ }
2220
+ .sg-wrapper-less .col-xs-pull-8 {
2221
+ right: 66.66666667%;
2222
+ }
2223
+ .sg-wrapper-less .col-xs-pull-7 {
2224
+ right: 58.33333333%;
2225
+ }
2226
+ .sg-wrapper-less .col-xs-pull-6 {
2227
+ right: 50%;
2228
+ }
2229
+ .sg-wrapper-less .col-xs-pull-5 {
2230
+ right: 41.66666667%;
2231
+ }
2232
+ .sg-wrapper-less .col-xs-pull-4 {
2233
+ right: 33.33333333%;
2234
+ }
2235
+ .sg-wrapper-less .col-xs-pull-3 {
2236
+ right: 25%;
2237
+ }
2238
+ .sg-wrapper-less .col-xs-pull-2 {
2239
+ right: 16.66666667%;
2240
+ }
2241
+ .sg-wrapper-less .col-xs-pull-1 {
2242
+ right: 8.33333333%;
2243
+ }
2244
+ .sg-wrapper-less .col-xs-pull-0 {
2245
+ right: auto;
2246
+ }
2247
+ .sg-wrapper-less .col-xs-push-12 {
2248
+ left: 100%;
2249
+ }
2250
+ .sg-wrapper-less .col-xs-push-11 {
2251
+ left: 91.66666667%;
2252
+ }
2253
+ .sg-wrapper-less .col-xs-push-10 {
2254
+ left: 83.33333333%;
2255
+ }
2256
+ .sg-wrapper-less .col-xs-push-9 {
2257
+ left: 75%;
2258
+ }
2259
+ .sg-wrapper-less .col-xs-push-8 {
2260
+ left: 66.66666667%;
2261
+ }
2262
+ .sg-wrapper-less .col-xs-push-7 {
2263
+ left: 58.33333333%;
2264
+ }
2265
+ .sg-wrapper-less .col-xs-push-6 {
2266
+ left: 50%;
2267
+ }
2268
+ .sg-wrapper-less .col-xs-push-5 {
2269
+ left: 41.66666667%;
2270
+ }
2271
+ .sg-wrapper-less .col-xs-push-4 {
2272
+ left: 33.33333333%;
2273
+ }
2274
+ .sg-wrapper-less .col-xs-push-3 {
2275
+ left: 25%;
2276
+ }
2277
+ .sg-wrapper-less .col-xs-push-2 {
2278
+ left: 16.66666667%;
2279
+ }
2280
+ .sg-wrapper-less .col-xs-push-1 {
2281
+ left: 8.33333333%;
2282
+ }
2283
+ .sg-wrapper-less .col-xs-push-0 {
2284
+ left: auto;
2285
+ }
2286
+ .sg-wrapper-less .col-xs-offset-12 {
2287
+ margin-left: 100%;
2288
+ }
2289
+ .sg-wrapper-less .col-xs-offset-11 {
2290
+ margin-left: 91.66666667%;
2291
+ }
2292
+ .sg-wrapper-less .col-xs-offset-10 {
2293
+ margin-left: 83.33333333%;
2294
+ }
2295
+ .sg-wrapper-less .col-xs-offset-9 {
2296
+ margin-left: 75%;
2297
+ }
2298
+ .sg-wrapper-less .col-xs-offset-8 {
2299
+ margin-left: 66.66666667%;
2300
+ }
2301
+ .sg-wrapper-less .col-xs-offset-7 {
2302
+ margin-left: 58.33333333%;
2303
+ }
2304
+ .sg-wrapper-less .col-xs-offset-6 {
2305
+ margin-left: 50%;
2306
+ }
2307
+ .sg-wrapper-less .col-xs-offset-5 {
2308
+ margin-left: 41.66666667%;
2309
+ }
2310
+ .sg-wrapper-less .col-xs-offset-4 {
2311
+ margin-left: 33.33333333%;
2312
+ }
2313
+ .sg-wrapper-less .col-xs-offset-3 {
2314
+ margin-left: 25%;
2315
+ }
2316
+ .sg-wrapper-less .col-xs-offset-2 {
2317
+ margin-left: 16.66666667%;
2318
+ }
2319
+ .sg-wrapper-less .col-xs-offset-1 {
2320
+ margin-left: 8.33333333%;
2321
+ }
2322
+ .sg-wrapper-less .col-xs-offset-0 {
2323
+ margin-left: 0%;
2324
+ }
2325
+ @media (min-width: 768px) {
2326
+ .sg-wrapper-less .col-sm-1,
2327
+ .sg-wrapper-less .col-sm-2,
2328
+ .sg-wrapper-less .col-sm-3,
2329
+ .sg-wrapper-less .col-sm-4,
2330
+ .sg-wrapper-less .col-sm-5,
2331
+ .sg-wrapper-less .col-sm-6,
2332
+ .sg-wrapper-less .col-sm-7,
2333
+ .sg-wrapper-less .col-sm-8,
2334
+ .sg-wrapper-less .col-sm-9,
2335
+ .sg-wrapper-less .col-sm-10,
2336
+ .sg-wrapper-less .col-sm-11,
2337
+ .sg-wrapper-less .col-sm-12 {
2338
+ float: left;
2339
+ }
2340
+ .sg-wrapper-less .col-sm-12 {
2341
+ width: 100%;
2342
+ }
2343
+ .sg-wrapper-less .col-sm-11 {
2344
+ width: 91.66666667%;
2345
+ }
2346
+ .sg-wrapper-less .col-sm-10 {
2347
+ width: 83.33333333%;
2348
+ }
2349
+ .sg-wrapper-less .col-sm-9 {
2350
+ width: 75%;
2351
+ }
2352
+ .sg-wrapper-less .col-sm-8 {
2353
+ width: 66.66666667%;
2354
+ }
2355
+ .sg-wrapper-less .col-sm-7 {
2356
+ width: 58.33333333%;
2357
+ }
2358
+ .sg-wrapper-less .col-sm-6 {
2359
+ width: 50%;
2360
+ }
2361
+ .sg-wrapper-less .col-sm-5 {
2362
+ width: 41.66666667%;
2363
+ }
2364
+ .sg-wrapper-less .col-sm-4 {
2365
+ width: 33.33333333%;
2366
+ }
2367
+ .sg-wrapper-less .col-sm-3 {
2368
+ width: 25%;
2369
+ }
2370
+ .sg-wrapper-less .col-sm-2 {
2371
+ width: 16.66666667%;
2372
+ }
2373
+ .sg-wrapper-less .col-sm-1 {
2374
+ width: 8.33333333%;
2375
+ }
2376
+ .sg-wrapper-less .col-sm-pull-12 {
2377
+ right: 100%;
2378
+ }
2379
+ .sg-wrapper-less .col-sm-pull-11 {
2380
+ right: 91.66666667%;
2381
+ }
2382
+ .sg-wrapper-less .col-sm-pull-10 {
2383
+ right: 83.33333333%;
2384
+ }
2385
+ .sg-wrapper-less .col-sm-pull-9 {
2386
+ right: 75%;
2387
+ }
2388
+ .sg-wrapper-less .col-sm-pull-8 {
2389
+ right: 66.66666667%;
2390
+ }
2391
+ .sg-wrapper-less .col-sm-pull-7 {
2392
+ right: 58.33333333%;
2393
+ }
2394
+ .sg-wrapper-less .col-sm-pull-6 {
2395
+ right: 50%;
2396
+ }
2397
+ .sg-wrapper-less .col-sm-pull-5 {
2398
+ right: 41.66666667%;
2399
+ }
2400
+ .sg-wrapper-less .col-sm-pull-4 {
2401
+ right: 33.33333333%;
2402
+ }
2403
+ .sg-wrapper-less .col-sm-pull-3 {
2404
+ right: 25%;
2405
+ }
2406
+ .sg-wrapper-less .col-sm-pull-2 {
2407
+ right: 16.66666667%;
2408
+ }
2409
+ .sg-wrapper-less .col-sm-pull-1 {
2410
+ right: 8.33333333%;
2411
+ }
2412
+ .sg-wrapper-less .col-sm-pull-0 {
2413
+ right: auto;
2414
+ }
2415
+ .sg-wrapper-less .col-sm-push-12 {
2416
+ left: 100%;
2417
+ }
2418
+ .sg-wrapper-less .col-sm-push-11 {
2419
+ left: 91.66666667%;
2420
+ }
2421
+ .sg-wrapper-less .col-sm-push-10 {
2422
+ left: 83.33333333%;
2423
+ }
2424
+ .sg-wrapper-less .col-sm-push-9 {
2425
+ left: 75%;
2426
+ }
2427
+ .sg-wrapper-less .col-sm-push-8 {
2428
+ left: 66.66666667%;
2429
+ }
2430
+ .sg-wrapper-less .col-sm-push-7 {
2431
+ left: 58.33333333%;
2432
+ }
2433
+ .sg-wrapper-less .col-sm-push-6 {
2434
+ left: 50%;
2435
+ }
2436
+ .sg-wrapper-less .col-sm-push-5 {
2437
+ left: 41.66666667%;
2438
+ }
2439
+ .sg-wrapper-less .col-sm-push-4 {
2440
+ left: 33.33333333%;
2441
+ }
2442
+ .sg-wrapper-less .col-sm-push-3 {
2443
+ left: 25%;
2444
+ }
2445
+ .sg-wrapper-less .col-sm-push-2 {
2446
+ left: 16.66666667%;
2447
+ }
2448
+ .sg-wrapper-less .col-sm-push-1 {
2449
+ left: 8.33333333%;
2450
+ }
2451
+ .sg-wrapper-less .col-sm-push-0 {
2452
+ left: auto;
2453
+ }
2454
+ .sg-wrapper-less .col-sm-offset-12 {
2455
+ margin-left: 100%;
2456
+ }
2457
+ .sg-wrapper-less .col-sm-offset-11 {
2458
+ margin-left: 91.66666667%;
2459
+ }
2460
+ .sg-wrapper-less .col-sm-offset-10 {
2461
+ margin-left: 83.33333333%;
2462
+ }
2463
+ .sg-wrapper-less .col-sm-offset-9 {
2464
+ margin-left: 75%;
2465
+ }
2466
+ .sg-wrapper-less .col-sm-offset-8 {
2467
+ margin-left: 66.66666667%;
2468
+ }
2469
+ .sg-wrapper-less .col-sm-offset-7 {
2470
+ margin-left: 58.33333333%;
2471
+ }
2472
+ .sg-wrapper-less .col-sm-offset-6 {
2473
+ margin-left: 50%;
2474
+ }
2475
+ .sg-wrapper-less .col-sm-offset-5 {
2476
+ margin-left: 41.66666667%;
2477
+ }
2478
+ .sg-wrapper-less .col-sm-offset-4 {
2479
+ margin-left: 33.33333333%;
2480
+ }
2481
+ .sg-wrapper-less .col-sm-offset-3 {
2482
+ margin-left: 25%;
2483
+ }
2484
+ .sg-wrapper-less .col-sm-offset-2 {
2485
+ margin-left: 16.66666667%;
2486
+ }
2487
+ .sg-wrapper-less .col-sm-offset-1 {
2488
+ margin-left: 8.33333333%;
2489
+ }
2490
+ .sg-wrapper-less .col-sm-offset-0 {
2491
+ margin-left: 0%;
2492
+ }
2493
+ }
2494
+ @media (min-width: 992px) {
2495
+ .sg-wrapper-less .col-md-1,
2496
+ .sg-wrapper-less .col-md-2,
2497
+ .sg-wrapper-less .col-md-3,
2498
+ .sg-wrapper-less .col-md-4,
2499
+ .sg-wrapper-less .col-md-5,
2500
+ .sg-wrapper-less .col-md-6,
2501
+ .sg-wrapper-less .col-md-7,
2502
+ .sg-wrapper-less .col-md-8,
2503
+ .sg-wrapper-less .col-md-9,
2504
+ .sg-wrapper-less .col-md-10,
2505
+ .sg-wrapper-less .col-md-11,
2506
+ .sg-wrapper-less .col-md-12 {
2507
+ float: left;
2508
+ }
2509
+ .sg-wrapper-less .col-md-12 {
2510
+ width: 100%;
2511
+ }
2512
+ .sg-wrapper-less .col-md-11 {
2513
+ width: 91.66666667%;
2514
+ }
2515
+ .sg-wrapper-less .col-md-10 {
2516
+ width: 83.33333333%;
2517
+ }
2518
+ .sg-wrapper-less .col-md-9 {
2519
+ width: 75%;
2520
+ }
2521
+ .sg-wrapper-less .col-md-8 {
2522
+ width: 66.66666667%;
2523
+ }
2524
+ .sg-wrapper-less .col-md-7 {
2525
+ width: 58.33333333%;
2526
+ }
2527
+ .sg-wrapper-less .col-md-6 {
2528
+ width: 50%;
2529
+ }
2530
+ .sg-wrapper-less .col-md-5 {
2531
+ width: 41.66666667%;
2532
+ }
2533
+ .sg-wrapper-less .col-md-4 {
2534
+ width: 33.33333333%;
2535
+ }
2536
+ .sg-wrapper-less .col-md-3 {
2537
+ width: 25%;
2538
+ }
2539
+ .sg-wrapper-less .col-md-2 {
2540
+ width: 16.66666667%;
2541
+ }
2542
+ .sg-wrapper-less .col-md-1 {
2543
+ width: 8.33333333%;
2544
+ }
2545
+ .sg-wrapper-less .col-md-pull-12 {
2546
+ right: 100%;
2547
+ }
2548
+ .sg-wrapper-less .col-md-pull-11 {
2549
+ right: 91.66666667%;
2550
+ }
2551
+ .sg-wrapper-less .col-md-pull-10 {
2552
+ right: 83.33333333%;
2553
+ }
2554
+ .sg-wrapper-less .col-md-pull-9 {
2555
+ right: 75%;
2556
+ }
2557
+ .sg-wrapper-less .col-md-pull-8 {
2558
+ right: 66.66666667%;
2559
+ }
2560
+ .sg-wrapper-less .col-md-pull-7 {
2561
+ right: 58.33333333%;
2562
+ }
2563
+ .sg-wrapper-less .col-md-pull-6 {
2564
+ right: 50%;
2565
+ }
2566
+ .sg-wrapper-less .col-md-pull-5 {
2567
+ right: 41.66666667%;
2568
+ }
2569
+ .sg-wrapper-less .col-md-pull-4 {
2570
+ right: 33.33333333%;
2571
+ }
2572
+ .sg-wrapper-less .col-md-pull-3 {
2573
+ right: 25%;
2574
+ }
2575
+ .sg-wrapper-less .col-md-pull-2 {
2576
+ right: 16.66666667%;
2577
+ }
2578
+ .sg-wrapper-less .col-md-pull-1 {
2579
+ right: 8.33333333%;
2580
+ }
2581
+ .sg-wrapper-less .col-md-pull-0 {
2582
+ right: auto;
2583
+ }
2584
+ .sg-wrapper-less .col-md-push-12 {
2585
+ left: 100%;
2586
+ }
2587
+ .sg-wrapper-less .col-md-push-11 {
2588
+ left: 91.66666667%;
2589
+ }
2590
+ .sg-wrapper-less .col-md-push-10 {
2591
+ left: 83.33333333%;
2592
+ }
2593
+ .sg-wrapper-less .col-md-push-9 {
2594
+ left: 75%;
2595
+ }
2596
+ .sg-wrapper-less .col-md-push-8 {
2597
+ left: 66.66666667%;
2598
+ }
2599
+ .sg-wrapper-less .col-md-push-7 {
2600
+ left: 58.33333333%;
2601
+ }
2602
+ .sg-wrapper-less .col-md-push-6 {
2603
+ left: 50%;
2604
+ }
2605
+ .sg-wrapper-less .col-md-push-5 {
2606
+ left: 41.66666667%;
2607
+ }
2608
+ .sg-wrapper-less .col-md-push-4 {
2609
+ left: 33.33333333%;
2610
+ }
2611
+ .sg-wrapper-less .col-md-push-3 {
2612
+ left: 25%;
2613
+ }
2614
+ .sg-wrapper-less .col-md-push-2 {
2615
+ left: 16.66666667%;
2616
+ }
2617
+ .sg-wrapper-less .col-md-push-1 {
2618
+ left: 8.33333333%;
2619
+ }
2620
+ .sg-wrapper-less .col-md-push-0 {
2621
+ left: auto;
2622
+ }
2623
+ .sg-wrapper-less .col-md-offset-12 {
2624
+ margin-left: 100%;
2625
+ }
2626
+ .sg-wrapper-less .col-md-offset-11 {
2627
+ margin-left: 91.66666667%;
2628
+ }
2629
+ .sg-wrapper-less .col-md-offset-10 {
2630
+ margin-left: 83.33333333%;
2631
+ }
2632
+ .sg-wrapper-less .col-md-offset-9 {
2633
+ margin-left: 75%;
2634
+ }
2635
+ .sg-wrapper-less .col-md-offset-8 {
2636
+ margin-left: 66.66666667%;
2637
+ }
2638
+ .sg-wrapper-less .col-md-offset-7 {
2639
+ margin-left: 58.33333333%;
2640
+ }
2641
+ .sg-wrapper-less .col-md-offset-6 {
2642
+ margin-left: 50%;
2643
+ }
2644
+ .sg-wrapper-less .col-md-offset-5 {
2645
+ margin-left: 41.66666667%;
2646
+ }
2647
+ .sg-wrapper-less .col-md-offset-4 {
2648
+ margin-left: 33.33333333%;
2649
+ }
2650
+ .sg-wrapper-less .col-md-offset-3 {
2651
+ margin-left: 25%;
2652
+ }
2653
+ .sg-wrapper-less .col-md-offset-2 {
2654
+ margin-left: 16.66666667%;
2655
+ }
2656
+ .sg-wrapper-less .col-md-offset-1 {
2657
+ margin-left: 8.33333333%;
2658
+ }
2659
+ .sg-wrapper-less .col-md-offset-0 {
2660
+ margin-left: 0%;
2661
+ }
2662
+ }
2663
+ @media (min-width: 1200px) {
2664
+ .sg-wrapper-less .col-lg-1,
2665
+ .sg-wrapper-less .col-lg-2,
2666
+ .sg-wrapper-less .col-lg-3,
2667
+ .sg-wrapper-less .col-lg-4,
2668
+ .sg-wrapper-less .col-lg-5,
2669
+ .sg-wrapper-less .col-lg-6,
2670
+ .sg-wrapper-less .col-lg-7,
2671
+ .sg-wrapper-less .col-lg-8,
2672
+ .sg-wrapper-less .col-lg-9,
2673
+ .sg-wrapper-less .col-lg-10,
2674
+ .sg-wrapper-less .col-lg-11,
2675
+ .sg-wrapper-less .col-lg-12 {
2676
+ float: left;
2677
+ }
2678
+ .sg-wrapper-less .col-lg-12 {
2679
+ width: 100%;
2680
+ }
2681
+ .sg-wrapper-less .col-lg-11 {
2682
+ width: 91.66666667%;
2683
+ }
2684
+ .sg-wrapper-less .col-lg-10 {
2685
+ width: 83.33333333%;
2686
+ }
2687
+ .sg-wrapper-less .col-lg-9 {
2688
+ width: 75%;
2689
+ }
2690
+ .sg-wrapper-less .col-lg-8 {
2691
+ width: 66.66666667%;
2692
+ }
2693
+ .sg-wrapper-less .col-lg-7 {
2694
+ width: 58.33333333%;
2695
+ }
2696
+ .sg-wrapper-less .col-lg-6 {
2697
+ width: 50%;
2698
+ }
2699
+ .sg-wrapper-less .col-lg-5 {
2700
+ width: 41.66666667%;
2701
+ }
2702
+ .sg-wrapper-less .col-lg-4 {
2703
+ width: 33.33333333%;
2704
+ }
2705
+ .sg-wrapper-less .col-lg-3 {
2706
+ width: 25%;
2707
+ }
2708
+ .sg-wrapper-less .col-lg-2 {
2709
+ width: 16.66666667%;
2710
+ }
2711
+ .sg-wrapper-less .col-lg-1 {
2712
+ width: 8.33333333%;
2713
+ }
2714
+ .sg-wrapper-less .col-lg-pull-12 {
2715
+ right: 100%;
2716
+ }
2717
+ .sg-wrapper-less .col-lg-pull-11 {
2718
+ right: 91.66666667%;
2719
+ }
2720
+ .sg-wrapper-less .col-lg-pull-10 {
2721
+ right: 83.33333333%;
2722
+ }
2723
+ .sg-wrapper-less .col-lg-pull-9 {
2724
+ right: 75%;
2725
+ }
2726
+ .sg-wrapper-less .col-lg-pull-8 {
2727
+ right: 66.66666667%;
2728
+ }
2729
+ .sg-wrapper-less .col-lg-pull-7 {
2730
+ right: 58.33333333%;
2731
+ }
2732
+ .sg-wrapper-less .col-lg-pull-6 {
2733
+ right: 50%;
2734
+ }
2735
+ .sg-wrapper-less .col-lg-pull-5 {
2736
+ right: 41.66666667%;
2737
+ }
2738
+ .sg-wrapper-less .col-lg-pull-4 {
2739
+ right: 33.33333333%;
2740
+ }
2741
+ .sg-wrapper-less .col-lg-pull-3 {
2742
+ right: 25%;
2743
+ }
2744
+ .sg-wrapper-less .col-lg-pull-2 {
2745
+ right: 16.66666667%;
2746
+ }
2747
+ .sg-wrapper-less .col-lg-pull-1 {
2748
+ right: 8.33333333%;
2749
+ }
2750
+ .sg-wrapper-less .col-lg-pull-0 {
2751
+ right: auto;
2752
+ }
2753
+ .sg-wrapper-less .col-lg-push-12 {
2754
+ left: 100%;
2755
+ }
2756
+ .sg-wrapper-less .col-lg-push-11 {
2757
+ left: 91.66666667%;
2758
+ }
2759
+ .sg-wrapper-less .col-lg-push-10 {
2760
+ left: 83.33333333%;
2761
+ }
2762
+ .sg-wrapper-less .col-lg-push-9 {
2763
+ left: 75%;
2764
+ }
2765
+ .sg-wrapper-less .col-lg-push-8 {
2766
+ left: 66.66666667%;
2767
+ }
2768
+ .sg-wrapper-less .col-lg-push-7 {
2769
+ left: 58.33333333%;
2770
+ }
2771
+ .sg-wrapper-less .col-lg-push-6 {
2772
+ left: 50%;
2773
+ }
2774
+ .sg-wrapper-less .col-lg-push-5 {
2775
+ left: 41.66666667%;
2776
+ }
2777
+ .sg-wrapper-less .col-lg-push-4 {
2778
+ left: 33.33333333%;
2779
+ }
2780
+ .sg-wrapper-less .col-lg-push-3 {
2781
+ left: 25%;
2782
+ }
2783
+ .sg-wrapper-less .col-lg-push-2 {
2784
+ left: 16.66666667%;
2785
+ }
2786
+ .sg-wrapper-less .col-lg-push-1 {
2787
+ left: 8.33333333%;
2788
+ }
2789
+ .sg-wrapper-less .col-lg-push-0 {
2790
+ left: auto;
2791
+ }
2792
+ .sg-wrapper-less .col-lg-offset-12 {
2793
+ margin-left: 100%;
2794
+ }
2795
+ .sg-wrapper-less .col-lg-offset-11 {
2796
+ margin-left: 91.66666667%;
2797
+ }
2798
+ .sg-wrapper-less .col-lg-offset-10 {
2799
+ margin-left: 83.33333333%;
2800
+ }
2801
+ .sg-wrapper-less .col-lg-offset-9 {
2802
+ margin-left: 75%;
2803
+ }
2804
+ .sg-wrapper-less .col-lg-offset-8 {
2805
+ margin-left: 66.66666667%;
2806
+ }
2807
+ .sg-wrapper-less .col-lg-offset-7 {
2808
+ margin-left: 58.33333333%;
2809
+ }
2810
+ .sg-wrapper-less .col-lg-offset-6 {
2811
+ margin-left: 50%;
2812
+ }
2813
+ .sg-wrapper-less .col-lg-offset-5 {
2814
+ margin-left: 41.66666667%;
2815
+ }
2816
+ .sg-wrapper-less .col-lg-offset-4 {
2817
+ margin-left: 33.33333333%;
2818
+ }
2819
+ .sg-wrapper-less .col-lg-offset-3 {
2820
+ margin-left: 25%;
2821
+ }
2822
+ .sg-wrapper-less .col-lg-offset-2 {
2823
+ margin-left: 16.66666667%;
2824
+ }
2825
+ .sg-wrapper-less .col-lg-offset-1 {
2826
+ margin-left: 8.33333333%;
2827
+ }
2828
+ .sg-wrapper-less .col-lg-offset-0 {
2829
+ margin-left: 0%;
2830
+ }
2831
+ }
2832
+ .sg-wrapper-less table {
2833
+ background-color: transparent;
2834
+ }
2835
+ .sg-wrapper-less caption {
2836
+ padding-top: 8px;
2837
+ padding-bottom: 8px;
2838
+ color: #999999;
2839
+ text-align: left;
2840
+ }
2841
+ .sg-wrapper-less th {
2842
+ text-align: left;
2843
+ }
2844
+ .sg-wrapper-less .table {
2845
+ width: 100%;
2846
+ max-width: 100%;
2847
+ margin-bottom: 21px;
2848
+ }
2849
+ .sg-backup-table .checkbox {
2850
+ margin: 0 !important;
2851
+ }
2852
+ .sg-wrapper-less .table > thead > tr > th,
2853
+ .sg-wrapper-less .table > tbody > tr > th,
2854
+ .sg-wrapper-less .table > tfoot > tr > th,
2855
+ .sg-wrapper-less .table > thead > tr > td,
2856
+ .sg-wrapper-less .table > tbody > tr > td,
2857
+ .sg-wrapper-less .table > tfoot > tr > td {
2858
+ padding: 8px;
2859
+ line-height: 1.42857143;
2860
+ vertical-align: middle;
2861
+ border-top: 1px solid #EBEBEB;
2862
+ height: 65px;
2863
+ }
2864
+ .sg-wrapper-less .table > thead > tr > th {
2865
+ vertical-align: middle;
2866
+ border-bottom: 1px solid #EBEBEB;
2867
+ }
2868
+ .sg-wrapper-less .table > caption + thead > tr:first-child > th,
2869
+ .sg-wrapper-less .table > colgroup + thead > tr:first-child > th,
2870
+ .sg-wrapper-less .table > thead:first-child > tr:first-child > th,
2871
+ .sg-wrapper-less .table > caption + thead > tr:first-child > td,
2872
+ .sg-wrapper-less .table > colgroup + thead > tr:first-child > td,
2873
+ .sg-wrapper-less .table > thead:first-child > tr:first-child > td {
2874
+ border-top: 0;
2875
+ }
2876
+ .sg-wrapper-less .table > tbody + tbody {
2877
+ border-top: 2px solid #dddddd;
2878
+ }
2879
+ .sg-wrapper-less .table .table {
2880
+ background-color: #ffffff;
2881
+ }
2882
+ .sg-wrapper-less .table-condensed > thead > tr > th,
2883
+ .sg-wrapper-less .table-condensed > tbody > tr > th,
2884
+ .sg-wrapper-less .table-condensed > tfoot > tr > th,
2885
+ .sg-wrapper-less .table-condensed > thead > tr > td,
2886
+ .sg-wrapper-less .table-condensed > tbody > tr > td,
2887
+ .sg-wrapper-less .table-condensed > tfoot > tr > td {
2888
+ padding: 5px;
2889
+ }
2890
+ .sg-wrapper-less .table-bordered {
2891
+ border: 1px solid #dddddd;
2892
+ }
2893
+ .sg-wrapper-less .table-bordered > thead > tr > th,
2894
+ .sg-wrapper-less .table-bordered > tbody > tr > th,
2895
+ .sg-wrapper-less .table-bordered > tfoot > tr > th,
2896
+ .sg-wrapper-less .table-bordered > thead > tr > td,
2897
+ .sg-wrapper-less .table-bordered > tbody > tr > td,
2898
+ .sg-wrapper-less .table-bordered > tfoot > tr > td {
2899
+ border: 1px solid #dddddd;
2900
+ }
2901
+ .sg-wrapper-less .table-bordered > thead > tr > th,
2902
+ .sg-wrapper-less .table-bordered > thead > tr > td {
2903
+ border-bottom-width: 2px;
2904
+ }
2905
+ /*
2906
+ .sg-wrapper-less .table-striped > tbody > tr:nth-of-type(odd) {
2907
+ background-color: #f9f9f9;
2908
+ }*/
2909
+ .sg-wrapper-less .table-striped > tbody > tr,
2910
+ .sg-wrapper-less .table-striped > th {
2911
+ height: 65px;
2912
+ }
2913
+ .sg-wrapper-less .table-hover > tbody > tr:hover {
2914
+ background-color: #f5f5f5;
2915
+ }
2916
+ .sg-wrapper-less table col[class*="col-"] {
2917
+ position: static;
2918
+ float: none;
2919
+ display: table-column;
2920
+ }
2921
+ .sg-wrapper-less table td[class*="col-"],
2922
+ .sg-wrapper-less table th[class*="col-"] {
2923
+ position: static;
2924
+ float: none;
2925
+ display: table-cell;
2926
+ }
2927
+ .sg-wrapper-less .table > thead > tr > td.active,
2928
+ .sg-wrapper-less .table > tbody > tr > td.active,
2929
+ .sg-wrapper-less .table > tfoot > tr > td.active,
2930
+ .sg-wrapper-less .table > thead > tr > th.active,
2931
+ .sg-wrapper-less .table > tbody > tr > th.active,
2932
+ .sg-wrapper-less .table > tfoot > tr > th.active,
2933
+ .sg-wrapper-less .table > thead > tr.active > td,
2934
+ .sg-wrapper-less .table > tbody > tr.active > td,
2935
+ .sg-wrapper-less .table > tfoot > tr.active > td,
2936
+ .sg-wrapper-less .table > thead > tr.active > th,
2937
+ .sg-wrapper-less .table > tbody > tr.active > th,
2938
+ .sg-wrapper-less .table > tfoot > tr.active > th {
2939
+ background-color: #f5f5f5;
2940
+ }
2941
+ .sg-wrapper-less .table-hover > tbody > tr > td.active:hover,
2942
+ .sg-wrapper-less .table-hover > tbody > tr > th.active:hover,
2943
+ .sg-wrapper-less .table-hover > tbody > tr.active:hover > td,
2944
+ .sg-wrapper-less .table-hover > tbody > tr:hover > .active,
2945
+ .sg-wrapper-less .table-hover > tbody > tr.active:hover > th {
2946
+ background-color: #e8e8e8;
2947
+ }
2948
+ .sg-wrapper-less .table > thead > tr > td.success,
2949
+ .sg-wrapper-less .table > tbody > tr > td.success,
2950
+ .sg-wrapper-less .table > tfoot > tr > td.success,
2951
+ .sg-wrapper-less .table > thead > tr > th.success,
2952
+ .sg-wrapper-less .table > tbody > tr > th.success,
2953
+ .sg-wrapper-less .table > tfoot > tr > th.success,
2954
+ .sg-wrapper-less .table > thead > tr.success > td,
2955
+ .sg-wrapper-less .table > tbody > tr.success > td,
2956
+ .sg-wrapper-less .table > tfoot > tr.success > td,
2957
+ .sg-wrapper-less .table > thead > tr.success > th,
2958
+ .sg-wrapper-less .table > tbody > tr.success > th,
2959
+ .sg-wrapper-less .table > tfoot > tr.success > th {
2960
+ background-color: #3fb618;
2961
+ }
2962
+ .sg-wrapper-less .table-hover > tbody > tr > td.success:hover,
2963
+ .sg-wrapper-less .table-hover > tbody > tr > th.success:hover,
2964
+ .sg-wrapper-less .table-hover > tbody > tr.success:hover > td,
2965
+ .sg-wrapper-less .table-hover > tbody > tr:hover > .success,
2966
+ .sg-wrapper-less .table-hover > tbody > tr.success:hover > th {
2967
+ background-color: #379f15;
2968
+ }
2969
+ .sg-wrapper-less .table > thead > tr > td.info,
2970
+ .sg-wrapper-less .table > tbody > tr > td.info,
2971
+ .sg-wrapper-less .table > tfoot > tr > td.info,
2972
+ .sg-wrapper-less .table > thead > tr > th.info,
2973
+ .sg-wrapper-less .table > tbody > tr > th.info,
2974
+ .sg-wrapper-less .table > tfoot > tr > th.info,
2975
+ .sg-wrapper-less .table > thead > tr.info > td,
2976
+ .sg-wrapper-less .table > tbody > tr.info > td,
2977
+ .sg-wrapper-less .table > tfoot > tr.info > td,
2978
+ .sg-wrapper-less .table > thead > tr.info > th,
2979
+ .sg-wrapper-less .table > tbody > tr.info > th,
2980
+ .sg-wrapper-less .table > tfoot > tr.info > th {
2981
+ background-color: #9954bb;
2982
+ }
2983
+ .sg-wrapper-less .table-hover > tbody > tr > td.info:hover,
2984
+ .sg-wrapper-less .table-hover > tbody > tr > th.info:hover,
2985
+ .sg-wrapper-less .table-hover > tbody > tr.info:hover > td,
2986
+ .sg-wrapper-less .table-hover > tbody > tr:hover > .info,
2987
+ .sg-wrapper-less .table-hover > tbody > tr.info:hover > th {
2988
+ background-color: #8d46b0;
2989
+ }
2990
+ .sg-wrapper-less .table > thead > tr > td.warning,
2991
+ .sg-wrapper-less .table > tbody > tr > td.warning,
2992
+ .sg-wrapper-less .table > tfoot > tr > td.warning,
2993
+ .sg-wrapper-less .table > thead > tr > th.warning,
2994
+ .sg-wrapper-less .table > tbody > tr > th.warning,
2995
+ .sg-wrapper-less .table > tfoot > tr > th.warning,
2996
+ .sg-wrapper-less .table > thead > tr.warning > td,
2997
+ .sg-wrapper-less .table > tbody > tr.warning > td,
2998
+ .sg-wrapper-less .table > tfoot > tr.warning > td,
2999
+ .sg-wrapper-less .table > thead > tr.warning > th,
3000
+ .sg-wrapper-less .table > tbody > tr.warning > th,
3001
+ .sg-wrapper-less .table > tfoot > tr.warning > th {
3002
+ background-color: #ff7518;
3003
+ }
3004
+ .sg-wrapper-less .table-hover > tbody > tr > td.warning:hover,
3005
+ .sg-wrapper-less .table-hover > tbody > tr > th.warning:hover,
3006
+ .sg-wrapper-less .table-hover > tbody > tr.warning:hover > td,
3007
+ .sg-wrapper-less .table-hover > tbody > tr:hover > .warning,
3008
+ .sg-wrapper-less .table-hover > tbody > tr.warning:hover > th {
3009
+ background-color: #fe6600;
3010
+ }
3011
+ .sg-wrapper-less .table > thead > tr > td.danger,
3012
+ .sg-wrapper-less .table > tbody > tr > td.danger,
3013
+ .sg-wrapper-less .table > tfoot > tr > td.danger,
3014
+ .sg-wrapper-less .table > thead > tr > th.danger,
3015
+ .sg-wrapper-less .table > tbody > tr > th.danger,
3016
+ .sg-wrapper-less .table > tfoot > tr > th.danger,
3017
+ .sg-wrapper-less .table > thead > tr.danger > td,
3018
+ .sg-wrapper-less .table > tbody > tr.danger > td,
3019
+ .sg-wrapper-less .table > tfoot > tr.danger > td,
3020
+ .sg-wrapper-less .table > thead > tr.danger > th,
3021
+ .sg-wrapper-less .table > tbody > tr.danger > th,
3022
+ .sg-wrapper-less .table > tfoot > tr.danger > th {
3023
+ background-color: #ff0039;
3024
+ }
3025
+ .sg-wrapper-less .table-hover > tbody > tr > td.danger:hover,
3026
+ .sg-wrapper-less .table-hover > tbody > tr > th.danger:hover,
3027
+ .sg-wrapper-less .table-hover > tbody > tr.danger:hover > td,
3028
+ .sg-wrapper-less .table-hover > tbody > tr:hover > .danger,
3029
+ .sg-wrapper-less .table-hover > tbody > tr.danger:hover > th {
3030
+ background-color: #e60033;
3031
+ }
3032
+ .sg-wrapper-less .table-responsive {
3033
+ overflow-x: auto;
3034
+ min-height: 0.01%;
3035
+ }
3036
+ @media screen and (max-width: 767px) {
3037
+ .sg-wrapper-less .table-responsive {
3038
+ width: 100%;
3039
+ margin-bottom: 15.75px;
3040
+ overflow-y: hidden;
3041
+ -ms-overflow-style: -ms-autohiding-scrollbar;
3042
+ border: 1px solid #dddddd;
3043
+ }
3044
+ .sg-wrapper-less .table-responsive > .table {
3045
+ margin-bottom: 0;
3046
+ }
3047
+ .sg-wrapper-less .table-responsive > .table > thead > tr > th,
3048
+ .sg-wrapper-less .table-responsive > .table > tbody > tr > th,
3049
+ .sg-wrapper-less .table-responsive > .table > tfoot > tr > th,
3050
+ .sg-wrapper-less .table-responsive > .table > thead > tr > td,
3051
+ .sg-wrapper-less .table-responsive > .table > tbody > tr > td,
3052
+ .sg-wrapper-less .table-responsive > .table > tfoot > tr > td {
3053
+ white-space: nowrap;
3054
+ }
3055
+ .sg-wrapper-less .table-responsive > .table-bordered {
3056
+ border: 0;
3057
+ }
3058
+ .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > th:first-child,
3059
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > th:first-child,
3060
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > th:first-child,
3061
+ .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > td:first-child,
3062
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > td:first-child,
3063
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > td:first-child {
3064
+ border-left: 0;
3065
+ }
3066
+ .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > th:last-child,
3067
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > th:last-child,
3068
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > th:last-child,
3069
+ .sg-wrapper-less .table-responsive > .table-bordered > thead > tr > td:last-child,
3070
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr > td:last-child,
3071
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr > td:last-child {
3072
+ border-right: 0;
3073
+ }
3074
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr:last-child > th,
3075
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr:last-child > th,
3076
+ .sg-wrapper-less .table-responsive > .table-bordered > tbody > tr:last-child > td,
3077
+ .sg-wrapper-less .table-responsive > .table-bordered > tfoot > tr:last-child > td {
3078
+ border-bottom: 0;
3079
+ }
3080
+ }
3081
+ .sg-wrapper-less fieldset {
3082
+ padding: 0;
3083
+ margin: 0;
3084
+ border: 0;
3085
+ min-width: 0;
3086
+ }
3087
+ .sg-wrapper-less legend {
3088
+ display: block;
3089
+ width: 100%;
3090
+ padding: 0;
3091
+ margin-bottom: 21px;
3092
+ font-size: 22.5px;
3093
+ line-height: inherit;
3094
+ color: #000000;
3095
+ border: 0;
3096
+ border-bottom: 1px solid #e5e5e5;
3097
+ }
3098
+ .sg-wrapper-less label {
3099
+ display: inline-block;
3100
+ max-width: 100%;
3101
+ margin-bottom: 5px;
3102
+ font-weight: bold;
3103
+ }
3104
+ .sg-wrapper-less input[type="search"] {
3105
+ -webkit-box-sizing: border-box;
3106
+ -moz-box-sizing: border-box;
3107
+ box-sizing: border-box;
3108
+ }
3109
+ .sg-wrapper-less input[type="radio"],
3110
+ .sg-wrapper-less input[type="checkbox"] {
3111
+ margin: 4px 0 0;
3112
+ margin-top: 1px \9;
3113
+ line-height: normal;
3114
+ }
3115
+ .sg-wrapper-less input[type="file"] {
3116
+ display: block;
3117
+ }
3118
+ .sg-wrapper-less input[type="range"] {
3119
+ display: block;
3120
+ width: 100%;
3121
+ }
3122
+ .sg-wrapper-less select[multiple],
3123
+ .sg-wrapper-less select[size] {
3124
+ height: auto;
3125
+ }
3126
+ /*
3127
+ .sg-wrapper-less input[type="file"]:focus,
3128
+ .sg-wrapper-less input[type="radio"]:focus,
3129
+ .sg-wrapper-less input[type="checkbox"]:focus {
3130
+ outline: thin dotted;
3131
+ outline: 5px auto -webkit-focus-ring-color;
3132
+ outline-offset: -2px;
3133
+ }
3134
+ */
3135
+ .sg-wrapper-less output {
3136
+ display: block;
3137
+ padding-top: 11px;
3138
+ font-size: 15px;
3139
+ line-height: 1.42857143;
3140
+ color: #333333;
3141
+ }
3142
+ .sg-wrapper-less .form-control {
3143
+ display: block;
3144
+ width: 100%;
3145
+ height: 43px;
3146
+ padding: 10px 18px;
3147
+ font-size: 15px;
3148
+ line-height: 1.42857143;
3149
+ color: #333333;
3150
+ background-color: #ffffff;
3151
+ background-image: none;
3152
+ border: 1px solid #cccccc;
3153
+ border-radius: 0;
3154
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3155
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3156
+ -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s;
3157
+ -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
3158
+ transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
3159
+ }
3160
+ .sg-wrapper-less .form-control:focus {
3161
+ border-color: #66afe9;
3162
+ outline: 0;
3163
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
3164
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
3165
+ }
3166
+ .sg-wrapper-less .form-control::-moz-placeholder {
3167
+ color: #999999;
3168
+ opacity: 1;
3169
+ }
3170
+ .sg-wrapper-less .form-control:-ms-input-placeholder {
3171
+ color: #999999;
3172
+ }
3173
+ .sg-wrapper-less .form-control::-webkit-input-placeholder {
3174
+ color: #999999;
3175
+ }
3176
+ .sg-wrapper-less .form-control[disabled],
3177
+ .sg-wrapper-less .form-control[readonly],
3178
+ .sg-wrapper-less fieldset[disabled] .form-control {
3179
+ background-color: #e6e6e6;
3180
+ opacity: 1;
3181
+ }
3182
+ .sg-wrapper-less .form-control[disabled],
3183
+ .sg-wrapper-less fieldset[disabled] .form-control {
3184
+ cursor: not-allowed;
3185
+ }
3186
+ .sg-wrapper-less textarea.form-control {
3187
+ height: auto;
3188
+ }
3189
+ .sg-wrapper-less input[type="search"] {
3190
+ -webkit-appearance: none;
3191
+ }
3192
+ @media screen and (-webkit-min-device-pixel-ratio: 0) {
3193
+ .sg-wrapper-less input[type="date"],
3194
+ .sg-wrapper-less input[type="time"],
3195
+ .sg-wrapper-less input[type="datetime-local"],
3196
+ .sg-wrapper-less input[type="month"] {
3197
+ line-height: 43px;
3198
+ }
3199
+ .sg-wrapper-less input[type="date"].input-sm,
3200
+ .sg-wrapper-less input[type="time"].input-sm,
3201
+ .sg-wrapper-less input[type="datetime-local"].input-sm,
3202
+ .sg-wrapper-less input[type="month"].input-sm,
3203
+ .sg-wrapper-less .input-group-sm input[type="date"],
3204
+ .sg-wrapper-less .input-group-sm input[type="time"],
3205
+ .sg-wrapper-less .input-group-sm input[type="datetime-local"],
3206
+ .sg-wrapper-less .input-group-sm input[type="month"] {
3207
+ line-height: 31px;
3208
+ }
3209
+ .sg-wrapper-less input[type="date"].input-lg,
3210
+ .sg-wrapper-less input[type="time"].input-lg,
3211
+ .sg-wrapper-less input[type="datetime-local"].input-lg,
3212
+ .sg-wrapper-less input[type="month"].input-lg,
3213
+ .sg-wrapper-less .input-group-lg input[type="date"],
3214
+ .sg-wrapper-less .input-group-lg input[type="time"],
3215
+ .sg-wrapper-less .input-group-lg input[type="datetime-local"],
3216
+ .sg-wrapper-less .input-group-lg input[type="month"] {
3217
+ line-height: 64px;
3218
+ }
3219
+ }
3220
+ .sg-wrapper-less .form-group {
3221
+ margin-bottom: 15px;
3222
+ }
3223
+ .sg-wrapper-less .radio,
3224
+ .sg-wrapper-less .checkbox {
3225
+ display: block;
3226
+ margin-top: 10px;
3227
+ margin-bottom: 10px;
3228
+ }
3229
+ .sg-wrapper-less .radio label,
3230
+ .sg-wrapper-less .checkbox label {
3231
+ min-height: 21px;
3232
+ padding-left: 20px;
3233
+ margin-bottom: 0;
3234
+ font-weight: normal;
3235
+ cursor: pointer;
3236
+ }
3237
+ .sg-wrapper-less .radio input[type="radio"],
3238
+ .sg-wrapper-less .radio-inline input[type="radio"],
3239
+ .sg-wrapper-less .checkbox input[type="checkbox"],
3240
+ .sg-wrapper-less .checkbox-inline input[type="checkbox"] {
3241
+ position: absolute;
3242
+ margin-left: -20px;
3243
+ margin-top: 4px \9;
3244
+ }
3245
+ .sg-wrapper-less input[type=radio]:checked,
3246
+ .sg-wrapper-less .radio input[type="radio"],
3247
+ .sg-wrapper-less .checkbox input[type="checkbox"] {
3248
+ background-color: #efefef;
3249
+ }
3250
+ .sg-wrapper-less input[type=radio]:checked:before {
3251
+ background-color: #0021C8;
3252
+ }
3253
+ .sg-wrapper-less input[type="checkbox"]:checked {
3254
+ background-color: #072dc3;
3255
+ }
3256
+ .sg-wrapper-less .radio + .radio,
3257
+ .sg-wrapper-less .checkbox + .checkbox {
3258
+ margin-top: -5px;
3259
+ }
3260
+ .sg-wrapper-less .radio-inline,
3261
+ .sg-wrapper-less .checkbox-inline {
3262
+ position: relative;
3263
+ display: inline-block;
3264
+ padding-left: 20px;
3265
+ margin-bottom: 0;
3266
+ vertical-align: middle;
3267
+ font-weight: normal;
3268
+ cursor: pointer;
3269
+ }
3270
+ .sg-wrapper-less .radio-inline + .radio-inline,
3271
+ .sg-wrapper-less .checkbox-inline + .checkbox-inline {
3272
+ margin-top: 0;
3273
+ margin-left: 10px;
3274
+ }
3275
+ .sg-wrapper-less input[type="radio"][disabled],
3276
+ .sg-wrapper-less input[type="checkbox"][disabled],
3277
+ .sg-wrapper-less input[type="radio"].disabled,
3278
+ .sg-wrapper-less input[type="checkbox"].disabled,
3279
+ .sg-wrapper-less fieldset[disabled] input[type="radio"],
3280
+ .sg-wrapper-less fieldset[disabled] input[type="checkbox"] {
3281
+ cursor: not-allowed;
3282
+ }
3283
+ .sg-wrapper-less .radio-inline.disabled,
3284
+ .sg-wrapper-less .checkbox-inline.disabled,
3285
+ .sg-wrapper-less fieldset[disabled] .radio-inline,
3286
+ .sg-wrapper-less fieldset[disabled] .checkbox-inline {
3287
+ cursor: not-allowed;
3288
+ }
3289
+ .sg-wrapper-less .radio.disabled label,
3290
+ .sg-wrapper-less .checkbox.disabled label,
3291
+ .sg-wrapper-less fieldset[disabled] .radio label,
3292
+ .sg-wrapper-less fieldset[disabled] .checkbox label {
3293
+ cursor: not-allowed;
3294
+ }
3295
+ .sg-wrapper-less .form-control-static {
3296
+ padding-top: 11px;
3297
+ padding-bottom: 11px;
3298
+ margin-bottom: 0;
3299
+ min-height: 36px;
3300
+ }
3301
+ .sg-wrapper-less .form-control-static.input-lg,
3302
+ .sg-wrapper-less .form-control-static.input-sm {
3303
+ padding-left: 0;
3304
+ padding-right: 0;
3305
+ }
3306
+ .sg-wrapper-less .input-sm {
3307
+ height: 31px;
3308
+ padding: 5px 10px;
3309
+ font-size: 13px;
3310
+ line-height: 1.5;
3311
+ border-radius: 0;
3312
+ }
3313
+ .sg-wrapper-less select.input-sm {
3314
+ height: 31px;
3315
+ line-height: 31px;
3316
+ }
3317
+ .sg-wrapper-less textarea.input-sm,
3318
+ .sg-wrapper-less select[multiple].input-sm {
3319
+ height: auto;
3320
+ }
3321
+ .sg-wrapper-less .form-group-sm .form-control {
3322
+ height: 31px;
3323
+ padding: 5px 10px;
3324
+ font-size: 13px;
3325
+ line-height: 1.5;
3326
+ border-radius: 0;
3327
+ }
3328
+ .sg-wrapper-less select.form-group-sm .form-control {
3329
+ height: 31px;
3330
+ line-height: 31px;
3331
+ }
3332
+ .sg-wrapper-less textarea.form-group-sm .form-control,
3333
+ .sg-wrapper-less select[multiple].form-group-sm .form-control {
3334
+ height: auto;
3335
+ }
3336
+ .sg-wrapper-less .form-group-sm .form-control-static {
3337
+ height: 31px;
3338
+ padding: 5px 10px;
3339
+ font-size: 13px;
3340
+ line-height: 1.5;
3341
+ min-height: 34px;
3342
+ }
3343
+ .sg-wrapper-less .input-lg {
3344
+ height: 64px;
3345
+ padding: 18px 30px;
3346
+ font-size: 19px;
3347
+ line-height: 1.3333333;
3348
+ border-radius: 0;
3349
+ }
3350
+ .sg-wrapper-less select.input-lg {
3351
+ height: 64px;
3352
+ line-height: 64px;
3353
+ }
3354
+ .sg-wrapper-less textarea.input-lg,
3355
+ .sg-wrapper-less select[multiple].input-lg {
3356
+ height: auto;
3357
+ }
3358
+ .sg-wrapper-less .form-group-lg .form-control {
3359
+ height: 64px;
3360
+ padding: 18px 30px;
3361
+ font-size: 19px;
3362
+ line-height: 1.3333333;
3363
+ border-radius: 0;
3364
+ }
3365
+ .sg-wrapper-less select.form-group-lg .form-control {
3366
+ height: 64px;
3367
+ line-height: 64px;
3368
+ }
3369
+ .sg-wrapper-less textarea.form-group-lg .form-control,
3370
+ .sg-wrapper-less select[multiple].form-group-lg .form-control {
3371
+ height: auto;
3372
+ }
3373
+ .sg-wrapper-less .form-group-lg .form-control-static {
3374
+ height: 64px;
3375
+ padding: 18px 30px;
3376
+ font-size: 19px;
3377
+ line-height: 1.3333333;
3378
+ min-height: 40px;
3379
+ }
3380
+ .sg-wrapper-less .has-feedback {
3381
+ position: relative;
3382
+ }
3383
+ .sg-wrapper-less .has-feedback .form-control {
3384
+ padding-right: 53.75px;
3385
+ }
3386
+ .sg-wrapper-less .form-control-feedback {
3387
+ position: absolute;
3388
+ top: 0;
3389
+ right: 0;
3390
+ z-index: 2;
3391
+ display: block;
3392
+ width: 43px;
3393
+ height: 43px;
3394
+ line-height: 43px;
3395
+ text-align: center;
3396
+ pointer-events: none;
3397
+ }
3398
+ .sg-wrapper-less .input-lg + .form-control-feedback {
3399
+ width: 64px;
3400
+ height: 64px;
3401
+ line-height: 64px;
3402
+ }
3403
+ .sg-wrapper-less .input-sm + .form-control-feedback {
3404
+ width: 31px;
3405
+ height: 31px;
3406
+ line-height: 31px;
3407
+ }
3408
+ .sg-wrapper-less .has-success .help-block,
3409
+ .sg-wrapper-less .has-success .control-label,
3410
+ .sg-wrapper-less .has-success .radio,
3411
+ .sg-wrapper-less .has-success .checkbox,
3412
+ .sg-wrapper-less .has-success .radio-inline,
3413
+ .sg-wrapper-less .has-success .checkbox-inline,
3414
+ .sg-wrapper-less .has-success.radio label,
3415
+ .sg-wrapper-less .has-success.checkbox label,
3416
+ .sg-wrapper-less .has-success.radio-inline label,
3417
+ .sg-wrapper-less .has-success.checkbox-inline label {
3418
+ color: #ffffff;
3419
+ }
3420
+ .sg-wrapper-less .has-success .form-control {
3421
+ border-color: #ffffff;
3422
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3423
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3424
+ }
3425
+ .sg-wrapper-less .has-success .form-control:focus {
3426
+ border-color: #e6e6e6;
3427
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3428
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3429
+ }
3430
+ .sg-wrapper-less .has-success .input-group-addon {
3431
+ color: #ffffff;
3432
+ border-color: #ffffff;
3433
+ background-color: #3fb618;
3434
+ }
3435
+ .sg-wrapper-less .has-success .form-control-feedback {
3436
+ color: #ffffff;
3437
+ }
3438
+ .sg-wrapper-less .has-warning .help-block,
3439
+ .sg-wrapper-less .has-warning .control-label,
3440
+ .sg-wrapper-less .has-warning .radio,
3441
+ .sg-wrapper-less .has-warning .checkbox,
3442
+ .sg-wrapper-less .has-warning .radio-inline,
3443
+ .sg-wrapper-less .has-warning .checkbox-inline,
3444
+ .sg-wrapper-less .has-warning.radio label,
3445
+ .sg-wrapper-less .has-warning.checkbox label,
3446
+ .sg-wrapper-less .has-warning.radio-inline label,
3447
+ .sg-wrapper-less .has-warning.checkbox-inline label {
3448
+ color: #ffffff;
3449
+ }
3450
+ .sg-wrapper-less .has-warning .form-control {
3451
+ border-color: #ffffff;
3452
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3453
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3454
+ }
3455
+ .sg-wrapper-less .has-warning .form-control:focus {
3456
+ border-color: #e6e6e6;
3457
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3458
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3459
+ }
3460
+ .sg-wrapper-less .has-warning .input-group-addon {
3461
+ color: #ffffff;
3462
+ border-color: #ffffff;
3463
+ background-color: #ff7518;
3464
+ }
3465
+ .sg-wrapper-less .has-warning .form-control-feedback {
3466
+ color: #ffffff;
3467
+ }
3468
+ .sg-wrapper-less .has-error .help-block,
3469
+ .sg-wrapper-less .has-error .control-label,
3470
+ .sg-wrapper-less .has-error .radio,
3471
+ .sg-wrapper-less .has-error .checkbox,
3472
+ .sg-wrapper-less .has-error .radio-inline,
3473
+ .sg-wrapper-less .has-error .checkbox-inline,
3474
+ .sg-wrapper-less .has-error.radio label,
3475
+ .sg-wrapper-less .has-error.checkbox label,
3476
+ .sg-wrapper-less .has-error.radio-inline label,
3477
+ .sg-wrapper-less .has-error.checkbox-inline label {
3478
+ color: #ffffff;
3479
+ }
3480
+ .sg-wrapper-less .has-error .form-control {
3481
+ border-color: #ffffff;
3482
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3483
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
3484
+ }
3485
+ .sg-wrapper-less .has-error .form-control:focus {
3486
+ border-color: #e6e6e6;
3487
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3488
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffffff;
3489
+ }
3490
+ .sg-wrapper-less .has-error .input-group-addon {
3491
+ color: #ffffff;
3492
+ border-color: #ffffff;
3493
+ background-color: #ff0039;
3494
+ }
3495
+ .sg-wrapper-less .has-error .form-control-feedback {
3496
+ color: #ffffff;
3497
+ }
3498
+ .sg-wrapper-less .has-feedback label ~ .form-control-feedback {
3499
+ top: 26px;
3500
+ }
3501
+ .sg-wrapper-less .has-feedback label.sr-only ~ .form-control-feedback {
3502
+ top: 0;
3503
+ }
3504
+ .sg-wrapper-less .help-block {
3505
+ display: block;
3506
+ margin-top: 5px;
3507
+ margin-bottom: 10px;
3508
+ color: #737373;
3509
+ }
3510
+ @media (min-width: 768px) {
3511
+ .sg-wrapper-less .form-inline .form-group {
3512
+ display: inline-block;
3513
+ margin-bottom: 0;
3514
+ vertical-align: middle;
3515
+ }
3516
+ .sg-wrapper-less .form-inline .form-control {
3517
+ display: inline-block;
3518
+ width: auto;
3519
+ vertical-align: middle;
3520
+ }
3521
+ .sg-wrapper-less .form-inline .form-control-static {
3522
+ display: inline-block;
3523
+ }
3524
+ .sg-wrapper-less .form-inline .input-group {
3525
+ display: inline-table;
3526
+ vertical-align: middle;
3527
+ }
3528
+ .sg-wrapper-less .form-inline .input-group .input-group-addon,
3529
+ .sg-wrapper-less .form-inline .input-group .input-group-btn,
3530
+ .sg-wrapper-less .form-inline .input-group .form-control {
3531
+ width: auto;
3532
+ }
3533
+ .sg-wrapper-less .form-inline .input-group > .form-control {
3534
+ width: 100%;
3535
+ }
3536
+ .sg-wrapper-less .form-inline .control-label {
3537
+ margin-bottom: 0;
3538
+ vertical-align: middle;
3539
+ }
3540
+ .sg-wrapper-less .form-inline .radio,
3541
+ .sg-wrapper-less .form-inline .checkbox {
3542
+ display: inline-block;
3543
+ margin-top: 0;
3544
+ margin-bottom: 0;
3545
+ vertical-align: middle;
3546
+ }
3547
+ .sg-wrapper-less .form-inline .radio label,
3548
+ .sg-wrapper-less .form-inline .checkbox label {
3549
+ padding-left: 0;
3550
+ }
3551
+ .sg-wrapper-less .form-inline .radio input[type="radio"],
3552
+ .sg-wrapper-less .form-inline .checkbox input[type="checkbox"] {
3553
+ position: relative;
3554
+ margin-left: 0;
3555
+ }
3556
+ .sg-wrapper-less .form-inline .has-feedback .form-control-feedback {
3557
+ top: 0;
3558
+ }
3559
+ }
3560
+ .sg-wrapper-less .form-horizontal .radio,
3561
+ .sg-wrapper-less .form-horizontal .checkbox,
3562
+ .sg-wrapper-less .form-horizontal .radio-inline,
3563
+ .sg-wrapper-less .form-horizontal .checkbox-inline {
3564
+ margin-top: 0;
3565
+ margin-bottom: 0;
3566
+ padding-top: 11px;
3567
+ }
3568
+ .sg-wrapper-less .form-horizontal .radio,
3569
+ .sg-wrapper-less .form-horizontal .checkbox {
3570
+ min-height: 32px;
3571
+ }
3572
+ .sg-wrapper-less .form-horizontal .form-group {
3573
+ margin-left: -15px;
3574
+ margin-right: -15px;
3575
+ }
3576
+ @media (min-width: 768px) {
3577
+ .sg-wrapper-less .form-horizontal .control-label {
3578
+ text-align: right;
3579
+ margin-bottom: 0;
3580
+ padding-top: 11px;
3581
+ }
3582
+ }
3583
+ .sg-wrapper-less .form-horizontal .has-feedback .form-control-feedback {
3584
+ right: 15px;
3585
+ }
3586
+ @media (min-width: 768px) {
3587
+ .sg-wrapper-less .form-horizontal .form-group-lg .control-label {
3588
+ padding-top: 24.9999994px;
3589
+ }
3590
+ }
3591
+ @media (min-width: 768px) {
3592
+ .sg-wrapper-less .form-horizontal .form-group-sm .control-label {
3593
+ padding-top: 6px;
3594
+ }
3595
+ }
3596
+ .sg-wrapper-less .btn {
3597
+ display: inline-block;
3598
+ margin-bottom: 0;
3599
+ font-weight: normal;
3600
+ text-align: center;
3601
+ vertical-align: middle;
3602
+ -ms-touch-action: manipulation;
3603
+ touch-action: manipulation;
3604
+ cursor: pointer;
3605
+ background-image: none;
3606
+ border: 1px solid transparent;
3607
+ white-space: nowrap;
3608
+ padding: 10px 18px;
3609
+ font-size: 15px;
3610
+ line-height: 1.42857143;
3611
+ border-radius: 0;
3612
+ -webkit-user-select: none;
3613
+ -moz-user-select: none;
3614
+ -ms-user-select: none;
3615
+ user-select: none;
3616
+ }
3617
+ /*
3618
+ .sg-wrapper-less .btn:focus,
3619
+ .sg-wrapper-less .btn:active:focus,
3620
+ .sg-wrapper-less .btn.active:focus,
3621
+ .sg-wrapper-less .btn.focus,
3622
+ .sg-wrapper-less .btn:active.focus,
3623
+ .sg-wrapper-less .btn.active.focus {
3624
+ outline: thin dotted;
3625
+ outline: 5px auto -webkit-focus-ring-color;
3626
+ outline-offset: -2px;
3627
+ }*/
3628
+ .sg-wrapper-less .btn:hover,
3629
+ .sg-wrapper-less .btn:focus,
3630
+ .sg-wrapper-less .btn.focus {
3631
+ color: #ffffff;
3632
+ text-decoration: none;
3633
+ }
3634
+ .sg-wrapper-less .btn:active,
3635
+ .sg-wrapper-less .btn.active {
3636
+ outline: 0;
3637
+ background-image: none;
3638
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3639
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3640
+ }
3641
+ .sg-wrapper-less .btn.disabled,
3642
+ .sg-wrapper-less .btn[disabled],
3643
+ .sg-wrapper-less fieldset[disabled] .btn {
3644
+ cursor: not-allowed;
3645
+ pointer-events: none;
3646
+ opacity: 0.65;
3647
+ filter: alpha(opacity=65);
3648
+ -webkit-box-shadow: none;
3649
+ box-shadow: none;
3650
+ }
3651
+ .sg-wrapper-less .btn-default {
3652
+ color: #ffffff;
3653
+ background-color: #222222;
3654
+ border-color: #222222;
3655
+ }
3656
+ .sg-wrapper-less .btn-default:hover,
3657
+ .sg-wrapper-less .btn-default:focus,
3658
+ .sg-wrapper-less .btn-default.focus,
3659
+ .sg-wrapper-less .btn-default:active,
3660
+ .sg-wrapper-less .btn-default.active,
3661
+ .sg-wrapper-less .open > .dropdown-toggle.btn-default {
3662
+ color: #ffffff;
3663
+ background-color: #090909;
3664
+ border-color: #040404;
3665
+ }
3666
+ .sg-wrapper-less .btn-default:active,
3667
+ .sg-wrapper-less .btn-default.active,
3668
+ .sg-wrapper-less .open > .dropdown-toggle.btn-default {
3669
+ background-image: none;
3670
+ }
3671
+ .sg-wrapper-less .btn-default.disabled,
3672
+ .sg-wrapper-less .btn-default[disabled],
3673
+ .sg-wrapper-less fieldset[disabled] .btn-default,
3674
+ .sg-wrapper-less .btn-default.disabled:hover,
3675
+ .sg-wrapper-less .btn-default[disabled]:hover,
3676
+ .sg-wrapper-less fieldset[disabled] .btn-default:hover,
3677
+ .sg-wrapper-less .btn-default.disabled:focus,
3678
+ .sg-wrapper-less .btn-default[disabled]:focus,
3679
+ .sg-wrapper-less fieldset[disabled] .btn-default:focus,
3680
+ .sg-wrapper-less .btn-default.disabled.focus,
3681
+ .sg-wrapper-less .btn-default[disabled].focus,
3682
+ .sg-wrapper-less fieldset[disabled] .btn-default.focus,
3683
+ .sg-wrapper-less .btn-default.disabled:active,
3684
+ .sg-wrapper-less .btn-default[disabled]:active,
3685
+ .sg-wrapper-less fieldset[disabled] .btn-default:active,
3686
+ .sg-wrapper-less .btn-default.disabled.active,
3687
+ .sg-wrapper-less .btn-default[disabled].active,
3688
+ .sg-wrapper-less fieldset[disabled] .btn-default.active {
3689
+ background-color: #222222;
3690
+ border-color: #222222;
3691
+ }
3692
+ .sg-wrapper-less .btn-default .badge {
3693
+ color: #222222;
3694
+ background-color: #ffffff;
3695
+ }
3696
+ .sg-wrapper-less .btn-primary {
3697
+ color: #0021C8;
3698
+ background-color: #ffffff;
3699
+ border-color: #0021C8;
3700
+ border-radius: 8px;
3701
+ font-weight: bold;
3702
+ }
3703
+ .sg-wrapper-less .btn-primary:hover,
3704
+ .sg-wrapper-less .btn-primary:focus,
3705
+ .sg-wrapper-less .btn-primary.focus,
3706
+ .sg-wrapper-less .btn-primary:active,
3707
+ .sg-wrapper-less .btn-primary.active,
3708
+ .sg-wrapper-less .open > .dropdown-toggle.btn-primary {
3709
+ color: #ffffff;
3710
+ background-color: #0021C8;
3711
+ border-color: #ffffff;
3712
+ }
3713
+ .sg-wrapper-less .btn-primary:active,
3714
+ .sg-wrapper-less .btn-primary.active,
3715
+ .sg-wrapper-less .open > .dropdown-toggle.btn-primary {
3716
+ background-image: none;
3717
+ }
3718
+ .sg-wrapper-less .btn-primary.disabled,
3719
+ .sg-wrapper-less .btn-primary[disabled],
3720
+ .sg-wrapper-less fieldset[disabled] .btn-primary,
3721
+ .sg-wrapper-less .btn-primary.disabled:hover,
3722
+ .sg-wrapper-less .btn-primary[disabled]:hover,
3723
+ .sg-wrapper-less fieldset[disabled] .btn-primary:hover,
3724
+ .sg-wrapper-less .btn-primary.disabled:focus,
3725
+ .sg-wrapper-less .btn-primary[disabled]:focus,
3726
+ .sg-wrapper-less fieldset[disabled] .btn-primary:focus,
3727
+ .sg-wrapper-less .btn-primary.disabled.focus,
3728
+ .sg-wrapper-less .btn-primary[disabled].focus,
3729
+ .sg-wrapper-less fieldset[disabled] .btn-primary.focus,
3730
+ .sg-wrapper-less .btn-primary.disabled:active,
3731
+ .sg-wrapper-less .btn-primary[disabled]:active,
3732
+ .sg-wrapper-less fieldset[disabled] .btn-primary:active,
3733
+ .sg-wrapper-less .btn-primary.disabled.active,
3734
+ .sg-wrapper-less .btn-primary[disabled].active,
3735
+ .sg-wrapper-less fieldset[disabled] .btn-primary.active {
3736
+ background-color: #ffffff;
3737
+ border-color: #989898;
3738
+ color: #C9C9C9;
3739
+ }
3740
+ .sg-wrapper-less .btn-primary .badge {
3741
+ color: #2780e3;
3742
+ background-color: #ffffff;
3743
+ }
3744
+ .sg-wrapper-less .btn-success {
3745
+ color: #ffffff !important;
3746
+ background-color: #0021C8;
3747
+ border-color: #0021C8;
3748
+ border-radius: 8px;
3749
+ }
3750
+ .sg-wrapper-less .btn-success:hover,
3751
+ .sg-wrapper-less .btn-success:focus,
3752
+ .sg-wrapper-less .btn-success.focus,
3753
+ .sg-wrapper-less .btn-success:active,
3754
+ .sg-wrapper-less .btn-success.active,
3755
+ .sg-wrapper-less .open > .dropdown-toggle.btn-success {
3756
+ color: #0021C8 !important;
3757
+ background-color: #ffffff;
3758
+ border-color: #0021C8;
3759
+ box-shadow: none;
3760
+ text-decoration: none !important;
3761
+ }
3762
+ .sg-wrapper-less .btn-success:active,
3763
+ .sg-wrapper-less .btn-success.active,
3764
+ .sg-wrapper-less .open > .dropdown-toggle.btn-success {
3765
+ background-image: none;
3766
+ }
3767
+ .sg-wrapper-less .btn-success.disabled,
3768
+ .sg-wrapper-less .btn-success[disabled],
3769
+ .sg-wrapper-less fieldset[disabled] .btn-success,
3770
+ .sg-wrapper-less .btn-success.disabled:hover,
3771
+ .sg-wrapper-less .btn-success[disabled]:hover,
3772
+ .sg-wrapper-less fieldset[disabled] .btn-success:hover,
3773
+ .sg-wrapper-less .btn-success.disabled:focus,
3774
+ .sg-wrapper-less .btn-success[disabled]:focus,
3775
+ .sg-wrapper-less fieldset[disabled] .btn-success:focus,
3776
+ .sg-wrapper-less .btn-success.disabled.focus,
3777
+ .sg-wrapper-less .btn-success[disabled].focus,
3778
+ .sg-wrapper-less fieldset[disabled] .btn-success.focus,
3779
+ .sg-wrapper-less .btn-success.disabled:active,
3780
+ .sg-wrapper-less .btn-success[disabled]:active,
3781
+ .sg-wrapper-less fieldset[disabled] .btn-success:active,
3782
+ .sg-wrapper-less .btn-success.disabled.active,
3783
+ .sg-wrapper-less .btn-success[disabled].active,
3784
+ .sg-wrapper-less fieldset[disabled] .btn-success.active {
3785
+ background-color: rgba(0, 33, 200, 0.2);
3786
+ border-color: rgba(0, 33, 200, 0.2);
3787
+ }
3788
+ .sg-wrapper-less .btn-success .badge {
3789
+ color: #3fb618;
3790
+ background-color: #ffffff;
3791
+ }
3792
+ .sg-wrapper-less .btn-info {
3793
+ color: #ffffff;
3794
+ background-color: #9954bb;
3795
+ border-color: #9954bb;
3796
+ }
3797
+ .sg-wrapper-less .btn-info:hover,
3798
+ .sg-wrapper-less .btn-info:focus,
3799
+ .sg-wrapper-less .btn-info.focus,
3800
+ .sg-wrapper-less .btn-info:active,
3801
+ .sg-wrapper-less .btn-info.active,
3802
+ .sg-wrapper-less .open > .dropdown-toggle.btn-info {
3803
+ color: #ffffff;
3804
+ background-color: #7e3f9d;
3805
+ border-color: #783c96;
3806
+ }
3807
+ .sg-wrapper-less .btn-info:active,
3808
+ .sg-wrapper-less .btn-info.active,
3809
+ .sg-wrapper-less .open > .dropdown-toggle.btn-info {
3810
+ background-image: none;
3811
+ }
3812
+ .sg-wrapper-less .btn-info.disabled,
3813
+ .sg-wrapper-less .btn-info[disabled],
3814
+ .sg-wrapper-less fieldset[disabled] .btn-info,
3815
+ .sg-wrapper-less .btn-info.disabled:hover,
3816
+ .sg-wrapper-less .btn-info[disabled]:hover,
3817
+ .sg-wrapper-less fieldset[disabled] .btn-info:hover,
3818
+ .sg-wrapper-less .btn-info.disabled:focus,
3819
+ .sg-wrapper-less .btn-info[disabled]:focus,
3820
+ .sg-wrapper-less fieldset[disabled] .btn-info:focus,
3821
+ .sg-wrapper-less .btn-info.disabled.focus,
3822
+ .sg-wrapper-less .btn-info[disabled].focus,
3823
+ .sg-wrapper-less fieldset[disabled] .btn-info.focus,
3824
+ .sg-wrapper-less .btn-info.disabled:active,
3825
+ .sg-wrapper-less .btn-info[disabled]:active,
3826
+ .sg-wrapper-less fieldset[disabled] .btn-info:active,
3827
+ .sg-wrapper-less .btn-info.disabled.active,
3828
+ .sg-wrapper-less .btn-info[disabled].active,
3829
+ .sg-wrapper-less fieldset[disabled] .btn-info.active {
3830
+ background-color: #9954bb;
3831
+ border-color: #9954bb;
3832
+ }
3833
+ .sg-wrapper-less .btn-info .badge {
3834
+ color: #9954bb;
3835
+ background-color: #ffffff;
3836
+ }
3837
+ .sg-wrapper-less .btn-warning {
3838
+ color: #ffffff;
3839
+ background-color: #ff7518;
3840
+ border-color: #ff7518;
3841
+ }
3842
+ .sg-wrapper-less .btn-warning:hover,
3843
+ .sg-wrapper-less .btn-warning:focus,
3844
+ .sg-wrapper-less .btn-warning.focus,
3845
+ .sg-wrapper-less .btn-warning:active,
3846
+ .sg-wrapper-less .btn-warning.active,
3847
+ .sg-wrapper-less .open > .dropdown-toggle.btn-warning {
3848
+ color: #ffffff;
3849
+ background-color: #e45c00;
3850
+ border-color: #da5800;
3851
+ }
3852
+ .sg-wrapper-less .btn-warning:active,
3853
+ .sg-wrapper-less .btn-warning.active,
3854
+ .sg-wrapper-less .open > .dropdown-toggle.btn-warning {
3855
+ background-image: none;
3856
+ }
3857
+ .sg-wrapper-less .btn-warning.disabled,
3858
+ .sg-wrapper-less .btn-warning[disabled],
3859
+ .sg-wrapper-less fieldset[disabled] .btn-warning,
3860
+ .sg-wrapper-less .btn-warning.disabled:hover,
3861
+ .sg-wrapper-less .btn-warning[disabled]:hover,
3862
+ .sg-wrapper-less fieldset[disabled] .btn-warning:hover,
3863
+ .sg-wrapper-less .btn-warning.disabled:focus,
3864
+ .sg-wrapper-less .btn-warning[disabled]:focus,
3865
+ .sg-wrapper-less fieldset[disabled] .btn-warning:focus,
3866
+ .sg-wrapper-less .btn-warning.disabled.focus,
3867
+ .sg-wrapper-less .btn-warning[disabled].focus,
3868
+ .sg-wrapper-less fieldset[disabled] .btn-warning.focus,
3869
+ .sg-wrapper-less .btn-warning.disabled:active,
3870
+ .sg-wrapper-less .btn-warning[disabled]:active,
3871
+ .sg-wrapper-less fieldset[disabled] .btn-warning:active,
3872
+ .sg-wrapper-less .btn-warning.disabled.active,
3873
+ .sg-wrapper-less .btn-warning[disabled].active,
3874
+ .sg-wrapper-less fieldset[disabled] .btn-warning.active {
3875
+ background-color: #ff7518;
3876
+ border-color: #ff7518;
3877
+ }
3878
+ .sg-wrapper-less .btn-warning .badge {
3879
+ color: #ff7518;
3880
+ background-color: #ffffff;
3881
+ }
3882
+ .sg-wrapper-less .btn-danger {
3883
+ color: #ffffff;
3884
+ background-color: #C20000;
3885
+ border-color: #C20000;
3886
+ border-radius: 8px;
3887
+ }
3888
+ .sg-wrapper-less .btn-danger:hover,
3889
+ .sg-wrapper-less .btn-danger:focus,
3890
+ .sg-wrapper-less .btn-danger.focus,
3891
+ .sg-wrapper-less .btn-danger:active,
3892
+ .sg-wrapper-less .btn-danger.active,
3893
+ .sg-wrapper-less .open > .dropdown-toggle.btn-danger {
3894
+ color: #C20000;
3895
+ background-color: #ffffff;
3896
+ border-color: #C20000;
3897
+ }
3898
+ .sg-wrapper-less .btn-danger:active,
3899
+ .sg-wrapper-less .btn-danger.active,
3900
+ .sg-wrapper-less .open > .dropdown-toggle.btn-danger {
3901
+ background-image: none;
3902
+ }
3903
+ .sg-wrapper-less .btn-danger.disabled,
3904
+ .sg-wrapper-less .btn-danger[disabled],
3905
+ .sg-wrapper-less fieldset[disabled] .btn-danger,
3906
+ .sg-wrapper-less .btn-danger.disabled:hover,
3907
+ .sg-wrapper-less .btn-danger[disabled]:hover,
3908
+ .sg-wrapper-less fieldset[disabled] .btn-danger:hover,
3909
+ .sg-wrapper-less .btn-danger.disabled:focus,
3910
+ .sg-wrapper-less .btn-danger[disabled]:focus,
3911
+ .sg-wrapper-less fieldset[disabled] .btn-danger:focus,
3912
+ .sg-wrapper-less .btn-danger.disabled.focus,
3913
+ .sg-wrapper-less .btn-danger[disabled].focus,
3914
+ .sg-wrapper-less fieldset[disabled] .btn-danger.focus,
3915
+ .sg-wrapper-less .btn-danger.disabled:active,
3916
+ .sg-wrapper-less .btn-danger[disabled]:active,
3917
+ .sg-wrapper-less fieldset[disabled] .btn-danger:active,
3918
+ .sg-wrapper-less .btn-danger.disabled.active,
3919
+ .sg-wrapper-less .btn-danger[disabled].active,
3920
+ .sg-wrapper-less fieldset[disabled] .btn-danger.active {
3921
+ background-color: #ff0039;
3922
+ border-color: #ff0039;
3923
+ }
3924
+ .sg-wrapper-less .btn-danger .badge {
3925
+ color: #ff0039;
3926
+ background-color: #ffffff;
3927
+ }
3928
+ .sg-wrapper-less .btn-link {
3929
+ color: #2780e3;
3930
+ font-weight: normal;
3931
+ border-radius: 0;
3932
+ }
3933
+ .sg-wrapper-less .btn-link,
3934
+ .sg-wrapper-less .btn-link:active,
3935
+ .sg-wrapper-less .btn-link.active,
3936
+ .sg-wrapper-less .btn-link[disabled],
3937
+ .sg-wrapper-less fieldset[disabled] .btn-link {
3938
+ background-color: transparent;
3939
+ -webkit-box-shadow: none;
3940
+ box-shadow: none;
3941
+ }
3942
+ .sg-wrapper-less .btn-link,
3943
+ .sg-wrapper-less .btn-link:hover,
3944
+ .sg-wrapper-less .btn-link:focus,
3945
+ .sg-wrapper-less .btn-link:active {
3946
+ border-color: transparent;
3947
+ }
3948
+ .sg-wrapper-less .btn-link:hover,
3949
+ .sg-wrapper-less .btn-link:focus {
3950
+ color: #165ba8;
3951
+ text-decoration: underline;
3952
+ background-color: transparent;
3953
+ }
3954
+ .sg-wrapper-less .btn-link[disabled]:hover,
3955
+ .sg-wrapper-less fieldset[disabled] .btn-link:hover,
3956
+ .sg-wrapper-less .btn-link[disabled]:focus,
3957
+ .sg-wrapper-less fieldset[disabled] .btn-link:focus {
3958
+ color: #999999;
3959
+ text-decoration: none;
3960
+ }
3961
+ .sg-wrapper-less .btn-lg,
3962
+ .sg-wrapper-less .btn-group-lg > .btn {
3963
+ padding: 18px 30px;
3964
+ font-size: 19px;
3965
+ line-height: 1.3333333;
3966
+ border-radius: 0;
3967
+ }
3968
+ .sg-wrapper-less .btn-sm,
3969
+ .sg-wrapper-less .btn-group-sm > .btn {
3970
+ padding: 5px 10px;
3971
+ font-size: 13px;
3972
+ line-height: 1.5;
3973
+ border-radius: 0;
3974
+ }
3975
+ .sg-wrapper-less .btn-xs,
3976
+ .sg-wrapper-less .btn-group-xs > .btn {
3977
+ padding: 1px 5px;
3978
+ font-size: 13px;
3979
+ line-height: 1.5;
3980
+ border-radius: 0;
3981
+ }
3982
+ .sg-wrapper-less .btn-block {
3983
+ display: block;
3984
+ width: 100%;
3985
+ }
3986
+ .sg-wrapper-less .btn-block + .btn-block {
3987
+ margin-top: 5px;
3988
+ }
3989
+ .sg-wrapper-less input[type="submit"].btn-block,
3990
+ .sg-wrapper-less input[type="reset"].btn-block,
3991
+ .sg-wrapper-less input[type="button"].btn-block {
3992
+ width: 100%;
3993
+ }
3994
+ .sg-wrapper-less .fade {
3995
+ opacity: 0;
3996
+ -webkit-transition: opacity 0.15s linear;
3997
+ -o-transition: opacity 0.15s linear;
3998
+ transition: opacity 0.15s linear;
3999
+ }
4000
+ .sg-wrapper-less .fade.in {
4001
+ opacity: 1;
4002
+ }
4003
+ .sg-wrapper-less .collapse {
4004
+ display: none;
4005
+ }
4006
+ .sg-wrapper-less .collapse.in {
4007
+ display: block;
4008
+ }
4009
+ .sg-wrapper-less tr.collapse.in {
4010
+ display: table-row;
4011
+ }
4012
+ .sg-wrapper-less tbody.collapse.in {
4013
+ display: table-row-group;
4014
+ }
4015
+ .sg-wrapper-less .collapsing {
4016
+ position: relative;
4017
+ height: 0;
4018
+ overflow: hidden;
4019
+ -webkit-transition-property: height, visibility;
4020
+ -o-transition-property: height, visibility;
4021
+ transition-property: height, visibility;
4022
+ -webkit-transition-duration: 0.35s;
4023
+ -o-transition-duration: 0.35s;
4024
+ transition-duration: 0.35s;
4025
+ -webkit-transition-timing-function: ease;
4026
+ -o-transition-timing-function: ease;
4027
+ transition-timing-function: ease;
4028
+ }
4029
+ .sg-wrapper-less .caret {
4030
+ display: inline-block;
4031
+ width: 0;
4032
+ height: 0;
4033
+ margin-left: 2px;
4034
+ vertical-align: middle;
4035
+ border-top: 4px dashed;
4036
+ border-right: 4px solid transparent;
4037
+ border-left: 4px solid transparent;
4038
+ }
4039
+ .sg-wrapper-less .dropup,
4040
+ .sg-wrapper-less .dropdown {
4041
+ position: relative;
4042
+ }
4043
+ .sg-wrapper-less .dropdown-toggle:focus {
4044
+ outline: 0;
4045
+ }
4046
+ .sg-wrapper-less .dropdown-menu {
4047
+ position: absolute;
4048
+ top: 100%;
4049
+ left: 0;
4050
+ z-index: 1000;
4051
+ display: none;
4052
+ float: left;
4053
+ min-width: 160px;
4054
+ padding: 5px 0;
4055
+ margin: 2px 0 0;
4056
+ list-style: none;
4057
+ font-size: 15px;
4058
+ text-align: left;
4059
+ background-color: #ffffff;
4060
+ border: 1px solid #cccccc;
4061
+ border: 1px solid rgba(0, 0, 0, 0.15);
4062
+ border-radius: 0;
4063
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
4064
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
4065
+ -webkit-background-clip: padding-box;
4066
+ background-clip: padding-box;
4067
+ }
4068
+ .sg-wrapper-less .dropdown-menu.pull-right {
4069
+ right: 0;
4070
+ left: auto;
4071
+ }
4072
+ .sg-wrapper-less .dropdown-menu .divider {
4073
+ height: 1px;
4074
+ margin: 9.5px 0;
4075
+ overflow: hidden;
4076
+ background-color: #e5e5e5;
4077
+ }
4078
+ .sg-wrapper-less .dropdown-menu > li > a {
4079
+ display: block;
4080
+ padding: 3px 20px;
4081
+ clear: both;
4082
+ font-weight: normal;
4083
+ line-height: 1.42857143;
4084
+ color: #333333;
4085
+ white-space: nowrap;
4086
+ }
4087
+ .sg-wrapper-less .dropdown-menu > li > a:hover,
4088
+ .sg-wrapper-less .dropdown-menu > li > a:focus {
4089
+ text-decoration: none;
4090
+ color: #ffffff;
4091
+ background-color: #0021C8;
4092
+ }
4093
+ .sg-wrapper-less .dropdown-menu > .active > a,
4094
+ .sg-wrapper-less .dropdown-menu > .active > a:hover,
4095
+ .sg-wrapper-less .dropdown-menu > .active > a:focus {
4096
+ color: #ffffff;
4097
+ text-decoration: none;
4098
+ outline: 0;
4099
+ background-color: #2780e3;
4100
+ }
4101
+ .sg-wrapper-less .dropdown-menu > .disabled > a,
4102
+ .sg-wrapper-less .dropdown-menu > .disabled > a:hover,
4103
+ .sg-wrapper-less .dropdown-menu > .disabled > a:focus {
4104
+ color: #999999;
4105
+ }
4106
+ .sg-wrapper-less .dropdown-menu > .disabled > a:hover,
4107
+ .sg-wrapper-less .dropdown-menu > .disabled > a:focus {
4108
+ text-decoration: none;
4109
+ background-color: transparent;
4110
+ background-image: none;
4111
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
4112
+ cursor: not-allowed;
4113
+ }
4114
+ .sg-wrapper-less .open > .dropdown-menu {
4115
+ display: block;
4116
+ }
4117
+ .sg-wrapper-less .open > a {
4118
+ outline: 0;
4119
+ }
4120
+ .sg-wrapper-less .dropdown-menu-right {
4121
+ left: auto;
4122
+ right: 0;
4123
+ }
4124
+ .sg-wrapper-less .dropdown-menu-left {
4125
+ left: 0;
4126
+ right: auto;
4127
+ }
4128
+ .sg-wrapper-less .dropdown-header {
4129
+ display: block;
4130
+ padding: 3px 20px;
4131
+ font-size: 13px;
4132
+ line-height: 1.42857143;
4133
+ color: #999999;
4134
+ white-space: nowrap;
4135
+ }
4136
+ .sg-wrapper-less .dropdown-backdrop {
4137
+ position: fixed;
4138
+ left: 0;
4139
+ right: 0;
4140
+ bottom: 0;
4141
+ top: 0;
4142
+ z-index: 990;
4143
+ }
4144
+ .sg-wrapper-less .pull-right > .dropdown-menu {
4145
+ right: 0;
4146
+ left: auto;
4147
+ }
4148
+ .sg-wrapper-less .dropup .caret,
4149
+ .sg-wrapper-less .navbar-fixed-bottom .dropdown .caret {
4150
+ border-top: 0;
4151
+ border-bottom: 4px solid;
4152
+ content: "";
4153
+ }
4154
+ .sg-wrapper-less .dropup .dropdown-menu,
4155
+ .sg-wrapper-less .navbar-fixed-bottom .dropdown .dropdown-menu {
4156
+ top: auto;
4157
+ bottom: 100%;
4158
+ margin-bottom: 2px;
4159
+ }
4160
+ @media (min-width: 768px) {
4161
+ .sg-wrapper-less .navbar-right .dropdown-menu {
4162
+ left: auto;
4163
+ right: 0;
4164
+ }
4165
+ .sg-wrapper-less .navbar-right .dropdown-menu-left {
4166
+ left: 0;
4167
+ right: auto;
4168
+ }
4169
+ }
4170
+ .sg-wrapper-less .btn-group,
4171
+ .sg-wrapper-less .btn-group-vertical {
4172
+ position: relative;
4173
+ display: inline-block;
4174
+ vertical-align: middle;
4175
+ }
4176
+ .sg-wrapper-less .btn-group > .btn,
4177
+ .sg-wrapper-less .btn-group-vertical > .btn {
4178
+ position: relative;
4179
+ float: left;
4180
+ }
4181
+ .sg-wrapper-less .btn-group > .btn:hover,
4182
+ .sg-wrapper-less .btn-group-vertical > .btn:hover,
4183
+ .sg-wrapper-less .btn-group > .btn:focus,
4184
+ .sg-wrapper-less .btn-group-vertical > .btn:focus,
4185
+ .sg-wrapper-less .btn-group > .btn:active,
4186
+ .sg-wrapper-less .btn-group-vertical > .btn:active,
4187
+ .sg-wrapper-less .btn-group > .btn.active,
4188
+ .sg-wrapper-less .btn-group-vertical > .btn.active {
4189
+ z-index: 2;
4190
+ }
4191
+ .sg-wrapper-less .btn-group .btn + .btn,
4192
+ .sg-wrapper-less .btn-group .btn + .btn-group,
4193
+ .sg-wrapper-less .btn-group .btn-group + .btn,
4194
+ .sg-wrapper-less .btn-group .btn-group + .btn-group {
4195
+ margin-left: -1px;
4196
+ }
4197
+ .sg-wrapper-less .btn-toolbar {
4198
+ margin-left: -5px;
4199
+ }
4200
+ .sg-wrapper-less .btn-toolbar .btn-group,
4201
+ .sg-wrapper-less .btn-toolbar .input-group {
4202
+ float: left;
4203
+ }
4204
+ .sg-wrapper-less .btn-toolbar > .btn,
4205
+ .sg-wrapper-less .btn-toolbar > .btn-group,
4206
+ .sg-wrapper-less .btn-toolbar > .input-group {
4207
+ margin-left: 5px;
4208
+ }
4209
+ .sg-wrapper-less .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
4210
+ border-radius: 0;
4211
+ }
4212
+ .sg-wrapper-less .btn-group > .btn:first-child {
4213
+ margin-left: 0;
4214
+ }
4215
+ .sg-wrapper-less .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
4216
+ border-bottom-right-radius: 0;
4217
+ border-top-right-radius: 0;
4218
+ }
4219
+ .sg-wrapper-less .btn-group > .btn:last-child:not(:first-child),
4220
+ .sg-wrapper-less .btn-group > .dropdown-toggle:not(:first-child) {
4221
+ border-bottom-left-radius: 0;
4222
+ border-top-left-radius: 0;
4223
+ }
4224
+ .sg-wrapper-less .btn-group > .btn-group {
4225
+ float: left;
4226
+ }
4227
+ .sg-wrapper-less .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
4228
+ border-radius: 0;
4229
+ }
4230
+ .sg-wrapper-less .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
4231
+ .sg-wrapper-less .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
4232
+ border-bottom-right-radius: 0;
4233
+ border-top-right-radius: 0;
4234
+ }
4235
+ .sg-wrapper-less .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
4236
+ border-bottom-left-radius: 0;
4237
+ border-top-left-radius: 0;
4238
+ }
4239
+ .sg-wrapper-less .btn-group .dropdown-toggle:active,
4240
+ .sg-wrapper-less .btn-group.open .dropdown-toggle {
4241
+ outline: 0;
4242
+ }
4243
+ .sg-wrapper-less .btn-group > .btn + .dropdown-toggle {
4244
+ padding-left: 8px;
4245
+ padding-right: 8px;
4246
+ }
4247
+ .sg-wrapper-less .btn-group > .btn-lg + .dropdown-toggle {
4248
+ padding-left: 12px;
4249
+ padding-right: 12px;
4250
+ }
4251
+ .sg-wrapper-less .btn-group.open .dropdown-toggle {
4252
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
4253
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
4254
+ }
4255
+ .sg-wrapper-less .btn-group.open .dropdown-toggle.btn-link {
4256
+ -webkit-box-shadow: none;
4257
+ box-shadow: none;
4258
+ }
4259
+ .sg-wrapper-less .btn .caret {
4260
+ margin-left: 0;
4261
+ }
4262
+ .sg-wrapper-less .btn-lg .caret {
4263
+ border-width: 5px 5px 0;
4264
+ border-bottom-width: 0;
4265
+ }
4266
+ .sg-wrapper-less .dropup .btn-lg .caret {
4267
+ border-width: 0 5px 5px;
4268
+ }
4269
+ .sg-wrapper-less .btn-group-vertical > .btn,
4270
+ .sg-wrapper-less .btn-group-vertical > .btn-group,
4271
+ .sg-wrapper-less .btn-group-vertical > .btn-group > .btn {
4272
+ display: block;
4273
+ float: none;
4274
+ width: 100%;
4275
+ max-width: 100%;
4276
+ }
4277
+ .sg-wrapper-less .btn-group-vertical > .btn-group > .btn {
4278
+ float: none;
4279
+ }
4280
+ .sg-wrapper-less .btn-group-vertical > .btn + .btn,
4281
+ .sg-wrapper-less .btn-group-vertical > .btn + .btn-group,
4282
+ .sg-wrapper-less .btn-group-vertical > .btn-group + .btn,
4283
+ .sg-wrapper-less .btn-group-vertical > .btn-group + .btn-group {
4284
+ margin-top: -1px;
4285
+ margin-left: 0;
4286
+ }
4287
+ .sg-wrapper-less .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
4288
+ border-radius: 0;
4289
+ }
4290
+ .sg-wrapper-less .btn-group-vertical > .btn:first-child:not(:last-child) {
4291
+ border-top-right-radius: 0;
4292
+ border-bottom-right-radius: 0;
4293
+ border-bottom-left-radius: 0;
4294
+ }
4295
+ .sg-wrapper-less .btn-group-vertical > .btn:last-child:not(:first-child) {
4296
+ border-bottom-left-radius: 0;
4297
+ border-top-right-radius: 0;
4298
+ border-top-left-radius: 0;
4299
+ }
4300
+ .sg-wrapper-less .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
4301
+ border-radius: 0;
4302
+ }
4303
+ .sg-wrapper-less .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
4304
+ .sg-wrapper-less .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
4305
+ border-bottom-right-radius: 0;
4306
+ border-bottom-left-radius: 0;
4307
+ }
4308
+ .sg-wrapper-less .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
4309
+ border-top-right-radius: 0;
4310
+ border-top-left-radius: 0;
4311
+ }
4312
+ .sg-wrapper-less .btn-group-justified {
4313
+ display: table;
4314
+ width: 100%;
4315
+ table-layout: fixed;
4316
+ border-collapse: separate;
4317
+ }
4318
+ .sg-wrapper-less .btn-group-justified > .btn,
4319
+ .sg-wrapper-less .btn-group-justified > .btn-group {
4320
+ float: none;
4321
+ display: table-cell;
4322
+ width: 1%;
4323
+ }
4324
+ .sg-wrapper-less .btn-group-justified > .btn-group .btn {
4325
+ width: 100%;
4326
+ }
4327
+ .sg-wrapper-less .btn-group-justified > .btn-group .dropdown-menu {
4328
+ left: auto;
4329
+ }
4330
+ .sg-wrapper-less [data-toggle="buttons"] > .btn input[type="radio"],
4331
+ .sg-wrapper-less [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
4332
+ .sg-wrapper-less [data-toggle="buttons"] > .btn input[type="checkbox"],
4333
+ .sg-wrapper-less [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
4334
+ position: absolute;
4335
+ clip: rect(0, 0, 0, 0);
4336
+ pointer-events: none;
4337
+ }
4338
+
4339
+ .sg-wrapper-less input[type=radio]:checked:before {
4340
+ color: #0021c8 !important;
4341
+ }
4342
+ .sg-wrapper-less .input-group {
4343
+ position: relative;
4344
+ display: table;
4345
+ border-collapse: separate;
4346
+ }
4347
+ .sg-wrapper-less .input-group[class*="col-"] {
4348
+ float: none;
4349
+ padding-left: 0;
4350
+ padding-right: 0;
4351
+ }
4352
+ .sg-wrapper-less .input-group .form-control {
4353
+ position: relative;
4354
+ z-index: 2;
4355
+ float: left;
4356
+ width: 100%;
4357
+ margin-bottom: 0;
4358
+ }
4359
+ .sg-wrapper-less .input-group-lg > .form-control,
4360
+ .sg-wrapper-less .input-group-lg > .input-group-addon,
4361
+ .sg-wrapper-less .input-group-lg > .input-group-btn > .btn {
4362
+ height: 64px;
4363
+ padding: 18px 30px;
4364
+ font-size: 19px;
4365
+ line-height: 1.3333333;
4366
+ border-radius: 0;
4367
+ }
4368
+ .sg-wrapper-less select.input-group-lg > .form-control,
4369
+ .sg-wrapper-less select.input-group-lg > .input-group-addon,
4370
+ .sg-wrapper-less select.input-group-lg > .input-group-btn > .btn {
4371
+ height: 64px;
4372
+ line-height: 64px;
4373
+ }
4374
+ .sg-wrapper-less textarea.input-group-lg > .form-control,
4375
+ .sg-wrapper-less textarea.input-group-lg > .input-group-addon,
4376
+ .sg-wrapper-less textarea.input-group-lg > .input-group-btn > .btn,
4377
+ .sg-wrapper-less select[multiple].input-group-lg > .form-control,
4378
+ .sg-wrapper-less select[multiple].input-group-lg > .input-group-addon,
4379
+ .sg-wrapper-less select[multiple].input-group-lg > .input-group-btn > .btn {
4380
+ height: auto;
4381
+ }
4382
+ .sg-wrapper-less .input-group-sm > .form-control,
4383
+ .sg-wrapper-less .input-group-sm > .input-group-addon,
4384
+ .sg-wrapper-less .input-group-sm > .input-group-btn > .btn {
4385
+ height: 31px;
4386
+ padding: 5px 10px;
4387
+ font-size: 13px;
4388
+ line-height: 1.5;
4389
+ border-radius: 0;
4390
+ }
4391
+ .sg-wrapper-less select.input-group-sm > .form-control,
4392
+ .sg-wrapper-less select.input-group-sm > .input-group-addon,
4393
+ .sg-wrapper-less select.input-group-sm > .input-group-btn > .btn {
4394
+ height: 31px;
4395
+ line-height: 31px;
4396
+ }
4397
+ .sg-wrapper-less textarea.input-group-sm > .form-control,
4398
+ .sg-wrapper-less textarea.input-group-sm > .input-group-addon,
4399
+ .sg-wrapper-less textarea.input-group-sm > .input-group-btn > .btn,
4400
+ .sg-wrapper-less select[multiple].input-group-sm > .form-control,
4401
+ .sg-wrapper-less select[multiple].input-group-sm > .input-group-addon,
4402
+ .sg-wrapper-less select[multiple].input-group-sm > .input-group-btn > .btn {
4403
+ height: auto;
4404
+ }
4405
+ .sg-wrapper-less .input-group-addon,
4406
+ .sg-wrapper-less .input-group-btn,
4407
+ .sg-wrapper-less .input-group .form-control {
4408
+ display: table-cell;
4409
+ }
4410
+ .sg-wrapper-less .input-group-addon:not(:first-child):not(:last-child),
4411
+ .sg-wrapper-less .input-group-btn:not(:first-child):not(:last-child),
4412
+ .sg-wrapper-less .input-group .form-control:not(:first-child):not(:last-child) {
4413
+ border-radius: 0;
4414
+ }
4415
+ .sg-wrapper-less .input-group-addon,
4416
+ .sg-wrapper-less .input-group-btn {
4417
+ width: 1%;
4418
+ white-space: nowrap;
4419
+ vertical-align: middle;
4420
+ }
4421
+ .sg-wrapper-less .input-group-addon {
4422
+ padding: 10px 18px;
4423
+ font-size: 15px;
4424
+ font-weight: normal;
4425
+ line-height: 1;
4426
+ color: #333333;
4427
+ text-align: center;
4428
+ background-color: #e6e6e6;
4429
+ border: 1px solid #cccccc;
4430
+ border-radius: 0;
4431
+ }
4432
+ .sg-wrapper-less .input-group-addon.input-sm {
4433
+ padding: 5px 10px;
4434
+ font-size: 13px;
4435
+ border-radius: 0;
4436
+ }
4437
+ .sg-wrapper-less .input-group-addon.input-lg {
4438
+ padding: 18px 30px;
4439
+ font-size: 19px;
4440
+ border-radius: 0;
4441
+ }
4442
+ .sg-wrapper-less .input-group-addon input[type="radio"],
4443
+ .sg-wrapper-less .input-group-addon input[type="checkbox"] {
4444
+ margin-top: 0;
4445
+ }
4446
+ .sg-wrapper-less .input-group .form-control:first-child,
4447
+ .sg-wrapper-less .input-group-addon:first-child,
4448
+ .sg-wrapper-less .input-group-btn:first-child > .btn,
4449
+ .sg-wrapper-less .input-group-btn:first-child > .btn-group > .btn,
4450
+ .sg-wrapper-less .input-group-btn:first-child > .dropdown-toggle,
4451
+ .sg-wrapper-less .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
4452
+ .sg-wrapper-less .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
4453
+ border-bottom-right-radius: 0;
4454
+ border-top-right-radius: 0;
4455
+ }
4456
+ .sg-wrapper-less .input-group-addon:first-child {
4457
+ border-right: 0;
4458
+ }
4459
+ .sg-wrapper-less .input-group .form-control:last-child,
4460
+ .sg-wrapper-less .input-group-addon:last-child,
4461
+ .sg-wrapper-less .input-group-btn:last-child > .btn,
4462
+ .sg-wrapper-less .input-group-btn:last-child > .btn-group > .btn,
4463
+ .sg-wrapper-less .input-group-btn:last-child > .dropdown-toggle,
4464
+ .sg-wrapper-less .input-group-btn:first-child > .btn:not(:first-child),
4465
+ .sg-wrapper-less .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
4466
+ border-bottom-left-radius: 0;
4467
+ border-top-left-radius: 0;
4468
+ }
4469
+ .sg-wrapper-less .input-group-addon:last-child {
4470
+ border-left: 0;
4471
+ }
4472
+ .sg-wrapper-less .input-group-btn {
4473
+ position: relative;
4474
+ font-size: 0;
4475
+ white-space: nowrap;
4476
+ }
4477
+ .sg-wrapper-less .input-group-btn > .btn {
4478
+ position: relative;
4479
+ }
4480
+ .sg-wrapper-less .input-group-btn > .btn + .btn {
4481
+ margin-left: -1px;
4482
+ }
4483
+ .sg-wrapper-less .input-group-btn > .btn:hover,
4484
+ .sg-wrapper-less .input-group-btn > .btn:focus,
4485
+ .sg-wrapper-less .input-group-btn > .btn:active {
4486
+ z-index: 2;
4487
+ }
4488
+ .sg-wrapper-less .input-group-btn:first-child > .btn,
4489
+ .sg-wrapper-less .input-group-btn:first-child > .btn-group {
4490
+ margin-right: -1px;
4491
+ }
4492
+ .sg-wrapper-less .input-group-btn:last-child > .btn,
4493
+ .sg-wrapper-less .input-group-btn:last-child > .btn-group {
4494
+ margin-left: -1px;
4495
+ }
4496
+ .sg-wrapper-less .nav {
4497
+ margin-bottom: 0;
4498
+ padding-left: 0;
4499
+ list-style: none;
4500
+ }
4501
+ .sg-wrapper-less .nav > li {
4502
+ position: relative;
4503
+ display: block;
4504
+ }
4505
+ .sg-wrapper-less .nav > li > a {
4506
+ position: relative;
4507
+ display: block;
4508
+ padding: 10px 15px;
4509
+ }
4510
+ .sg-wrapper-less .nav > li > a:hover,
4511
+ .sg-wrapper-less .nav > li > a:focus {
4512
+ text-decoration: none;
4513
+ background-color: #e6e6e6;
4514
+ }
4515
+ .sg-wrapper-less .nav > li.disabled > a {
4516
+ color: #999999;
4517
+ }
4518
+ .sg-wrapper-less .nav > li.disabled > a:hover,
4519
+ .sg-wrapper-less .nav > li.disabled > a:focus {
4520
+ color: #999999;
4521
+ text-decoration: none;
4522
+ background-color: transparent;
4523
+ cursor: not-allowed;
4524
+ }
4525
+ .sg-wrapper-less .nav .open > a,
4526
+ .sg-wrapper-less .nav .open > a:hover,
4527
+ .sg-wrapper-less .nav .open > a:focus {
4528
+ background-color: #e6e6e6;
4529
+ border-color: #2780e3;
4530
+ }
4531
+ .sg-wrapper-less .nav .nav-divider {
4532
+ height: 1px;
4533
+ margin: 9.5px 0;
4534
+ overflow: hidden;
4535
+ background-color: #e5e5e5;
4536
+ }
4537
+ .sg-wrapper-less .nav > li > a > img {
4538
+ max-width: none;
4539
+ }
4540
+ .sg-wrapper-less .nav-tabs {
4541
+ border-bottom: 1px solid #dddddd;
4542
+ }
4543
+ .sg-wrapper-less .nav-tabs > li {
4544
+ float: left;
4545
+ margin-bottom: -1px;
4546
+ }
4547
+ .sg-wrapper-less .nav-tabs > li > a {
4548
+ margin-right: 2px;
4549
+ line-height: 1.42857143;
4550
+ border: 1px solid transparent;
4551
+ border-radius: 0 0 0 0;
4552
+ }
4553
+ .sg-wrapper-less .nav-tabs > li > a:hover {
4554
+ border-color: #e6e6e6 #e6e6e6 #dddddd;
4555
+ }
4556
+ .sg-wrapper-less .nav-tabs > li.active > a,
4557
+ .sg-wrapper-less .nav-tabs > li.active > a:hover,
4558
+ .sg-wrapper-less .nav-tabs > li.active > a:focus {
4559
+ color: #555555;
4560
+ background-color: #ffffff;
4561
+ border: 1px solid #dddddd;
4562
+ border-bottom-color: transparent;
4563
+ cursor: default;
4564
+ }
4565
+ .sg-wrapper-less .nav-tabs.nav-justified {
4566
+ width: 100%;
4567
+ border-bottom: 0;
4568
+ }
4569
+ .sg-wrapper-less .nav-tabs.nav-justified > li {
4570
+ float: none;
4571
+ }
4572
+ .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4573
+ text-align: center;
4574
+ margin-bottom: 5px;
4575
+ }
4576
+ .sg-wrapper-less .nav-tabs.nav-justified > .dropdown .dropdown-menu {
4577
+ top: auto;
4578
+ left: auto;
4579
+ }
4580
+ @media (min-width: 768px) {
4581
+ .sg-wrapper-less .nav-tabs.nav-justified > li {
4582
+ display: table-cell;
4583
+ width: 1%;
4584
+ }
4585
+ .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4586
+ margin-bottom: 0;
4587
+ }
4588
+ }
4589
+ .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4590
+ margin-right: 0;
4591
+ border-radius: 0;
4592
+ }
4593
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a,
4594
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a:hover,
4595
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a:focus {
4596
+ border: 1px solid #dddddd;
4597
+ }
4598
+ @media (min-width: 768px) {
4599
+ .sg-wrapper-less .nav-tabs.nav-justified > li > a {
4600
+ border-bottom: 1px solid #dddddd;
4601
+ border-radius: 0 0 0 0;
4602
+ }
4603
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a,
4604
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a:hover,
4605
+ .sg-wrapper-less .nav-tabs.nav-justified > .active > a:focus {
4606
+ border-bottom-color: #ffffff;
4607
+ }
4608
+ }
4609
+ .sg-wrapper-less .nav-pills > li {
4610
+ float: left;
4611
+ }
4612
+ .sg-wrapper-less .nav-pills > li > a {
4613
+ border-radius: 0;
4614
+ }
4615
+ .sg-wrapper-less .nav-pills > li + li {
4616
+ margin-left: 2px;
4617
+ }
4618
+ .sg-wrapper-less .nav-pills > li.active > a,
4619
+ .sg-wrapper-less .nav-pills > li.active > a:hover,
4620
+ .sg-wrapper-less .nav-pills > li.active > a:focus {
4621
+ color: #ffffff;
4622
+ background-color: #2780e3;
4623
+ }
4624
+ .sg-wrapper-less .nav-stacked > li {
4625
+ float: none;
4626
+ }
4627
+ .sg-wrapper-less .nav-stacked > li + li {
4628
+ margin-top: 2px;
4629
+ margin-left: 0;
4630
+ }
4631
+ .sg-wrapper-less .nav-justified {
4632
+ width: 100%;
4633
+ }
4634
+ .sg-wrapper-less .nav-justified > li {
4635
+ float: none;
4636
+ }
4637
+ .sg-wrapper-less .nav-justified > li > a {
4638
+ text-align: center;
4639
+ margin-bottom: 5px;
4640
+ }
4641
+ .sg-wrapper-less .nav-justified > .dropdown .dropdown-menu {
4642
+ top: auto;
4643
+ left: auto;
4644
+ }
4645
+ @media (min-width: 768px) {
4646
+ .sg-wrapper-less .nav-justified > li {
4647
+ display: table-cell;
4648
+ width: 1%;
4649
+ }
4650
+ .sg-wrapper-less .nav-justified > li > a {
4651
+ margin-bottom: 0;
4652
+ }
4653
+ }
4654
+ .sg-wrapper-less .nav-tabs-justified {
4655
+ border-bottom: 0;
4656
+ }
4657
+ .sg-wrapper-less .nav-tabs-justified > li > a {
4658
+ margin-right: 0;
4659
+ border-radius: 0;
4660
+ }
4661
+ .sg-wrapper-less .nav-tabs-justified > .active > a,
4662
+ .sg-wrapper-less .nav-tabs-justified > .active > a:hover,
4663
+ .sg-wrapper-less .nav-tabs-justified > .active > a:focus {
4664
+ border: 1px solid #dddddd;
4665
+ }
4666
+ @media (min-width: 768px) {
4667
+ .sg-wrapper-less .nav-tabs-justified > li > a {
4668
+ border-bottom: 1px solid #dddddd;
4669
+ border-radius: 0 0 0 0;
4670
+ }
4671
+ .sg-wrapper-less .nav-tabs-justified > .active > a,
4672
+ .sg-wrapper-less .nav-tabs-justified > .active > a:hover,
4673
+ .sg-wrapper-less .nav-tabs-justified > .active > a:focus {
4674
+ border-bottom-color: #ffffff;
4675
+ }
4676
+ }
4677
+ .sg-wrapper-less .tab-content > .tab-pane {
4678
+ display: none;
4679
+ }
4680
+ .sg-wrapper-less .tab-content > .active {
4681
+ display: block;
4682
+ }
4683
+ .sg-wrapper-less .nav-tabs .dropdown-menu {
4684
+ margin-top: -1px;
4685
+ border-top-right-radius: 0;
4686
+ border-top-left-radius: 0;
4687
+ }
4688
+ .sg-wrapper-less .navbar {
4689
+ position: relative;
4690
+ min-height: 50px;
4691
+ margin-bottom: 21px;
4692
+ border: 1px solid transparent;
4693
+ }
4694
+ @media (min-width: 768px) {
4695
+ .sg-wrapper-less .navbar {
4696
+ border-radius: 0;
4697
+ }
4698
+ }
4699
+ @media (min-width: 768px) {
4700
+ .sg-wrapper-less .navbar-header {
4701
+ float: left;
4702
+ }
4703
+ }
4704
+ .sg-wrapper-less .navbar-collapse {
4705
+ overflow-x: visible;
4706
+ padding-right: 15px;
4707
+ padding-left: 15px;
4708
+ border-top: 1px solid transparent;
4709
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
4710
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
4711
+ -webkit-overflow-scrolling: touch;
4712
+ }
4713
+ .sg-wrapper-less .navbar-collapse.in {
4714
+ overflow-y: auto;
4715
+ }
4716
+ @media (min-width: 768px) {
4717
+ .sg-wrapper-less .navbar-collapse {
4718
+ width: auto;
4719
+ border-top: 0;
4720
+ -webkit-box-shadow: none;
4721
+ box-shadow: none;
4722
+ }
4723
+ .sg-wrapper-less .navbar-collapse.collapse {
4724
+ display: block !important;
4725
+ height: auto !important;
4726
+ padding-bottom: 0;
4727
+ overflow: visible !important;
4728
+ }
4729
+ .sg-wrapper-less .navbar-collapse.in {
4730
+ overflow-y: visible;
4731
+ }
4732
+ .sg-wrapper-less .navbar-fixed-top .navbar-collapse,
4733
+ .sg-wrapper-less .navbar-static-top .navbar-collapse,
4734
+ .sg-wrapper-less .navbar-fixed-bottom .navbar-collapse {
4735
+ padding-left: 0;
4736
+ padding-right: 0;
4737
+ }
4738
+ }
4739
+ .sg-wrapper-less .navbar-fixed-top .navbar-collapse,
4740
+ .sg-wrapper-less .navbar-fixed-bottom .navbar-collapse {
4741
+ max-height: 340px;
4742
+ }
4743
+ @media (max-device-width: 480px) and (orientation: landscape) {
4744
+ .sg-wrapper-less .navbar-fixed-top .navbar-collapse,
4745
+ .sg-wrapper-less .navbar-fixed-bottom .navbar-collapse {
4746
+ max-height: 200px;
4747
+ }
4748
+ }
4749
+ .sg-wrapper-less .container > .navbar-header,
4750
+ .sg-wrapper-less .container-fluid > .navbar-header,
4751
+ .sg-wrapper-less .container > .navbar-collapse,
4752
+ .sg-wrapper-less .container-fluid > .navbar-collapse {
4753
+ margin-right: -15px;
4754
+ margin-left: -15px;
4755
+ }
4756
+ @media (min-width: 768px) {
4757
+ .sg-wrapper-less .container > .navbar-header,
4758
+ .sg-wrapper-less .container-fluid > .navbar-header,
4759
+ .sg-wrapper-less .container > .navbar-collapse,
4760
+ .sg-wrapper-less .container-fluid > .navbar-collapse {
4761
+ margin-right: 0;
4762
+ margin-left: 0;
4763
+ }
4764
+ }
4765
+ .sg-wrapper-less .navbar-static-top {
4766
+ z-index: 1000;
4767
+ border-width: 0 0 1px;
4768
+ }
4769
+ @media (min-width: 768px) {
4770
+ .sg-wrapper-less .navbar-static-top {
4771
+ border-radius: 0;
4772
+ }
4773
+ }
4774
+ .sg-wrapper-less .navbar-fixed-top,
4775
+ .sg-wrapper-less .navbar-fixed-bottom {
4776
+ position: fixed;
4777
+ right: 0;
4778
+ left: 0;
4779
+ z-index: 1030;
4780
+ }
4781
+ @media (min-width: 768px) {
4782
+ .sg-wrapper-less .navbar-fixed-top,
4783
+ .sg-wrapper-less .navbar-fixed-bottom {
4784
+ border-radius: 0;
4785
+ }
4786
+ }
4787
+ .sg-wrapper-less .navbar-fixed-top {
4788
+ top: 0;
4789
+ border-width: 0 0 1px;
4790
+ }
4791
+ .sg-wrapper-less .navbar-fixed-bottom {
4792
+ bottom: 0;
4793
+ margin-bottom: 0;
4794
+ border-width: 1px 0 0;
4795
+ }
4796
+ .sg-wrapper-less .navbar-brand {
4797
+ float: left;
4798
+ padding: 14.5px 15px;
4799
+ font-size: 19px;
4800
+ line-height: 21px;
4801
+ height: 50px;
4802
+ }
4803
+ .sg-wrapper-less .navbar-brand:hover,
4804
+ .sg-wrapper-less .navbar-brand:focus {
4805
+ text-decoration: none;
4806
+ }
4807
+ .sg-wrapper-less .navbar-brand > img {
4808
+ display: block;
4809
+ }
4810
+ @media (min-width: 768px) {
4811
+ .sg-wrapper-less .navbar > .container .navbar-brand,
4812
+ .sg-wrapper-less .navbar > .container-fluid .navbar-brand {
4813
+ margin-left: -15px;
4814
+ }
4815
+ }
4816
+ .sg-wrapper-less .navbar-toggle {
4817
+ position: relative;
4818
+ float: right;
4819
+ margin-right: 15px;
4820
+ padding: 9px 10px;
4821
+ margin-top: 8px;
4822
+ margin-bottom: 8px;
4823
+ background-color: transparent;
4824
+ background-image: none;
4825
+ border: 1px solid transparent;
4826
+ border-radius: 0;
4827
+ }
4828
+ .sg-wrapper-less .navbar-toggle:focus {
4829
+ outline: 0;
4830
+ }
4831
+ .sg-wrapper-less .navbar-toggle .icon-bar {
4832
+ display: block;
4833
+ width: 22px;
4834
+ height: 2px;
4835
+ border-radius: 1px;
4836
+ }
4837
+ .sg-wrapper-less .navbar-toggle .icon-bar + .icon-bar {
4838
+ margin-top: 4px;
4839
+ }
4840
+ @media (min-width: 768px) {
4841
+ .sg-wrapper-less .navbar-toggle {
4842
+ display: none;
4843
+ }
4844
+ }
4845
+ .sg-wrapper-less .navbar-nav {
4846
+ margin: 7.25px -15px;
4847
+ }
4848
+ .sg-wrapper-less .navbar-nav > li > a {
4849
+ padding-top: 10px;
4850
+ padding-bottom: 10px;
4851
+ line-height: 21px;
4852
+ }
4853
+ @media (max-width: 767px) {
4854
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu {
4855
+ position: static;
4856
+ float: none;
4857
+ width: auto;
4858
+ margin-top: 0;
4859
+ background-color: transparent;
4860
+ border: 0;
4861
+ -webkit-box-shadow: none;
4862
+ box-shadow: none;
4863
+ }
4864
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a,
4865
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu .dropdown-header {
4866
+ padding: 5px 15px 5px 25px;
4867
+ }
4868
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a {
4869
+ line-height: 21px;
4870
+ }
4871
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a:hover,
4872
+ .sg-wrapper-less .navbar-nav .open .dropdown-menu > li > a:focus {
4873
+ background-image: none;
4874
+ }
4875
+ }
4876
+ @media (min-width: 768px) {
4877
+ .sg-wrapper-less .navbar-nav {
4878
+ float: left;
4879
+ margin: 0;
4880
+ }
4881
+ .sg-wrapper-less .navbar-nav > li {
4882
+ float: left;
4883
+ }
4884
+ .sg-wrapper-less .navbar-nav > li > a {
4885
+ padding-top: 14.5px;
4886
+ padding-bottom: 14.5px;
4887
+ }
4888
+ }
4889
+ .sg-wrapper-less .navbar-form {
4890
+ margin-left: -15px;
4891
+ margin-right: -15px;
4892
+ padding: 10px 15px;
4893
+ border-top: 1px solid transparent;
4894
+ border-bottom: 1px solid transparent;
4895
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4896
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4897
+ margin-top: 3.5px;
4898
+ margin-bottom: 3.5px;
4899
+ }
4900
+ @media (min-width: 768px) {
4901
+ .sg-wrapper-less .navbar-form .form-group {
4902
+ display: inline-block;
4903
+ margin-bottom: 0;
4904
+ vertical-align: middle;
4905
+ }
4906
+ .sg-wrapper-less .navbar-form .form-control {
4907
+ display: inline-block;
4908
+ width: auto;
4909
+ vertical-align: middle;
4910
+ }
4911
+ .sg-wrapper-less .navbar-form .form-control-static {
4912
+ display: inline-block;
4913
+ }
4914
+ .sg-wrapper-less .navbar-form .input-group {
4915
+ display: inline-table;
4916
+ vertical-align: middle;
4917
+ }
4918
+ .sg-wrapper-less .navbar-form .input-group .input-group-addon,
4919
+ .sg-wrapper-less .navbar-form .input-group .input-group-btn,
4920
+ .sg-wrapper-less .navbar-form .input-group .form-control {
4921
+ width: auto;
4922
+ }
4923
+ .sg-wrapper-less .navbar-form .input-group > .form-control {
4924
+ width: 100%;
4925
+ }
4926
+ .sg-wrapper-less .navbar-form .control-label {
4927
+ margin-bottom: 0;
4928
+ vertical-align: middle;
4929
+ }
4930
+ .sg-wrapper-less .navbar-form .radio,
4931
+ .sg-wrapper-less .navbar-form .checkbox {
4932
+ display: inline-block;
4933
+ margin-top: 0;
4934
+ margin-bottom: 0;
4935
+ vertical-align: middle;
4936
+ }
4937
+ .sg-wrapper-less .navbar-form .radio label,
4938
+ .sg-wrapper-less .navbar-form .checkbox label {
4939
+ padding-left: 0;
4940
+ }
4941
+ .sg-wrapper-less .navbar-form .radio input[type="radio"],
4942
+ .sg-wrapper-less .navbar-form .checkbox input[type="checkbox"] {
4943
+ position: relative;
4944
+ margin-left: 0;
4945
+ }
4946
+ .sg-wrapper-less .navbar-form .has-feedback .form-control-feedback {
4947
+ top: 0;
4948
+ }
4949
+ }
4950
+ @media (max-width: 767px) {
4951
+ .sg-wrapper-less .navbar-form .form-group {
4952
+ margin-bottom: 5px;
4953
+ }
4954
+ .sg-wrapper-less .navbar-form .form-group:last-child {
4955
+ margin-bottom: 0;
4956
+ }
4957
+ }
4958
+ @media (min-width: 768px) {
4959
+ .sg-wrapper-less .navbar-form {
4960
+ width: auto;
4961
+ border: 0;
4962
+ margin-left: 0;
4963
+ margin-right: 0;
4964
+ padding-top: 0;
4965
+ padding-bottom: 0;
4966
+ -webkit-box-shadow: none;
4967
+ box-shadow: none;
4968
+ }
4969
+ }
4970
+ .sg-wrapper-less .navbar-nav > li > .dropdown-menu {
4971
+ margin-top: 0;
4972
+ border-top-right-radius: 0;
4973
+ border-top-left-radius: 0;
4974
+ }
4975
+ .sg-wrapper-less .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4976
+ margin-bottom: 0;
4977
+ border-top-right-radius: 0;
4978
+ border-top-left-radius: 0;
4979
+ border-bottom-right-radius: 0;
4980
+ border-bottom-left-radius: 0;
4981
+ }
4982
+ .sg-wrapper-less .navbar-btn {
4983
+ margin-top: 3.5px;
4984
+ margin-bottom: 3.5px;
4985
+ }
4986
+ .sg-wrapper-less .navbar-btn.btn-sm {
4987
+ margin-top: 9.5px;
4988
+ margin-bottom: 9.5px;
4989
+ }
4990
+ .sg-wrapper-less .navbar-btn.btn-xs {
4991
+ margin-top: 14px;
4992
+ margin-bottom: 14px;
4993
+ }
4994
+ .sg-wrapper-less .navbar-text {
4995
+ margin-top: 14.5px;
4996
+ margin-bottom: 14.5px;
4997
+ }
4998
+ @media (min-width: 768px) {
4999
+ .sg-wrapper-less .navbar-text {
5000
+ float: left;
5001
+ margin-left: 15px;
5002
+ margin-right: 15px;
5003
+ }
5004
+ }
5005
+ @media (min-width: 768px) {
5006
+ .sg-wrapper-less .navbar-left {
5007
+ float: left !important;
5008
+ }
5009
+ .sg-wrapper-less .navbar-right {
5010
+ float: right !important;
5011
+ margin-right: -15px;
5012
+ }
5013
+ .sg-wrapper-less .navbar-right ~ .navbar-right {
5014
+ margin-right: 0;
5015
+ }
5016
+ }
5017
+ .sg-wrapper-less .navbar-default {
5018
+ background-color: #222222;
5019
+ border-color: #121212;
5020
+ }
5021
+ .sg-wrapper-less .navbar-default .navbar-brand {
5022
+ color: #ffffff;
5023
+ }
5024
+ .sg-wrapper-less .navbar-default .navbar-brand:hover,
5025
+ .sg-wrapper-less .navbar-default .navbar-brand:focus {
5026
+ color: #ffffff;
5027
+ background-color: none;
5028
+ }
5029
+ .sg-wrapper-less .navbar-default .navbar-text {
5030
+ color: #ffffff;
5031
+ }
5032
+ .sg-wrapper-less .navbar-default .navbar-nav > li > a {
5033
+ color: #ffffff;
5034
+ }
5035
+ .sg-wrapper-less .navbar-default .navbar-nav > li > a:hover,
5036
+ .sg-wrapper-less .navbar-default .navbar-nav > li > a:focus {
5037
+ color: #ffffff;
5038
+ background-color: #090909;
5039
+ }
5040
+ .sg-wrapper-less .navbar-default .navbar-nav > .active > a,
5041
+ .sg-wrapper-less .navbar-default .navbar-nav > .active > a:hover,
5042
+ .sg-wrapper-less .navbar-default .navbar-nav > .active > a:focus {
5043
+ color: #ffffff;
5044
+ background-color: #090909;
5045
+ }
5046
+ .sg-wrapper-less .navbar-default .navbar-nav > .disabled > a,
5047
+ .sg-wrapper-less .navbar-default .navbar-nav > .disabled > a:hover,
5048
+ .sg-wrapper-less .navbar-default .navbar-nav > .disabled > a:focus {
5049
+ color: #cccccc;
5050
+ background-color: transparent;
5051
+ }
5052
+ .sg-wrapper-less .navbar-default .navbar-toggle {
5053
+ border-color: transparent;
5054
+ }
5055
+ .sg-wrapper-less .navbar-default .navbar-toggle:hover,
5056
+ .sg-wrapper-less .navbar-default .navbar-toggle:focus {
5057
+ background-color: #090909;
5058
+ }
5059
+ .sg-wrapper-less .navbar-default .navbar-toggle .icon-bar {
5060
+ background-color: #ffffff;
5061
+ }
5062
+ .sg-wrapper-less .navbar-default .navbar-collapse,
5063
+ .sg-wrapper-less .navbar-default .navbar-form {
5064
+ border-color: #121212;
5065
+ }
5066
+ .sg-wrapper-less .navbar-default .navbar-nav > .open > a,
5067
+ .sg-wrapper-less .navbar-default .navbar-nav > .open > a:hover,
5068
+ .sg-wrapper-less .navbar-default .navbar-nav > .open > a:focus {
5069
+ background-color: #090909;
5070
+ color: #ffffff;
5071
+ }
5072
+ @media (max-width: 767px) {
5073
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > li > a {
5074
+ color: #ffffff;
5075
+ }
5076
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
5077
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
5078
+ color: #ffffff;
5079
+ background-color: #090909;
5080
+ }
5081
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
5082
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
5083
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
5084
+ color: #ffffff;
5085
+ background-color: #090909;
5086
+ }
5087
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
5088
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
5089
+ .sg-wrapper-less .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
5090
+ color: #cccccc;
5091
+ background-color: transparent;
5092
+ }
5093
+ }
5094
+ .sg-wrapper-less .navbar-default .navbar-link {
5095
+ color: #ffffff;
5096
+ }
5097
+ .sg-wrapper-less .navbar-default .navbar-link:hover {
5098
+ color: #ffffff;
5099
+ }
5100
+ .sg-wrapper-less .navbar-default .btn-link {
5101
+ color: #ffffff;
5102
+ }
5103
+ .sg-wrapper-less .navbar-default .btn-link:hover,
5104
+ .sg-wrapper-less .navbar-default .btn-link:focus {
5105
+ color: #ffffff;
5106
+ }
5107
+ .sg-wrapper-less .navbar-default .btn-link[disabled]:hover,
5108
+ .sg-wrapper-less fieldset[disabled] .navbar-default .btn-link:hover,
5109
+ .sg-wrapper-less .navbar-default .btn-link[disabled]:focus,
5110
+ .sg-wrapper-less fieldset[disabled] .navbar-default .btn-link:focus {
5111
+ color: #cccccc;
5112
+ }
5113
+ .sg-wrapper-less .navbar-inverse {
5114
+ background-color: #2780e3;
5115
+ border-color: #1967be;
5116
+ }
5117
+ .sg-wrapper-less .navbar-inverse .navbar-brand {
5118
+ color: #ffffff;
5119
+ }
5120
+ .sg-wrapper-less .navbar-inverse .navbar-brand:hover,
5121
+ .sg-wrapper-less .navbar-inverse .navbar-brand:focus {
5122
+ color: #ffffff;
5123
+ background-color: none;
5124
+ }
5125
+ .sg-wrapper-less .navbar-inverse .navbar-text {
5126
+ color: #ffffff;
5127
+ }
5128
+ .sg-wrapper-less .navbar-inverse .navbar-nav > li > a {
5129
+ color: #ffffff;
5130
+ }
5131
+ .sg-wrapper-less .navbar-inverse .navbar-nav > li > a:hover,
5132
+ .sg-wrapper-less .navbar-inverse .navbar-nav > li > a:focus {
5133
+ color: #ffffff;
5134
+ background-color: #1967be;
5135
+ }
5136
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .active > a,
5137
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .active > a:hover,
5138
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .active > a:focus {
5139
+ color: #ffffff;
5140
+ background-color: #1967be;
5141
+ }
5142
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .disabled > a,
5143
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .disabled > a:hover,
5144
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .disabled > a:focus {
5145
+ color: #ffffff;
5146
+ background-color: transparent;
5147
+ }
5148
+ .sg-wrapper-less .navbar-inverse .navbar-toggle {
5149
+ border-color: transparent;
5150
+ }
5151
+ .sg-wrapper-less .navbar-inverse .navbar-toggle:hover,
5152
+ .sg-wrapper-less .navbar-inverse .navbar-toggle:focus {
5153
+ background-color: #1967be;
5154
+ }
5155
+ .sg-wrapper-less .navbar-inverse .navbar-toggle .icon-bar {
5156
+ background-color: #ffffff;
5157
+ }
5158
+ .sg-wrapper-less .navbar-inverse .navbar-collapse,
5159
+ .sg-wrapper-less .navbar-inverse .navbar-form {
5160
+ border-color: #1a6ecc;
5161
+ }
5162
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .open > a,
5163
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .open > a:hover,
5164
+ .sg-wrapper-less .navbar-inverse .navbar-nav > .open > a:focus {
5165
+ background-color: #1967be;
5166
+ color: #ffffff;
5167
+ }
5168
+ @media (max-width: 767px) {
5169
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
5170
+ border-color: #1967be;
5171
+ }
5172
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
5173
+ background-color: #1967be;
5174
+ }
5175
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
5176
+ color: #ffffff;
5177
+ }
5178
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
5179
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
5180
+ color: #ffffff;
5181
+ background-color: #1967be;
5182
+ }
5183
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
5184
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
5185
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
5186
+ color: #ffffff;
5187
+ background-color: #1967be;
5188
+ }
5189
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
5190
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
5191
+ .sg-wrapper-less .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
5192
+ color: #ffffff;
5193
+ background-color: transparent;
5194
+ }
5195
+ }
5196
+ .sg-wrapper-less .navbar-inverse .navbar-link {
5197
+ color: #ffffff;
5198
+ }
5199
+ .sg-wrapper-less .navbar-inverse .navbar-link:hover {
5200
+ color: #ffffff;
5201
+ }
5202
+ .sg-wrapper-less .navbar-inverse .btn-link {
5203
+ color: #ffffff;
5204
+ }
5205
+ .sg-wrapper-less .navbar-inverse .btn-link:hover,
5206
+ .sg-wrapper-less .navbar-inverse .btn-link:focus {
5207
+ color: #ffffff;
5208
+ }
5209
+ .sg-wrapper-less .navbar-inverse .btn-link[disabled]:hover,
5210
+ .sg-wrapper-less fieldset[disabled] .navbar-inverse .btn-link:hover,
5211
+ .sg-wrapper-less .navbar-inverse .btn-link[disabled]:focus,
5212
+ .sg-wrapper-less fieldset[disabled] .navbar-inverse .btn-link:focus {
5213
+ color: #ffffff;
5214
+ }
5215
+ .sg-wrapper-less .breadcrumb {
5216
+ padding: 8px 15px;
5217
+ margin-bottom: 21px;
5218
+ list-style: none;
5219
+ background-color: #f5f5f5;
5220
+ border-radius: 0;
5221
+ }
5222
+ .sg-wrapper-less .breadcrumb > li {
5223
+ display: inline-block;
5224
+ }
5225
+ .sg-wrapper-less .breadcrumb > li + li:before {
5226
+ content: "/\00a0";
5227
+ padding: 0 5px;
5228
+ color: #cccccc;
5229
+ }
5230
+ .sg-wrapper-less .breadcrumb > .active {
5231
+ color: #999999;
5232
+ }
5233
+ .sg-wrapper-less .pagination {
5234
+ display: inline-block;
5235
+ padding-left: 0;
5236
+ margin: 21px 0;
5237
+ border-radius: 0;
5238
+ }
5239
+ .sg-wrapper-less .pagination > li {
5240
+ display: inline;
5241
+ }
5242
+ .sg-wrapper-less .pagination > li > a,
5243
+ .sg-wrapper-less .pagination > li > span {
5244
+ position: relative;
5245
+ float: left;
5246
+ padding: 10px 18px;
5247
+ line-height: 1.42857143;
5248
+ text-decoration: none;
5249
+ color: #2780e3;
5250
+ background-color: #ffffff;
5251
+ border: 1px solid #dddddd;
5252
+ margin-left: -1px;
5253
+ }
5254
+ .sg-wrapper-less .pagination > li:first-child > a,
5255
+ .sg-wrapper-less .pagination > li:first-child > span {
5256
+ margin-left: 0;
5257
+ border-bottom-left-radius: 0;
5258
+ border-top-left-radius: 0;
5259
+ }
5260
+ .sg-wrapper-less .pagination > li:last-child > a,
5261
+ .sg-wrapper-less .pagination > li:last-child > span {
5262
+ border-bottom-right-radius: 0;
5263
+ border-top-right-radius: 0;
5264
+ }
5265
+ .sg-wrapper-less .pagination > li > a:hover,
5266
+ .sg-wrapper-less .pagination > li > span:hover,
5267
+ .sg-wrapper-less .pagination > li > a:focus,
5268
+ .sg-wrapper-less .pagination > li > span:focus {
5269
+ color: #165ba8;
5270
+ background-color: #e6e6e6;
5271
+ border-color: #dddddd;
5272
+ }
5273
+ .sg-wrapper-less .pagination > .active > a,
5274
+ .sg-wrapper-less .pagination > .active > span,
5275
+ .sg-wrapper-less .pagination > .active > a:hover,
5276
+ .sg-wrapper-less .pagination > .active > span:hover,
5277
+ .sg-wrapper-less .pagination > .active > a:focus,
5278
+ .sg-wrapper-less .pagination > .active > span:focus {
5279
+ z-index: 2;
5280
+ color: #999999;
5281
+ background-color: #f5f5f5;
5282
+ border-color: #dddddd;
5283
+ cursor: default;
5284
+ }
5285
+ .sg-wrapper-less .pagination > .disabled > span,
5286
+ .sg-wrapper-less .pagination > .disabled > span:hover,
5287
+ .sg-wrapper-less .pagination > .disabled > span:focus,
5288
+ .sg-wrapper-less .pagination > .disabled > a,
5289
+ .sg-wrapper-less .pagination > .disabled > a:hover,
5290
+ .sg-wrapper-less .pagination > .disabled > a:focus {
5291
+ color: #999999;
5292
+ background-color: #ffffff;
5293
+ border-color: #dddddd;
5294
+ cursor: not-allowed;
5295
+ }
5296
+ .sg-wrapper-less .pagination-lg > li > a,
5297
+ .sg-wrapper-less .pagination-lg > li > span {
5298
+ padding: 18px 30px;
5299
+ font-size: 19px;
5300
+ }
5301
+ .sg-wrapper-less .pagination-lg > li:first-child > a,
5302
+ .sg-wrapper-less .pagination-lg > li:first-child > span {
5303
+ border-bottom-left-radius: 0;
5304
+ border-top-left-radius: 0;
5305
+ }
5306
+ .sg-wrapper-less .pagination-lg > li:last-child > a,
5307
+ .sg-wrapper-less .pagination-lg > li:last-child > span {
5308
+ border-bottom-right-radius: 0;
5309
+ border-top-right-radius: 0;
5310
+ }
5311
+ .sg-wrapper-less .pagination-sm > li > a,
5312
+ .sg-wrapper-less .pagination-sm > li > span {
5313
+ padding: 5px 10px;
5314
+ font-size: 13px;
5315
+ }
5316
+ .sg-wrapper-less .pagination-sm > li:first-child > a,
5317
+ .sg-wrapper-less .pagination-sm > li:first-child > span {
5318
+ border-bottom-left-radius: 0;
5319
+ border-top-left-radius: 0;
5320
+ }
5321
+ .sg-wrapper-less .pagination-sm > li:last-child > a,
5322
+ .sg-wrapper-less .pagination-sm > li:last-child > span {
5323
+ border-bottom-right-radius: 0;
5324
+ border-top-right-radius: 0;
5325
+ }
5326
+ .sg-wrapper-less .pager {
5327
+ padding-left: 0;
5328
+ margin: 21px 0;
5329
+ list-style: none;
5330
+ text-align: center;
5331
+ }
5332
+ .sg-wrapper-less .pager li {
5333
+ display: inline;
5334
+ }
5335
+ .sg-wrapper-less .pager li > a,
5336
+ .sg-wrapper-less .pager li > span {
5337
+ display: inline-block;
5338
+ padding: 5px 14px;
5339
+ background-color: #ffffff;
5340
+ border: 1px solid #dddddd;
5341
+ border-radius: 0;
5342
+ }
5343
+ .sg-wrapper-less .pager li > a:hover,
5344
+ .sg-wrapper-less .pager li > a:focus {
5345
+ text-decoration: none;
5346
+ background-color: #e6e6e6;
5347
+ }
5348
+ .sg-wrapper-less .pager .next > a,
5349
+ .sg-wrapper-less .pager .next > span {
5350
+ float: right;
5351
+ }
5352
+ .sg-wrapper-less .pager .previous > a,
5353
+ .sg-wrapper-less .pager .previous > span {
5354
+ float: left;
5355
+ }
5356
+ .sg-wrapper-less .pager .disabled > a,
5357
+ .sg-wrapper-less .pager .disabled > a:hover,
5358
+ .sg-wrapper-less .pager .disabled > a:focus,
5359
+ .sg-wrapper-less .pager .disabled > span {
5360
+ color: #999999;
5361
+ background-color: #ffffff;
5362
+ cursor: not-allowed;
5363
+ }
5364
+ .sg-wrapper-less .label {
5365
+ display: inline;
5366
+ padding: .2em .6em .3em;
5367
+ font-size: 75%;
5368
+ font-weight: bold;
5369
+ line-height: 1;
5370
+ color: #ffffff;
5371
+ text-align: center;
5372
+ white-space: nowrap;
5373
+ vertical-align: baseline;
5374
+ border-radius: .25em;
5375
+ }
5376
+ .sg-wrapper-less a.label:hover,
5377
+ .sg-wrapper-less a.label:focus {
5378
+ color: #ffffff;
5379
+ text-decoration: none;
5380
+ cursor: pointer;
5381
+ }
5382
+ .sg-wrapper-less .label:empty {
5383
+ display: none;
5384
+ }
5385
+ .sg-wrapper-less .btn .label {
5386
+ position: relative;
5387
+ top: -1px;
5388
+ }
5389
+ .sg-wrapper-less .label-default {
5390
+ background-color: #222222;
5391
+ }
5392
+ .sg-wrapper-less .label-default[href]:hover,
5393
+ .sg-wrapper-less .label-default[href]:focus {
5394
+ background-color: #090909;
5395
+ }
5396
+ .sg-wrapper-less .label-primary {
5397
+ background-color: #2780e3;
5398
+ }
5399
+ .sg-wrapper-less .label-primary[href]:hover,
5400
+ .sg-wrapper-less .label-primary[href]:focus {
5401
+ background-color: #1967be;
5402
+ }
5403
+ .sg-wrapper-less .label-success {
5404
+ background-color: #3fb618;
5405
+ }
5406
+ .sg-wrapper-less .label-success[href]:hover,
5407
+ .sg-wrapper-less .label-success[href]:focus {
5408
+ background-color: #2f8912;
5409
+ }
5410
+ .sg-wrapper-less .label-info {
5411
+ background-color: #9954bb;
5412
+ }
5413
+ .sg-wrapper-less .label-info[href]:hover,
5414
+ .sg-wrapper-less .label-info[href]:focus {
5415
+ background-color: #7e3f9d;
5416
+ }
5417
+ .sg-wrapper-less .label-warning {
5418
+ background-color: #ff7518;
5419
+ }
5420
+ .sg-wrapper-less .label-warning[href]:hover,
5421
+ .sg-wrapper-less .label-warning[href]:focus {
5422
+ background-color: #e45c00;
5423
+ }
5424
+ .sg-wrapper-less .label-danger {
5425
+ background-color: #ff0039;
5426
+ }
5427
+ .sg-wrapper-less .label-danger[href]:hover,
5428
+ .sg-wrapper-less .label-danger[href]:focus {
5429
+ background-color: #cc002e;
5430
+ }
5431
+ .sg-wrapper-less .badge {
5432
+ display: inline-block;
5433
+ min-width: 10px;
5434
+ padding: 3px 7px;
5435
+ font-size: 13px;
5436
+ font-weight: bold;
5437
+ color: #ffffff;
5438
+ line-height: 1;
5439
+ vertical-align: baseline;
5440
+ white-space: nowrap;
5441
+ text-align: center;
5442
+ background-color: #2780e3;
5443
+ border-radius: 10px;
5444
+ }
5445
+ .sg-wrapper-less .badge:empty {
5446
+ display: none;
5447
+ }
5448
+ .sg-wrapper-less .btn .badge {
5449
+ position: relative;
5450
+ top: -1px;
5451
+ }
5452
+ .sg-wrapper-less .btn-xs .badge,
5453
+ .sg-wrapper-less .btn-group-xs > .btn .badge {
5454
+ top: 0;
5455
+ padding: 1px 5px;
5456
+ }
5457
+ .sg-wrapper-less a.badge:hover,
5458
+ .sg-wrapper-less a.badge:focus {
5459
+ color: #ffffff;
5460
+ text-decoration: none;
5461
+ cursor: pointer;
5462
+ }
5463
+ .sg-wrapper-less .list-group-item.active > .badge,
5464
+ .sg-wrapper-less .nav-pills > .active > a > .badge {
5465
+ color: #2780e3;
5466
+ background-color: #ffffff;
5467
+ }
5468
+ .sg-wrapper-less .list-group-item > .badge {
5469
+ float: right;
5470
+ }
5471
+ .sg-wrapper-less .list-group-item > .badge + .badge {
5472
+ margin-right: 5px;
5473
+ }
5474
+ .sg-wrapper-less .nav-pills > li > a > .badge {
5475
+ margin-left: 3px;
5476
+ }
5477
+ .sg-wrapper-less .jumbotron {
5478
+ padding: 30px 15px;
5479
+ margin-bottom: 30px;
5480
+ color: inherit;
5481
+ background-color: #e6e6e6;
5482
+ }
5483
+ .sg-wrapper-less .jumbotron h1,
5484
+ .sg-wrapper-less .jumbotron .h1 {
5485
+ color: inherit;
5486
+ }
5487
+ .sg-wrapper-less .jumbotron p {
5488
+ margin-bottom: 15px;
5489
+ font-size: 23px;
5490
+ font-weight: 200;
5491
+ }
5492
+ .sg-wrapper-less .jumbotron > hr {
5493
+ border-top-color: #cccccc;
5494
+ }
5495
+ .sg-wrapper-less .container .jumbotron,
5496
+ .sg-wrapper-less .container-fluid .jumbotron {
5497
+ border-radius: 0;
5498
+ }
5499
+ .sg-wrapper-less .jumbotron .container {
5500
+ max-width: 100%;
5501
+ }
5502
+ @media screen and (min-width: 768px) {
5503
+ .sg-wrapper-less .jumbotron {
5504
+ padding: 48px 0;
5505
+ }
5506
+ .sg-wrapper-less .container .jumbotron,
5507
+ .sg-wrapper-less .container-fluid .jumbotron {
5508
+ padding-left: 60px;
5509
+ padding-right: 60px;
5510
+ }
5511
+ .sg-wrapper-less .jumbotron h1,
5512
+ .sg-wrapper-less .jumbotron .h1 {
5513
+ font-size: 67.5px;
5514
+ }
5515
+ }
5516
+ .sg-wrapper-less .thumbnail {
5517
+ display: block;
5518
+ padding: 4px;
5519
+ margin-bottom: 21px;
5520
+ line-height: 1.42857143;
5521
+ background-color: #ffffff;
5522
+ border: 1px solid #dddddd;
5523
+ border-radius: 0;
5524
+ -webkit-transition: border 0.2s ease-in-out;
5525
+ -o-transition: border 0.2s ease-in-out;
5526
+ transition: border 0.2s ease-in-out;
5527
+ }
5528
+ .sg-wrapper-less .thumbnail > img,
5529
+ .sg-wrapper-less .thumbnail a > img {
5530
+ margin-left: auto;
5531
+ margin-right: auto;
5532
+ }
5533
+ .sg-wrapper-less a.thumbnail:hover,
5534
+ .sg-wrapper-less a.thumbnail:focus,
5535
+ .sg-wrapper-less a.thumbnail.active {
5536
+ border-color: #2780e3;
5537
+ }
5538
+ .sg-wrapper-less .thumbnail .caption {
5539
+ padding: 9px;
5540
+ color: #333333;
5541
+ }
5542
+ .sg-wrapper-less .alert {
5543
+ padding: 15px;
5544
+ margin-bottom: 21px;
5545
+ border: 1px solid transparent;
5546
+ border-radius: 0;
5547
+ }
5548
+ .sg-wrapper-less .alert h4 {
5549
+ margin-top: 0;
5550
+ color: inherit;
5551
+ }
5552
+ .sg-wrapper-less .alert .alert-link {
5553
+ font-weight: bold;
5554
+ }
5555
+ .sg-wrapper-less .alert > p,
5556
+ .sg-wrapper-less .alert > ul {
5557
+ margin-bottom: 0;
5558
+ }
5559
+ .sg-wrapper-less .alert > p + p {
5560
+ margin-top: 5px;
5561
+ }
5562
+ .sg-wrapper-less .alert-dismissable,
5563
+ .sg-wrapper-less .alert-dismissible {
5564
+ padding-right: 35px;
5565
+ }
5566
+ .sg-wrapper-less .alert-dismissable .close,
5567
+ .sg-wrapper-less .alert-dismissible .close {
5568
+ position: relative;
5569
+ top: -2px;
5570
+ right: -21px;
5571
+ color: inherit;
5572
+ }
5573
+ .sg-wrapper-less .alert-success {
5574
+ background-color: #3fb618;
5575
+ border-color: #4e9f15;
5576
+ color: #ffffff;
5577
+ }
5578
+ .sg-wrapper-less .alert-success hr {
5579
+ border-top-color: #438912;
5580
+ }
5581
+ .sg-wrapper-less .alert-success .alert-link {
5582
+ color: #e6e6e6;
5583
+ }
5584
+ .sg-wrapper-less .alert-info {
5585
+ background-color: #9954bb;
5586
+ border-color: #7643a8;
5587
+ color: #ffffff;
5588
+ }
5589
+ .sg-wrapper-less .alert-info hr {
5590
+ border-top-color: #693c96;
5591
+ }
5592
+ .sg-wrapper-less .alert-info .alert-link {
5593
+ color: #e6e6e6;
5594
+ }
5595
+ .sg-wrapper-less .alert-warning {
5596
+ background-color: #ff7518;
5597
+ border-color: #ff4309;
5598
+ color: #ffffff;
5599
+ }
5600
+ .sg-wrapper-less .alert-warning hr {
5601
+ border-top-color: #ee3800;
5602
+ }
5603
+ .sg-wrapper-less .alert-warning .alert-link {
5604
+ color: #e6e6e6;
5605
+ }
5606
+ .sg-wrapper-less .alert-danger {
5607
+ background-color: #ff0039;
5608
+ border-color: #f0005e;
5609
+ color: #ffffff;
5610
+ }
5611
+ .sg-wrapper-less .alert-danger hr {
5612
+ border-top-color: #d60054;
5613
+ }
5614
+ .sg-wrapper-less .alert-danger .alert-link {
5615
+ color: #e6e6e6;
5616
+ }
5617
+ @-webkit-keyframes progress-bar-stripes {
5618
+ from {
5619
+ background-position: 40px 0;
5620
+ }
5621
+ to {
5622
+ background-position: 0 0;
5623
+ }
5624
+ }
5625
+ @-o-keyframes progress-bar-stripes {
5626
+ from {
5627
+ background-position: 40px 0;
5628
+ }
5629
+ to {
5630
+ background-position: 0 0;
5631
+ }
5632
+ }
5633
+ @keyframes progress-bar-stripes {
5634
+ from {
5635
+ background-position: 40px 0;
5636
+ }
5637
+ to {
5638
+ background-position: 0 0;
5639
+ }
5640
+ }
5641
+ .sg-wrapper-less .progress {
5642
+ overflow: hidden;
5643
+ height: 21px;
5644
+ margin-bottom: 21px;
5645
+ background-color: #cccccc;
5646
+ border-radius: 0;
5647
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5648
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5649
+ }
5650
+ .sg-wrapper-less .progress-bar {
5651
+ float: left;
5652
+ width: 0%;
5653
+ height: 100%;
5654
+ font-size: 13px;
5655
+ line-height: 21px;
5656
+ color: #ffffff;
5657
+ text-align: center;
5658
+ background-color: #2780e3;
5659
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5660
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5661
+ -webkit-transition: width 0.6s ease;
5662
+ -o-transition: width 0.6s ease;
5663
+ transition: width 0.6s ease;
5664
+ }
5665
+ .sg-wrapper-less .progress-striped .progress-bar,
5666
+ .sg-wrapper-less .progress-bar-striped {
5667
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5668
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5669
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5670
+ -webkit-background-size: 40px 40px;
5671
+ background-size: 40px 40px;
5672
+ }
5673
+ .sg-wrapper-less .progress.active .progress-bar,
5674
+ .sg-wrapper-less .progress-bar.active {
5675
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
5676
+ -o-animation: progress-bar-stripes 2s linear infinite;
5677
+ animation: progress-bar-stripes 2s linear infinite;
5678
+ }
5679
+ .sg-wrapper-less .progress-bar-success {
5680
+ background-color: #3fb618;
5681
+ }
5682
+ .sg-wrapper-less .progress-striped .progress-bar-success {
5683
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5684
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5685
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5686
+ }
5687
+ .sg-wrapper-less .progress-bar-info {
5688
+ background-color: #9954bb;
5689
+ }
5690
+ .sg-wrapper-less .progress-striped .progress-bar-info {
5691
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5692
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5693
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5694
+ }
5695
+ .sg-wrapper-less .progress-bar-warning {
5696
+ background-color: #ff7518;
5697
+ }
5698
+ .sg-wrapper-less .progress-striped .progress-bar-warning {
5699
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5700
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5701
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5702
+ }
5703
+ .sg-wrapper-less .progress-bar-danger {
5704
+ background-color: #ff0039;
5705
+ }
5706
+ .sg-wrapper-less .progress-striped .progress-bar-danger {
5707
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5708
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5709
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5710
+ }
5711
+ .sg-wrapper-less .media {
5712
+ margin-top: 15px;
5713
+ }
5714
+ .sg-wrapper-less .media:first-child {
5715
+ margin-top: 0;
5716
+ }
5717
+ .sg-wrapper-less .media,
5718
+ .sg-wrapper-less .media-body {
5719
+ zoom: 1;
5720
+ overflow: hidden;
5721
+ }
5722
+ .sg-wrapper-less .media-body {
5723
+ width: 10000px;
5724
+ }
5725
+ .sg-wrapper-less .media-object {
5726
+ display: block;
5727
+ }
5728
+ .sg-wrapper-less .media-right,
5729
+ .sg-wrapper-less .media > .pull-right {
5730
+ padding-left: 10px;
5731
+ }
5732
+ .sg-wrapper-less .media-left,
5733
+ .sg-wrapper-less .media > .pull-left {
5734
+ padding-right: 10px;
5735
+ }
5736
+ .sg-wrapper-less .media-left,
5737
+ .sg-wrapper-less .media-right,
5738
+ .sg-wrapper-less .media-body {
5739
+ display: table-cell;
5740
+ vertical-align: top;
5741
+ }
5742
+ .sg-wrapper-less .media-middle {
5743
+ vertical-align: middle;
5744
+ }
5745
+ .sg-wrapper-less .media-bottom {
5746
+ vertical-align: bottom;
5747
+ }
5748
+ .sg-wrapper-less .media-heading {
5749
+ margin-top: 0;
5750
+ margin-bottom: 5px;
5751
+ }
5752
+ .sg-wrapper-less .media-list {
5753
+ padding-left: 0;
5754
+ list-style: none;
5755
+ }
5756
+ .sg-wrapper-less .list-group {
5757
+ margin-bottom: 20px;
5758
+ padding-left: 0;
5759
+ }
5760
+ .sg-wrapper-less .list-group-item {
5761
+ position: relative;
5762
+ display: block;
5763
+ padding: 10px 15px;
5764
+ margin-bottom: -1px;
5765
+ background-color: #ffffff;
5766
+ border: 1px solid #dddddd;
5767
+ }
5768
+ .sg-wrapper-less .list-group-item:first-child {
5769
+ border-top-right-radius: 0;
5770
+ border-top-left-radius: 0;
5771
+ }
5772
+ .sg-wrapper-less .list-group-item:last-child {
5773
+ margin-bottom: 0;
5774
+ border-bottom-right-radius: 0;
5775
+ border-bottom-left-radius: 0;
5776
+ }
5777
+ .sg-wrapper-less a.list-group-item {
5778
+ color: #555555;
5779
+ }
5780
+ .sg-wrapper-less a.list-group-item .list-group-item-heading {
5781
+ color: #333333;
5782
+ }
5783
+ .sg-wrapper-less a.list-group-item:hover,
5784
+ .sg-wrapper-less a.list-group-item:focus {
5785
+ text-decoration: none;
5786
+ color: #555555;
5787
+ background-color: #f5f5f5;
5788
+ }
5789
+ .sg-wrapper-less .list-group-item.disabled,
5790
+ .sg-wrapper-less .list-group-item.disabled:hover,
5791
+ .sg-wrapper-less .list-group-item.disabled:focus {
5792
+ background-color: #e6e6e6;
5793
+ color: #999999;
5794
+ cursor: not-allowed;
5795
+ }
5796
+ .sg-wrapper-less .list-group-item.disabled .list-group-item-heading,
5797
+ .sg-wrapper-less .list-group-item.disabled:hover .list-group-item-heading,
5798
+ .sg-wrapper-less .list-group-item.disabled:focus .list-group-item-heading {
5799
+ color: inherit;
5800
+ }
5801
+ .sg-wrapper-less .list-group-item.disabled .list-group-item-text,
5802
+ .sg-wrapper-less .list-group-item.disabled:hover .list-group-item-text,
5803
+ .sg-wrapper-less .list-group-item.disabled:focus .list-group-item-text {
5804
+ color: #999999;
5805
+ }
5806
+ .sg-wrapper-less .list-group-item.active,
5807
+ .sg-wrapper-less .list-group-item.active:hover,
5808
+ .sg-wrapper-less .list-group-item.active:focus {
5809
+ z-index: 2;
5810
+ color: #ffffff;
5811
+ background-color: #2780e3;
5812
+ border-color: #dddddd;
5813
+ }
5814
+ .sg-wrapper-less .list-group-item.active .list-group-item-heading,
5815
+ .sg-wrapper-less .list-group-item.active:hover .list-group-item-heading,
5816
+ .sg-wrapper-less .list-group-item.active:focus .list-group-item-heading,
5817
+ .sg-wrapper-less .list-group-item.active .list-group-item-heading > small,
5818
+ .sg-wrapper-less .list-group-item.active:hover .list-group-item-heading > small,
5819
+ .sg-wrapper-less .list-group-item.active:focus .list-group-item-heading > small,
5820
+ .sg-wrapper-less .list-group-item.active .list-group-item-heading > .small,
5821
+ .sg-wrapper-less .list-group-item.active:hover .list-group-item-heading > .small,
5822
+ .sg-wrapper-less .list-group-item.active:focus .list-group-item-heading > .small {
5823
+ color: inherit;
5824
+ }
5825
+ .sg-wrapper-less .list-group-item.active .list-group-item-text,
5826
+ .sg-wrapper-less .list-group-item.active:hover .list-group-item-text,
5827
+ .sg-wrapper-less .list-group-item.active:focus .list-group-item-text {
5828
+ color: #dceafa;
5829
+ }
5830
+ .sg-wrapper-less .list-group-item-success {
5831
+ color: #ffffff;
5832
+ background-color: #3fb618;
5833
+ }
5834
+ .sg-wrapper-less a.list-group-item-success {
5835
+ color: #ffffff;
5836
+ }
5837
+ .sg-wrapper-less a.list-group-item-success .list-group-item-heading {
5838
+ color: inherit;
5839
+ }
5840
+ .sg-wrapper-less a.list-group-item-success:hover,
5841
+ .sg-wrapper-less a.list-group-item-success:focus {
5842
+ color: #ffffff;
5843
+ background-color: #379f15;
5844
+ }
5845
+ .sg-wrapper-less a.list-group-item-success.active,
5846
+ .sg-wrapper-less a.list-group-item-success.active:hover,
5847
+ .sg-wrapper-less a.list-group-item-success.active:focus {
5848
+ color: #fff;
5849
+ background-color: #ffffff;
5850
+ border-color: #ffffff;
5851
+ }
5852
+ .sg-wrapper-less .list-group-item-info {
5853
+ color: #ffffff;
5854
+ background-color: #9954bb;
5855
+ }
5856
+ .sg-wrapper-less a.list-group-item-info {
5857
+ color: #ffffff;
5858
+ }
5859
+ .sg-wrapper-less a.list-group-item-info .list-group-item-heading {
5860
+ color: inherit;
5861
+ }
5862
+ .sg-wrapper-less a.list-group-item-info:hover,
5863
+ .sg-wrapper-less a.list-group-item-info:focus {
5864
+ color: #ffffff;
5865
+ background-color: #8d46b0;
5866
+ }
5867
+ .sg-wrapper-less a.list-group-item-info.active,
5868
+ .sg-wrapper-less a.list-group-item-info.active:hover,
5869
+ .sg-wrapper-less a.list-group-item-info.active:focus {
5870
+ color: #fff;
5871
+ background-color: #ffffff;
5872
+ border-color: #ffffff;
5873
+ }
5874
+ .sg-wrapper-less .list-group-item-warning {
5875
+ color: #ffffff;
5876
+ background-color: #ff7518;
5877
+ }
5878
+ .sg-wrapper-less a.list-group-item-warning {
5879
+ color: #ffffff;
5880
+ }
5881
+ .sg-wrapper-less a.list-group-item-warning .list-group-item-heading {
5882
+ color: inherit;
5883
+ }
5884
+ .sg-wrapper-less a.list-group-item-warning:hover,
5885
+ .sg-wrapper-less a.list-group-item-warning:focus {
5886
+ color: #ffffff;
5887
+ background-color: #fe6600;
5888
+ }
5889
+ .sg-wrapper-less a.list-group-item-warning.active,
5890
+ .sg-wrapper-less a.list-group-item-warning.active:hover,
5891
+ .sg-wrapper-less a.list-group-item-warning.active:focus {
5892
+ color: #fff;
5893
+ background-color: #ffffff;
5894
+ border-color: #ffffff;
5895
+ }
5896
+ .sg-wrapper-less .list-group-item-danger {
5897
+ color: #ffffff;
5898
+ background-color: #ff0039;
5899
+ }
5900
+ .sg-wrapper-less a.list-group-item-danger {
5901
+ color: #ffffff;
5902
+ }
5903
+ .sg-wrapper-less a.list-group-item-danger .list-group-item-heading {
5904
+ color: inherit;
5905
+ }
5906
+ .sg-wrapper-less a.list-group-item-danger:hover,
5907
+ .sg-wrapper-less a.list-group-item-danger:focus {
5908
+ color: #ffffff;
5909
+ background-color: #e60033;
5910
+ }
5911
+ .sg-wrapper-less a.list-group-item-danger.active,
5912
+ .sg-wrapper-less a.list-group-item-danger.active:hover,
5913
+ .sg-wrapper-less a.list-group-item-danger.active:focus {
5914
+ color: #fff;
5915
+ background-color: #ffffff;
5916
+ border-color: #ffffff;
5917
+ }
5918
+ .sg-wrapper-less .list-group-item-heading {
5919
+ margin-top: 0;
5920
+ margin-bottom: 5px;
5921
+ }
5922
+ .sg-wrapper-less .list-group-item-text {
5923
+ margin-bottom: 0;
5924
+ line-height: 1.3;
5925
+ }
5926
+ .sg-wrapper-less .panel {
5927
+ margin-bottom: 21px;
5928
+ background-color: #ffffff;
5929
+ border: 1px solid transparent;
5930
+ border-radius: 0;
5931
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5932
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5933
+ }
5934
+ .sg-wrapper-less .panel-body {
5935
+ padding: 15px;
5936
+ }
5937
+ .sg-wrapper-less .panel-heading {
5938
+ padding: 10px 15px;
5939
+ border-bottom: 1px solid transparent;
5940
+ border-top-right-radius: -1;
5941
+ border-top-left-radius: -1;
5942
+ }
5943
+ .sg-wrapper-less .panel-heading > .dropdown .dropdown-toggle {
5944
+ color: inherit;
5945
+ }
5946
+ .sg-wrapper-less .panel-title {
5947
+ margin-top: 0;
5948
+ margin-bottom: 0;
5949
+ font-size: 17px;
5950
+ color: inherit;
5951
+ }
5952
+ .sg-wrapper-less .panel-title > a,
5953
+ .sg-wrapper-less .panel-title > small,
5954
+ .sg-wrapper-less .panel-title > .small,
5955
+ .sg-wrapper-less .panel-title > small > a,
5956
+ .sg-wrapper-less .panel-title > .small > a {
5957
+ color: inherit;
5958
+ }
5959
+ .sg-wrapper-less .panel-footer {
5960
+ padding: 10px 15px;
5961
+ background-color: #f5f5f5;
5962
+ border-top: 1px solid #dddddd;
5963
+ border-bottom-right-radius: -1;
5964
+ border-bottom-left-radius: -1;
5965
+ }
5966
+ .sg-wrapper-less .panel > .list-group,
5967
+ .sg-wrapper-less .panel > .panel-collapse > .list-group {
5968
+ margin-bottom: 0;
5969
+ }
5970
+ .sg-wrapper-less .panel > .list-group .list-group-item,
5971
+ .sg-wrapper-less .panel > .panel-collapse > .list-group .list-group-item {
5972
+ border-width: 1px 0;
5973
+ border-radius: 0;
5974
+ }
5975
+ .sg-wrapper-less .panel > .list-group:first-child .list-group-item:first-child,
5976
+ .sg-wrapper-less .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
5977
+ border-top: 0;
5978
+ border-top-right-radius: -1;
5979
+ border-top-left-radius: -1;
5980
+ }
5981
+ .sg-wrapper-less .panel > .list-group:last-child .list-group-item:last-child,
5982
+ .sg-wrapper-less .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
5983
+ border-bottom: 0;
5984
+ border-bottom-right-radius: -1;
5985
+ border-bottom-left-radius: -1;
5986
+ }
5987
+ .sg-wrapper-less .panel-heading + .list-group .list-group-item:first-child {
5988
+ border-top-width: 0;
5989
+ }
5990
+ .sg-wrapper-less .list-group + .panel-footer {
5991
+ border-top-width: 0;
5992
+ }
5993
+ .sg-wrapper-less .panel > .table,
5994
+ .sg-wrapper-less .panel > .table-responsive > .table,
5995
+ .sg-wrapper-less .panel > .panel-collapse > .table {
5996
+ margin-bottom: 0;
5997
+ }
5998
+ .sg-wrapper-less .panel > .table caption,
5999
+ .sg-wrapper-less .panel > .table-responsive > .table caption,
6000
+ .sg-wrapper-less .panel > .panel-collapse > .table caption {
6001
+ padding-left: 15px;
6002
+ padding-right: 15px;
6003
+ }
6004
+ .sg-wrapper-less .panel > .table:first-child,
6005
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child {
6006
+ border-top-right-radius: -1;
6007
+ border-top-left-radius: -1;
6008
+ }
6009
+ .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child,
6010
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
6011
+ .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child,
6012
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
6013
+ border-top-left-radius: -1;
6014
+ border-top-right-radius: -1;
6015
+ }
6016
+ .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
6017
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
6018
+ .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
6019
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
6020
+ .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
6021
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
6022
+ .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
6023
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
6024
+ border-top-left-radius: -1;
6025
+ }
6026
+ .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
6027
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
6028
+ .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
6029
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
6030
+ .sg-wrapper-less .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
6031
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
6032
+ .sg-wrapper-less .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
6033
+ .sg-wrapper-less .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
6034
+ border-top-right-radius: -1;
6035
+ }
6036
+ .sg-wrapper-less .panel > .table:last-child,
6037
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child {
6038
+ border-bottom-right-radius: -1;
6039
+ border-bottom-left-radius: -1;
6040
+ }
6041
+ .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child,
6042
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
6043
+ .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child,
6044
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
6045
+ border-bottom-left-radius: -1;
6046
+ border-bottom-right-radius: -1;
6047
+ }
6048
+ .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
6049
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
6050
+ .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
6051
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
6052
+ .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
6053
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
6054
+ .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
6055
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
6056
+ border-bottom-left-radius: -1;
6057
+ }
6058
+ .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
6059
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
6060
+ .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
6061
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
6062
+ .sg-wrapper-less .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
6063
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
6064
+ .sg-wrapper-less .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
6065
+ .sg-wrapper-less .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
6066
+ border-bottom-right-radius: -1;
6067
+ }
6068
+ .sg-wrapper-less .panel > .panel-body + .table,
6069
+ .sg-wrapper-less .panel > .panel-body + .table-responsive,
6070
+ .sg-wrapper-less .panel > .table + .panel-body,
6071
+ .sg-wrapper-less .panel > .table-responsive + .panel-body {
6072
+ border-top: 1px solid #dddddd;
6073
+ }
6074
+ .sg-wrapper-less .panel > .table > tbody:first-child > tr:first-child th,
6075
+ .sg-wrapper-less .panel > .table > tbody:first-child > tr:first-child td {
6076
+ border-top: 0;
6077
+ }
6078
+ .sg-wrapper-less .panel > .table-bordered,
6079
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered {
6080
+ border: 0;
6081
+ }
6082
+ .sg-wrapper-less .panel > .table-bordered > thead > tr > th:first-child,
6083
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
6084
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr > th:first-child,
6085
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
6086
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr > th:first-child,
6087
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
6088
+ .sg-wrapper-less .panel > .table-bordered > thead > tr > td:first-child,
6089
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
6090
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr > td:first-child,
6091
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
6092
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr > td:first-child,
6093
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
6094
+ border-left: 0;
6095
+ }
6096
+ .sg-wrapper-less .panel > .table-bordered > thead > tr > th:last-child,
6097
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
6098
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr > th:last-child,
6099
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
6100
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr > th:last-child,
6101
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
6102
+ .sg-wrapper-less .panel > .table-bordered > thead > tr > td:last-child,
6103
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
6104
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr > td:last-child,
6105
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
6106
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr > td:last-child,
6107
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
6108
+ border-right: 0;
6109
+ }
6110
+ .sg-wrapper-less .panel > .table-bordered > thead > tr:first-child > td,
6111
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
6112
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr:first-child > td,
6113
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
6114
+ .sg-wrapper-less .panel > .table-bordered > thead > tr:first-child > th,
6115
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
6116
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr:first-child > th,
6117
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
6118
+ border-bottom: 0;
6119
+ }
6120
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr:last-child > td,
6121
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
6122
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr:last-child > td,
6123
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
6124
+ .sg-wrapper-less .panel > .table-bordered > tbody > tr:last-child > th,
6125
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
6126
+ .sg-wrapper-less .panel > .table-bordered > tfoot > tr:last-child > th,
6127
+ .sg-wrapper-less .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
6128
+ border-bottom: 0;
6129
+ }
6130
+ .sg-wrapper-less .panel > .table-responsive {
6131
+ border: 0;
6132
+ margin-bottom: 0;
6133
+ }
6134
+ .sg-wrapper-less .panel-group {
6135
+ margin-bottom: 21px;
6136
+ }
6137
+ .sg-wrapper-less .panel-group .panel {
6138
+ margin-bottom: 0;
6139
+ border-radius: 0;
6140
+ }
6141
+ .sg-wrapper-less .panel-group .panel + .panel {
6142
+ margin-top: 5px;
6143
+ }
6144
+ .sg-wrapper-less .panel-group .panel-heading {
6145
+ border-bottom: 0;
6146
+ }
6147
+ .sg-wrapper-less .panel-group .panel-heading + .panel-collapse > .panel-body,
6148
+ .sg-wrapper-less .panel-group .panel-heading + .panel-collapse > .list-group {
6149
+ border-top: 1px solid #dddddd;
6150
+ }
6151
+ .sg-wrapper-less .panel-group .panel-footer {
6152
+ border-top: 0;
6153
+ }
6154
+ .sg-wrapper-less .panel-group .panel-footer + .panel-collapse .panel-body {
6155
+ border-bottom: 1px solid #dddddd;
6156
+ }
6157
+ .sg-wrapper-less .panel-default {
6158
+ border-color: #dddddd;
6159
+ }
6160
+ .sg-wrapper-less .panel-default > .panel-heading {
6161
+ color: #333333;
6162
+ background-color: #f5f5f5;
6163
+ border-color: #dddddd;
6164
+ }
6165
+ .sg-wrapper-less .panel-default > .panel-heading + .panel-collapse > .panel-body {
6166
+ border-top-color: #dddddd;
6167
+ }
6168
+ .sg-wrapper-less .panel-default > .panel-heading .badge {
6169
+ color: #f5f5f5;
6170
+ background-color: #333333;
6171
+ }
6172
+ .sg-wrapper-less .panel-default > .panel-footer + .panel-collapse > .panel-body {
6173
+ border-bottom-color: #dddddd;
6174
+ }
6175
+ .sg-wrapper-less .panel-primary {
6176
+ border-color: #2780e3;
6177
+ }
6178
+ .sg-wrapper-less .panel-primary > .panel-heading {
6179
+ color: #ffffff;
6180
+ background-color: #2780e3;
6181
+ border-color: #2780e3;
6182
+ }
6183
+ .sg-wrapper-less .panel-primary > .panel-heading + .panel-collapse > .panel-body {
6184
+ border-top-color: #2780e3;
6185
+ }
6186
+ .sg-wrapper-less .panel-primary > .panel-heading .badge {
6187
+ color: #2780e3;
6188
+ background-color: #ffffff;
6189
+ }
6190
+ .sg-wrapper-less .panel-primary > .panel-footer + .panel-collapse > .panel-body {
6191
+ border-bottom-color: #2780e3;
6192
+ }
6193
+ .sg-wrapper-less .panel-success {
6194
+ border-color: #4e9f15;
6195
+ }
6196
+ .sg-wrapper-less .panel-success > .panel-heading {
6197
+ color: #ffffff;
6198
+ background-color: #3fb618;
6199
+ border-color: #4e9f15;
6200
+ }
6201
+ .sg-wrapper-less .panel-success > .panel-heading + .panel-collapse > .panel-body {
6202
+ border-top-color: #4e9f15;
6203
+ }
6204
+ .sg-wrapper-less .panel-success > .panel-heading .badge {
6205
+ color: #3fb618;
6206
+ background-color: #ffffff;
6207
+ }
6208
+ .sg-wrapper-less .panel-success > .panel-footer + .panel-collapse > .panel-body {
6209
+ border-bottom-color: #4e9f15;
6210
+ }
6211
+ .sg-wrapper-less .panel-info {
6212
+ border-color: #7643a8;
6213
+ }
6214
+ .sg-wrapper-less .panel-info > .panel-heading {
6215
+ color: #ffffff;
6216
+ background-color: #9954bb;
6217
+ border-color: #7643a8;
6218
+ }
6219
+ .sg-wrapper-less .panel-info > .panel-heading + .panel-collapse > .panel-body {
6220
+ border-top-color: #7643a8;
6221
+ }
6222
+ .sg-wrapper-less .panel-info > .panel-heading .badge {
6223
+ color: #9954bb;
6224
+ background-color: #ffffff;
6225
+ }
6226
+ .sg-wrapper-less .panel-info > .panel-footer + .panel-collapse > .panel-body {
6227
+ border-bottom-color: #7643a8;
6228
+ }
6229
+ .sg-wrapper-less .panel-warning {
6230
+ border-color: #ff4309;
6231
+ }
6232
+ .sg-wrapper-less .panel-warning > .panel-heading {
6233
+ color: #ffffff;
6234
+ background-color: #ff7518;
6235
+ border-color: #ff4309;
6236
+ }
6237
+ .sg-wrapper-less .panel-warning > .panel-heading + .panel-collapse > .panel-body {
6238
+ border-top-color: #ff4309;
6239
+ }
6240
+ .sg-wrapper-less .panel-warning > .panel-heading .badge {
6241
+ color: #ff7518;
6242
+ background-color: #ffffff;
6243
+ }
6244
+ .sg-wrapper-less .panel-warning > .panel-footer + .panel-collapse > .panel-body {
6245
+ border-bottom-color: #ff4309;
6246
+ }
6247
+ .sg-wrapper-less .panel-danger {
6248
+ border-color: #f0005e;
6249
+ }
6250
+ .sg-wrapper-less .panel-danger > .panel-heading {
6251
+ color: #ffffff;
6252
+ background-color: #ff0039;
6253
+ border-color: #f0005e;
6254
+ }
6255
+ .sg-wrapper-less .panel-danger > .panel-heading + .panel-collapse > .panel-body {
6256
+ border-top-color: #f0005e;
6257
+ }
6258
+ .sg-wrapper-less .panel-danger > .panel-heading .badge {
6259
+ color: #ff0039;
6260
+ background-color: #ffffff;
6261
+ }
6262
+ .sg-wrapper-less .panel-danger > .panel-footer + .panel-collapse > .panel-body {
6263
+ border-bottom-color: #f0005e;
6264
+ }
6265
+ .sg-wrapper-less .embed-responsive {
6266
+ position: relative;
6267
+ display: block;
6268
+ height: 0;
6269
+ padding: 0;
6270
+ overflow: hidden;
6271
+ }
6272
+ .sg-wrapper-less .embed-responsive .embed-responsive-item,
6273
+ .sg-wrapper-less .embed-responsive iframe,
6274
+ .sg-wrapper-less .embed-responsive embed,
6275
+ .sg-wrapper-less .embed-responsive object,
6276
+ .sg-wrapper-less .embed-responsive video {
6277
+ position: absolute;
6278
+ top: 0;
6279
+ left: 0;
6280
+ bottom: 0;
6281
+ height: 100%;
6282
+ width: 100%;
6283
+ border: 0;
6284
+ }
6285
+ .sg-wrapper-less .embed-responsive-16by9 {
6286
+ padding-bottom: 56.25%;
6287
+ }
6288
+ .sg-wrapper-less .embed-responsive-4by3 {
6289
+ padding-bottom: 75%;
6290
+ }
6291
+ .sg-wrapper-less .well {
6292
+ min-height: 20px;
6293
+ padding: 19px;
6294
+ margin-bottom: 20px;
6295
+ background-color: #f5f5f5;
6296
+ border: 1px solid #e3e3e3;
6297
+ border-radius: 0;
6298
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
6299
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
6300
+ }
6301
+ .sg-wrapper-less .well blockquote {
6302
+ border-color: #ddd;
6303
+ border-color: rgba(0, 0, 0, 0.15);
6304
+ }
6305
+ .sg-wrapper-less .well-lg {
6306
+ padding: 24px;
6307
+ border-radius: 0;
6308
+ }
6309
+ .sg-wrapper-less .well-sm {
6310
+ padding: 9px;
6311
+ border-radius: 0;
6312
+ }
6313
+ .sg-wrapper-less .close {
6314
+ float: right;
6315
+ font-size: 22.5px;
6316
+ font-weight: bold;
6317
+ line-height: 1;
6318
+ color: #ffffff;
6319
+ text-shadow: 0 1px 0 #ffffff;
6320
+ opacity: 0.2;
6321
+ filter: alpha(opacity=20);
6322
+ }
6323
+ .sg-wrapper-less .close:hover,
6324
+ .sg-wrapper-less .close:focus {
6325
+ color: #ffffff;
6326
+ text-decoration: none;
6327
+ cursor: pointer;
6328
+ opacity: 0.5;
6329
+ filter: alpha(opacity=50);
6330
+ }
6331
+ .sg-wrapper-less button.close {
6332
+ padding: 0;
6333
+ cursor: pointer;
6334
+ background: transparent;
6335
+ border: 0;
6336
+ -webkit-appearance: none;
6337
+ }
6338
+ .sg-wrapper-less .modal-open {
6339
+ overflow: hidden;
6340
+ }
6341
+ .modal-close-button {
6342
+ display: inline-block;
6343
+ margin-right: 15px;
6344
+ color: #000000;
6345
+ cursor: pointer;
6346
+ }
6347
+ .sg-wrapper-less .modal {
6348
+ display: none;
6349
+ overflow: hidden;
6350
+ position: fixed;
6351
+ top: 0;
6352
+ right: 0;
6353
+ bottom: 0;
6354
+ left: 0;
6355
+ z-index: 1050;
6356
+ -webkit-overflow-scrolling: touch;
6357
+ outline: 0;
6358
+ max-width: none;
6359
+ width: 100%;
6360
+ background: none;
6361
+ padding: 0;
6362
+ }
6363
+ .sg-wrapper-less .modal.fade .modal-dialog {
6364
+ -webkit-transform: translate(0, -25%);
6365
+ -ms-transform: translate(0, -25%);
6366
+ -o-transform: translate(0, -25%);
6367
+ transform: translate(0, -25%);
6368
+ -webkit-transition: -webkit-transform 0.3s ease-out;
6369
+ -o-transition: -o-transform 0.3s ease-out;
6370
+ transition: transform 0.3s ease-out;
6371
+ }
6372
+ .sg-wrapper-less .modal.in .modal-dialog {
6373
+ -webkit-transform: translate(0, 0);
6374
+ -ms-transform: translate(0, 0);
6375
+ -o-transform: translate(0, 0);
6376
+ transform: translate(0, 0);
6377
+ }
6378
+ .sg-wrapper-less .modal-open .modal {
6379
+ overflow-x: hidden;
6380
+ overflow-y: auto;
6381
+ }
6382
+ .sg-wrapper-less .modal-dialog {
6383
+ position: relative;
6384
+ width: auto;
6385
+ margin: 10px;
6386
+ }
6387
+ .sg-wrapper-less .modal-content {
6388
+ position: relative;
6389
+ background-color: #ffffff;
6390
+ border: 1px solid #999999;
6391
+ border: 1px solid transparent;
6392
+ border-radius: 0;
6393
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
6394
+ box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
6395
+ -webkit-background-clip: padding-box;
6396
+ background-clip: padding-box;
6397
+ outline: 0;
6398
+ }
6399
+ .sg-wrapper-less .modal-backdrop {
6400
+ position: fixed;
6401
+ top: 0;
6402
+ right: 0;
6403
+ bottom: 0;
6404
+ left: 0;
6405
+ z-index: 1040;
6406
+ background-color: #000000;
6407
+ }
6408
+ .sg-wrapper-less .modal-backdrop.fade {
6409
+ opacity: 0;
6410
+ filter: alpha(opacity=0);
6411
+ }
6412
+ .sg-wrapper-less .modal-backdrop.in {
6413
+ opacity: 0.5;
6414
+ filter: alpha(opacity=50);
6415
+ }
6416
+ .sg-wrapper-less .modal-header {
6417
+ padding: 20px;
6418
+ min-height: 16.42857143px;
6419
+ background: #f8f8f8;
6420
+ }
6421
+ .sg-wrapper-less .modal-header .close {
6422
+ margin-top: -2px;
6423
+ }
6424
+ .sg-wrapper-less .modal-title {
6425
+ margin: 0;
6426
+ line-height: 1.42857143;
6427
+ color: #000000;
6428
+ font-weight: bold;
6429
+ }
6430
+ .sg-wrapper-less .modal-body {
6431
+ position: relative;
6432
+ padding: 20px;
6433
+ }
6434
+ .sg-wrapper-less .modal-footer {
6435
+ padding: 20px;
6436
+ text-align: right;
6437
+ background-color: #f8f8f8;
6438
+ }
6439
+ .sg-wrapper-less .modal-footer .btn + .btn {
6440
+ margin-left: 5px;
6441
+ margin-bottom: 0;
6442
+ }
6443
+ .sg-wrapper-less .modal-footer .btn-group .btn + .btn {
6444
+ margin-left: -1px;
6445
+ }
6446
+ .sg-wrapper-less .modal-footer .btn-block + .btn-block {
6447
+ margin-left: 0;
6448
+ }
6449
+ .sg-wrapper-less .modal-scrollbar-measure {
6450
+ position: absolute;
6451
+ top: -9999px;
6452
+ width: 50px;
6453
+ height: 50px;
6454
+ overflow: scroll;
6455
+ }
6456
+ @media (min-width: 768px) {
6457
+ .sg-wrapper-less .modal-dialog {
6458
+ width: 600px;
6459
+ margin: 30px auto;
6460
+ }
6461
+ .sg-wrapper-less .modal-content {
6462
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
6463
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
6464
+ }
6465
+ .sg-wrapper-less .modal-sm {
6466
+ width: 300px;
6467
+ }
6468
+ }
6469
+ @media (min-width: 992px) {
6470
+ .sg-wrapper-less .modal-lg {
6471
+ width: 900px;
6472
+ }
6473
+ }
6474
+ .sg-wrapper-less .tooltip {
6475
+ position: absolute;
6476
+ z-index: 1070;
6477
+ display: block;
6478
+ font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
6479
+ font-size: 13px;
6480
+ font-weight: normal;
6481
+ line-height: 1.4;
6482
+ opacity: 0;
6483
+ filter: alpha(opacity=0);
6484
+ }
6485
+ .sg-wrapper-less .tooltip.in {
6486
+ opacity: 0.9;
6487
+ filter: alpha(opacity=90);
6488
+ }
6489
+ .sg-wrapper-less .tooltip.top {
6490
+ margin-top: -3px;
6491
+ padding: 5px 0;
6492
+ }
6493
+ .sg-wrapper-less .tooltip.right {
6494
+ margin-left: 3px;
6495
+ padding: 0 5px;
6496
+ }
6497
+ .sg-wrapper-less .tooltip.bottom {
6498
+ margin-top: 3px;
6499
+ padding: 5px 0;
6500
+ }
6501
+ .sg-wrapper-less .tooltip.left {
6502
+ margin-left: -3px;
6503
+ padding: 0 5px;
6504
+ }
6505
+ .sg-wrapper-less .tooltip-inner {
6506
+ max-width: 200px;
6507
+ padding: 3px 8px;
6508
+ color: #ffffff;
6509
+ text-align: center;
6510
+ text-decoration: none;
6511
+ background-color: #000000;
6512
+ border-radius: 0;
6513
+ }
6514
+ .sg-wrapper-less .tooltip-arrow {
6515
+ position: absolute;
6516
+ width: 0;
6517
+ height: 0;
6518
+ border-color: transparent;
6519
+ border-style: solid;
6520
+ }
6521
+ .sg-wrapper-less .tooltip.top .tooltip-arrow {
6522
+ bottom: 0;
6523
+ left: 50%;
6524
+ margin-left: -5px;
6525
+ border-width: 5px 5px 0;
6526
+ border-top-color: #000000;
6527
+ }
6528
+ .sg-wrapper-less .tooltip.top-left .tooltip-arrow {
6529
+ bottom: 0;
6530
+ right: 5px;
6531
+ margin-bottom: -5px;
6532
+ border-width: 5px 5px 0;
6533
+ border-top-color: #000000;
6534
+ }
6535
+ .sg-wrapper-less .tooltip.top-right .tooltip-arrow {
6536
+ bottom: 0;
6537
+ left: 5px;
6538
+ margin-bottom: -5px;
6539
+ border-width: 5px 5px 0;
6540
+ border-top-color: #000000;
6541
+ }
6542
+ .sg-wrapper-less .tooltip.right .tooltip-arrow {
6543
+ top: 50%;
6544
+ left: 0;
6545
+ margin-top: -5px;
6546
+ border-width: 5px 5px 5px 0;
6547
+ border-right-color: #000000;
6548
+ }
6549
+ .sg-wrapper-less .tooltip.left .tooltip-arrow {
6550
+ top: 50%;
6551
+ right: 0;
6552
+ margin-top: -5px;
6553
+ border-width: 5px 0 5px 5px;
6554
+ border-left-color: #000000;
6555
+ }
6556
+ .sg-wrapper-less .tooltip.bottom .tooltip-arrow {
6557
+ top: 0;
6558
+ left: 50%;
6559
+ margin-left: -5px;
6560
+ border-width: 0 5px 5px;
6561
+ border-bottom-color: #000000;
6562
+ }
6563
+ .sg-wrapper-less .tooltip.bottom-left .tooltip-arrow {
6564
+ top: 0;
6565
+ right: 5px;
6566
+ margin-top: -5px;
6567
+ border-width: 0 5px 5px;
6568
+ border-bottom-color: #000000;
6569
+ }
6570
+ .sg-wrapper-less .tooltip.bottom-right .tooltip-arrow {
6571
+ top: 0;
6572
+ left: 5px;
6573
+ margin-top: -5px;
6574
+ border-width: 0 5px 5px;
6575
+ border-bottom-color: #000000;
6576
+ }
6577
+ .sg-wrapper-less .popover {
6578
+ position: absolute;
6579
+ top: 0;
6580
+ left: 0;
6581
+ z-index: 1060;
6582
+ display: none;
6583
+ max-width: 276px;
6584
+ padding: 1px;
6585
+ font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
6586
+ font-size: 15px;
6587
+ font-weight: normal;
6588
+ line-height: 1.42857143;
6589
+ text-align: left;
6590
+ background-color: #ffffff;
6591
+ -webkit-background-clip: padding-box;
6592
+ background-clip: padding-box;
6593
+ border: 1px solid #cccccc;
6594
+ border: 1px solid rgba(0, 0, 0, 0.2);
6595
+ border-radius: 0;
6596
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6597
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6598
+ white-space: normal;
6599
+ }
6600
+ .sg-wrapper-less .popover.top {
6601
+ margin-top: -10px;
6602
+ }
6603
+ .sg-wrapper-less .popover.right {
6604
+ margin-left: 10px;
6605
+ }
6606
+ .sg-wrapper-less .popover.bottom {
6607
+ margin-top: 10px;
6608
+ }
6609
+ .sg-wrapper-less .popover.left {
6610
+ margin-left: -10px;
6611
+ }
6612
+ .sg-wrapper-less .popover-title {
6613
+ margin: 0;
6614
+ padding: 8px 14px;
6615
+ font-size: 15px;
6616
+ background-color: #f7f7f7;
6617
+ border-bottom: 1px solid #ebebeb;
6618
+ border-radius: -1 -1 0 0;
6619
+ }
6620
+ .sg-wrapper-less .popover-content {
6621
+ padding: 9px 14px;
6622
+ }
6623
+ .sg-wrapper-less .popover > .arrow,
6624
+ .sg-wrapper-less .popover > .arrow:after {
6625
+ position: absolute;
6626
+ display: block;
6627
+ width: 0;
6628
+ height: 0;
6629
+ border-color: transparent;
6630
+ border-style: solid;
6631
+ }
6632
+ .sg-wrapper-less .popover > .arrow {
6633
+ border-width: 11px;
6634
+ }
6635
+ .sg-wrapper-less .popover > .arrow:after {
6636
+ border-width: 10px;
6637
+ content: "";
6638
+ }
6639
+ .sg-wrapper-less .popover.top > .arrow {
6640
+ left: 50%;
6641
+ margin-left: -11px;
6642
+ border-bottom-width: 0;
6643
+ border-top-color: #999999;
6644
+ border-top-color: rgba(0, 0, 0, 0.25);
6645
+ bottom: -11px;
6646
+ }
6647
+ .sg-wrapper-less .popover.top > .arrow:after {
6648
+ content: " ";
6649
+ bottom: 1px;
6650
+ margin-left: -10px;
6651
+ border-bottom-width: 0;
6652
+ border-top-color: #ffffff;
6653
+ }
6654
+ .sg-wrapper-less .popover.right > .arrow {
6655
+ top: 50%;
6656
+ left: -11px;
6657
+ margin-top: -11px;
6658
+ border-left-width: 0;
6659
+ border-right-color: #999999;
6660
+ border-right-color: rgba(0, 0, 0, 0.25);
6661
+ }
6662
+ .sg-wrapper-less .popover.right > .arrow:after {
6663
+ content: " ";
6664
+ left: 1px;
6665
+ bottom: -10px;
6666
+ border-left-width: 0;
6667
+ border-right-color: #ffffff;
6668
+ }
6669
+ .sg-wrapper-less .popover.bottom > .arrow {
6670
+ left: 50%;
6671
+ margin-left: -11px;
6672
+ border-top-width: 0;
6673
+ border-bottom-color: #999999;
6674
+ border-bottom-color: rgba(0, 0, 0, 0.25);
6675
+ top: -11px;
6676
+ }
6677
+ .sg-wrapper-less .popover.bottom > .arrow:after {
6678
+ content: " ";
6679
+ top: 1px;
6680
+ margin-left: -10px;
6681
+ border-top-width: 0;
6682
+ border-bottom-color: #ffffff;
6683
+ }
6684
+ .sg-wrapper-less .popover.left > .arrow {
6685
+ top: 50%;
6686
+ right: -11px;
6687
+ margin-top: -11px;
6688
+ border-right-width: 0;
6689
+ border-left-color: #999999;
6690
+ border-left-color: rgba(0, 0, 0, 0.25);
6691
+ }
6692
+ .sg-wrapper-less .popover.left > .arrow:after {
6693
+ content: " ";
6694
+ right: 1px;
6695
+ border-right-width: 0;
6696
+ border-left-color: #ffffff;
6697
+ bottom: -10px;
6698
+ }
6699
+ .sg-wrapper-less .carousel {
6700
+ position: relative;
6701
+ }
6702
+ .sg-wrapper-less .carousel-inner {
6703
+ position: relative;
6704
+ overflow: hidden;
6705
+ width: 100%;
6706
+ }
6707
+ .sg-wrapper-less .carousel-inner > .item {
6708
+ display: none;
6709
+ position: relative;
6710
+ -webkit-transition: 0.6s ease-in-out left;
6711
+ -o-transition: 0.6s ease-in-out left;
6712
+ transition: 0.6s ease-in-out left;
6713
+ }
6714
+ .sg-wrapper-less .carousel-inner > .item > img,
6715
+ .sg-wrapper-less .carousel-inner > .item > a > img {
6716
+ line-height: 1;
6717
+ }
6718
+ @media all and (transform-3d), (-webkit-transform-3d) {
6719
+ .sg-wrapper-less .carousel-inner > .item {
6720
+ -webkit-transition: -webkit-transform 0.6s ease-in-out;
6721
+ -o-transition: -o-transform 0.6s ease-in-out;
6722
+ transition: transform 0.6s ease-in-out;
6723
+ -webkit-backface-visibility: hidden;
6724
+ backface-visibility: hidden;
6725
+ -webkit-perspective: 1000;
6726
+ perspective: 1000;
6727
+ }
6728
+ .sg-wrapper-less .carousel-inner > .item.next,
6729
+ .sg-wrapper-less .carousel-inner > .item.active.right {
6730
+ -webkit-transform: translate3d(100%, 0, 0);
6731
+ transform: translate3d(100%, 0, 0);
6732
+ left: 0;
6733
+ }
6734
+ .sg-wrapper-less .carousel-inner > .item.prev,
6735
+ .sg-wrapper-less .carousel-inner > .item.active.left {
6736
+ -webkit-transform: translate3d(-100%, 0, 0);
6737
+ transform: translate3d(-100%, 0, 0);
6738
+ left: 0;
6739
+ }
6740
+ .sg-wrapper-less .carousel-inner > .item.next.left,
6741
+ .sg-wrapper-less .carousel-inner > .item.prev.right,
6742
+ .sg-wrapper-less .carousel-inner > .item.active {
6743
+ -webkit-transform: translate3d(0, 0, 0);
6744
+ transform: translate3d(0, 0, 0);
6745
+ left: 0;
6746
+ }
6747
+ }
6748
+ .sg-wrapper-less .carousel-inner > .active,
6749
+ .sg-wrapper-less .carousel-inner > .next,
6750
+ .sg-wrapper-less .carousel-inner > .prev {
6751
+ display: block;
6752
+ }
6753
+ .sg-wrapper-less .carousel-inner > .active {
6754
+ left: 0;
6755
+ }
6756
+ .sg-wrapper-less .carousel-inner > .next,
6757
+ .sg-wrapper-less .carousel-inner > .prev {
6758
+ position: absolute;
6759
+ top: 0;
6760
+ width: 100%;
6761
+ }
6762
+ .sg-wrapper-less .carousel-inner > .next {
6763
+ left: 100%;
6764
+ }
6765
+ .sg-wrapper-less .carousel-inner > .prev {
6766
+ left: -100%;
6767
+ }
6768
+ .sg-wrapper-less .carousel-inner > .next.left,
6769
+ .sg-wrapper-less .carousel-inner > .prev.right {
6770
+ left: 0;
6771
+ }
6772
+ .sg-wrapper-less .carousel-inner > .active.left {
6773
+ left: -100%;
6774
+ }
6775
+ .sg-wrapper-less .carousel-inner > .active.right {
6776
+ left: 100%;
6777
+ }
6778
+ .sg-wrapper-less .carousel-control {
6779
+ position: absolute;
6780
+ top: 0;
6781
+ left: 0;
6782
+ bottom: 0;
6783
+ width: 15%;
6784
+ opacity: 0.5;
6785
+ filter: alpha(opacity=50);
6786
+ font-size: 20px;
6787
+ color: #ffffff;
6788
+ text-align: center;
6789
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6790
+ }
6791
+ .sg-wrapper-less .carousel-control.left {
6792
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6793
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6794
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));
6795
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6796
+ background-repeat: repeat-x;
6797
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
6798
+ }
6799
+ .sg-wrapper-less .carousel-control.right {
6800
+ left: auto;
6801
+ right: 0;
6802
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6803
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6804
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));
6805
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6806
+ background-repeat: repeat-x;
6807
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
6808
+ }
6809
+ .sg-wrapper-less .carousel-control:hover,
6810
+ .sg-wrapper-less .carousel-control:focus {
6811
+ outline: 0;
6812
+ color: #ffffff;
6813
+ text-decoration: none;
6814
+ opacity: 0.9;
6815
+ filter: alpha(opacity=90);
6816
+ }
6817
+ .sg-wrapper-less .carousel-control .icon-prev,
6818
+ .sg-wrapper-less .carousel-control .icon-next,
6819
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-left,
6820
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-right {
6821
+ position: absolute;
6822
+ top: 50%;
6823
+ z-index: 5;
6824
+ display: inline-block;
6825
+ }
6826
+ .sg-wrapper-less .carousel-control .icon-prev,
6827
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-left {
6828
+ left: 50%;
6829
+ margin-left: -10px;
6830
+ }
6831
+ .sg-wrapper-less .carousel-control .icon-next,
6832
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-right {
6833
+ right: 50%;
6834
+ margin-right: -10px;
6835
+ }
6836
+ .sg-wrapper-less .carousel-control .icon-prev,
6837
+ .sg-wrapper-less .carousel-control .icon-next {
6838
+ width: 20px;
6839
+ height: 20px;
6840
+ margin-top: -10px;
6841
+ line-height: 1;
6842
+ font-family: serif;
6843
+ }
6844
+ .sg-wrapper-less .carousel-control .icon-prev:before {
6845
+ content: '\2039';
6846
+ }
6847
+ .sg-wrapper-less .carousel-control .icon-next:before {
6848
+ content: '\203a';
6849
+ }
6850
+ .sg-wrapper-less .carousel-indicators {
6851
+ position: absolute;
6852
+ bottom: 10px;
6853
+ left: 50%;
6854
+ z-index: 15;
6855
+ width: 60%;
6856
+ margin-left: -30%;
6857
+ padding-left: 0;
6858
+ list-style: none;
6859
+ text-align: center;
6860
+ }
6861
+ .sg-wrapper-less .carousel-indicators li {
6862
+ display: inline-block;
6863
+ width: 10px;
6864
+ height: 10px;
6865
+ margin: 1px;
6866
+ text-indent: -999px;
6867
+ border: 1px solid #ffffff;
6868
+ border-radius: 10px;
6869
+ cursor: pointer;
6870
+ background-color: #000 \9;
6871
+ background-color: rgba(0, 0, 0, 0);
6872
+ }
6873
+ .sg-wrapper-less .carousel-indicators .active {
6874
+ margin: 0;
6875
+ width: 12px;
6876
+ height: 12px;
6877
+ background-color: #ffffff;
6878
+ }
6879
+ .sg-wrapper-less .carousel-caption {
6880
+ position: absolute;
6881
+ left: 15%;
6882
+ right: 15%;
6883
+ bottom: 20px;
6884
+ z-index: 10;
6885
+ padding-top: 20px;
6886
+ padding-bottom: 20px;
6887
+ color: #ffffff;
6888
+ text-align: center;
6889
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6890
+ }
6891
+ .sg-wrapper-less .carousel-caption .btn {
6892
+ text-shadow: none;
6893
+ }
6894
+ @media screen and (min-width: 768px) {
6895
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-left,
6896
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-right,
6897
+ .sg-wrapper-less .carousel-control .icon-prev,
6898
+ .sg-wrapper-less .carousel-control .icon-next {
6899
+ width: 30px;
6900
+ height: 30px;
6901
+ margin-top: -15px;
6902
+ font-size: 30px;
6903
+ }
6904
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-left,
6905
+ .sg-wrapper-less .carousel-control .icon-prev {
6906
+ margin-left: -15px;
6907
+ }
6908
+ .sg-wrapper-less .carousel-control .glyphicon-chevron-right,
6909
+ .sg-wrapper-less .carousel-control .icon-next {
6910
+ margin-right: -15px;
6911
+ }
6912
+ .sg-wrapper-less .carousel-caption {
6913
+ left: 20%;
6914
+ right: 20%;
6915
+ padding-bottom: 30px;
6916
+ }
6917
+ .sg-wrapper-less .carousel-indicators {
6918
+ bottom: 20px;
6919
+ }
6920
+ }
6921
+ .sg-wrapper-less .clearfix:before,
6922
+ .sg-wrapper-less .clearfix:after,
6923
+ .sg-wrapper-less .dl-horizontal dd:before,
6924
+ .sg-wrapper-less .dl-horizontal dd:after,
6925
+ .sg-wrapper-less .container:before,
6926
+ .sg-wrapper-less .container:after,
6927
+ .sg-wrapper-less .container-fluid:before,
6928
+ .sg-wrapper-less .container-fluid:after,
6929
+ .sg-wrapper-less .row:before,
6930
+ .sg-wrapper-less .row:after,
6931
+ .sg-wrapper-less .form-horizontal .form-group:before,
6932
+ .sg-wrapper-less .form-horizontal .form-group:after,
6933
+ .sg-wrapper-less .btn-toolbar:before,
6934
+ .sg-wrapper-less .btn-toolbar:after,
6935
+ .sg-wrapper-less .btn-group-vertical > .btn-group:before,
6936
+ .sg-wrapper-less .btn-group-vertical > .btn-group:after,
6937
+ .sg-wrapper-less .nav:before,
6938
+ .sg-wrapper-less .nav:after,
6939
+ .sg-wrapper-less .navbar:before,
6940
+ .sg-wrapper-less .navbar:after,
6941
+ .sg-wrapper-less .navbar-header:before,
6942
+ .sg-wrapper-less .navbar-header:after,
6943
+ .sg-wrapper-less .navbar-collapse:before,
6944
+ .sg-wrapper-less .navbar-collapse:after,
6945
+ .sg-wrapper-less .pager:before,
6946
+ .sg-wrapper-less .pager:after,
6947
+ .sg-wrapper-less .panel-body:before,
6948
+ .sg-wrapper-less .panel-body:after,
6949
+ .sg-wrapper-less .modal-footer:before,
6950
+ .sg-wrapper-less .modal-footer:after {
6951
+ content: " ";
6952
+ display: table;
6953
+ }
6954
+ .sg-wrapper-less .clearfix:after,
6955
+ .sg-wrapper-less .dl-horizontal dd:after,
6956
+ .sg-wrapper-less .container:after,
6957
+ .sg-wrapper-less .container-fluid:after,
6958
+ .sg-wrapper-less .row:after,
6959
+ .sg-wrapper-less .form-horizontal .form-group:after,
6960
+ .sg-wrapper-less .btn-toolbar:after,
6961
+ .sg-wrapper-less .btn-group-vertical > .btn-group:after,
6962
+ .sg-wrapper-less .nav:after,
6963
+ .sg-wrapper-less .navbar:after,
6964
+ .sg-wrapper-less .navbar-header:after,
6965
+ .sg-wrapper-less .navbar-collapse:after,
6966
+ .sg-wrapper-less .pager:after,
6967
+ .sg-wrapper-less .panel-body:after,
6968
+ .sg-wrapper-less .modal-footer:after {
6969
+ clear: both;
6970
+ }
6971
+ .sg-wrapper-less .center-block {
6972
+ display: block;
6973
+ margin-left: auto;
6974
+ margin-right: auto;
6975
+ }
6976
+ .sg-wrapper-less .pull-right {
6977
+ float: right !important;
6978
+ }
6979
+ .sg-wrapper-less .pull-left {
6980
+ float: left !important;
6981
+ }
6982
+ .sg-wrapper-less .hide {
6983
+ display: none !important;
6984
+ }
6985
+ .sg-wrapper-less .show {
6986
+ display: block !important;
6987
+ }
6988
+ .sg-wrapper-less .invisible {
6989
+ visibility: hidden;
6990
+ }
6991
+ .sg-wrapper-less .text-hide {
6992
+ font: 0/0 a;
6993
+ color: transparent;
6994
+ text-shadow: none;
6995
+ background-color: transparent;
6996
+ border: 0;
6997
+ }
6998
+ .sg-wrapper-less .hidden {
6999
+ display: none !important;
7000
+ }
7001
+ .sg-wrapper-less .affix {
7002
+ position: fixed;
7003
+ }
7004
+ @-ms-viewport {
7005
+ width: device-width;
7006
+ }
7007
+ .sg-wrapper-less .visible-xs,
7008
+ .sg-wrapper-less .visible-sm,
7009
+ .sg-wrapper-less .visible-md,
7010
+ .sg-wrapper-less .visible-lg {
7011
+ display: none !important;
7012
+ }
7013
+ .sg-wrapper-less .visible-xs-block,
7014
+ .sg-wrapper-less .visible-xs-inline,
7015
+ .sg-wrapper-less .visible-xs-inline-block,
7016
+ .sg-wrapper-less .visible-sm-block,
7017
+ .sg-wrapper-less .visible-sm-inline,
7018
+ .sg-wrapper-less .visible-sm-inline-block,
7019
+ .sg-wrapper-less .visible-md-block,
7020
+ .sg-wrapper-less .visible-md-inline,
7021
+ .sg-wrapper-less .visible-md-inline-block,
7022
+ .sg-wrapper-less .visible-lg-block,
7023
+ .sg-wrapper-less .visible-lg-inline,
7024
+ .sg-wrapper-less .visible-lg-inline-block {
7025
+ display: none !important;
7026
+ }
7027
+ @media (max-width: 767px) {
7028
+ .sg-wrapper-less .visible-xs {
7029
+ display: block !important;
7030
+ }
7031
+ .sg-wrapper-less table.visible-xs {
7032
+ display: table;
7033
+ }
7034
+ .sg-wrapper-less tr.visible-xs {
7035
+ display: table-row !important;
7036
+ }
7037
+ .sg-wrapper-less th.visible-xs,
7038
+ .sg-wrapper-less td.visible-xs {
7039
+ display: table-cell !important;
7040
+ }
7041
+ }
7042
+ @media (max-width: 767px) {
7043
+ .sg-wrapper-less .visible-xs-block {
7044
+ display: block !important;
7045
+ }
7046
+ }
7047
+ @media (max-width: 767px) {
7048
+ .sg-wrapper-less .visible-xs-inline {
7049
+ display: inline !important;
7050
+ }
7051
+ }
7052
+ @media (max-width: 767px) {
7053
+ .sg-wrapper-less .visible-xs-inline-block {
7054
+ display: inline-block !important;
7055
+ }
7056
+ }
7057
+ @media (min-width: 768px) and (max-width: 991px) {
7058
+ .sg-wrapper-less .visible-sm {
7059
+ display: block !important;
7060
+ }
7061
+ .sg-wrapper-less table.visible-sm {
7062
+ display: table;
7063
+ }
7064
+ .sg-wrapper-less tr.visible-sm {
7065
+ display: table-row !important;
7066
+ }
7067
+ .sg-wrapper-less th.visible-sm,
7068
+ .sg-wrapper-less td.visible-sm {
7069
+ display: table-cell !important;
7070
+ }
7071
+ }
7072
+ @media (min-width: 768px) and (max-width: 991px) {
7073
+ .sg-wrapper-less .visible-sm-block {
7074
+ display: block !important;
7075
+ }
7076
+ }
7077
+ @media (min-width: 768px) and (max-width: 991px) {
7078
+ .sg-wrapper-less .visible-sm-inline {
7079
+ display: inline !important;
7080
+ }
7081
+ }
7082
+ @media (min-width: 768px) and (max-width: 991px) {
7083
+ .sg-wrapper-less .visible-sm-inline-block {
7084
+ display: inline-block !important;
7085
+ }
7086
+ }
7087
+ @media (min-width: 992px) and (max-width: 1199px) {
7088
+ .sg-wrapper-less .visible-md {
7089
+ display: block !important;
7090
+ }
7091
+ .sg-wrapper-less table.visible-md {
7092
+ display: table;
7093
+ }
7094
+ .sg-wrapper-less tr.visible-md {
7095
+ display: table-row !important;
7096
+ }
7097
+ .sg-wrapper-less th.visible-md,
7098
+ .sg-wrapper-less td.visible-md {
7099
+ display: table-cell !important;
7100
+ }
7101
+ }
7102
+ @media (min-width: 992px) and (max-width: 1199px) {
7103
+ .sg-wrapper-less .visible-md-block {
7104
+ display: block !important;
7105
+ }
7106
+ }
7107
+ @media (min-width: 992px) and (max-width: 1199px) {
7108
+ .sg-wrapper-less .visible-md-inline {
7109
+ display: inline !important;
7110
+ }
7111
+ }
7112
+ @media (min-width: 992px) and (max-width: 1199px) {
7113
+ .sg-wrapper-less .visible-md-inline-block {
7114
+ display: inline-block !important;
7115
+ }
7116
+ }
7117
+ @media (min-width: 1200px) {
7118
+ .sg-wrapper-less .visible-lg {
7119
+ display: block !important;
7120
+ }
7121
+ .sg-wrapper-less table.visible-lg {
7122
+ display: table;
7123
+ }
7124
+ .sg-wrapper-less tr.visible-lg {
7125
+ display: table-row !important;
7126
+ }
7127
+ .sg-wrapper-less th.visible-lg,
7128
+ .sg-wrapper-less td.visible-lg {
7129
+ display: table-cell !important;
7130
+ }
7131
+ }
7132
+ @media (min-width: 1200px) {
7133
+ .sg-wrapper-less .visible-lg-block {
7134
+ display: block !important;
7135
+ }
7136
+ }
7137
+ @media (min-width: 1200px) {
7138
+ .sg-wrapper-less .visible-lg-inline {
7139
+ display: inline !important;
7140
+ }
7141
+ }
7142
+ @media (min-width: 1200px) {
7143
+ .sg-wrapper-less .visible-lg-inline-block {
7144
+ display: inline-block !important;
7145
+ }
7146
+ }
7147
+ @media (max-width: 767px) {
7148
+ .sg-wrapper-less .hidden-xs {
7149
+ display: none !important;
7150
+ }
7151
+ }
7152
+ @media (min-width: 768px) and (max-width: 991px) {
7153
+ .sg-wrapper-less .hidden-sm {
7154
+ display: none !important;
7155
+ }
7156
+ }
7157
+ @media (min-width: 992px) and (max-width: 1199px) {
7158
+ .sg-wrapper-less .hidden-md {
7159
+ display: none !important;
7160
+ }
7161
+ }
7162
+ @media (min-width: 1200px) {
7163
+ .sg-wrapper-less .hidden-lg {
7164
+ display: none !important;
7165
+ }
7166
+ }
7167
+ .sg-wrapper-less .visible-print {
7168
+ display: none !important;
7169
+ }
7170
+ @media print {
7171
+ .sg-wrapper-less .visible-print {
7172
+ display: block !important;
7173
+ }
7174
+ .sg-wrapper-less table.visible-print {
7175
+ display: table;
7176
+ }
7177
+ .sg-wrapper-less tr.visible-print {
7178
+ display: table-row !important;
7179
+ }
7180
+ .sg-wrapper-less th.visible-print,
7181
+ .sg-wrapper-less td.visible-print {
7182
+ display: table-cell !important;
7183
+ }
7184
+ }
7185
+ .sg-wrapper-less .visible-print-block {
7186
+ display: none !important;
7187
+ }
7188
+ @media print {
7189
+ .sg-wrapper-less .visible-print-block {
7190
+ display: block !important;
7191
+ }
7192
+ }
7193
+ .sg-wrapper-less .visible-print-inline {
7194
+ display: none !important;
7195
+ }
7196
+ @media print {
7197
+ .sg-wrapper-less .visible-print-inline {
7198
+ display: inline !important;
7199
+ }
7200
+ }
7201
+ .sg-wrapper-less .visible-print-inline-block {
7202
+ display: none !important;
7203
+ }
7204
+ @media print {
7205
+ .sg-wrapper-less .visible-print-inline-block {
7206
+ display: inline-block !important;
7207
+ }
7208
+ }
7209
+ @media print {
7210
+ .sg-wrapper-less .hidden-print {
7211
+ display: none !important;
7212
+ }
7213
+ }
7214
+ .sg-wrapper-less .navbar-inverse .badge {
7215
+ background-color: #fff;
7216
+ color: #2780e3;
7217
+ }
7218
+ .sg-wrapper-less body {
7219
+ -webkit-font-smoothing: antialiased;
7220
+ }
7221
+ .sg-wrapper-less .text-primary,
7222
+ .sg-wrapper-less .text-primary:hover {
7223
+ color: #2780e3;
7224
+ }
7225
+ .sg-wrapper-less .text-success,
7226
+ .sg-wrapper-less .text-success:hover {
7227
+ color: #0021C8;
7228
+ }
7229
+ .sg-wrapper-less .text-danger,
7230
+ .sg-wrapper-less .text-danger:hover {
7231
+ color: #ff0039;
7232
+ }
7233
+ .sg-wrapper-less .text-warning,
7234
+ .sg-wrapper-less .text-warning:hover {
7235
+ color: #ff7518;
7236
+ }
7237
+ .sg-wrapper-less .text-info,
7238
+ .sg-wrapper-less .text-info:hover {
7239
+ color: #9954bb;
7240
+ }
7241
+ .sg-wrapper-less table a:not(.btn),
7242
+ .sg-wrapper-less .table a:not(.btn) {
7243
+ text-decoration: underline;
7244
+ }
7245
+ .sg-wrapper-less table .dropdown-menu a,
7246
+ .sg-wrapper-less .table .dropdown-menu a {
7247
+ text-decoration: none;
7248
+ }
7249
+ .sg-wrapper-less table .success,
7250
+ .sg-wrapper-less .table .success,
7251
+ .sg-wrapper-less table .warning,
7252
+ .sg-wrapper-less .table .warning,
7253
+ .sg-wrapper-less table .danger,
7254
+ .sg-wrapper-less .table .danger,
7255
+ .sg-wrapper-less table .info,
7256
+ .sg-wrapper-less .table .info {
7257
+ color: #fff;
7258
+ }
7259
+ .sg-wrapper-less table .success a,
7260
+ .sg-wrapper-less .table .success a,
7261
+ .sg-wrapper-less table .warning a,
7262
+ .sg-wrapper-less .table .warning a,
7263
+ .sg-wrapper-less table .danger a,
7264
+ .sg-wrapper-less .table .danger a,
7265
+ .sg-wrapper-less table .info a,
7266
+ .sg-wrapper-less .table .info a {
7267
+ color: #fff;
7268
+ }
7269
+ .sg-wrapper-less .has-warning .help-block,
7270
+ .sg-wrapper-less .has-warning .control-label,
7271
+ .sg-wrapper-less .has-warning .form-control-feedback {
7272
+ color: #ff7518;
7273
+ }
7274
+ .sg-wrapper-less .has-warning .form-control,
7275
+ .sg-wrapper-less .has-warning .form-control:focus,
7276
+ .sg-wrapper-less .has-warning .input-group-addon {
7277
+ border: 1px solid #ff7518;
7278
+ }
7279
+ .sg-wrapper-less .has-error .help-block,
7280
+ .sg-wrapper-less .has-error .control-label,
7281
+ .sg-wrapper-less .has-error .form-control-feedback {
7282
+ color: #ff0039;
7283
+ }
7284
+ .sg-wrapper-less .has-error .form-control,
7285
+ .sg-wrapper-less .has-error .form-control:focus,
7286
+ .sg-wrapper-less .has-error .input-group-addon {
7287
+ border: 1px solid #ff0039;
7288
+ }
7289
+ .sg-wrapper-less .has-success .help-block,
7290
+ .sg-wrapper-less .has-success .control-label,
7291
+ .sg-wrapper-less .has-success .form-control-feedback {
7292
+ color: #3fb618;
7293
+ }
7294
+ .sg-wrapper-less .has-success .form-control,
7295
+ .sg-wrapper-less .has-success .form-control:focus,
7296
+ .sg-wrapper-less .has-success .input-group-addon {
7297
+ border: 1px solid #3fb618;
7298
+ }
7299
+ .sg-wrapper-less .nav-pills > li > a {
7300
+ border-radius: 0;
7301
+ }
7302
+ .sg-wrapper-less .dropdown-menu > li > a:hover,
7303
+ .sg-wrapper-less .dropdown-menu > li > a:focus {
7304
+ background-image: none;
7305
+ }
7306
+ .sg-wrapper-less .close {
7307
+ text-decoration: none;
7308
+ text-shadow: none;
7309
+ opacity: 0.4;
7310
+ }
7311
+ .sg-wrapper-less .close:hover,
7312
+ .sg-wrapper-less .close:focus {
7313
+ opacity: 1;
7314
+ }
7315
+ .sg-wrapper-less .alert {
7316
+ border: none;
7317
+ }
7318
+ .sg-wrapper-less .alert .alert-link {
7319
+ text-decoration: underline;
7320
+ color: #fff;
7321
+ }
7322
+ .sg-wrapper-less .label {
7323
+ border-radius: 0;
7324
+ }
7325
+ .sg-wrapper-less .progress {
7326
+ height: 8px;
7327
+ -webkit-box-shadow: none;
7328
+ box-shadow: none;
7329
+ }
7330
+ .sg-wrapper-less .progress .progress-bar {
7331
+ font-size: 8px;
7332
+ line-height: 8px;
7333
+ }
7334
+ .sg-wrapper-less .panel-heading,
7335
+ .sg-wrapper-less .panel-footer {
7336
+ border-top-right-radius: 0;
7337
+ border-top-left-radius: 0;
7338
+ }
7339
+ .sg-wrapper-less .panel-default .close {
7340
+ color: #333333;
7341
+ }
7342
+ .sg-wrapper-less a.list-group-item-success.active {
7343
+ background-color: #3fb618;
7344
+ }
7345
+ .sg-wrapper-less a.list-group-item-success.active:hover,
7346
+ .sg-wrapper-less a.list-group-item-success.active:focus {
7347
+ background-color: #379f15;
7348
+ }
7349
+ .sg-wrapper-less a.list-group-item-warning.active {
7350
+ background-color: #ff7518;
7351
+ }
7352
+ .sg-wrapper-less a.list-group-item-warning.active:hover,
7353
+ .sg-wrapper-less a.list-group-item-warning.active:focus {
7354
+ background-color: #fe6600;
7355
+ }
7356
+ .sg-wrapper-less a.list-group-item-danger.active {
7357
+ background-color: #ff0039;
7358
+ }
7359
+ .sg-wrapper-less a.list-group-item-danger.active:hover,
7360
+ .sg-wrapper-less a.list-group-item-danger.active:focus {
7361
+ background-color: #e60033;
7362
+ }
7363
+ .sg-wrapper-less .modal .close {
7364
+ color: #333333;
7365
+ }
7366
+ .sg-wrapper-less .popover {
7367
+ color: #333333;
7368
+ }
7369
+ .sg-wrapper-less .btn-file {
7370
+ position: relative;
7371
+ overflow: hidden;
7372
+ }
7373
+ .sg-wrapper-less .btn-file input[type=file] {
7374
+ position: absolute;
7375
+ top: 0;
7376
+ right: 0;
7377
+ min-width: 100%;
7378
+ min-height: 100%;
7379
+ font-size: 100px;
7380
+ text-align: right;
7381
+ filter: alpha(opacity=0);
7382
+ opacity: 0;
7383
+ outline: none;
7384
+ background: white;
7385
+ cursor: inherit;
7386
+ display: block;
7387
+ }
7388
+ .sg-wrapper-less select {
7389
+ background: #ffffff url("../img/select-arrow.png") no-repeat !important;
7390
+ background-size: 24px 20px;
7391
+ background-position: right 5px bottom 45% !important;
7392
+ color: #888;
7393
+ outline: none;
7394
+ display: inline-block;
7395
+ -webkit-appearance: none;
7396
+ -moz-appearance: none;
7397
+ appearance: none;
7398
+ cursor: pointer;
7399
+ border: none !important;
7400
+ box-shadow: none !important;
7401
+ padding-left: 0 !important;
7402
+ border-bottom: 1px solid #000000 !important;
7403
+ }
7404
+ .sg-wrapper-less #sg-wrapper {
7405
+ width: 100%;
7406
+ min-width: 650px;
7407
+ border: 1px #ffffff solid;
7408
+ background-color: #F9F9F9;
7409
+ }
7410
+ .sg-wrapper-less #sg-sidebar-wrapper {
7411
+ width: 210px;
7412
+ float: left;
7413
+ }
7414
+ #sg-sidebar-wrapper li {
7415
+ position: relative;
7416
+ }
7417
+ .sg-wrapper-less #sg-sidebar-wrapper a:focus {
7418
+ box-shadow: none !important;
7419
+ outline: 0px solid #cccccc !important;
7420
+ }
7421
+ .sg-wrapper-less #sg-content-wrapper {
7422
+ position: relative;
7423
+ float: left;
7424
+ width: calc(100% - 210px);
7425
+ border-left: 1px solid #F7F7F7;
7426
+ /*Same as sidebar*/
7427
+ min-height: 680px;
7428
+ background-color: #ffffff;
7429
+ }
7430
+ .sg-wrapper-less .container-fluid {
7431
+ min-height: 380px;
7432
+ margin-top: 23px;
7433
+ }
7434
+ .sg-wrapper-less .metro .sidebar {
7435
+ margin: 0;
7436
+ padding: 0;
7437
+ background-color: #F9F9F9;
7438
+ width: 100%;
7439
+ padding-top: 31px;
7440
+ /*height: 100%;*/
7441
+ }
7442
+ .sg-wrapper-less .metro .sidebar > ul {
7443
+ margin: 0;
7444
+ padding: 0;
7445
+ list-style: none;
7446
+ }
7447
+ .sg-wrapper-less .metro .sidebar > ul li {
7448
+ display: block;
7449
+ border: 0;
7450
+ border-bottom: 1px rgba(255, 255, 255, 0.2) solid;
7451
+ position: relative;
7452
+ }
7453
+ .sg-wrapper-less .title {
7454
+ padding: 20px 20px 10px 20px;
7455
+ margin-top: 18px;
7456
+ font-weight: 300;
7457
+ letter-spacing: 0.00em;
7458
+ font-size: 2.5rem;
7459
+ line-height: 2.5rem;
7460
+ letter-spacing: 0.01em;
7461
+ color: #000000;
7462
+ font-size: 2.2rem;
7463
+ line-height: 2.2rem;
7464
+ color: #ffffff;
7465
+ height: 33px;
7466
+ width: 136px;
7467
+ background-image: url("../img/logo-horizontal.png");
7468
+ background-size: cover;
7469
+ background-repeat: no-repeat;
7470
+ margin-left: 16px;
7471
+ }
7472
+ .sg-wrapper-less .metro .sidebar > ul li a {
7473
+ display: block;
7474
+ position: relative;
7475
+ padding: 10px 20px;
7476
+ text-decoration: none;
7477
+ color: #000000;
7478
+ background-color: #F9F9F9;
7479
+ }
7480
+ .sg-wrapper-less .metro .sidebar > ul li a:hover {
7481
+ color: #0021C8;
7482
+ }
7483
+ .sg-wrapper-less .metro .sidebar > ul li a:hover + .sg-action-menu-arrow {
7484
+ display: inline-block;
7485
+ }
7486
+ .sg-wrapper-less .metro .sidebar > ul li a.dropdown-toggle:after {
7487
+ right: 10px;
7488
+ bottom: 5px;
7489
+ }
7490
+ .sg-wrapper-less .metro .sidebar > ul li a [class*="icon-"] {
7491
+ margin-right: 15px;
7492
+ }
7493
+ .sg-wrapper-less .metro .sidebar > ul li.stick {
7494
+ position: relative;
7495
+ }
7496
+ .sg-wrapper-less .metro .sidebar > ul li.stick:before {
7497
+ content: "";
7498
+ position: absolute;
7499
+ width: 7px;
7500
+ height: 40px;
7501
+ left: -7px;
7502
+ text-indent: -9999px;
7503
+ border-top-left-radius: 5px;
7504
+ border-bottom-left-radius: 5px;
7505
+ background-color: inherit;
7506
+ }
7507
+ .sg-wrapper-less .metro .sidebar > ul li.disabled a {
7508
+ background-color: #8a8a8a;
7509
+ cursor: default;
7510
+ color: #555555;
7511
+ }
7512
+ .sg-wrapper-less .metro .sidebar > ul li.active a {
7513
+ color: #0021C8;
7514
+ border-left: 2px solid #0021C8;
7515
+ }
7516
+
7517
+ .sg-wrapper-less .metro .sidebar > ul li.active .sg-action-menu-arrow {
7518
+ display: inline-block !important;
7519
+ }
7520
+ .sg-wrapper-less .metro .sidebar > ul ul {
7521
+ margin: 0;
7522
+ padding: 0;
7523
+ list-style: none;
7524
+ position: absolute;
7525
+ display: none;
7526
+ z-index: 1000;
7527
+ background: #ffffff;
7528
+ min-width: 220px;
7529
+ width: auto;
7530
+ border: 1px solid #dcddde;
7531
+ box-shadow: none;
7532
+ position: relative !important;
7533
+ background-color: #e5e5e5;
7534
+ min-width: 100%;
7535
+ }
7536
+ .sg-wrapper-less .metro .sidebar > ul ul li {
7537
+ display: block;
7538
+ margin: 10px 0;
7539
+ padding: 0;
7540
+ vertical-align: baseline;
7541
+ position: relative;
7542
+ font-family: 'Segoe UI_', 'Open Sans', Verdana, Arial, Helvetica, sans-serif;
7543
+ }
7544
+ .sg-wrapper-less .metro .sidebar > ul ul li a {
7545
+ display: block;
7546
+ text-decoration: none;
7547
+ font-family: 'Segoe UI Light_', 'Open Sans Light', Verdana, Arial, Helvetica, sans-serif;
7548
+ font-weight: 300;
7549
+ letter-spacing: 0.00em;
7550
+ font-size: 2.5rem;
7551
+ line-height: 2.5rem;
7552
+ letter-spacing: 0.01em;
7553
+ color: #000000;
7554
+ line-height: 2.2rem;
7555
+ font-size: 2.2rem;
7556
+ color: inherit;
7557
+ }
7558
+ .sg-wrapper-less .metro .sidebar > ul ul li.title {
7559
+ font-family: 'Segoe UI Light_', 'Open Sans Light', Verdana, Arial, Helvetica, sans-serif;
7560
+ font-weight: 300;
7561
+ color: #000000;
7562
+ letter-spacing: 0.00em;
7563
+ font-size: 2.5rem;
7564
+ line-height: 2.5rem;
7565
+ letter-spacing: 0.01em;
7566
+ font-size: 4rem;
7567
+ margin-bottom: 20px;
7568
+ }
7569
+ .sg-wrapper-less .metro .sidebar > ul ul.compact a {
7570
+ font-weight: normal;
7571
+ font-size: 10.5pt;
7572
+ line-height: 12pt;
7573
+ color: inherit;
7574
+ }
7575
+ .sg-wrapper-less .metro .sidebar > ul ul.compact li.title {
7576
+ margin-bottom: 10px;
7577
+ font-family: 'Segoe UI Semibold_', 'Open Sans Bold', Verdana, Arial, Helvetica, sans-serif;
7578
+ font-weight: bold;
7579
+ color: #000000;
7580
+ font-size: 1.6rem;
7581
+ line-height: 1.6rem;
7582
+ letter-spacing: 0.02em;
7583
+ }
7584
+ .sg-wrapper-less .metro .sidebar > ul ul ul.secondary {
7585
+ margin: 0;
7586
+ padding: 0;
7587
+ list-style: none;
7588
+ margin-left: 15px;
7589
+ }
7590
+ .sg-wrapper-less .metro .sidebar > ul ul ul.secondary li a {
7591
+ font-family: 'Segoe UI Semibold_', 'Open Sans Bold', Verdana, Arial, Helvetica, sans-serif;
7592
+ font-weight: bold;
7593
+ color: #000000;
7594
+ font-size: 1.6rem;
7595
+ line-height: 1.6rem;
7596
+ letter-spacing: 0.02em;
7597
+ font-weight: normal;
7598
+ font-style: normal;
7599
+ line-height: 1.4rem;
7600
+ color: inherit;
7601
+ }
7602
+ .sg-wrapper-less .metro .sidebar > ul ul.shadow {
7603
+ box-shadow: 3px 3px 0 rgba(236, 236, 236, 0.7);
7604
+ }
7605
+ .sg-wrapper-less .metro .sidebar > ul ul li {
7606
+ margin: 5px 0 0;
7607
+ width: 100%;
7608
+ border: 1px transparent solid;
7609
+ }
7610
+ .sg-wrapper-less .metro .sidebar > ul ul li:last-child {
7611
+ margin-bottom: 5px;
7612
+ }
7613
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled,
7614
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled:hover {
7615
+ cursor: default !important;
7616
+ background: transparent !important;
7617
+ color: #eeeeee;
7618
+ }
7619
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled a,
7620
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled:hover a {
7621
+ color: inherit;
7622
+ cursor: inherit;
7623
+ background: inherit;
7624
+ }
7625
+ .sg-wrapper-less .metro .sidebar > ul ul a {
7626
+ padding: 8px 32px !important;
7627
+ color: inherit;
7628
+ font-size: 15px !important;
7629
+ line-height: 14px !important;
7630
+ cursor: pointer;
7631
+ }
7632
+ .sg-wrapper-less .metro .sidebar > ul ul li:hover {
7633
+ background: #edf4fc;
7634
+ border-color: #a8d2fd;
7635
+ }
7636
+ .sg-wrapper-less .metro .sidebar > ul ul li.checked a:before,
7637
+ .sg-wrapper-less .metro .sidebar > ul ul li.checked-partial a:before,
7638
+ .sg-wrapper-less .metro .sidebar > ul ul li.unchecked a:before {
7639
+ font-family: metroSysIcons;
7640
+ position: absolute;
7641
+ left: 10px;
7642
+ content: "\e004";
7643
+ }
7644
+ .sg-wrapper-less .metro .sidebar > ul ul li.checked-partial a:before {
7645
+ content: "\e005";
7646
+ }
7647
+ .sg-wrapper-less .metro .sidebar > ul ul li.unchecked a:before {
7648
+ content: "\e005";
7649
+ }
7650
+ .sg-wrapper-less .metro .sidebar > ul ul.place-right {
7651
+ right: -15px;
7652
+ left: auto;
7653
+ }
7654
+ .sg-wrapper-less .metro .sidebar > ul ul .divider {
7655
+ padding: 0;
7656
+ height: 1px;
7657
+ margin: 9px 1px;
7658
+ overflow: hidden;
7659
+ background-color: #e5e5e5;
7660
+ border-width: 0;
7661
+ }
7662
+ .sg-wrapper-less .metro .sidebar > ul ul .divider:hover {
7663
+ background: #e5e5e5;
7664
+ }
7665
+ .sg-wrapper-less .metro .sidebar > ul ul.open {
7666
+ display: block !important;
7667
+ }
7668
+ .sg-wrapper-less .metro .sidebar > ul ul .dropdown-menu {
7669
+ left: 100%;
7670
+ top: -10%;
7671
+ }
7672
+ .sg-wrapper-less .metro .sidebar > ul ul > li:hover > .dropdown-menu[data-show="hover"] {
7673
+ display: block;
7674
+ }
7675
+ .sg-wrapper-less .metro .sidebar > ul ul > li > a.dropdown-toggle:after {
7676
+ font-family: metroSysIcons;
7677
+ font-size: .7em;
7678
+ content: "\e001";
7679
+ left: 90%;
7680
+ top: 50%;
7681
+ margin-top: -1.4em;
7682
+ -webkit-transform: rotate(-90deg);
7683
+ -moz-transform: rotate(-90deg);
7684
+ -ms-transform: rotate(-90deg);
7685
+ -o-transform: rotate(-90deg);
7686
+ transform: rotate(-90deg);
7687
+ }
7688
+ .sg-wrapper-less .metro .sidebar > ul ul.drop-left {
7689
+ left: -100%;
7690
+ }
7691
+ .sg-wrapper-less .metro .sidebar > ul ul.drop-up {
7692
+ top: auto;
7693
+ bottom: 0;
7694
+ }
7695
+ .sg-wrapper-less .metro .sidebar > ul ul .menu-title {
7696
+ background-color: #f6f7f8;
7697
+ font-size: 12px;
7698
+ line-height: 14px;
7699
+ padding: 4px 8px;
7700
+ border: 0;
7701
+ border-bottom: 1px #dcddde solid;
7702
+ border-top: 1px #dcddde solid;
7703
+ color: #646464;
7704
+ }
7705
+ .sg-wrapper-less .metro .sidebar > ul ul .menu-title:first-child {
7706
+ margin: 0;
7707
+ border-top-width: 0;
7708
+ }
7709
+ .sg-wrapper-less .metro .sidebar > ul ul .menu-title:first-child:hover {
7710
+ border-top-width: 0;
7711
+ }
7712
+ .sg-wrapper-less .metro .sidebar > ul ul .menu-title:hover {
7713
+ background-color: #f6f7f8;
7714
+ cursor: default;
7715
+ border: 0;
7716
+ border-bottom: 1px #dcddde solid;
7717
+ border-top: 1px #dcddde solid;
7718
+ }
7719
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse {
7720
+ border: 2px #3b3b3b solid;
7721
+ }
7722
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse li {
7723
+ border: 0;
7724
+ }
7725
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse li a {
7726
+ padding: 9px 32px !important;
7727
+ }
7728
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse li:hover {
7729
+ border: 0;
7730
+ background-color: #e5e5e5;
7731
+ }
7732
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse .menu-title:hover {
7733
+ background-color: #f6f7f8;
7734
+ }
7735
+ .sg-wrapper-less .metro .sidebar > ul ul.inverse .divider {
7736
+ margin-left: 0;
7737
+ margin-right: 0;
7738
+ }
7739
+ .sg-wrapper-less .metro .sidebar > ul ul.dark {
7740
+ background-color: #333333;
7741
+ border: 2px #333333 solid;
7742
+ color: #ffffff;
7743
+ }
7744
+ .sg-wrapper-less .metro .sidebar > ul ul.dark.opacity {
7745
+ background-color: rgba(61, 61, 61, 0.9);
7746
+ }
7747
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li {
7748
+ border: 0;
7749
+ color: inherit;
7750
+ }
7751
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li a {
7752
+ padding: 9px 32px !important;
7753
+ color: inherit;
7754
+ }
7755
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled,
7756
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled:hover {
7757
+ cursor: default !important;
7758
+ background: transparent !important;
7759
+ color: #555555;
7760
+ }
7761
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled a,
7762
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li.disabled:hover a {
7763
+ color: inherit;
7764
+ cursor: inherit;
7765
+ background: inherit;
7766
+ }
7767
+ .sg-wrapper-less .metro .sidebar > ul ul.dark li:hover {
7768
+ border: 0;
7769
+ background-color: #201a1a;
7770
+ color: #ffffff;
7771
+ }
7772
+ .sg-wrapper-less .metro .sidebar > ul ul.dark .menu-title {
7773
+ background-color: #3b3b3b;
7774
+ }
7775
+ .sg-wrapper-less .metro .sidebar > ul ul.dark .menu-title:hover {
7776
+ background-color: #3b3b3b;
7777
+ }
7778
+ .sg-wrapper-less .metro .sidebar > ul ul.dark .divider {
7779
+ margin-left: 0;
7780
+ margin-right: 0;
7781
+ background-color: #555555;
7782
+ }
7783
+ .sg-wrapper-less .metro .sidebar > ul ul.dark .divider:hover {
7784
+ background: #555555;
7785
+ }
7786
+ .sg-wrapper-less .metro .sidebar > ul ul li {
7787
+ border: 0;
7788
+ }
7789
+ .sg-wrapper-less .metro .sidebar > ul ul li a {
7790
+ background-color: #e5e5e5;
7791
+ }
7792
+ .sg-wrapper-less .metro .sidebar > ul ul li.divider {
7793
+ background-color: #c2c2c2;
7794
+ }
7795
+ .sg-wrapper-less .metro .sidebar > ul ul li.divider:hover {
7796
+ background-color: #c2c2c2;
7797
+ }
7798
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled a {
7799
+ color: #999999;
7800
+ }
7801
+ .sg-wrapper-less .metro .sidebar > ul ul li.disabled a:hover {
7802
+ color: #999999;
7803
+ }
7804
+ .sg-wrapper-less .metro .sidebar > ul ul.open {
7805
+ display: block;
7806
+ }
7807
+ .sg-wrapper-less .metro .sidebar.light {
7808
+ background-color: #ffffff;
7809
+ }
7810
+ .sg-wrapper-less .metro .sidebar.light li {
7811
+ border-bottom-color: #eeeeee;
7812
+ }
7813
+ .sg-wrapper-less .metro .sidebar.light li.title {
7814
+ color: #1d1d1d;
7815
+ }
7816
+ .sg-wrapper-less .metro .sidebar.light li a {
7817
+ color: #1d1d1d;
7818
+ background-color: #ffffff;
7819
+ }
7820
+ .sg-wrapper-less .metro .sidebar.light li a:hover {
7821
+ background-color: #00aff0;
7822
+ }
7823
+ .sg-wrapper-less .metro .sidebar.light li ul {
7824
+ background-color: #ffffff;
7825
+ border: 1px transparent solid;
7826
+ }
7827
+ .sg-wrapper-less .metro .sidebar.light li .divider {
7828
+ background-color: #eeeeee;
7829
+ }
7830
+ .sg-wrapper-less .metro .sidebar.light li .divider:hover {
7831
+ background-color: #eeeeee;
7832
+ }
7833
+ .sg-wrapper-less .metro .sidebar.light li.disabled a {
7834
+ background-color: #ffffff;
7835
+ cursor: default;
7836
+ color: #999999;
7837
+ }
7838
+ .sg-wrapper-less .metro .sidebar.light li.active a {
7839
+ background-color: #1ba1e2;
7840
+ color: #ffffff;
7841
+ }
7842
+ .sg-wrapper-less .sg-site-url {
7843
+ width: 100%;
7844
+ height: 100%;
7845
+ background-color: transparent !important;
7846
+ }
7847
+ .sg-wrapper-less .sg-footer {
7848
+ text-align: center;
7849
+ border-top: 1px #eaeaea solid;
7850
+ height: 45px;
7851
+ }
7852
+ .sg-wrapper-less .sg-footer .row {
7853
+ margin-left: 0;
7854
+ margin-right: 0;
7855
+ }
7856
+ .sg-wrapper-less .sg-footer .sg-version {
7857
+ position: absolute;
7858
+ right: 5px;
7859
+ }
7860
+ .sg-wrapper-less .sg-checkbox .checkbox,
7861
+ .sg-wrapper-less .sg-custom-backup .checkbox {
7862
+ padding-top: 2px;
7863
+ min-height: 10px;
7864
+ }
7865
+ .sg-wrapper-less .sg-close,
7866
+ .sg-wrapper-less .sg-custom-backup,
7867
+ .sg-wrapper-less .sg-custom-backup-files,
7868
+ .sg-wrapper-less .sg-custom-backup-tables,
7869
+ .sg-wrapper-less .sg-backup-db-options,
7870
+ .sg-wrapper-less .sg-custom-backup-cloud,
7871
+ .sg-wrapper-less .sg-schedule-settings-closed {
7872
+ display: none;
7873
+ }
7874
+ .sg-wrapper-less .sg-open {
7875
+ display: block;
7876
+ }
7877
+ .sg-wrapper-less .sg-switch-container {
7878
+ margin-top: 7px;
7879
+ }
7880
+ .sg-wrapper-less .sg-schedule-settings-opened {
7881
+ display: block;
7882
+ }
7883
+ .sg-wrapper-less .sg-custom-backup-schedule .checkbox:not:first-child {
7884
+ padding-top: 0 !important;
7885
+ }
7886
+ .sg-wrapper-less .sg-general-settings {
7887
+ display: none;
7888
+ }
7889
+ .sg-wrapper-less .sg-progress {
7890
+ height: 2px;
7891
+ margin: 0;
7892
+ margin-top: 1px;
7893
+ }
7894
+ .sg-wrapper-less #sg-status-tabe-data {
7895
+ padding: 7px;
7896
+ }
7897
+ .sg-wrapper-less .sg-status-icon {
7898
+ display: inline-block;
7899
+ width: 20px;
7900
+ height: 20px;
7901
+ background-image: url('../img/backup-icons.png');
7902
+ background-repeat: no-repeat;
7903
+ background-size: 214px 40px;
7904
+ }
7905
+ @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (min-resolution: 240dpi) {
7906
+ .sg-wrapper-less .sg-status-icon {
7907
+ background-image: url('../img/backup-icons.png');
7908
+ }
7909
+ }
7910
+ .sg-wrapper-less .sg-status-36 {
7911
+ background-position: -139px 0px;
7912
+ }
7913
+ .sg-wrapper-less .sg-status-36.active {
7914
+ background-position: -139px -22px;
7915
+ }
7916
+ .sg-wrapper-less .sg-status-35 {
7917
+ background-position: -91px 1px;
7918
+ width: 28px;
7919
+ }
7920
+ .sg-wrapper-less .sg-status-37 {
7921
+ background-position: -158px 0px;
7922
+ width: 28px;
7923
+ }
7924
+ .sg-wrapper-less .sg-status-35.active {
7925
+ background-position: -91px -21px;
7926
+ width: 28px;
7927
+ }
7928
+ .sg-wrapper-less .sg-status-37.active {
7929
+ background-position: -158px -22px;
7930
+ width: 28px;
7931
+ }
7932
+ .sg-wrapper-less .sg-status-38 {
7933
+ background-position: -187px -2px;
7934
+ width: 28px;
7935
+ }
7936
+ .sg-wrapper-less .sg-status-38.active {
7937
+ background-position: -187px -21px;
7938
+ width: 28px;
7939
+ }
7940
+ .sg-wrapper-less .sg-status-34 {
7941
+ background-position: -72px 1px;
7942
+ }
7943
+ .sg-wrapper-less .sg-status-34.active {
7944
+ background-position: -72px -21px;
7945
+ }
7946
+ .sg-wrapper-less .sg-status-1 {
7947
+ background-position: 2px 1px;
7948
+ background-size: 154px 40px;
7949
+ width: 16px;
7950
+ }
7951
+ .sg-wrapper-less .sg-status-1.active {
7952
+ background-position: 2px -21px;
7953
+ }
7954
+ .sg-wrapper-less .sg-status-2 {
7955
+ background-position: -15px 0px;
7956
+ }
7957
+ .sg-wrapper-less .sg-status-2.active {
7958
+ background-position: -15px -21px;
7959
+ }
7960
+ .sg-wrapper-less .sg-status-31 {
7961
+ background-position: -53px 1px
7962
+ }
7963
+ .sg-wrapper-less .sg-status-31.active {
7964
+ background-position: -53px -21px;
7965
+ }
7966
+ .sg-wrapper-less .sg-status-32 {
7967
+ background-position: -34px 1px;
7968
+ }
7969
+ .sg-wrapper-less .sg-status-32.active {
7970
+ background-position: -34px -21px;
7971
+ }
7972
+ .sg-wrapper-less .sg-status-33 {
7973
+ background-position: -118px 1px;
7974
+ }
7975
+ .sg-wrapper-less .sg-status-33.active {
7976
+ background-position: -118px -21px;
7977
+ }
7978
+ .sg-wrapper-less .sg-status-22 {
7979
+ background-position: -15px -21px;
7980
+ }
7981
+ .sg-wrapper-less .sg-status-22.active {
7982
+ background-position: -15px 0px;
7983
+ }
7984
+ .sg-wrapper-less .sg-status-21 {
7985
+ background-position: 2px -20px;
7986
+ }
7987
+ .sg-wrapper-less .sg-status-21.active {
7988
+ background-position: 2px 0px;
7989
+ }
7990
+ .sg-wrapper-less .sg-helper-block {
7991
+ font-size: 12px;
7992
+ padding-left: 0px;
7993
+ text-align: left;
7994
+ display: block;
7995
+ font-weight: normal;
7996
+ margin-top: 5px;
7997
+ }
7998
+ .sg-wrapper-less .sg-control-label {
7999
+ text-align: left;
8000
+ margin-bottom: 0;
8001
+ margin-top: 11px;
8002
+ }
8003
+ .sg-wrapper-less .sg-upload-label {
8004
+ padding-left: 0px;
8005
+ padding-top: 12px;
8006
+ }
8007
+ .sg-wrapper-less .sg-modal-body {
8008
+ max-height: calc(100vh - 210px);
8009
+ overflow-y: auto;
8010
+ }
8011
+
8012
+ .sg-wrapper-less .sg-justify {
8013
+ text-align: justify;
8014
+ }
8015
+ .sg-wrapper-less #sg-save-cloud-folder {
8016
+ margin-left: 5px;
8017
+ display: none;
8018
+ }
8019
+
8020
+ .sg-wrapper-less .sg-alert-pro {
8021
+ color: white;
8022
+ margin: 20px;
8023
+ text-align: left;
8024
+ }
8025
+
8026
+ .sg-upgrade-text {
8027
+ color: #010101;
8028
+ margin-bottom: 30px !important;
8029
+ }
8030
+
8031
+ .sg-wrapper-less .sg-star {
8032
+ color: gold;
8033
+ font-size: 24px;
8034
+ }
8035
+ .sg-wrapper-less .sg-no-margin-bottom {
8036
+ margin-bottom: 0 !important;
8037
+ }
8038
+ .sg-wrapper-less .sg-no-padding-left {
8039
+ padding-left: 0 !important;
8040
+ }
8041
+ .sg-wrapper-less .sg-btn-grey {
8042
+ background-color: #999;
8043
+ border-color: #999;
8044
+ color: #ffffff;
8045
+ }
8046
+ .sg-wrapper-less .sg-btn-grey:hover {
8047
+ background-color: #777;
8048
+ border-color: #777;
8049
+ }
8050
+
8051
+ .sg-custom-backup-tables .sg-disableText {
8052
+ color: #bbb;
8053
+ font-size: 12px;
8054
+ }
8055
+
8056
+ .sg-backup-db-options .checkbox .sg-backup-db-mode,
8057
+ .sg-restore-files-options .checkbox .sg-restore-files-mode {
8058
+ padding-left: 15px;
8059
+ }
8060
+ .sg-backup-db-options .checkbox .sg-backup-db-mode:first-child,
8061
+ .sg-restore-files-options .checkbox .sg-restore-files-mode:first-child {
8062
+ padding-left: 0px;
8063
+ }
8064
+
8065
+ .sg-backup-db-options .checkbox .sg-backup-db-mode input,
8066
+ .sg-restore-files-options .checkbox .sg-restore-files-mode input {
8067
+ margin: 0px;
8068
+ }
8069
+
8070
+ .sg-restore-files-options {
8071
+ display: none;
8072
+ }
8073
+
8074
+ .sg-custom-backup-schedule .col-md-8 {
8075
+ width: 100%;
8076
+ margin-left: 0px;
8077
+ }
8078
+
8079
+ .sg-file-selective-restore {
8080
+ display: none;
8081
+ }
8082
+ .form-group-google,
8083
+ .form-group-custom {
8084
+ display: none;
8085
+ }
8086
+ .schedule-modal-close {
8087
+ margin-top: 10px;
8088
+ }
8089
+ #manualBackup {
8090
+ margin-bottom: 0;
8091
+ }
8092
+ .backup-browse-btn {
8093
+ border: none !important;
8094
+ color: #000000 !important;
8095
+ font-weight: 500 !important;
8096
+ }
8097
+ .backup-browse-btn:hover {
8098
+ background-color: #ffffff !important;
8099
+ color: #000000 !important;
8100
+ }
8101
+ input.sg-backup-input[readonly] {
8102
+ background-color: rgba(255, 255, 255, 0.2) !important;
8103
+ }
8104
+ .bg-import-browse-button {
8105
+ margin-left: 2px;
8106
+ }
8107
+ .import-modal-popup-content {
8108
+ margin-bottom: 90px !important;
8109
+ }
8110
+ .backup-browse-btn:active {
8111
+ box-shadow: none !important;
8112
+ }
8113
+ .sg-button-red {
8114
+ border: 1px solid #C20000 !important;
8115
+ color: #C20000 !important;
8116
+ display: inline-block;
8117
+ background-color: transparent;
8118
+ border-radius: 8px;
8119
+ cursor: pointer;
8120
+ padding: 10px 18px;
8121
+ text-transform: uppercase;
8122
+ outline: 0;
8123
+ transition: background-color .2s ease-out;
8124
+ text-decoration: none;
8125
+ font-weight: bold !important;
8126
+ }
8127
+
8128
+ .sg-button-red:hover {
8129
+ background-color: #C20000 !important;
8130
+ color: #FFFFFF !important;
8131
+ }
8132
+
8133
+ .sg-red-color {
8134
+ color: #C20000 !important;
8135
+ }
8136
+
8137
+ .sg-black-color {
8138
+ color: black !important;
8139
+ }
8140
+
8141
+ .sg-notice-error-h2 {
8142
+ margin-bottom: 5px;
8143
+ margin-top: 0;
8144
+ }
8145
+
8146
+ .sg-error-notice-wrapper {
8147
+ text-align: left;
8148
+ }
8149
+
8150
+ .sg-notice-contact-wrapper {
8151
+ margin-top: 0px !important;
8152
+ }
8153
+
8154
+ .sg-notice-error-p {
8155
+ margin-top: 2px !important;
8156
+ }
8157
+
8158
+ .sg-error-notice-h2-first {
8159
+ font-size: 1.8em;
8160
+ }
8161
+
8162
+ .sg-wrapper-less input[type=checkbox]:checked::before {
8163
+ content: url(../img/checkbox-content.svg);
8164
+ margin: -1px -1px;
8165
+ float: inherit !important;
8166
+ font-size: inherit !important;
8167
+ vertical-align: top !important;
8168
+ }
8169
+
8170
+ .sg-wrapper-less input[type=checkbox] {
8171
+ width: 20px !important;
8172
+ height: 20px !important;
8173
+ }
8174
+
8175
+ .sg-wrapper-less input[type=checkbox]:focus {
8176
+ border: 1px solid #7e8993;
8177
+ box-shadow: none;
8178
+ }
8179
+
8180
+ a#sg-logo:focus {
8181
+ box-shadow: none !important;
8182
+ }
8183
+
8184
+ .sg-visibility-hidden {
8185
+ display: none;
8186
+ }
8187
+
8188
+ .sg-checkbox-label-text {
8189
+ display: inline-block;
8190
+ margin-left: 5px;
8191
+ margin-top: 3px;
8192
+ }
8193
+
8194
+ /*Pricing table page CSS*/
8195
+ .sg-backup-table-row div {
8196
+ border-bottom: 1px solid #C9C9C9;
8197
+ border-right: 1px solid #C9C9C9;
8198
+ padding-top: 25px;
8199
+ padding-bottom: 25px;
8200
+ padding-left: 25px !important;
8201
+ }
8202
+ .sg-backup-table-row div:last-child {
8203
+ border-right: 0px !important;
8204
+ }
8205
+ .sg-pricing-table-header-label {
8206
+ font-size: 25px;
8207
+ color: #000000;
8208
+ font-weight: bold;
8209
+ display: block;
8210
+ margin-bottom: 20px;
8211
+ }
8212
+ .sg-pricing-table-blue-label {
8213
+ color: #0021C8;
8214
+ font-size: 39px;
8215
+ line-height: 1;
8216
+ }
8217
+ .sg-pricing-table-header-first-column {
8218
+ height: 145px;
8219
+ }
8220
+ @font-face {
8221
+ font-family: 'pricingTableFonts';
8222
+ src: url('../fonts/pricingTableFonts.eot');
8223
+ src: url('../fonts/pricingTableFonts.eot?#iefix') format('embedded-opentype'),
8224
+ url('../fonts/pricingTableFonts.woff') format('woff'),
8225
+ url('../fonts/pricingTableFonts.ttf') format('truetype'),
8226
+ url('../fonts/pricingTableFonts.svg#Glyphter') format('svg');
8227
+ font-weight: normal;
8228
+ font-style: normal;
8229
+ }
8230
+ [class*='backup-plan-']:before{
8231
+ display: inline-block;
8232
+ font-family: 'pricingTableFonts' !important;
8233
+ font-style: normal;
8234
+ font-weight: normal;
8235
+ line-height: 1;
8236
+ -webkit-font-smoothing: antialiased;
8237
+ -moz-osx-font-smoothing: grayscale
8238
+ }
8239
+ .sg-backup-plan-included:before{content:'\0057';}
8240
+ .sg-backup-plan-excluded:before{content:'\0058';}
8241
+
8242
+ .sg-backup-plan-excluded, .sg-backup-plan-included {
8243
+ color: #0021C8;
8244
+ }
8245
+ .sg-backup-table-options-wrapper {
8246
+ text-align: center;
8247
+ }
8248
+
8249
+ .sg-backup-table-options-wrapper .sg-backup-table-row:last-child div {
8250
+ border-bottom: 0;
8251
+ margin-bottom: 30px;
8252
+ }
8253
+
8254
+ .sg-pricing-table-wrapper {
8255
+ box-shadow: 0px 0px 20px #0000000D;
8256
+ margin-top: 10px;
8257
+ padding: 10px 10px 30px 10px;
8258
+ }
8259
+ .sg-backup-guard-plans-title {
8260
+ text-align: center;
8261
+ color: #0021C8 !important;
8262
+ font-size: 24px !important;
8263
+ margin-top: 37px !important;
8264
+ font-weight: bold !important;
8265
+ margin-bottom: 60px !important;
8266
+ }
8267
+ .sg-pricing-table-option-wrapper {
8268
+ text-align: left;
8269
+ }
8270
+ .sg-backup-pricing-currency {
8271
+ font-size: 28px;
8272
+ vertical-align: top;
8273
+ }
8274
+ @media (max-width: 1284px) {
8275
+ .sg-pricing-table-blue-label {
8276
+ font-size: 31px;
8277
+ vertical-align: top;
8278
+ }
8279
+ .sg-pricing-table-header-first-column {
8280
+ height: 137px;
8281
+ }
8282
+ }
8283
+ /*Pricing table page CSS*/
8284
+
8285
+ .sgbg-welcome-title {
8286
+ margin-top: 0 !important;
8287
+ margin-bottom: 6px !important;
8288
+ }
8289
+
8290
+ .sg-data-collection-label {
8291
+ text-align: left;
8292
+ display: inline-block;
8293
+ margin-right: 10px;
8294
+ vertical-align: text-bottom;
8295
+ }
8296
+
8297
+ .sg-data-collection-label label {
8298
+ font-weight: normal;
8299
+ }
8300
+
8301
+ .backup-send-usage-data-status-wrapper {
8302
+ text-align: left;
8303
+ display: inline-block;
8304
+ }
8305
+
8306
+ .bg-initial-privacy-links-container {
8307
+ border-top: 1px solid #ddd;
8308
+ padding-top: 20px;
8309
+ margin-top: 20px;;
8310
+ }
8311
+
8312
+ .bg-initial-privacy-links-container a {
8313
+ font-size: 16px;
8314
+ text-decoration: none;
8315
+ margin: 0 15px;
8316
+ color: #016cb0;
8317
+ }
8318
+
8319
+ .sgbg-send-usage-data-wrapper {
8320
+ margin-top: 20px;
8321
+ text-align: center;
8322
+ }
8323
+
8324
+ .sgbg-send-usage-data-wrapper span.bootstrap-switch-handle-on.bootstrap-switch-primary {
8325
+ background: #007cba;
8326
+ }
8327
+
8328
+ .bg-invalid-login {
8329
+ color: red;
8330
+ }
8331
+
8332
+ #backupGuardDetailsModal .control-label {
8333
+ text-align: left !important;
8334
+ }
8335
+
8336
+ #backupGuardDetailsModal label.error {
8337
+ color: red;
8338
+ font-size: 14px;
8339
+ margin-top: 4px;
8340
+ font-weight: normal;
8341
+ }
8342
+
8343
+ #backupGuardDetailsModal button {
8344
+ outline: none;
8345
+ }
8346
+
8347
+ .bg-email-confirmation {
8348
+ color: #000;
8349
+ }
8350
+
8351
+ .sgbg-info-icon {
8352
+ margin-left: 5px;
8353
+ margin-top: 1px;
8354
+ }
8355
+
8356
+ .sgbg-info-text {
8357
+ color: #3879D9;
8358
+ font: 14px Arial;
8359
+ width: 200px;
8360
+ border: 1px solid #ccc;
8361
+ position: absolute;
8362
+ min-width: 20px;
8363
+ min-height: 13px;
8364
+ display: none;
8365
+ margin-top: 3px;
8366
+ margin-left: 5px;
8367
+ box-shadow: 0px 0px 5px #ccc;
8368
+ padding: 5px;
8369
+ z-index: 9999;
8370
+ background-color: white;
8371
+ border-radius: 5px;
8372
+ display: none;
8373
+ }
8374
+
8375
+ .sgbg-info-icon:hover + .sgbg-info-text {
8376
+ display: inline-block !important;
8377
+ }
8378
+
8379
+ .modal-content .sgbg-info-icon {
8380
+ margin-top: 4px;
8381
+ }
8382
+
8383
+ .modal-content .sgbg-info-text {
8384
+ margin-top: 3px;
8385
+ margin-left: 5px;
8386
  }
public/css/styles.css CHANGED
@@ -1,591 +1,598 @@
1
- .bg-container {
2
- float: left;
3
- background-color: #333;
4
- margin-top: 20px;
5
- width: calc(100% - 20px);
6
- border: 0px #5c5c5c solid;
7
- position: relative;
8
- }
9
-
10
- #bg-wrapper {
11
- float: left;
12
- width: 100%;
13
- position: relative;
14
- font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
15
- font-size: 15px;
16
- line-height: 1.42857143;
17
- color: #333333;
18
- }
19
-
20
- #bg-wrapper a {
21
- font-size: 15px;
22
- color: #0021C8;
23
- text-decoration: none;
24
- }
25
-
26
- #bg-wrapper a:hover,
27
- #bg-wrapper a:focus {
28
- color: #165ba8;
29
- text-decoration: underline;
30
- }
31
-
32
- .bg-try-again {
33
- color: #0021C8 !important;
34
- margin-right: 20px;
35
- }
36
-
37
- .bg-try-again:hover {
38
- text-decoration: none !important;
39
- }
40
-
41
- .bg-content {
42
- margin-left: 210px;
43
- min-height: 540px;
44
- background-color: #fff;
45
- padding: 15px;
46
- position: relative;
47
- }
48
-
49
-
50
- .bg-content-dark {
51
- background-color: transparent;
52
- }
53
-
54
- .bg-content-full-width {
55
- margin: 0;
56
- }
57
-
58
- .bg-sidebar {
59
- width: 210px;
60
- float: left;
61
- margin-left: -100%;
62
- background-color: #3d3d3d;
63
- }
64
-
65
- .bg-form-control {
66
- box-shadow: none !important;
67
- border-bottom: 2px solid #000000 !important;
68
- border-right: 0px solid #000000 !important;
69
- border-top: 0px solid #000000 !important;
70
- border-left: 0px solid #000000 !important;
71
- display: block;
72
- width: 100%;
73
- padding-left: 0px !important;
74
- padding-top: 16px;
75
- padding-bottom: 16px;
76
- font-size: 18px;
77
- border-radius: 0 !important;
78
- }
79
-
80
- .sg-action-menu-arrow {
81
- width: 11px;
82
- height: 6px;
83
- background-image: url("../img/action-menu-arrow.png");
84
- background-repeat: no-repeat;
85
- position: absolute;
86
- right: 17px;
87
- top: 20px;
88
- display: none;
89
- }
90
-
91
- .bg-login-content label {
92
- font-size: 16px;
93
- line-height: 16px;
94
- font-weight: bold;
95
- }
96
-
97
- .sg-button-wrapper {
98
- margin-right: 0 !important;
99
- width: 100% !important;
100
- }
101
-
102
- .sg-login-logo {
103
- margin-left: 20px;
104
- }
105
-
106
- #bg-wrapper .bg-btn {
107
- display: inline-block;
108
- margin-bottom: 0;
109
- font-weight: normal;
110
- text-align: center;
111
- vertical-align: middle;
112
- touch-action: manipulation;
113
- cursor: pointer;
114
- background-image: none;
115
- border: 1px solid transparent;
116
- white-space: nowrap;
117
- padding: 10px 18px;
118
- font-size: 15px;
119
- line-height: 1.42857143;
120
- border-radius: 0;
121
- -webkit-user-select: none;
122
- -moz-user-select: none;
123
- }
124
-
125
- #bg-wrapper .bg-btn:hover {
126
- text-decoration: none;
127
- }
128
-
129
- #bg-wrapper .bg-btn-success {
130
- color: #fff;
131
- background-color: #3fb618;
132
- border-color: #3fb618;
133
- }
134
-
135
- #bg-wrapper .bg-btn-success:hover,
136
- #bg-wrapper .bg-btn-success:focus,
137
- #bg-wrapper .bg-btn-success.focus,
138
- #bg-wrapper .bg-btn-success:active,
139
- #bg-wrapper .bg-btn-success.active {
140
- color: #fff;
141
- background-color: #2f8912;
142
- border-color: #2c8011;
143
- }
144
-
145
- #bg-wrapper .bg-btn-primary {
146
- color: #fff;
147
- background-color: #2780e3;
148
- border-color: #2780e3;
149
- }
150
-
151
- #bg-wrapper .bg-btn-primary:hover,
152
- #bg-wrapper .bg-btn-primary:focus,
153
- #bg-wrapper .bg-btn-primary.focus,
154
- #bg-wrapper .bg-btn-primary:active,
155
- #bg-wrapper .bg-btn-primary.active {
156
- color: #fff;
157
- background-color: #1967be;
158
- border-color: #1862b5;
159
- }
160
-
161
- .bg-text-primary,
162
- .bg-text-primary:hover {
163
- color: #2780e3;
164
- }
165
-
166
- .bg-text-success,
167
- .bg-text-success:hover {
168
- color: #3fb618;
169
- }
170
-
171
- .sg-text-success {
172
- color: #009F30;
173
- }
174
-
175
- .sg-remove-backup {
176
- background-image: url("../img/delete-icon.png");
177
- background-size: contain;
178
- background-repeat: no-repeat;
179
- width: 16px;
180
- height: 19px;
181
- text-decoration: none !important;
182
- display: inline-block;
183
- cursor: pointer;
184
- }
185
-
186
- .sg-bg-download-button {
187
- background-image: url("../img/download-backup.png");
188
- background-size: contain;
189
- background-repeat: no-repeat;
190
- width: 16px;
191
- height: 19px;
192
- text-decoration: none !important;
193
- display: inline-block;
194
- cursor: pointer;
195
- }
196
-
197
- .sg-restore-button {
198
- background-image: url("../img/restore-backup.png");
199
- background-size: contain;
200
- background-repeat: no-repeat;
201
- width: 16px;
202
- height: 19px;
203
- text-decoration: none !important;
204
- display: inline-block;
205
- cursor: pointer;
206
- }
207
-
208
- .sg-bg-download-button,
209
- .sg-restore-button {
210
- margin-left: 15px;
211
- }
212
-
213
- .bg-text-danger,
214
- .bg-text-danger:hover {
215
- color: #ff0039;
216
- }
217
-
218
- .bg-text-warning,
219
- .bg-text-warning:hover {
220
- color: #ff7518;
221
- }
222
-
223
- .bg-text-info,
224
- .bg-text-info:hover {
225
- color: #9954bb;
226
- }
227
-
228
- .bg-pull-right {
229
- float: right;
230
- }
231
-
232
- .bg-pull-left {
233
- float: left;
234
- }
235
-
236
- .bg-text-center {
237
- text-align: center;
238
- }
239
-
240
- .bg-tooltip {
241
- position: relative;
242
- display: inline-block;
243
- font-size: 15px;
244
- color: #0021C8;
245
- cursor: pointer;
246
- }
247
-
248
- .bg-tooltip .bg-tooltiptext {
249
- visibility: hidden;
250
- width: 140px;
251
- background-color: #333;
252
- color: #fff;
253
- text-align: center;
254
- padding: 5px;
255
- border-radius: 6px;
256
- bottom: 100%;
257
- left: 50%;
258
- margin-left: -75px;
259
- position: absolute;
260
- z-index: 1;
261
- }
262
-
263
- .bg-tooltip:hover .bg-tooltiptext {
264
- visibility: visible;
265
- }
266
-
267
- .bg-tooltip .bg-tooltiptext::after {
268
- content: " ";
269
- position: absolute;
270
- top: 100%;
271
- left: 50%;
272
- margin-left: -5px;
273
- border-width: 5px;
274
- border-style: solid;
275
- border-color: #333 transparent transparent transparent;
276
- }
277
-
278
- /* General screen related styles */
279
-
280
- .bg-logged-msg-container {
281
- float: right;
282
- font-size: 12px;
283
- display: inline-block;
284
- margin-top: 18px;
285
- margin-left: 5px;
286
- }
287
-
288
- /* Login screen related styles */
289
-
290
- .bg-login-container {
291
- width: 330px;
292
- margin: 51px auto;
293
- overflow: auto;
294
- }
295
-
296
- .bg-login-container h1 {
297
- font-size: 22.5px;
298
- font-weight: normal;
299
- margin-bottom: 20px;
300
- margin-top: 0;
301
- }
302
-
303
- .bg-login-container .bg-tooltip {
304
- padding: 10px 0;
305
- display: inline-block;
306
- }
307
-
308
- .bg-login-content {
309
- padding: 25px;
310
- background-color: #fff;
311
- overflow: auto;
312
- }
313
-
314
- #bg-login-error {
315
- display: none;
316
- }
317
-
318
- /* Assign license screen related styles */
319
-
320
- .bg-license-container {
321
- width: 420px;
322
- margin: 51px auto;
323
- overflow: auto;
324
- }
325
-
326
- .bg-license-container h1 {
327
- font-size: 22.5px;
328
- font-weight: normal;
329
- margin-bottom: 10px;
330
- margin-top: 0;
331
- }
332
-
333
- .bg-license-container .bg-tooltip {
334
- padding: 10px 0;
335
- display: inline-block;
336
- }
337
-
338
- .bg-license-content {
339
- background-color: #fff;
340
- overflow: auto;
341
- box-sizing: border-box;
342
- }
343
-
344
- .bg-file-icon {
345
- background-image: url("default/fileicon.png") !important;
346
- background-size: cover;
347
- width: 15px !important;
348
- height: 15px !important;
349
- line-height: 15px !important;
350
- margin-top: 5px !important;
351
- }
352
-
353
- .bg-folder-icon{
354
- background-image: url("default/foldericon.png") !important;
355
- background-size: cover;
356
- width: 15px !important;
357
- height: 15px !important;
358
- line-height: 15px !important;
359
- margin-top: 5px !important;
360
- }
361
-
362
- .bg-no-icon{
363
- background: none !important;
364
- width: 5px !important;
365
- }
366
-
367
- .sg-switch-container .bootstrap-switch-default {
368
- background-color: #000000 !important;
369
- color: #FFFFFF !important;
370
- }
371
-
372
- p.bg-license-btn-wrapper {
373
- margin-top: 37px;
374
- text-align: center !important;
375
- }
376
-
377
- #link-btn {
378
- margin-top: 30px;
379
- }
380
-
381
- select#product {
382
- margin-top: 2px;
383
- text-indent: 4px;
384
- }
385
-
386
- .bg-license-content {
387
- text-align: center;
388
- }
389
-
390
- .bg-license-content.sg-wrapper-less {
391
- margin-top: 0 !important;
392
- }
393
-
394
- .sg-top-info {
395
- height: 66px;
396
- padding-right: 44px;
397
- }
398
-
399
- .sg-backup-page-title {
400
- margin-top: 0px !important;
401
- font-weight: bold !important;
402
- margin-bottom: 36px !important;
403
- }
404
-
405
- .sg-bg-show {
406
- display: block !important;
407
- }
408
-
409
- .sg-info-wrapper {
410
- line-height: 1;
411
- margin-top: 27px;
412
- }
413
-
414
- .sg-info-wrapper label {
415
- margin-top: 0;
416
- }
417
- label.sg-user-info {
418
- font-weight: normal;
419
- }
420
-
421
- .sg-info-content-wrapper label {
422
- font-size: 18px;
423
- }
424
-
425
- .sg-settings-container label {
426
- font-weight: normal;
427
- }
428
-
429
- #sg-email {
430
- padding-right: 0;
431
- }
432
-
433
- .sg-cloud-icon {
434
- background-size: contain;
435
- background-repeat: no-repeat;
436
- display: inline-block;
437
- width: 17px;
438
- height: 16px;
439
- margin-top: 3px;
440
- margin-right: 18px;
441
- }
442
-
443
- .sg-cloud-backup-guard {
444
- background-image: url("../img/backup-cloud-icon.png");
445
- }
446
- .sg-cloud-dropbox {
447
- background-image: url("../img/cloud-dropbox.png");
448
- }
449
- .sg-cloud-google-drive {
450
- background-image: url("../img/cloud-google-drive.png");
451
- }
452
- .sg-cloud-ftp {
453
- background-image: url("../img/cloud-ftp.png");
454
- }
455
- .sg-cloud-amazon {
456
- background-image: url("../img/cloud-amazon.png");
457
- }
458
- .sg-cloud-one-drive {
459
- background-image: url("../img/cloud-onedrive.png");
460
- }
461
- .sg-cancel-backup {
462
- background-image: url("../img/stop-action.png");
463
- background-size: contain;
464
- background-repeat: no-repeat;
465
- width: 16px;
466
- height: 19px;
467
- text-decoration: none !important;
468
- display: inline-block;
469
- cursor: pointer;
470
- }
471
-
472
- .sg-cloud-icon-wrapper,
473
- .sg-cloud-label-wrapper {
474
- display: inline-block;
475
- vertical-align: top;
476
- height: 39px;
477
- line-height: 1;
478
- font-weight: normal;
479
- }
480
-
481
- .sg-cloud-label-with-info {
482
- display: inline-block;
483
- }
484
-
485
- .sg-schedule-icon {
486
- text-decoration: none !important;
487
- background-repeat: no-repeat;
488
- background-size: contain;
489
- display: inline-block;
490
- cursor: pointer;
491
- width: 24px;
492
- height: 24px;
493
- }
494
-
495
- .sg-schedule-edit {
496
- background-image: url("../img/edit-icon.png");
497
- }
498
-
499
- .sg-schedule-delete {
500
- background-image: url("../img/delete-icon.png");
501
- margin-left: 21px;
502
- }
503
-
504
- .sg-schedule-pending {
505
- color: #0021C8 !important;
506
- }
507
-
508
- .sg-schedule-inactive {
509
- color: #A4A4A4 !important;
510
- }
511
-
512
- #sg-save-settings {
513
- margin-top: 47px;
514
- margin-bottom: 23px;
515
- width: 132px;
516
- }
517
-
518
- /* Generated by Glyphter (http://www.glyphter.com) on Thu Jul 30 2020*/
519
- @font-face {
520
- font-family: 'Glyphter';
521
- src: url('../fonts/Glyphter.eot');
522
- src: url('../fonts/Glyphter.eot?#iefix') format('embedded-opentype'),
523
- url('../fonts/Glyphter.woff') format('woff'),
524
- url('../fonts/Glyphter.ttf') format('truetype'),
525
- url('../fonts/Glyphter.svg#Glyphter') format('svg');
526
- font-weight: normal;
527
- font-style: normal;
528
- }
529
- [class*='sg-backup-']:before{
530
- display: inline-block;
531
- font-family: 'Glyphter';
532
- font-style: normal;
533
- font-weight: normal;
534
- line-height: 1;
535
- -webkit-font-smoothing: antialiased;
536
- -moz-osx-font-smoothing: grayscale
537
- }
538
- /*Video tutorials font*/
539
- @font-face {
540
- font-family: 'MenuGlyphter';
541
- src: url('../fonts/MenuGlyphter.eot');
542
- src: url('../fonts/MenuGlyphter.eot?#iefix') format('embedded-opentype'),
543
- url('../fonts/MenuGlyphter.woff') format('woff'),
544
- url('../fonts/MenuGlyphter.ttf') format('truetype'),
545
- url('../fonts/MenuGlyphter.svg#MenuGlyphter') format('svg');
546
- font-weight: normal;
547
- font-style: normal;
548
- }
549
- [class*='sg-backup-menu-']:before{
550
- display: inline-block;
551
- font-family: 'MenuGlyphter';
552
- font-style: normal;
553
- font-weight: normal;
554
- line-height: 1;
555
- -webkit-font-smoothing: antialiased;
556
- -moz-osx-font-smoothing: grayscale;
557
- margin-right: 15px;
558
- }
559
-
560
- .sg-backup-menu-video:before{content:'\0041';}
561
-
562
- .sg-backup-cross:before{content:'\0041';}
563
- .sg-backup-report:before{content:'\0042';}
564
- .sg-backup-delete:before{content:'\0043';}
565
- .sg-backup-import:before{content:'\0044';}
566
- .sg-backup-start:before{content:'\0045';}
567
- .sg-backup-migrate:before{content:'\0046';}
568
-
569
- .sg-backup-action-buttons {
570
- display: flex !important;
571
- vertical-align: middle;
572
- line-height: 1 !important;
573
- font-weight: normal !important;
574
- }
575
- span.sg-backup-buttons-content {
576
- display: inline-block;
577
- vertical-align: middle !important;
578
- }
579
-
580
- .sg-backup-buttons-text {
581
- margin-left: 10px;
582
- }
583
- .sg-blue-label {
584
- color: #0021C8 !important;
585
- }
586
-
587
- [disabled]#sg-delete-multi-backups,
588
- [disabled]#sg-backup-with-migration {
589
- background-color: #A4A4A4 !important;
590
- border-color: #A4A4A4 !important;
 
 
 
 
 
 
 
591
  }
1
+ .bg-container {
2
+ float: left;
3
+ background-color: #333;
4
+ margin-top: 20px;
5
+ width: calc(100% - 20px);
6
+ border: 0px #5c5c5c solid;
7
+ position: relative;
8
+ }
9
+
10
+ #bg-wrapper {
11
+ float: left;
12
+ width: 100%;
13
+ position: relative;
14
+ font-family: "Source Sans Pro", Calibri, Candara, Arial, sans-serif;
15
+ font-size: 15px;
16
+ line-height: 1.42857143;
17
+ color: #333333;
18
+ }
19
+
20
+ #bg-wrapper a {
21
+ font-size: 15px;
22
+ color: #0021C8;
23
+ text-decoration: none;
24
+ }
25
+
26
+ #bg-wrapper a:hover,
27
+ #bg-wrapper a:focus {
28
+ color: #165ba8;
29
+ text-decoration: underline;
30
+ }
31
+
32
+ .bg-try-again {
33
+ color: #0021C8 !important;
34
+ margin-right: 20px;
35
+ }
36
+
37
+ .bg-try-again:hover {
38
+ text-decoration: none !important;
39
+ }
40
+
41
+ .bg-content {
42
+ margin-left: 210px;
43
+ min-height: 540px;
44
+ background-color: #fff;
45
+ padding: 15px;
46
+ position: relative;
47
+ }
48
+
49
+
50
+ .bg-content-dark {
51
+ background-color: transparent;
52
+ }
53
+
54
+ .bg-content-full-width {
55
+ margin: 0;
56
+ }
57
+
58
+ .bg-sidebar {
59
+ width: 210px;
60
+ float: left;
61
+ margin-left: -100%;
62
+ background-color: #3d3d3d;
63
+ }
64
+
65
+ .bg-form-control {
66
+ box-shadow: none !important;
67
+ border-bottom: 2px solid #000000 !important;
68
+ border-right: 0px solid #000000 !important;
69
+ border-top: 0px solid #000000 !important;
70
+ border-left: 0px solid #000000 !important;
71
+ display: block;
72
+ width: 100%;
73
+ padding-left: 0px !important;
74
+ padding-top: 16px;
75
+ padding-bottom: 16px;
76
+ font-size: 18px;
77
+ border-radius: 0 !important;
78
+ }
79
+
80
+ .sg-action-menu-arrow {
81
+ width: 11px;
82
+ height: 6px;
83
+ background-image: url("../img/action-menu-arrow.png");
84
+ background-repeat: no-repeat;
85
+ position: absolute;
86
+ right: 17px;
87
+ top: 20px;
88
+ display: none;
89
+ }
90
+
91
+ .bg-login-content label {
92
+ font-size: 16px;
93
+ line-height: 16px;
94
+ font-weight: bold;
95
+ }
96
+
97
+ .sg-button-wrapper {
98
+ margin-right: 0 !important;
99
+ width: 100% !important;
100
+ }
101
+
102
+ .sg-login-logo {
103
+ margin-left: 20px;
104
+ }
105
+
106
+ #bg-wrapper .bg-btn {
107
+ display: inline-block;
108
+ margin-bottom: 0;
109
+ font-weight: normal;
110
+ text-align: center;
111
+ vertical-align: middle;
112
+ touch-action: manipulation;
113
+ cursor: pointer;
114
+ background-image: none;
115
+ border: 1px solid transparent;
116
+ white-space: nowrap;
117
+ padding: 10px 18px;
118
+ font-size: 15px;
119
+ line-height: 1.42857143;
120
+ border-radius: 0;
121
+ -webkit-user-select: none;
122
+ -moz-user-select: none;
123
+ }
124
+
125
+ #bg-wrapper .bg-btn:hover {
126
+ text-decoration: none;
127
+ }
128
+
129
+ #bg-wrapper .bg-btn-success {
130
+ color: #fff;
131
+ background-color: #3fb618;
132
+ border-color: #3fb618;
133
+ }
134
+
135
+ #bg-wrapper .bg-btn-success:hover,
136
+ #bg-wrapper .bg-btn-success:focus,
137
+ #bg-wrapper .bg-btn-success.focus,
138
+ #bg-wrapper .bg-btn-success:active,
139
+ #bg-wrapper .bg-btn-success.active {
140
+ color: #fff;
141
+ background-color: #2f8912;
142
+ border-color: #2c8011;
143
+ }
144
+
145
+ #bg-wrapper .bg-btn-primary {
146
+ color: #fff;
147
+ background-color: #2780e3;
148
+ border-color: #2780e3;
149
+ }
150
+
151
+ #bg-wrapper .bg-btn-primary:hover,
152
+ #bg-wrapper .bg-btn-primary:focus,
153
+ #bg-wrapper .bg-btn-primary.focus,
154
+ #bg-wrapper .bg-btn-primary:active,
155
+ #bg-wrapper .bg-btn-primary.active {
156
+ color: #fff;
157
+ background-color: #1967be;
158
+ border-color: #1862b5;
159
+ }
160
+
161
+ .bg-text-primary,
162
+ .bg-text-primary:hover {
163
+ color: #2780e3;
164
+ }
165
+
166
+ .bg-text-success,
167
+ .bg-text-success:hover {
168
+ color: #3fb618;
169
+ }
170
+
171
+ .sg-text-success {
172
+ color: #009F30;
173
+ }
174
+
175
+ .sg-remove-backup {
176
+ background-image: url("../img/delete-icon.png");
177
+ background-size: contain;
178
+ background-repeat: no-repeat;
179
+ width: 16px;
180
+ height: 19px;
181
+ text-decoration: none !important;
182
+ display: inline-block;
183
+ cursor: pointer;
184
+ }
185
+
186
+ .sg-bg-download-button {
187
+ background-image: url("../img/download-backup.png");
188
+ background-size: contain;
189
+ background-repeat: no-repeat;
190
+ width: 16px;
191
+ height: 19px;
192
+ text-decoration: none !important;
193
+ display: inline-block;
194
+ cursor: pointer;
195
+ }
196
+
197
+ .sg-restore-button {
198
+ background-image: url("../img/restore-backup.png");
199
+ background-size: contain;
200
+ background-repeat: no-repeat;
201
+ width: 16px;
202
+ height: 19px;
203
+ text-decoration: none !important;
204
+ display: inline-block;
205
+ cursor: pointer;
206
+ }
207
+
208
+ .sg-bg-download-button,
209
+ .sg-restore-button {
210
+ margin-left: 15px;
211
+ }
212
+
213
+ .bg-text-danger,
214
+ .bg-text-danger:hover {
215
+ color: #ff0039;
216
+ }
217
+
218
+ .bg-text-warning,
219
+ .bg-text-warning:hover {
220
+ color: #ff7518;
221
+ }
222
+
223
+ .bg-text-info,
224
+ .bg-text-info:hover {
225
+ color: #9954bb;
226
+ }
227
+
228
+ .bg-pull-right {
229
+ float: right;
230
+ }
231
+
232
+ .bg-pull-left {
233
+ float: left;
234
+ }
235
+
236
+ .bg-text-center {
237
+ text-align: center;
238
+ }
239
+
240
+ .bg-tooltip {
241
+ position: relative;
242
+ display: inline-block;
243
+ font-size: 15px;
244
+ color: #0021C8;
245
+ cursor: pointer;
246
+ }
247
+
248
+ .bg-tooltip .bg-tooltiptext {
249
+ visibility: hidden;
250
+ width: 140px;
251
+ background-color: #333;
252
+ color: #fff;
253
+ text-align: center;
254
+ padding: 5px;
255
+ border-radius: 6px;
256
+ bottom: 100%;
257
+ left: 50%;
258
+ margin-left: -75px;
259
+ position: absolute;
260
+ z-index: 1;
261
+ }
262
+
263
+ .bg-tooltip:hover .bg-tooltiptext {
264
+ visibility: visible;
265
+ }
266
+
267
+ .bg-tooltip .bg-tooltiptext::after {
268
+ content: " ";
269
+ position: absolute;
270
+ top: 100%;
271
+ left: 50%;
272
+ margin-left: -5px;
273
+ border-width: 5px;
274
+ border-style: solid;
275
+ border-color: #333 transparent transparent transparent;
276
+ }
277
+
278
+ /* General screen related styles */
279
+
280
+ .bg-logged-msg-container {
281
+ float: right;
282
+ font-size: 12px;
283
+ display: inline-block;
284
+ margin-top: 18px;
285
+ margin-left: 5px;
286
+ }
287
+
288
+ /* Login screen related styles */
289
+
290
+ .bg-login-container {
291
+ width: 330px;
292
+ margin: 51px auto;
293
+ overflow: auto;
294
+ }
295
+
296
+ .bg-login-container h1 {
297
+ font-size: 22.5px;
298
+ font-weight: normal;
299
+ margin-bottom: 20px;
300
+ margin-top: 0;
301
+ }
302
+
303
+ .bg-login-container .bg-tooltip {
304
+ padding: 10px 0;
305
+ display: inline-block;
306
+ }
307
+
308
+ .bg-login-content {
309
+ padding: 25px;
310
+ background-color: #fff;
311
+ overflow: auto;
312
+ }
313
+
314
+ #bg-login-error {
315
+ display: none;
316
+ }
317
+
318
+ /* Assign license screen related styles */
319
+
320
+ .bg-license-container {
321
+ width: 420px;
322
+ margin: 51px auto;
323
+ overflow: auto;
324
+ }
325
+
326
+ .bg-license-container h1 {
327
+ font-size: 22.5px;
328
+ font-weight: normal;
329
+ margin-bottom: 10px;
330
+ margin-top: 0;
331
+ }
332
+
333
+ .bg-license-container .bg-tooltip {
334
+ padding: 10px 0;
335
+ display: inline-block;
336
+ }
337
+
338
+ .bg-license-content {
339
+ background-color: #fff;
340
+ overflow: auto;
341
+ box-sizing: border-box;
342
+ }
343
+
344
+ .bg-file-icon {
345
+ background-image: url("default/fileicon.png") !important;
346
+ background-size: cover;
347
+ width: 15px !important;
348
+ height: 15px !important;
349
+ line-height: 15px !important;
350
+ margin-top: 5px !important;
351
+ }
352
+
353
+ .bg-folder-icon{
354
+ background-image: url("default/foldericon.png") !important;
355
+ background-size: cover;
356
+ width: 15px !important;
357
+ height: 15px !important;
358
+ line-height: 15px !important;
359
+ margin-top: 5px !important;
360
+ }
361
+
362
+ .bg-no-icon{
363
+ background: none !important;
364
+ width: 5px !important;
365
+ }
366
+
367
+ .sg-switch-container .bootstrap-switch-default {
368
+ background-color: #000000 !important;
369
+ color: #FFFFFF !important;
370
+ }
371
+
372
+ p.bg-license-btn-wrapper {
373
+ margin-top: 37px;
374
+ text-align: center !important;
375
+ }
376
+
377
+ #link-btn {
378
+ margin-top: 30px;
379
+ }
380
+
381
+ select#product {
382
+ margin-top: 2px;
383
+ text-indent: 4px;
384
+ }
385
+
386
+ .bg-license-content {
387
+ text-align: center;
388
+ }
389
+
390
+ .bg-license-content.sg-wrapper-less {
391
+ margin-top: 0 !important;
392
+ }
393
+
394
+ .sg-top-info {
395
+ height: 66px;
396
+ padding-right: 44px;
397
+ }
398
+
399
+ .sg-backup-page-title {
400
+ margin-top: 0px !important;
401
+ font-weight: bold !important;
402
+ margin-bottom: 36px !important;
403
+ }
404
+
405
+ .sg-bg-show {
406
+ display: block !important;
407
+ }
408
+
409
+ .sg-info-wrapper {
410
+ line-height: 1;
411
+ margin-top: 27px;
412
+ }
413
+
414
+ .sg-info-wrapper label {
415
+ margin-top: 0;
416
+ }
417
+ label.sg-user-info {
418
+ font-weight: normal;
419
+ }
420
+
421
+ .sg-info-content-wrapper label {
422
+ font-size: 18px;
423
+ }
424
+
425
+ .sg-settings-container label {
426
+ font-weight: normal;
427
+ }
428
+
429
+ #sg-email {
430
+ padding-right: 0;
431
+ }
432
+
433
+ .sg-cloud-icon {
434
+ background-size: contain;
435
+ background-repeat: no-repeat;
436
+ display: inline-block;
437
+ width: 17px;
438
+ height: 16px;
439
+ margin-top: 3px;
440
+ margin-right: 18px;
441
+ }
442
+
443
+ .sg-cloud-backup-guard {
444
+ background-image: url("../img/backup-cloud-icon.png");
445
+ }
446
+ .sg-cloud-dropbox {
447
+ background-image: url("../img/cloud-dropbox.png");
448
+ }
449
+ .sg-cloud-google-drive {
450
+ background-image: url("../img/cloud-google-drive.png");
451
+ }
452
+ .sg-cloud-ftp {
453
+ background-image: url("../img/cloud-ftp.png");
454
+ }
455
+ .sg-cloud-amazon {
456
+ background-image: url("../img/cloud-amazon.png");
457
+ }
458
+ .sg-cloud-one-drive {
459
+ background-image: url("../img/cloud-onedrive.png");
460
+ }
461
+ .sg-cloud-pcloud {
462
+ background-image: url("../img/cloud-pcloud.png");
463
+ }
464
+ .sg-cloud-box {
465
+ background-image: url("../img/cloud-box.png");
466
+ }
467
+
468
+ .sg-cancel-backup {
469
+ background-image: url("../img/stop-action.png");
470
+ background-size: contain;
471
+ background-repeat: no-repeat;
472
+ width: 16px;
473
+ height: 19px;
474
+ text-decoration: none !important;
475
+ display: inline-block;
476
+ cursor: pointer;
477
+ }
478
+
479
+ .sg-cloud-icon-wrapper,
480
+ .sg-cloud-label-wrapper {
481
+ display: inline-block;
482
+ vertical-align: top;
483
+ height: 39px;
484
+ line-height: 1;
485
+ font-weight: normal;
486
+ }
487
+
488
+ .sg-cloud-label-with-info {
489
+ display: inline-block;
490
+ }
491
+
492
+ .sg-schedule-icon {
493
+ text-decoration: none !important;
494
+ background-repeat: no-repeat;
495
+ background-size: contain;
496
+ display: inline-block;
497
+ cursor: pointer;
498
+ width: 24px;
499
+ height: 24px;
500
+ }
501
+
502
+ .sg-schedule-edit {
503
+ background-image: url("../img/edit-icon.png");
504
+ }
505
+
506
+ .sg-schedule-delete {
507
+ background-image: url("../img/delete-icon.png");
508
+ margin-left: 21px;
509
+ }
510
+
511
+ .sg-schedule-pending {
512
+ color: #0021C8 !important;
513
+ }
514
+
515
+ .sg-schedule-inactive {
516
+ color: #A4A4A4 !important;
517
+ }
518
+
519
+ #sg-save-settings {
520
+ margin-top: 47px;
521
+ margin-bottom: 23px;
522
+ width: 132px;
523
+ }
524
+
525
+ /* Generated by Glyphter (http://www.glyphter.com) on Thu Jul 30 2020*/
526
+ @font-face {
527
+ font-family: 'Glyphter';
528
+ src: url('../fonts/Glyphter.eot');
529
+ src: url('../fonts/Glyphter.eot?#iefix') format('embedded-opentype'),
530
+ url('../fonts/Glyphter.woff') format('woff'),
531
+ url('../fonts/Glyphter.ttf') format('truetype'),
532
+ url('../fonts/Glyphter.svg#Glyphter') format('svg');
533
+ font-weight: normal;
534
+ font-style: normal;
535
+ }
536
+ [class*='sg-backup-']:before{
537
+ display: inline-block;
538
+ font-family: 'Glyphter';
539
+ font-style: normal;
540
+ font-weight: normal;
541
+ line-height: 1;
542
+ -webkit-font-smoothing: antialiased;
543
+ -moz-osx-font-smoothing: grayscale
544
+ }
545
+ /*Video tutorials font*/
546
+ @font-face {
547
+ font-family: 'MenuGlyphter';
548
+ src: url('../fonts/MenuGlyphter.eot');
549
+ src: url('../fonts/MenuGlyphter.eot?#iefix') format('embedded-opentype'),
550
+ url('../fonts/MenuGlyphter.woff') format('woff'),
551
+ url('../fonts/MenuGlyphter.ttf') format('truetype'),
552
+ url('../fonts/MenuGlyphter.svg#MenuGlyphter') format('svg');
553
+ font-weight: normal;
554
+ font-style: normal;
555
+ }
556
+ [class*='sg-backup-menu-']:before{
557
+ display: inline-block;
558
+ font-family: 'MenuGlyphter';
559
+ font-style: normal;
560
+ font-weight: normal;
561
+ line-height: 1;
562
+ -webkit-font-smoothing: antialiased;
563
+ -moz-osx-font-smoothing: grayscale;
564
+ margin-right: 15px;
565
+ }
566
+
567
+ .sg-backup-menu-video:before{content:'\0041';}
568
+
569
+ .sg-backup-cross:before{content:'\0041';}
570
+ .sg-backup-report:before{content:'\0042';}
571
+ .sg-backup-delete:before{content:'\0043';}
572
+ .sg-backup-import:before{content:'\0044';}
573
+ .sg-backup-start:before{content:'\0045';}
574
+ .sg-backup-migrate:before{content:'\0046';}
575
+
576
+ .sg-backup-action-buttons {
577
+ display: flex !important;
578
+ vertical-align: middle;
579
+ line-height: 1 !important;
580
+ font-weight: normal !important;
581
+ }
582
+ span.sg-backup-buttons-content {
583
+ display: inline-block;
584
+ vertical-align: middle !important;
585
+ }
586
+
587
+ .sg-backup-buttons-text {
588
+ margin-left: 10px;
589
+ }
590
+ .sg-blue-label {
591
+ color: #0021C8 !important;
592
+ }
593
+
594
+ [disabled]#sg-delete-multi-backups,
595
+ [disabled]#sg-backup-with-migration {
596
+ background-color: #A4A4A4 !important;
597
+ border-color: #A4A4A4 !important;
598
  }
public/dashboardWidget.php CHANGED
@@ -1,116 +1,116 @@
1
- <?php
2
- require_once(SG_BACKUP_PATH.'SGBackup.php');
3
- // Function that outputs the contents of the dashboard widget
4
- function backup_guard_dashboard_widget_function( $post, $callback_args ) {
5
-
6
- $banner = backupGuardGetBanner(SG_ENV_WORDPRESS,"dashboard-widget");
7
-
8
- $backups = SGBackup::getAllBackups();
9
- $allBackupsCount = count($backups);
10
- $successBackups = 0;
11
- $faildBackups = 0;
12
- $inprogress = 0;
13
- $warningBackups = 0;
14
- $canceledBackups = 0;
15
-
16
- for($i = 0; $i < $allBackupsCount; $i++){
17
- if (empty($backups[$i])) {
18
- continue;
19
- }
20
- switch ($backups[$i]['status']){
21
- case SG_ACTION_STATUS_IN_PROGRESS_DB:
22
- case SG_ACTION_STATUS_IN_PROGRESS_FILES:
23
- $inprogress++;
24
- break;
25
- case SG_ACTION_STATUS_FINISHED_WARNINGS:
26
- $warningBackups++;
27
- break;
28
- case SG_ACTION_STATUS_CANCELLED:
29
- $canceledBackups++;
30
- break;
31
- case SG_ACTION_STATUS_ERROR:
32
- $faildBackups++;
33
- break;
34
- default:
35
- $successBackups++;
36
- }
37
- }
38
- if(strpos(SG_PRODUCT_IDENTIFIER,"silver") !== false || strpos(SG_PRODUCT_IDENTIFIER,"gold") !== false) {
39
- $sgb = new SGBackup();
40
- $scheduleParams = $sgb->getScheduleParamsById(SG_SCHEDULER_DEFAULT_ID);
41
- $scheduleParams = backupGuardParseBackupOptions($scheduleParams);
42
- $schedulesCount = strlen($scheduleParams['label'])? 1 : 0;
43
-
44
- }else if(strpos(SG_PRODUCT_IDENTIFIER,"free") === false) { // platinum
45
- require_once(SG_BACKUP_PATH.'SGBackupSchedule.php');
46
- $allSchedules = SGBackupSchedule::getAllSchedules();
47
- $schedulesCount = count($allSchedules);
48
- }
49
-
50
-
51
- ?>
52
- <div style="width: 100%; font-size: 12px; "><?php echo $banner ?></div>
53
- <div id="canvas-holder" style="width:100%">
54
- <canvas id="chart-area" />
55
- </div>
56
- <script>
57
- window.onload = function () {
58
- var config = {
59
- type: 'pie',
60
- data: {
61
- datasets: [{
62
- data: [
63
- <?php echo $successBackups ?>,
64
- <?php echo $faildBackups ?>,
65
- <?php echo $warningBackups ?>,
66
- <?php echo $canceledBackups ?>,
67
- <?php echo $inprogress ?>
68
-
69
-
70
- ],
71
- backgroundColor: [
72
- "#2b8b3a",
73
- "#f96868",
74
- "#ffb848",
75
- "#7C858E",
76
- "#64aed9"
77
-
78
- ],
79
- label: 'Dataset 1'
80
- }],
81
- labels: [
82
- "Success (<?php echo $successBackups ?>)",
83
- "Failed (<?php echo $faildBackups ?>)",
84
- "Warning (<?php echo $warningBackups ?>)",
85
- "Canceled (<?php echo $canceledBackups ?>)",
86
- "In progress (<?php echo $inprogress ?>)",
87
- ]
88
- },
89
- options: {
90
- responsive: true,
91
- legend: {
92
- labels: {
93
- // This more specific font property overrides the global property
94
- fontFamily: "'Source Sans Pro', 'Calibri', 'Candara', 'Arial', 'sans-serif'"
95
- }
96
- }
97
- }
98
- };
99
- <?php
100
- if(isset($schedulesCount)) {
101
- ?>
102
- config.data.datasets[0].data.push(<?php echo $schedulesCount ?>);
103
- config.data.datasets[0].backgroundColor.push("#cecece");
104
- config.data.labels.push("Schedules (<?php echo $schedulesCount ?>)");
105
- <?php
106
- }
107
-
108
- ?>
109
- var ctx = document.getElementById("chart-area").getContext("2d");
110
- window.myPie = new Chart(ctx, config);
111
-
112
- }
113
- </script>
114
- <?php
115
- }
116
-
1
+ <?php
2
+ require_once(SG_BACKUP_PATH.'SGBackup.php');
3
+ // Function that outputs the contents of the dashboard widget
4
+ function backup_guard_dashboard_widget_function( $post, $callback_args ) {
5
+
6
+ $banner = backupGuardGetBanner(SG_ENV_WORDPRESS,"dashboard-widget");
7
+
8
+ $backups = SGBackup::getAllBackups();
9
+ $allBackupsCount = count($backups);
10
+ $successBackups = 0;
11
+ $faildBackups = 0;
12
+ $inprogress = 0;
13
+ $warningBackups = 0;
14
+ $canceledBackups = 0;
15
+
16
+ for($i = 0; $i < $allBackupsCount; $i++){
17
+ if (empty($backups[$i])) {
18
+ continue;
19
+ }
20
+ switch ($backups[$i]['status']){
21
+ case SG_ACTION_STATUS_IN_PROGRESS_DB:
22
+ case SG_ACTION_STATUS_IN_PROGRESS_FILES:
23
+ $inprogress++;
24
+ break;
25
+ case SG_ACTION_STATUS_FINISHED_WARNINGS:
26
+ $warningBackups++;
27
+ break;
28
+ case SG_ACTION_STATUS_CANCELLED:
29
+ $canceledBackups++;
30
+ break;
31
+ case SG_ACTION_STATUS_ERROR:
32
+ $faildBackups++;
33
+ break;
34
+ default:
35
+ $successBackups++;
36
+ }
37
+ }
38
+ if(strpos(SG_PRODUCT_IDENTIFIER,"silver") !== false || strpos(SG_PRODUCT_IDENTIFIER,"gold") !== false) {
39
+ $sgb = new SGBackup();
40
+ $scheduleParams = $sgb->getScheduleParamsById(SG_SCHEDULER_DEFAULT_ID);
41
+ $scheduleParams = backupGuardParseBackupOptions($scheduleParams);
42
+ $schedulesCount = strlen($scheduleParams['label'])? 1 : 0;
43
+
44
+ }else if(strpos(SG_PRODUCT_IDENTIFIER,"free") === false) { // platinum
45
+ require_once(SG_BACKUP_PATH.'SGBackupSchedule.php');
46
+ $allSchedules = SGBackupSchedule::getAllSchedules();
47
+ $schedulesCount = count($allSchedules);
48
+ }
49
+
50
+
51
+ ?>
52
+ <div style="width: 100%; font-size: 12px; "><?php echo $banner ?></div>
53
+ <div id="canvas-holder" style="width:100%">
54
+ <canvas id="chart-area"></canvas>
55
+ </div>
56
+ <script>
57
+ function backupGuardLoadChart() {
58
+ var config = {
59
+ type: 'pie',
60
+ data: {
61
+ datasets: [{
62
+ data: [
63
+ <?php echo $successBackups ?>,
64
+ <?php echo $faildBackups ?>,
65
+ <?php echo $warningBackups ?>,
66
+ <?php echo $canceledBackups ?>,
67
+ <?php echo $inprogress ?>
68
+
69
+
70
+ ],
71
+ backgroundColor: [
72
+ "#2b8b3a",
73
+ "#f96868",
74
+ "#ffb848",
75
+ "#7C858E",
76
+ "#64aed9"
77
+
78
+ ],
79
+ label: 'Dataset 1'
80
+ }],
81
+ labels: [
82
+ "Success (<?php echo $successBackups ?>)",
83
+ "Failed (<?php echo $faildBackups ?>)",
84
+ "Warning (<?php echo $warningBackups ?>)",
85
+ "Canceled (<?php echo $canceledBackups ?>)",
86
+ "In progress (<?php echo $inprogress ?>)",
87
+ ]
88
+ },
89
+ options: {
90
+ responsive: true,
91
+ legend: {
92
+ labels: {
93
+ // This more specific font property overrides the global property
94
+ fontFamily: "'Source Sans Pro', 'Calibri', 'Candara', 'Arial', 'sans-serif'"
95
+ }
96
+ }
97
+ }
98
+ };
99
+ <?php
100
+ if(isset($schedulesCount)) {
101
+ ?>
102
+ config.data.datasets[0].data.push(<?php echo $schedulesCount ?>);
103
+ config.data.datasets[0].backgroundColor.push("#cecece");
104
+ config.data.labels.push("Schedules (<?php echo $schedulesCount ?>)");
105
+ <?php
106
+ }
107
+
108
+ ?>
109
+ var ctx = document.getElementById("chart-area").getContext("2d");
110
+ window.backupGuardPieChart = new Chart(ctx, config);
111
+ }
112
+ backupGuardLoadChart();
113
+ </script>
114
+ <?php
115
+ }
116
+
public/img/backup-icons.png CHANGED
Binary file
public/img/box-cloud.png ADDED
Binary file
public/img/cloud-box.png ADDED
Binary file
public/img/cloud-pcloud.png ADDED
Binary file
public/include/functions.php CHANGED
@@ -1,301 +1,335 @@
1
- <?php
2
-
3
- function backupGuardShouldShowDiscountNotice()
4
- {
5
- if (SGConfig::get("SG_HIDE_CHRISTMAS_NOTICE")) {
6
- return false;
7
- }
8
-
9
- return true;
10
- }
11
-
12
- function checkDueDateDiscount()
13
- {
14
- $startDate = '2019-11-27';
15
- $endDate = '2021-01-02';
16
-
17
- $timezone = 'Asia/Yerevan';
18
- $timeDate = new DateTime('now', new DateTimeZone($timezone));
19
- $currentTime = strtotime($timeDate->format('Y-m-d H:i:s'));
20
-
21
- $startDate = strtotime($startDate);
22
- $finishDate = strtotime($endDate);
23
-
24
- return ($currentTime > $startDate && $currentTime < $finishDate);
25
- }
26
-
27
- function _backupGuardT($key, $return = false)
28
- {
29
- if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
30
- if($return) {
31
- return __($key, "backup-guard-pro");
32
- }
33
- else {
34
- _e($key, "backup-guard-pro");
35
- }
36
- }
37
- else {
38
- if($return) {
39
- return $key;
40
- }
41
- else {
42
- echo $key;
43
- }
44
- }
45
- }
46
-
47
- function backupGuardIsAjax()
48
- {
49
- return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
50
- }
51
-
52
- function selectElement($data, $attributes=array(), $firstOption='', $selectedKey='')
53
- {
54
- $attrString = '';
55
- foreach($attributes as $attributeKey=>$attributeValue) {
56
- $attrString.= " ".$attributeKey.'="'.$attributeValue.'"';
57
-
58
- }
59
- $select = '<select'.$attrString.'>';
60
- if ($firstOption) {
61
- $select.='<option value="0">'.$firstOption.'</option>';
62
- }
63
- foreach($data as $key=>$val) {
64
- $selected = $selectedKey==$key?' selected="selected"':'';
65
- $select.='<option value="'.$key.'"'.$selected.'>'.$val.'</option>';
66
- }
67
- $select.='</select>';
68
- return $select;
69
- }
70
-
71
- function backupGuardParseBackupOptions($options)
72
- {
73
-
74
- $scheduleOptions = array(
75
- 'interval' => '',
76
- 'dayOfInterval' => '',
77
- 'intervalHour' => '',
78
- 'isBackgroundMode' => false,
79
- 'isDatabaseSelected' => false,
80
- 'isFilesSelected' => false,
81
- 'isCustomBackup' => false,
82
- 'selectedDirectories' => array(),
83
- 'excludeDirectories' => array(),
84
- 'selectedClouds' => array(),
85
- 'label' => ''
86
- );
87
-
88
- if (isset($options['schedule_options'])) {
89
- $scheduleExecutionOptions = json_decode($options['schedule_options'], true);
90
-
91
- $scheduleOptions['interval'] = $scheduleExecutionOptions['interval'];
92
- $scheduleOptions['dayOfInterval'] = $scheduleExecutionOptions['dayOfInterval'];
93
- $scheduleOptions['intervalHour'] = $scheduleExecutionOptions['intervalHour'];
94
- }
95
-
96
- if (isset($options['backup_options'])) {
97
-
98
- $backupOptions = json_decode($options['backup_options'], true);
99
-
100
- $scheduleOptions['isBackgroundMode'] = $backupOptions['SG_BACKUP_IN_BACKGROUND_MODE']?true:false;
101
- $scheduleOptions['isDatabaseSelected'] = $backupOptions['SG_ACTION_BACKUP_DATABASE_AVAILABLE']?true:false;
102
- $scheduleOptions['isFilesSelected'] = $backupOptions['SG_ACTION_BACKUP_FILES_AVAILABLE']?true:false;
103
- $backupType = $backupOptions['SG_BACKUP_TYPE'];
104
-
105
- $scheduleOptions['isCustomBackup'] = $backupType==SG_BACKUP_TYPE_FULL?false:true;
106
-
107
- if ($scheduleOptions['isCustomBackup']) {
108
- $scheduleOptions['selectedDirectories'] = explode(',', $backupOptions['SG_BACKUP_FILE_PATHS']);
109
- if ($scheduleOptions['isFilesSelected']) {
110
- $scheduleOptions['excludeDirectories'] = explode(',', $backupOptions['SG_BACKUP_FILE_PATHS_EXCLUDE']);
111
- }
112
- }
113
-
114
- if (strlen($backupOptions['SG_BACKUP_UPLOAD_TO_STORAGES'])) {
115
- $scheduleOptions['selectedClouds'] = explode(',', $backupOptions['SG_BACKUP_UPLOAD_TO_STORAGES']);
116
- }
117
- }
118
-
119
- if (isset($options['label'])) {
120
- $scheduleOptions['label'] = $options['label'];
121
- }
122
-
123
- return $scheduleOptions;
124
- }
125
-
126
- function backupGuardFilterStatusesByActionType($currentBackup, $currentOptions)
127
- {
128
- $filteredStatuses = array();
129
- if($currentBackup['type'] == SG_ACTION_TYPE_RESTORE)
130
- {
131
- $filteredStatuses[] = SG_ACTION_TYPE_RESTORE.SG_ACTION_STATUS_IN_PROGRESS_FILES;
132
- $filteredStatuses[] = SG_ACTION_TYPE_RESTORE.SG_ACTION_STATUS_IN_PROGRESS_DB;
133
- }
134
- else
135
- {
136
- $currentOptions = backupGuardActiveOptionToType($currentOptions);
137
- if ($currentOptions['backupDatabase']) $filteredStatuses[] = $currentOptions['backupDatabase'];
138
- if ($currentOptions['backupFiles']) $filteredStatuses[] = $currentOptions['backupFiles'];
139
- if ($currentOptions['ftp']) $filteredStatuses[] = $currentOptions['ftp'];
140
- if ($currentOptions['dropbox']) $filteredStatuses[] = $currentOptions['dropbox'];
141
- if ($currentOptions['gdrive']) $filteredStatuses[] = $currentOptions['gdrive'];
142
- if ($currentOptions['amazon']) $filteredStatuses[] = $currentOptions['amazon'];
143
- if ($currentOptions['oneDrive']) $filteredStatuses[] = $currentOptions['oneDrive'];
144
- if ($currentOptions['backupGuard']) $filteredStatuses[] = $currentOptions['backupGuard'];
145
- }
146
- return $filteredStatuses;
147
- }
148
-
149
- function backupGuardActiveOptionToType($activeOption)
150
- {
151
- $activeOption = json_decode($activeOption, true);
152
- $activeOptions['backupDatabase'] = !empty($activeOption['SG_ACTION_BACKUP_DATABASE_AVAILABLE'])?SG_ACTION_STATUS_IN_PROGRESS_DB:0;
153
- $activeOptions['backupFiles'] = !empty($activeOption['SG_ACTION_BACKUP_FILES_AVAILABLE'])?SG_ACTION_STATUS_IN_PROGRESS_FILES:0;
154
-
155
- $storages = explode(',', @$activeOption['SG_BACKUP_UPLOAD_TO_STORAGES']);
156
- $activeOptions['ftp'] = 0;
157
- $activeOptions['dropbox'] = 0;
158
- $activeOptions['gdrive'] = 0;
159
- $activeOptions['amazon'] = 0;
160
- $activeOptions['oneDrive'] = 0;
161
- $activeOptions['backupGuard'] = 0;
162
- foreach ($storages as $key => $storage) {
163
- switch ($storage) {
164
- case SG_STORAGE_FTP:
165
- $activeOptions['ftp'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_FTP;
166
- break;
167
- case SG_STORAGE_DROPBOX:
168
- $activeOptions['dropbox'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_DROPBOX;
169
- break;
170
- case SG_STORAGE_GOOGLE_DRIVE:
171
- $activeOptions['gdrive'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_GOOGLE_DRIVE;
172
- break;
173
- case SG_STORAGE_AMAZON:
174
- $activeOptions['amazon'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_AMAZON;
175
- break;
176
- case SG_STORAGE_ONE_DRIVE:
177
- $activeOptions['oneDrive'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_ONE_DRIVE;
178
- break;
179
- case SG_STORAGE_BACKUP_GUARD:
180
- $activeOptions['backupGuard'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_BACKUP_GUARD;
181
- break;
182
- }
183
- }
184
-
185
- return $activeOptions;
186
- }
187
-
188
- function backupGuardConvertToBytes($from){
189
- $number=substr($from,0,-2);
190
- switch(strtoupper(substr($from,-2))){
191
- case "KB":
192
- return $number*1024;
193
- case "MB":
194
- return $number*pow(1024,2);
195
- case "GB":
196
- return $number*pow(1024,3);
197
- case "TB":
198
- return $number*pow(1024,4);
199
- case "PB":
200
- return $number*pow(1024,5);
201
- default:
202
- return $from;
203
- }
204
- }
205
-
206
- function backupGuardGetRunningActions()
207
- {
208
- $runningActions = SGBackup::getRunningActions();
209
- $isAnyActiveActions = count($runningActions);
210
- if($isAnyActiveActions) {
211
- return $runningActions;
212
- }
213
- return false;
214
- }
215
-
216
- function backupGuardShouldUpdate()
217
- {
218
- $currentVersion = SG_BACKUP_GUARD_VERSION;
219
- $oldVersion = SGConfig::get('SG_BACKUP_GUARD_VERSION', true);
220
-
221
- if (!$oldVersion) {
222
- return true;
223
- }
224
-
225
- if ($currentVersion !== $oldVersion) {
226
- SGConfig::set('SG_BACKUP_GUARD_VERSION', $currentVersion, true);
227
- SGConfig::set('SG_HIDE_CHRISTMAS_NOTICE', '0', true);
228
- SGBoot::didUpdatePluginVersion();
229
- return SG_FORCE_DB_TABLES_RESET;
230
- }
231
-
232
- if (!checkAllMissedTables()) {
233
- return true;
234
- }
235
-
236
- return false;
237
- }
238
-
239
- function backupGuardGetDatabaseEngine()
240
- {
241
- global $wpdb;
242
- $dbName = $wpdb->dbname;
243
- $engine = 'InnoDB';
244
- $engineCheckSql = "SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '$dbName'";
245
- $result = $wpdb->get_results($engineCheckSql, ARRAY_A);
246
- if (!empty($result)) {
247
- $engineCheckSql = "SHOW TABLE STATUS WHERE Name = '".$wpdb->prefix."users' AND Engine = 'MyISAM'";
248
- $result = $wpdb->get_results($engineCheckSql, ARRAY_A);
249
- if (isset($result[0]['Engine']) && $result[0]['Engine'] == 'MyISAM') {
250
- $engine = 'MyISAM';
251
- }
252
- }
253
-
254
- return $engine;
255
- }
256
-
257
- function backupGuardShouldActivateExtension($extension)
258
- {
259
- $extensionAdapter = SGExtension::getInstance();
260
-
261
- if (!$extensionAdapter->isExtensionAvailable($extension) || SGConfig::get($extension) || !$extensionAdapter->isExtensionAlreadyInPluginsFolder($extension) || $extensionAdapter->isExtensionActive($extension)) {
262
- return false;
263
- }
264
-
265
- return true;
266
- }
267
-
268
- function backupGuardShouldInstallExtension($extension)
269
- {
270
- $extensionAdapter = SGExtension::getInstance();
271
-
272
- if (!$extensionAdapter->isExtensionAvailable($extension) || SGConfig::get($extension) || $extensionAdapter->isExtensionAlreadyInPluginsFolder($extension) || $extensionAdapter->isExtensionActive($extension)) {
273
- return false;
274
- }
275
-
276
- return true;
277
- }
278
-
279
- function backupGuardLoggedMessage()
280
- {
281
- $pluginCapabilities = backupGuardGetCapabilities();
282
- if ($pluginCapabilities == BACKUP_GUARD_CAPABILITIES_FREE) {
283
- return '';
284
- }
285
-
286
- $user = SGConfig::get('SG_LOGGED_USER');
287
- if (!$user) {
288
- return '';
289
- }
290
-
291
- $user = unserialize($user);
292
- if (!$user || empty($user['firstname'])) {
293
- return '';
294
- }
295
-
296
- $html = '<span class="bg-logged-msg-container">';
297
- $html .= 'Package: '.backupGuardGetProductName() .' | Version: '.SG_BACKUP_GUARD_VERSION;
298
- $html .= ' | Welcome, <b>'.$user['firstname'].'</b>! ';
299
- $html .= '(<a href="javascript:void(0)" onclick="sgBackup.logout()">Log Out</a>)</span>';
300
- return $html;
301
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ function backupGuardShouldShowDiscountNotice()
4
+ {
5
+ if (SGConfig::get("SG_HIDE_DISCOUNT_NOTICE")) {
6
+ return false;
7
+ }
8
+
9
+ return true;
10
+ }
11
+
12
+ function checkDueDateDiscount()
13
+ {
14
+ $startDate = '2019-11-27';
15
+ $endDate = '2019-12-02';
16
+
17
+ $timezone = 'Asia/Yerevan';
18
+ $timeDate = new DateTime('now', new DateTimeZone($timezone));
19
+ $currentTime = strtotime($timeDate->format('Y-m-d H:i:s'));
20
+
21
+ $startDate = strtotime($startDate);
22
+ $finishDate = strtotime($endDate);
23
+
24
+ return ($currentTime > $startDate && $currentTime < $finishDate);
25
+ }
26
+
27
+ function _backupGuardT($key, $return = false)
28
+ {
29
+ if (SG_ENV_ADAPTER == SG_ENV_WORDPRESS) {
30
+ if($return) {
31
+ return __($key, "backup-guard-pro");
32
+ }
33
+ else {
34
+ _e($key, "backup-guard-pro");
35
+ }
36
+ }
37
+ else {
38
+ if($return) {
39
+ return $key;
40
+ }
41
+ else {
42
+ echo $key;
43
+ }
44
+ }
45
+ }
46
+
47
+ function backupGuardIsAjax()
48
+ {
49
+ return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
50
+ }
51
+
52
+ function selectElement($data, $attributes=array(), $firstOption='', $selectedKey='')
53
+ {
54
+ $attrString = '';
55
+ foreach($attributes as $attributeKey=>$attributeValue) {
56
+ $attrString.= " ".$attributeKey.'="'.$attributeValue.'"';
57
+
58
+ }
59
+ $select = '<select'.$attrString.'>';
60
+ if ($firstOption) {
61
+ $select.='<option value="0">'.$firstOption.'</option>';
62
+ }
63
+ foreach($data as $key=>$val) {
64
+ $selected = $selectedKey==$key?' selected="selected"':'';
65
+ $select.='<option value="'.$key.'"'.$selected.'>'.$val.'</option>';
66
+ }
67
+ $select.='</select>';
68
+ return $select;
69
+ }
70
+
71
+ function backupGuardParseBackupOptions($options)
72
+ {
73
+
74
+ $scheduleOptions = array(
75
+ 'interval' => '',
76
+ 'dayOfInterval' => '',
77
+ 'intervalHour' => '',
78
+ 'isBackgroundMode' => false,
79
+ 'isDatabaseSelected' => false,
80
+ 'isFilesSelected' => false,
81
+ 'isCustomBackup' => false,
82
+ 'selectedDirectories' => array(),
83
+ 'excludeDirectories' => array(),
84
+ 'selectedClouds' => array(),
85
+ 'label' => ''
86
+ );
87
+
88
+ if (isset($options['schedule_options'])) {
89
+ $scheduleExecutionOptions = json_decode($options['schedule_options'], true);
90
+
91
+ $scheduleOptions['interval'] = $scheduleExecutionOptions['interval'];
92
+ $scheduleOptions['dayOfInterval'] = $scheduleExecutionOptions['dayOfInterval'];
93
+ $scheduleOptions['intervalHour'] = $scheduleExecutionOptions['intervalHour'];
94
+ }
95
+
96
+ if (isset($options['backup_options'])) {
97
+
98
+ $backupOptions = json_decode($options['backup_options'], true);
99
+
100
+ $scheduleOptions['isBackgroundMode'] = $backupOptions['SG_BACKUP_IN_BACKGROUND_MODE']?true:false;
101
+ $scheduleOptions['isDatabaseSelected'] = $backupOptions['SG_ACTION_BACKUP_DATABASE_AVAILABLE']?true:false;
102
+ $scheduleOptions['isFilesSelected'] = $backupOptions['SG_ACTION_BACKUP_FILES_AVAILABLE']?true:false;
103
+ $backupType = $backupOptions['SG_BACKUP_TYPE'];
104
+
105
+ $scheduleOptions['isCustomBackup'] = $backupType==SG_BACKUP_TYPE_FULL?false:true;
106
+
107
+ if ($scheduleOptions['isCustomBackup']) {
108
+ $scheduleOptions['selectedDirectories'] = explode(',', $backupOptions['SG_BACKUP_FILE_PATHS']);
109
+ if ($scheduleOptions['isFilesSelected']) {
110
+ $scheduleOptions['excludeDirectories'] = explode(',', $backupOptions['SG_BACKUP_FILE_PATHS_EXCLUDE']);
111
+ }
112
+ }
113
+
114
+ if (strlen($backupOptions['SG_BACKUP_UPLOAD_TO_STORAGES'])) {
115
+ $scheduleOptions['selectedClouds'] = explode(',', $backupOptions['SG_BACKUP_UPLOAD_TO_STORAGES']);
116
+ }
117
+ }
118
+
119
+ if (isset($options['label'])) {
120
+ $scheduleOptions['label'] = $options['label'];
121
+ }
122
+
123
+ return $scheduleOptions;
124
+ }
125
+
126
+ function backupGuardFilterStatusesByActionType($currentBackup, $currentOptions)
127
+ {
128
+ $filteredStatuses = array();
129
+ if($currentBackup['type'] == SG_ACTION_TYPE_RESTORE)
130
+ {
131
+ $filteredStatuses[] = SG_ACTION_TYPE_RESTORE.SG_ACTION_STATUS_IN_PROGRESS_FILES;
132
+ $filteredStatuses[] = SG_ACTION_TYPE_RESTORE.SG_ACTION_STATUS_IN_PROGRESS_DB;
133
+ }
134
+ else
135
+ {
136
+ $currentOptions = backupGuardActiveOptionToType($currentOptions);
137
+ if ($currentOptions['backupDatabase']) $filteredStatuses[] = $currentOptions['backupDatabase'];
138
+ if ($currentOptions['backupFiles']) $filteredStatuses[] = $currentOptions['backupFiles'];
139
+ if ($currentOptions['ftp']) $filteredStatuses[] = $currentOptions['ftp'];
140
+ if ($currentOptions['dropbox']) $filteredStatuses[] = $currentOptions['dropbox'];
141
+ if ($currentOptions['gdrive']) $filteredStatuses[] = $currentOptions['gdrive'];
142
+ if ($currentOptions['amazon']) $filteredStatuses[] = $currentOptions['amazon'];
143
+ if ($currentOptions['oneDrive']) $filteredStatuses[] = $currentOptions['oneDrive'];
144
+ if ($currentOptions['pCloud']) $filteredStatuses[] = $currentOptions['pCloud'];
145
+ if ($currentOptions['box']) $filteredStatuses[] = $currentOptions['box'];
146
+ if ($currentOptions['backupGuard']) $filteredStatuses[] = $currentOptions['backupGuard'];
147
+ }
148
+ return $filteredStatuses;
149
+ }
150
+
151
+ function backupGuardActiveOptionToType($activeOption)
152
+ {
153
+ $activeOption = json_decode($activeOption, true);
154
+ $activeOptions['backupDatabase'] = !empty($activeOption['SG_ACTION_BACKUP_DATABASE_AVAILABLE'])?SG_ACTION_STATUS_IN_PROGRESS_DB:0;
155
+ $activeOptions['backupFiles'] = !empty($activeOption['SG_ACTION_BACKUP_FILES_AVAILABLE'])?SG_ACTION_STATUS_IN_PROGRESS_FILES:0;
156
+
157
+ $storages = explode(',', @$activeOption['SG_BACKUP_UPLOAD_TO_STORAGES']);
158
+ $activeOptions['ftp'] = 0;
159
+ $activeOptions['dropbox'] = 0;
160
+ $activeOptions['gdrive'] = 0;
161
+ $activeOptions['amazon'] = 0;
162
+ $activeOptions['oneDrive'] = 0;
163
+ $activeOptions['pCloud'] = 0;
164
+ $activeOptions['box'] = 0;
165
+ $activeOptions['backupGuard'] = 0;
166
+ foreach ($storages as $key => $storage) {
167
+ switch ($storage) {
168
+ case SG_STORAGE_FTP:
169
+ $activeOptions['ftp'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_FTP;
170
+ break;
171
+ case SG_STORAGE_DROPBOX:
172
+ $activeOptions['dropbox'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_DROPBOX;
173
+ break;
174
+ case SG_STORAGE_GOOGLE_DRIVE:
175
+ $activeOptions['gdrive'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_GOOGLE_DRIVE;
176
+ break;
177
+ case SG_STORAGE_AMAZON:
178
+ $activeOptions['amazon'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_AMAZON;
179
+ break;
180
+ case SG_STORAGE_ONE_DRIVE:
181
+ $activeOptions['oneDrive'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_ONE_DRIVE;
182
+ break;
183
+ case SG_STORAGE_P_CLOUD:
184
+ $activeOptions['pCloud'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_P_CLOUD;
185
+ break;
186
+ case SG_STORAGE_BOX:
187
+ $activeOptions['box'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_BOX;
188
+ break;
189
+ case SG_STORAGE_BACKUP_GUARD:
190
+ $activeOptions['backupGuard'] = SG_ACTION_TYPE_UPLOAD.SG_STORAGE_BACKUP_GUARD;
191
+ break;
192
+ }
193
+ }
194
+
195
+ return $activeOptions;
196
+ }
197
+
198
+ function backupGuardConvertToBytes($from){
199
+ $number=substr($from,0,-2);
200
+ switch(strtoupper(substr($from,-2))){
201
+ case "KB":
202
+ return $number*1024;
203
+ case "MB":
204
+ return $number*pow(1024,2);
205
+ case "GB":
206
+ return $number*pow(1024,3);
207
+ case "TB":
208
+ return $number*pow(1024,4);
209
+ case "PB":
210
+ return $number*pow(1024,5);
211
+ default:
212
+ return $from;
213
+ }
214
+ }
215
+
216
+ function backupGuardGetRunningActions()
217
+ {
218
+ $runningActions = SGBackup::getRunningActions();
219
+ $isAnyActiveActions = count($runningActions);
220
+ if($isAnyActiveActions) {
221
+ return $runningActions;
222
+ }
223
+ return false;
224
+ }
225
+
226
+ function backupGuardShouldUpdate()
227
+ {
228
+ $currentVersion = SG_BACKUP_GUARD_VERSION;
229
+ $oldVersion = SGConfig::get('SG_BACKUP_GUARD_VERSION', true);
230
+
231
+ if (!$oldVersion) {
232
+ return true;
233
+ }
234
+
235
+ if ($currentVersion !== $oldVersion) {
236
+ SGConfig::set('SG_BACKUP_GUARD_VERSION', $currentVersion, true);
237
+ SGConfig::set('SG_HIDE_DISCOUNT_NOTICE', '0', true);
238
+ SGBoot::didUpdatePluginVersion();
239
+ return SG_FORCE_DB_TABLES_RESET;
240
+ }
241
+
242
+ if (!checkAllMissedTables()) {
243
+ return true;
244
+ }
245
+
246
+ return false;
247
+ }
248
+
249
+ function backupGuardGetDatabaseEngine()
250
+ {
251
+ global $wpdb;
252
+ $dbName = $wpdb->dbname;
253
+ $engine = 'InnoDB';
254
+ $engineCheckSql = "SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '$dbName'";
255
+ $result = $wpdb->get_results($engineCheckSql, ARRAY_A);
256
+ if (!empty($result)) {
257
+ $engineCheckSql = "SHOW TABLE STATUS WHERE Name = '".$wpdb->prefix."users' AND Engine = 'MyISAM'";
258
+ $result = $wpdb->get_results($engineCheckSql, ARRAY_A);
259
+ if (isset($result[0]['Engine']) && $result[0]['Engine'] == 'MyISAM') {
260
+ $engine = 'MyISAM';
261
+ }
262
+ }
263
+
264
+ return $engine;
265
+ }
266
+
267
+ function backupGuardShouldActivateExtension($extension)
268
+ {
269
+ $extensionAdapter = SGExtension::getInstance();
270
+
271
+ if (!$extensionAdapter->isExtensionAvailable($extension) || SGConfig::get($extension) || !$extensionAdapter->isExtensionAlreadyInPluginsFolder($extension) || $extensionAdapter->isExtensionActive($extension)) {
272
+ return false;
273
+ }
274
+
275
+ return true;
276
+ }
277
+
278
+ function backupGuardShouldInstallExtension($extension)
279
+ {
280
+ $extensionAdapter = SGExtension::getInstance();
281
+
282
+ if (!$extensionAdapter->isExtensionAvailable($extension) || SGConfig::get($extension) || $extensionAdapter->isExtensionAlreadyInPluginsFolder($extension) || $extensionAdapter->isExtensionActive($extension)) {
283
+ return false;
284
+ }
285
+
286
+ return true;
287
+ }
288
+
289
+ function backupGuardLoggedMessage()
290
+ {
291
+ $pluginCapabilities = backupGuardGetCapabilities();
292
+ if ($pluginCapabilities == BACKUP_GUARD_CAPABILITIES_FREE) {
293
+ return '';
294
+ }
295
+
296
+ $user = SGConfig::get('SG_LOGGED_USER');
297
+ if (!$user) {
298
+ return '';
299
+ }
300
+
301
+ $user = unserialize($user);
302
+ if (!$user || empty($user['firstname'])) {
303
+ return '';
304
+ }
305
+
306
+ $html = '<span class="bg-logged-msg-container">';
307
+ $html .= 'Package: '.backupGuardGetProductName() .' | Version: '.SG_BACKUP_GUARD_VERSION;
308
+ $html .= ' | Welcome, <b>'.$user['firstname'].'</b>! ';
309
+ $html .= '(<a href="javascript:void(0)" onclick="sgBackup.logout()">Log Out</a>)</span>';
310
+ return $html;
311
+ }
312
+
313
+
314
+ if (!function_exists('dd')) {
315
+ function dd()
316
+ {
317
+ $args = func_get_args();
318
+
319
+ foreach ($args as $arg) {
320
+ ob_start();
321
+ print_r($arg);
322
+ $output = ob_get_clean();
323
+
324
+ // Add formatting
325
+ $output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $output);
326
+ $output = '<pre style="background: #FFFEEF; color: #000; border: 1px dashed #888; padding: 10px; margin: 10px 0; text-align: left;">' . $output . '</pre>';
327
+
328
+ echo $output;
329
+ }
330
+
331
+ exit;
332
+
333
+ }
334
+ }
335
+
public/include/sidebar.php CHANGED
@@ -5,7 +5,7 @@
5
  $isDisabelAdsEnabled = SGConfig::get('SG_DISABLE_ADS');
6
  $showUpgradeButton = SGBoot::isFeatureAvailable('SHOW_UPGRADE_PAGE');
7
  $buttonText = 'Buy now!';
8
- $upgradeText = 'Website migration, Backup to cloud, automatization, mail notifications, and more in our PRO package!';
9
  $buttonUrl = SG_BACKUP_SITE_URL;
10
 
11
  $pluginCapabilities = backupGuardGetCapabilities();
@@ -116,7 +116,7 @@
116
  <?php _backupGuardT($upgradeText); ?>
117
  </p>
118
  <p>
119
- <a class="btn btn-success" target="_blank" href="<?php echo $buttonUrl; ?>">
120
  <?php _backupGuardT($buttonText); ?>
121
  </a>
122
  </p>
5
  $isDisabelAdsEnabled = SGConfig::get('SG_DISABLE_ADS');
6
  $showUpgradeButton = SGBoot::isFeatureAvailable('SHOW_UPGRADE_PAGE');
7
  $buttonText = 'Buy now!';
8
+ $upgradeText = 'Website migration, Backup to cloud, automation, mail notifications, and more in our PRO package!';
9
  $buttonUrl = SG_BACKUP_SITE_URL;
10
 
11
  $pluginCapabilities = backupGuardGetCapabilities();
116
  <?php _backupGuardT($upgradeText); ?>
117
  </p>
118
  <p>
119
+ <a class="btn btn-success" target="_blank" href="<?php echo $buttonUrl.'?utm_source=plugin&utm_medium=Left_cta&utm_campaign=BuyNow_plugin'; ?>">
120
  <?php _backupGuardT($buttonText); ?>
121
  </a>
122
  </p>
public/js/sgbackup.js CHANGED
@@ -1,4 +1,4 @@
1
- BG_BACKUP_STRINGS_DEACTIVATE = '';
2
  SG_DOWNLOAD_PROGRESS = '';
3
  SG_ACTIVE_DOWNLOAD_AJAX = '';
4
  SG_CHECK_ACTION_STATUS_REQUEST_FREQUENCY = 2500;
@@ -9,6 +9,11 @@ SG_STORAGE_GOOGLE_DRIVE = 3;
9
  SG_STORAGE_AMAZON = 4;
10
  SG_STORAGE_ONE_DRIVE = 5;
11
  SG_STORAGE_BACKUP_GUARD = 6;
 
 
 
 
 
12
 
13
  jQuery(document).on('change', '.btn-file :file', function() {
14
  var input = jQuery(this),
@@ -307,6 +312,12 @@ sgBackup.listStorage = function(importFrom) {
307
  case SG_STORAGE_ONE_DRIVE:
308
  cloudName = "OneDrive";
309
  break;
 
 
 
 
 
 
310
  case SG_STORAGE_BACKUP_GUARD:
311
  cloudName = "BackupGuard";
312
  break;
@@ -332,7 +343,7 @@ sgBackup.listStorage = function(importFrom) {
332
  }
333
 
334
  content += '<tr>';
335
- content += '<td class="file-select-radio"><input type="radio" file-name="'+value.name+'" name="select-archive-to-download" size="'+value.size+'" backup-id="'+value.id+'" storage="'+importFrom+'" value="'+value.path+'"></td>';
336
  content += '<td>'+value.name+'</td>';
337
  content += '<td>'+sgBackup.convertBytesToMegabytes(value.size)+'</td>';
338
  content += '<td>'+value.date+'</td>';
@@ -433,7 +444,7 @@ sgBackup.toggleDownloadFromCloudPage = function(){
433
  jQuery('#uploadSgbpFile').toggle();
434
  };
435
 
436
- sgBackup.downloadFromCloud = function (path, name, storage, size) {
437
  sgBackup.showAjaxSpinner('.modal-dialog');
438
  var error = [];
439
  if (!path) {
@@ -453,6 +464,7 @@ sgBackup.downloadFromCloud = function (path, name, storage, size) {
453
  path: path,
454
  storage: storage,
455
  size: size,
 
456
  token: BG_BACKUP_STRINGS.nonce
457
  });
458
 
@@ -641,6 +653,8 @@ sgBackup.initManualBackupTooltips = function(){
641
  jQuery('[for=cloud-dropbox]').tooltip();
642
  jQuery('[for=cloud-gdrive]').tooltip();
643
  jQuery('[for=cloud-one-drive]').tooltip();
 
 
644
  jQuery('[for=cloud-amazon]').tooltip();
645
  jQuery('[for=cloud-backup-guard]').tooltip();
646
 
@@ -809,6 +823,12 @@ sgBackup.statusUpdate = function(tooltip, response, progressInPercents){
809
  else if(response.subtype == SG_STORAGE_ONE_DRIVE) {
810
  tooltipText = 'Uploading to OneDrive - '+progressInPercents;
811
  }
 
 
 
 
 
 
812
  else if(response.subtype == SG_STORAGE_BACKUP_GUARD) {
813
  tooltipText = 'Uploading to BackupGuard - '+progressInPercents;
814
  }
@@ -827,6 +847,7 @@ sgBackup.disableUi = function(){
827
 
828
  sgBackup.enableUi = function(){
829
  jQuery('#sg-manual-backup').removeAttr('disabled');
 
830
  jQuery('#sg-import').removeAttr('disabled');
831
  jQuery('.sg-restore').removeAttr('disabled');
832
  jQuery('.sg-restore-button').removeAttr('disabled');
1
+ BG_BACKUP_STRINGS_DEACTIVATE = [];
2
  SG_DOWNLOAD_PROGRESS = '';
3
  SG_ACTIVE_DOWNLOAD_AJAX = '';
4
  SG_CHECK_ACTION_STATUS_REQUEST_FREQUENCY = 2500;
9
  SG_STORAGE_AMAZON = 4;
10
  SG_STORAGE_ONE_DRIVE = 5;
11
  SG_STORAGE_BACKUP_GUARD = 6;
12
+ SG_STORAGE_P_CLOUD = 7;
13
+ SG_STORAGE_BOX = 8;
14
+
15
+ BG_BACKUP_STRINGS_DEACTIVATE.areYouSure = "Are you sure?";
16
+
17
 
18
  jQuery(document).on('change', '.btn-file :file', function() {
19
  var input = jQuery(this),
312
  case SG_STORAGE_ONE_DRIVE:
313
  cloudName = "OneDrive";
314
  break;
315
+ case SG_STORAGE_P_CLOUD:
316
+ cloudName = "pCloud";
317
+ break;
318
+ case SG_STORAGE_BOX:
319
+ cloudName = "box.com";
320
+ break;
321
  case SG_STORAGE_BACKUP_GUARD:
322
  cloudName = "BackupGuard";
323
  break;
343
  }
344
 
345
  content += '<tr>';
346
+ content += '<td class="file-select-radio"><input type="radio" file-name="'+value.name+'" name="select-archive-to-download" size="'+value.size+'" backup-id="'+backupId+'" storage="'+importFrom+'" value="'+value.path+'"></td>';
347
  content += '<td>'+value.name+'</td>';
348
  content += '<td>'+sgBackup.convertBytesToMegabytes(value.size)+'</td>';
349
  content += '<td>'+value.date+'</td>';
444
  jQuery('#uploadSgbpFile').toggle();
445
  };
446
 
447
+ sgBackup.downloadFromCloud = function (path, name, storage, size, backupId) {
448
  sgBackup.showAjaxSpinner('.modal-dialog');
449
  var error = [];
450
  if (!path) {
464
  path: path,
465
  storage: storage,
466
  size: size,
467
+ backupId: backupId,
468
  token: BG_BACKUP_STRINGS.nonce
469
  });
470
 
653
  jQuery('[for=cloud-dropbox]').tooltip();
654
  jQuery('[for=cloud-gdrive]').tooltip();
655
  jQuery('[for=cloud-one-drive]').tooltip();
656
+ jQuery('[for=cloud-p-cloud]').tooltip();
657
+ jQuery('[for=cloud-box]').tooltip();
658
  jQuery('[for=cloud-amazon]').tooltip();
659
  jQuery('[for=cloud-backup-guard]').tooltip();
660
 
823
  else if(response.subtype == SG_STORAGE_ONE_DRIVE) {
824
  tooltipText = 'Uploading to OneDrive - '+progressInPercents;
825
  }
826
+ else if(response.subtype == SG_STORAGE_P_CLOUD) {
827
+ tooltipText = 'Uploading to pCloud - '+progressInPercents;
828
+ }
829
+ else if(response.subtype == SG_STORAGE_BOX) {
830
+ tooltipText = 'Uploading to box.com - '+progressInPercents;
831
+ }
832
  else if(response.subtype == SG_STORAGE_BACKUP_GUARD) {
833
  tooltipText = 'Uploading to BackupGuard - '+progressInPercents;
834
  }
847
 
848
  sgBackup.enableUi = function(){
849
  jQuery('#sg-manual-backup').removeAttr('disabled');
850
+ jQuery('#sg-backup-with-migration').removeAttr('disabled');
851
  jQuery('#sg-import').removeAttr('disabled');
852
  jQuery('.sg-restore').removeAttr('disabled');
853
  jQuery('.sg-restore-button').removeAttr('disabled');
public/js/sgcloud.js CHANGED
@@ -1,518 +1,518 @@
1
- jQuery(document).ready( function() {
2
- sgBackup.initCloudSwitchButtons();
3
- sgBackup.initCloudFolderSettings();
4
- });
5
-
6
- jQuery(document).on('change', '.btn-file :file', function() {
7
- var input = jQuery(this),
8
- numFiles = input.get(0).files ? input.get(0).files.length : 1,
9
- label = input.val().replace(/\\/g, '/').replace(/.*\//, '');
10
- input.trigger('fileselect', [numFiles, label]);
11
- });
12
-
13
- sgBackup.initSFTPKeyFileSelection = function() {
14
- isFileSelected = false;
15
- jQuery('.btn-file :file').off('fileselect').on('fileselect', function(event, numFiles, label){
16
- var input = jQuery(this).parents('.input-group').find(':text'),
17
- log = numFiles > 1 ? numFiles + ' files selected' : label;
18
-
19
- if (input.length) {
20
- input.val(log);
21
- isFileSelected = true;
22
- }
23
- else {
24
- if(log) alert(log);
25
- }
26
- });
27
- }
28
-
29
- sgBackup.importKeyFile = function(isFileSelected){
30
-
31
- jQuery('.alert').remove();
32
- if(!isFileSelected){
33
- var alert = sgBackup.alertGenerator(BG_CLOUD_STRINGS.invalidImportFile, 'alert-danger');
34
- jQuery('#sg-modal .modal-header').prepend(alert);
35
- return false;
36
- }
37
-
38
- var sguploadFile = new FormData(),
39
- url = "importKeyFile",
40
- sgAllowedFileSize = jQuery('.sg-backup-upload-input').attr('data-max-file-size'),
41
- sgFile = jQuery('input[name=sg-ssh-key-file]')[0].files[0];
42
- sguploadFile.append('sg-ssh-key-file', sgFile);
43
- if(sgFile.size > sgAllowedFileSize){
44
- var alert = sgBackup.alertGenerator(BG_CLOUD_STRINGS.invalidFileSize, 'alert-danger');
45
- jQuery('#sg-modal .modal-header').prepend(alert);
46
- return false;
47
- }
48
-
49
- var ajaxHandler = new sgRequestHandler(url, sguploadFile, {
50
- contentType: false,
51
- token: BG_BACKUP_STRINGS.nonce,
52
- cache: false,
53
- xhr: function() { /* Custom XMLHttpRequest */
54
- var myXhr = jQuery.ajaxSettings.xhr();
55
- if(myXhr.upload){ /* Check if upload property exists */
56
- myXhr.upload.addEventListener('progress', sgBackup.fileUploadProgress, false); /* For handling the progress of the upload */
57
- }
58
- return myXhr;
59
- },
60
- processData: false
61
- });
62
-
63
- ajaxHandler.callback = function(response, error){
64
- jQuery('.alert').remove();
65
- if(typeof response.success == 'undefined'){
66
- /* if error */
67
- var alert = sgBackup.alertGenerator(response, 'alert-danger');
68
- jQuery('#sg-modal .modal-header').prepend(alert);
69
- }
70
- };
71
- ajaxHandler.run();
72
- }
73
-
74
- sgBackup.initCloudSwitchButtons = function(){
75
- jQuery.fn.bootstrapSwitch.defaults.size = 'small';
76
- jQuery('.sg-switch').bootstrapSwitch();
77
- jQuery('.sg-switch').on('switchChange.bootstrapSwitch', function(event, state) {
78
- var storage = jQuery(this).attr('data-storage'),
79
- url = jQuery(this).attr('data-remote');
80
- var that = jQuery(this);
81
- /* If switch is on */
82
- if(state) {
83
- jQuery('.alert').remove();
84
- if(storage == 'DROPBOX' || storage == 'GOOGLE_DRIVE' || storage == 'ONE_DRIVE') {
85
- var curlRequirementCheck = new sgRequestHandler('curlChecker', {token: BG_BACKUP_STRINGS.nonce});
86
- that.bootstrapSwitch('indeterminate',true);
87
- curlRequirementCheck.callback = function(response){
88
- if(typeof response.success !== 'undefined') {
89
- var isFeatureAvailable = new sgRequestHandler('isFeatureAvailable', {sgFeature: storage});
90
- isFeatureAvailable.callback = function(response) {
91
- if (typeof response.success !== 'undefined') {
92
- jQuery(location).attr('href', getAjaxUrl(url));
93
- }
94
- else {
95
- var alert = sgBackup.alertGenerator(response.error, 'alert-warning');
96
- jQuery('.sg-cloud-container').before(alert);
97
- that.bootstrapSwitch('state', false);
98
- }
99
- }
100
-
101
- isFeatureAvailable.run();
102
- }
103
- else{
104
- var alert = sgBackup.alertGenerator(response.error, 'alert-danger');
105
- jQuery('.sg-cloud-container').before(alert);
106
- that.bootstrapSwitch('state',false);
107
- }
108
- };
109
- curlRequirementCheck.run();
110
- }
111
- else if (storage == 'FTP') {
112
- jQuery('input[data-storage=FTP]').bootstrapSwitch('indeterminate',true);
113
- sgBackup.isFtpConnected = false;
114
- jQuery('#ftp-settings').click();
115
- }
116
- else if (storage == 'AMAZON') {
117
- jQuery('input[data-storage=AMAZON]').bootstrapSwitch('indeterminate',true);
118
- sgBackup.isAmazonConnected = false;
119
- jQuery('#amazon-settings').click();
120
- }
121
- else if (storage == 'BACKUP_GUARD') {
122
- jQuery('input[data-storage=BACKUP_GUARD]').bootstrapSwitch('indeterminate',true);
123
- sgBackup.isBackupGuardConnected = false;
124
- jQuery('#backup-guard-details').click();
125
- }
126
- }
127
- else {
128
- var ajaxHandler = new sgRequestHandler(url, {cancel: true,token: BG_BACKUP_STRINGS.nonce });
129
- ajaxHandler.callback = function(response){
130
- jQuery('.sg-'+storage+'-user').remove();
131
- if (typeof storage == 'string') {
132
- location.reload();
133
- }
134
- };
135
- ajaxHandler.run();
136
- }
137
- });
138
- };
139
-
140
- sgBackup.storeAmazonSettings = function(){
141
- var error = [];
142
- /* Validation */
143
- jQuery('.alert').remove();
144
- var amazonForm = jQuery('form[data-type=storeAmazonSettings]');
145
- amazonForm.find('input').each(function(){
146
- if(jQuery(this).val()<=0){
147
-
148
- if(jQuery(this)[0].id == "customBucketRegion" && jQuery("#bucketType").val() != "custom"){
149
- return;
150
- }
151
- var errorTxt = jQuery(this).closest('div').parent().find('label').html().slice(0,-2);
152
- error.push(errorTxt+' field is required.');
153
- }
154
- });
155
-
156
- /* If any error show it and abort ajax */
157
- if(error.length){
158
- var alert = sgBackup.alertGenerator(error, 'alert-danger');
159
- jQuery('#sg-modal .modal-header').prepend(alert);
160
- return false;
161
- }
162
-
163
- /* Before Ajax call */
164
- jQuery('.modal-footer .btn-primary').attr('disabled','disabled');
165
- jQuery('.modal-footer .btn-primary').html(BG_CLOUD_STRINGS.connectionInProgress);
166
-
167
- /* Get user credentials */
168
- var amazonBucket = jQuery('#amazonBucket').val();
169
- var amazonAccessKey = jQuery('#amazonAccessKey').val();
170
- var amazonSecretAccessKey = jQuery('#amazonSecretAccessKey').val();
171
- var region = jQuery('#amazonBucketRegion').val();
172
-
173
- /* On Success */
174
- var ajaxHandler = new sgRequestHandler('cloudAmazon',amazonForm.serialize());
175
- ajaxHandler.dataIsObject = false;
176
- ajaxHandler.callback = function(response){
177
- jQuery('.alert').remove();
178
- if(typeof response.success !== 'undefined'){
179
- sgBackup.isAmazonConnected = true;
180
- jQuery('input[data-storage=AMAZON]').bootstrapSwitch('state',true);
181
- jQuery('#sg-modal').modal('hide');
182
- }
183
- else{
184
- /* if error */
185
- var alert = sgBackup.alertGenerator(response, 'alert-danger');
186
- jQuery('#sg-modal .modal-header').prepend(alert);
187
-
188
- /* Before Ajax call */
189
- jQuery('.modal-footer .btn-primary').removeAttr('disabled');
190
- jQuery('.modal-footer .btn-primary').html('Save');
191
- }
192
- };
193
- ajaxHandler.run();
194
- };
195
-
196
- sgBackup.storeFtpSettings = function(){
197
- var error = [];
198
- /* Validation */
199
- jQuery('.alert').remove();
200
- var ftpForm = jQuery('form[data-type=storeFtpSettings]');
201
- ftpForm.find('input[type=text]').each(function(){
202
- if(jQuery(this).val()<=0){
203
- if (jQuery(this).attr('name') != 'sg-key-file') {
204
- var errorTxt = jQuery(this).closest('div').parent().find('label').html().slice(0,-2);
205
- }
206
- else {
207
- var errorTxt = jQuery(this).closest('div').parent().parent().find('label').html().slice(0,-2);
208
- }
209
-
210
-
211
- if(!jQuery('#sg-connect-with-key-file').is(':checked') && errorTxt == 'Private key') {
212
- return true;
213
- }
214
-
215
- if(jQuery('#sg-connect-with-key-file').is(':checked') && errorTxt == 'Password') {
216
- return true;
217
- }
218
-
219
- error.push(errorTxt+' field is required.');
220
- }
221
- });
222
-
223
- /* If any error show it and abort ajax */
224
- if(error.length){
225
- var alert = sgBackup.alertGenerator(error, 'alert-danger');
226
- jQuery('#sg-modal .modal-header').prepend(alert);
227
- return false;
228
- }
229
-
230
- /* Before Ajax call */
231
- jQuery('.modal-footer .btn-primary').attr('disabled','disabled');
232
- jQuery('.modal-footer .btn-primary').html('Connecting...');
233
-
234
- /* Get user credentials */
235
- var ftpHost = jQuery('#ftpHost').val();
236
- var ftpUser = jQuery('#ftpUser').val();
237
- var ftpPort = jQuery('#ftpPort').val();
238
- var ftpString = ftpUser+'@'+ftpHost+':'+ftpPort;
239
-
240
- if (jQuery("#sg-connect-with-key-file").is(":checked")) {
241
- sgBackup.importKeyFile(isFileSelected);
242
- }
243
-
244
- /* On Success */
245
- var ajaxHandler = new sgRequestHandler('cloudFtp',ftpForm.serialize());
246
- ajaxHandler.dataIsObject = false;
247
- ajaxHandler.callback = function(response){
248
- jQuery('.alert').remove();
249
- if(typeof response.success !== 'undefined'){
250
- sgBackup.isFtpConnected = true;
251
- jQuery('input[data-storage=FTP]').bootstrapSwitch('state',true);
252
- jQuery('#sg-modal').modal('hide');
253
- sgBackup.addUserInfo(ftpString);
254
- }
255
- else{
256
- /* if error */
257
- var alert = sgBackup.alertGenerator(response, 'alert-danger');
258
- jQuery('#sg-modal .modal-header').prepend(alert);
259
-
260
- /* Before Ajax call */
261
- jQuery('.modal-footer .btn-primary').removeAttr('disabled');
262
- jQuery('.modal-footer .btn-primary').html('Save');
263
- }
264
- };
265
- ajaxHandler.run();
266
- };
267
- sgBackup.initCloudFolderSettings = function(){
268
- jQuery('#cloudFolder').on('input', function(){
269
- jQuery('#sg-save-cloud-folder').fadeIn();
270
- });
271
- jQuery('#sg-save-cloud-folder').click(function(){
272
- jQuery('.alert').remove();
273
- var cloudFolderName = jQuery('#cloudFolder').val(),
274
- cloundFolderRequest = new sgRequestHandler('saveCloudFolder',{cloudFolder: cloudFolderName, token: BG_BACKUP_STRINGS.nonce}),
275
- saveBtn = jQuery(this);
276
- var alert = sgBackup.alertGenerator(BG_CLOUD_STRINGS.invalidDestinationFolder,'alert-danger');
277
- if(cloudFolderName.length<=0)
278
- {
279
- jQuery('.sg-cloud-container').before(alert);
280
- return;
281
- }
282
- saveBtn.attr('disabled','disabled');
283
- saveBtn.html('Saving...');
284
- cloundFolderRequest.callback = function(response){
285
- if(typeof response.success !== 'undefined'){
286
- var successAlert = sgBackup.alertGenerator(BG_CLOUD_STRINGS.successMessage,'alert-success');
287
- jQuery('.sg-cloud-container').before(successAlert);
288
- saveBtn.fadeOut();
289
- }
290
- else{
291
- jQuery('.sg-cloud-container').before(alert);
292
- }
293
- saveBtn.removeAttr('disabled');
294
- saveBtn.html('Save');
295
- };
296
-
297
- var isFeatureAvailable = new sgRequestHandler('isFeatureAvailable', {sgFeature: 'SUBDIRECTORIES'});
298
- isFeatureAvailable.callback = function(response) {
299
- if (typeof response.success !== 'undefined') {
300
- cloundFolderRequest.run();
301
- }
302
- else {
303
- var alert = sgBackup.alertGenerator(response.error, 'alert-warning');
304
- jQuery('.sg-cloud-container').before(alert);
305
- saveBtn.fadeOut();
306
- }
307
- };
308
-
309
- isFeatureAvailable.run();
310
- });
311
- };
312
-
313
- sgBackup.addUserInfo = function(info){
314
- jQuery('.sg-user-info .sg-helper-block').remove();
315
- jQuery('.sg-user-info br').remove();
316
- jQuery('.sg-user-info').append('<br/><span class="text-muted sg-user-email sg-helper-block">'+info+'</span>');
317
- };
318
-
319
- sgBackup.backupCloudConnectCallback;
320
-
321
- sgBackup.validateForm = function () {
322
- var validateObj = {
323
- rules: {
324
- email: {
325
- required: true,
326
- email: true
327
- },
328
- password: {
329
- required: true,
330
- },
331
- firstname: {
332
- required: true,
333
- },
334
- lastname: {
335
- required: true,
336
- },
337
- }
338
- };
339
- validateObj.submitHandler = function () {
340
- var callBack = sgBackup.backupCloudConnectCallback;
341
- callBack();
342
- };
343
- var form = jQuery('#backupGuardDetailsModal');
344
- form.validate(validateObj);
345
- form.submit();
346
- };
347
-
348
- sgBackup.bgCloudLoginForm = function (mode) {
349
- var selectors = ['#bg-password-container', '#bg-login'];
350
- for (var i in selectors) {
351
- var selector = selectors[i];
352
- if (mode == 'show') {
353
- jQuery(selector).removeClass('hidden');
354
- }
355
- else {
356
- jQuery(selector).addClass('hidden');
357
- }
358
- }
359
-
360
- jQuery('#bg-connect-account').addClass('hidden');
361
- };
362
-
363
- sgBackup.bgCloudRegisterForm = function (mode) {
364
- var selectors = ['#bg-firstname-container', '#bg-lastname-container', '#bg-create-account'];
365
- for (var i in selectors) {
366
- var selector = selectors[i];
367
- if (mode == 'show') {
368
- jQuery(selector).removeClass('hidden');
369
- }
370
- else {
371
- jQuery(selector).addClass('hidden');
372
- }
373
- }
374
-
375
- jQuery('#bg-connect-account').addClass('hidden');
376
- };
377
-
378
- sgBackup.backupGuardConnectRequest = function () {
379
- sgBackup.showAjaxSpinner('.sg-modal-body');
380
- var email = jQuery("#email").val();
381
- var isUserExistsHandler = new sgRequestHandler('isBgUserExists', {email: email, token: BG_BACKUP_STRINGS.nonce});
382
- isUserExistsHandler.callback = function(response) {
383
- sgBackup.hideAjaxSpinner();
384
-
385
- sgBackup.hideConnectionMessages();
386
-
387
- if (response.validationError == 'error') {
388
- jQuery('.bg-invalid-login').removeClass('hide');
389
- return true;
390
- }
391
- else {
392
- jQuery('.sg-backup-input-email').prop('readonly', true);
393
- }
394
- if (typeof response.success != 'undefined') {
395
- jQuery('.bg-loggin-form-message').removeClass('hide');
396
- sgBackup.bgCloudLoginForm('show');
397
- }
398
- else if (response.user == 'notFound') {
399
- jQuery('.bg-register-form-message').removeClass('hide');
400
- sgBackup.bgCloudRegisterForm('show')
401
- }
402
- };
403
- isUserExistsHandler.run();
404
- };
405
-
406
- sgBackup.backupGuardConnect = function() {
407
-
408
- sgBackup.backupCloudConnectCallback = sgBackup.backupGuardConnectRequest;
409
- sgBackup.validateForm();
410
- };
411
-
412
- sgBackup.hideConnectionMessages = function ()
413
- {
414
- jQuery('.sgbg-connection-message').addClass('hide');
415
- };
416
-
417
- sgBackup.backupGuardLoginRequest = function ()
418
- {
419
- sgBackup.showAjaxSpinner('.sg-modal-body');
420
- sgBackup.backupCloudConnectCallback = this;
421
-
422
- var email = jQuery("#email").val();
423
- var password = jQuery("#password").val();
424
-
425
- var loginHandler = new sgRequestHandler('bgLogin', {email: email, password: password, token: BG_BACKUP_STRINGS.nonce});
426
- loginHandler.callback = function(response) {
427
- sgBackup.hideAjaxSpinner();
428
- if (typeof response.profiles != 'undefined') {
429
- jQuery('#bg-email-container').hide();
430
- jQuery('#bg-password-container').hide();
431
- jQuery('#bg-close-button').hide();
432
- jQuery('#bg-login').hide();
433
- sgBackup.hideConnectionMessages();
434
- jQuery('.bg-create-form-message').removeClass('hide');
435
-
436
- jQuery('#bg-choose-profile').removeClass('hidden');
437
- jQuery('#bg-profiles-container').removeClass('hidden');
438
-
439
- if (response.profiles.length) {
440
- jQuery('.bg-select-profile').removeClass('hidden');
441
- }
442
- jQuery.each(response.profiles, function(key, value) {
443
- jQuery('#bg-profiles').append('<option value="'+value['id']+'">'+value['name']+'</option>');
444
- });
445
-
446
- jQuery('#bg-profiles').on("change", function () {
447
- var profileId = jQuery(this).val();
448
- if (profileId === "0") {
449
- jQuery('#bg-profile-name-container').show();
450
- }
451
- else {
452
- jQuery('#bg-profile-name-container').hide();
453
- }
454
- });
455
- }
456
- else {
457
- jQuery('.bg-invalid-login').removeClass('hide');
458
- }
459
- };
460
- loginHandler.run();
461
- };
462
-
463
- sgBackup.backupGuardLogin = function() {
464
- sgBackup.backupCloudConnectCallback = sgBackup.backupGuardLoginRequest;
465
- sgBackup.validateForm();
466
- };
467
-
468
- sgBackup.chooseProfileRequest = function () {
469
- sgBackup.showAjaxSpinner('.sg-modal-body');
470
- var profileId = jQuery("#bg-profiles").val();
471
- // var profileName = "";
472
-
473
- if (profileId === "0") {
474
- var profileName = jQuery("#bg-profile-name").val();
475
- }
476
- else {
477
- var profileName = jQuery("#bg-profiles option:selected").text();
478
- }
479
-
480
- var chooseProfile = new sgRequestHandler('chooseProfile', {profileId: profileId, profileName: profileName, token: BG_BACKUP_STRINGS.nonce});
481
- chooseProfile.callback = function(response) {
482
- sgBackup.hideAjaxSpinner();
483
- if (typeof response.success != 'undefined') {
484
- location.reload();
485
- }
486
- };
487
- chooseProfile.run();
488
- };
489
-
490
- sgBackup.chooseProfile = function() {
491
- sgBackup.backupCloudConnectCallback = sgBackup.chooseProfileRequest;
492
- sgBackup.validateForm();
493
- };
494
-
495
- sgBackup.createCloudUserRequest = function () {
496
- sgBackup.showAjaxSpinner('.sg-modal-body');
497
- var lastname = jQuery("#lastname").val();
498
- var email = jQuery("#email").val();
499
- var firstname = jQuery("#firstname").val();
500
-
501
- var createCloudUserHandler = new sgRequestHandler('createCloudUser', {email: email, lastname: lastname, firstname: firstname, token: BG_BACKUP_STRINGS.nonce});
502
- createCloudUserHandler.callback = function(response) {
503
- sgBackup.hideAjaxSpinner();
504
- if (typeof response.success != 'undefined') {
505
- sgBackup.bgCloudLoginForm('show');
506
- sgBackup.bgCloudRegisterForm();
507
- sgBackup.hideConnectionMessages();
508
-
509
- jQuery('.bg-email-confirmation').removeClass('hide');
510
- }
511
- };
512
- createCloudUserHandler.run();
513
- };
514
-
515
- sgBackup.createCloudUser = function() {
516
- sgBackup.backupCloudConnectCallback = sgBackup.createCloudUserRequest;
517
- sgBackup.validateForm();
518
- };
1
+ jQuery(document).ready( function() {
2
+ sgBackup.initCloudSwitchButtons();
3
+ sgBackup.initCloudFolderSettings();
4
+ });
5
+
6
+ jQuery(document).on('change', '.btn-file :file', function() {
7
+ var input = jQuery(this),
8
+ numFiles = input.get(0).files ? input.get(0).files.length : 1,
9
+ label = input.val().replace(/\\/g, '/').replace(/.*\//, '');
10
+ input.trigger('fileselect', [numFiles, label]);
11
+ });
12
+
13
+ sgBackup.initSFTPKeyFileSelection = function() {
14
+ isFileSelected = false;
15
+ jQuery('.btn-file :file').off('fileselect').on('fileselect', function(event, numFiles, label){
16
+ var input = jQuery(this).parents('.input-group').find(':text'),
17
+ log = numFiles > 1 ? numFiles + ' files selected' : label;
18
+
19
+ if (input.length) {
20
+ input.val(log);
21
+ isFileSelected = true;
22
+ }
23
+ else {
24
+ if(log) alert(log);
25
+ }
26
+ });
27
+ }
28
+
29
+ sgBackup.importKeyFile = function(isFileSelected){
30
+
31
+ jQuery('.alert').remove();
32
+ if(!isFileSelected){
33
+ var alert = sgBackup.alertGenerator(BG_CLOUD_STRINGS.invalidImportFile, 'alert-danger');
34
+ jQuery('#sg-modal .modal-header').prepend(alert);
35
+ return false;
36
+ }
37
+
38
+ var sguploadFile = new FormData(),
39
+ url = "importKeyFile",
40
+ sgAllowedFileSize = jQuery('.sg-backup-upload-input').attr('data-max-file-size'),
41
+ sgFile = jQuery('input[name=sg-ssh-key-file]')[0].files[0];
42
+ sguploadFile.append('sg-ssh-key-file', sgFile);
43
+ if(sgFile.size > sgAllowedFileSize){
44
+ var alert = sgBackup.alertGenerator(BG_CLOUD_STRINGS.invalidFileSize, 'alert-danger');
45
+ jQuery('#sg-modal .modal-header').prepend(alert);
46
+ return false;
47
+ }
48
+
49
+ var ajaxHandler = new sgRequestHandler(url, sguploadFile, {
50
+ contentType: false,
51
+ token: BG_BACKUP_STRINGS.nonce,
52
+ cache: false,
53
+ xhr: function() { /* Custom XMLHttpRequest */
54
+ var myXhr = jQuery.ajaxSettings.xhr();
55
+ if(myXhr.upload){ /* Check if upload property exists */
56
+ myXhr.upload.addEventListener('progress', sgBackup.fileUploadProgress, false); /* For handling the progress of the upload */
57
+ }
58
+ return myXhr;
59
+ },
60
+ processData: false
61
+ });
62
+
63
+ ajaxHandler.callback = function(response, error){
64
+ jQuery('.alert').remove();
65
+ if(typeof response.success == 'undefined'){
66
+ /* if error */
67
+ var alert = sgBackup.alertGenerator(response, 'alert-danger');
68
+ jQuery('#sg-modal .modal-header').prepend(alert);
69
+ }
70
+ };
71
+ ajaxHandler.run();
72
+ }
73
+
74
+ sgBackup.initCloudSwitchButtons = function(){
75
+ jQuery.fn.bootstrapSwitch.defaults.size = 'small';
76
+ jQuery('.sg-switch').bootstrapSwitch();
77
+ jQuery('.sg-switch').on('switchChange.bootstrapSwitch', function(event, state) {
78
+ var storage = jQuery(this).attr('data-storage'),
79
+ url = jQuery(this).attr('data-remote');
80
+ var that = jQuery(this);
81
+ /* If switch is on */
82
+ if(state) {
83
+ jQuery('.alert').remove();
84
+ if(storage == 'DROPBOX' || storage == 'GOOGLE_DRIVE' || storage == 'ONE_DRIVE' || storage == 'P_CLOUD' || storage == 'BOX') {
85
+ var curlRequirementCheck = new sgRequestHandler('curlChecker', {token: BG_BACKUP_STRINGS.nonce});
86
+ that.bootstrapSwitch('indeterminate',true);
87
+ curlRequirementCheck.callback = function(response){
88
+ if(typeof response.success !== 'undefined') {
89
+ var isFeatureAvailable = new sgRequestHandler('isFeatureAvailable', {sgFeature: storage});
90
+ isFeatureAvailable.callback = function(response) {
91
+ if (typeof response.success !== 'undefined') {
92
+ jQuery(location).attr('href', getAjaxUrl(url));
93
+ }
94
+ else {
95
+ var alert = sgBackup.alertGenerator(response.error, 'alert-warning');
96
+ jQuery('.sg-cloud-container').before(alert);
97
+ that.bootstrapSwitch('state', false);
98
+ }
99
+ }
100
+
101
+ isFeatureAvailable.run();
102
+ }
103
+ else{
104
+ var alert = sgBackup.alertGenerator(response.error, 'alert-danger');
105
+ jQuery('.sg-cloud-container').before(alert);
106
+ that.bootstrapSwitch('state',false);
107
+ }
108
+ };
109
+ curlRequirementCheck.run();
110
+ }
111
+ else if (storage == 'FTP') {
112
+ jQuery('input[data-storage=FTP]').bootstrapSwitch('indeterminate',true);
113
+ sgBackup.isFtpConnected = false;
114
+ jQuery('#ftp-settings').click();
115
+ }
116
+ else if (storage == 'AMAZON') {
117
+ jQuery('input[data-storage=AMAZON]').bootstrapSwitch('indeterminate',true);
118
+ sgBackup.isAmazonConnected = false;
119
+ jQuery('#amazon-settings').click();
120
+ }
121
+ else if (storage == 'BACKUP_GUARD') {
122
+ jQuery('input[data-storage=BACKUP_GUARD]').bootstrapSwitch('indeterminate',true);
123
+ sgBackup.isBackupGuardConnected = false;
124
+ jQuery('#backup-guard-details').click();
125
+ }
126
+ }
127
+ else {
128
+ var ajaxHandler = new sgRequestHandler(url, {cancel: true,token: BG_BACKUP_STRINGS.nonce });
129
+ ajaxHandler.callback = function(response){
130
+ jQuery('.sg-'+storage+'-user').remove();
131
+ if (typeof storage == 'string') {
132
+ location.reload();
133
+ }
134
+ };
135
+ ajaxHandler.run();
136
+ }
137
+ });
138
+ };
139
+
140
+ sgBackup.storeAmazonSettings = function(){
141
+ var error = [];
142
+ /* Validation */
143
+ jQuery('.alert').remove();
144
+ var amazonForm = jQuery('form[data-type=storeAmazonSettings]');
145
+ amazonForm.find('input').each(function(){
146
+ if(jQuery(this).val()<=0){
147
+
148
+ if(jQuery(this)[0].id == "customBucketRegion" && jQuery("#bucketType").val() != "custom"){
149
+ return;
150
+ }
151
+ var errorTxt = jQuery(this).closest('div').parent().find('label').html().slice(0,-2);
152
+ error.push(errorTxt+' field is required.');
153
+ }
154
+ });
155
+
156
+ /* If any error show it and abort ajax */
157
+ if(error.length){
158
+ var alert = sgBackup.alertGenerator(error, 'alert-danger');
159
+ jQuery('#sg-modal .modal-header').prepend(alert);
160
+ return false;
161
+ }
162
+
163
+ /* Before Ajax call */
164
+ jQuery('.modal-footer .btn-primary').attr('disabled','disabled');
165
+ jQuery('.modal-footer .btn-primary').html(BG_CLOUD_STRINGS.connectionInProgress);
166
+
167
+ /* Get user credentials */
168
+ var amazonBucket = jQuery('#amazonBucket').val();
169
+ var amazonAccessKey = jQuery('#amazonAccessKey').val();
170
+ var amazonSecretAccessKey = jQuery('#amazonSecretAccessKey').val();
171
+ var region = jQuery('#amazonBucketRegion').val();
172
+
173
+ /* On Success */
174
+ var ajaxHandler = new sgRequestHandler('cloudAmazon',amazonForm.serialize());
175
+ ajaxHandler.dataIsObject = false;
176
+ ajaxHandler.callback = function(response){
177
+ jQuery('.alert').remove();
178
+ if(typeof response.success !== 'undefined'){
179
+ sgBackup.isAmazonConnected = true;
180
+ jQuery('input[data-storage=AMAZON]').bootstrapSwitch('state',true);
181
+ jQuery('#sg-modal').modal('hide');
182
+ }
183
+ else{
184
+ /* if error */
185
+ var alert = sgBackup.alertGenerator(response, 'alert-danger');
186
+ jQuery('#sg-modal .modal-header').prepend(alert);
187
+
188
+ /* Before Ajax call */
189
+ jQuery('.modal-footer .btn-primary').removeAttr('disabled');
190
+ jQuery('.modal-footer .btn-primary').html('Save');
191
+ }
192
+ };
193
+ ajaxHandler.run();
194
+ };
195
+
196
+ sgBackup.storeFtpSettings = function(){
197
+ var error = [];
198
+ /* Validation */
199
+ jQuery('.alert').remove();
200
+ var ftpForm = jQuery('form[data-type=storeFtpSettings]');
201
+ ftpForm.find('input[type=text]').each(function(){
202
+ if(jQuery(this).val()<=0){
203
+ if (jQuery(this).attr('name') != 'sg-key-file') {
204
+ var errorTxt = jQuery(this).closest('div').parent().find('label').html().slice(0,-2);
205
+ }
206
+ else {
207
+ var errorTxt = jQuery(this).closest('div').parent().parent().find('label').html().slice(0,-2);
208
+ }
209
+
210
+
211
+ if(!jQuery('#sg-connect-with-key-file').is(':checked') && jQuery(this).attr('name') == 'sg-key-file') {
212
+ return true;
213
+ }
214
+
215
+ if(jQuery('#sg-connect-with-key-file').is(':checked') && jQuery(this).attr('name') == 'ftpPass') {
216
+ return true;
217
+ }
218
+
219
+ error.push(errorTxt+' field is required.');
220
+ }
221
+ });
222
+
223
+ /* If any error show it and abort ajax */
224
+ if(error.length){
225
+ var alert = sgBackup.alertGenerator(error, 'alert-danger');
226
+ jQuery('#sg-modal .modal-header').prepend(alert);
227
+ return false;
228
+ }
229
+
230
+ /* Before Ajax call */
231
+ jQuery('.modal-footer .btn-primary').attr('disabled','disabled');
232
+ jQuery('.modal-footer .btn-primary').html('Connecting...');
233
+
234
+ /* Get user credentials */
235
+ var ftpHost = jQuery('#ftpHost').val();
236
+ var ftpUser = jQuery('#ftpUser').val();
237
+ var ftpPort = jQuery('#ftpPort').val();
238
+ var ftpString = ftpUser+'@'+ftpHost+':'+ftpPort;
239
+
240
+ if (jQuery("#sg-connect-with-key-file").is(":checked")) {
241
+ sgBackup.importKeyFile(isFileSelected);
242
+ }
243
+
244
+ /* On Success */
245
+ var ajaxHandler = new sgRequestHandler('cloudFtp',ftpForm.serialize());
246
+ ajaxHandler.dataIsObject = false;
247
+ ajaxHandler.callback = function(response){
248
+ jQuery('.alert').remove();
249
+ if(typeof response.success !== 'undefined'){
250
+ sgBackup.isFtpConnected = true;
251
+ jQuery('input[data-storage=FTP]').bootstrapSwitch('state',true);
252
+ jQuery('#sg-modal').modal('hide');
253
+ sgBackup.addUserInfo(ftpString);
254
+ }
255
+ else{
256
+ /* if error */
257
+ var alert = sgBackup.alertGenerator(response, 'alert-danger');
258
+ jQuery('#sg-modal .modal-header').prepend(alert);
259
+
260
+ /* Before Ajax call */
261
+ jQuery('.modal-footer .btn-primary').removeAttr('disabled');
262
+ jQuery('.modal-footer .btn-primary').html('Save');
263
+ }
264
+ };
265
+ ajaxHandler.run();
266
+ };
267
+ sgBackup.initCloudFolderSettings = function(){
268
+ jQuery('#cloudFolder').on('input', function(){
269
+ jQuery('#sg-save-cloud-folder').fadeIn();
270
+ });
271
+ jQuery('#sg-save-cloud-folder').click(function(){
272
+ jQuery('.alert').remove();
273
+ var cloudFolderName = jQuery('#cloudFolder').val(),
274
+ cloundFolderRequest = new sgRequestHandler('saveCloudFolder',{cloudFolder: cloudFolderName, token: BG_BACKUP_STRINGS.nonce}),
275
+ saveBtn = jQuery(this);
276
+ var alert = sgBackup.alertGenerator(BG_CLOUD_STRINGS.invalidDestinationFolder,'alert-danger');
277
+ if(cloudFolderName.length<=0)
278
+ {
279
+ jQuery('.sg-cloud-container').before(alert);
280
+ return;
281
+ }
282
+ saveBtn.attr('disabled','disabled');
283
+ saveBtn.html('Saving...');
284
+ cloundFolderRequest.callback = function(response){
285
+ if(typeof response.success !== 'undefined'){
286
+ var successAlert = sgBackup.alertGenerator(BG_CLOUD_STRINGS.successMessage,'alert-success');
287
+ jQuery('.sg-cloud-container').before(successAlert);
288
+ saveBtn.fadeOut();
289
+ }
290
+ else{
291
+ jQuery('.sg-cloud-container').before(alert);
292
+ }
293
+ saveBtn.removeAttr('disabled');
294
+ saveBtn.html('Save');
295
+ };
296
+
297
+ var isFeatureAvailable = new sgRequestHandler('isFeatureAvailable', {sgFeature: 'SUBDIRECTORIES'});
298
+ isFeatureAvailable.callback = function(response) {
299
+ if (typeof response.success !== 'undefined') {
300
+ cloundFolderRequest.run();
301
+ }
302
+ else {
303
+ var alert = sgBackup.alertGenerator(response.error, 'alert-warning');
304
+ jQuery('.sg-cloud-container').before(alert);
305
+ saveBtn.fadeOut();
306
+ }
307
+ };
308
+
309
+ isFeatureAvailable.run();
310
+ });
311
+ };
312
+
313
+ sgBackup.addUserInfo = function(info){
314
+ jQuery('.sg-user-info .sg-helper-block').remove();
315
+ jQuery('.sg-user-info br').remove();
316
+ jQuery('.sg-user-info').append('<br/><span class="text-muted sg-user-email sg-helper-block">'+info+'</span>');
317
+ };
318
+
319
+ sgBackup.backupCloudConnectCallback;
320
+
321
+ sgBackup.validateForm = function () {
322
+ var validateObj = {
323
+ rules: {
324
+ email: {
325
+ required: true,
326
+ email: true
327
+ },
328
+ password: {
329
+ required: true,
330
+ },
331
+ firstname: {
332
+ required: true,
333
+ },
334
+ lastname: {
335
+ required: true,
336
+ },
337
+ }
338
+ };
339
+ validateObj.submitHandler = function () {
340
+ var callBack = sgBackup.backupCloudConnectCallback;
341
+ callBack();
342
+ };
343
+ var form = jQuery('#backupGuardDetailsModal');
344
+ form.validate(validateObj);
345
+ form.submit();
346
+ };
347
+
348
+ sgBackup.bgCloudLoginForm = function (mode) {
349
+ var selectors = ['#bg-password-container', '#bg-login'];
350
+ for (var i in selectors) {
351
+ var selector = selectors[i];
352
+ if (mode == 'show') {
353
+ jQuery(selector).removeClass('hidden');
354
+ }
355
+ else {
356
+ jQuery(selector).addClass('hidden');
357
+ }
358
+ }
359
+
360
+ jQuery('#bg-connect-account').addClass('hidden');
361
+ };
362
+
363
+ sgBackup.bgCloudRegisterForm = function (mode) {
364
+ var selectors = ['#bg-firstname-container', '#bg-lastname-container', '#bg-create-account'];
365
+ for (var i in selectors) {
366
+ var selector = selectors[i];
367
+ if (mode == 'show') {
368
+ jQuery(selector).removeClass('hidden');
369
+ }
370
+ else {
371
+ jQuery(selector).addClass('hidden');
372
+ }
373
+ }
374
+
375
+ jQuery('#bg-connect-account').addClass('hidden');
376
+ };
377
+
378
+ sgBackup.backupGuardConnectRequest = function () {
379
+ sgBackup.showAjaxSpinner('.sg-modal-body');
380
+ var email = jQuery("#email").val();
381
+ var isUserExistsHandler = new sgRequestHandler('isBgUserExists', {email: email, token: BG_BACKUP_STRINGS.nonce});
382
+ isUserExistsHandler.callback = function(response) {
383
+ sgBackup.hideAjaxSpinner();
384
+
385
+ sgBackup.hideConnectionMessages();
386
+
387
+ if (response.validationError == 'error') {
388
+ jQuery('.bg-invalid-login').removeClass('hide');
389
+ return true;
390
+ }
391
+ else {
392
+ jQuery('.sg-backup-input-email').prop('readonly', true);
393
+ }
394
+ if (typeof response.success != 'undefined') {
395
+ jQuery('.bg-loggin-form-message').removeClass('hide');
396
+ sgBackup.bgCloudLoginForm('show');
397
+ }
398
+ else if (response.user == 'notFound') {
399
+ jQuery('.bg-register-form-message').removeClass('hide');
400
+ sgBackup.bgCloudRegisterForm('show')
401
+ }
402
+ };
403
+ isUserExistsHandler.run();
404
+ };
405
+
406
+ sgBackup.backupGuardConnect = function() {
407
+
408
+ sgBackup.backupCloudConnectCallback = sgBackup.backupGuardConnectRequest;
409
+ sgBackup.validateForm();
410
+ };
411
+
412
+ sgBackup.hideConnectionMessages = function ()
413
+ {
414
+ jQuery('.sgbg-connection-message').addClass('hide');
415
+ };
416
+
417
+ sgBackup.backupGuardLoginRequest = function ()
418
+ {
419
+ sgBackup.showAjaxSpinner('.sg-modal-body');
420
+ sgBackup.backupCloudConnectCallback = this;
421
+
422
+ var email = jQuery("#email").val();
423
+ var password = jQuery("#password").val();
424
+
425
+ var loginHandler = new sgRequestHandler('bgLogin', {email: email, password: password, token: BG_BACKUP_STRINGS.nonce});
426
+ loginHandler.callback = function(response) {
427
+ sgBackup.hideAjaxSpinner();
428
+ if (typeof response.profiles != 'undefined') {
429
+ jQuery('#bg-email-container').hide();
430
+ jQuery('#bg-password-container').hide();
431
+ jQuery('#bg-close-button').hide();
432
+ jQuery('#bg-login').hide();
433
+ sgBackup.hideConnectionMessages();
434
+ jQuery('.bg-create-form-message').removeClass('hide');
435
+
436
+ jQuery('#bg-choose-profile').removeClass('hidden');
437
+ jQuery('#bg-profiles-container').removeClass('hidden');
438
+
439
+ if (response.profiles.length) {
440
+ jQuery('.bg-select-profile').removeClass('hidden');
441
+ }
442
+ jQuery.each(response.profiles, function(key, value) {
443
+ jQuery('#bg-profiles').append('<option value="'+value['id']+'">'+value['name']+'</option>');
444
+ });
445
+
446
+ jQuery('#bg-profiles').on("change", function () {
447
+ var profileId = jQuery(this).val();
448
+ if (profileId === "0") {
449
+ jQuery('#bg-profile-name-container').show();
450
+ }
451
+ else {
452
+ jQuery('#bg-profile-name-container').hide();
453
+ }
454
+ });
455
+ }
456
+ else {
457
+ jQuery('.bg-invalid-login').removeClass('hide');
458
+ }
459
+ };
460
+ loginHandler.run();
461
+ };
462
+
463
+ sgBackup.backupGuardLogin = function() {
464
+ sgBackup.backupCloudConnectCallback = sgBackup.backupGuardLoginRequest;
465
+ sgBackup.validateForm();
466
+ };
467
+
468
+ sgBackup.chooseProfileRequest = function () {
469
+ sgBackup.showAjaxSpinner('.sg-modal-body');
470
+ var profileId = jQuery("#bg-profiles").val();
471
+ // var profileName = "";
472
+
473
+ if (profileId === "0") {
474
+ var profileName = jQuery("#bg-profile-name").val();
475
+ }
476
+ else {
477
+ var profileName = jQuery("#bg-profiles option:selected").text();
478
+ }
479
+
480
+ var chooseProfile = new sgRequestHandler('chooseProfile', {profileId: profileId, profileName: profileName, token: BG_BACKUP_STRINGS.nonce});
481
+ chooseProfile.callback = function(response) {
482
+ sgBackup.hideAjaxSpinner();
483
+ if (typeof response.success != 'undefined') {
484
+ location.reload();
485
+ }
486
+ };
487
+ chooseProfile.run();
488
+ };
489
+
490
+ sgBackup.chooseProfile = function() {
491
+ sgBackup.backupCloudConnectCallback = sgBackup.chooseProfileRequest;
492
+ sgBackup.validateForm();
493
+ };
494
+
495
+ sgBackup.createCloudUserRequest = function () {
496
+ sgBackup.showAjaxSpinner('.sg-modal-body');
497
+ var lastname = jQuery("#lastname").val();
498
+ var email = jQuery("#email").val();
499
+ var firstname = jQuery("#firstname").val();
500
+
501
+ var createCloudUserHandler = new sgRequestHandler('createCloudUser', {email: email, lastname: lastname, firstname: firstname, token: BG_BACKUP_STRINGS.nonce});
502
+ createCloudUserHandler.callback = function(response) {
503
+ sgBackup.hideAjaxSpinner();
504
+ if (typeof response.success != 'undefined') {
505
+ sgBackup.bgCloudLoginForm('show');
506
+ sgBackup.bgCloudRegisterForm();
507
+ sgBackup.hideConnectionMessages();
508
+
509
+ jQuery('.bg-email-confirmation').removeClass('hide');
510
+ }
511
+ };
512
+ createCloudUserHandler.run();
513
+ };
514
+
515
+ sgBackup.createCloudUser = function() {
516
+ sgBackup.backupCloudConnectCallback = sgBackup.createCloudUserRequest;
517
+ sgBackup.validateForm();
518
+ };
public/js/sgschedule.js CHANGED
@@ -1,214 +1,216 @@
1
- BG_SCHEDULE_INTERVAL_HOURLY = 0;
2
- BG_SCHEDULE_INTERVAL_DAILY = 1;
3
- BG_SCHEDULE_INTERVAL_WEEKLY = 2;
4
- BG_SCHEDULE_INTERVAL_MONTHLY = 3;
5
- BG_SCHEDULE_INTERVAL_YEARLY = 4;
6
-
7
- jQuery(document).ready( function() {
8
- sgBackup.initTablePagination('sg-schedule');
9
- sgBackup.initScheduleCreation();
10
- });
11
-
12
- sgBackup.initScheduleCreation = function() {
13
- sgBackup.initScheduleSwitchButtons();
14
- sgBackup.initManulBackupRadioInputs();
15
- sgBackup.initManualBackupTooltips();
16
- sgBackup.toggleDaySelection();
17
- sgBackup.initIntervalSelection();
18
- }
19
-
20
- sgBackup.removeSchedule = function (id){
21
- var ajaxHandler = new sgRequestHandler('schedule', {remove: true, id: id});
22
-
23
- if (!confirm(BG_SCHEDULE_STRINGS.confirm)) {
24
- return false;
25
- }
26
-
27
- ajaxHandler.callback = function(response){
28
- jQuery('.alert').remove();
29
-
30
- if(typeof response.success !== 'undefined'){
31
- location.reload();
32
- }
33
- else{
34
- //if error
35
- var alert = sgBackup.alertGenerator(BG_SCHEDULE_STRINGS.deletionError, 'alert-danger');
36
- jQuery('.sg-schedule-container legend').after(alert);
37
- }
38
-
39
- sgBackup.scrollToElement('.alert');
40
- };
41
- ajaxHandler.run();
42
- }
43
-
44
- sgBackup.initIntervalSelection = function() {
45
- if (jQuery('#sg-schedule-interval').val() == BG_SCHEDULE_INTERVAL_WEEKLY) {
46
- jQuery('#sg-schedule-day-of-week-select').show();
47
- }
48
- else if(jQuery('#sg-schedule-interval').val() == BG_SCHEDULE_INTERVAL_MONTHLY) {
49
- jQuery('#sg-schedule-day-of-month-select').show();
50
- }
51
- else if(jQuery('#sg-schedule-interval').val() == BG_SCHEDULE_INTERVAL_HOURLY) {
52
- jQuery('#sg-schedule-timezone').hide();
53
- }
54
-
55
- jQuery('#sg-schedule-interval').on('change', function(){
56
- jQuery('#sg-schedule-timezone').show();
57
- if (jQuery(this).val() == BG_SCHEDULE_INTERVAL_WEEKLY) {
58
- jQuery('#sg-schedule-day-of-month-select').hide();
59
- jQuery('#sg-schedule-day-of-week-select').show();
60
- }
61
- else if (jQuery(this).val() == BG_SCHEDULE_INTERVAL_MONTHLY) {
62
- jQuery('#sg-schedule-day-of-week-select').hide();
63
- jQuery('#sg-schedule-day-of-month-select').show();
64
- }
65
- else if(jQuery('#sg-schedule-interval').val() == BG_SCHEDULE_INTERVAL_HOURLY) {
66
- jQuery('#sg-schedule-timezone').hide();
67
- }
68
- else {
69
- sgBackup.toggleDaySelection();
70
- }
71
- });
72
- }
73
-
74
- sgBackup.toggleDaySelection = function(){
75
- jQuery('#sg-schedule-day-of-week-select').hide();
76
- jQuery('#sg-schedule-day-of-month-select').hide();
77
- }
78
-
79
- sgBackup.prependErrorMsg = function(alert) {
80
- if (typeof jQuery('#sg-schedule-id').val() === 'undefined') {
81
- jQuery('.sg-schedule-container legend').after(alert);
82
- }
83
- else {
84
- jQuery('#sg-modal .modal-header').prepend(alert);
85
- }
86
- }
87
-
88
- //SGSchedule AJAX callback
89
- sgBackup.schedule = function(){
90
- var error = [];
91
- var scheduleForm = jQuery('form[data-type=schedule]');
92
-
93
- //Validation
94
- jQuery('.alert').remove();
95
- if(jQuery('input[type=radio][name=backupType]:checked').val() == 2) {
96
- if (jQuery('.sg-custom-option:checked').length <= 0) {
97
- error.push(BG_SCHEDULE_STRINGS.invalidBackupOption);
98
- }
99
- //Check if any file is selected
100
- if (jQuery('input[type=checkbox][name=backupFiles]:checked').length > 0) {
101
- if (jQuery('.sg-custom-backup-files input:checkbox:checked').length <= 0) {
102
- error.push(BG_SCHEDULE_STRINGS.invalidDirectorySelected);
103
- }
104
- }
105
- }
106
- //Check if any cloud is selected
107
- if(jQuery('input[type=checkbox][name=backupCloud]:checked').length > 0) {
108
- if(jQuery('.sg-custom-backup-cloud input:checkbox:checked').length <= 0) {
109
- error.push(BG_SCHEDULE_STRINGS.invalidCloud);
110
- }
111
- }
112
- //If any error show it and abort ajax
113
- if(error.length){
114
- var alert = sgBackup.alertGenerator(error, 'alert-danger');
115
- sgBackup.prependErrorMsg(alert);
116
- sgBackup.scrollToElement('.alert');
117
- return false;
118
- }
119
-
120
- //Before sending
121
- jQuery('#sg-save-schedule').attr('disabled','disabled');
122
- jQuery('#sg-save-schedule').html(BG_SCHEDULE_STRINGS.savingInProgress);
123
-
124
- //On Success
125
- var ajaxHandler = new sgRequestHandler('schedule', scheduleForm.serialize());
126
- ajaxHandler.dataIsObject = false;
127
- ajaxHandler.callback = function(response){
128
- jQuery('.alert').remove();
129
- if(typeof response.success !== 'undefined'){
130
- var alert = sgBackup.alertGenerator(BG_SCHEDULE_STRINGS.successMessage, 'alert-success');
131
- sgBackup.prependErrorMsg(alert);
132
- location.reload();
133
- }
134
- else{
135
- //if error
136
- var alert = sgBackup.alertGenerator(response, 'alert-danger');
137
- sgBackup.prependErrorMsg(alert);
138
- }
139
-
140
- //Always
141
- jQuery('#sg-save-schedule').removeAttr('disabled','disabled');
142
- jQuery('#sg-save-schedule').html(BG_SCHEDULE_STRINGS.saveButtonText);
143
- sgBackup.scrollToElement('.alert');
144
- };
145
- ajaxHandler.run();
146
- };
147
-
148
- sgBackup.initScheduleSwitchButtons = function() {
149
- jQuery('.sg-switch').bootstrapSwitch();
150
- if(jQuery('#sg-backup-page-content-schedule .sg-switch').is(':checked'))
151
- {
152
- jQuery('#sg-backup-page-content-schedule .sg-schedule-settings').show();
153
- }
154
- jQuery('.sg-switch').on('switchChange.bootstrapSwitch', function (event, state) {
155
- var url = jQuery(this).attr('data-remote');
156
- if(state) {
157
- var isFeatureAvailable = new sgRequestHandler('isFeatureAvailable', {sgFeature: "SCHEDULE"});
158
- isFeatureAvailable.callback = function(response) {
159
- jQuery('.alert').remove();
160
- if (typeof response.success !== 'undefined') {
161
- //Show or Hide settings panel
162
- jQuery('.sg-schedule-settings').fadeIn();
163
- }
164
- else {
165
- var alert = sgBackup.alertGenerator(response.error, 'alert-warning');
166
- jQuery('.sg-schedule-container legend').after(alert);
167
- jQuery('.sg-switch').bootstrapSwitch('state', false);
168
- }
169
- }
170
-
171
- isFeatureAvailable.run();
172
- }
173
- else {
174
- var ajaxHandler = new sgRequestHandler('schedule', {remove: true});
175
- ajaxHandler.run();
176
- jQuery('.sg-schedule-settings').fadeOut();
177
- }
178
- });
179
- };
180
-
181
- sgBackup.initManulBackupRadioInputs = function(){
182
- jQuery('input[type=radio][name=backupType]').off('change').on('change', function(){
183
- jQuery('.sg-custom-backup').fadeToggle();
184
- jQuery('.sg-custom-backup').children().find('input[class^=sg-custom]').removeAttr('checked');
185
- jQuery('.sg-custom-backup-files').hide();
186
- });
187
- jQuery('input[type=checkbox][name=backupFiles], input[type=checkbox][name=backupCloud], input[type=checkbox][name=backupDatabase]').off('change').on('change', function(){
188
- var sgCheckBoxWrapper = jQuery(this).closest('.checkbox').find('.sg-checkbox');
189
- sgCheckBoxWrapper.fadeToggle();
190
- if(jQuery(this).attr('name') == 'backupFiles') {
191
- sgCheckBoxWrapper.find('input[type=checkbox]').attr('checked', 'checked');
192
- }
193
- });
194
- jQuery('input[type=radio][name=backupDBType]').off('change').on('change',function(){
195
- var sgCheckBoxWrapper = jQuery(this).closest('.checkbox').find('.sg-custom-backup-tables');
196
- if(jQuery('input[type=radio][name=backupDBType]:checked').val() == '2'){
197
- sgCheckBoxWrapper.find('input[type=checkbox]').not("[disabled]").prop('checked', true)
198
- sgCheckBoxWrapper.fadeIn();
199
- }else{
200
- sgCheckBoxWrapper.fadeOut();
201
- sgCheckBoxWrapper.find('input[type=checkbox][current="true"]').not("[disabled]").prop('checked', true)
202
- sgCheckBoxWrapper.find('input[type=checkbox][current="false"]').prop('checked', false)
203
- }
204
- })
205
- }
206
-
207
- sgBackup.initManualBackupTooltips = function(){
208
- jQuery('[for=cloud-ftp]').tooltip();
209
- jQuery('[for=cloud-dropbox]').tooltip();
210
- jQuery('[for=cloud-gdrive]').tooltip();
211
- jQuery('[for=cloud-one-drive]').tooltip();
212
- jQuery('[for=cloud-amazon]').tooltip();
213
- jQuery('[for=cloud-backup-guard]').tooltip();
214
- }
 
 
1
+ BG_SCHEDULE_INTERVAL_HOURLY = 0;
2
+ BG_SCHEDULE_INTERVAL_DAILY = 1;
3
+ BG_SCHEDULE_INTERVAL_WEEKLY = 2;
4
+ BG_SCHEDULE_INTERVAL_MONTHLY = 3;
5
+ BG_SCHEDULE_INTERVAL_YEARLY = 4;
6
+
7
+ jQuery(document).ready( function() {
8
+ sgBackup.initTablePagination('sg-schedule');
9
+ sgBackup.initScheduleCreation();
10
+ });
11
+
12
+ sgBackup.initScheduleCreation = function() {
13
+ sgBackup.initScheduleSwitchButtons();
14
+ sgBackup.initManulBackupRadioInputs();
15
+ sgBackup.initManualBackupTooltips();
16
+ sgBackup.toggleDaySelection();
17
+ sgBackup.initIntervalSelection();
18
+ }
19
+
20
+ sgBackup.removeSchedule = function (id){
21
+ var ajaxHandler = new sgRequestHandler('schedule', {remove: true, id: id});
22
+
23
+ if (!confirm(BG_SCHEDULE_STRINGS.confirm)) {
24
+ return false;
25
+ }
26
+
27
+ ajaxHandler.callback = function(response){
28
+ jQuery('.alert').remove();
29
+
30
+ if(typeof response.success !== 'undefined'){
31
+ location.reload();
32
+ }
33
+ else{
34
+ //if error
35
+ var alert = sgBackup.alertGenerator(BG_SCHEDULE_STRINGS.deletionError, 'alert-danger');
36
+ jQuery('.sg-schedule-container legend').after(alert);
37
+ }
38
+
39
+ sgBackup.scrollToElement('.alert');
40
+ };
41
+ ajaxHandler.run();
42
+ }
43
+
44
+ sgBackup.initIntervalSelection = function() {
45
+ if (jQuery('#sg-schedule-interval').val() == BG_SCHEDULE_INTERVAL_WEEKLY) {
46
+ jQuery('#sg-schedule-day-of-week-select').show();
47
+ }
48
+ else if(jQuery('#sg-schedule-interval').val() == BG_SCHEDULE_INTERVAL_MONTHLY) {
49
+ jQuery('#sg-schedule-day-of-month-select').show();
50
+ }
51
+ else if(jQuery('#sg-schedule-interval').val() == BG_SCHEDULE_INTERVAL_HOURLY) {
52
+ jQuery('#sg-schedule-timezone').hide();
53
+ }
54
+
55
+ jQuery('#sg-schedule-interval').on('change', function(){
56
+ jQuery('#sg-schedule-timezone').show();
57
+ if (jQuery(this).val() == BG_SCHEDULE_INTERVAL_WEEKLY) {
58
+ jQuery('#sg-schedule-day-of-month-select').hide();
59
+ jQuery('#sg-schedule-day-of-week-select').show();
60
+ }
61
+ else if (jQuery(this).val() == BG_SCHEDULE_INTERVAL_MONTHLY) {
62
+ jQuery('#sg-schedule-day-of-week-select').hide();
63
+ jQuery('#sg-schedule-day-of-month-select').show();
64
+ }
65
+ else if(jQuery('#sg-schedule-interval').val() == BG_SCHEDULE_INTERVAL_HOURLY) {
66
+ jQuery('#sg-schedule-timezone').hide();
67
+ }
68
+ else {
69
+ sgBackup.toggleDaySelection();
70
+ }
71
+ });
72
+ }
73
+
74
+ sgBackup.toggleDaySelection = function(){
75
+ jQuery('#sg-schedule-day-of-week-select').hide();
76
+ jQuery('#sg-schedule-day-of-month-select').hide();
77
+ }
78
+
79
+ sgBackup.prependErrorMsg = function(alert) {
80
+ if (typeof jQuery('#sg-schedule-id').val() === 'undefined') {
81
+ jQuery('.sg-schedule-container legend').after(alert);
82
+ }
83
+ else {
84
+ jQuery('#sg-modal .modal-header').prepend(alert);
85
+ }
86
+ }
87
+
88
+ //SGSchedule AJAX callback
89
+ sgBackup.schedule = function(){
90
+ var error = [];
91
+ var scheduleForm = jQuery('form[data-type=schedule]');
92
+
93
+ //Validation
94
+ jQuery('.alert').remove();
95
+ if(jQuery('input[type=radio][name=backupType]:checked').val() == 2) {
96
+ if (jQuery('.sg-custom-option:checked').length <= 0) {
97
+ error.push(BG_SCHEDULE_STRINGS.invalidBackupOption);
98
+ }
99
+ //Check if any file is selected
100
+ if (jQuery('input[type=checkbox][name=backupFiles]:checked').length > 0) {
101
+ if (jQuery('.sg-custom-backup-files input:checkbox:checked').length <= 0) {
102
+ error.push(BG_SCHEDULE_STRINGS.invalidDirectorySelected);
103
+ }
104
+ }
105
+ }
106
+ //Check if any cloud is selected
107
+ if(jQuery('input[type=checkbox][name=backupCloud]:checked').length > 0) {
108
+ if(jQuery('.sg-custom-backup-cloud input:checkbox:checked').length <= 0) {
109
+ error.push(BG_SCHEDULE_STRINGS.invalidCloud);
110
+ }
111
+ }
112
+ //If any error show it and abort ajax
113
+ if(error.length){
114
+ var alert = sgBackup.alertGenerator(error, 'alert-danger');
115
+ sgBackup.prependErrorMsg(alert);
116
+ sgBackup.scrollToElement('.alert');
117
+ return false;
118
+ }
119
+
120
+ //Before sending
121
+ jQuery('#sg-save-schedule').attr('disabled','disabled');
122
+ jQuery('#sg-save-schedule').html(BG_SCHEDULE_STRINGS.savingInProgress);
123
+
124
+ //On Success
125
+ var ajaxHandler = new sgRequestHandler('schedule', scheduleForm.serialize());
126
+ ajaxHandler.dataIsObject = false;
127
+ ajaxHandler.callback = function(response){
128
+ jQuery('.alert').remove();
129
+ if(typeof response.success !== 'undefined'){
130
+ var alert = sgBackup.alertGenerator(BG_SCHEDULE_STRINGS.successMessage, 'alert-success');
131
+ sgBackup.prependErrorMsg(alert);
132
+ location.reload();
133
+ }
134
+ else{
135
+ //if error
136
+ var alert = sgBackup.alertGenerator(response, 'alert-danger');
137
+ sgBackup.prependErrorMsg(alert);
138
+ }
139
+
140
+ //Always
141
+ jQuery('#sg-save-schedule').removeAttr('disabled','disabled');
142
+ jQuery('#sg-save-schedule').html(BG_SCHEDULE_STRINGS.saveButtonText);
143
+ sgBackup.scrollToElement('.alert');
144
+ };
145
+ ajaxHandler.run();
146
+ };
147
+
148
+ sgBackup.initScheduleSwitchButtons = function() {
149
+ jQuery('.sg-switch').bootstrapSwitch();
150
+ if(jQuery('#sg-backup-page-content-schedule .sg-switch').is(':checked'))
151
+ {
152
+ jQuery('#sg-backup-page-content-schedule .sg-schedule-settings').show();
153
+ }
154
+ jQuery('.sg-switch').on('switchChange.bootstrapSwitch', function (event, state) {
155
+ var url = jQuery(this).attr('data-remote');
156
+ if(state) {
157
+ var isFeatureAvailable = new sgRequestHandler('isFeatureAvailable', {sgFeature: "SCHEDULE"});
158
+ isFeatureAvailable.callback = function(response) {
159
+ jQuery('.alert').remove();
160
+ if (typeof response.success !== 'undefined') {
161
+ //Show or Hide settings panel
162
+ jQuery('.sg-schedule-settings').fadeIn();
163
+ }
164
+ else {
165
+ var alert = sgBackup.alertGenerator(response.error, 'alert-warning');
166
+ jQuery('.sg-schedule-container legend').after(alert);
167
+ jQuery('.sg-switch').bootstrapSwitch('state', false);
168
+ }
169
+ }
170
+
171
+ isFeatureAvailable.run();
172
+ }
173
+ else {
174
+ var ajaxHandler = new sgRequestHandler('schedule', {remove: true});
175
+ ajaxHandler.run();
176
+ jQuery('.sg-schedule-settings').fadeOut();
177
+ }
178
+ });
179
+ };
180
+
181
+ sgBackup.initManulBackupRadioInputs = function(){
182
+ jQuery('input[type=radio][name=backupType]').off('change').on('change', function(){
183
+ jQuery('.sg-custom-backup').fadeToggle();
184
+ jQuery('.sg-custom-backup').children().find('input[class^=sg-custom]').removeAttr('checked');
185
+ jQuery('.sg-custom-backup-files').hide();
186
+ });
187
+ jQuery('input[type=checkbox][name=backupFiles], input[type=checkbox][name=backupCloud], input[type=checkbox][name=backupDatabase]').off('change').on('change', function(){
188
+ var sgCheckBoxWrapper = jQuery(this).closest('.checkbox').find('.sg-checkbox');
189
+ sgCheckBoxWrapper.fadeToggle();
190
+ if(jQuery(this).attr('name') == 'backupFiles') {
191
+ sgCheckBoxWrapper.find('input[type=checkbox]').attr('checked', 'checked');
192
+ }
193
+ });
194
+ jQuery('input[type=radio][name=backupDBType]').off('change').on('change',function(){
195
+ var sgCheckBoxWrapper = jQuery(this).closest('.checkbox').find('.sg-custom-backup-tables');
196
+ if(jQuery('input[type=radio][name=backupDBType]:checked').val() == '2'){
197
+ sgCheckBoxWrapper.find('input[type=checkbox]').not("[disabled]").prop('checked', true)
198
+ sgCheckBoxWrapper.fadeIn();
199
+ }else{
200
+ sgCheckBoxWrapper.fadeOut();
201
+ sgCheckBoxWrapper.find('input[type=checkbox][current="true"]').not("[disabled]").prop('checked', true)
202
+ sgCheckBoxWrapper.find('input[type=checkbox][current="false"]').prop('checked', false)
203
+ }
204
+ })
205
+ }
206
+
207
+ sgBackup.initManualBackupTooltips = function(){
208
+ jQuery('[for=cloud-ftp]').tooltip();
209
+ jQuery('[for=cloud-dropbox]').tooltip();
210
+ jQuery('[for=cloud-gdrive]').tooltip();
211
+ jQuery('[for=cloud-one-drive]').tooltip();
212
+ jQuery('[for=cloud-p-cloud]').tooltip();
213
+ jQuery('[for=cloud-box]').tooltip();
214
+ jQuery('[for=cloud-amazon]').tooltip();
215
+ jQuery('[for=cloud-backup-guard]').tooltip();
216
+ }
public/proFeatures.php CHANGED
@@ -1,103 +1,103 @@
1
- <?php
2
- $contentClassName = getBackupPageContentClassName('pro_features');
3
- $optionsAvailability = array();
4
- $optionsAvailability['Website Backup & Restore'] = array('free' => 1, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
5
- $optionsAvailability['Website Migration'] = array('free' => 0, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
6
- $optionsAvailability['Backup to Dropbox (64-bit OS)'] = array('free' => 1, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
7
- $optionsAvailability['Backup Download & Import'] = array('free' => 1, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
8
- $optionsAvailability['Automatic Backups (single profile)'] = array('free' => 0, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
9
- $optionsAvailability['E-mail Notifications'] = array('free' => 0, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
10
- $optionsAvailability['Backup to SFTP/FTP'] = array('free' => 0, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
11
- /// start Gold
12
- $optionsAvailability['Backup to Google Drive'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
13
- $optionsAvailability['Backup to Amazon S3'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
14
- $optionsAvailability['Backup to OneDrive'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
15
- $optionsAvailability['Backup Retention'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
16
- $optionsAvailability['Restore from all Supported Clouds'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
17
- $optionsAvailability['Delete Local Copy after Upload'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
18
- $optionsAvailability['Customize Backup Name'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
19
- // start Platinum
20
- $optionsAvailability['Multiple Automatic Backups'] = array('free' => 0, 'silver' => 0, 'gold' => 0, 'platinum' => 1);
21
- $optionsAvailability['Multiple Automatic Backups'] = array('free' => 0, 'silver' => 0, 'gold' => 0, 'platinum' => 1);
22
- ?>
23
- <div id="sg-backup-page-content-pro_features" class="sg-backup-page-content <?php echo $contentClassName; ?>">
24
- <div><h1 class="sg-backup-page-title"><?php _backupGuardT('Why upgrade?')?></h1></div>
25
- <div class="sg-wrap-container sg-pricing-table-wrapper">
26
- <h3 class="sg-backup-guard-plans-title"><?php _backupGuardT('Backup Guard Plans')?></h3>
27
- <div class="sg-backup-header-row sg-backup-table-row">
28
- <div class="col-md-4 sg-pricing-table-header-first-column">
29
- <span class="sg-pricing-table-header-label"></span>
30
- </div>
31
- <div class="col-md-2">
32
- <span class="sg-pricing-table-header-label"><?php _backupGuardT('Free'); ?></span>
33
- <span class="sg-pricing-table-blue-label"><b><?php _backupGuardT('0'); ?></b> <span class="sg-backup-pricing-currency">US$</span></span>
34
- </div>
35
- <div class="col-md-2">
36
- <span class="sg-pricing-table-header-label"><?php _backupGuardT('Silver'); ?></span>
37
- <span class="sg-pricing-table-blue-label"><b><?php _backupGuardT('25'); ?></b> <span class="sg-backup-pricing-currency">US$</span></span>
38
- </div>
39
- <div class="col-md-2">
40
- <span class="sg-pricing-table-header-label"><?php _backupGuardT('Gold'); ?></span>
41
- <span class="sg-pricing-table-blue-label"><b><?php _backupGuardT('39'); ?></b> <span class="sg-backup-pricing-currency">US$</span></span>
42
- </div>
43
- <div class="col-md-2">
44
- <span class="sg-pricing-table-header-label"><?php _backupGuardT('Platinum'); ?></span>
45
- <span class="sg-pricing-table-blue-label"><b><?php _backupGuardT('99'); ?></b> <span class="sg-backup-pricing-currency">US$</span></span>
46
- </div>
47
- </div>
48
- <div class="sg-backup-table-row">
49
- <div class="col-md-4">
50
- <span class="sg-pricng-table-option"><?php _backupGuardT('Licences:')?></span>
51
- </div>
52
- <div class="col-md-2" style="text-align: center">
53
- <span class="sg-backup-plan-excluded"></span>
54
- </div>
55
- <div class="col-md-2">
56
- <span class="sg-pricing-table-includes"><?php _backupGuardT('Up to 2 Websites')?></span>
57
- </div>
58
- <div class="col-md-2">
59
- <span class="sg-pricing-table-includes"><?php _backupGuardT('Up to 5 Websites')?></span>
60
- </div>
61
- <div class="col-md-2">
62
- <span class="sg-pricing-table-includes"><?php _backupGuardT('Unlimited Websites')?></span>
63
- </div>
64
- </div>
65
- <div class="sg-backup-table-options-wrapper">
66
- <?php foreach ($optionsAvailability as $label => $availability): ?>
67
- <div class="sg-backup-table-row">
68
- <div class="col-md-4 sg-pricing-table-option-wrapper">
69
- <span class="sg-pricing-table-option"><?php _backupGuardT($label); ?></span>
70
- </div>
71
- <div class="col-md-2">
72
- <?php if ($availability['free'] == 1): ?>
73
- <span class="sg-backup-plan-included"></span>
74
- <?php else: ?>
75
- <span class="sg-backup-plan-excluded"></span>
76
- <?php endif;?>
77
- </div>
78
- <div class="col-md-2">
79
- <?php if ($availability['silver'] == 1): ?>
80
- <span class="sg-backup-plan-included"></span>
81
- <?php else: ?>
82
- <span class="sg-backup-plan-excluded"></span>
83
- <?php endif;?>
84
- </div>
85
- <div class="col-md-2">
86
- <?php if ($availability['gold'] == 1): ?>
87
- <span class="sg-backup-plan-included"></span>
88
- <?php else: ?>
89
- <span class="sg-backup-plan-excluded"></span>
90
- <?php endif;?>
91
- </div>
92
- <div class="col-md-2">
93
- <?php if ($availability['platinum'] == 1): ?>
94
- <span class="sg-backup-plan-included"></span>
95
- <?php else: ?>
96
- <span class="sg-backup-plan-excluded"></span>
97
- <?php endif;?>
98
- </div>
99
- </div>
100
- <?php endforeach;?>
101
- </div>
102
- </div>
103
- </div>
1
+ <?php
2
+ $contentClassName = getBackupPageContentClassName('pro_features');
3
+ $optionsAvailability = array();
4
+ $optionsAvailability['Website Backup & Restore'] = array('free' => 1, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
5
+ $optionsAvailability['Website Migration'] = array('free' => 0, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
6
+ $optionsAvailability['Backup to Dropbox (64-bit OS)'] = array('free' => 1, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
7
+ $optionsAvailability['Backup Download & Import'] = array('free' => 1, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
8
+ $optionsAvailability['Automatic Backups (single profile)'] = array('free' => 0, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
9
+ $optionsAvailability['E-mail Notifications'] = array('free' => 0, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
10
+ $optionsAvailability['Backup to SFTP/FTP'] = array('free' => 0, 'silver' => 1, 'gold' => 1, 'platinum' => 1);
11
+ /// start Gold
12
+ $optionsAvailability['Backup to Google Drive'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
13
+ $optionsAvailability['Backup to Amazon S3'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
14
+ $optionsAvailability['Backup to OneDrive'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
15
+ $optionsAvailability['Backup Retention'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
16
+ $optionsAvailability['Restore from all Supported Clouds'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
17
+ $optionsAvailability['Delete Local Copy after Upload'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
18
+ $optionsAvailability['Customize Backup Name'] = array('free' => 0, 'silver' => 0, 'gold' => 1, 'platinum' => 1);
19
+ // start Platinum
20
+ $optionsAvailability['Multiple Automatic Backups'] = array('free' => 0, 'silver' => 0, 'gold' => 0, 'platinum' => 1);
21
+ $optionsAvailability['Multiple Automatic Backups'] = array('free' => 0, 'silver' => 0, 'gold' => 0, 'platinum' => 1);
22
+ ?>
23
+ <div id="sg-backup-page-content-pro_features" class="sg-backup-page-content <?php echo $contentClassName; ?>">
24
+ <div><h1 class="sg-backup-page-title"><?php _backupGuardT('Why upgrade?')?></h1></div>
25
+ <div class="sg-wrap-container sg-pricing-table-wrapper">
26
+ <h3 class="sg-backup-guard-plans-title"><?php _backupGuardT('BackupGuard Plans')?></h3>
27
+ <div class="sg-backup-header-row sg-backup-table-row">
28
+ <div class="col-md-4 sg-pricing-table-header-first-column">
29
+ <span class="sg-pricing-table-header-label"></span>
30
+ </div>
31
+ <div class="col-md-2">
32
+ <span class="sg-pricing-table-header-label"><?php _backupGuardT('Free'); ?></span>
33
+ <span class="sg-pricing-table-blue-label"><b><?php _backupGuardT('0'); ?></b> <span class="sg-backup-pricing-currency">US$</span></span>
34
+ </div>
35
+ <div class="col-md-2">
36
+ <span class="sg-pricing-table-header-label"><?php _backupGuardT('Silver'); ?></span>
37
+ <span class="sg-pricing-table-blue-label"><b><?php _backupGuardT('25'); ?></b> <span class="sg-backup-pricing-currency">US$</span></span>
38
+ </div>
39
+ <div class="col-md-2">
40
+ <span class="sg-pricing-table-header-label"><?php _backupGuardT('Gold'); ?></span>
41
+ <span class="sg-pricing-table-blue-label"><b><?php _backupGuardT('39'); ?></b> <span class="sg-backup-pricing-currency">US$</span></span>
42
+ </div>
43
+ <div class="col-md-2">
44
+ <span class="sg-pricing-table-header-label"><?php _backupGuardT('Platinum'); ?></span>
45
+ <span class="sg-pricing-table-blue-label"><b><?php _backupGuardT('99'); ?></b> <span class="sg-backup-pricing-currency">US$</span></span>
46
+ </div>
47
+ </div>
48
+ <div class="sg-backup-table-row">
49
+ <div class="col-md-4">
50
+ <span class="sg-pricng-table-option"><?php _backupGuardT('Licences:')?></span>
51
+ </div>
52
+ <div class="col-md-2" style="text-align: center">
53
+ <span class="sg-backup-plan-excluded"></span>
54
+ </div>
55
+ <div class="col-md-2">
56
+ <span class="sg-pricing-table-includes"><?php _backupGuardT('Up to 2 Websites')?></span>
57
+ </div>
58
+ <div class="col-md-2">
59
+ <span class="sg-pricing-table-includes"><?php _backupGuardT('Up to 5 Websites')?></span>
60
+ </div>
61
+ <div class="col-md-2">
62
+ <span class="sg-pricing-table-includes"><?php _backupGuardT('Unlimited Websites')?></span>
63
+ </div>
64
+ </div>
65
+ <div class="sg-backup-table-options-wrapper">
66
+ <?php foreach ($optionsAvailability as $label => $availability): ?>
67
+ <div class="sg-backup-table-row">
68
+ <div class="col-md-4 sg-pricing-table-option-wrapper">
69
+ <span class="sg-pricing-table-option"><?php _backupGuardT($label); ?></span>
70
+ </div>
71
+ <div class="col-md-2">
72
+ <?php if ($availability['free'] == 1): ?>
73
+ <span class="sg-backup-plan-included"></span>
74
+ <?php else: ?>
75
+ <span class="sg-backup-plan-excluded"></span>
76
+ <?php endif;?>
77
+ </div>
78
+ <div class="col-md-2">
79
+ <?php if ($availability['silver'] == 1): ?>
80
+ <span class="sg-backup-plan-included"></span>
81
+ <?php else: ?>
82
+ <span class="sg-backup-plan-excluded"></span>
83
+ <?php endif;?>
84
+ </div>
85
+ <div class="col-md-2">
86
+ <?php if ($availability['gold'] == 1): ?>
87
+ <span class="sg-backup-plan-included"></span>
88
+ <?php else: ?>
89
+ <span class="sg-backup-plan-excluded"></span>
90
+ <?php endif;?>
91
+ </div>
92
+ <div class="col-md-2">
93
+ <?php if ($availability['platinum'] == 1): ?>
94
+ <span class="sg-backup-plan-included"></span>
95
+ <?php else: ?>
96
+ <span class="sg-backup-plan-excluded"></span>
97
+ <?php endif;?>
98
+ </div>
99
+ </div>
100
+ <?php endforeach;?>
101
+ </div>
102
+ </div>
103
+ </div>
public/services.php CHANGED
@@ -1,63 +1,64 @@
1
- <?php
2
- require_once(dirname(__FILE__).'/boot.php');
3
- require_once(SG_PUBLIC_INCLUDE_PATH.'header.php');
4
- ?>
5
- <div id="sg-backup-page-content-services" class="sg-backup-page-content <?php echo $contentClassName; ?>">
6
- <div><h1 class="sg-backup-page-title"><?php _backupGuardT('Special services')?></h1></div>
7
- <div class="sg-service-container">
8
- <div class="plugin-card-top">
9
- <div class="row">
10
- <div class="col-md-3">
11
- <div class="sg-migration-icon"></div>
12
- <!-- <img src="<?php echo SG_PUBLIC_URL."img/wordPress-migration-service-product.png"?>" class="" alt=""> -->
13
- </div>
14
- <div class="col-md-7 sg-migration-info">
15
- <div class="column-name">
16
- <h1>
17
- <a href="<?php echo SG_MIGRATION_SERVICE_URL?>" class="thickbox" target="_blank"><?php _backupGuardT('WordPress'); ?> <b><?php _backupGuardT('Migration Service'); ?></b></a>
18
- </h1>
19
- </div>
20
- <div class="column-description">
21
- <p class="column-description-p"><?php _backupGuardT('Our professionals will migrate all of your files and database and ensure <br> everything is working properly on your new server. With our migration service, you can expect:')?></p>
22
- <div class="row">
23
- <div class="col-md-5">
24
- <p class="sg-migration-features">
25
- <span class="sg-right-arrow sg-services-arrow"></span>
26
- <?php _backupGuardT('Migration of your files')?>
27
- </p>
28
- <p class="sg-migration-features">
29
- <span class="sg-right-arrow sg-services-arrow"></span>
30
- <?php _backupGuardT('Migration of your database')?>
31
- </p>
32
- <p class="sg-migration-features">
33
- <span class="sg-right-arrow sg-services-arrow"></span>
34
- <?php _backupGuardT('Refactoring of all urls')?>
35
- </p>
36
- </div>
37
- <div class="col-md-7">
38
- <p class="sg-migration-features">
39
- <span class="sg-right-arrow sg-services-arrow"></span>
40
- <?php _backupGuardT('Refactoring of all file names and image paths')?>
41
- </p>
42
- <p class="sg-migration-features">
43
- <span class="sg-right-arrow sg-services-arrow"></span>
44
- <?php _backupGuardT('Serialized data refactoring')?>
45
- </p>
46
- </div>
47
- </div>
48
- </div>
49
- </div>
50
- <div class="col-md-2 sg-migration-right-column">
51
- <div class="migration-price-wrapper">
52
- <ul class="sg-migration-price-ul">
53
- <li><p id="sg-migration-service-price">$<b>84.95</b></p></li>
54
- <li>
55
- <a class="btn btn-success" target="_blank" data-slug="" href="<?php echo SG_MIGRATION_SERVICE_URL?>" aria-label="" data-name=""><?php _backupGuardT('Order now')?></a>
56
- </li>
57
- </ul>
58
- </div>
59
- </div>
60
- </div>
61
- </div>
62
- </div>
 
63
  </div>
1
+ <?php
2
+ require_once(dirname(__FILE__).'/boot.php');
3
+ require_once(SG_PUBLIC_INCLUDE_PATH.'header.php');
4
+ $contentClassName = getBackupPageContentClassName('services');
5
+ ?>
6
+ <div id="sg-backup-page-content-services" class="sg-backup-page-content <?php echo $contentClassName; ?>">
7
+ <div><h1 class="sg-backup-page-title"><?php _backupGuardT('Special services')?></h1></div>
8
+ <div class="sg-service-container">
9
+ <div class="plugin-card-top">
10
+ <div class="row">
11
+ <div class="col-md-3">
12
+ <div class="sg-migration-icon"></div>
13
+ <!-- <img src="<?php echo SG_PUBLIC_URL."img/wordPress-migration-service-product.png"?>" class="" alt=""> -->
14
+ </div>
15
+ <div class="col-md-7 sg-migration-info">
16
+ <div class="column-name">
17
+ <h1>
18
+ <a href="<?php echo SG_MIGRATION_SERVICE_URL?>" class="thickbox" target="_blank"><?php _backupGuardT('WordPress'); ?> <b><?php _backupGuardT('Migration Service'); ?></b></a>
19
+ </h1>
20
+ </div>
21
+ <div class="column-description">
22
+ <p class="column-description-p"><?php _backupGuardT('Our professionals will migrate all of your files and database and ensure <br> everything is working properly on your new server. With our migration service, you can expect:')?></p>
23
+ <div class="row">
24
+ <div class="col-md-5">
25
+ <p class="sg-migration-features">
26
+ <span class="sg-right-arrow sg-services-arrow"></span>
27
+ <?php _backupGuardT('Migration of your files')?>
28
+ </p>
29
+ <p class="sg-migration-features">
30
+ <span class="sg-right-arrow sg-services-arrow"></span>
31
+ <?php _backupGuardT('Migration of your database')?>
32
+ </p>
33
+ <p class="sg-migration-features">
34
+ <span class="sg-right-arrow sg-services-arrow"></span>
35
+ <?php _backupGuardT('Refactoring of all urls')?>
36
+ </p>
37
+ </div>
38
+ <div class="col-md-7">
39
+ <p class="sg-migration-features">
40
+ <span class="sg-right-arrow sg-services-arrow"></span>
41
+ <?php _backupGuardT('Refactoring of all file names and image paths')?>
42
+ </p>
43
+ <p class="sg-migration-features">
44
+ <span class="sg-right-arrow sg-services-arrow"></span>
45
+ <?php _backupGuardT('Serialized data refactoring')?>
46
+ </p>
47
+ </div>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ <div class="col-md-2 sg-migration-right-column">
52
+ <div class="migration-price-wrapper">
53
+ <ul class="sg-migration-price-ul">
54
+ <li><p id="sg-migration-service-price">$<b>84.95</b></p></li>
55
+ <li>
56
+ <a class="btn btn-success" target="_blank" data-slug="" href="<?php echo SG_MIGRATION_SERVICE_URL?>" aria-label="" data-name=""><?php _backupGuardT('Order now')?></a>
57
+ </li>
58
+ </ul>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ </div>
64
  </div>
public/settings.php CHANGED
@@ -1,272 +1,318 @@
1
- <?php
2
- require_once(dirname(__FILE__).'/boot.php');
3
- require_once(SG_PUBLIC_INCLUDE_PATH . '/header.php');
4
- $isNotificationEnabled = SGConfig::get('SG_NOTIFICATIONS_ENABLED');
5
- $userEmail = SGConfig::get('SG_NOTIFICATIONS_EMAIL_ADDRESS');
6
- $isDeleteBackupAfterUploadEnabled = SGConfig::get('SG_DELETE_BACKUP_AFTER_UPLOAD');
7
- $isDeleteBackupFromCloudEnabled = SGConfig::get('SG_DELETE_BACKUP_FROM_CLOUD');
8
- $isDisabelAdsEnabled = SGConfig::get('SG_DISABLE_ADS');
9
- $isDownloadViaPhp = SGConfig::get('SG_DOWNLOAD_VIA_PHP');
10
- $isAlertBeforeUpdateEnabled = SGConfig::get('SG_ALERT_BEFORE_UPDATE');
11
- $isShowStatisticsWidgetEnabled = SGConfig::get('SG_SHOW_STATISTICS_WIDGET');
12
- $isReloadingsEnabled = SGConfig::get('SG_BACKUP_WITH_RELOADINGS');
13
- $intervalSelectElement = array(
14
- '1000'=>'1 second',
15
- '2000'=>'2 seconds',
16
- '3000'=>'3 seconds',
17
- '5000'=>'5 seconds',
18
- '7000'=>'7 seconds',
19
- '10000'=>'10 seconds');
20
- $selectedInterval = (int)SGConfig::get('SG_AJAX_REQUEST_FREQUENCY')?(int)SGConfig::get('SG_AJAX_REQUEST_FREQUENCY'):SG_AJAX_DEFAULT_REQUEST_FREQUENCY;
21
-
22
- $backupFileNamePrefix = SGConfig::get('SG_BACKUP_FILE_NAME_PREFIX')?SGConfig::get('SG_BACKUP_FILE_NAME_PREFIX'):SG_BACKUP_FILE_NAME_DEFAULT_PREFIX;
23
- $backupFileNamePrefix = esc_html($backupFileNamePrefix);
24
-
25
- $infoIconHtml = '<span class="dashicons dashicons-editor-help sgbg-info-icon"></span>';
26
- $sgBackgroundReloadMethod = SGConfig::get('SG_BACKGROUND_RELOAD_METHOD');
27
- $ftpPassiveMode = SGConfig::get('SG_FTP_PASSIVE_MODE');
28
- $contentClassName = getBackupPageContentClassName('settings');
29
- $savedCloudUploadChunkSize = getCloudUploadChunkSize();
30
- ?>
31
- <div id="sg-backup-page-content-settings" class="sg-backup-page-content <?php echo $contentClassName; ?>">
32
- <div class="row sg-settings-container">
33
- <div class="col-md-12">
34
- <form class="form-horizontal" method="post" data-sgform="ajax" data-type="sgsettings">
35
- <fieldset>
36
- <div><h1 class="sg-backup-page-title"><?php _backupGuardT('General settings')?></h1></div>
37
- <?php if (SGBoot::isFeatureAvailable('NOTIFICATIONS')): ?>
38
- <div class="form-group">
39
- <label class="col-md-4 sg-control-label">
40
- <?php _backupGuardT('Email notifications'); ?><?php echo $infoIconHtml; ?>
41
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Enable notifications to receive status updates about your backup/restore processes.');?></span>
42
- <?php if(!empty($userEmail)): ?>
43
- <br/><span class="text-muted sg-user-email sg-helper-block"><?php echo esc_html($userEmail); ?></span>
44
- <?php endif?>
45
- </label>
46
- <div class="col-md-3 text-left">
47
- <label class="sg-switch-container">
48
- <input type="checkbox" name="sgIsEmailNotification" class="sg-switch sg-email-switch" sgFeatureName="NOTIFICATIONS" <?php echo $isNotificationEnabled?'checked="checked"':''?> data-remote="settings">
49
- </label>
50
- </div>
51
- </div>
52
- <div class="sg-general-settings">
53
- <div class="form-group">
54
- <label class="col-md-4 sg-control-label" for="sg-email"><?php _backupGuardT('Enter email')?></label>
55
- <div class="col-md-5">
56
- <input id="sg-email" name="sgUserEmail" type="text" placeholder="<?php _backupGuardT('You can enter multiple emails, just separate them with comma')?>" class="form-control input-md sg-backup-input" value="<?php echo @$userEmail?>">
57
- </div>
58
- </div>
59
- </div>
60
- <?php endif; ?>
61
- <div class="form-group">
62
- <label class="col-md-4 sg-control-label">
63
- <?php _backupGuardT('Reloads enabled'); ?><?php echo $infoIconHtml; ?>
64
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Enable chunked backup/restore. Recommended to avoid execution timeout errors.')?></span>
65
- </label>
66
- <div class="col-md-3 text-left">
67
- <label class="sg-switch-container">
68
- <input type="checkbox" name="backup-with-reloadings" class="sg-switch" <?php echo $isReloadingsEnabled?'checked="checked"':''?>>
69
- </label>
70
- </div>
71
- </div>
72
- <?php if (SGBoot::isFeatureAvailable('DELETE_LOCAL_BACKUP_AFTER_UPLOAD')): ?>
73
- <div class="form-group">
74
- <label class="col-md-4 sg-control-label">
75
- <?php _backupGuardT('Delete local backup after upload'); ?><?php echo $infoIconHtml; ?>
76
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Delete your local copy of backup once it is successfully uploaded to the connected cloud.')?></span>
77
- </label>
78
- <div class="col-md-3 text-left">
79
- <label class="sg-switch-container">
80
- <input type="checkbox" name="delete-backup-after-upload" sgFeatureName="DELETE_LOCAL_BACKUP_AFTER_UPLOAD" class="sg-switch" <?php echo $isDeleteBackupAfterUploadEnabled?'checked="checked"':''?>>
81
- </label>
82
- </div>
83
- </div>
84
- <?php endif; ?>
85
- <?php if (SGBoot::isFeatureAvailable('ALERT_BEFORE_UPDATE')): ?>
86
- <div class="form-group">
87
- <label class="col-md-4 sg-control-label">
88
- <?php _backupGuardT('Alert before update'); ?><?php echo $infoIconHtml; ?>
89
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Receive an alert to backup you website prior to updateing installed plugins.')?></span>
90
- </label>
91
- <div class="col-md-3 text-left">
92
- <label class="sg-switch-container">
93
- <input type="checkbox" name="alert-before-update" sgFeatureName="ALERT_BEFORE_UPDATE" class="sg-switch" <?php echo $isAlertBeforeUpdateEnabled?'checked="checked"':''?>>
94
- </label>
95
- </div>
96
- </div>
97
- <?php endif; ?>
98
- <?php if (SGBoot::isFeatureAvailable('BACKUP_DELETION_WILL_ALSO_DELETE_FROM_CLOUD')): ?>
99
- <div class="form-group">
100
- <label class="col-md-4 sg-control-label">
101
- <?php _backupGuardT('Backup deletion will also delete from cloud'); ?><?php echo $infoIconHtml; ?>
102
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Deleting your local copy of backup will automatically remove it from the connected cloud as well.')?></span>
103
- </label>
104
- <div class="col-md-3 text-left">
105
- <label class="sg-switch-container">
106
- <input type="checkbox" name="delete-backup-from-cloud" sgFeatureName="BACKUP_DELETION_WILL_ALSO_DELETE_FROM_CLOUD" class="sg-switch" <?php echo $isDeleteBackupFromCloudEnabled?'checked="checked"':''?>>
107
- </label>
108
- </div>
109
- </div>
110
- <?php endif; ?>
111
- <div class="form-group">
112
- <label class="col-md-4 sg-control-label">
113
- <?php _backupGuardT('Show statistics'); ?><?php echo $infoIconHtml; ?>
114
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Backup statistics available in the dashboard.')?></span>
115
- </label>
116
- <div class="col-md-3 text-left">
117
- <label class="sg-switch-container">
118
- <input type="checkbox" name="show-statistics-widget" class="sg-switch" <?php echo $isShowStatisticsWidgetEnabled?'checked="checked"':''?>>
119
- </label>
120
- </div>
121
- </div>
122
- <?php if (SGBoot::isFeatureAvailable('FTP')): ?>
123
- <div class="form-group">
124
- <label class="col-md-4 sg-control-label">
125
- <?php _backupGuardT('FTP passive mode'); ?>
126
- </label>
127
- <div class="col-md-3 text-left">
128
- <label class="sg-switch-container">
129
- <input type="checkbox" name="ftp-passive-mode" sgFeatureName="FTP" class="sg-switch" <?php echo $ftpPassiveMode?'checked="checked"':''?>>
130
- </label>
131
- </div>
132
- </div>
133
- <?php endif; ?>
134
- <?php if (SGBoot::isFeatureAvailable('MULTI_SCHEDULE')): ?>
135
- <div class="form-group">
136
- <label class="col-md-4 sg-control-label">
137
- <?php _backupGuardT('Disable ads'); ?><?php echo $infoIconHtml; ?>
138
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Disable advertisements inside the plugin (e.g. banners)')?></span>
139
- </label>
140
- <div class="col-md-3 text-left">
141
- <label class="sg-switch-container">
142
- <input type="checkbox" name="sg-hide-ads" sgFeatureName="HIDE_ADS" class="sg-switch" <?php echo $isDisabelAdsEnabled?'checked="checked"':''?>>
143
- </label>
144
- </div>
145
- </div>
146
- <?php endif; ?>
147
- <div class="form-group">
148
- <label class="col-md-4 sg-control-label">
149
- <?php _backupGuardT('Download via PHP'); ?><?php echo $infoIconHtml; ?>
150
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Download backup archive or log via PHP')?></span>
151
- </label>
152
- <div class="col-md-3 text-left">
153
- <label class="sg-switch-container">
154
- <input type="checkbox" name="sg-download-via-php" sgFeatureName="DOWNLOAD_VIA_PHP" class="sg-switch" <?php echo $isDownloadViaPhp?'checked="checked"':''?>>
155
- </label>
156
- </div>
157
- </div>
158
- <div class="form-group">
159
- <label class="col-md-4 sg-control-label">
160
- <?php _backupGuardT('Send usage data'); ?><?php echo $infoIconHtml; ?>
161
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Allow us to receive usage data in order to improve plugin functionality')?></span>
162
- </label>
163
- <div class="col-md-3 text-left">
164
- <label class="sg-switch-container">
165
- <input type="checkbox" name="backup-send-usage-data-status" class="sg-switch backup-send-usage-data-status" <?php echo $allowDataCollection?'checked="checked"':''?>>
166
- </label>
167
- </div>
168
- </div>
169
-
170
- <div class="form-group">
171
- <label class="col-md-4 sg-control-label" for='sg-paths-to-exclude'>
172
- <?php _backupGuardT("Exclude paths (separated by commas)")?>
173
- </label>
174
- <div class="col-md-5 text-left">
175
- <input class="form-control sg-backup-input" id='sg-paths-to-exclude' name='sg-paths-to-exclude' type="text" value="<?php echo SGConfig::get('SG_PATHS_TO_EXCLUDE')?SGConfig::get('SG_PATHS_TO_EXCLUDE'):''?>" placeholder="e.g. wp-content/cache, wp-content/w3tc-cache">
176
- </div>
177
- </div>
178
-
179
- <div class="form-group">
180
- <label class="col-md-4 sg-control-label" for='sg-tables-to-exclude'>
181
- <?php _backupGuardT("Tables to exclude (separated by commas)")?>
182
- </label>
183
- <div class="col-md-5 text-left">
184
- <input class="form-control sg-backup-input" id='sg-tables-to-exclude' name='sg-tables-to-exclude' type="text" value="<?php echo SGConfig::get('SG_TABLES_TO_EXCLUDE')?SGConfig::get('SG_TABLES_TO_EXCLUDE'):''?>" placeholder="e.g. wp_comments, wp_commentmeta">
185
- </div>
186
- </div>
187
-
188
- <?php if (SGBoot::isFeatureAvailable('NUMBER_OF_BACKUPS_TO_KEEP')): ?>
189
- <div class="form-group">
190
- <label class="col-md-4 sg-control-label" for='amount-of-backups-to-keep'>
191
- <?php _backupGuardT("Backup retention")?><?php echo $infoIconHtml; ?>
192
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Choose number of backups to keep on the website. Each additional backup will replace the oldest backup file')?></span>
193
- </label>
194
- <div class="col-md-5 text-left">
195
- <input class="form-control sg-backup-input" id='amount-of-backups-to-keep' name='amount-of-backups-to-keep' type="text" value="<?php echo (int)SGConfig::get('SG_AMOUNT_OF_BACKUPS_TO_KEEP')?(int)SGConfig::get('SG_AMOUNT_OF_BACKUPS_TO_KEEP'):SG_NUMBER_OF_BACKUPS_TO_KEEP?>" <?php echo (!SGBoot::isFeatureAvailable('NUMBER_OF_BACKUPS_TO_KEEP'))? 'disabled' : '' ?>>
196
- </div>
197
- </div>
198
- <?php endif; ?>
199
- <div class="form-group">
200
- <label class="col-md-4 sg-control-label" for='sg-number-of-rows-to-backup'>
201
- <?php _backupGuardT("Number of rows to backup at once")?><?php echo $infoIconHtml; ?>
202
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Choose the number of row during the Databases backup in order not to overload your RAM.')?></span>
203
- </label>
204
- <div class="col-md-5 text-left">
205
- <input class="form-control sg-backup-input" id='sg-number-of-rows-to-backup' name='sg-number-of-rows-to-backup' type="text" value="<?php echo (int)SGConfig::get('SG_BACKUP_DATABASE_INSERT_LIMIT')?(int)SGConfig::get('SG_BACKUP_DATABASE_INSERT_LIMIT'):SG_BACKUP_DATABASE_INSERT_LIMIT?>">
206
- </div>
207
- </div>
208
- <div class="form-group">
209
- <label class="col-md-4 sg-control-label" for='sg-number-of-rows-to-backup'>
210
- <?php _backupGuardT("Upload to cloud chunk size")?><?php echo $infoIconHtml; ?>
211
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Change the size of the chunk upload during backup to cloud(s).')?></span>
212
- </label>
213
- <div class="col-md-5 text-left">
214
- <select class="form-control" id='sg-upload-cloud-chunk-szie' name='sg-upload-cloud-chunk-size'>
215
- <option value="4" <?php echo $savedCloudUploadChunkSize == 4 ? "selected" : "" ?> >4MB</option>
216
- <option value="8" <?php echo $savedCloudUploadChunkSize == 8 ? "selected" : "" ?> >8MB</option>
217
- <option value="16" <?php echo $savedCloudUploadChunkSize == 16 ? "selected" : "" ?> >16MB</option>
218
- <option value="32" <?php echo $savedCloudUploadChunkSize == 32 ? "selected" : "" ?> >32MB</option>
219
- </select>
220
- </div>
221
- </div>
222
-
223
- <div class="form-group">
224
- <label class="col-md-4 sg-control-label" for='sg-background-reload-method'>
225
- <?php _backupGuardT("Reload method")?><?php echo $infoIconHtml; ?>
226
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Choose the right PHP Library for reloads')?></span>
227
- </label>
228
- <div class="col-md-5 text-left">
229
- <select class="form-control" id='sg-background-reload-method' name='sg-background-reload-method'>
230
- <option value="<?php echo SG_RELOAD_METHOD_CURL ?>" <?php echo $sgBackgroundReloadMethod == SG_RELOAD_METHOD_CURL ? "selected" : "" ?> >Curl</option>
231
- <option value="<?php echo SG_RELOAD_METHOD_STREAM ?>" <?php echo $sgBackgroundReloadMethod == SG_RELOAD_METHOD_STREAM ? "selected" : "" ?> >Stream</option>
232
- <option value="<?php echo SG_RELOAD_METHOD_SOCKET ?>" <?php echo $sgBackgroundReloadMethod == SG_RELOAD_METHOD_SOCKET ? "selected" : "" ?> >Socket</option>
233
- </select>
234
- </div>
235
- </div>
236
- <?php if (SGBoot::isFeatureAvailable('CUSTOM_BACKUP_NAME')): ?>
237
- <div class="form-group">
238
- <label class="col-md-4 sg-control-label">
239
- <?php _backupGuardT('Backup file name')?><?php echo $infoIconHtml; ?>
240
- <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Name your backups or leave to the default prefixes')?></span>
241
- </label>
242
- <div class="col-md-5 text-left">
243
- <input id="backup-file-name" name="backup-file-name" type="text" class="form-control input-md sg-backup-input" value="<?php echo $backupFileNamePrefix?>" <?php echo (!SGBoot::isFeatureAvailable('CUSTOM_BACKUP_NAME'))? 'disabled' : '' ?>>
244
- </div>
245
- </div>
246
- <?php endif; ?>
247
-
248
- <div class="form-group">
249
- <label class="col-md-4 sg-control-label" for="sg-email">
250
- <?php _backupGuardT('Request frequency')?>
251
- </label>
252
- <div class="col-md-5">
253
- <?php echo selectElement($intervalSelectElement, array('id'=>'sg-ajax-interval', 'name'=>'ajaxInterval', 'class'=>'form-control'), '', $selectedInterval);?>
254
- </div>
255
- </div>
256
- <div class="form-group">
257
- <label class="col-md-4"><?php _backupGuardT('Backup destination path'); ?></label>
258
- <div class="col-md-6">
259
- <span><?php echo str_replace(realpath(SG_APP_ROOT_DIRECTORY).'/', "" ,realpath(SG_BACKUP_DIRECTORY)); ?></span>
260
- </div>
261
- </div>
262
- <div class="form-group">
263
- <label class="col-md-4 control-label" for="button1id"></label>
264
- <div class="col-md-5 text-right">
265
- <button type="button" id="sg-save-settings" class="btn btn-success" onclick="sgBackup.sgsettings();"><?php _backupGuardT('Save')?></button>
266
- </div>
267
- </div>
268
- </fieldset>
269
- </form>
270
- </div>
271
- </div>
272
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once dirname(__FILE__) . '/boot.php';
3
+ require_once SG_PUBLIC_INCLUDE_PATH . '/header.php';
4
+ $isNotificationEnabled = SGConfig::get('SG_NOTIFICATIONS_ENABLED');
5
+ $userEmail = SGConfig::get('SG_NOTIFICATIONS_EMAIL_ADDRESS');
6
+ $isDeleteBackupAfterUploadEnabled = SGConfig::get('SG_DELETE_BACKUP_AFTER_UPLOAD');
7
+ $isDeleteBackupFromCloudEnabled = SGConfig::get('SG_DELETE_BACKUP_FROM_CLOUD');
8
+ $isDisabelAdsEnabled = SGConfig::get('SG_DISABLE_ADS');
9
+ $isDownloadMode = SGConfig::get('SG_DOWNLOAD_MODE');
10
+ $isAlertBeforeUpdateEnabled = SGConfig::get('SG_ALERT_BEFORE_UPDATE');
11
+ $isShowStatisticsWidgetEnabled = SGConfig::get('SG_SHOW_STATISTICS_WIDGET');
12
+ $isReloadingsEnabled = SGConfig::get('SG_BACKUP_WITH_RELOADINGS');
13
+ $intervalSelectElement = array(
14
+ '1000' => '1 second',
15
+ '2000' => '2 seconds',
16
+ '3000' => '3 seconds',
17
+ '5000' => '5 seconds',
18
+ '7000' => '7 seconds',
19
+ '10000' => '10 seconds');
20
+ $selectedInterval = (int) SGConfig::get('SG_AJAX_REQUEST_FREQUENCY') ? (int) SGConfig::get('SG_AJAX_REQUEST_FREQUENCY') : SG_AJAX_DEFAULT_REQUEST_FREQUENCY;
21
+
22
+ $backupFileNamePrefix = SGConfig::get('SG_BACKUP_FILE_NAME_PREFIX') ? SGConfig::get('SG_BACKUP_FILE_NAME_PREFIX') : SG_BACKUP_FILE_NAME_DEFAULT_PREFIX;
23
+ $backupFileNamePrefix = esc_html($backupFileNamePrefix);
24
+
25
+ $infoIconHtml = '<span class="dashicons dashicons-editor-help sgbg-info-icon"></span>';
26
+ $sgBackgroundReloadMethod = SGConfig::get('SG_BACKGROUND_RELOAD_METHOD');
27
+ $ftpPassiveMode = SGConfig::get('SG_FTP_PASSIVE_MODE');
28
+ $contentClassName = getBackupPageContentClassName('settings');
29
+ $savedCloudUploadChunkSize = getCloudUploadChunkSize();
30
+ ?>
31
+ <div id="sg-backup-page-content-settings" class="sg-backup-page-content <?php echo $contentClassName; ?>">
32
+ <div class="row sg-settings-container">
33
+ <div class="col-md-12">
34
+ <form class="form-horizontal" method="post" data-sgform="ajax" data-type="sgsettings">
35
+ <fieldset>
36
+ <div><h1 class="sg-backup-page-title"><?php _backupGuardT('General settings') ?></h1></div>
37
+ <?php if (SGBoot::isFeatureAvailable('NOTIFICATIONS')) : ?>
38
+ <div class="form-group">
39
+ <label class="col-md-4 sg-control-label">
40
+ <?php _backupGuardT('Email notifications'); ?><?php echo $infoIconHtml; ?>
41
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Enable notifications to receive status updates about your backup/restore processes.'); ?></span>
42
+ <?php if (!empty($userEmail)) : ?>
43
+ <br/><span
44
+ class="text-muted sg-user-email sg-helper-block"><?php echo esc_html($userEmail); ?></span>
45
+ <?php endif ?>
46
+ </label>
47
+ <div class="col-md-3 text-left">
48
+ <label class="sg-switch-container">
49
+ <input type="checkbox" name="sgIsEmailNotification"
50
+ class="sg-switch sg-email-switch"
51
+ sgFeatureName="NOTIFICATIONS" <?php echo $isNotificationEnabled ? 'checked="checked"' : '' ?>
52
+ data-remote="settings">
53
+ </label>
54
+ </div>
55
+ </div>
56
+ <div class="sg-general-settings">
57
+ <div class="form-group">
58
+ <label class="col-md-4 sg-control-label"
59
+ for="sg-email"><?php _backupGuardT('Enter email') ?></label>
60
+ <div class="col-md-5">
61
+ <input id="sg-email" name="sgUserEmail" type="text"
62
+ placeholder="<?php _backupGuardT('You can enter multiple emails, just separate them with comma') ?>"
63
+ class="form-control input-md sg-backup-input"
64
+ value="<?php echo @$userEmail ?>">
65
+ </div>
66
+ </div>
67
+ </div>
68
+ <?php endif; ?>
69
+ <div class="form-group">
70
+ <label class="col-md-4 sg-control-label">
71
+ <?php _backupGuardT('Reloads enabled'); ?><?php echo $infoIconHtml; ?>
72
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Enable chunked backup/restore. Recommended to avoid execution timeout errors.') ?></span>
73
+ </label>
74
+ <div class="col-md-3 text-left">
75
+ <label class="sg-switch-container">
76
+ <input type="checkbox" name="backup-with-reloadings"
77
+ class="sg-switch" <?php echo $isReloadingsEnabled ? 'checked="checked"' : '' ?>>
78
+ </label>
79
+ </div>
80
+ </div>
81
+ <?php if (SGBoot::isFeatureAvailable('DELETE_LOCAL_BACKUP_AFTER_UPLOAD')) : ?>
82
+ <div class="form-group">
83
+ <label class="col-md-4 sg-control-label">
84
+ <?php _backupGuardT('Delete local backup after upload'); ?><?php echo $infoIconHtml; ?>
85
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Delete your local copy of backup once it is successfully uploaded to the connected cloud.') ?></span>
86
+ </label>
87
+ <div class="col-md-3 text-left">
88
+ <label class="sg-switch-container">
89
+ <input type="checkbox" name="delete-backup-after-upload"
90
+ sgFeatureName="DELETE_LOCAL_BACKUP_AFTER_UPLOAD"
91
+ class="sg-switch" <?php echo $isDeleteBackupAfterUploadEnabled ? 'checked="checked"' : '' ?>>
92
+ </label>
93
+ </div>
94
+ </div>
95
+ <?php endif; ?>
96
+ <?php if (SGBoot::isFeatureAvailable('ALERT_BEFORE_UPDATE')) : ?>
97
+ <div class="form-group">
98
+ <label class="col-md-4 sg-control-label">
99
+ <?php _backupGuardT('Alert before update'); ?><?php echo $infoIconHtml; ?>
100
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Receive an alert to backup you website prior to updating installed plugins.') ?></span>
101
+ </label>
102
+ <div class="col-md-3 text-left">
103
+ <label class="sg-switch-container">
104
+ <input type="checkbox" name="alert-before-update"
105
+ sgFeatureName="ALERT_BEFORE_UPDATE"
106
+ class="sg-switch" <?php echo $isAlertBeforeUpdateEnabled ? 'checked="checked"' : '' ?>>
107
+ </label>
108
+ </div>
109
+ </div>
110
+ <?php endif; ?>
111
+ <?php if (SGBoot::isFeatureAvailable('BACKUP_DELETION_WILL_ALSO_DELETE_FROM_CLOUD')) : ?>
112
+ <div class="form-group">
113
+ <label class="col-md-4 sg-control-label">
114
+ <?php _backupGuardT('Backup deletion will also delete from cloud'); ?><?php echo $infoIconHtml; ?>
115
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Deleting your local copy of backup will automatically remove it from the connected cloud as well.') ?></span>
116
+ </label>
117
+ <div class="col-md-3 text-left">
118
+ <label class="sg-switch-container">
119
+ <input type="checkbox" name="delete-backup-from-cloud"
120
+ sgFeatureName="BACKUP_DELETION_WILL_ALSO_DELETE_FROM_CLOUD"
121
+ class="sg-switch" <?php echo $isDeleteBackupFromCloudEnabled ? 'checked="checked"' : '' ?>>
122
+ </label>
123
+ </div>
124
+ </div>
125
+ <?php endif; ?>
126
+ <div class="form-group">
127
+ <label class="col-md-4 sg-control-label">
128
+ <?php _backupGuardT('Show statistics'); ?><?php echo $infoIconHtml; ?>
129
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Backup statistics available in the dashboard.') ?></span>
130
+ </label>
131
+ <div class="col-md-3 text-left">
132
+ <label class="sg-switch-container">
133
+ <input type="checkbox" name="show-statistics-widget"
134
+ class="sg-switch" <?php echo $isShowStatisticsWidgetEnabled ? 'checked="checked"' : '' ?>>
135
+ </label>
136
+ </div>
137
+ </div>
138
+ <?php if (SGBoot::isFeatureAvailable('FTP')) : ?>
139
+ <div class="form-group">
140
+ <label class="col-md-4 sg-control-label">
141
+ <?php _backupGuardT('FTP passive mode'); ?>
142
+ </label>
143
+ <div class="col-md-3 text-left">
144
+ <label class="sg-switch-container">
145
+ <input type="checkbox" name="ftp-passive-mode" sgFeatureName="FTP"
146
+ class="sg-switch" <?php echo $ftpPassiveMode ? 'checked="checked"' : '' ?>>
147
+ </label>
148
+ </div>
149
+ </div>
150
+ <?php endif; ?>
151
+ <?php if (SGBoot::isFeatureAvailable('MULTI_SCHEDULE')) : ?>
152
+ <div class="form-group">
153
+ <label class="col-md-4 sg-control-label">
154
+ <?php _backupGuardT('Disable ads'); ?><?php echo $infoIconHtml; ?>
155
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Disable advertisements inside the plugin (e.g. banners)') ?></span>
156
+ </label>
157
+ <div class="col-md-3 text-left">
158
+ <label class="sg-switch-container">
159
+ <input type="checkbox" name="sg-hide-ads" sgFeatureName="HIDE_ADS"
160
+ class="sg-switch" <?php echo $isDisabelAdsEnabled ? 'checked="checked"' : '' ?>>
161
+ </label>
162
+ </div>
163
+ </div>
164
+ <?php endif; ?>
165
+ <div class="form-group">
166
+ <label class="col-md-4 sg-control-label" for='sg-download-mode'>
167
+ <?php _backupGuardT("Download mode") ?><?php echo $infoIconHtml; ?>
168
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Select what technique to use for downloading the backup files.') ?></span>
169
+ </label>
170
+ <div class="col-md-5 text-left">
171
+ <select class="form-control" id='sg-download-mode' name='sg-download-mode'>
172
+ <?php if (backupGuardCheckOS() !== 'windows') : ?>
173
+ <option value="0" <?php echo $isDownloadMode === 0 ? "selected" : "" ?> >Hard link
174
+ </option>
175
+ <?php endif; ?>
176
+ <option value="1" <?php echo $isDownloadMode == 1 ? "selected" : "" ?> >Via PHP</option>
177
+ <option value="2" <?php echo $isDownloadMode == 2 ? "selected" : "" ?> >Symlink</option>
178
+ </select>
179
+ </div>
180
+ </div>
181
+ <div class="form-group">
182
+ <label class="col-md-4 sg-control-label">
183
+ <?php _backupGuardT('Send usage data'); ?><?php echo $infoIconHtml; ?>
184
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Allow us to receive usage data in order to improve plugin functionality') ?></span>
185
+ </label>
186
+ <div class="col-md-3 text-left">
187
+ <label class="sg-switch-container">
188
+ <input type="checkbox" name="backup-send-usage-data-status"
189
+ class="sg-switch backup-send-usage-data-status" <?php echo $allowDataCollection ? 'checked="checked"' : '' ?>>
190
+ </label>
191
+ </div>
192
+ </div>
193
+ <div class="form-group">
194
+ <label class="col-md-4 sg-control-label" for='sg-paths-to-exclude'>
195
+ <?php _backupGuardT("Exclude paths (separated by commas)") ?>
196
+ </label>
197
+ <div class="col-md-5 text-left">
198
+ <input class="form-control sg-backup-input" id='sg-paths-to-exclude'
199
+ name='sg-paths-to-exclude' type="text"
200
+ value="<?php echo SGConfig::get('SG_PATHS_TO_EXCLUDE') ? SGConfig::get('SG_PATHS_TO_EXCLUDE') : '' ?>"
201
+ placeholder="e.g. wp-content/cache, wp-content/w3tc-cache">
202
+ </div>
203
+ </div>
204
+ <div class="form-group">
205
+ <label class="col-md-4 sg-control-label" for='sg-tables-to-exclude'>
206
+ <?php _backupGuardT("Tables to exclude (separated by commas)") ?>
207
+ </label>
208
+ <div class="col-md-5 text-left">
209
+ <input class="form-control sg-backup-input" id='sg-tables-to-exclude'
210
+ name='sg-tables-to-exclude' type="text"
211
+ value="<?php echo SGConfig::get('SG_TABLES_TO_EXCLUDE') ? SGConfig::get('SG_TABLES_TO_EXCLUDE') : '' ?>"
212
+ placeholder="e.g. wp_comments, wp_commentmeta">
213
+ </div>
214
+ </div>
215
+ <?php if (SGBoot::isFeatureAvailable('NUMBER_OF_BACKUPS_TO_KEEP')) : ?>
216
+ <div class="form-group">
217
+ <label class="col-md-4 sg-control-label" for='amount-of-backups-to-keep'>
218
+ <?php _backupGuardT("Backup retention") ?><?php echo $infoIconHtml; ?>
219
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Choose number of backups to keep on the website. Each additional backup will replace the oldest backup file') ?></span>
220
+ </label>
221
+ <div class="col-md-5 text-left">
222
+ <input class="form-control sg-backup-input" id='amount-of-backups-to-keep'
223
+ name='amount-of-backups-to-keep' type="text"
224
+ value="<?php echo (int) SGConfig::get('SG_AMOUNT_OF_BACKUPS_TO_KEEP') ? (int) SGConfig::get('SG_AMOUNT_OF_BACKUPS_TO_KEEP') : SG_NUMBER_OF_BACKUPS_TO_KEEP ?>" <?php echo (!SGBoot::isFeatureAvailable('NUMBER_OF_BACKUPS_TO_KEEP')) ? 'disabled' : '' ?>>
225
+ </div>
226
+ </div>
227
+ <?php endif; ?>
228
+ <div class="form-group">
229
+ <label class="col-md-4 sg-control-label" for='sg-number-of-rows-to-backup'>
230
+ <?php _backupGuardT("Number of rows to backup at once") ?><?php echo $infoIconHtml; ?>
231
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Choose the number of row during the Databases backup in order not to overload your RAM.') ?></span>
232
+ </label>
233
+ <div class="col-md-5 text-left">
234
+ <input class="form-control sg-backup-input" id='sg-number-of-rows-to-backup'
235
+ name='sg-number-of-rows-to-backup' type="text"
236
+ value="<?php echo (int) SGConfig::get('SG_BACKUP_DATABASE_INSERT_LIMIT') ? (int) SGConfig::get('SG_BACKUP_DATABASE_INSERT_LIMIT') : SG_BACKUP_DATABASE_INSERT_LIMIT ?>">
237
+ </div>
238
+ </div>
239
+ <div class="form-group">
240
+ <label class="col-md-4 sg-control-label" for='sg-number-of-rows-to-backup'>
241
+ <?php _backupGuardT("Upload to cloud chunk size") ?><?php echo $infoIconHtml; ?>
242
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Change the size of the chunk upload during backup to cloud(s).') ?></span>
243
+ </label>
244
+ <div class="col-md-5 text-left">
245
+ <select class="form-control" id='sg-upload-cloud-chunk-szie'
246
+ name='sg-upload-cloud-chunk-size'>
247
+ <option value="4" <?php echo $savedCloudUploadChunkSize == 4 ? "selected" : "" ?> >4MB
248
+ </option>
249
+ <option value="8" <?php echo $savedCloudUploadChunkSize == 8 ? "selected" : "" ?> >8MB
250
+ </option>
251
+ <option value="16" <?php echo $savedCloudUploadChunkSize == 16 ? "selected" : "" ?> >
252
+ 16MB
253
+ </option>
254
+ <option value="32" <?php echo $savedCloudUploadChunkSize == 32 ? "selected" : "" ?> >
255
+ 32MB
256
+ </option>
257
+ </select>
258
+ </div>
259
+ </div>
260
+ <div class="form-group">
261
+ <label class="col-md-4 sg-control-label" for='sg-background-reload-method'>
262
+ <?php _backupGuardT("Reload method") ?><?php echo $infoIconHtml; ?>
263
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Choose the right PHP Library for reloads') ?></span>
264
+ </label>
265
+ <div class="col-md-5 text-left">
266
+ <select class="form-control" id='sg-background-reload-method'
267
+ name='sg-background-reload-method'>
268
+ <option value="<?php echo SG_RELOAD_METHOD_CURL ?>" <?php echo $sgBackgroundReloadMethod == SG_RELOAD_METHOD_CURL ? "selected" : "" ?> >
269
+ Curl
270
+ </option>
271
+ <option value="<?php echo SG_RELOAD_METHOD_STREAM ?>" <?php echo $sgBackgroundReloadMethod == SG_RELOAD_METHOD_STREAM ? "selected" : "" ?> >
272
+ Stream
273
+ </option>
274
+ <option value="<?php echo SG_RELOAD_METHOD_SOCKET ?>" <?php echo $sgBackgroundReloadMethod == SG_RELOAD_METHOD_SOCKET ? "selected" : "" ?> >
275
+ Socket
276
+ </option>
277
+ </select>
278
+ </div>
279
+ </div>
280
+ <?php if (SGBoot::isFeatureAvailable('CUSTOM_BACKUP_NAME')) : ?>
281
+ <div class="form-group">
282
+ <label class="col-md-4 sg-control-label">
283
+ <?php _backupGuardT('Backup file name') ?><?php echo $infoIconHtml; ?>
284
+ <span class="infoSelectRepeat samefontStyle sgbg-info-text"><?php _backupGuardT('Name your backups or leave to the default prefixes') ?></span>
285
+ </label>
286
+ <div class="col-md-5 text-left">
287
+ <input id="backup-file-name" name="backup-file-name" type="text"
288
+ class="form-control input-md sg-backup-input"
289
+ value="<?php echo $backupFileNamePrefix ?>" <?php echo (!SGBoot::isFeatureAvailable('CUSTOM_BACKUP_NAME')) ? 'disabled' : '' ?>>
290
+ </div>
291
+ </div>
292
+ <?php endif; ?>
293
+ <div class="form-group">
294
+ <label class="col-md-4 sg-control-label" for="sg-email">
295
+ <?php _backupGuardT('Request frequency') ?>
296
+ </label>
297
+ <div class="col-md-5">
298
+ <?php echo selectElement($intervalSelectElement, array('id' => 'sg-ajax-interval', 'name' => 'ajaxInterval', 'class' => 'form-control'), '', $selectedInterval); ?>
299
+ </div>
300
+ </div>
301
+ <div class="form-group">
302
+ <label class="col-md-4"><?php _backupGuardT('Backup destination path'); ?></label>
303
+ <div class="col-md-6">
304
+ <span><?php echo str_replace(realpath(SG_APP_ROOT_DIRECTORY) . '/', "", realpath(SG_BACKUP_DIRECTORY)); ?></span>
305
+ </div>
306
+ </div>
307
+ <div class="form-group">
308
+ <label class="col-md-4 control-label" for="button1id"></label>
309
+ <div class="col-md-5 text-right">
310
+ <button type="button" id="sg-save-settings" class="btn btn-success"
311
+ onclick="sgBackup.sgsettings();"><?php _backupGuardT('Save') ?></button>
312
+ </div>
313
+ </div>
314
+ </fieldset>
315
+ </form>
316
+ </div>
317
+ </div>
318
+ </div>
public/templates/notices/missed_table.php CHANGED
@@ -1,13 +1,13 @@
1
- <div class="sg-error-notice-wrapper">
2
- <h2 class="sg-red-color sg-notice-error-h2">
3
- Database Issue
4
- </h2>
5
- <p class="sg-red-color sg-notice-error-p">
6
- Some of the Backup Guard Database tables werent created for some reason.
7
- <br>
8
- That could become a problem when backing up. Please, contact our support team for the resolution of the problem.
9
- </p>
10
- <div class="sg-wrapper-less sg-notice-contact-wrapper">
11
- <a href="<?php echo BACKUP_GUARD_WORDPRESS_SUPPORT_URL; ?>" class="btn btn-success" target="_blank">Contact us</a>
12
- </div>
13
- </div>
1
+ <div class="sg-error-notice-wrapper">
2
+ <h2 class="sg-red-color sg-notice-error-h2">
3
+ Database Issue
4
+ </h2>
5
+ <p class="sg-red-color sg-notice-error-p">
6
+ Some of the BackupGuard Database tables weren't created for some reason.
7
+ <br>
8
+ That could become a problem when backing up. Please, contact our support team for the resolution of the problem.
9
+ </p>
10
+ <div class="sg-wrapper-less sg-notice-contact-wrapper">
11
+ <a href="<?php echo BACKUP_GUARD_WORDPRESS_SUPPORT_URL; ?>" class="btn btn-success" target="_blank">Contact us</a>
12
+ </div>
13
+ </div>