Really Simple SSL - Version 4.0.0

Version Description

  • New user interface
  • Fix: transient stored with 'WEEK_IN_SECONDS' as string instead of constant
  • Improvement: notices dashboard, with dismissable notices
  • Improvement: improved naming of settings, and instructions
  • Improvement: articles in tips & tricks section
Download this release

Release Info

Developer RogierLankhorst
Plugin Icon 128x128 Really Simple SSL
Version 4.0.0
Comparing to
See all releases

Code changes from version 3.3.4 to 4.0.0

Files changed (49) hide show
  1. assets/logo-really-simple-ssl.png +0 -0
  2. assets/really-simple-ssl-logo.svg +1594 -0
  3. assets/ziprecipes.png +0 -0
  4. class-admin.php +1504 -1415
  5. class-certificate.php +29 -6
  6. class-front-end.php +1 -43
  7. class-help.php +36 -18
  8. class-mixed-content-fixer.php +0 -1
  9. class-multisite.php +401 -361
  10. class-site-health.php +96 -30
  11. css/main-rtl.css +1 -1
  12. css/main-rtl.min.css +1 -1
  13. css/main.css +162 -146
  14. css/main.css.map +1 -0
  15. css/main.less +697 -0
  16. css/main.min.css +1 -1
  17. force-deactivate.txt +84 -100
  18. grid/css/grid-rtl.css +361 -0
  19. grid/css/grid-rtl.css.map +1 -0
  20. grid/css/grid-rtl.less +441 -0
  21. grid/css/grid-rtl.min.css +1 -0
  22. grid/css/grid.css +678 -0
  23. grid/css/grid.css.map +1 -0
  24. grid/css/grid.less +766 -0
  25. grid/css/grid.min.css +1 -0
  26. grid/templates/grid-container.php +1 -0
  27. grid/templates/grid-element.php +14 -0
  28. grid/templates/header.php +8 -0
  29. grid/templates/ms-settings.php +3 -0
  30. grid/templates/other-plugins.php +60 -0
  31. grid/templates/progress-footer.php +56 -0
  32. grid/templates/progress-header.php +20 -0
  33. grid/templates/progress.php +60 -0
  34. grid/templates/settings-footer.php +3 -0
  35. grid/templates/settings.php +7 -0
  36. grid/templates/support-footer.php +8 -0
  37. grid/templates/support.php +45 -0
  38. grid/templates/tips-tricks-footer.php +3 -0
  39. grid/templates/tips-tricks.php +53 -0
  40. includes/simple-scrollbar.css +51 -0
  41. includes/simple-scrollbar.js +165 -0
  42. includes/simple-scrollbar.min.css +1 -0
  43. includes/simple-scrollbar.min.js +1 -0
  44. js/scripts.js +134 -0
  45. js/scripts.min.js +1 -0
  46. languages/really-simple-ssl.pot +949 -0
  47. readme.txt +10 -5
  48. rlrsssl-really-simple-ssl.php +80 -26
  49. system-status.php +157 -0
assets/logo-really-simple-ssl.png CHANGED
Binary file
assets/really-simple-ssl-logo.svg ADDED
@@ -0,0 +1,1594 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="891px" height="140px" viewBox="0 0 891 140" enable-background="new 0 0 891 140" xml:space="preserve"> <image id="image0" width="891" height="140" x="0" y="0"
4
+ xlink:href="data:image/png;base64,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" />
1594
+ </svg>
assets/ziprecipes.png CHANGED
Binary file
class-admin.php CHANGED
@@ -5,10 +5,10 @@ class rsssl_admin extends rsssl_front_end
5
  {
6
 
7
  private static $_this;
8
-
9
  public $wpconfig_siteurl_not_fixed = FALSE;
10
  public $no_server_variable = FALSE;
11
  public $errors = Array();
 
12
 
13
  public $do_wpconfig_loadbalancer_fix = FALSE;
14
  public $site_has_ssl = FALSE;
@@ -20,14 +20,12 @@ class rsssl_admin extends rsssl_front_end
20
  //general settings
21
  public $capability = 'activate_plugins';
22
 
23
- public $ssl_test_page_error;
24
  public $htaccess_test_success = FALSE;
25
  public $plugin_version = rsssl_version; //deprecated, but used in pro plugin until 1.0.25
26
 
27
  public $plugin_dir = "really-simple-ssl";
28
  public $plugin_filename = "rlrsssl-really-simple-ssl.php";
29
  public $ABSpath;
30
-
31
  public $do_not_edit_htaccess = FALSE;
32
  public $javascript_redirect = FALSE;
33
  public $htaccess_redirect = FALSE;
@@ -39,13 +37,10 @@ class rsssl_admin extends rsssl_front_end
39
  public $debug = TRUE;
40
  public $debug_log;
41
 
42
- public $plugin_conflict = ARRAY();
43
  public $plugin_db_version;
44
- public $plugin_upgraded;
45
- public $mixed_content_fixer_status = "OK";
46
  public $ssl_type = "NA";
47
-
48
- private $pro_url = "https://www.really-simple-ssl.com/pro";
49
 
50
  function __construct()
51
  {
@@ -61,13 +56,21 @@ class rsssl_admin extends rsssl_front_end
61
 
62
  $this->get_plugin_upgraded(); //call always, otherwise db version will not match anymore.
63
 
64
- if (isset($_GET['rsssl_dismiss_review_notice'])){
65
- $this->get_dismiss_review_notice();
66
- }
 
 
67
 
68
  register_deactivation_hook(dirname(__FILE__) . "/" . $this->plugin_filename, array($this, 'deactivate'));
69
-
70
  add_action('admin_init', array($this, 'add_privacy_info'));
 
 
 
 
 
 
 
71
 
72
  }
73
 
@@ -76,6 +79,31 @@ class rsssl_admin extends rsssl_front_end
76
  return self::$_this;
77
  }
78
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  public function add_privacy_info()
80
  {
81
  if (!function_exists('wp_add_privacy_policy_content')) {
@@ -93,10 +121,15 @@ class rsssl_admin extends rsssl_front_end
93
  );
94
  }
95
 
96
- public function get_dismiss_review_notice() {
97
- $this->review_notice_shown = true;
98
- $this->dismiss_review_notice = true;
99
- $this->save_options();
 
 
 
 
 
100
  }
101
 
102
  /**
@@ -134,17 +167,20 @@ class rsssl_admin extends rsssl_front_end
134
  add_action('shutdown', 'flush_rewrite_rules');
135
  }
136
 
137
- /*
138
- Detect configuration when:
139
- - SSL activation just confirmed.
140
- - on settings page
141
- - No SSL detected
142
- */
143
 
 
 
 
 
 
 
144
 
145
  //when configuration should run again
146
- if ($this->clicked_activate_ssl() || !$this->ssl_enabled || !$this->site_has_ssl || $is_on_settings_page || is_network_admin()) {
147
-
148
  if (is_multisite()) $this->build_domain_list();//has to come after clicked_activate_ssl, otherwise this domain won't get counted.
149
  $this->detect_configuration();
150
 
@@ -170,27 +206,19 @@ class rsssl_admin extends rsssl_front_end
170
 
171
  //when SSL is enabled, and not enabled by user, ask for activation.
172
  add_action("admin_notices", array($this, 'show_notice_activate_ssl'), 10);
173
- add_action('rsssl_activation_notice', array($this, 'no_ssl_detected'), 10);
174
  add_action('rsssl_activation_notice', array($this, 'ssl_detected'), 10);
175
  add_action('rsssl_activation_notice_inner', array($this, 'almost_ready_to_migrate'), 30);
176
- add_action('rsssl_activation_notice_inner', array($this, 'show_pro'), 40);
177
- add_action('rsssl_activation_notice_inner', array($this, 'show_enable_ssl_button'), 50);
178
-
179
- add_action('plugins_loaded', array($this, 'check_plugin_conflicts'), 30);
180
 
181
  //add the settings page for the plugin
182
  add_action('admin_enqueue_scripts', array($this, 'enqueue_assets'));
183
- add_action('admin_init', array($this, 'load_translation'), 20);
184
 
185
  //settings page, form and settings link in the plugins page
186
  add_action('admin_menu', array($this, 'add_settings_page'), 40);
187
- add_action('admin_init', array($this, 'create_form'), 40);
 
188
  add_action('admin_init', array($this, 'listen_for_deactivation'), 40);
189
-
190
- //Only redirect while on own settings page, otherwise deactivate link in plugins overview will break.
191
- //if ($this->is_settings_page()) {
192
- add_action( 'update_option_rlrsssl_options', array( $this, 'maybe_remove_highlight_from_url' ) );
193
- //}
194
 
195
  $plugin = rsssl_plugin;
196
  add_filter("plugin_action_links_$plugin", array($this, 'plugin_settings_link'));
@@ -198,15 +226,12 @@ class rsssl_admin extends rsssl_front_end
198
  //Add update notification to Settings admin menu
199
  add_action('admin_menu', array($this, 'rsssl_edit_admin_menu') );
200
 
201
- //check if the uninstallfile is safely renamed to php.
202
- $this->check_for_uninstall_file();
203
 
204
  //callbacks for the ajax dismiss buttons
205
- add_action('wp_ajax_dismiss_htaccess_warning', array($this, 'dismiss_htaccess_warning_callback'));
206
  add_action('wp_ajax_dismiss_success_message', array($this, 'dismiss_success_message_callback'));
207
  add_action('wp_ajax_rsssl_dismiss_review_notice', array($this, 'dismiss_review_notice_callback'));
208
  add_action('wp_ajax_rsssl_dismiss_settings_notice', array($this, 'dismiss_settings_notice_callback'));
209
-
210
 
211
  //handle notices
212
  add_action('admin_notices', array($this, 'show_notices'));
@@ -217,7 +242,22 @@ class rsssl_admin extends rsssl_front_end
217
  add_action("update_option_rlrsssl_options", array($this, "update_htaccess_after_settings_save"), 20, 3);
218
  }
219
 
220
- /*
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  * Deactivate the plugin while keeping SSL
222
  * Activated when the 'uninstall_keep_ssl' button is clicked in the settings tab
223
  *
@@ -225,14 +265,12 @@ class rsssl_admin extends rsssl_front_end
225
 
226
  public function listen_for_deactivation()
227
  {
228
-
229
- //check if we are on ssl settings page
230
- if (!$this->is_settings_page()) return;
231
  //check user role
232
  if (!current_user_can($this->capability)) return;
233
 
234
  //check nonce
235
  if (!isset($_GET['token']) || (!wp_verify_nonce($_GET['token'], 'rsssl_deactivate_plugin'))) return;
 
236
  //check for action
237
  if (isset($_GET["action"]) && $_GET["action"] == 'uninstall_keep_ssl') {
238
  //deactivate plugin, but don't revert to http.
@@ -240,7 +278,6 @@ class rsssl_admin extends rsssl_front_end
240
  $plugin = plugin_basename(trim($plugin));
241
 
242
  if (is_multisite()) {
243
-
244
  $network_current = get_site_option('active_sitewide_plugins', array());
245
  if (is_plugin_active_for_network($plugin)) {
246
  unset($network_current[$plugin]);
@@ -268,13 +305,11 @@ class rsssl_admin extends rsssl_front_end
268
  }
269
  }
270
 
271
-
272
- /*
273
  * Remove the plugin from the active plugins array when called from listen_for_deactivation
274
  *
275
  * */
276
 
277
-
278
  public function remove_plugin_from_array($plugin, $current)
279
  {
280
  $key = array_search($plugin, $current);
@@ -284,7 +319,7 @@ class rsssl_admin extends rsssl_front_end
284
  return $current;
285
  }
286
 
287
- /*
288
  * @Since 3.1
289
  *
290
  * Check if site uses an htaccess.conf file, used in bitnami installations
@@ -312,10 +347,10 @@ class rsssl_admin extends rsssl_front_end
312
  return $sites;
313
  }
314
 
315
- /*
316
- The new get_sites function returns an object.
317
-
318
- */
319
 
320
  public function switch_to_blog_bw_compatible($site)
321
  {
@@ -329,21 +364,17 @@ class rsssl_admin extends rsssl_front_end
329
  }
330
 
331
 
332
- /*
333
- checks if the user just clicked the "activate SSL" button.
334
- */
335
 
336
  private function clicked_activate_ssl()
337
  {
338
  if (!current_user_can($this->capability)) return;
339
- //if (!isset( $_POST['rsssl_nonce'] ) || !wp_verify_nonce( $_POST['rsssl_nonce'], 'rsssl_nonce' )) return false;
340
 
341
  if (isset($_POST['rsssl_do_activate_ssl'])) {
342
  $this->activate_ssl();
343
-
344
- //if (empty(get_option('rsssl_activation_timestamp'))) {
345
- update_option('rsssl_activation_timestamp', time());
346
- //}
347
 
348
  return true;
349
  }
@@ -352,21 +383,21 @@ class rsssl_admin extends rsssl_front_end
352
  }
353
 
354
 
355
- /*
356
- Activate the SSL for this site
357
- */
358
 
359
  public function activate_ssl()
360
  {
361
  $this->ssl_enabled = true;
362
  $this->wp_redirect = true;
363
-
364
  $this->set_siteurl_to_ssl();
365
  $this->save_options();
366
-
367
-
368
  }
369
 
 
 
 
370
 
371
  public function deactivate_ssl()
372
  {
@@ -378,10 +409,11 @@ class rsssl_admin extends rsssl_front_end
378
  $this->save_options();
379
  }
380
 
381
- public function redirect_to_settings_page_after_activation() {
382
  if (isset($_GET['page']) && $_GET['page'] == 'rlrsssl_really_simple_ssl') return;
383
  $url = add_query_arg( array(
384
  "page" => "rlrsssl_really_simple_ssl",
 
385
  ), admin_url( "options-general.php" ) );
386
  wp_redirect( $url );
387
  exit;
@@ -400,16 +432,15 @@ class rsssl_admin extends rsssl_front_end
400
  return apply_filters('rsssl_wpconfig_ok_check', $result);
401
  }
402
 
403
- /*
404
- This message is shown when no SSL is not enabled by the user yet
405
- */
406
-
407
 
408
  public function show_notice_activate_ssl()
409
  {
410
  //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
411
  $screen = get_current_screen();
412
- if ( $screen->parent_base === 'edit' ) return;
413
 
414
  if ($this->ssl_enabled) return;
415
 
@@ -431,98 +462,186 @@ class rsssl_admin extends rsssl_front_end
431
 
432
  }
433
 
434
- public function ssl_detected()
435
- {
436
- if ($this->site_has_ssl) {
437
- ?>
438
- <style>
439
- .activate-ssl {
440
- border-left: 4px solid #F8BE2E;
441
- }
442
- .activate-ssl .button {
443
- margin-bottom:20px;
444
- }
445
- <?php echo apply_filters('rsssl_pro_inline_style', ''); ?>
446
- </style>
447
- <div id="message" class="notice activate-ssl <?php echo apply_filters('rsssl_activate_notice_class', '');?>">
448
- <?php
449
- do_action('rsssl_activation_notice_inner');
450
- ?>
451
- </div>
452
- <?php
453
- }
454
- }
455
 
456
- public function no_ssl_detected()
457
  {
458
- if (!$this->site_has_ssl) { ?>
459
- <style>
460
- .rsssl-notice {
461
- background-color: #fff;
462
- border-left: 4px solid #F8BE2E;
463
- padding: 1px 15px;
464
- }
465
- </style>
466
- <div id="message" class="error notice rsssl-notice-certificate">
467
- <h1><?php echo __("Detected possible certificate issues", "really-simple-ssl"); ?></h1>
468
- <p>
469
- <?php
470
- $reload_https_url = esc_url_raw("https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
471
- $link_open = '<p><a class="button" target="_blank" href="' . $reload_https_url . '">';
472
- $link_close = '</a></p>';
473
-
474
- printf(__("Really Simple SSL failed to detect a valid SSL certificate. If you do have an SSL certificate, try to reload this page over https by clicking this button: %sReload over https%s The built-in certificate check will run once daily, to force a new certificate check visit the SSL settings page. ", "really-simple-ssl"), $link_open, $link_close);
475
-
476
- $ssl_test_url = "https://www.ssllabs.com/ssltest/";
477
- $link_open = '<a target="_blank" href="' . $ssl_test_url . '">';
478
- $link_close = '</a>';
479
-
480
- printf(__("Really Simple SSL requires a valid SSL certificate. You can check your certificate on %sQualys SSL Labs%s.", "really-simple-ssl"), $link_open, $link_close);
481
- echo "<br><br>";
482
- printf(__("If your site has cPanel, you can %sget a free SSL certificate%s. ", "really-simple-ssl"), '<a target="_blank" href="https://really-simple-ssl.com/knowledge-base/how-to-install-a-free-ssl-certificate-on-your-wordpress-cpanel-hosting/">', '</a>');
483
-
484
- ?>
485
- </p>
486
- </div>
487
- <?php }
488
- }
489
-
490
 
491
- public function almost_ready_to_migrate()
492
- { ?>
493
- <h1><?php _e("Almost ready to migrate to SSL!", "really-simple-ssl"); ?></h1>
494
 
495
- <?php //action?>
 
 
496
 
 
 
 
 
 
497
 
498
- <?php _e("Some things can't be done automatically. Before you migrate, please check for: ", 'really-simple-ssl'); ?>
499
- <p>
500
- <ul class="message-ul">
501
- <li class="message-li"><?php _e('Http references in your .css and .js files: change any http:// into //', 'really-simple-ssl'); ?></li>
502
- <li class="message-li"><?php _e('Images, stylesheets or scripts from a domain without an SSL certificate: remove them or move to your own server', 'really-simple-ssl'); ?></li><?php
 
 
 
 
 
503
 
504
  $backup_link = "https://really-simple-ssl.com/knowledge-base/backing-up-your-site/";
505
  $link_open = '<a target="_blank" href="'.$backup_link.'">';
506
  $link_close = '</a>';
507
  ?>
508
- <li class="message-li"><?php printf(__("We strongly recommend to take a %sbackup%s of your site before activating SSL", 'really-simple-ssl'), $link_open, $link_close); ?> </li>
 
509
  </ul>
510
- </p>
511
- <style>
512
- .message-ul {
513
- list-style-type: none;
514
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
515
 
516
- #message .message-li::before {
517
- vertical-align: middle;
518
- margin-right: 25px;
519
- color: lightgrey;
520
- content: "\f345";
521
- font: 400 21px/1 dashicons;
522
- }
523
- </style>
524
- <?php
525
- }
526
 
527
  /**
528
  * @since 2.3
@@ -532,53 +651,17 @@ class rsssl_admin extends rsssl_front_end
532
 
533
  public function show_enable_ssl_button()
534
  {
535
- if ($this->site_has_ssl || (defined('RSSSL_FORCE_ACTIVATE') && RSSSL_FORCE_ACTIVATE)) {
536
- ?>
537
- <style>
538
- .btn-premium {
539
- margin-left: 10px !important;
540
- }
541
- .btn-premium-activated {
542
- padding-top: 10px;
543
- padding-bottom: 10px;
544
- }
545
- </style>
546
- <p>
547
- <div class="rsssl-activate-ssl-button">
548
  <form action="" method="post">
549
  <?php wp_nonce_field('rsssl_nonce', 'rsssl_nonce'); ?>
550
  <input type="submit" class='button button-primary'
551
  value="<?php _e("Go ahead, activate SSL!", "really-simple-ssl"); ?>" id="rsssl_do_activate_ssl"
552
  name="rsssl_do_activate_ssl">
553
  <?php if (!defined("rsssl_pro_version") ) { ?>
554
- <a class="button action btn-premium" href="https://really-simple-ssl.com/pro" target="_blank"><?php _e("Get ready with Pro", "really-simple-ssl"); ?></a>
555
  <?php } ?>
556
  </form>
557
- <b><?php _e("You may need to login in again.", "really-simple-ssl") ?></b>
558
- <div id="rsssl-logo" style="float: right; margin-top: -35px;"><img width=180px" src="<?php echo rsssl_url?>/assets/logo-really-simple-ssl.png" alt="review-logo"></div>
559
- </div>
560
- </p>
561
- <?php
562
- }
563
- }
564
-
565
- /**
566
- * @since 2.3
567
- * Shows option to buy pro
568
- * @access public
569
- *
570
- */
571
-
572
- public function show_pro()
573
- {
574
- if ($this->site_has_ssl) {
575
- ?>
576
- <p><?php _e('You can also let the automatic scan of the pro version handle this for you, and get premium support, increased security with HSTS and more!', 'really-simple-ssl'); ?>
577
- <a target="_blank"
578
- href="<?php echo $this->pro_url; ?>"><?php _e("Check out Really Simple SSL Pro", "really-simple-ssl"); ?></a>
579
- </p>
580
- <?php
581
- }
582
  }
583
 
584
  /**
@@ -598,15 +681,18 @@ class rsssl_admin extends rsssl_front_end
598
  return false;
599
  }
600
 
601
- /*
602
- * Check if the uninstall file is renamed to .php
603
- */
 
 
604
 
605
- protected function check_for_uninstall_file()
606
  {
607
  if (file_exists(dirname(__FILE__) . '/force-deactivate.php')) {
608
- $this->errors["DEACTIVATE_FILE_NOT_RENAMED"] = true;
609
  }
 
610
  }
611
 
612
  /**
@@ -630,7 +716,6 @@ class rsssl_admin extends rsssl_front_end
630
  $this->review_notice_shown = isset($options['review_notice_shown']) ? $options['review_notice_shown'] : FALSE;
631
  $this->ssl_success_message_shown = isset($options['ssl_success_message_shown']) ? $options['ssl_success_message_shown'] : FALSE;
632
  $this->plugin_db_version = isset($options['plugin_db_version']) ? $options['plugin_db_version'] : "1.0";
633
- $this->debug = isset($options['debug']) ? $options['debug'] : FALSE;
634
  $this->do_not_edit_htaccess = isset($options['do_not_edit_htaccess']) ? $options['do_not_edit_htaccess'] : FALSE;
635
  $this->htaccess_redirect = isset($options['htaccess_redirect']) ? $options['htaccess_redirect'] : FALSE;
636
  $this->switch_mixed_content_fixer_hook = isset($options['switch_mixed_content_fixer_hook']) ? $options['switch_mixed_content_fixer_hook'] : FALSE;
@@ -644,9 +729,9 @@ class rsssl_admin extends rsssl_front_end
644
  $network_htaccess_redirect = isset($network_options["htaccess_redirect"]) ? $network_options["htaccess_redirect"] : false;
645
  $network_do_not_edit_htaccess = isset($network_options["do_not_edit_htaccess"]) ? $network_options["do_not_edit_htaccess"] : false;
646
  /*
647
- If multiste, and networkwide, only the networkwide setting counts.
648
- if multisite, and per site, only the networkwide setting counts if it is true.
649
- */
650
  $ssl_enabled_networkwide = isset($network_options["ssl_enabled_networkwide"]) ? $network_options["ssl_enabled_networkwide"] : false;
651
  if ($ssl_enabled_networkwide) {
652
  $this->htaccess_redirect = $network_htaccess_redirect;
@@ -685,7 +770,8 @@ class rsssl_admin extends rsssl_front_end
685
  $nr_of_sites = RSSSL()->rsssl_multisite->get_total_blog_count();
686
  $sites = RSSSL()->rsssl_multisite->get_sites_bw_compatible(0, $nr_of_sites);
687
 
688
- if ($this->debug) $this->trace_log("building domain list for multisite...");
 
689
  foreach ($sites as $site) {
690
  $this->switch_to_blog_bw_compatible($site);
691
  $options = get_option('rlrsssl_options');
@@ -697,12 +783,15 @@ class rsssl_admin extends rsssl_front_end
697
  }
698
 
699
  if (is_plugin_active(rsssl_plugin) && $ssl_enabled) {
700
- if ($this->debug) $this->trace_log("adding: " . home_url());
701
  $this->sites[] = home_url();
 
702
  }
703
  restore_current_blog(); //switches back to previous blog, not current, so we have to do it each loop
704
  }
705
 
 
 
706
  set_transient('rsssl_domain_list', $this->sites, HOUR_IN_SECONDS);
707
 
708
  $this->save_options();
@@ -721,11 +810,23 @@ class rsssl_admin extends rsssl_front_end
721
  public function get_plugin_upgraded()
722
  {
723
  if ($this->plugin_db_version != rsssl_version) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
724
  $this->plugin_db_version = rsssl_version;
725
- $this->plugin_upgraded = true;
726
  $this->save_options();
727
  }
728
- $this->plugin_upgraded = false;
729
  }
730
 
731
  /**
@@ -741,10 +842,10 @@ class rsssl_admin extends rsssl_front_end
741
 
742
  public function trace_log($msg)
743
  {
744
- if (!$this->debug) return;
 
745
  if (strpos($this->debug_log, $msg)) return;
746
- $this->debug_log = $this->debug_log . "<br>" . $msg;
747
- error_log($msg);
748
  }
749
 
750
  /**
@@ -795,7 +896,7 @@ class rsssl_admin extends rsssl_front_end
795
  }
796
 
797
  if (!is_multisite()) {
798
- $this->redirect_to_settings_page_after_activation();
799
  }
800
 
801
  }
@@ -933,16 +1034,12 @@ class rsssl_admin extends rsssl_front_end
933
  $wpconfig = preg_replace($siteurl_pattern, "define('WP_SITEURL','https://", $wpconfig);
934
  file_put_contents($wpconfig_path, $wpconfig);
935
  } else {
936
- if ($this->debug) {
937
- $this->trace_log("not able to fix wpconfig siteurl/homeurl.");
938
- }
939
  //only when siteurl or homeurl is defined in wpconfig, and wpconfig is not writable is there a possible issue because we cannot edit the defined urls.
940
  $this->wpconfig_siteurl_not_fixed = TRUE;
941
  }
942
  } else {
943
- if ($this->debug) {
944
- $this->trace_log("no siteurl/homeurl defines in wpconfig");
945
- }
946
  }
947
  }
948
 
@@ -1016,19 +1113,13 @@ class rsssl_admin extends rsssl_front_end
1016
  }
1017
 
1018
  file_put_contents($wpconfig_path, $wpconfig);
1019
- if ($this->debug) {
1020
- $this->trace_log("wp config loadbalancer fix inserted");
1021
- }
1022
  } else {
1023
- if ($this->debug) {
1024
- $this->trace_log("wp config loadbalancer fix FAILED");
1025
- }
1026
  $this->wpconfig_loadbalancer_fix_failed = TRUE;
1027
  }
1028
  } else {
1029
- if ($this->debug) {
1030
- $this->trace_log("wp config loadbalancer fix already in place, great!");
1031
- }
1032
  }
1033
  $this->save_options();
1034
 
@@ -1054,7 +1145,7 @@ class rsssl_admin extends rsssl_front_end
1054
 
1055
  //check permissions
1056
  if (!is_writable($wpconfig_path)) {
1057
- if ($this->debug) $this->trace_log("wp-config.php not writable");
1058
  return;
1059
  }
1060
 
@@ -1069,15 +1160,11 @@ class rsssl_admin extends rsssl_front_end
1069
 
1070
  //check if the fix is already there
1071
  if (strpos($wpconfig, "//Begin Really Simple SSL Server variable fix") !== FALSE) {
1072
- if ($this->debug) {
1073
- $this->trace_log("wp config server variable fix already in place, great!");
1074
- }
1075
  return;
1076
  }
1077
 
1078
- if ($this->debug) {
1079
- $this->trace_log("Adding server variable to wpconfig");
1080
- }
1081
  $rule = $this->get_server_variable_fix_code();
1082
 
1083
  $insert_after = "<?php";
@@ -1086,7 +1173,7 @@ class rsssl_admin extends rsssl_front_end
1086
  $wpconfig = substr_replace($wpconfig, $rule, $pos + 1 + strlen($insert_after), 0);
1087
  }
1088
  file_put_contents($wpconfig_path, $wpconfig);
1089
- if ($this->debug) $this->trace_log("wp config server variable fix inserted");
1090
 
1091
  $this->save_options();
1092
  }
@@ -1104,12 +1191,12 @@ class rsssl_admin extends rsssl_front_end
1104
  protected function get_server_variable_fix_code()
1105
  {
1106
  if (is_multisite() && !RSSSL()->rsssl_multisite->ssl_enabled_networkwide && RSSSL()->rsssl_multisite->is_multisite_subfolder_install()) {
1107
- if ($this->debug) $this->trace_log("per site activation on subfolder install, wp config server variable fix skipped");
1108
  return "";
1109
  }
1110
 
1111
  if (is_multisite() && !RSSSL()->rsssl_multisite->ssl_enabled_networkwide && count($this->sites) == 0) {
1112
- if ($this->debug) $this->trace_log("no sites left with SSL, wp config server variable fix skipped");
1113
  return "";
1114
  }
1115
 
@@ -1117,9 +1204,7 @@ class rsssl_admin extends rsssl_front_end
1117
  $rule = "\n" . "//Begin Really Simple SSL Server variable fix" . "\n";
1118
  foreach ($this->sites as $domain) {
1119
  //remove http or https.
1120
- if ($this->debug) {
1121
- $this->trace_log("getting server variable rule for:" . $domain);
1122
- }
1123
  $domain = preg_replace("/(http:\/\/|https:\/\/)/", "", $domain);
1124
 
1125
  //we excluded subfolders, so treat as domain
@@ -1158,7 +1243,7 @@ class rsssl_admin extends rsssl_front_end
1158
 
1159
  //check for permissions
1160
  if (!is_writable($wpconfig_path)) {
1161
- if ($this->debug) $this->trace_log("could not remove wpconfig edits, wp-config.php not writable");
1162
  $this->errors['wpconfig not writable'] = TRUE;
1163
  return;
1164
  }
@@ -1227,8 +1312,6 @@ class rsssl_admin extends rsssl_front_end
1227
 
1228
  public function save_options()
1229
  {
1230
- delete_transient('rsssl_plusone_count');
1231
-
1232
  //any options added here should also be added to function options_validate()
1233
  $options = array(
1234
  'site_has_ssl' => $this->site_has_ssl,
@@ -1238,7 +1321,6 @@ class rsssl_admin extends rsssl_front_end
1238
  'ssl_success_message_shown' => $this->ssl_success_message_shown,
1239
  'autoreplace_insecure_links' => $this->autoreplace_insecure_links,
1240
  'plugin_db_version' => $this->plugin_db_version,
1241
- 'debug' => $this->debug,
1242
  'do_not_edit_htaccess' => $this->do_not_edit_htaccess,
1243
  'htaccess_redirect' => $this->htaccess_redirect,
1244
  'ssl_enabled' => $this->ssl_enabled,
@@ -1249,23 +1331,11 @@ class rsssl_admin extends rsssl_front_end
1249
  'dismiss_review_notice' => $this->dismiss_review_notice,
1250
 
1251
  );
1252
- update_option('rlrsssl_options', $options);
1253
- }
1254
-
1255
- /**
1256
- * Load the translation files
1257
- *
1258
- * @since 1.0
1259
- *
1260
- * @access public
1261
- *
1262
- */
1263
 
1264
- public function load_translation()
1265
- {
1266
- load_plugin_textdomain('really-simple-ssl', FALSE, dirname(plugin_basename(__FILE__)) . '/languages/');
1267
  }
1268
 
 
1269
  /**
1270
  * Handles deactivation of this plugin
1271
  *
@@ -1303,6 +1373,7 @@ class rsssl_admin extends rsssl_front_end
1303
  RSSSL()->rsssl_multisite->deactivate();
1304
  if (!RSSSL()->rsssl_multisite->ssl_enabled_networkwide) $this->build_domain_list();
1305
  }
 
1306
 
1307
  $this->remove_wpconfig_edit();
1308
  $this->removeHtaccessEdit();
@@ -1351,7 +1422,7 @@ class rsssl_admin extends rsssl_front_end
1351
 
1352
  public function detect_configuration()
1353
  {
1354
- $this->trace_log("<b>" . "Detecting configuration" . "</b>");
1355
  //if current page is on SSL, we can assume SSL is available, even when an errormsg was returned
1356
  if ($this->is_ssl_extended()) {
1357
  $this->site_has_ssl = TRUE;
@@ -1434,10 +1505,7 @@ class rsssl_admin extends rsssl_front_end
1434
 
1435
  $this->htaccess_test_success = get_transient('rsssl_htaccess_test_success');
1436
  if (!$this->htaccess_test_success) {
1437
-
1438
- if ($this->debug) {
1439
- $this->trace_log("testing htaccess rules...");
1440
- }
1441
 
1442
  $filecontents = "";
1443
  $testpage_url = trailingslashit($this->test_url()) . "testssl/";
@@ -1597,7 +1665,7 @@ class rsssl_admin extends rsssl_front_end
1597
  $this->save_options();
1598
  } else {
1599
  $this->errors['HTACCESS_NOT_WRITABLE'] = TRUE;
1600
- if ($this->debug) $this->trace_log("could not remove rules from htaccess, file not writable");
1601
  }
1602
  }
1603
 
@@ -1636,7 +1704,7 @@ class rsssl_admin extends rsssl_front_end
1636
  * @since 2.0
1637
  *
1638
  */
1639
-
1640
  public function htaccess_redirect_allowed()
1641
  {
1642
  if (is_multisite() && RSSSL()->rsssl_multisite->is_per_site_activated_multisite_subfolder_install()) {
@@ -1748,6 +1816,63 @@ class rsssl_admin extends rsssl_front_end
1748
  return $result;
1749
  }
1750
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1751
 
1752
  /**
1753
  * Adds redirect to https rules to the .htaccess file or htaccess.conf on Bitnami.
@@ -1831,7 +1956,7 @@ class rsssl_admin extends rsssl_front_end
1831
  }
1832
 
1833
  if (!is_writable($this->htaccess_file())) {
1834
- if ($this->debug) $this->trace_log(".htaccess not writable.");
1835
  return;
1836
  }
1837
 
@@ -1902,6 +2027,10 @@ class rsssl_admin extends rsssl_front_end
1902
  }
1903
  }
1904
 
 
 
 
 
1905
  set_transient('rsssl_mixed_content_fixer_detected', $mixed_content_fixer_detected, 600);
1906
  }
1907
 
@@ -1931,27 +2060,33 @@ class rsssl_admin extends rsssl_front_end
1931
  $this->mixed_content_fixer_detected = true;
1932
  }
1933
 
 
 
 
 
 
1934
  return $mixed_content_fixer_detected;
1935
  }
1936
 
1937
- /**
1938
  * Create redirect rules for the .htaccess.
 
 
 
1939
  *
1940
- * @since 2.1
1941
- *
1942
- * @access public
1943
- *
1944
- */
1945
-
1946
- public function get_redirect_rules($manual = false)
1947
  {
1948
  $this->trace_log("retrieving redirect rules");
1949
  //only add the redirect rules when a known type of SSL was detected. Otherwise, we use https.
1950
  $rule = "";
1951
-
1952
  //if the htaccess test was successfull, and we know the redirectype, edit
1953
  if ($this->htaccess_redirect && ($manual || $this->htaccess_test_success) && $this->ssl_type != "NA") {
1954
- $this->trace_log("starting insertion of .htaccess redirects.");
1955
  $rule .= "<IfModule mod_rewrite.c>" . "\n";
1956
  $rule .= "RewriteEngine on" . "\n";
1957
 
@@ -2004,9 +2139,7 @@ class rsssl_admin extends rsssl_front_end
2004
  $rule = strrev(implode("", explode(strrev("[OR]"), strrev($rule), 2)));
2005
  }
2006
  } else {
2007
- if ($this->debug) {
2008
- $this->trace_log("single site or networkwide activation");
2009
- }
2010
  }
2011
 
2012
  //fastest cache compatibility
@@ -2034,7 +2167,6 @@ class rsssl_admin extends rsssl_front_end
2034
  return $rule;
2035
  }
2036
 
2037
-
2038
  /**
2039
  * Show warning when wpconfig could not be fixed
2040
  *
@@ -2048,49 +2180,49 @@ class rsssl_admin extends rsssl_front_end
2048
  {
2049
  //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
2050
  $screen = get_current_screen();
2051
- if ( $screen->parent_base === 'edit' ) return;
2052
- ?>
2053
- <div id="message" class="error notice">
2054
- <h1><?php echo __("System detection encountered issues", "really-simple-ssl"); ?></h1>
2055
-
2056
- <?php if ($this->wpconfig_siteurl_not_fixed) { ?>
2057
- <p>
2058
- <?php echo __("A definition of a siteurl or homeurl was detected in your wp-config.php, but the file is not writable.", "really-simple-ssl"); ?>
2059
- </p>
2060
- <p><?php echo __("Set your wp-config.php to writable and reload this page.", "really-simple-ssl"); ?></p>
2061
- <?php }
2062
- if ($this->do_wpconfig_loadbalancer_fix) { ?>
2063
- <p><?php echo __("Your wp-config.php has to be edited, but is not writable.", "really-simple-ssl"); ?></p>
2064
- <p><?php echo __("Because your site is behind a loadbalancer and is_ssl() returns false, you should add the following line of code to your wp-config.php.", "really-simple-ssl"); ?>
2065
- <br><br><code>
2066
- //Begin Really Simple SSL Load balancing fix<br>
2067
- if ((isset($_ENV["HTTPS"]) && ("on" == $_ENV["HTTPS"]))<br>
2068
- || (isset($_SERVER["HTTP_X_FORWARDED_SSL"]) && (strpos($_SERVER["HTTP_X_FORWARDED_SSL"], "1") !== false))<br>
2069
- || (isset($_SERVER["HTTP_X_FORWARDED_SSL"]) && (strpos($_SERVER["HTTP_X_FORWARDED_SSL"], "on") !== false))<br>
2070
- || (isset($_SERVER["HTTP_CF_VISITOR"]) && (strpos($_SERVER["HTTP_CF_VISITOR"], "https") !== false))<br>
2071
- || (isset($_SERVER["HTTP_CLOUDFRONT_FORWARDED_PROTO"]) && (strpos($_SERVER["HTTP_CLOUDFRONT_FORWARDED_PROTO"], "https") !== false))<br>
2072
- || (isset($_SERVER["HTTP_X_FORWARDED_PROTO"]) && (strpos($_SERVER["HTTP_X_FORWARDED_PROTO"], "https") !== false))<br>
2073
- || (isset($_SERVER["HTTP_X_PROTO"]) && (strpos($_SERVER["HTTP_X_PROTO"], "SSL") !== false))<br>
2074
- ) {<br>
2075
- &nbsp;&nbsp; $_SERVER["HTTPS"] = "on";<br>
2076
- }<br>
2077
- //END Really Simple SSL
2078
- </code><br>
2079
- </p>
2080
- <p><?php echo __("Or set your wp-config.php to writable and reload this page.", "really-simple-ssl"); ?></p>
2081
- <?php
2082
- }
2083
 
2084
- if ($this->no_server_variable) {
2085
- ?>
2086
- <p><?php echo __('Because your server does not pass a variable with which WordPress can detect SSL, WordPress may create redirect loops on SSL.', 'really-simple-ssl'); ?></p>
2087
- <p><?php echo __("Set your wp-config.php to writable and reload this page.", "really-simple-ssl"); ?></p>
2088
- <?php
2089
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2090
  ?>
 
 
 
 
2091
 
2092
- </div>
2093
- <?php
 
 
 
2094
  }
2095
 
2096
 
@@ -2131,11 +2263,17 @@ class rsssl_admin extends rsssl_front_end
2131
  return false;
2132
  }
2133
 
 
 
 
 
2134
  public function show_leave_review_notice()
2135
  {
 
 
2136
  //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
2137
  $screen = get_current_screen();
2138
- if ( $screen->parent_base === 'edit' ) return;
2139
 
2140
  //this user has never had the review notice yet.
2141
  if ($this->ssl_enabled && !get_option('rsssl_activation_timestamp')){
@@ -2146,22 +2284,21 @@ class rsssl_admin extends rsssl_front_end
2146
  }
2147
 
2148
  if (!$this->review_notice_shown && get_option('rsssl_activation_timestamp') && get_option('rsssl_activation_timestamp') < strtotime("-1 month")) {
2149
- if ($this->dismiss_review_notice) return;
2150
  add_action('admin_print_footer_scripts', array($this, 'insert_dismiss_review'));
2151
  ?>
2152
  <style>
2153
- .rsssl-container {
2154
  display: flex;
2155
  padding:12px;
2156
  }
2157
- .rsssl-container .dashicons {
2158
  margin-left:10px;
2159
  margin-right:5px;
2160
  }
2161
- .rsssl-review-image img{
2162
  margin-top:0.5em;
2163
  }
2164
- .rsssl-buttons-row {
2165
  margin-top:10px;
2166
  display: flex;
2167
  align-items: center;
@@ -2182,7 +2319,7 @@ class rsssl_admin extends rsssl_front_end
2182
  <a class="button button-primary" target="_blank"
2183
  href="https://wordpress.org/support/plugin/really-simple-ssl/reviews/#new-post"><?php _e('Leave a review', 'really-simple-ssl'); ?></a>
2184
  <div class="dashicons dashicons-calendar"></div><a href="#" id="maybe-later"><?php _e('Maybe later', 'really-simple-ssl'); ?></a>
2185
- <div class="dashicons dashicons-no-alt"></div><a href="<?php echo esc_url(add_query_arg(array("page"=>"rlrsssl_really_simple_ssl", "tab"=>"configuration", "rsssl_dismiss_review_notice"=>1),admin_url("options-general.php") ) );?>" class="review-dismiss"><?php _e('Don\'t show again', 'really-simple-ssl'); ?></a>
2186
  </div>
2187
  </div>
2188
  </div>
@@ -2202,182 +2339,21 @@ class rsssl_admin extends rsssl_front_end
2202
 
2203
  public function show_notices()
2204
  {
2205
- //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
2206
- $screen = get_current_screen();
2207
- if ( $screen->parent_base === 'edit' ) return;
2208
- /*
2209
- show a notice when the .htaccess file does not contain redirect rules
2210
- */
2211
-
2212
- $options = get_option('rlrsssl_options');
2213
-
2214
- if (!$this->wp_redirect && $this->ssl_enabled && !$this->htaccess_warning_shown && !$this->htaccess_contains_redirect_rules() && $options['dismiss_all_notices'] !== true) {
2215
-
2216
- add_action('admin_print_footer_scripts', array($this, 'insert_dismiss_htaccess'));
2217
- ?>
2218
- <div id="message" class="error notice is-dismissible rlrsssl-htaccess">
2219
- <p>
2220
- <?php echo __("You do not have a 301 redirect to https active in the settings. For SEO purposes it is advised to use 301 redirects. You can enable a 301 redirect in the settings.", "really-simple-ssl"); ?>
2221
- <a href="<?php echo admin_url('options-general.php?page=rlrsssl_really_simple_ssl')?>"><?php echo __("View settings page", "really-simple-ssl"); ?></a>
2222
- </p>
2223
- </div>
2224
- <?php
2225
- }
2226
-
2227
- if (isset($this->errors["DEACTIVATE_FILE_NOT_RENAMED"])) {
2228
- ?>
2229
- <div id="message" class="error notice is-dismissible rlrsssl-fail">
2230
- <h1>
2231
- <?php _e("Major security issue!", "really-simple-ssl"); ?>
2232
- </h1>
2233
- <p>
2234
- <?php _e("The 'force-deactivate.php' file has to be renamed to .txt. Otherwise your ssl can be deactivated by anyone on the internet.", "really-simple-ssl"); ?>
2235
- </p>
2236
- <a href="<?php echo admin_url('options-general.php?page=rlrsssl_really_simple_ssl')?>"><?php echo __("Check again", "really-simple-ssl"); ?></a>
2237
- </div>
2238
- <?php
2239
- }
2240
-
2241
- if (is_multisite() && !is_main_site(get_current_blog_id())) return;
2242
- /*
2243
- SSL success message
2244
- */
2245
-
2246
- if ($this->ssl_enabled && $this->site_has_ssl && !$this->ssl_success_message_shown && $options['dismiss_all_notices'] !== true) {
2247
- if (!current_user_can("activate_plugins")) return;
2248
-
2249
- add_action('admin_print_footer_scripts', array($this, 'insert_dismiss_success'));
2250
- ?>
2251
- <div id="message" class="updated notice is-dismissible rlrsssl-success">
2252
-
2253
- <h1><?php _e("SSL activated!", "really-simple-ssl"); ?></h1>
2254
- <p>
2255
- <?php _e("Take the time to review these things", "really-simple-ssl");?>
2256
- <ul class="message-ul">
2257
- <li class="message-li"><?php _e("Don't forget to change your settings in Google Analytics and Webmaster tools.", "really-simple-ssl");
2258
- ?>
2259
- <a target="_blank"
2260
- href="https://really-simple-ssl.com/knowledge-base/how-to-setup-google-analytics-and-google-search-consolewebmaster-tools/">
2261
- <?php _e("More info", "really-simple-ssl"); ?></a>
2262
- </li>
2263
-
2264
- <?php if (rsssl_uses_elementor() && rsssl_does_not_use_pro()) {
2265
- ?>
2266
- <li class="message-li"><?php _e("We have detected Elementor.", "really-simple-ssl");?>
2267
- <a target="_blank"
2268
- href="https://really-simple-ssl.com/knowledge-base/how-to-fix-mixed-content-in-elementor-after-moving-to-ssl/"><?php _e("See our article for instructions", "really-simple-ssl"); ?></a>
2269
- </li>
2270
- <?php }
2271
- ?>
2272
- <li class="message-li"><?php _e("Improve your security", "really-simple-ssl");?>
2273
- <?php if (!defined('rsssl_pro_plugin')) {
2274
- $margin = '-20px';
2275
- } else {
2276
- $margin = '-60px';
2277
- }?>
2278
- <a target="_blank" href="https://really-simple-ssl.com/new-security-headers-for-really-simple-ssl-pro-coming-up/"><?php _e("with security headers", "really-simple-ssl"); ?></a>
2279
- </li>
2280
- </ul>
2281
- </p>
2282
- <?php if (!defined('rsssl_pro_plugin')) { ?>
2283
- <a class="button action btn-premium btn-premium-activated" style="margin-bottom: 10px;" href="https://really-simple-ssl.com/pro" target="_blank"><?php _e("Really Simple SSL Pro", "really-simple-ssl"); ?></a>
2284
- <?php } ?>
2285
- <div id="rsssl-logo" style="float: right; margin-top: <?php echo $margin ?>;"><img width=180px" src="<?php echo rsssl_url?>/assets/logo-really-simple-ssl.png" alt="review-logo"></div>
2286
- </div>
2287
- <style>
2288
- .message-ul {
2289
- list-style-type: none;
2290
- }
2291
-
2292
- #message .message-li::before {
2293
- vertical-align: middle;
2294
- margin-right: 25px;
2295
- color: lightgrey;
2296
- content: "\f345";
2297
- font: 400 21px/1 dashicons;
2298
- }
2299
- </style>
2300
- <?php
2301
- }
2302
-
2303
- //some notices for SSL situations
2304
- if ($this->site_has_ssl) {
2305
- if (sizeof($this->plugin_conflict) > 0) {
2306
- //pre WooCommerce 2.5
2307
- if (isset($this->plugin_conflict["WOOCOMMERCE_FORCEHTTP"]) && $this->plugin_conflict["WOOCOMMERCE_FORCEHTTP"] && isset($this->plugin_conflict["WOOCOMMERCE_FORCESSL"]) && $this->plugin_conflict["WOOCOMMERCE_FORCESSL"]) {
2308
- ?>
2309
- <div id="message" class="error notice"><p>
2310
- <?php _e("Really Simple SSL has a conflict with another plugin.", "really-simple-ssl"); ?>
2311
- <br>
2312
- <?php _e("The force http after leaving checkout in WooCommerce will create a redirect loop.", "really-simple-ssl"); ?>
2313
- <br>
2314
- <a href="admin.php?page=wc-settings&tab=checkout"><?php _e("Show me this setting", "really-simple-ssl"); ?></a>
2315
- </p></div>
2316
- <?php
2317
- }
2318
- }
2319
  }
2320
  }
2321
 
2322
- /**
2323
- * Insert some ajax script to dismiss the SSL success message, and stop nagging about it
2324
- *
2325
- * @since 2.0
2326
- *
2327
- * @access public
2328
- *
2329
- */
2330
-
2331
- public function insert_dismiss_success()
2332
- {
2333
- $ajax_nonce = wp_create_nonce("really-simple-ssl-dismiss");
2334
- ?>
2335
- <script type='text/javascript'>
2336
- jQuery(document).ready(function ($) {
2337
- $(".rlrsssl-success.notice.is-dismissible").on("click", ".notice-dismiss", function (event) {
2338
- var data = {
2339
- 'action': 'dismiss_success_message',
2340
- 'security': '<?php echo $ajax_nonce; ?>'
2341
- };
2342
-
2343
- $.post(ajaxurl, data, function (response) {
2344
-
2345
- });
2346
- });
2347
- });
2348
- </script>
2349
- <?php
2350
- }
2351
-
2352
- /**
2353
- * Insert some ajax script to dismiss the htaccess failed fail message, and stop nagging about it
2354
- *
2355
- * @since 2.0
2356
- *
2357
- * @access public
2358
- *
2359
- */
2360
-
2361
- public function insert_dismiss_htaccess()
2362
- {
2363
- $ajax_nonce = wp_create_nonce("really-simple-ssl");
2364
- ?>
2365
- <script type='text/javascript'>
2366
- jQuery(document).ready(function ($) {
2367
- $(".rlrsssl-htaccess.notice.is-dismissible").on("click", ".notice-dismiss", function (event) {
2368
- var data = {
2369
- 'action': 'dismiss_htaccess_warning',
2370
- 'security': '<?php echo $ajax_nonce; ?>'
2371
- };
2372
- $.post(ajaxurl, data, function (response) {
2373
-
2374
- });
2375
- });
2376
- });
2377
- </script>
2378
- <?php
2379
- }
2380
-
2381
  /**
2382
  * Insert some ajax script to dismiss the review notice, and stop nagging about it
2383
  *
@@ -2420,32 +2396,6 @@ class rsssl_admin extends rsssl_front_end
2420
  <?php
2421
  }
2422
 
2423
- /**
2424
- *
2425
- * Insert the script to dismiss dashboard notices
2426
- */
2427
-
2428
- public function insert_dismiss_settings_script()
2429
- {
2430
- $ajax_nonce = wp_create_nonce("really-simple-ssl");
2431
-
2432
- ?>
2433
- <script type='text/javascript'>
2434
- jQuery(document).ready(function ($) {
2435
- $(".rsssl-dashboard-dismiss").on("click", ".rsssl-close-warning",function (event) {
2436
- var type = $(this).closest('.rsssl-dashboard-dismiss').data('dismiss_type');
2437
- var data = {
2438
- 'action': 'rsssl_dismiss_settings_notice',
2439
- 'type' : type,
2440
- 'security': '<?php echo $ajax_nonce; ?>'
2441
- };
2442
- $.post(ajaxurl, data, function (response) {});
2443
- $(this).closest('tr').remove();
2444
- });
2445
- });
2446
- </script>
2447
- <?php
2448
- }
2449
 
2450
  /**
2451
  * Process the ajax dismissal of the success message.
@@ -2459,31 +2409,11 @@ class rsssl_admin extends rsssl_front_end
2459
  public function dismiss_success_message_callback()
2460
  {
2461
  if (!current_user_can($this->capability) ) return;
2462
- //nonce check fails if url is changed to SSL.
2463
- //check_ajax_referer( 'really-simple-ssl-dismiss', 'security' );
2464
  $this->ssl_success_message_shown = TRUE;
2465
  $this->save_options();
2466
  wp_die();
2467
  }
2468
 
2469
- /**
2470
- * Process the ajax dismissal of the htaccess message.
2471
- *
2472
- * @since 2.1
2473
- *
2474
- * @access public
2475
- *
2476
- */
2477
-
2478
- public function dismiss_htaccess_warning_callback()
2479
- {
2480
- if (!current_user_can($this->capability) ) return;
2481
- check_ajax_referer('really-simple-ssl', 'security');
2482
- $this->htaccess_warning_shown = TRUE;
2483
- $this->save_options();
2484
- wp_die(); // this is required to terminate immediately and return a proper response
2485
- }
2486
-
2487
  /**
2488
  * Process the ajax dismissal of settings notice
2489
  *
@@ -2497,13 +2427,27 @@ class rsssl_admin extends rsssl_front_end
2497
  {
2498
  if (!current_user_can($this->capability) ) return;
2499
 
2500
- check_ajax_referer('really-simple-ssl', 'security');
2501
- if (isset($_POST['type'])) {
 
 
 
2502
  $dismiss_type = sanitize_title( $_POST['type'] );
2503
  update_option( "rsssl_".$dismiss_type."_dismissed", true );
2504
  delete_transient( 'rsssl_plusone_count' );
2505
  }
2506
- wp_die(); // this is required to terminate immediately and return a proper response
 
 
 
 
 
 
 
 
 
 
 
2507
  }
2508
 
2509
  /**
@@ -2543,13 +2487,13 @@ class rsssl_admin extends rsssl_front_end
2543
  public function add_settings_page()
2544
  {
2545
  if (!current_user_can($this->capability)) return;
 
2546
  //hides the settings page if the hide menu for subsites setting is enabled
2547
  if (is_multisite() && rsssl_multisite::this()->hide_menu_for_subsites && !is_super_admin()) return;
2548
 
2549
  global $rsssl_admin_page;
2550
 
2551
  $count = $this->count_plusones();
2552
-
2553
  if ($count > 0 ) {
2554
  $update_count = "<span class='update-plugins rsssl-update-count'><span class='update-count'>$count</span></span>";
2555
  } else {
@@ -2563,9 +2507,6 @@ class rsssl_admin extends rsssl_front_end
2563
  'rlrsssl_really_simple_ssl', //url
2564
  array($this, 'settings_page')); //function
2565
 
2566
- // Adds my_help_tab when my_admin_page loads
2567
- add_action('load-' . $rsssl_admin_page, array($this, 'admin_add_help_tab'));
2568
-
2569
  }
2570
 
2571
  /**
@@ -2577,53 +2518,25 @@ class rsssl_admin extends rsssl_front_end
2577
  *
2578
  */
2579
 
2580
- public function rsssl_edit_admin_menu()
2581
- {
2582
- if (!current_user_can($this->capability)) return;
2583
-
2584
- global $menu;
2585
-
2586
- $count = $this->count_plusones();
2587
-
2588
- $menu_slug = 'options-general.php';
2589
- $menu_title = __('Settings');
2590
-
2591
- foreach($menu as $index => $menu_item){
2592
- if (!isset($menu_item[2]) || !isset($menu_item[0])) continue;
2593
- if ($menu_item[2]===$menu_slug){
2594
- $pattern = '/<span.*>([1-9])<\/span><\/span>/i';
2595
- if (preg_match($pattern, $menu_item[0], $matches)){
2596
- if (isset($matches[1])) $count = intval($count) + intval($matches[1]);
2597
- }
2598
-
2599
- $update_count = $count > 0 ? "<span class='update-plugins rsssl-update-count'><span class='update-count'>$count</span></span>":'';
2600
- $menu[$index][0] = $menu_title . $update_count;
2601
- }
2602
-
2603
- }
2604
-
2605
- }
2606
-
2607
-
2608
-
2609
- /**
2610
- * Admin help tab
2611
- *
2612
- * @since 2.0
2613
- *
2614
- * @access public
2615
- *
2616
- */
2617
-
2618
- public function admin_add_help_tab()
2619
  {
2620
- $screen = get_current_screen();
2621
- // Add my_help_tab if current screen is My Admin Page
2622
- $screen->add_help_tab(array(
2623
- 'id' => "really-simple-ssl-documentation",
2624
- 'title' => __("Documentation", "really-simple-ssl"),
2625
- 'content' => '<p>' . __("On <a href='https://really-simple-ssl.com'>really-simple-ssl.com</a> you can find a lot of articles and documentation about installing this plugin, and installing SSL in general.", "really-simple-ssl") . '</p>',
2626
- ));
 
 
 
 
 
 
 
 
 
 
2627
  }
2628
 
2629
  /**
@@ -2638,113 +2551,239 @@ class rsssl_admin extends rsssl_front_end
2638
  public function admin_tabs($current = 'homepage')
2639
  {
2640
  $tabs = array(
2641
- 'configuration' => __("Configuration", "really-simple-ssl"),
2642
- 'settings' => __("Settings", "really-simple-ssl"),
2643
- 'debug' => __("Debug", "really-simple-ssl")
2644
  );
 
2645
 
2646
- $tabs = apply_filters("rsssl_tabs", $tabs);
 
 
2647
 
2648
- echo '<h2 class="nav-tab-wrapper">';
2649
-
2650
- foreach ($tabs as $tab => $name) {
2651
- $class = ($tab == $current) ? ' nav-tab-active' : '';
2652
- echo "<a class='nav-tab$class' href='?page=rlrsssl_really_simple_ssl&tab=$tab'>$name</a>";
2653
  }
2654
- echo '</h2>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2655
  }
2656
 
 
 
 
 
 
 
 
 
2657
 
2658
  /**
2659
  * Get array of notices
2660
  * - condition: function returning boolean, if notice should be shown or not
2661
  * - callback: function, returning boolean or string, with multiple possible answers, and resulting messages and icons
2662
- *
2663
  * @return array
2664
  */
2665
 
2666
-
2667
- public function get_notices_list()
2668
  {
2669
  $defaults = array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2670
  'condition' => array(),
2671
  'callback' => false,
2672
  );
2673
 
2674
- $enable = __("Enable", "really-simple-ssl");
2675
- $dismiss = __("dismiss", "really-simple-ssl");
2676
  $curl_error = get_transient('rsssl_curl_error');
2677
 
2678
- if (RSSSL()->rsssl_server->uses_htaccess()) {
2679
- $redirect_plusone = true;
2680
- } else {
2681
- $redirect_plusone = false;
2682
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2683
 
2684
- $notices = array(
2685
  'ssl_enabled' => array(
2686
  'callback' => 'rsssl_ssl_enabled',
 
2687
  'output' => array(
2688
- 'ssl-enabled' => array(
2689
  'msg' =>__('SSL is enabled on your site.', 'really-simple-ssl'),
2690
  'icon' => 'success'
2691
  ),
2692
- 'ssl-not-enabled' => array(
2693
- 'msg' => __('SSL is not enabled yet', 'really-simple-ssl'),
2694
- 'icon' => 'warning'
2695
  ),
2696
  ),
2697
  ),
2698
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2699
  'mixed_content_fixer_detected' => array(
2700
- 'condition' => array('rsssl_site_has_ssl', 'rsssl_autoreplace_insecure_links', 'rsssl_ssl_enabled'),
2701
- 'callback' => 'rsssl_mixed_content_fixer_detected',
 
2702
  'output' => array(
2703
  'found' => array(
2704
- 'msg' =>__('Mixed content fixer was successfully detected on the front-end', 'really-simple-ssl'),
2705
  'icon' => 'success'
2706
  ),
2707
  'no-response' => array(
2708
- 'msg' => sprintf(__('Really Simple SSL has received no response from the webpage. See our knowledge base for %sinstructions on how to fix this warning%s', 'really-simple-ssl'),'<a target="_blank" href="https://really-simple-ssl.com/knowledge-base/how-to-fix-no-response-from-webpage-warning/">','</a>') . " "
2709
- . __("or", "really-simple-ssl")
2710
- . "<span class='rsssl-dashboard-dismiss' data-dismiss_type='mixed_content_fixer_detected'><a href='#' class='rsssl-dismiss-text rsssl-close-warning'>$dismiss</a></span>"
2711
- . "<span class='rsssl-dashboard-plusone update-plugins rsssl-update-count'><span class='update-count'>1</span></span>",
2712
- 'icon' => 'error',
2713
  'dismissible' => true,
2714
  'plusone' => true
2715
  ),
2716
  'not-found' => array(
2717
- 'msg' => sprintf(__('The mixed content fixer is active, but was not detected on the frontpage. Please follow %sthese steps%s to check if the mixed content fixer is working.', "really-simple-ssl"),'<a target="_blank" href="https://www.really-simple-ssl.com/knowledge-base/how-to-check-if-the-mixed-content-fixer-is-active/">', '</a>' ),
2718
- 'icon' => 'warning',
 
2719
  'dismissible' => true
2720
  ),
2721
  'error' => array(
2722
- 'msg' =>__('Error occured when retrieving the webpage.', 'really-simple-ssl'),
2723
- 'icon' => 'warning',
2724
  'dismissible' => true
2725
  ),
2726
- 'curl-error' => array(
2727
- 'msg' =>sprintf(__("The mixed content fixer could not be detected due to a cURL error: %s. cURL errors are often caused by an outdated version of PHP or cURL and don't affect the front-end of your site. Contact your hosting provider for a fix. %sMore information about this warning%s", 'really-simple-ssl'), "<b>" . $curl_error . "</b>", '<a target="_blank" href="https://www.really-simple-ssl.com/knowledge-base/curl-errors/">', '</a>' ),
2728
- 'icon' => 'warning',
 
2729
  'dismissible' => true
2730
  ),
2731
- ),
2732
- ),
2733
-
2734
- 'ssl_detected' => array(
2735
- 'callback' => 'rsssl_ssl_detected',
2736
- 'output' => array(
2737
- 'fail' => array(
2738
- 'msg' =>__('Failed activating SSL.', 'really-simple-ssl'),
2739
- 'icon' => 'success'
2740
- ),
2741
- 'no-ssl-detected' => array(
2742
- 'msg' => sprintf(__("No SSL detected. See our guide on how to %sget a free SSL certificate%s ", "really-simple-ssl"), '<a target="_blank" href="https://really-simple-ssl.com/knowledge-base/how-to-install-a-free-ssl-certificate-on-your-wordpress-cpanel-hosting/">', '</a>'),
2743
- 'icon' => 'warning'
2744
- ),
2745
- 'ssl-detected' => array(
2746
- 'msg' => __('An SSL certificate was detected on your site.', 'really-simple-ssl'),
2747
- 'icon' => 'success'
2748
  ),
2749
  ),
2750
  ),
@@ -2752,6 +2791,7 @@ class rsssl_admin extends rsssl_front_end
2752
  'wordpress_redirect' => array(
2753
  'condition' => array('rsssl_wp_redirect_condition'),
2754
  'callback' => 'rsssl_wordpress_redirect',
 
2755
  'output' => array(
2756
  '301-wp-redirect' => array(
2757
  'msg' => __('301 redirect to https set: WordPress redirect.', 'really-simple-ssl'),
@@ -2759,117 +2799,128 @@ class rsssl_admin extends rsssl_front_end
2759
  ),
2760
  'no-redirect' => array(
2761
  'msg' => __('No 301 redirect is set. Enable the WordPress 301 redirect in the settings to get a 301 permanent redirect.', 'really-simple-ssl'),
2762
- 'icon' => 'warning'
2763
  ),
2764
  )
2765
  ),
2766
 
2767
  'check_redirect' => array(
2768
- 'condition' => array('rsssl_ssl_enabled' , 'rsssl_htaccess_redirect_allowed', 'rsssl_no_multisite'),
2769
  'callback' => 'rsssl_check_redirect',
2770
- 'output' => array(
 
2771
  'htaccess-redirect-set' => array(
2772
- 'msg' =>__('301 redirect to https set: .htaccess redirect.', 'really-simple-ssl'),
2773
  'icon' => 'success'
2774
  ),
2775
- //generate an enable link to highlight the setting, setting name is same as array key
2776
- $enable_link = $this->generate_enable_link($setting_name = 'wp-redirect-to-htaccess'),
2777
  'wp-redirect-to-htaccess' => array(
2778
- 'msg' => __('WordPress 301 redirect enabled. We recommend to enable the 301 .htaccess redirect option on your specific setup.', 'really-simple-ssl') . " "
2779
- . "<span><a href=$enable_link>$enable</a></span>" . " "
2780
- . __("or", "really-simple-ssl")
2781
- . "<span class='rsssl-dashboard-dismiss' data-dismiss_type='check_redirect'><a href='#' class='rsssl-dismiss-text rsssl-close-warning'>$dismiss</a></span>"
2782
- . "<span class='rsssl-dashboard-plusone update-plugins rsssl-update-count'><span class='update-count'>1</span></span>",
2783
- 'icon' => 'warning',
2784
- 'plusone' => $redirect_plusone,
2785
- 'dismissible' => true
2786
  ),
2787
  'no-redirect-set' => array(
2788
- 'msg' => __('Enable a .htaccess redirect or WordPress redirect in the settings to create a 301 redirect.', 'really-simple-ssl'),
2789
- 'icon' => 'warning',
2790
  'dismissible' => false
2791
  ),
2792
  'htaccess-not-writeable' => array(
2793
- 'msg' => __('.htaccess is not writable. Set 301 WordPress redirect, or set the .htaccess manually if you want to redirect in .htaccess.', 'really-simple-ssl'),
2794
- 'icon' => 'warning',
2795
- 'dismissible' => true
2796
- ),
2797
- 'htaccess-cannot-be-set' => array(
2798
- 'msg' => __('Https redirect cannot be set in the .htaccess file. Set the .htaccess redirect manually or enable the WordPress 301 redirect in the settings.', 'really-simple-ssl'),
2799
  'icon' => 'warning',
2800
  'dismissible' => true
2801
  ),
2802
- 'default' => array(
2803
- 'msg' => __('No 301 redirect is set. Enable the WordPress 301 redirect in the settings to get a 301 permanent redirect.', 'really-simple-ssl'),
 
2804
  'icon' => 'warning',
2805
- 'dismissible' => true
 
2806
  ),
2807
  ),
2808
  ),
2809
 
2810
  'elementor' => array(
2811
- 'condition' => array('rsssl_uses_elementor' , 'rsssl_ssl_activation_time_no_longer_then_3_days_ago' ,'rsssl_does_not_use_pro'),
2812
- 'callback' => 'rsssl_elementor_notice',
 
2813
  'output' => array(
2814
- 'elementor-notice' => array(
2815
- 'msg' => sprintf(__("Your site uses Elementor. This can require some additional steps before getting the secure lock. %sSee our guide for detailed instructions%s ", "really-simple-ssl"), '<a target="_blank" href="https://really-simple-ssl.com/knowledge-base/how-to-fix-mixed-content-in-elementor-after-moving-to-ssl/">', '</a>')
2816
- . __("or", "really-simple-ssl")
2817
- . "<span class='rsssl-dashboard-dismiss' data-dismiss_type='elementor'><a href='#' class='rsssl-dismiss-text rsssl-close-warning'>$dismiss</a></span>",
2818
- 'icon' => 'warning',
2819
  'dismissible' => true
2820
  ),
2821
  ),
2822
  ),
2823
 
2824
  'divi' => array(
2825
- 'condition' => array('rsssl_uses_divi' , 'rsssl_ssl_activation_time_no_longer_then_3_days_ago'),
2826
- 'callback' => 'rsssl_elementor_notice',
 
2827
  'output' => array(
2828
- 'elementor-notice' => array(
2829
- 'msg' => sprintf(__("Your site uses Divi. This can require some additional steps before getting the secure lock. %sSee our guide for detailed instructions%s ", "really-simple-ssl"), '<a target="_blank" href="https://really-simple-ssl.com/knowledge-base/mixed-content-when-using-divi-theme/">', '</a>')
2830
- . __("or", "really-simple-ssl")
2831
- . "<span class='rsssl-dashboard-dismiss' data-dismiss_type='divi'><a href='#' class='rsssl-dismiss-text rsssl-close-warning'>$dismiss</a></span>",
2832
- 'icon' => 'warning',
2833
  'dismissible' => true
2834
  ),
2835
  ),
2836
  ),
2837
 
2838
  'hsts_enabled' => array(
2839
- 'condition' => array('rsssl_no_multisite'),
2840
- 'callback' => 'rsssl_hsts_enabled',
 
2841
  'output' => array(
2842
- 'contains-hsts' => array(
2843
  'msg' =>__('HTTP Strict Transport Security was enabled.', 'really-simple-ssl'),
2844
  'icon' => 'success'
2845
  ),
2846
- 'no-hsts' => array(
2847
- 'msg' => sprintf(__('%sHTTP Strict Transport Security%s is not enabled %s(premium)%s', "really-simple-ssl"), '<a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security" target="_blank">', '</a>', '<a target="_blank" href="' . $this->pro_url . '">', '</a>'),
2848
- 'icon' => 'warning'
2849
  ),
2850
  ),
2851
  ),
2852
 
2853
  'secure_cookies_set' => array(
2854
- 'callback' => 'rsssl_secure_cookies_set',
 
 
2855
  'output' => array(
2856
- 'set' => array(
2857
- 'msg' =>__('Secure cookies set', 'really-simple-ssl'),
2858
  'icon' => 'success'
2859
  ),
2860
- 'not-set' => array(
2861
- 'msg' => sprintf(__("Secure cookie settings not enabled (%spremium%s) ", "really-simple-ssl"), '<a target="_blank" href="' . $this->pro_url .'">', '</a>'),
2862
- 'icon' => 'warning'
2863
  ),
2864
  ),
2865
  ),
2866
 
2867
- 'mixed_content_scan' => array(
2868
- 'callback' => 'rsssl_scan_upsell',
 
 
 
 
 
 
 
 
 
 
 
 
2869
  'output' => array(
2870
- 'upsell' => array(
2871
- 'msg' => sprintf(__("No mixed content scan performed (%spremium%s) ", "really-simple-ssl"), '<a target="_blank" href="' . $this->pro_url .'">', '</a>'),
2872
- 'icon' => 'warning'
 
2873
  ),
2874
  ),
2875
  ),
@@ -2877,12 +2928,225 @@ class rsssl_admin extends rsssl_front_end
2877
 
2878
  $notices = apply_filters('rsssl_notices', $notices);
2879
  foreach ($notices as $id => $notice) {
2880
- $notices[$id] = wp_parse_args($notice, $defaults);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2881
  }
2882
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2883
  return $notices;
2884
  }
2885
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2886
 
2887
  /**
2888
  * @param $setting_name
@@ -2893,9 +3157,13 @@ class rsssl_admin extends rsssl_front_end
2893
  *
2894
  */
2895
 
2896
- public function generate_enable_link($setting_name)
2897
  {
2898
- return add_query_arg(array("page"=>"rlrsssl_really_simple_ssl", "tab"=>"settings", "highlight"=>"$setting_name"),admin_url("options-general.php"));
 
 
 
 
2899
  }
2900
 
2901
  /**
@@ -2911,31 +3179,18 @@ class rsssl_admin extends rsssl_front_end
2911
  private function notice_row($id, $notice){
2912
  if (!current_user_can('manage_options')) return;
2913
 
2914
- //check condition
2915
- if (!empty($notice['condition']) ) {
2916
- $condition_functions = $notice['condition'];
2917
-
2918
- foreach ($condition_functions as $func) {
2919
- $condition = $func();
2920
- if (!$condition) return;
2921
- }
2922
- }
2923
-
2924
- $func = $notice['callback'];
2925
- $output = $func();
2926
-
2927
- if (!isset($notice['output'][$output])) {
2928
  return;
2929
  }
2930
 
2931
- $msg = $notice['output'][$output]['msg'];
2932
- $icon_type = $notice['output'][$output]['icon'];
2933
 
2934
- if (get_option("rsssl_".$id."_dismissed")) return;
 
2935
 
2936
- //call_user_func_array(array($classInstance, $methodName), $arg1, $arg2, $arg3);
2937
- $icon = $this->img($icon_type);
2938
- $dismiss = (isset($notice['output'][$output]['dismissible']) && $notice['output'][$output]['dismissible']) ? $this->rsssl_dismiss_button() : '';
2939
 
2940
  ?>
2941
  <tr>
@@ -2945,22 +3200,12 @@ class rsssl_admin extends rsssl_front_end
2945
  <?php
2946
  }
2947
 
2948
- /**
2949
- *
2950
- * Reset the plusone count transient
2951
- *
2952
- * @since 3.2
2953
- *
2954
- */
2955
 
2956
- public function reset_plusone_cache(){
2957
- delete_transient('rsssl_plusone_count');
2958
- }
2959
 
2960
  /**
2961
- * @return int|mixed
2962
- *
2963
  * Count the plusones
 
 
2964
  *
2965
  * @since 3.2
2966
  */
@@ -2969,52 +3214,22 @@ class rsssl_admin extends rsssl_front_end
2969
  if ( ! current_user_can( 'manage_options' ) ) {
2970
  return 0;
2971
  }
 
 
2972
  $count = get_transient( 'rsssl_plusone_count' );
2973
- if ( $count === false ) {
2974
  $count = 0;
2975
-
2976
- $options = get_option( 'rlrsssl_options' );
2977
-
2978
  $notices = $this->get_notices_list();
2979
  foreach ( $notices as $id => $notice ) {
2980
- $condition = true;
2981
- if ( get_option( "rsssl_" . $id . "_dismissed" ) ) {
2982
- continue;
2983
- }
2984
-
2985
- $condition_functions = $notice['condition'];
2986
- foreach ( $condition_functions as $func ) {
2987
- $condition = $func();
2988
- if ( ! $condition ) {
2989
- break;
2990
- }
2991
- }
2992
-
2993
- if ( $condition ) {
2994
- $func = $notice['callback'];
2995
- $output = $func();
2996
- $success = ( isset( $notice['output'][ $output ]['icon'] )
2997
- && ( $notice['output'][ $output ]['icon']
2998
- === 'success' ) ) ? true : false;
2999
-
3000
- if ( ( isset( $notice['output'][ $output ]['dismissible'] )
3001
- && $notice['output'][ $output ]['dismissible']
3002
- && ( $options['dismiss_all_notices'] !== false ) )
3003
- ) {
3004
- update_option( 'rsssl_' . $id . '_dismissed', true );
3005
- continue;
3006
- }
3007
-
3008
- //&& notice not dismissed
3009
- if ( ! $success
3010
- && isset( $notice['output'][ $output ]['plusone'] )
3011
- && $notice['output'][ $output ]['plusone']
3012
- ) {
3013
- $count ++;
3014
- }
3015
- }
3016
  }
3017
- set_transient( 'rsssl_plusone_count', $count, 'WEEK_IN_SECONDS' );
3018
  }
3019
  return $count;
3020
  }
@@ -3028,272 +3243,244 @@ class rsssl_admin extends rsssl_front_end
3028
  *
3029
  */
3030
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3031
 
3032
- public function settings_page()
3033
- {
3034
- if (!current_user_can($this->capability)) return;
 
3035
 
3036
- add_action('admin_print_footer_scripts', array($this, 'insert_dismiss_settings_script'));
3037
 
3038
- if (isset ($_GET['tab'])) $this->admin_tabs($_GET['tab']); else $this->admin_tabs('configuration');
3039
- if (isset ($_GET['tab'])) $tab = $_GET['tab']; else $tab = 'configuration';
 
3040
 
3041
- ?>
3042
- <div class="rsssl-container">
3043
- <div class="rsssl-main"><?php
3044
 
3045
- switch ($tab) {
3046
- case 'configuration' :
3047
 
3048
- /*
3049
- First tab, configuration
3050
- */
3051
- ?>
3052
- <h2><?php echo __("Detected setup", "really-simple-ssl"); ?></h2>
3053
- <table class="really-simple-ssl-table">
3054
- <thead></thead>
3055
- <tbody>
3056
- <?php
3057
-
3058
- $this->reset_plusone_cache();
3059
- $notices = $this->get_notices_list();
3060
- foreach ($notices as $id => $notice) {
3061
- $this->notice_row($id, $notice);
3062
- }
3063
 
3064
- if (!$this->ssl_enabled) {
3065
- $this->show_enable_ssl_button();
3066
- }
 
 
3067
 
3068
- ?>
3069
- </tbody>
3070
- </table>
3071
 
3072
- <?php do_action("rsssl_configuration_page"); ?>
 
 
 
 
 
 
 
3073
 
3074
- <?php
3075
- break;
3076
- case 'settings' :
3077
- /*
3078
- Second tab, Settings
3079
- */
3080
-
3081
- ?>
3082
- <form action="options.php" method="post">
3083
- <?php
3084
- settings_fields('rlrsssl_options');
3085
- do_settings_sections('rlrsssl');
3086
- ?>
3087
-
3088
- <input class="button button-primary" name="Submit" type="submit"
3089
- value="<?php echo __("Save", "really-simple-ssl"); ?>"/>
3090
- </form>
3091
- <?php
3092
- break;
3093
-
3094
- case 'debug' :
3095
- /*
3096
- third tab: debug
3097
- */
3098
- ?>
3099
- <div>
3100
- <?php
3101
- if ($this->debug) {
3102
- echo "<h2>" . __("Log for debugging purposes", "really-simple-ssl") . "</h2>";
3103
- echo "<p>" . __("Send us a copy of these lines if you have any issues. The log will be erased when debug is set to false", "really-simple-ssl") . "</p>";
3104
- echo "<div class='debug-log'>";
3105
- if (defined('RSSSL_SAFE_MODE') && RSSSL_SAFE_MODE) echo "SAFE MODE<br>";
3106
-
3107
- echo "<b>General</b><br>";
3108
- echo "Plugin version: " . rsssl_version ."<br>";
3109
-
3110
- if (RSSSL()->rsssl_certificate->is_valid()) {
3111
- echo "SSL certificate is valid<br>";
3112
- } else {
3113
- echo "Invalid SSL certificate<br>";
3114
- }
3115
- echo ($this->ssl_enabled) ? "SSL is enabled<br><bR>" : "SSL is not yet enabled<br><br>";
3116
-
3117
- echo "<b>Options</b><br>";
3118
- if ($this->autoreplace_insecure_links) echo "* Mixed content fixer<br>";
3119
- if ($this->wp_redirect) echo "* WordPress redirect<br>";
3120
- if ($this->htaccess_redirect) echo "* htaccess redirect<br>";
3121
- if ($this->do_not_edit_htaccess) echo "* Stop editing the .htaccess file<br>";
3122
- if ($this->switch_mixed_content_fixer_hook) echo "* Use alternative method to fix mixed content<br>";
3123
- if ($this->dismiss_all_notices) echo "* Dismiss all Really Simple SSL notices<br>";
3124
- echo "<br>";
3125
-
3126
- echo "<b>Server information</b><br>";
3127
- echo "Server: " . RSSSL()->rsssl_server->get_server() . "<br>";
3128
- echo "SSL Type: $this->ssl_type<br>";
3129
- if (is_multisite()) {
3130
- echo "MULTISITE<br>";
3131
- echo (!RSSSL()->rsssl_multisite->ssl_enabled_networkwide) ? "SSL is being activated per site<br>" : "SSL is activated network wide<br>";
3132
- }
3133
-
3134
- echo $this->debug_log;
3135
-
3136
- echo "<br><br><b>Constants</b><br>";
3137
-
3138
- if (defined('RSSSL_FORCE_ACTIVATE')) echo "RSSSL_FORCE_ACTIVATE defined";
3139
- if (defined('RSSSL_NO_FLUSH')) echo "RSSSL_NO_FLUSH defined";
3140
- if (defined('RSSSL_DISMISS_ACTIVATE_SSL_NOTICE')) echo "RSSSL_DISMISS_ACTIVATE_SSL_NOTICE defined";
3141
- if (defined('RLRSSSL_DO_NOT_EDIT_HTACCESS')) echo "RLRSSSL_DO_NOT_EDIT_HTACCESS defined";
3142
- if (defined('RSSSL_SAFE_MODE')) echo "RSSSL_SAFE_MODE defined";
3143
- if (defined("RSSSL_SERVER_OVERRIDE")) echo "RSSSL_SERVER_OVERRIDE defined";
3144
-
3145
- if( !defined('RSSSL_FORCE_ACTIVATE')
3146
- && !defined('RSSSL_NO_FLUSH')
3147
- && !defined('RSSSL_DISMISS_ACTIVATE_SSL_NOTICE')
3148
- && !defined('RLRSSSL_DO_NOT_EDIT_HTACCESS')
3149
- && !defined('RSSSL_SAFE_MODE')
3150
- && !defined("RSSSL_SERVER_OVERRIDE")
3151
- ) echo "No constants defined";
3152
-
3153
- echo "</div>";
3154
- $this->debug_log = "";
3155
- $this->save_options();
3156
- } else {
3157
- echo "<br>";
3158
- _e("To view results here, enable the debug option in the settings tab.", "really-simple-ssl");
3159
- }
3160
-
3161
- ?>
3162
- </div>
3163
- <?php
3164
- break;
3165
- default:
3166
- echo '';
3167
- }
3168
- //possibility to hook into the tabs.
3169
- do_action("show_tab_{$tab}");
3170
- ?>
3171
- </div><!-- end main-->
3172
 
3173
- <?php
 
3174
 
3175
- /**
3176
- *
3177
- * Generate a sidebar for free users to advertise pro
3178
- * When using Ultimate Member, also show Ultimate Member add-ons
3179
- * Pro users never see the sidebar
3180
- *
3181
- * @since 2.5.27
3182
- *
3183
- */
3184
 
3185
- if (!defined("rsssl_pro_version") && (!defined("rsssl_pp_version")) && (!defined("rsssl_soc_version")) && (!class_exists('RSSSL_PRO'))) {
 
 
 
3186
 
3187
- //Generate the Really Simple Plugins logo and recommended plugins text
3188
 
3189
- ?>
3190
- <div class="rsssl-sidebar">
3191
- <div class="rsssl-really-simple-plugins-logo">
3192
- <?php echo "<img class='rsssl-pro-image' src='" . trailingslashit(rsssl_url) . "assets/really-simple-plugins.png' alt='Really Simple SSL pro'>"; ?>
3193
- </div>
3194
- <div class="rsssl-sidebar-title">
3195
- <?php
3196
- $link_open = '<a target="_blank" href="https://really-simple-ssl.com/contact">';
3197
 
3198
- ?>
3199
- <h3> <?php echo sprintf(__("We have some suggestions for your setup. Let us know if you have a suggestion for %sus%s!", "really-simple-ssl"), $link_open, "</a>") ?></h3>
3200
- </div>
3201
 
3202
- <?php
3203
-
3204
- /*
3205
- *
3206
- * Generate a container for Really Simple SSL pro, Ultimate Member and Moneybird plugins
3207
- * Pro container has different image size, text position and button color then UM and Moneybird
3208
- * Before generating, check if Really Simple SSL pro, Ultimate Member is active. For Moneybird, check if locale = nl_NL
3209
- *
3210
- */
3211
-
3212
- $admin_url = admin_url();
3213
- $url = is_multisite() ? 'https://really-simple-ssl.com/downloads/really-simple-ssl-pro-multisite/' : 'https://really-simple-ssl.com/pro/';
3214
- $this->get_banner_html(array(
3215
- 'img' => 'rsssl-pro.jpg',
3216
- 'title' => 'Really Simple SSL Pro',
3217
- 'description' => __("Really Simple SSL Pro optimizes your SSL configuration: extensive scan for mixed content issues, access to premium support, HSTS and more!", "really-simple-ssl"),
3218
- 'url' => $url,
3219
- 'pro' => true,
3220
- )
3221
- );
3222
-
3223
- if (!class_exists('COMPLIANZ')) {
3224
- $this->get_banner_html( array(
3225
- 'img' => 'complianz.jpg',
3226
- 'title' => 'Complianz',
3227
- 'description' => __( "The Complianz Privacy Suite (GDPR/CaCPA) for WordPress. Simple, Quick and Complete. Up-to-date customized legal documents by a prominent IT Law firm.", "really-simple-ssl" ),
3228
- 'url' => "$admin_url" . "plugin-install.php?s=complianz+RogierLankhorst&tab=search&type=term",
3229
- 'pro' => true,
3230
- )
3231
- );
3232
- }
3233
 
3234
- if (!defined("ZRDN_PLUGIN_DIRECTORY")) {
3235
- $this->get_banner_html(array(
3236
- 'img' => 'ziprecipes.png',
3237
- 'title' => 'Zip Recipes',
3238
- 'description' => __("Create beautiful SEO friendly recipe cards for your recipes with Zip Recipes.", "really-simple-ssl"),
3239
- 'url' => "$admin_url" . "plugin-install.php?s=zip+recipes+RogierLankhorst&tab=search&type=term",
3240
- )
3241
- );
3242
- }
3243
-
3244
-
3245
- if (!defined("wp_search_insights_plugin")) {
3246
- $this->get_banner_html(array(
3247
- 'img' => 'wpsearchinsights.jpg',
3248
- 'title' => 'WP Search Insights',
3249
- 'description' => __("Records all searches made on your site. See valuable insights in a clean dashboard", "really-simple-ssl"),
3250
- 'url' => "$admin_url" . "plugin-install.php?s=wp+search+insights+Rogier+Lankhorst&tab=search&type=term",
3251
- )
3252
- );
3253
- }
3254
 
3255
- if (defined("ultimatemember_version")) {
 
 
3256
 
3257
- if (!defined("um_tagging_version")) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3258
 
3259
- $this->get_banner_html(array(
3260
- 'img' => 'tagging.jpg',
3261
- 'title' => 'UM Tagging',
3262
- 'description' => __("UM Tagging allows you to @tag or @mention all users on your platform.", "really-simple-ssl"),
3263
- 'url' => 'https://really-simple-plugins.com/download/um-tagging/',
3264
- )
3265
- );
3266
- }
3267
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3268
 
3269
- if (defined("EDD_SL_PLUGIN_DIR") && (get_locale() === 'nl_NL')) {
3270
- $this->get_banner_html(array(
3271
- 'img' => 'edd-moneybird.jpg',
3272
- 'title' => 'EDD Moneybird',
3273
- 'description' => __("Export your Easy Digital Downloads sales directly to Moneybird.", "really-simple-ssl"),
3274
- 'url' => 'https://really-simple-plugins.com/download/edd-moneybird/',
3275
- )
3276
- );
3277
 
3278
- }
 
 
 
 
 
 
 
3279
 
3280
- if (defined('WC_PLUGIN_FILE') && (get_locale() === 'nl_NL')) {
3281
- $this->get_banner_html(array(
3282
- 'img' => 'woocommerce-moneybird.jpg',
3283
- 'title' => 'WooCommerce Moneybird',
3284
- 'description' => __("Export your WooCommerce sales directly to Moneybird.", "really-simple-ssl"),
3285
- 'url' => 'https://really-simple-plugins.com/download/woocommerce-moneybird/',
3286
- )
3287
- );
3288
 
3289
- }
3290
- ?>
3291
- </div>
3292
- <?php }
3293
- ?>
 
 
 
 
 
 
3294
 
3295
- </div><!-- end container -->
3296
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3297
  }
3298
 
3299
  /**
@@ -3308,14 +3495,16 @@ class rsssl_admin extends rsssl_front_end
3308
  * @return string
3309
  */
3310
 
3311
- public function img($type)
3312
  {
3313
  if ($type == 'success') {
3314
- return "<img class='rsssl-icons' src='" . trailingslashit(rsssl_url) . "img/check-icon.png' alt='success'>";
3315
- } elseif ($type == "error") {
3316
- return "<img class='rsssl-icons' src='" . trailingslashit(rsssl_url) . "img/cross-icon.png' alt='error'>";
3317
- } else {
3318
- return "<img class='rsssl-icons' src='" . trailingslashit(rsssl_url) . "img/warning-icon.png' alt='warning'>";
 
 
3319
  }
3320
  }
3321
 
@@ -3330,7 +3519,7 @@ class rsssl_admin extends rsssl_front_end
3330
  public function rsssl_dismiss_button()
3331
  {
3332
  return '<button type="button" class="close">
3333
- <span class="rsssl-close-warning">X</span>
3334
  </button>';
3335
  }
3336
 
@@ -3378,22 +3567,55 @@ class rsssl_admin extends rsssl_front_end
3378
  *
3379
  */
3380
 
3381
- public function enqueue_assets($hook)
3382
- {
3383
- global $rsssl_admin_page;
 
 
 
 
 
 
 
 
 
 
 
 
3384
 
3385
- /*
3386
- * load if this is the SSL settings page
3387
- */
3388
 
3389
- if ( $hook != $rsssl_admin_page) return;
 
 
 
3390
 
3391
- if (is_rtl()) {
3392
- wp_register_style('rlrsssl-css', trailingslashit(rsssl_url) . 'css/main-rtl.min.css', "", rsssl_version);
 
3393
  } else {
3394
- wp_register_style('rlrsssl-css', trailingslashit(rsssl_url) . 'css/main.min.css', "", rsssl_version);
3395
  }
3396
- wp_enqueue_style('rlrsssl-css');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3397
  }
3398
 
3399
  /**
@@ -3412,37 +3634,37 @@ class rsssl_admin extends rsssl_front_end
3412
  }
3413
 
3414
  register_setting('rlrsssl_options', 'rlrsssl_options', array($this, 'options_validate'));
3415
-
3416
- // Show a dismiss review
3417
- if (!$this->dismiss_review_notice && !$this->review_notice_shown && get_option('rsssl_activation_timestamp') && get_option('rsssl_activation_timestamp') < strtotime("-1 month")) {
3418
- add_settings_field('id_dismiss_review_notice', __("Dismiss review notice", "really-simple-ssl"), array($this, 'get_option_dismiss_review_notice'), 'rlrsssl', 'rlrsssl_settings');
3419
- }
3420
-
3421
  add_settings_section('rlrsssl_settings', __("Settings", "really-simple-ssl"), array($this, 'section_text'), 'rlrsssl');
3422
- add_settings_field('id_autoreplace_insecure_links', __("Mixed content fixer", "really-simple-ssl"), array($this, 'get_option_autoreplace_insecure_links'), 'rlrsssl', 'rlrsssl_settings');
 
 
3423
 
3424
  //only show option to enable or disable mixed content and redirect when SSL is detected
3425
  if ($this->ssl_enabled) {
3426
- add_settings_field('id_wp_redirect', __("Enable WordPress 301 redirection to SSL", "really-simple-ssl"), array($this, 'get_option_wp_redirect'), 'rlrsssl', 'rlrsssl_settings');
 
3427
 
3428
  //when enabled networkwide, it's handled on the network settings page
3429
  if (RSSSL()->rsssl_server->uses_htaccess() && (!is_multisite() || !RSSSL()->rsssl_multisite->ssl_enabled_networkwide)) {
3430
- add_settings_field('id_htaccess_redirect', __("Enable 301 .htaccess redirect", "really-simple-ssl"), array($this, 'get_option_htaccess_redirect'), 'rlrsssl', 'rlrsssl_settings');
 
3431
  }
3432
-
3433
- add_settings_field('id_javascript_redirect', __("Enable Javascript redirection to SSL", "really-simple-ssl"), array($this, 'get_option_javascript_redirect'), 'rlrsssl', 'rlrsssl_settings');
3434
  }
3435
 
3436
- add_settings_field('id_debug', __("Debug", "really-simple-ssl"), array($this, 'get_option_debug'), 'rlrsssl', 'rlrsssl_settings');
3437
  //on multisite this setting can only be set networkwide
3438
  if (RSSSL()->rsssl_server->uses_htaccess() && !is_multisite()) {
3439
- add_settings_field('id_do_not_edit_htaccess', __("Stop editing the .htaccess file", "really-simple-ssl"), array($this, 'get_option_do_not_edit_htaccess'), 'rlrsssl', 'rlrsssl_settings');
 
3440
  }
3441
 
3442
- add_settings_field('id_switch_mixed_content_fixer_hook', __("Use alternative method to fix mixed content", "really-simple-ssl"), array($this, 'get_option_switch_mixed_content_fixer_hook'), 'rlrsssl', 'rlrsssl_settings');
3443
- add_settings_field('id_dismiss_all_notices', __("Dismiss all Really Simple SSL notices", "really-simple-ssl"), array($this, 'get_option_dismiss_all_notices'), 'rlrsssl', 'rlrsssl_settings');
 
 
 
3444
 
3445
- add_settings_field('id_deactivate_keep_ssl', __("Deactivate plugin and keep SSL", "really-simple-ssl"), array($this, 'get_option_deactivate_keep_ssl'), 'rlrsssl', 'rlrsssl_settings');
 
3446
 
3447
  }
3448
 
@@ -3457,9 +3679,7 @@ class rsssl_admin extends rsssl_front_end
3457
 
3458
  public function section_text()
3459
  {
3460
- ?>
3461
- <p><?php _e('Settings to optimize your SSL configuration', 'really-simple-ssl'); ?></p>
3462
- <?php
3463
  }
3464
 
3465
  /**
@@ -3481,8 +3701,6 @@ class rsssl_admin extends rsssl_front_end
3481
  $newinput['review_notice_shown'] = $this->review_notice_shown;
3482
  $newinput['plugin_db_version'] = $this->plugin_db_version;
3483
  $newinput['ssl_enabled'] = $this->ssl_enabled;
3484
- $newinput['debug_log'] = $this->debug_log;
3485
- $newinput['dismiss_review_notice'] = $this->dismiss_review_notice;
3486
 
3487
  if (!empty($input['hsts']) && $input['hsts'] == '1') {
3488
  $newinput['hsts'] = TRUE;
@@ -3508,13 +3726,6 @@ class rsssl_admin extends rsssl_front_end
3508
  $newinput['autoreplace_insecure_links'] = FALSE;
3509
  }
3510
 
3511
- if (!empty($input['debug']) && $input['debug'] == '1') {
3512
- $newinput['debug'] = TRUE;
3513
- } else {
3514
- $newinput['debug'] = FALSE;
3515
- $this->debug_log = "";
3516
- }
3517
-
3518
  if (!empty($input['do_not_edit_htaccess']) && $input['do_not_edit_htaccess'] == '1') {
3519
  $newinput['do_not_edit_htaccess'] = TRUE;
3520
  } else {
@@ -3533,12 +3744,6 @@ class rsssl_admin extends rsssl_front_end
3533
  $newinput['dismiss_all_notices'] = FALSE;
3534
  }
3535
 
3536
- if (!empty($input['dismiss_review_notice']) && $input['dismiss_review_notice'] == '1') {
3537
- $newinput['dismiss_review_notice'] = TRUE;
3538
- } else {
3539
- $newinput['dismiss_review_notice'] = FALSE;
3540
- }
3541
-
3542
  if (!empty($input['htaccess_redirect']) && $input['htaccess_redirect'] == '1') {
3543
  $newinput['htaccess_redirect'] = TRUE;
3544
  } else {
@@ -3548,60 +3753,6 @@ class rsssl_admin extends rsssl_front_end
3548
  return $newinput;
3549
  }
3550
 
3551
- /**
3552
- * Insert option into settings form
3553
- * deprecated
3554
- * @since 2.0
3555
- *
3556
- * @access public
3557
- *
3558
- */
3559
-
3560
- public function get_option_debug()
3561
- {
3562
-
3563
- ?>
3564
- <label class="rsssl-switch">
3565
- <input id="rlrsssl_options" name="rlrsssl_options[debug]" size="40" value="1"
3566
- type="checkbox" <?php checked(1, $this->debug, true) ?> />
3567
- <span class="rsssl-slider rsssl-round"></span>
3568
- </label>
3569
- <?php
3570
- RSSSL()->rsssl_help->get_help_tip(__("Enable this option to get debug info in the debug tab.", "really-simple-ssl"));
3571
-
3572
- }
3573
-
3574
- /**
3575
- * Insert option into settings form
3576
- * @since 2.2
3577
- *
3578
- * @access public
3579
- *
3580
- */
3581
-
3582
- public function get_option_javascript_redirect()
3583
- {
3584
- $javascript_redirect = $this->javascript_redirect;
3585
- $disabled = "";
3586
- $comment = "";
3587
-
3588
- if (is_multisite() && rsssl_multisite::this()->javascript_redirect) {
3589
- $disabled = "disabled";
3590
- $javascript_redirect = TRUE;
3591
- $comment = __("This option is enabled on the network menu.", "really-simple-ssl");
3592
- }
3593
-
3594
- ?>
3595
- <label class="rsssl-switch">
3596
- <input id="rlrsssl_options" name="rlrsssl_options[javascript_redirect]" size="40" value="1"
3597
- type="checkbox" <?php checked(1, $javascript_redirect, true) ?> />
3598
- <span class="rsssl-slider rsssl-round"></span>
3599
- </label>
3600
- <?php
3601
- RSSSL()->rsssl_help->get_help_tip(__("This is a fallback you should only use if other redirection methods do not work.", "really-simple-ssl"));
3602
- echo $comment;
3603
-
3604
- }
3605
 
3606
  /**
3607
  * Insert option into settings form
@@ -3622,20 +3773,16 @@ class rsssl_admin extends rsssl_front_end
3622
  $wp_redirect = TRUE;
3623
  $comment = __("This option is enabled on the network menu.", "really-simple-ssl");
3624
  }
3625
-
3626
  ?>
3627
  <label class="rsssl-switch">
3628
  <input id="rlrsssl_options" name="rlrsssl_options[wp_redirect]" size="40" value="1"
3629
- type="checkbox" <?php checked(1, $wp_redirect, true) ?> />
3630
  <span class="rsssl-slider rsssl-round"></span>
3631
  </label>
3632
  <?php
3633
- RSSSL()->rsssl_help->get_help_tip(__("Enable this if you want to use the internal WordPress 301 redirect. Needed on NGINX servers, or if the .htaccess redirect cannot be used.", "really-simple-ssl"));
3634
- echo $comment;
3635
-
3636
  }
3637
 
3638
-
3639
  /**
3640
  * Insert option into settings form
3641
  * The .htaccess redirect is not shown for multisite sites that are enabled network wide.
@@ -3646,78 +3793,29 @@ class rsssl_admin extends rsssl_front_end
3646
  *
3647
  */
3648
 
3649
- public function get_option_htaccess_redirect()
3650
- {
3651
- $options = get_option('rlrsssl_options');
3652
-
3653
- $htaccess_redirect = $this->htaccess_redirect;
3654
- $disabled = "";
3655
- $comment = "";
3656
-
3657
- //networkwide is not shown, so this only applies to per site activated sites.
3658
- if (is_multisite() && RSSSL()->rsssl_multisite->htaccess_redirect) {
3659
  $disabled = "disabled";
3660
- $htaccess_redirect = TRUE;
3661
  $comment = __("This option is enabled on the network menu.", "really-simple-ssl");
3662
- } else {
3663
- $disabled = ($this->do_not_edit_htaccess) ? "disabled" : "";
3664
- }
3665
-
3666
- ?>
 
3667
  <label class="rsssl-switch" id="rsssl-maybe-highlight-wp-redirect-to-htaccess">
3668
  <input id="rlrsssl_options" name="rlrsssl_options[htaccess_redirect]" size="40" value="1"
3669
- type="checkbox" <?php checked(1, $this->htaccess_redirect, true) ?> />
3670
  <span class="rsssl-slider rsssl-round"></span>
3671
  </label>
3672
- <?php
3673
- RSSSL()->rsssl_help->get_help_tip(__("A .htaccess redirect is faster. Really Simple SSL detects the redirect code that is most likely to work (99% of websites), but this is not 100%. Make sure you know how to regain access to your site if anything goes wrong!", "really-simple-ssl"));
3674
- echo $comment;
3675
-
3676
- if ($this->uses_htaccess_conf()) {
3677
- $htaccess_file = "htaccess.conf (/conf/htaccess.conf/)";
3678
- } else {
3679
- $htaccess_file = ".htaccess";
3680
- }
3681
-
3682
- if ($this->htaccess_redirect && (!is_writable($this->htaccess_file()) || !$this->htaccess_test_success)) {
3683
- echo "<br><br>";
3684
- if (!is_writable($this->htaccess_file())) _e("The $htaccess_file file is not writable. Add these lines to your htaccess manually, or set 644 writing permissions.", "really-simple-ssl");
3685
- if (!$this->htaccess_test_success) _e("The .htaccess redirect rules that were selected by this plugin failed in the test. The following redirect rules were tested:", "really-simple-ssl");
3686
- echo "<br><br>";
3687
- if ($this->ssl_type != "NA") {
3688
- $manual = true;
3689
- $rules = $this->get_redirect_rules($manual);
3690
-
3691
- $arr_search = array("<", ">", "\n");
3692
- $arr_replace = array("&lt", "&gt", "<br>");
3693
- $rules = str_replace($arr_search, $arr_replace, $rules);
3694
-
3695
- ?>
3696
- <code>
3697
- <?php echo $rules; ?>
3698
- </code>
3699
- <?php
3700
- } else {
3701
- _e("The plugin could not detect any possible redirect rule.", "really-simple-ssl");
3702
- }
3703
- }
3704
-
3705
- //on multisite, the .htaccess do not edit option is not available
3706
- if (!is_multisite()) {
3707
- if ($this->do_not_edit_htaccess) {
3708
- _e("If the setting 'do not edit htaccess' is enabled, you can't change this setting.", "really-simple-ssl");
3709
- } elseif (!$this->htaccess_redirect) {
3710
- $link_start = '<a target="_blank" href="https://really-simple-ssl.com/knowledge-base/remove-htaccess-redirect-site-lockout/">';
3711
- $link_end = '</a>';
3712
- printf(
3713
- __('Before you enable this, make sure you know how to %1$sregain access%2$s to your site in case of a redirect loop.', 'really-simple-ssl'),
3714
- $link_start,
3715
- $link_end
3716
- );
3717
- }
3718
- }
3719
-
3720
- }
3721
 
3722
  /**
3723
  * Insert option into settings form
@@ -3737,8 +3835,10 @@ class rsssl_admin extends rsssl_front_end
3737
  <span class="rsssl-slider rsssl-round"></span>
3738
  </label>
3739
  <?php
3740
- RSSSL()->rsssl_help->get_help_tip(__("If you want to customize the Really Simple SSL .htaccess, you need to prevent Really Simple SSL from rewriting it. Enabling this option will do that.", "really-simple-ssl"));
3741
- if (!$this->do_not_edit_htaccess && !is_writable($this->htaccess_file())) _e(".htaccess is currently not writable.", "really-simple-ssl");
 
 
3742
  }
3743
 
3744
  /**
@@ -3759,7 +3859,6 @@ class rsssl_admin extends rsssl_front_end
3759
  <span class="rsssl-slider rsssl-round"></span>
3760
  </label>
3761
  <?php
3762
- RSSSL()->rsssl_help->get_help_tip(__("If this option is set to true, the mixed content fixer will fire on the init hook instead of the template_redirect hook. Only use this option when you experience problems with the mixed content fixer.", "really-simple-ssl"));
3763
  }
3764
 
3765
  /**
@@ -3781,7 +3880,6 @@ class rsssl_admin extends rsssl_front_end
3781
  <span class="rsssl-slider rsssl-round"></span>
3782
  </label>
3783
  <?php
3784
- RSSSL()->rsssl_help->get_help_tip(__("Enable this option to dismiss all +1 notices in the Configuration tab", "really-simple-ssl"));
3785
  }
3786
 
3787
  /**
@@ -3794,68 +3892,136 @@ class rsssl_admin extends rsssl_front_end
3794
  *
3795
  */
3796
 
3797
-
3798
- public function get_option_deactivate_keep_ssl()
3799
  {
3800
 
3801
  ?>
 
3802
  <style>
3803
- #TB_ajaxContent {
 
3804
  text-align: center !important;
 
3805
  }
3806
- #TB_window {
3807
- height: 370px !important;
 
 
 
 
 
 
 
 
 
 
3808
  }
3809
- </style>
3810
- <div><input class="thickbox button" title="" type="button" style="display: block; float: left;" alt="#TB_inline?
3811
- height=370&width=400&inlineId=deactivate_keep_ssl" value="<?php echo __('Deactivate Plugin and keep SSL', 'really-simple-ssl'); ?>"/></div>
3812
- <div id="deactivate_keep_ssl" style="display: none;">
3813
- <h1 style="margin: 10px 0; text-align: center;"><?php _e("Are you sure?", "really-simple-ssl") ?></h1>
3814
- <h2 style="margin: 20px 0; text-align: left;"><?php _e("Deactivating the plugin while keeping SSL will do the following:", "really-simple-ssl") ?></h2>
3815
- <ul style="text-align: left; font-size: 1.2em;">
3816
- <li><?php _e("* The mixed content fixer will stop working", "really-simple-ssl") ?></li>
3817
- <li><?php _e("* The WordPress 301 and Javascript redirect will stop working", "really-simple-ssl") ?></li>
3818
- <li><?php _e("* Your site address will remain https://", "really-simple-ssl") ?> </li>
3819
- <li><?php _e("* The .htaccess redirect will remain active", "really-simple-ssl") ?></li>
3820
- <?php _e("Deactivating the plugin via the plugins overview will revert the site back to http://.", "really-simple-ssl") ?>
3821
- </ul>
3822
 
3823
- <script>
3824
- jQuery(document).ready(function ($) {
3825
- $('#rsssl_close_tb_window').click(tb_remove);
3826
- });
3827
- </script>
3828
- <?php
3829
- $token = wp_create_nonce('rsssl_deactivate_plugin');
3830
- $deactivate_keep_ssl_link = admin_url("options-general.php?page=rlrsssl_really_simple_ssl&action=uninstall_keep_ssl&token=" . $token);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3831
 
3832
- ?>
3833
- <a class="button rsssl-button-deactivate-keep-ssl" href="<?php add_thickbox() ?>
3834
- <?php echo $deactivate_keep_ssl_link ?>"><?php _e("I'm sure I want to deactivate", "really-simple-ssl") ?>
3835
- </a>
3836
- &nbsp;&nbsp;
3837
- <a class="button" href="#" id="rsssl_close_tb_window"><?php _e("Cancel", "really-simple-ssl") ?></a>
3838
 
 
 
 
 
3839
 
3840
- </div>
3841
- <?php
3842
- RSSSL()->rsssl_help->get_help_tip(__("Clicking this button will deactivate the plugin while keeping your site on SSL. The WordPress 301 redirect, Javascript redirect and mixed content fixer will stop working. The site address will remain https:// and the .htaccess redirect will remain active. Deactivating the plugin via the plugins overview will revert the site back to http://.", "really-simple-ssl"));
 
 
 
3843
 
3844
- }
 
 
 
 
 
 
 
3845
 
3846
- /**
3847
- * Since 3.3.2
3848
- */
 
 
 
 
 
 
 
 
 
 
 
 
3849
 
3850
- public function get_option_dismiss_review_notice() {
3851
- ?>
3852
- <label class="rsssl-switch">
3853
- <input id="rlrsssl_options" name="rlrsssl_options[dismiss_review_notice]" size="40" value="1"
3854
- type="checkbox" <?php checked(1, $this->dismiss_review_notice, true) ?> />
3855
- <span class="rsssl-slider rsssl-round"></span>
3856
- </label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3857
  <?php
3858
- RSSSL()->rsssl_help->get_help_tip(__("Enable this option to dismiss the review notice.", "really-simple-ssl"));
3859
  }
3860
 
3861
  /**
@@ -3866,7 +4032,6 @@ class rsssl_admin extends rsssl_front_end
3866
 
3867
  public function get_option_autoreplace_insecure_links()
3868
  {
3869
- //$options = get_option('rlrsssl_options');
3870
  $autoreplace_mixed_content = $this->autoreplace_insecure_links;
3871
  $disabled = "";
3872
  $comment = "";
@@ -3878,19 +4043,20 @@ class rsssl_admin extends rsssl_front_end
3878
  }
3879
 
3880
  ?>
3881
- <label class="rsssl-switch">
3882
  <input id="rlrsssl_options" name="rlrsssl_options[autoreplace_insecure_links]" size="40" value="1"
3883
- type="checkbox" <?php checked(1, $autoreplace_mixed_content, true) ?> />
3884
  <span class="rsssl-slider rsssl-round"></span>
3885
  </label>
3886
- <?php
3887
- RSSSL()->rsssl_help->get_help_tip(__("In most cases you need to leave this enabled, to prevent mixed content issues on your site.", "really-simple-ssl"));
3888
- echo $comment;
3889
  }
3890
 
3891
  /**
3892
  * Add settings link on plugins overview page
3893
- *
 
3894
  * @since 2.0
3895
  *
3896
  * @access public
@@ -3900,46 +4066,22 @@ class rsssl_admin extends rsssl_front_end
3900
 
3901
  public function plugin_settings_link($links)
3902
  {
3903
-
3904
- //add 'revert to http' after the Deactivate link on the plugins overview page
3905
- if (isset($links['deactivate'])) {
3906
- $deactivate_link = $links['deactivate'];
3907
- $links['deactivate'] = str_replace('</a>', "&nbsp" . __("(revert to http)", "really-simple-ssl") . '</a>', $deactivate_link);
3908
- }
3909
-
3910
  $settings_link = '<a href="' . admin_url("options-general.php?page=rlrsssl_really_simple_ssl") . '">' . __("Settings", "really-simple-ssl") . '</a>';
3911
  array_unshift($links, $settings_link);
3912
 
3913
- $faq_link = '<a target="_blank" href="https://really-simple-ssl.com/knowledge-base/">' . __('Docs', 'really-simple-ssl') . '</a>';
3914
- array_unshift($links, $faq_link);
3915
-
3916
- if (defined("rsssl_pro_version")) {
3917
- if (class_exists('RSSSL_PRO')) {
3918
- if (RSSSL_PRO()->rsssl_licensing->license_is_valid()) return $links;
3919
- }
3920
- }
3921
- if (!defined("rsssl_pro_version")) {
3922
- if (!class_exists('RSSSL_PRO')) {
3923
- $premium_link = '<a target="_blank" href="https://really-simple-ssl.com/downloads/really-simple-ssl-pro/">' . __('Premium Support', 'really-simple-ssl') . '</a>';
3924
- array_unshift($links, $premium_link);
3925
- }
3926
- }
3927
- return $links;
3928
- }
3929
-
3930
- /**
3931
- * Check for possible plugin conflicts
3932
- *
3933
- * @since 2.0
3934
- *
3935
- * @access public
3936
- * @return none
3937
- *
3938
- */
3939
 
3940
- public function check_plugin_conflicts()
3941
- {
3942
- // $this->plugin_conflict["WOOCOMMERCE_FORCESSL"] = TRUE;
 
 
 
3943
  }
3944
 
3945
 
@@ -4022,7 +4164,6 @@ class rsssl_admin extends rsssl_front_end
4022
 
4023
  protected function get_test_page_contents()
4024
  {
4025
-
4026
  $filecontents = get_transient('rsssl_testpage');
4027
  if (!$filecontents) {
4028
  $filecontents = "";
@@ -4101,20 +4242,22 @@ class rsssl_admin extends rsssl_front_end
4101
  <script>
4102
  jQuery(document).ready(function ($) {
4103
  'use strict';
4104
- <?php
4105
- if (isset($_GET['highlight'])) {
4106
- $setting_name = sanitize_text_field( $_GET['highlight'] );
4107
- echo "var setting_name = '$setting_name'" . ";";
4108
- }
4109
- ?>
4110
-
4111
- $(function() {
4112
- if(typeof setting_name !== 'undefined' && setting_name != '') {
4113
- if (document.location.href.indexOf('&highlight=' + setting_name) > -1) {
4114
- $('#rsssl-maybe-highlight-' + setting_name).closest('tr').addClass('rsssl-highlight');
4115
  }
4116
  }
4117
- });
 
 
 
4118
  });
4119
  </script>
4120
  <?php
@@ -4136,12 +4279,33 @@ class rsssl_admin extends rsssl_front_end
4136
  if ($http_referrer && strpos( $http_referrer, "&highlight=" ) ) {
4137
  $url = add_query_arg( array(
4138
  "page" => "rlrsssl_really_simple_ssl",
4139
- "tab" => "settings"
4140
  ), admin_url( "options-general.php" ) );
4141
  wp_safe_redirect( $url );
4142
  exit;
4143
  }
4144
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4145
  } //class closure
4146
 
4147
  /**
@@ -4149,11 +4313,6 @@ class rsssl_admin extends rsssl_front_end
4149
  * @return string
4150
  */
4151
 
4152
- if (!function_exists('rsssl_mixed_content_fixer_detected')) {
4153
- function rsssl_mixed_content_fixer_detected() {
4154
- return RSSSL()->really_simple_ssl->mixed_content_fixer_detected();
4155
- }
4156
- }
4157
 
4158
  if (!function_exists('rsssl_site_has_ssl')) {
4159
  function rsssl_site_has_ssl() {
@@ -4161,35 +4320,28 @@ if (!function_exists('rsssl_site_has_ssl')) {
4161
  }
4162
  }
4163
 
4164
- if (!function_exists('rsssl_autoreplace_insecure_links')) {
4165
- function rsssl_autoreplace_insecure_links() {
4166
- return RSSSL()->really_simple_ssl->autoreplace_insecure_links;
4167
- }
4168
- }
4169
-
4170
  if (!function_exists('rsssl_ssl_enabled')) {
4171
- function rsssl_ssl_enabled() {
4172
- if ( RSSSL()->really_simple_ssl->ssl_enabled ) {
4173
- return 'ssl-enabled';
4174
- } else {
4175
- return 'ssl-not-enabled';
4176
- }
4177
- }
4178
  }
4179
 
4180
  if (!function_exists('rsssl_ssl_detected')) {
4181
  function rsssl_ssl_detected() {
 
4182
  if ( ! RSSSL()->really_simple_ssl->wpconfig_ok() ) {
4183
- return 'fail';
4184
  }
4185
- if ( ! RSSSL()->really_simple_ssl->site_has_ssl ) {
4186
- return 'no-ssl-detected';
 
4187
  }
4188
- if ( RSSSL()->rsssl_certificate->is_valid() ) {
4189
- return 'ssl-detected';
 
4190
  }
4191
 
4192
- return false;
4193
  }
4194
  }
4195
 
@@ -4198,84 +4350,48 @@ if (!function_exists('rsssl_check_redirect')) {
4198
  if ( ! RSSSL()->really_simple_ssl->has_301_redirect() ) {
4199
  return 'no-redirect-set';
4200
  }
 
4201
  if ( RSSSL()->really_simple_ssl->has_301_redirect() && RSSSL()->rsssl_server->uses_htaccess() && RSSSL()->really_simple_ssl->htaccess_contains_redirect_rules() ) {
4202
  return 'htaccess-redirect-set';
4203
  }
4204
- if ( RSSSL()->really_simple_ssl->has_301_redirect() && RSSSL()->really_simple_ssl->wp_redirect && RSSSL()->rsssl_server->uses_htaccess() && ! RSSSL()->really_simple_ssl->htaccess_redirect ) {
4205
- return 'wp-redirect-to-htaccess';
4206
- }
4207
- if ( RSSSL()->rsssl_server->uses_htaccess() && ( ! is_multisite() || ! RSSSL()->rsssl_multisite->is_per_site_activated_multisite_subfolder_install() ) ) {
4208
- if ( ! is_writable( RSSSL()->really_simple_ssl->htaccess_file() ) ) {
4209
- return 'htaccess-not-writeable';
4210
- } else {
4211
- return 'htaccess-cannot-be-set';
4212
- }
4213
- } else {
4214
- return 'default';
4215
- }
4216
- }
4217
- }
4218
 
4219
- if (!function_exists('rsssl_hsts_enabled')) {
4220
- function rsssl_hsts_enabled() {
4221
- if ( RSSSL()->really_simple_ssl->contains_hsts() ) {
4222
- return 'contains-hsts';
4223
- } else {
4224
- return 'no-hsts';
4225
  }
4226
- }
4227
- }
4228
 
4229
- if (!function_exists('rsssl_secure_cookies_set')) {
4230
- function rsssl_secure_cookies_set() {
4231
- if ( RSSSL()->really_simple_ssl->contains_secure_cookie_settings() ) {
4232
- return 'set';
4233
- } else {
4234
- return 'not-set';
4235
  }
4236
- }
4237
- }
4238
 
4239
- if (!function_exists('rsssl_scan_upsell')) {
4240
- function rsssl_scan_upsell() {
4241
- return 'upsell';
4242
  }
4243
  }
4244
 
4245
- if (!function_exists('rsssl_htaccess_redirect_allowed')) {
4246
- function rsssl_htaccess_redirect_allowed() {
4247
- return RSSSL()->really_simple_ssl->htaccess_redirect_allowed();
4248
- }
4249
- }
4250
 
4251
- // Non-prefixed for backwards compatibility
4252
- if (!function_exists('uses_elementor')) {
4253
- function uses_elementor() {
4254
- if ( defined( 'ELEMENTOR_VERSION' ) || defined( 'ELEMENTOR_PRO_VERSION' ) ) {
4255
  return true;
4256
- } else {
4257
- return false;
4258
  }
 
4259
  }
4260
  }
4261
 
4262
  if (!function_exists('rsssl_uses_elementor')) {
4263
  function rsssl_uses_elementor() {
4264
- if ( defined( 'ELEMENTOR_VERSION' ) || defined( 'ELEMENTOR_PRO_VERSION' ) ) {
4265
- return true;
4266
- } else {
4267
- return false;
4268
- }
4269
  }
4270
  }
4271
 
4272
  if (!function_exists('rsssl_uses_divi')) {
4273
  function rsssl_uses_divi() {
4274
- if ( defined( 'ET_CORE_PATH' ) ) {
4275
- return true;
4276
- } else {
4277
- return false;
4278
- }
4279
  }
4280
  }
4281
 
@@ -4293,12 +4409,6 @@ if (!function_exists('rsssl_ssl_activation_time_no_longer_then_3_days_ago')) {
4293
  }
4294
  }
4295
 
4296
- if (!function_exists('rsssl_elementor_notice')) {
4297
- function rsssl_elementor_notice() {
4298
- return 'elementor-notice';
4299
- }
4300
- }
4301
-
4302
  if (!function_exists('rsssl_wp_redirect_condition')) {
4303
  function rsssl_wp_redirect_condition() {
4304
  if ( RSSSL()->really_simple_ssl->has_301_redirect() && RSSSL()->really_simple_ssl->wp_redirect && ! RSSSL()->really_simple_ssl->htaccess_redirect ) {
@@ -4318,24 +4428,3 @@ if (!function_exists('rsssl_wordpress_redirect')) {
4318
  }
4319
  }
4320
  }
4321
-
4322
- if (!function_exists('rsssl_no_multisite')) {
4323
- function rsssl_no_multisite() {
4324
- if ( ! is_multisite() ) {
4325
- return true;
4326
- } else {
4327
- return false;
4328
- }
4329
- }
4330
- }
4331
-
4332
- if (!function_exists('rsssl_does_not_use_pro')) {
4333
- function rsssl_does_not_use_pro() {
4334
- if ( ! defined("rsssl_pro_version") ) {
4335
- // Does not use RSSSL pro
4336
- return true;
4337
- } else {
4338
- return false;
4339
- }
4340
- }
4341
- }
5
  {
6
 
7
  private static $_this;
 
8
  public $wpconfig_siteurl_not_fixed = FALSE;
9
  public $no_server_variable = FALSE;
10
  public $errors = Array();
11
+ public $tasks = array();
12
 
13
  public $do_wpconfig_loadbalancer_fix = FALSE;
14
  public $site_has_ssl = FALSE;
20
  //general settings
21
  public $capability = 'activate_plugins';
22
 
 
23
  public $htaccess_test_success = FALSE;
24
  public $plugin_version = rsssl_version; //deprecated, but used in pro plugin until 1.0.25
25
 
26
  public $plugin_dir = "really-simple-ssl";
27
  public $plugin_filename = "rlrsssl-really-simple-ssl.php";
28
  public $ABSpath;
 
29
  public $do_not_edit_htaccess = FALSE;
30
  public $javascript_redirect = FALSE;
31
  public $htaccess_redirect = FALSE;
37
  public $debug = TRUE;
38
  public $debug_log;
39
 
 
40
  public $plugin_db_version;
 
 
41
  public $ssl_type = "NA";
42
+ public $dismiss_all_notices = false;
43
+ public $pro_url;
44
 
45
  function __construct()
46
  {
56
 
57
  $this->get_plugin_upgraded(); //call always, otherwise db version will not match anymore.
58
 
59
+ if (is_multisite()) {
60
+ $this->pro_url = 'https://really-simple-ssl.com/pro-multisite';
61
+ } else {
62
+ $this->pro_url = 'https://really-simple-ssl.com/pro';
63
+ }
64
 
65
  register_deactivation_hook(dirname(__FILE__) . "/" . $this->plugin_filename, array($this, 'deactivate'));
 
66
  add_action('admin_init', array($this, 'add_privacy_info'));
67
+ add_action('admin_init', array($this, 'maybe_dismiss_review_notice'));
68
+ add_action( "update_option_rlrsssl_options", array( $this, "maybe_clear_transients" ), 10, 3 );
69
+
70
+ // Only show deactivate popup when SSL has been enabled.
71
+ if ($this->ssl_enabled) {
72
+ add_action('admin_footer', array($this, 'deactivate_popup'), 40);
73
+ }
74
 
75
  }
76
 
79
  return self::$_this;
80
  }
81
 
82
+ /**
83
+ * @param $oldvalue
84
+ * @param $newvalue
85
+ * @param $option
86
+ */
87
+ public function maybe_clear_transients($oldvalue, $newvalue, $option){
88
+ if ($oldvalue !== $newvalue ) {
89
+ $this->clear_transients();
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Clear some transients
95
+ */
96
+
97
+ public function clear_transients(){
98
+ delete_transient('rsssl_mixed_content_fixer_detected');
99
+ delete_transient('rsssl_plusone_count');
100
+ delete_transient('rsssl_remaining_task_count');
101
+ }
102
+
103
+ /**
104
+ * Add some privacy info, telling our users we aren't tracking them
105
+ */
106
+
107
  public function add_privacy_info()
108
  {
109
  if (!function_exists('wp_add_privacy_policy_content')) {
121
  );
122
  }
123
 
124
+ /**
125
+ * Dismiss review notice of dismissed by the user
126
+ */
127
+
128
+ public function maybe_dismiss_review_notice() {
129
+ if (isset($_GET['rsssl_dismiss_review_notice'])){
130
+ $this->review_notice_shown = true;
131
+ $this->save_options();
132
+ }
133
  }
134
 
135
  /**
167
  add_action('shutdown', 'flush_rewrite_rules');
168
  }
169
 
170
+ // Set default progress toggle to remaining tasks if it hasn't been set
171
+ if (!get_option('rsssl_all_tasks') && !get_option('rsssl_remaining_tasks') ) {
172
+ update_option('rsssl_remaining_tasks', true);
173
+ }
 
 
174
 
175
+ /*
176
+ Detect configuration when:
177
+ - SSL activation just confirmed.
178
+ - on settings page
179
+ - No SSL detected
180
+ */
181
 
182
  //when configuration should run again
183
+ if ($this->clicked_activate_ssl() || !$this->ssl_enabled || !$this->site_has_ssl || $is_on_settings_page || is_network_admin() || defined('RSSSL_DOING_SYSTEM_STATUS') ) {
 
184
  if (is_multisite()) $this->build_domain_list();//has to come after clicked_activate_ssl, otherwise this domain won't get counted.
185
  $this->detect_configuration();
186
 
206
 
207
  //when SSL is enabled, and not enabled by user, ask for activation.
208
  add_action("admin_notices", array($this, 'show_notice_activate_ssl'), 10);
 
209
  add_action('rsssl_activation_notice', array($this, 'ssl_detected'), 10);
210
  add_action('rsssl_activation_notice_inner', array($this, 'almost_ready_to_migrate'), 30);
211
+ add_action('rsssl_activation_notice_footer', array($this, 'show_enable_ssl_button'), 50);
 
 
 
212
 
213
  //add the settings page for the plugin
214
  add_action('admin_enqueue_scripts', array($this, 'enqueue_assets'));
 
215
 
216
  //settings page, form and settings link in the plugins page
217
  add_action('admin_menu', array($this, 'add_settings_page'), 40);
218
+ add_action('admin_init', array($this, 'create_form'), 40);
219
+ add_action('admin_init', array($this, 'backward_compatibility'), 40);
220
  add_action('admin_init', array($this, 'listen_for_deactivation'), 40);
221
+ add_action( 'update_option_rlrsssl_options', array( $this, 'maybe_remove_highlight_from_url' ), 50 );
 
 
 
 
222
 
223
  $plugin = rsssl_plugin;
224
  add_filter("plugin_action_links_$plugin", array($this, 'plugin_settings_link'));
226
  //Add update notification to Settings admin menu
227
  add_action('admin_menu', array($this, 'rsssl_edit_admin_menu') );
228
 
 
 
229
 
230
  //callbacks for the ajax dismiss buttons
 
231
  add_action('wp_ajax_dismiss_success_message', array($this, 'dismiss_success_message_callback'));
232
  add_action('wp_ajax_rsssl_dismiss_review_notice', array($this, 'dismiss_review_notice_callback'));
233
  add_action('wp_ajax_rsssl_dismiss_settings_notice', array($this, 'dismiss_settings_notice_callback'));
234
+ add_action('wp_ajax_rsssl_update_task_toggle_option', array($this, 'update_task_toggle_option'));
235
 
236
  //handle notices
237
  add_action('admin_notices', array($this, 'show_notices'));
242
  add_action("update_option_rlrsssl_options", array($this, "update_htaccess_after_settings_save"), 20, 3);
243
  }
244
 
245
+ public function check_upgrade() {
246
+ $prev_version = get_option( 'rsssl_current_version', false );
247
+ if ( $prev_version && version_compare( $prev_version, '4.0', '<' ) ) {
248
+ update_option('rsssl_remaining_tasks', true);
249
+ }
250
+ update_option( 'rsssl_current_version', rsssl_version );
251
+ }
252
+
253
+ /**
254
+ * Because of breaking changes in 4.0 we need to remove some legacy actions to ensure no issues occur
255
+ */
256
+ public function backward_compatibility(){
257
+ if ( function_exists('RSSSL_PRO') ) remove_action( 'admin_init', array(RSSSL_PRO()->rsssl_premium_options, 'add_pro_settings'),60);
258
+ }
259
+
260
+ /**
261
  * Deactivate the plugin while keeping SSL
262
  * Activated when the 'uninstall_keep_ssl' button is clicked in the settings tab
263
  *
265
 
266
  public function listen_for_deactivation()
267
  {
 
 
 
268
  //check user role
269
  if (!current_user_can($this->capability)) return;
270
 
271
  //check nonce
272
  if (!isset($_GET['token']) || (!wp_verify_nonce($_GET['token'], 'rsssl_deactivate_plugin'))) return;
273
+
274
  //check for action
275
  if (isset($_GET["action"]) && $_GET["action"] == 'uninstall_keep_ssl') {
276
  //deactivate plugin, but don't revert to http.
278
  $plugin = plugin_basename(trim($plugin));
279
 
280
  if (is_multisite()) {
 
281
  $network_current = get_site_option('active_sitewide_plugins', array());
282
  if (is_plugin_active_for_network($plugin)) {
283
  unset($network_current[$plugin]);
305
  }
306
  }
307
 
308
+ /**
 
309
  * Remove the plugin from the active plugins array when called from listen_for_deactivation
310
  *
311
  * */
312
 
 
313
  public function remove_plugin_from_array($plugin, $current)
314
  {
315
  $key = array_search($plugin, $current);
319
  return $current;
320
  }
321
 
322
+ /**
323
  * @Since 3.1
324
  *
325
  * Check if site uses an htaccess.conf file, used in bitnami installations
347
  return $sites;
348
  }
349
 
350
+ /**
351
+ * The new get_sites function returns an object.
352
+ * @param $site
353
+ */
354
 
355
  public function switch_to_blog_bw_compatible($site)
356
  {
364
  }
365
 
366
 
367
+ /**
368
+ * checks if the user just clicked the "activate SSL" button.
369
+ */
370
 
371
  private function clicked_activate_ssl()
372
  {
373
  if (!current_user_can($this->capability)) return;
 
374
 
375
  if (isset($_POST['rsssl_do_activate_ssl'])) {
376
  $this->activate_ssl();
377
+ update_option('rsssl_activation_timestamp', time());
 
 
 
378
 
379
  return true;
380
  }
383
  }
384
 
385
 
386
+ /**
387
+ * Activate the SSL for this site
388
+ */
389
 
390
  public function activate_ssl()
391
  {
392
  $this->ssl_enabled = true;
393
  $this->wp_redirect = true;
 
394
  $this->set_siteurl_to_ssl();
395
  $this->save_options();
 
 
396
  }
397
 
398
+ /**
399
+ * Deactivate SSL for this site
400
+ */
401
 
402
  public function deactivate_ssl()
403
  {
409
  $this->save_options();
410
  }
411
 
412
+ public function redirect_to_settings_page() {
413
  if (isset($_GET['page']) && $_GET['page'] == 'rlrsssl_really_simple_ssl') return;
414
  $url = add_query_arg( array(
415
  "page" => "rlrsssl_really_simple_ssl",
416
+ "tab" => "configuration",
417
  ), admin_url( "options-general.php" ) );
418
  wp_redirect( $url );
419
  exit;
432
  return apply_filters('rsssl_wpconfig_ok_check', $result);
433
  }
434
 
435
+ /**
436
+ This message is shown when SSL is not enabled by the user yet
437
+ */
 
438
 
439
  public function show_notice_activate_ssl()
440
  {
441
  //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
442
  $screen = get_current_screen();
443
+ if ( $screen->base === 'post' ) return;
444
 
445
  if ($this->ssl_enabled) return;
446
 
462
 
463
  }
464
 
465
+ /**
466
+ * Show a notice that the website is ready to migrate to SSL.
467
+ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
468
 
469
+ public function ssl_detected()
470
  {
471
+ if ($this->site_has_ssl || (defined('RSSSL_FORCE_ACTIVATE') && RSSSL_FORCE_ACTIVATE)) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
472
 
473
+ ob_start();
474
+ do_action('rsssl_activation_notice_inner');
475
+ $content = ob_get_clean();
476
 
477
+ ob_start();
478
+ do_action('rsssl_activation_notice_footer');
479
+ $footer = ob_get_clean();
480
 
481
+ $class = apply_filters("rsssl_activation_notice_classes", "updated activate-ssl rsssl-pro-dismiss-notice");
482
+ $title = __("Almost ready to migrate to SSL!", "really-simple-ssl");
483
+ echo $this->notice_html( $class, $title, $content, $footer);
484
+ }
485
+ }
486
 
487
+ /**
488
+ * Show almost ready to migrate notice
489
+ */
490
+ public function almost_ready_to_migrate()
491
+ {
492
+ _e("Before you migrate, please check for: ", 'really-simple-ssl'); ?>
493
+ <p>
494
+ <ul>
495
+ <li><?php _e('Http references in your .css and .js files: change any http:// into https://', 'really-simple-ssl'); ?></li>
496
+ <li><?php _e('Images, stylesheets or scripts from a domain without an SSL certificate: remove them or move to your own server', 'really-simple-ssl'); ?></li><?php
497
 
498
  $backup_link = "https://really-simple-ssl.com/knowledge-base/backing-up-your-site/";
499
  $link_open = '<a target="_blank" href="'.$backup_link.'">';
500
  $link_close = '</a>';
501
  ?>
502
+ <li><?php printf(__("We strongly recommend to create a %sbackup%s of your site before activating SSL", 'really-simple-ssl'), $link_open, $link_close); ?> </li>
503
+ <li><?php _e("You may need to login in again.", "really-simple-ssl") ?></li>
504
  </ul>
505
+ </p>
506
+ <p><?php
507
+ if (!defined('rsssl_pro_version')) {
508
+ _e('You can also let the automatic scan of the pro version handle this for you, and get premium support, increased security with HSTS and more!', 'really-simple-ssl');
509
+ ?>
510
+ <a target="_blank"
511
+ href="<?php
512
+ echo $this->pro_url; ?>"><?php _e("Check out Really Simple SSL Pro", "really-simple-ssl");
513
+ }
514
+ ?>
515
+ </a>
516
+ </p>
517
+
518
+ <?php
519
+ }
520
+
521
+
522
+ /**
523
+ * @param string $class
524
+ * @param string $title
525
+ * @param string $content
526
+ * @param string|bool $footer
527
+ * @return false|string
528
+ *
529
+ * @since 4.0
530
+ * Return the notice HTML
531
+ *
532
+ */
533
+
534
+ public function notice_html($class, $title, $content, $footer=false) {
535
+
536
+ ob_start();
537
+ ?>
538
+ <style>
539
+ #rsssl-message.error{
540
+ border-left-color:#d7263d;
541
+ }
542
+ .activate-ssl {
543
+ border-left: 4px solid #F8BE2E;
544
+ }
545
+ .activate-ssl .button {
546
+ margin-bottom: 5px;
547
+ }
548
+
549
+ #rsssl-message .button-primary {
550
+ margin-right: 10px;
551
+ }
552
+
553
+ .rsssl-notice-header {
554
+ height: 60px;
555
+ border-bottom: 1px solid #dedede;
556
+ display: flex;
557
+ flex-direction: row;
558
+ justify-content: space-between;
559
+ align-items: center;
560
+ padding-left: 25px;
561
+ }
562
+ .rsssl-notice-header h1 {
563
+ font-weight: bold;
564
+ }
565
+
566
+ .rsssl-notice-content {
567
+ margin-top: 20px;
568
+ padding-bottom: 20px;
569
+ padding-left: 25px;
570
+ }
571
+
572
+ .rsssl-notice-footer {
573
+ border-top: 1px solid #dedede;
574
+ height: 35px;
575
+ display: flex;
576
+ align-items: center;
577
+ padding-top: 10px;
578
+ padding-bottom: 10px;
579
+ margin-left: 25px;
580
+ margin-right: 25px;
581
+ }
582
+
583
+ #rsssl-message {
584
+ padding: 0;
585
+ border-left-color: #333;
586
+ }
587
+
588
+ #rsssl-message .rsssl-notice-li::before {
589
+ vertical-align: middle;
590
+ margin-right: 25px;
591
+ color: lightgrey;
592
+ content: "\f345";
593
+ font: 400 21px/1 dashicons;
594
+ }
595
+
596
+ #rsssl-message ul {
597
+ list-style: none;
598
+ list-style-position: inside;
599
+ }
600
+ #rsssl-message li {
601
+ margin-left:30px;
602
+ margin-bottom:10px;
603
+ }
604
+ #rsssl-message li:before {
605
+ background-color: #f8be2e;
606
+ color: #fff;
607
+ height: 10px;
608
+ width: 10px;
609
+ border-radius:50%;
610
+ content: '';
611
+ position: absolute;
612
+ margin-top: 5px;
613
+ margin-left:-30px;
614
+ }
615
+
616
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent #rsssl-message, .settings_page_really-simple-ssl #wpcontent #rsssl-message {
617
+ margin: 20px;
618
+ }
619
+ <?php echo apply_filters('rsssl_pro_inline_style', ''); ?>
620
+
621
+ </style>
622
+
623
+ <div id="rsssl-message" class="notice <?php echo $class?> really-simple-plugins">
624
+ <div class="rsssl-notice">
625
+ <div class="rsssl-notice-header">
626
+ <h1><?php echo $title ?></h1>
627
+ </div>
628
+ <div class="rsssl-notice-content">
629
+ <?php echo $content ?>
630
+ </div>
631
+ <?php
632
+ if ($footer ) { ?>
633
+ <div class="rsssl-notice-footer">
634
+ <?php echo $footer;?>
635
+ </div>
636
+ <?php } ?>
637
+ </div>
638
+ </div>
639
+ <?php
640
+
641
+ $content = ob_get_clean();
642
+ return $content;
643
+ }
644
 
 
 
 
 
 
 
 
 
 
 
645
 
646
  /**
647
  * @since 2.3
651
 
652
  public function show_enable_ssl_button()
653
  {
654
+ ?>
 
 
 
 
 
 
 
 
 
 
 
 
655
  <form action="" method="post">
656
  <?php wp_nonce_field('rsssl_nonce', 'rsssl_nonce'); ?>
657
  <input type="submit" class='button button-primary'
658
  value="<?php _e("Go ahead, activate SSL!", "really-simple-ssl"); ?>" id="rsssl_do_activate_ssl"
659
  name="rsssl_do_activate_ssl">
660
  <?php if (!defined("rsssl_pro_version") ) { ?>
661
+ <a class="button button-default" href="<?php echo $this->pro_url ?>" target="_blank"><?php _e("Get ready with PRO!", "really-simple-ssl"); ?></a>
662
  <?php } ?>
663
  </form>
664
+ <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
665
  }
666
 
667
  /**
681
  return false;
682
  }
683
 
684
+ /**
685
+ * Check if the uninstall file is renamed to .php
686
+ *
687
+ * @return string
688
+ */
689
 
690
+ public function check_for_uninstall_file()
691
  {
692
  if (file_exists(dirname(__FILE__) . '/force-deactivate.php')) {
693
+ return 'fail';
694
  }
695
+ return 'success';
696
  }
697
 
698
  /**
716
  $this->review_notice_shown = isset($options['review_notice_shown']) ? $options['review_notice_shown'] : FALSE;
717
  $this->ssl_success_message_shown = isset($options['ssl_success_message_shown']) ? $options['ssl_success_message_shown'] : FALSE;
718
  $this->plugin_db_version = isset($options['plugin_db_version']) ? $options['plugin_db_version'] : "1.0";
 
719
  $this->do_not_edit_htaccess = isset($options['do_not_edit_htaccess']) ? $options['do_not_edit_htaccess'] : FALSE;
720
  $this->htaccess_redirect = isset($options['htaccess_redirect']) ? $options['htaccess_redirect'] : FALSE;
721
  $this->switch_mixed_content_fixer_hook = isset($options['switch_mixed_content_fixer_hook']) ? $options['switch_mixed_content_fixer_hook'] : FALSE;
729
  $network_htaccess_redirect = isset($network_options["htaccess_redirect"]) ? $network_options["htaccess_redirect"] : false;
730
  $network_do_not_edit_htaccess = isset($network_options["do_not_edit_htaccess"]) ? $network_options["do_not_edit_htaccess"] : false;
731
  /*
732
+ If multiste, and networkwide, only the networkwide setting counts.
733
+ if multisite, and per site, only the networkwide setting counts if it is true.
734
+ */
735
  $ssl_enabled_networkwide = isset($network_options["ssl_enabled_networkwide"]) ? $network_options["ssl_enabled_networkwide"] : false;
736
  if ($ssl_enabled_networkwide) {
737
  $this->htaccess_redirect = $network_htaccess_redirect;
770
  $nr_of_sites = RSSSL()->rsssl_multisite->get_total_blog_count();
771
  $sites = RSSSL()->rsssl_multisite->get_sites_bw_compatible(0, $nr_of_sites);
772
 
773
+ $this->trace_log("building domain list for multisite...");
774
+ $has_sites_with_ssl = false;
775
  foreach ($sites as $site) {
776
  $this->switch_to_blog_bw_compatible($site);
777
  $options = get_option('rlrsssl_options');
783
  }
784
 
785
  if (is_plugin_active(rsssl_plugin) && $ssl_enabled) {
786
+ $this->trace_log("- adding: " . home_url());
787
  $this->sites[] = home_url();
788
+ $has_sites_with_ssl = true;
789
  }
790
  restore_current_blog(); //switches back to previous blog, not current, so we have to do it each loop
791
  }
792
 
793
+ if (!$has_sites_with_ssl) $this->trace_log("- SSL not enabled on any site " );
794
+
795
  set_transient('rsssl_domain_list', $this->sites, HOUR_IN_SECONDS);
796
 
797
  $this->save_options();
810
  public function get_plugin_upgraded()
811
  {
812
  if ($this->plugin_db_version != rsssl_version) {
813
+ if ( $this->plugin_db_version !== '1.0' && version_compare( $this->plugin_db_version, '4.0.0', '<' ) ) {
814
+ update_option('rsssl_upgraded_to_four', true);
815
+ }
816
+
817
+ if ( $this->plugin_db_version !== '1.0' ) {
818
+ $dismiss_options = $this->get_notices_list( array(
819
+ 'dismiss_on_upgrade' => true,
820
+ ) );
821
+ foreach ($dismiss_options as $dismiss_option ) {
822
+ update_option( "rsssl_" . $dismiss_option . "_dismissed" , true);
823
+ }
824
+ delete_transient( 'rsssl_plusone_count' );
825
+ }
826
+
827
  $this->plugin_db_version = rsssl_version;
 
828
  $this->save_options();
829
  }
 
830
  }
831
 
832
  /**
842
 
843
  public function trace_log($msg)
844
  {
845
+ if (defined('RSSSL_DOING_SYSTEM_STATUS') || (defined('WP_DEBUG') && WP_DEBUG ) )
846
+
847
  if (strpos($this->debug_log, $msg)) return;
848
+ $this->debug_log = $this->debug_log . "\n" . $msg;
 
849
  }
850
 
851
  /**
896
  }
897
 
898
  if (!is_multisite()) {
899
+ $this->redirect_to_settings_page();
900
  }
901
 
902
  }
1034
  $wpconfig = preg_replace($siteurl_pattern, "define('WP_SITEURL','https://", $wpconfig);
1035
  file_put_contents($wpconfig_path, $wpconfig);
1036
  } else {
1037
+ $this->trace_log("not able to fix wpconfig siteurl/homeurl.");
 
 
1038
  //only when siteurl or homeurl is defined in wpconfig, and wpconfig is not writable is there a possible issue because we cannot edit the defined urls.
1039
  $this->wpconfig_siteurl_not_fixed = TRUE;
1040
  }
1041
  } else {
1042
+ $this->trace_log("no siteurl/homeurl defines in wpconfig");
 
 
1043
  }
1044
  }
1045
 
1113
  }
1114
 
1115
  file_put_contents($wpconfig_path, $wpconfig);
1116
+ $this->trace_log("wp config loadbalancer fix inserted");
 
 
1117
  } else {
1118
+ $this->trace_log("wp config loadbalancer fix FAILED");
 
 
1119
  $this->wpconfig_loadbalancer_fix_failed = TRUE;
1120
  }
1121
  } else {
1122
+ $this->trace_log("wp config loadbalancer fix already in place, great!");
 
 
1123
  }
1124
  $this->save_options();
1125
 
1145
 
1146
  //check permissions
1147
  if (!is_writable($wpconfig_path)) {
1148
+ $this->trace_log("wp-config.php not writable");
1149
  return;
1150
  }
1151
 
1160
 
1161
  //check if the fix is already there
1162
  if (strpos($wpconfig, "//Begin Really Simple SSL Server variable fix") !== FALSE) {
1163
+ $this->trace_log("wp config server variable fix already in place, great!");
 
 
1164
  return;
1165
  }
1166
 
1167
+ $this->trace_log("Adding server variable to wpconfig");
 
 
1168
  $rule = $this->get_server_variable_fix_code();
1169
 
1170
  $insert_after = "<?php";
1173
  $wpconfig = substr_replace($wpconfig, $rule, $pos + 1 + strlen($insert_after), 0);
1174
  }
1175
  file_put_contents($wpconfig_path, $wpconfig);
1176
+ $this->trace_log("wp config server variable fix inserted");
1177
 
1178
  $this->save_options();
1179
  }
1191
  protected function get_server_variable_fix_code()
1192
  {
1193
  if (is_multisite() && !RSSSL()->rsssl_multisite->ssl_enabled_networkwide && RSSSL()->rsssl_multisite->is_multisite_subfolder_install()) {
1194
+ $this->trace_log("per site activation on subfolder install, wp config server variable fix skipped");
1195
  return "";
1196
  }
1197
 
1198
  if (is_multisite() && !RSSSL()->rsssl_multisite->ssl_enabled_networkwide && count($this->sites) == 0) {
1199
+ $this->trace_log("no sites left with SSL, wp config server variable fix skipped");
1200
  return "";
1201
  }
1202
 
1204
  $rule = "\n" . "//Begin Really Simple SSL Server variable fix" . "\n";
1205
  foreach ($this->sites as $domain) {
1206
  //remove http or https.
1207
+ $this->trace_log("getting server variable rule for:" . $domain);
 
 
1208
  $domain = preg_replace("/(http:\/\/|https:\/\/)/", "", $domain);
1209
 
1210
  //we excluded subfolders, so treat as domain
1243
 
1244
  //check for permissions
1245
  if (!is_writable($wpconfig_path)) {
1246
+ $this->trace_log("could not remove wpconfig edits, wp-config.php not writable");
1247
  $this->errors['wpconfig not writable'] = TRUE;
1248
  return;
1249
  }
1312
 
1313
  public function save_options()
1314
  {
 
 
1315
  //any options added here should also be added to function options_validate()
1316
  $options = array(
1317
  'site_has_ssl' => $this->site_has_ssl,
1321
  'ssl_success_message_shown' => $this->ssl_success_message_shown,
1322
  'autoreplace_insecure_links' => $this->autoreplace_insecure_links,
1323
  'plugin_db_version' => $this->plugin_db_version,
 
1324
  'do_not_edit_htaccess' => $this->do_not_edit_htaccess,
1325
  'htaccess_redirect' => $this->htaccess_redirect,
1326
  'ssl_enabled' => $this->ssl_enabled,
1331
  'dismiss_review_notice' => $this->dismiss_review_notice,
1332
 
1333
  );
 
 
 
 
 
 
 
 
 
 
 
1334
 
1335
+ update_option('rlrsssl_options', $options);
 
 
1336
  }
1337
 
1338
+
1339
  /**
1340
  * Handles deactivation of this plugin
1341
  *
1373
  RSSSL()->rsssl_multisite->deactivate();
1374
  if (!RSSSL()->rsssl_multisite->ssl_enabled_networkwide) $this->build_domain_list();
1375
  }
1376
+ do_action("rsssl_deactivate");
1377
 
1378
  $this->remove_wpconfig_edit();
1379
  $this->removeHtaccessEdit();
1422
 
1423
  public function detect_configuration()
1424
  {
1425
+ $this->trace_log("Detecting configuration");
1426
  //if current page is on SSL, we can assume SSL is available, even when an errormsg was returned
1427
  if ($this->is_ssl_extended()) {
1428
  $this->site_has_ssl = TRUE;
1505
 
1506
  $this->htaccess_test_success = get_transient('rsssl_htaccess_test_success');
1507
  if (!$this->htaccess_test_success) {
1508
+ $this->trace_log("testing htaccess rules...");
 
 
 
1509
 
1510
  $filecontents = "";
1511
  $testpage_url = trailingslashit($this->test_url()) . "testssl/";
1665
  $this->save_options();
1666
  } else {
1667
  $this->errors['HTACCESS_NOT_WRITABLE'] = TRUE;
1668
+ $this->trace_log("could not remove rules from htaccess, file not writable");
1669
  }
1670
  }
1671
 
1704
  * @since 2.0
1705
  *
1706
  */
1707
+
1708
  public function htaccess_redirect_allowed()
1709
  {
1710
  if (is_multisite() && RSSSL()->rsssl_multisite->is_per_site_activated_multisite_subfolder_install()) {
1816
  return $result;
1817
  }
1818
 
1819
+ /**
1820
+ * returns list of recommended, but not active security headers for this site
1821
+ * returns empty array if no .htacces file exists
1822
+ * @return array
1823
+ *
1824
+ * @since 4.0
1825
+ *
1826
+ * @access public
1827
+ *
1828
+ */
1829
+
1830
+ public function get_recommended_security_headers()
1831
+ {
1832
+ $not_used_headers = array();
1833
+ if (RSSSL()->rsssl_server->uses_htaccess() && file_exists($this->htaccess_file())) {
1834
+ $check_headers = array(
1835
+ array(
1836
+ 'name' => 'HTTP Strict Transport Security',
1837
+ 'pattern' => 'Strict-Transport-Security',
1838
+ ),
1839
+ array(
1840
+ 'name' => 'Content Security Policy: Upgrade Insecure Requests',
1841
+ 'pattern' => 'upgrade-insecure-requests',
1842
+ ),
1843
+ array(
1844
+ 'name' => 'X-XSS protection',
1845
+ 'pattern' => 'X-XSS-Protection',
1846
+ ),
1847
+ array(
1848
+ 'name' => 'X-Content Type Options',
1849
+ 'pattern' => 'X-Content-Type-Options',
1850
+ ),
1851
+ array(
1852
+ 'name' => 'Referrer-Policy',
1853
+ 'pattern' => 'Referrer-Policy',
1854
+ ),
1855
+ array(
1856
+ 'name' => 'X-Frame-Options',
1857
+ 'pattern' => 'X-Frame-Options',
1858
+ ),
1859
+ array(
1860
+ 'name' => 'Expect-CT',
1861
+ 'pattern' => 'Expect-CT',
1862
+ ),
1863
+ );
1864
+
1865
+ $htaccess = file_get_contents($this->htaccess_file());
1866
+ foreach ($check_headers as $check_header){
1867
+ if ( !preg_match("/".$check_header['pattern']."/", $htaccess, $check) ) {
1868
+ $not_used_headers[] = $check_header['name'];
1869
+ }
1870
+ }
1871
+ }
1872
+
1873
+ return $not_used_headers;
1874
+ }
1875
+
1876
 
1877
  /**
1878
  * Adds redirect to https rules to the .htaccess file or htaccess.conf on Bitnami.
1956
  }
1957
 
1958
  if (!is_writable($this->htaccess_file())) {
1959
+ $this->trace_log(".htaccess not writable.");
1960
  return;
1961
  }
1962
 
2027
  }
2028
  }
2029
 
2030
+ if ($this->autoreplace_insecure_links == ! true) {
2031
+ $mixed_content_fixer_detected = 'not-enabled';
2032
+ }
2033
+
2034
  set_transient('rsssl_mixed_content_fixer_detected', $mixed_content_fixer_detected, 600);
2035
  }
2036
 
2060
  $this->mixed_content_fixer_detected = true;
2061
  }
2062
 
2063
+ if ($mixed_content_fixer_detected === 'not-enabled') {
2064
+ $this->trace_log("Mixed content fixer not enabled");
2065
+ $this->mixed_content_fixer_detected = FALSE;
2066
+ }
2067
+
2068
  return $mixed_content_fixer_detected;
2069
  }
2070
 
2071
+ /**
2072
  * Create redirect rules for the .htaccess.
2073
+ * @since 2.1
2074
+ *
2075
+ * @access public
2076
  *
2077
+ * @param bool $manual
2078
+ *
2079
+ * @return string
2080
+ */
2081
+
2082
+ public function get_redirect_rules($manual = false)
 
2083
  {
2084
  $this->trace_log("retrieving redirect rules");
2085
  //only add the redirect rules when a known type of SSL was detected. Otherwise, we use https.
2086
  $rule = "";
 
2087
  //if the htaccess test was successfull, and we know the redirectype, edit
2088
  if ($this->htaccess_redirect && ($manual || $this->htaccess_test_success) && $this->ssl_type != "NA") {
2089
+ $this->trace_log("starting insertion of .htaccess redirects.");
2090
  $rule .= "<IfModule mod_rewrite.c>" . "\n";
2091
  $rule .= "RewriteEngine on" . "\n";
2092
 
2139
  $rule = strrev(implode("", explode(strrev("[OR]"), strrev($rule), 2)));
2140
  }
2141
  } else {
2142
+ $this->trace_log("single site or networkwide activation");
 
 
2143
  }
2144
 
2145
  //fastest cache compatibility
2167
  return $rule;
2168
  }
2169
 
 
2170
  /**
2171
  * Show warning when wpconfig could not be fixed
2172
  *
2180
  {
2181
  //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
2182
  $screen = get_current_screen();
2183
+ if ( $screen->base === 'post' ) return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2184
 
2185
+ ob_start();
2186
+ if ($this->wpconfig_siteurl_not_fixed) { ?>
2187
+ <p>
2188
+ <?php echo __("A definition of a siteurl or homeurl was detected in your wp-config.php, but the file is not writable.", "really-simple-ssl"); ?>
2189
+ </p>
2190
+ <p><?php echo __("Set your wp-config.php to writable and reload this page.", "really-simple-ssl"); ?></p>
2191
+ <?php }
2192
+ if ($this->do_wpconfig_loadbalancer_fix) { ?>
2193
+ <p><?php echo __("Your wp-config.php has to be edited, but is not writable.", "really-simple-ssl"); ?></p>
2194
+ <p><?php echo __("Because your site is behind a loadbalancer and is_ssl() returns false, you should add the following line of code to your wp-config.php.", "really-simple-ssl"); ?>
2195
+ <br><br><code>
2196
+ //Begin Really Simple SSL Load balancing fix<br>
2197
+ if ((isset($_ENV["HTTPS"]) && ("on" == $_ENV["HTTPS"]))<br>
2198
+ || (isset($_SERVER["HTTP_X_FORWARDED_SSL"]) && (strpos($_SERVER["HTTP_X_FORWARDED_SSL"], "1") !== false))<br>
2199
+ || (isset($_SERVER["HTTP_X_FORWARDED_SSL"]) && (strpos($_SERVER["HTTP_X_FORWARDED_SSL"], "on") !== false))<br>
2200
+ || (isset($_SERVER["HTTP_CF_VISITOR"]) && (strpos($_SERVER["HTTP_CF_VISITOR"], "https") !== false))<br>
2201
+ || (isset($_SERVER["HTTP_CLOUDFRONT_FORWARDED_PROTO"]) && (strpos($_SERVER["HTTP_CLOUDFRONT_FORWARDED_PROTO"], "https") !== false))<br>
2202
+ || (isset($_SERVER["HTTP_X_FORWARDED_PROTO"]) && (strpos($_SERVER["HTTP_X_FORWARDED_PROTO"], "https") !== false))<br>
2203
+ || (isset($_SERVER["HTTP_X_PROTO"]) && (strpos($_SERVER["HTTP_X_PROTO"], "SSL") !== false))<br>
2204
+ ) {<br>
2205
+ &nbsp;&nbsp; $_SERVER["HTTPS"] = "on";<br>
2206
+ }<br>
2207
+ //END Really Simple SSL
2208
+ </code><br>
2209
+ </p>
2210
+ <p><?php echo __("Or set your wp-config.php to writable and reload this page.", "really-simple-ssl"); ?></p>
2211
+ <?php
2212
+ }
2213
+
2214
+ if ($this->no_server_variable) {
2215
  ?>
2216
+ <p><?php echo __('Because your server does not pass a variable with which WordPress can detect SSL, WordPress may create redirect loops on SSL.', 'really-simple-ssl'); ?></p>
2217
+ <p><?php echo __("Set your wp-config.php to writable and reload this page.", "really-simple-ssl"); ?></p>
2218
+ <?php
2219
+ }
2220
 
2221
+ $content = ob_get_clean();
2222
+ $class = "error";
2223
+ $title = __("System detection encountered issues", "really-simple-ssl");
2224
+
2225
+ echo $this->notice_html( $class, $title, $content );
2226
  }
2227
 
2228
 
2263
  return false;
2264
  }
2265
 
2266
+ /**
2267
+ * Shows a notice, asking users for a review.
2268
+ */
2269
+
2270
  public function show_leave_review_notice()
2271
  {
2272
+ if ($this->dismiss_all_notices) return;
2273
+
2274
  //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
2275
  $screen = get_current_screen();
2276
+ if ( $screen->base === 'post' ) return;
2277
 
2278
  //this user has never had the review notice yet.
2279
  if ($this->ssl_enabled && !get_option('rsssl_activation_timestamp')){
2284
  }
2285
 
2286
  if (!$this->review_notice_shown && get_option('rsssl_activation_timestamp') && get_option('rsssl_activation_timestamp') < strtotime("-1 month")) {
 
2287
  add_action('admin_print_footer_scripts', array($this, 'insert_dismiss_review'));
2288
  ?>
2289
  <style>
2290
+ .rlrsssl-review .rsssl-container {
2291
  display: flex;
2292
  padding:12px;
2293
  }
2294
+ .rlrsssl-review .rsssl-container .dashicons {
2295
  margin-left:10px;
2296
  margin-right:5px;
2297
  }
2298
+ .rlrsssl-review .rsssl-review-image img{
2299
  margin-top:0.5em;
2300
  }
2301
+ .rlrsssl-review .rsssl-buttons-row {
2302
  margin-top:10px;
2303
  display: flex;
2304
  align-items: center;
2319
  <a class="button button-primary" target="_blank"
2320
  href="https://wordpress.org/support/plugin/really-simple-ssl/reviews/#new-post"><?php _e('Leave a review', 'really-simple-ssl'); ?></a>
2321
  <div class="dashicons dashicons-calendar"></div><a href="#" id="maybe-later"><?php _e('Maybe later', 'really-simple-ssl'); ?></a>
2322
+ <div class="dashicons dashicons-no-alt"></div><a href="<?php echo esc_url(add_query_arg(array("page"=>"rlrsssl_really_simple_ssl", "tab"=>"configuration", "rsssl_dismiss_review_notice"=>1),admin_url("options-general.php") ) );?>"><?php _e('Don\'t show again', 'really-simple-ssl'); ?></a>
2323
  </div>
2324
  </div>
2325
  </div>
2339
 
2340
  public function show_notices()
2341
  {
2342
+ //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
2343
+ $screen = get_current_screen();
2344
+ if ( $screen->base === 'post' ) return;
2345
+
2346
+ //don't show admin notices on our own settings page: we have the warnings there
2347
+ if ( $this->is_settings_page() ) return;
2348
+
2349
+ $notices = $this->get_notices_list( array('admin_notices'=>true) );
2350
+ foreach ( $notices as $id => $notice ){
2351
+ $notice = $notice['output'];
2352
+ $class = ( $notice['status'] !== 'completed' ) ? 'error' : 'updated';
2353
+ echo $this->notice_html( $class.' '.$id, $notice['title'], $notice['msg'] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2354
  }
2355
  }
2356
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2357
  /**
2358
  * Insert some ajax script to dismiss the review notice, and stop nagging about it
2359
  *
2396
  <?php
2397
  }
2398
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2399
 
2400
  /**
2401
  * Process the ajax dismissal of the success message.
2409
  public function dismiss_success_message_callback()
2410
  {
2411
  if (!current_user_can($this->capability) ) return;
 
 
2412
  $this->ssl_success_message_shown = TRUE;
2413
  $this->save_options();
2414
  wp_die();
2415
  }
2416
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2417
  /**
2418
  * Process the ajax dismissal of settings notice
2419
  *
2427
  {
2428
  if (!current_user_can($this->capability) ) return;
2429
 
2430
+ if (!isset($_POST['token']) || (!wp_verify_nonce($_POST['token'], 'rsssl_nonce'))) {
2431
+ return;
2432
+ }
2433
+
2434
+ if (isset($_POST['type'])) {
2435
  $dismiss_type = sanitize_title( $_POST['type'] );
2436
  update_option( "rsssl_".$dismiss_type."_dismissed", true );
2437
  delete_transient( 'rsssl_plusone_count' );
2438
  }
2439
+
2440
+ // count should be updated, therefore clear cache
2441
+ $this->clear_transients();
2442
+
2443
+ $data = array(
2444
+ 'tasks' => $this->get_remaining_tasks_count(),
2445
+ 'percentage' => $this->get_score_percentage(),
2446
+ );
2447
+ $response = json_encode( $data );
2448
+ header( "Content-Type: application/json" );
2449
+ echo $response;
2450
+ exit;
2451
  }
2452
 
2453
  /**
2487
  public function add_settings_page()
2488
  {
2489
  if (!current_user_can($this->capability)) return;
2490
+
2491
  //hides the settings page if the hide menu for subsites setting is enabled
2492
  if (is_multisite() && rsssl_multisite::this()->hide_menu_for_subsites && !is_super_admin()) return;
2493
 
2494
  global $rsssl_admin_page;
2495
 
2496
  $count = $this->count_plusones();
 
2497
  if ($count > 0 ) {
2498
  $update_count = "<span class='update-plugins rsssl-update-count'><span class='update-count'>$count</span></span>";
2499
  } else {
2507
  'rlrsssl_really_simple_ssl', //url
2508
  array($this, 'settings_page')); //function
2509
 
 
 
 
2510
  }
2511
 
2512
  /**
2518
  *
2519
  */
2520
 
2521
+ public function rsssl_edit_admin_menu()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2522
  {
2523
+ if (!current_user_can($this->capability)) return;
2524
+ global $menu;
2525
+ $count = $this->count_plusones();
2526
+ $menu_slug = 'options-general.php';
2527
+ $menu_title = __('Settings');
2528
+ foreach($menu as $index => $menu_item){
2529
+ if (!isset($menu_item[2]) || !isset($menu_item[0])) continue;
2530
+ if ($menu_item[2]===$menu_slug){
2531
+ $pattern = '/<span.*>([1-9])<\/span><\/span>/i';
2532
+ if (preg_match($pattern, $menu_item[0], $matches)){
2533
+ if (isset($matches[1])) $count = intval($count) + intval($matches[1]);
2534
+ }
2535
+
2536
+ $update_count = $count > 0 ? "<span class='update-plugins rsssl-update-count'><span class='update-count'>$count</span></span>":'';
2537
+ $menu[$index][0] = $menu_title . $update_count;
2538
+ }
2539
+ }
2540
  }
2541
 
2542
  /**
2551
  public function admin_tabs($current = 'homepage')
2552
  {
2553
  $tabs = array(
2554
+ 'configuration' => '',
 
 
2555
  );
2556
+ $tabs = apply_filters("rsssl_grid_tabs", $tabs);
2557
 
2558
+ //allow the license tab to show up for older version, to allow for upgrading
2559
+ $legacy_tabs = apply_filters("rsssl_tabs", array());
2560
+ if (isset($legacy_tabs['license'])) $tabs['license']= $legacy_tabs['license'];
2561
 
2562
+ // Only show general tab if there are other tabs as well
2563
+ if (count($tabs) > 1) {
2564
+ $tabs['configuration'] = __("General", "really-simple-ssl");
 
 
2565
  }
2566
+
2567
+ ?>
2568
+ <div class="nav-tab-wrapper">
2569
+ <div class="rsssl-logo-container">
2570
+ <div id="rsssl-logo"><img src="<?php echo rsssl_url?>/assets/really-simple-ssl-logo.svg" alt="review-logo"></div>
2571
+ </div>
2572
+ <?php
2573
+ if (count($tabs)>1) {
2574
+ foreach ( $tabs as $tab => $name ) {
2575
+ $class = ( $tab == $current ) ? ' nav-tab-active' : '';
2576
+ echo "<a class='nav-tab$class' href='?page=rlrsssl_really_simple_ssl&tab=$tab'>$name</a>";
2577
+ }
2578
+ }
2579
+ ?>
2580
+ <div class="header-links">
2581
+ <div class="documentation">
2582
+ <a href="https://really-simple-ssl.com/knowledge-base" class="<?php if (defined('rsssl_pro_version')) echo "button button-primary"?>" target="_blank"><?php _e("Documentation", "really-simple-ssl");?></a>
2583
+ </div>
2584
+ <div class="header-upsell">
2585
+ <?php if (defined('rsssl_pro_version')) { ?>
2586
+ <?php } else { ?>
2587
+ <div class="documentation">
2588
+ <a href="https://wordpress.org/support/plugin/really-simple-ssl/" class="button button-primary" target="_blank"><?php _e("Support", "really-simple-ssl") ?></a>
2589
+ </div>
2590
+ <?php } ?>
2591
+ </div>
2592
+ </div>
2593
+ </div>
2594
+ <?php
2595
  }
2596
 
2597
+ /**
2598
+ * Check if user has upgraded to four from a previous version
2599
+ * @return bool
2600
+ */
2601
+
2602
+ public function upgraded_to_four(){
2603
+ return get_option( 'rsssl_upgraded_to_four' ) ? true : false;
2604
+ }
2605
 
2606
  /**
2607
  * Get array of notices
2608
  * - condition: function returning boolean, if notice should be shown or not
2609
  * - callback: function, returning boolean or string, with multiple possible answers, and resulting messages and icons
2610
+ * @param array $args
2611
  * @return array
2612
  */
2613
 
2614
+ public function get_notices_list( $args = array() )
 
2615
  {
2616
  $defaults = array(
2617
+ 'admin_notices' => false,
2618
+ 'premium_only' => false,
2619
+ 'dismiss_on_upgrade' => false,
2620
+ 'status' => 'open', //status can be "all" (all tasks, regardless of dismissed or open), "open" (not success/completed) or "completed"
2621
+ );
2622
+ $args = wp_parse_args($args, $defaults);
2623
+
2624
+ $cache_admin_notices = !$this->is_settings_page() && $args['admin_notices'];
2625
+ if ( $cache_admin_notices) {
2626
+ $cached_notices = get_transient('rsssl_admin_notices');
2627
+ if ( $cached_notices ) return $cached_notices;
2628
+ }
2629
+
2630
+ $htaccess_file = $this->uses_htaccess_conf() ? "htaccess.conf (/conf/htaccess.conf/)" : $htaccess_file = ".htaccess";
2631
+ if ( $this->ssl_type != "NA" ) {
2632
+ $rules = $this->get_redirect_rules( true );
2633
+ $arr_search = array( "<", ">", "\n" );
2634
+ $arr_replace = array( "&lt", "&gt", "<br>" );
2635
+ $rules = str_replace( $arr_search, $arr_replace, $rules );
2636
+ $rules = substr($rules, 4, -4);
2637
+ } else {
2638
+ $rules = __( "No recommended redirect rules detected.", "really-simple-ssl" ) ;
2639
+ }
2640
+ $rules = '<br><code>' . $rules . '</code><br>';
2641
+
2642
+ $notice_defaults = array(
2643
  'condition' => array(),
2644
  'callback' => false,
2645
  );
2646
 
 
 
2647
  $curl_error = get_transient('rsssl_curl_error');
2648
 
2649
+ $reload_https_url = esc_url_raw("https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
2650
+ $notices = array(
2651
+ 'deactivation_file_detected' => array(
2652
+ 'callback' => 'RSSSL()->really_simple_ssl->check_for_uninstall_file',
2653
+ 'score' => 30,
2654
+ 'output' => array(
2655
+ 'fail' => array(
2656
+ 'title' => __("Major security issue!", "really-simple-ssl"),
2657
+ 'msg' => __("The 'force-deactivate.php' file has to be renamed to .txt. Otherwise your ssl can be deactivated by anyone on the internet.", "really-simple-ssl") .' '.
2658
+ '<a href="'.add_query_arg(array('page'=>'rlrsssl_really_simple_ssl'), admin_url('options-general.php?page=')).'">'.__("Check again", "really-simple-ssl").'</a>',
2659
+ 'icon' => 'warning',
2660
+ 'admin_notice' =>true,
2661
+ 'plusone' => true,
2662
+
2663
+ ),
2664
+ ),
2665
+ ),
2666
+
2667
+ 'mixed_content_scan' => array(
2668
+ 'dismiss_on_upgrade' => true,
2669
+ 'condition' => array('rsssl_ssl_enabled'),
2670
+ 'callback' => '_true_',
2671
+ 'score' => 5,
2672
+ 'output' => array(
2673
+ 'true' => array(
2674
+ 'url' => 'https://really-simple-ssl.com/knowledge-base/how-to-track-down-mixed-content-or-insecure-content/',
2675
+ 'msg' => __("SSL is now activated. Check if your website is secure by following this article.", "really-simple-ssl"),
2676
+ 'icon' => 'open',
2677
+ 'dismissible' => true,
2678
+ 'plusone' => true,
2679
+ ),
2680
+ ),
2681
+ ),
2682
+
2683
+ 'google_analytics' => array(
2684
+ 'dismiss_on_upgrade' => true,
2685
+ 'callback' => '_true_',
2686
+ 'condition' => array('rsssl_ssl_enabled', 'rsssl_ssl_activation_time_no_longer_then_3_days_ago'),
2687
+ 'score' => 5,
2688
+ 'output' => array(
2689
+ 'true' => array(
2690
+ 'msg' => __("Don't forget to change your settings in Google Analytics and Search Console.", "really-simple-ssl"),
2691
+ 'url' => 'https://really-simple-ssl.com/knowledge-base/how-to-setup-google-analytics-and-google-search-consolewebmaster-tools/',
2692
+ 'icon' => 'open',
2693
+ 'dismissible' => true,
2694
+ 'plusone' => true,
2695
+ ),
2696
+ ),
2697
+ ),
2698
+
2699
+ 'upgraded_to_four' => array(
2700
+ 'callback' => 'RSSSL()->really_simple_ssl->upgraded_to_four',
2701
+ 'score' => 5,
2702
+ 'output' => array(
2703
+ 'true' => array(
2704
+ 'url' => __('https://really-simple-ssl.com/really-simple-ssl-4-a-new-dashboard'),
2705
+ 'msg' => __("Really Simple SSL 4.0. Learn more about our newest major release.", "really-simple-ssl"),
2706
+ 'icon' => 'open',
2707
+ 'dismissible' => true,
2708
+ 'plusone' => false, //set to true on 4.1
2709
+ ),
2710
+ ),
2711
+ ),
2712
 
 
2713
  'ssl_enabled' => array(
2714
  'callback' => 'rsssl_ssl_enabled',
2715
+ 'score' => 30,
2716
  'output' => array(
2717
+ 'true' => array(
2718
  'msg' =>__('SSL is enabled on your site.', 'really-simple-ssl'),
2719
  'icon' => 'success'
2720
  ),
2721
+ 'false' => array(
2722
+ 'msg' => __('SSL is not enabled yet.', 'really-simple-ssl'),
2723
+ 'icon' => 'warning',
2724
  ),
2725
  ),
2726
  ),
2727
 
2728
+ 'ssl_detected' => array(
2729
+ 'callback' => 'rsssl_ssl_detected',
2730
+ 'score' => 30,
2731
+ 'output' => array(
2732
+ 'fail' => array(
2733
+ 'msg' =>__('Cannot activate SSL due to system configuration.', 'really-simple-ssl'),
2734
+ 'icon' => 'warning'
2735
+ ),
2736
+ 'no-ssl-detected' => array(
2737
+ 'title' => __("No SSL detected", "really-simple-ssl"),
2738
+ 'msg' => sprintf(__("No SSL detected. See our guide on how to %sget a free SSL certificate%s. If you do have an SSL certificate, try to reload this page over https by clicking this link: %sReload over https.%s", "really-simple-ssl"), '<a target="_blank" href="https://really-simple-ssl.com/knowledge-base/how-to-install-a-free-ssl-certificate-on-your-wordpress-cpanel-hosting/">', '</a>', '<a href="' .$reload_https_url . '">' , '</a>'),
2739
+ 'icon' => 'warning',
2740
+ 'admin_notice' => true,
2741
+ ),
2742
+ 'ssl-detected' => array(
2743
+ 'msg' => __('An SSL certificate was detected on your site.', 'really-simple-ssl'),
2744
+ 'icon' => 'success'
2745
+ ),
2746
+ ),
2747
+ ),
2748
+
2749
  'mixed_content_fixer_detected' => array(
2750
+ 'condition' => array('rsssl_site_has_ssl', 'rsssl_ssl_enabled'),
2751
+ 'callback' => 'RSSSL()->really_simple_ssl->mixed_content_fixer_detected',
2752
+ 'score' => 10,
2753
  'output' => array(
2754
  'found' => array(
2755
+ 'msg' =>__('Mixed content fixer was successfully detected on the front-end.', 'really-simple-ssl'),
2756
  'icon' => 'success'
2757
  ),
2758
  'no-response' => array(
2759
+ 'url' => 'https://really-simple-ssl.com/knowledge-base/how-to-fix-no-response-from-webpage-warning/',
2760
+ 'msg' => __('Really Simple SSL has received no response from the webpage.', 'really-simple-ssl'),
2761
+ 'icon' => 'open',
 
 
2762
  'dismissible' => true,
2763
  'plusone' => true
2764
  ),
2765
  'not-found' => array(
2766
+ 'url' => "https://really-simple-ssl.com/knowledge-base/how-to-check-if-the-mixed-content-fixer-is-active/",
2767
+ 'msg' => __('The mixed content fixer is active, but was not detected on the frontpage.', "really-simple-ssl"),
2768
+ 'icon' => 'open',
2769
  'dismissible' => true
2770
  ),
2771
  'error' => array(
2772
+ 'msg' =>__('Error occurred when retrieving the webpage.', 'really-simple-ssl'),
2773
+ 'icon' => 'open',
2774
  'dismissible' => true
2775
  ),
2776
+ 'not-enabled' => array(
2777
+ 'url' => $this->generate_enable_link($setting_name = 'autoreplace_insecure_links', $type='free'),
2778
+ 'msg' =>__('Mixed content fixer not enabled. Enable the option to fix mixed content on your site.', 'really-simple-ssl'),
2779
+ 'icon' => 'open',
2780
  'dismissible' => true
2781
  ),
2782
+ 'curl-error' => array(
2783
+ 'url' => 'https://really-simple-ssl.com/knowledge-base/curl-errors/',
2784
+ 'msg' =>sprintf(__("The mixed content fixer could not be detected due to a cURL error: %s. cURL errors are often caused by an outdated version of PHP or cURL and don't affect the front-end of your site. Contact your hosting provider for a fix.", 'really-simple-ssl'), "<b>" . $curl_error . "</b>"),
2785
+ 'icon' => 'open',
2786
+ 'dismissible' => true,
 
 
 
 
 
 
 
 
 
 
 
 
2787
  ),
2788
  ),
2789
  ),
2791
  'wordpress_redirect' => array(
2792
  'condition' => array('rsssl_wp_redirect_condition'),
2793
  'callback' => 'rsssl_wordpress_redirect',
2794
+ 'score' => 10,
2795
  'output' => array(
2796
  '301-wp-redirect' => array(
2797
  'msg' => __('301 redirect to https set: WordPress redirect.', 'really-simple-ssl'),
2799
  ),
2800
  'no-redirect' => array(
2801
  'msg' => __('No 301 redirect is set. Enable the WordPress 301 redirect in the settings to get a 301 permanent redirect.', 'really-simple-ssl'),
2802
+ 'icon' => 'open'
2803
  ),
2804
  )
2805
  ),
2806
 
2807
  'check_redirect' => array(
2808
+ 'condition' => array('rsssl_ssl_enabled' , 'RSSSL()->really_simple_ssl->htaccess_redirect_allowed', 'NOT is_multisite'),
2809
  'callback' => 'rsssl_check_redirect',
2810
+ 'score' => 10,
2811
+ 'output' => array(
2812
  'htaccess-redirect-set' => array(
2813
+ 'msg' =>__('301 redirect to https set: .htaccess redirect.', 'really-simple-ssl') ,
2814
  'icon' => 'success'
2815
  ),
 
 
2816
  'wp-redirect-to-htaccess' => array(
2817
+ 'url' => $this->generate_enable_link($setting_name = 'wp-redirect-to-htaccess', $type='free'),
2818
+ 'msg' => __('WordPress 301 redirect enabled. We recommend to enable a 301 .htaccess redirect.', 'really-simple-ssl'),
2819
+ 'icon' => 'open',
2820
+ 'plusone' => RSSSL()->rsssl_server->uses_htaccess(),
2821
+ 'dismissible' => true,
2822
+ 'enable_dismiss' => 'enable',
 
 
2823
  ),
2824
  'no-redirect-set' => array(
2825
+ 'msg' => __('Enable a .htaccess redirect or WordPress redirect in the settings to create a 301 redirect.', 'really-simple-ssl') ,
2826
+ 'icon' => 'open',
2827
  'dismissible' => false
2828
  ),
2829
  'htaccess-not-writeable' => array(
2830
+ 'url' => 'https://really-simple-ssl.com/knowledge-base/manually-insert-htaccess-redirect-http-to-https/',
2831
+ 'msg' => sprintf(__('The %s file is not writable. You can either use the WordPress redirect, add the rules manually, or set the file to writable.', 'really-simple-ssl'), $htaccess_file),
 
 
 
 
2832
  'icon' => 'warning',
2833
  'dismissible' => true
2834
  ),
2835
+ 'htaccess-rules-test-failed' => array(
2836
+ 'url' => 'https://really-simple-ssl.com/knowledge-base/manually-insert-htaccess-redirect-http-to-https/',
2837
+ 'msg' => __('The .htaccess redirect rules selected by this plugin failed in the test. Set manually or dismiss to leave on WordPress redirect.', 'really-simple-ssl') . $rules,
2838
  'icon' => 'warning',
2839
+ 'dismissible' => true,
2840
+ 'plusone'=>true,
2841
  ),
2842
  ),
2843
  ),
2844
 
2845
  'elementor' => array(
2846
+ 'condition' => array( 'rsssl_ssl_activation_time_no_longer_then_3_days_ago'),
2847
+ 'callback' => 'rsssl_uses_elementor',
2848
+ 'score' => 5,
2849
  'output' => array(
2850
+ 'true' => array(
2851
+ 'url' => 'https://really-simple-ssl.com/knowledge-base/how-to-fix-mixed-content-in-elementor-after-moving-to-ssl/',
2852
+ 'msg' => __("Your site uses Elementor. This can require some additional steps before getting the secure lock.", "really-simple-ssl"),
2853
+ 'icon' => 'open',
 
2854
  'dismissible' => true
2855
  ),
2856
  ),
2857
  ),
2858
 
2859
  'divi' => array(
2860
+ 'condition' => array( 'rsssl_ssl_activation_time_no_longer_then_3_days_ago'),
2861
+ 'callback' => 'rsssl_uses_divi',
2862
+ 'score' => 5,
2863
  'output' => array(
2864
+ 'true' => array(
2865
+ 'url' => "https://really-simple-ssl.com/knowledge-base/mixed-content-when-using-divi-theme/",
2866
+ 'msg' => __("Your site uses Divi. This can require some additional steps before getting the secure lock.", "really-simple-ssl"),
2867
+ 'icon' => 'open',
 
2868
  'dismissible' => true
2869
  ),
2870
  ),
2871
  ),
2872
 
2873
  'hsts_enabled' => array(
2874
+ 'condition' => array('NOT is_multisite'),
2875
+ 'callback' => 'RSSSL()->really_simple_ssl->contains_hsts',
2876
+ 'score' => 5,
2877
  'output' => array(
2878
+ 'true' => array(
2879
  'msg' =>__('HTTP Strict Transport Security was enabled.', 'really-simple-ssl'),
2880
  'icon' => 'success'
2881
  ),
2882
+ 'false' => array(
2883
+ 'msg' => sprintf(__('HTTP Strict Transport Security is not enabled %s(Read more)%s.', "really-simple-ssl"), '<a href="https://really-simple-ssl.com/hsts-http-strict-transport-security-good/" target="_blank">', '</a>' ),
2884
+ 'icon' => 'premium'
2885
  ),
2886
  ),
2887
  ),
2888
 
2889
  'secure_cookies_set' => array(
2890
+ 'condition' => array('rsssl_ssl_enabled'),
2891
+ 'callback' => 'RSSSL()->really_simple_ssl->contains_secure_cookie_settings',
2892
+ 'score' => 5,
2893
  'output' => array(
2894
+ 'true' => array(
2895
+ 'msg' =>__('Secure cookies set.', 'really-simple-ssl'),
2896
  'icon' => 'success'
2897
  ),
2898
+ 'false' => array(
2899
+ 'msg' => sprintf(__("Secure cookie settings not enabled (%sRead more%s).", "really-simple-ssl"), '<a target="_blank" href="https://really-simple-ssl.com/secure-cookies-with-httponly-secure-and-use_only_cookies/">', '</a>'),
2900
+ 'icon' => 'premium'
2901
  ),
2902
  ),
2903
  ),
2904
 
2905
+ 'recommended_security_headers_not_set' => array(
2906
+ 'callback' => '_true_',
2907
+ 'score' => 5,
2908
+ 'output' => array(
2909
+ 'true' => array(
2910
+ 'msg' => sprintf(__("Recommended security headers not enabled (%sRead more%s).", "really-simple-ssl"), '<a target="_blank" href="https://really-simple-ssl.com/everything-you-need-to-know-about-security-headers/">', '</a>'),
2911
+ 'icon' => 'premium'
2912
+ ),
2913
+ ),
2914
+ ),
2915
+
2916
+ 'htaccess_not_writable' => array(
2917
+ 'callback' => 'rsssl_htaccess_not_writable',
2918
+ 'score' => 5,
2919
  'output' => array(
2920
+ 'htaccess' => array(
2921
+ 'msg' => __("Your .htaccess file is not writable. This prevents Really Simple SSL from writing redirects or security headers to your .htaccess file.", "really-simple-ssl"),
2922
+ 'icon' => 'open',
2923
+ 'dismissible' => 'true',
2924
  ),
2925
  ),
2926
  ),
2928
 
2929
  $notices = apply_filters('rsssl_notices', $notices);
2930
  foreach ($notices as $id => $notice) {
2931
+ $notices[$id] = wp_parse_args($notice, $notice_defaults);
2932
+ }
2933
+
2934
+ /**
2935
+ * If a list of notices that should be dismissed on upgrade is requested
2936
+ */
2937
+ if ( $args['dismiss_on_upgrade'] ) {
2938
+ $output = array();
2939
+ foreach( $notices as $key => $notice ) {
2940
+ if ( isset($notice['dismiss_on_upgrade']) && $notice['dismiss_on_upgrade'] ) {
2941
+ $output[] = $key;
2942
+ }
2943
+ }
2944
+ return $output;
2945
+ }
2946
+
2947
+ /**
2948
+ * Filter out notice that do not apply, or are dismissed
2949
+ */
2950
+
2951
+ foreach ( $notices as $id => $notice ) {
2952
+ if (get_option( "rsssl_" . $id . "_dismissed" )) {
2953
+ unset($notices[$id]);
2954
+ continue;
2955
+ }
2956
+
2957
+ $func = $notice['callback'];
2958
+ $output = $this->validate_function($func);
2959
+
2960
+ //check if all notices should be dismissed
2961
+ if ( ( isset( $notice['output'][$output]['dismissible'] )
2962
+ && $notice['output'][$output]['dismissible']
2963
+ && ( $this->dismiss_all_notices ) )
2964
+ ) {
2965
+ unset($notices[$id]);
2966
+ continue;
2967
+ }
2968
+
2969
+ if ( !isset($notice['output'][ $output ]) ) {
2970
+ unset($notices[$id]);
2971
+ continue;
2972
+ } else {
2973
+ $notices[$id]['output'] = $notice['output'][ $output ];
2974
+ }
2975
+
2976
+ $notices[$id]['output']['status'] = ( $notices[$id]['output']['icon'] !== 'success') ? 'open' : 'completed';
2977
+
2978
+ if ( $args['status'] === 'open' && ($notices[$id]['output']['status'] === 'completed' ) ){
2979
+ unset($notices[$id]);
2980
+ continue;
2981
+ }
2982
+
2983
+ $condition_functions = $notice['condition'];
2984
+ foreach ( $condition_functions as $func ) {
2985
+ $condition = $this->validate_function($func, true);
2986
+ if ( ! $condition ) {
2987
+ unset($notices[$id]);
2988
+ }
2989
+ }
2990
+ }
2991
+
2992
+ //if only admin_notices are required, filter out the rest.
2993
+ if ( $args['admin_notices'] ) {
2994
+ foreach ( $notices as $id => $notice ) {
2995
+ if (!isset($notice['output']['admin_notice'])){
2996
+ unset( $notices[$id]);
2997
+ }
2998
+ }
2999
+ set_transient('rsssl_admin_notices', $notices, DAY_IN_SECONDS );
3000
+ }
3001
+
3002
+ //sort so warnings are on top
3003
+ $warnings = array();
3004
+ $open = array();
3005
+ $other = array();
3006
+ foreach ($notices as $key => $notice){
3007
+ if ($notice['output']['icon']==='warning') {
3008
+ $warnings[$key] = $notice;
3009
+ } else if ($notice['output']['icon']==='open') {
3010
+ $open[$key] = $notice;
3011
+ } else {
3012
+ $other[$key] = $notice;
3013
+ }
3014
  }
3015
 
3016
+ $notices = $warnings + $open + $other;
3017
+
3018
+ //add plus ones
3019
+ foreach ($notices as $key => $notice){
3020
+ if ( isset($notice['output']['url']) ) {
3021
+ $url = $notice['output']['url'];
3022
+ $target = '';
3023
+ if ( strpos( $url, 'https://really-simple-ssl.com') !== FALSE ){
3024
+ $info = __('%sMore info%s or %sdismiss%s','really-simple-ssl');
3025
+ $target = 'target="_blank"';
3026
+ } else {
3027
+ $info = __('%sEnable%s or %sdismiss%s','really-simple-ssl');
3028
+ }
3029
+ $dismiss_open = "<span class='rsssl-dashboard-dismiss' data-dismiss_type='".$key."'><a href='#' class='rsssl-dismiss-text rsssl-close-warning'>";
3030
+ $notices[$key]['output']['msg'] .= ' '.sprintf($info ,'<a '.$target.' href="'.$url.'">', '</a>', $dismiss_open, "</a></span>");
3031
+ }
3032
+
3033
+ if ( isset($notice['output']['plusone']) && $notice['output']['plusone']) {
3034
+ $plusone = "<span class='rsssl-dashboard-plusone update-plugins rsssl-update-count'><span class='update-count'>1</span></span>";
3035
+ $notices[$key]['output']['msg'] .= $plusone;
3036
+ }
3037
+ }
3038
+
3039
+ //if we only want a list of premium notices
3040
+ if ( $args['premium_only'] ) {
3041
+ foreach ($notices as $key => $notice){
3042
+ if ( !isset($notice['output']['icon']) || $notice['output']['icon'] !== 'premium' ) {
3043
+ unset($notices[$key]);
3044
+ }
3045
+ }
3046
+ }
3047
+
3048
+
3049
+
3050
  return $notices;
3051
  }
3052
 
3053
+ /**
3054
+ * Count number of premium notices we have in the list.
3055
+ * @return int
3056
+ */
3057
+ public function get_lowest_possible_task_count(){
3058
+ $premium_notices = $this->get_notices_list(array('premium_only'=>true));
3059
+ return count($premium_notices) ;
3060
+ }
3061
+
3062
+ /**
3063
+ * Get output of function, in format 'function', or 'class()->sub()->function'
3064
+ * @param string $func
3065
+ * @param bool $is_condition // if the check is a condition, which should return a boolean
3066
+ * @return string|bool
3067
+ */
3068
+
3069
+ private function validate_function($func, $is_condition = false ){
3070
+ $invert = false;
3071
+ if (strpos($func, 'NOT ') !== FALSE ) {
3072
+ $func = str_replace('NOT ', '', $func);
3073
+ $invert = true;
3074
+ }
3075
+
3076
+ if ( $func === '_true_') {
3077
+ $output = true;
3078
+ } else if ( $func === '_false_' ) {
3079
+ $output = false;
3080
+ } else {
3081
+ if ( preg_match( '/(.*)\(\)\-\>(.*)->(.*)/i', $func, $matches)) {
3082
+ $base = $matches[1];
3083
+ $class = $matches[2];
3084
+ $function = $matches[3];
3085
+ $output = call_user_func( array( $base()->{$class}, $function ) );
3086
+ } else {
3087
+ $output = $func();
3088
+ }
3089
+
3090
+ if ( $invert ) {
3091
+ $output = !$output;
3092
+ }
3093
+ }
3094
+
3095
+ //stringyfy booleans
3096
+ if (!$is_condition) {
3097
+ if ( $output === false || $output === 0 ) {
3098
+ $output = 'false';
3099
+ }
3100
+ if ( $output === true || $output === 1 ) {
3101
+ $output = 'true';
3102
+ }
3103
+ }
3104
+ return sanitize_text_field($output);
3105
+ }
3106
+
3107
+ /**
3108
+ * Calculate the percentage completed in the dashboard progress section
3109
+ * Determine max score by adding $notice['score'] to the $max_score variable
3110
+ * Determine actual score by adding $notice['score'] of each item with a 'success' output to $actual_score
3111
+ * @return int
3112
+ *
3113
+ * @since 4.0
3114
+ *
3115
+ */
3116
+
3117
+ public function get_score_percentage() {
3118
+ if ( ! current_user_can( 'manage_options' ) ) {
3119
+ return 0;
3120
+ }
3121
+
3122
+ $max_score = 0;
3123
+ $actual_score = 0;
3124
+ $notices = $this->get_notices_list(array(
3125
+ 'status' => 'all',
3126
+ ));
3127
+ foreach ( $notices as $id => $notice ) {
3128
+ if (isset( $notice['score'] )) {
3129
+ // Only items matching condition will show in the dashboard. Only use these to determine max count.
3130
+ $max_score = $max_score + intval( $notice['score'] );
3131
+ $success = ( isset( $notice['output']['icon'] )
3132
+ && ( $notice['output']['icon']
3133
+ === 'success' ) ) ? true : false;
3134
+ if ( $success ) {
3135
+ // If the output is success, task is completed. Add to actual count.
3136
+ $actual_score = $actual_score + intval( $notice['score'] );
3137
+ }
3138
+ }
3139
+ }
3140
+ if ($max_score>0) {
3141
+ $score = $actual_score / $max_score;
3142
+ } else {
3143
+ $score = 0;
3144
+ }
3145
+ $score = $score * 100;
3146
+ $score = intval( round( $score ) );
3147
+
3148
+ return $score;
3149
+ }
3150
 
3151
  /**
3152
  * @param $setting_name
3157
  *
3158
  */
3159
 
3160
+ public function generate_enable_link($setting_name, $type=false)
3161
  {
3162
+ if ($type == 'free') {
3163
+ return add_query_arg(array("page" => "rlrsssl_really_simple_ssl", "highlight" => "$setting_name"), admin_url("options-general.php"));
3164
+ } elseif ($type == 'premium') {
3165
+ return add_query_arg(array("page" => "rlrsssl_really_simple_ssl", "tab" => "premium", "highlight" => "$setting_name"), admin_url("options-general.php"));
3166
+ }
3167
  }
3168
 
3169
  /**
3179
  private function notice_row($id, $notice){
3180
  if (!current_user_can('manage_options')) return;
3181
 
3182
+ if (!isset($notice['output'])) {
 
 
 
 
 
 
 
 
 
 
 
 
 
3183
  return;
3184
  }
3185
 
3186
+ $msg = $notice['output']['msg'];
3187
+ $icon_type = $notice['output']['icon'];
3188
 
3189
+ // Do not show completed tasks if remaining tasks are selected.
3190
+ if ($icon_type === 'success' && !get_option('rsssl_all_tasks') && get_option('rsssl_remaining_tasks')) return;
3191
 
3192
+ $icon = $this->icon($icon_type);
3193
+ $dismiss = (isset($notice['output']['dismissible']) && $notice['output']['dismissible']) ? $this->rsssl_dismiss_button() : '';
 
3194
 
3195
  ?>
3196
  <tr>
3200
  <?php
3201
  }
3202
 
 
 
 
 
 
 
 
3203
 
 
 
 
3204
 
3205
  /**
 
 
3206
  * Count the plusones
3207
+ *
3208
+ * @return int
3209
  *
3210
  * @since 3.2
3211
  */
3214
  if ( ! current_user_can( 'manage_options' ) ) {
3215
  return 0;
3216
  }
3217
+
3218
+ $cache = $this->is_settings_page() ? false : true;
3219
  $count = get_transient( 'rsssl_plusone_count' );
3220
+ if ( !$cache || ($count === false) ) {
3221
  $count = 0;
 
 
 
3222
  $notices = $this->get_notices_list();
3223
  foreach ( $notices as $id => $notice ) {
3224
+ $success = ( isset( $notice['output']['icon'] ) && ( $notice['output']['icon'] === 'success' ) ) ? true : false;
3225
+ if ( ! $success
3226
+ && isset( $notice['output']['plusone'] )
3227
+ && $notice['output']['plusone']
3228
+ ) {
3229
+ $count++;
3230
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3231
  }
3232
+ set_transient( 'rsssl_plusone_count', $count, WEEK_IN_SECONDS );
3233
  }
3234
  return $count;
3235
  }
3243
  *
3244
  */
3245
 
3246
+ public function general_grid(){
3247
+ $grid_items = array(
3248
+ 'progress' =>array(
3249
+ 'title' => __("Your progress", "really-simple-ssl"),
3250
+ 'header' => rsssl_template_path . 'progress-header.php',
3251
+ 'content' => rsssl_template_path . 'progress.php',
3252
+ 'footer' => rsssl_template_path . 'progress-footer.php',
3253
+ 'class' => 'regular rsssl-progress',
3254
+ 'type' => 'all',
3255
+ ),
3256
+ 'settings' => array(
3257
+ 'title' => __("Settings", "really-simple-ssl"),
3258
+ 'content' => rsssl_template_path . 'settings.php',
3259
+ 'footer' => rsssl_template_path . 'settings-footer.php',
3260
+ 'class' => 'small settings',
3261
+ 'type' => 'settings',
3262
+ ),
3263
+ 'tipstricks' => array(
3264
+ 'title' => __("Tips & Tricks", "really-simple-ssl"),
3265
+ 'header' => '',
3266
+ 'content' => rsssl_template_path . 'tips-tricks.php',
3267
+ 'footer' => rsssl_template_path . 'tips-tricks-footer.php',
3268
+ 'class' => 'small',
3269
+ 'type' => 'popular',
3270
+ ),
3271
+ 'plugins' => array(
3272
+ 'title' => __("Our plugins", "really-simple-ssl"),
3273
+ 'header' => rsssl_template_path . 'header.php',
3274
+ 'content' => rsssl_template_path . 'other-plugins.php',
3275
+ 'class' => 'half-height no-border no-background upsell-grid-container',
3276
+ 'can_hide' => false,
3277
+ ),
3278
+ 'support' => array(
3279
+ 'title' => __("Support forum", "really-simple-ssl"),
3280
+ 'header' => '',
3281
+ 'content' => rsssl_template_path . 'support.php',
3282
+ 'footer' => rsssl_template_path . 'support-footer.php',
3283
+ 'type' => 'tasks',
3284
+ 'class' => 'half-height',
3285
+ ),
3286
+ );
3287
+ return apply_filters( 'rsssl_grid_items', $grid_items );
3288
+ }
3289
 
3290
+ /**
3291
+ * Save the task toggle option
3292
+ * @since 4.0
3293
+ */
3294
 
3295
+ public function update_task_toggle_option() {
3296
 
3297
+ if (!isset($_POST['token']) || (!wp_verify_nonce($_POST['token'], 'rsssl_nonce'))) {
3298
+ return;
3299
+ }
3300
 
3301
+ if (!isset($_POST["action"]) && $_POST["action"] ==! 'rsssl_update_task_toggle_option') return;
 
 
3302
 
3303
+ if (!isset($_POST['alltasks']) || (!isset($_POST['remainingtasks']) ) ) return;
 
3304
 
3305
+ if ($_POST['alltasks'] === 'checked') {
3306
+ update_option('rsssl_all_tasks', true);
3307
+ } else {
3308
+ update_option('rsssl_all_tasks', false);
3309
+ }
 
 
 
 
 
 
 
 
 
 
3310
 
3311
+ if ($_POST['remainingtasks'] === 'checked') {
3312
+ update_option('rsssl_remaining_tasks', true);
3313
+ } else {
3314
+ update_option('rsssl_remaining_tasks', false);
3315
+ }
3316
 
3317
+ wp_die();
3318
+ }
 
3319
 
3320
+ /**
3321
+ * Get count of all tasks
3322
+ * @return int
3323
+ */
3324
+ public function get_all_task_count() {
3325
+ if ( ! current_user_can( 'manage_options' ) ) {
3326
+ return 0;
3327
+ }
3328
 
3329
+ $count = count($this->get_notices_list(
3330
+ array( 'status' => 'all' )
3331
+ ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3332
 
3333
+ return $count;
3334
+ }
3335
 
3336
+ /**
3337
+ * @return int
3338
+ *
3339
+ * Get the remaining open task count, shown in the progress header
3340
+ *
3341
+ */
 
 
 
3342
 
3343
+ public function get_remaining_tasks_count() {
3344
+ if ( ! current_user_can( 'manage_options' ) ) {
3345
+ return 0;
3346
+ }
3347
 
3348
+ $cache = !$this->is_settings_page();
3349
 
3350
+ $count = get_transient( 'rsssl_remaining_task_count' );
3351
+ if ( !$cache || $count === false ) {
3352
+ $count = count($this->get_notices_list(
3353
+ array( 'status' => 'open' )
3354
+ ) );
3355
+ set_transient( 'rsssl_remaining_task_count', $count, DAY_IN_SECONDS );
3356
+ }
 
3357
 
3358
+ return $count;
3359
+ }
 
3360
 
3361
+ /**
3362
+ * Get status link for plugin, depending on installed, or premium availability
3363
+ * @param $item
3364
+ *
3365
+ * @return string
3366
+ */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3367
 
3368
+ public function get_status_link($item){
3369
+ if (!defined($item['constant_free']) && !defined($item['constant_premium'])) {
3370
+ $link = admin_url() . "plugin-install.php?s=".$item['search']."&tab=search&type=term";
3371
+ $text = __('Install', 'really-simple-ssl');
3372
+ $status = "<a href=$link>$text</a>";
3373
+ } elseif ($item['constant_free'] == 'wpsi_plugin' || defined($item['constant_premium'] ) ) {
3374
+ $status = __("Installed", "really-simple-ssl");
3375
+ } elseif (defined($item['constant_free']) && !defined($item['constant_premium'])) {
3376
+ $link = $item['website'];
3377
+ $text = __('Upgrade to pro', 'really-simple-ssl');
3378
+ $status = "<a href=$link>$text</a>";
3379
+ }
3380
+ return $status;
3381
+ }
 
 
 
 
 
 
3382
 
3383
+ /**
3384
+ * Render the settings page
3385
+ */
3386
 
3387
+ public function settings_page()
3388
+ {
3389
+ if (!current_user_can($this->capability)) return;
3390
+ if (isset ($_GET['tab'])) $this->admin_tabs($_GET['tab']); else $this->admin_tabs('configuration');
3391
+ if (isset ($_GET['tab'])) $tab = $_GET['tab']; else $tab = 'configuration';
3392
+ if ( !get_option('rsssl_visited_version_4_dashboard') ) {
3393
+ update_option('rsssl_visited_version_4_dashboard', true);
3394
+ }
3395
+ ?>
3396
+ <div class="rsssl-container">
3397
+ <div class="rsssl-main"><?php
3398
+ switch ($tab) {
3399
+ case 'configuration' :
3400
+ $this->render_grid($this->general_grid());
3401
+ do_action("rsssl_configuration_page");
3402
+ }
3403
+ //possibility to hook into the tabs.
3404
+ do_action("show_tab_{$tab}");
3405
+ ?>
3406
+ </div>
3407
+ </div>
3408
+ <?php
3409
+ }
3410
 
3411
+ /**
3412
+ * Render grid from grid array
3413
+ * @param array $grid
3414
+ */
3415
+ public function render_grid($grid){
3416
+ $container = $this->get_template('grid-container.php', rsssl_path . 'grid/');
3417
+ $element = $this->get_template('grid-element.php', rsssl_path . 'grid/');
3418
+ $output = '';
3419
+ $defaults = array(
3420
+ 'title' => '',
3421
+ 'header' => rsssl_template_path . 'header.php',
3422
+ 'content' => '',
3423
+ 'footer' => '',
3424
+ 'class' => '',
3425
+ 'type' => 'plugins',
3426
+ 'can_hide' => true,
3427
+ 'instructions' => false,
3428
+ );
3429
+ foreach ($grid as $index => $grid_item) {
3430
+ $grid_item = wp_parse_args($grid_item, $defaults);
3431
+ $footer = $this->get_template_part($grid_item, 'footer', $index);
3432
+ $content = $this->get_template_part($grid_item, 'content', $index);
3433
+ $header = $this->get_template_part($grid_item, 'header', $index);
3434
+ $instructions = $grid_item['instructions'] ? '<a href="'.esc_url($grid_item['instructions']).'" target="_blank">'.__("Instructions manual").'</a>' : '';
3435
+ // Add form if type is settings
3436
+ $block = str_replace(array('{class}', '{title}', '{header}', '{content}', '{footer}', '{instructions}'), array($grid_item['class'], $grid_item['title'], $header, $content, $footer, $instructions), $element);
3437
+ $output .= $block;
3438
+ }
3439
 
3440
+ echo str_replace('{content}', $output, $container);
3441
+ }
 
 
 
 
 
 
3442
 
3443
+ /**
3444
+ * Render grid item based on template
3445
+ * @param array $grid_item
3446
+ * @param string $key
3447
+ * @oaram string $index
3448
+ *
3449
+ * @return string
3450
+ */
3451
 
3452
+ public function get_template_part($grid_item, $key, $index) {
 
 
 
 
 
 
 
3453
 
3454
+ if ( !isset($grid_item[$key]) || !$grid_item[$key] ) {
3455
+ $template_part = '';
3456
+ } else {
3457
+ if ( strpos( $grid_item[ $key ], '.php' ) !== false && file_exists($grid_item[ $key ]) ) {
3458
+ ob_start();
3459
+ require $grid_item[ $key ];
3460
+ $template_part = ob_get_clean();
3461
+ } else {
3462
+ $template_part = '';
3463
+ }
3464
+ }
3465
 
3466
+ if ($key === 'content' ) {
3467
+ if ( $grid_item['type'] === 'scan' ) {
3468
+ $template_part = '<form id="rsssl_scan_form" action="" method="post">'.$template_part;
3469
+ } elseif ( $grid_item['type'] === 'settings' ) {
3470
+ if ( is_network_admin() ) {
3471
+ $template_part = '<form action="edit.php?action=rsssl_update_network_settings" method="post">'.wp_nonce_field('rsssl_ms_settings_update', 'rsssl_ms_nonce').
3472
+ $template_part;
3473
+ } else {
3474
+ $template_part = '<form action="options.php" method="post">'.$template_part;
3475
+ }
3476
+ }
3477
+ }
3478
+
3479
+ if ( $key === 'footer' && ( $grid_item['type'] === 'scan' || $grid_item['type'] === 'settings') ) {
3480
+ $template_part .= '</form>';
3481
+ }
3482
+
3483
+ return apply_filters("rsssl_template_part_".$key.'_'.$index, $template_part, $grid_item);
3484
  }
3485
 
3486
  /**
3495
  * @return string
3496
  */
3497
 
3498
+ public function icon($type)
3499
  {
3500
  if ($type == 'success') {
3501
+ return "<span class='rsssl-progress-status rsssl-success'>".__("Completed", "really-simple-ssl")."</span>";
3502
+ } elseif ($type == "warning") {
3503
+ return "<span class='rsssl-progress-status rsssl-warning'>".__("Warning", "really-simple-ssl")."</span>";
3504
+ } elseif ($type == "open") {
3505
+ return "<span class='rsssl-progress-status rsssl-open'>".__("Open", "really-simple-ssl")."</span>";
3506
+ } elseif ($type == "premium") {
3507
+ return "<span class='rsssl-progress-status rsssl-premium'>".__("Premium", "really-simple-ssl")."</span>";
3508
  }
3509
  }
3510
 
3519
  public function rsssl_dismiss_button()
3520
  {
3521
  return '<button type="button" class="close">
3522
+ <span class="rsssl-close-warning-x">X</span>
3523
  </button>';
3524
  }
3525
 
3567
  *
3568
  */
3569
 
3570
+ public function enqueue_assets($hook)
3571
+ {
3572
+ //load on network admin or normal admin settings page
3573
+ if ( $hook !== 'settings_page_really-simple-ssl' && $hook !== 'settings_page_rlrsssl_really_simple_ssl' ) return;
3574
+
3575
+ if (is_rtl()) {
3576
+ wp_register_style('rlrsssl-css', trailingslashit(rsssl_url) . 'css/main-rtl.min.css', array(), rsssl_version);
3577
+ wp_register_style('rsssl-grid', trailingslashit(rsssl_url) . 'grid/css/grid-rtl.min.css', array(), rsssl_version);
3578
+ } else {
3579
+ wp_register_style('rlrsssl-css', trailingslashit(rsssl_url) . 'css/main.min.css', array(), rsssl_version );
3580
+ wp_register_style('rsssl-grid', trailingslashit(rsssl_url) . 'grid/css/grid.css', array(), rsssl_version );
3581
+ }
3582
+
3583
+ wp_register_style('rsssl-scrollbar', trailingslashit(rsssl_url) . 'includes/simple-scrollbar.css', "", rsssl_version);
3584
+ wp_enqueue_style('rsssl-scrollbar');
3585
 
3586
+ wp_enqueue_style('rlrsssl-css');
3587
+ wp_enqueue_style('rsssl-grid');
 
3588
 
3589
+ wp_register_script('rsssl',
3590
+ trailingslashit(rsssl_url)
3591
+ . 'js/scripts.js', array("jquery"), rsssl_version);
3592
+ wp_enqueue_script('rsssl');
3593
 
3594
+ $finished_text = apply_filters('rsssl_finished_text', sprintf(__("Basic SSL configuration finished! Improve your score with %sReally Simple SSL Pro%s.", "really-simple-ssl"), '<a target="_blank" href="' . $this->pro_url . '">', '</a>') );
3595
+ if ($this->ssl_enabled) {
3596
+ $ssl_status = __( "SSL is activated on your site.", 'really-simple-ssl' );
3597
  } else {
3598
+ $ssl_status = __( "SSL is not yet enabled on this site.", 'really-simple-ssl' );
3599
  }
3600
+
3601
+ $not_completed_text_singular = $ssl_status.' '. __("You still have %s task open.", 'really-simple-ssl' );
3602
+ $not_completed_text_plural = $ssl_status .' '.__(" You still have %s tasks open.", 'really-simple-ssl' );
3603
+
3604
+ wp_localize_script('rsssl', 'rsssl',
3605
+ array(
3606
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
3607
+ 'token' => wp_create_nonce( 'rsssl_nonce'),
3608
+ 'copied_text' => __("Copied!", "really-simple-ssl"),
3609
+ 'finished_text' => $finished_text,
3610
+ 'not_complete_text_singular' => $not_completed_text_singular,
3611
+ 'not_complete_text_plural' => $not_completed_text_plural,
3612
+ 'lowest_possible_task_count' => RSSSL()->really_simple_ssl->get_lowest_possible_task_count(),
3613
+ )
3614
+ );
3615
+ wp_register_script('rsssl-scrollbar',
3616
+ trailingslashit(rsssl_url)
3617
+ . 'includes/simple-scrollbar.js', array("jquery"), rsssl_version);
3618
+ wp_enqueue_script('rsssl-scrollbar');
3619
  }
3620
 
3621
  /**
3634
  }
3635
 
3636
  register_setting('rlrsssl_options', 'rlrsssl_options', array($this, 'options_validate'));
 
 
 
 
 
 
3637
  add_settings_section('rlrsssl_settings', __("Settings", "really-simple-ssl"), array($this, 'section_text'), 'rlrsssl');
3638
+
3639
+ $help_tip = RSSSL()->rsssl_help->get_help_tip(__("In most cases you need to leave this enabled, to prevent mixed content issues on your site.", "really-simple-ssl"), $return=true);
3640
+ add_settings_field('id_autoreplace_insecure_links', $help_tip . "<div class='rsssl-settings-text'>" . __("Mixed content fixer", "really-simple-ssl"), array($this, 'get_option_autoreplace_insecure_links'), 'rlrsssl', 'rlrsssl_settings');
3641
 
3642
  //only show option to enable or disable mixed content and redirect when SSL is detected
3643
  if ($this->ssl_enabled) {
3644
+ $help_tip = RSSSL()->rsssl_help->get_help_tip(__("Redirects all requests over HTTP to HTTPS using a PHP 301 redirect. Enable if the .htaccess redirect cannot be used, for example on NGINX servers.", "really-simple-ssl"), $return=true);
3645
+ add_settings_field('id_wp_redirect', $help_tip . "<div class='rsssl-settings-text'>" . __("Enable WordPress 301 redirect", "really-simple-ssl"), array($this, 'get_option_wp_redirect'), 'rlrsssl', 'rlrsssl_settings', ['class' => 'rsssl-settings-row'] );
3646
 
3647
  //when enabled networkwide, it's handled on the network settings page
3648
  if (RSSSL()->rsssl_server->uses_htaccess() && (!is_multisite() || !RSSSL()->rsssl_multisite->ssl_enabled_networkwide)) {
3649
+ $help_tip = RSSSL()->rsssl_help->get_help_tip(__("A .htaccess redirect is faster and works better with caching. Really Simple SSL detects the redirect code that is most likely to work (99% of websites), but this is not 100%. Make sure you know how to regain access to your site if anything goes wrong!", "really-simple-ssl"), $return=true);
3650
+ add_settings_field('id_htaccess_redirect', $help_tip . "<div class='rsssl-settings-text'>" . __("Enable 301 .htaccess redirect", "really-simple-ssl"), array($this, 'get_option_htaccess_redirect'), 'rlrsssl', 'rlrsssl_settings');
3651
  }
 
 
3652
  }
3653
 
 
3654
  //on multisite this setting can only be set networkwide
3655
  if (RSSSL()->rsssl_server->uses_htaccess() && !is_multisite()) {
3656
+ $help_tip = RSSSL()->rsssl_help->get_help_tip(__("If you want to customize the Really Simple SSL .htaccess, you need to prevent Really Simple SSL from rewriting it. Enabling this option will do that.", "really-simple-ssl"), $return=true);
3657
+ add_settings_field('id_do_not_edit_htaccess', $help_tip . "<div class='rsssl-settings-text'>" . __("Stop editing the .htaccess file", "really-simple-ssl"), array($this, 'get_option_do_not_edit_htaccess'), 'rlrsssl', 'rlrsssl_settings');
3658
  }
3659
 
3660
+ //don't show alternative mixed content fixer option if mixed content fixer is disabled.
3661
+ if ($this->autoreplace_insecure_links) {
3662
+ $help_tip = RSSSL()->rsssl_help->get_help_tip(__("If this option is set to true, the mixed content fixer will fire on the init hook instead of the template_redirect hook. Only use this option when you experience problems with the mixed content fixer.\"", "really-simple-ssl"), $return=true);
3663
+ add_settings_field('id_switch_mixed_content_fixer_hook', $help_tip . "<div class='rsssl-settings-text'>" . __("Fire mixed content fixer with different method", "really-simple-ssl"), array($this, 'get_option_switch_mixed_content_fixer_hook'), 'rlrsssl', 'rlrsssl_settings');
3664
+ }
3665
 
3666
+ $help_tip = RSSSL()->rsssl_help->get_help_tip(__("Enable this option to permanently dismiss all +1 notices in the 'Your progress' tab", "really-simple-ssl"), $return=true);
3667
+ add_settings_field('id_dismiss_all_notices', $help_tip . "<div class='rsssl-settings-text'>" . __("Dismiss all Really Simple SSL notices", "really-simple-ssl"), array($this, 'get_option_dismiss_all_notices'), 'rlrsssl', 'rlrsssl_settings');
3668
 
3669
  }
3670
 
3679
 
3680
  public function section_text()
3681
  {
3682
+
 
 
3683
  }
3684
 
3685
  /**
3701
  $newinput['review_notice_shown'] = $this->review_notice_shown;
3702
  $newinput['plugin_db_version'] = $this->plugin_db_version;
3703
  $newinput['ssl_enabled'] = $this->ssl_enabled;
 
 
3704
 
3705
  if (!empty($input['hsts']) && $input['hsts'] == '1') {
3706
  $newinput['hsts'] = TRUE;
3726
  $newinput['autoreplace_insecure_links'] = FALSE;
3727
  }
3728
 
 
 
 
 
 
 
 
3729
  if (!empty($input['do_not_edit_htaccess']) && $input['do_not_edit_htaccess'] == '1') {
3730
  $newinput['do_not_edit_htaccess'] = TRUE;
3731
  } else {
3744
  $newinput['dismiss_all_notices'] = FALSE;
3745
  }
3746
 
 
 
 
 
 
 
3747
  if (!empty($input['htaccess_redirect']) && $input['htaccess_redirect'] == '1') {
3748
  $newinput['htaccess_redirect'] = TRUE;
3749
  } else {
3753
  return $newinput;
3754
  }
3755
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3756
 
3757
  /**
3758
  * Insert option into settings form
3773
  $wp_redirect = TRUE;
3774
  $comment = __("This option is enabled on the network menu.", "really-simple-ssl");
3775
  }
 
3776
  ?>
3777
  <label class="rsssl-switch">
3778
  <input id="rlrsssl_options" name="rlrsssl_options[wp_redirect]" size="40" value="1"
3779
+ type="checkbox" <?php echo $disabled?> <?php checked(1, $wp_redirect, true) ?> />
3780
  <span class="rsssl-slider rsssl-round"></span>
3781
  </label>
3782
  <?php
3783
+ RSSSL()->rsssl_help->get_comment($comment);
 
 
3784
  }
3785
 
 
3786
  /**
3787
  * Insert option into settings form
3788
  * The .htaccess redirect is not shown for multisite sites that are enabled network wide.
3793
  *
3794
  */
3795
 
3796
+ public function get_option_htaccess_redirect()
3797
+ {
3798
+ $comment = $disabled = "";
3799
+ $link_open = '<a href="https://really-simple-ssl.com/knowledge-base/remove-htaccess-redirect-site-lockout/" target="_blank">';
3800
+ if (!$this->htaccess_redirect) $comment = sprintf(__("Before you enable the htaccess redirect, make sure you know how to %sregain access%s to your site in case of a redirect loop.", "really-simple-ssl"), $link_open, '</a>');
3801
+ //networkwide is not shown, so this only applies to per site activated sites.
3802
+ if (is_multisite() && RSSSL()->rsssl_multisite->htaccess_redirect) {
 
 
 
3803
  $disabled = "disabled";
 
3804
  $comment = __("This option is enabled on the network menu.", "really-simple-ssl");
3805
+ } elseif ($this->do_not_edit_htaccess) {
3806
+ //on multisite, the .htaccess do not edit option is not available
3807
+ $comment = __("If the setting 'stop editing the .htaccess file' is enabled, you can't change this setting.", "really-simple-ssl");
3808
+ $disabled = "disabled";
3809
+ }
3810
+ ?>
3811
  <label class="rsssl-switch" id="rsssl-maybe-highlight-wp-redirect-to-htaccess">
3812
  <input id="rlrsssl_options" name="rlrsssl_options[htaccess_redirect]" size="40" value="1"
3813
+ type="checkbox" <?php checked(1, $this->htaccess_redirect, true) ?> <?php echo $disabled?>/>
3814
  <span class="rsssl-slider rsssl-round"></span>
3815
  </label>
3816
+ <?php
3817
+ RSSSL()->rsssl_help->get_comment($comment);
3818
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3819
 
3820
  /**
3821
  * Insert option into settings form
3835
  <span class="rsssl-slider rsssl-round"></span>
3836
  </label>
3837
  <?php
3838
+ if (!$this->do_not_edit_htaccess && !is_writable($this->htaccess_file())) {
3839
+ $comment = __(".htaccess is currently not writable.", "really-simple-ssl");
3840
+ RSSSL()->rsssl_help->get_comment($comment);
3841
+ }
3842
  }
3843
 
3844
  /**
3859
  <span class="rsssl-slider rsssl-round"></span>
3860
  </label>
3861
  <?php
 
3862
  }
3863
 
3864
  /**
3880
  <span class="rsssl-slider rsssl-round"></span>
3881
  </label>
3882
  <?php
 
3883
  }
3884
 
3885
  /**
3892
  *
3893
  */
3894
 
3895
+ public function deactivate_popup()
 
3896
  {
3897
 
3898
  ?>
3899
+ <?php add_thickbox();?>
3900
  <style>
3901
+
3902
+ #TB_ajaxContent.rsssl-deactivation-popup {
3903
  text-align: center !important;
3904
+ width:750px;
3905
  }
3906
+ #TB_window.rsssl-deactivation-popup {
3907
+ height: 440px !important;
3908
+ border-left: 7px solid black;
3909
+ }
3910
+ .rsssl-deactivation-popup #TB_title{
3911
+ height: 70px;
3912
+ border-bottom: 1px solid #dedede;
3913
+ }
3914
+ .rsssl-deactivation-popup #TB_ajaxWindowTitle {
3915
+ font-weight:bold;
3916
+ font-size:30px;
3917
+ padding: 20px;
3918
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
3919
 
3920
+ .rsssl-deactivation-popup .tb-close-icon {
3921
+ color:#dedede;
3922
+ width: 50px;
3923
+ height: 50px;
3924
+ top: 12px;
3925
+ right: 20px;
3926
+ }
3927
+ .rsssl-deactivation-popup .tb-close-icon:before {
3928
+ font: normal 50px/50px dashicons;
3929
+ }
3930
+ .rsssl-deactivation-popup #TB_closeWindowButton:focus .tb-close-icon {
3931
+ outline:0;
3932
+ box-shadow: 0 0 0 0 #5b9dd9, 0 0 0 0 rgba(30, 140, 190, .8);
3933
+ color:#dedede;
3934
+ }
3935
+ .rsssl-deactivation-popup #TB_closeWindowButton .tb-close-icon:hover {
3936
+ color:#666;
3937
+ }
3938
+ .rsssl-deactivation-popup #TB_closeWindowButton:focus {
3939
+ outline:0;
3940
+ }
3941
+ .rsssl-deactivation-popup #TB_ajaxContent {
3942
+ width: 100% !important;
3943
+ padding: 0;
3944
+ }
3945
 
3946
+ .rsssl-deactivation-popup .button-rsssl-tertiary.button {
3947
+ background-color: #D7263D !important;
3948
+ color: white !important;
3949
+ border-color: #D7263D;
3950
+ }
 
3951
 
3952
+ .rsssl-deactivation-popup .button-rsssl-tertiary.button:hover {
3953
+ background-color: #f1f1f1 !important;
3954
+ color: #d7263d !important;
3955
+ }
3956
 
3957
+ .rsssl-deactivate-notice-content {
3958
+ margin: 20px
3959
+ }
3960
+ .rsssl-deactivate-notice-content h3 , .rsssl-deactivate-notice-content ul{
3961
+ font-size:1.1em;
3962
+ }
3963
 
3964
+ .rsssl-deactivate-notice-footer {
3965
+ padding-top: 20px;
3966
+ position:absolute;
3967
+ bottom:15px;
3968
+ width: 94%;
3969
+ margin-left: 3%;
3970
+ border-top: 1px solid #dedede;
3971
+ }
3972
 
3973
+ .rsssl-deactivation-popup ul {
3974
+ list-style: circle;
3975
+ padding-left: 20px;
3976
+ }
3977
+ .rsssl-deactivation-popup a {
3978
+ margin-right:10px !important;
3979
+ }
3980
+ </style>
3981
+ <script>
3982
+ jQuery(document).ready(function ($) {
3983
+ $('#rsssl_close_tb_window').click(tb_remove);
3984
+ $(document).on('click', '#deactivate-really-simple-ssl', function(e){
3985
+ e.preventDefault();
3986
+ tb_show( '<?php _e("Are you sure?", "really-simple-ssl") ?>', '#TB_inline?height=420&inlineId=deactivate_keep_ssl', 'null');
3987
+ $("#TB_window").addClass('rsssl-deactivation-popup');
3988
 
3989
+ });
3990
+ if ($('#deactivate-really-simple-ssl').length){
3991
+ $('.rsssl-button-deactivate-revert').attr('href', $('#deactivate-really-simple-ssl').attr('href') );
3992
+ }
3993
+
3994
+ });
3995
+ </script>
3996
+ <div id="deactivate_keep_ssl" style="display: none;">
3997
+ <div class="rsssl-deactivate-notice-content">
3998
+ <h3 style="margin: 20px 0; text-align: left;">
3999
+ <?php _e("To deactivate the plugin correctly, please select if you want to:", "really-simple-ssl") ?></h3>
4000
+ <ul style="text-align: left; font-size: 1.2em;">
4001
+ <li><?php _e("Deactivate, but stay on SSL.", "really-simple-ssl") ?></li>
4002
+ <li><?php _e("Deactivate, and revert to http. This will remove all changes by the plugin.", "really-simple-ssl") ?></li>
4003
+ </ul>
4004
+ <h3><?php _e("Deactivating the plugin while keeping SSL will do the following:", "really-simple-ssl") ?></h3>
4005
+ <ul style="text-align: left; font-size: 1.2em;">
4006
+ <li><?php _e("The mixed content fixer will stop working", "really-simple-ssl") ?></li>
4007
+ <li><?php _e("The WordPress 301 redirect will stop working", "really-simple-ssl") ?></li>
4008
+ <li><?php _e("Your site address will remain https://", "really-simple-ssl") ?> </li>
4009
+ <li><?php _e("The .htaccess redirect will remain active", "really-simple-ssl") ?></li>
4010
+ </ul>
4011
+ </div>
4012
+
4013
+ <?php
4014
+ $token = wp_create_nonce('rsssl_deactivate_plugin');
4015
+ $deactivate_keep_ssl_link = admin_url("options-general.php?page=rlrsssl_really_simple_ssl&action=uninstall_keep_ssl&token=" . $token);
4016
+
4017
+ ?>
4018
+ <div class="rsssl-deactivate-notice-footer">
4019
+ <a class="button button-default" href="#" id="rsssl_close_tb_window"><?php _e("Cancel", "really-simple-ssl") ?></a>
4020
+ <a class="button button-primary" href="<?php echo $deactivate_keep_ssl_link ?>"><?php _e("Deactivate, keep https", "really-simple-ssl") ?></a>
4021
+ <a class="button button-rsssl-tertiary rsssl-button-deactivate-revert" href="#"><?php _e("Deactivate, revert to http", "really-simple-ssl") ?></a>
4022
+ </div>
4023
+ </div>
4024
  <?php
 
4025
  }
4026
 
4027
  /**
4032
 
4033
  public function get_option_autoreplace_insecure_links()
4034
  {
 
4035
  $autoreplace_mixed_content = $this->autoreplace_insecure_links;
4036
  $disabled = "";
4037
  $comment = "";
4043
  }
4044
 
4045
  ?>
4046
+ <label class="rsssl-switch" id="rsssl-maybe-highlight-autoreplace_insecure_links">
4047
  <input id="rlrsssl_options" name="rlrsssl_options[autoreplace_insecure_links]" size="40" value="1"
4048
+ type="checkbox" <?php checked(1, $autoreplace_mixed_content, true) ?> <?php echo $disabled?>/>
4049
  <span class="rsssl-slider rsssl-round"></span>
4050
  </label>
4051
+
4052
+ <?php
4053
+ RSSSL()->rsssl_help->get_comment($comment);
4054
  }
4055
 
4056
  /**
4057
  * Add settings link on plugins overview page
4058
+ * @param string $links
4059
+ * @return string $links
4060
  * @since 2.0
4061
  *
4062
  * @access public
4066
 
4067
  public function plugin_settings_link($links)
4068
  {
 
 
 
 
 
 
 
4069
  $settings_link = '<a href="' . admin_url("options-general.php?page=rlrsssl_really_simple_ssl") . '">' . __("Settings", "really-simple-ssl") . '</a>';
4070
  array_unshift($links, $settings_link);
4071
 
4072
+ if ( apply_filters('rsssl_settings_link', 'free') === 'free' ) {
4073
+ $support = '<a target="_blank" href="https://wordpress.org/support/plugin/really-simple-ssl/">' . __('Support', 'really-simple-ssl') . '</a>';
4074
+ } else {
4075
+ $support = '<a target="_blank" href="https://really-simple-ssl.com/support">' . __('Premium Support', 'really-simple-ssl') . '</a>';
4076
+ }
4077
+ array_unshift($links, $support);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4078
 
4079
+ if ( ! defined( 'rsssl_pro_version' ) ) {
4080
+ $upgrade_link = '<a style="color:#f8be2e;font-weight:bold" target="_blank" href="https://really-simple-ssl.com/pro">'
4081
+ . __( 'Upgrade to premium', 'really-simple-ssl' ) . '</a>';
4082
+ array_unshift( $links, $upgrade_link );
4083
+ }
4084
+ return $links;
4085
  }
4086
 
4087
 
4164
 
4165
  protected function get_test_page_contents()
4166
  {
 
4167
  $filecontents = get_transient('rsssl_testpage');
4168
  if (!$filecontents) {
4169
  $filecontents = "";
4242
  <script>
4243
  jQuery(document).ready(function ($) {
4244
  'use strict';
4245
+ var sPageURL = window.location.href;
4246
+ var queryString = sPageURL.split('?');
4247
+ if (queryString.length === 1) return false;
4248
+ var setting_name = '';
4249
+ var rsssl_variables = queryString[1].split('&');
4250
+ for (var key in rsssl_variables) {
4251
+ if (rsssl_variables.hasOwnProperty(key)) {
4252
+ var output = rsssl_variables[key].split('=');
4253
+ if (output[0]==='highlight') {
4254
+ setting_name = output[1];
 
4255
  }
4256
  }
4257
+ }
4258
+ if(setting_name !== '' && $('#rsssl-maybe-highlight-' + setting_name).length) {
4259
+ $('#rsssl-maybe-highlight-' + setting_name).closest('tr').addClass('rsssl-highlight');
4260
+ }
4261
  });
4262
  </script>
4263
  <?php
4279
  if ($http_referrer && strpos( $http_referrer, "&highlight=" ) ) {
4280
  $url = add_query_arg( array(
4281
  "page" => "rlrsssl_really_simple_ssl",
4282
+ "tab" => "configuration"
4283
  ), admin_url( "options-general.php" ) );
4284
  wp_safe_redirect( $url );
4285
  exit;
4286
  }
4287
  }
4288
+
4289
+ public function get_template($file, $path = rsssl_path, $args = array())
4290
+ {
4291
+
4292
+ $file = trailingslashit($path) . 'templates/' . $file;
4293
+ $theme_file = trailingslashit(get_stylesheet_directory()) . dirname(rsssl_path) . $file;
4294
+
4295
+ if (file_exists($theme_file)) {
4296
+ $file = $theme_file;
4297
+ }
4298
+
4299
+ if (strpos($file, '.php') !== false) {
4300
+ ob_start();
4301
+ require $file;
4302
+ $contents = ob_get_clean();
4303
+ } else {
4304
+ $contents = file_get_contents($file);
4305
+ }
4306
+
4307
+ return $contents;
4308
+ }
4309
  } //class closure
4310
 
4311
  /**
4313
  * @return string
4314
  */
4315
 
 
 
 
 
 
4316
 
4317
  if (!function_exists('rsssl_site_has_ssl')) {
4318
  function rsssl_site_has_ssl() {
4320
  }
4321
  }
4322
 
 
 
 
 
 
 
4323
  if (!function_exists('rsssl_ssl_enabled')) {
4324
+ function rsssl_ssl_enabled() {
4325
+ return RSSSL()->really_simple_ssl->ssl_enabled;
4326
+ }
 
 
 
 
4327
  }
4328
 
4329
  if (!function_exists('rsssl_ssl_detected')) {
4330
  function rsssl_ssl_detected() {
4331
+
4332
  if ( ! RSSSL()->really_simple_ssl->wpconfig_ok() ) {
4333
+ return apply_filters('rsssl_ssl_detected', 'fail');
4334
  }
4335
+
4336
+ if ( RSSSL()->really_simple_ssl->site_has_ssl ) {
4337
+ return apply_filters('rsssl_ssl_detected', 'ssl-detected');
4338
  }
4339
+
4340
+ if ( !RSSSL()->rsssl_certificate->is_valid() ) {
4341
+ return apply_filters('rsssl_ssl_detected', 'no-ssl-detected');
4342
  }
4343
 
4344
+ return apply_filters('rsssl_ssl_detected', 'ssl-detected');
4345
  }
4346
  }
4347
 
4350
  if ( ! RSSSL()->really_simple_ssl->has_301_redirect() ) {
4351
  return 'no-redirect-set';
4352
  }
4353
+
4354
  if ( RSSSL()->really_simple_ssl->has_301_redirect() && RSSSL()->rsssl_server->uses_htaccess() && RSSSL()->really_simple_ssl->htaccess_contains_redirect_rules() ) {
4355
  return 'htaccess-redirect-set';
4356
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4357
 
4358
+ if ( RSSSL()->rsssl_server->uses_htaccess() && ! is_writable( RSSSL()->really_simple_ssl->htaccess_file()) && ( ! is_multisite() || ! RSSSL()->rsssl_multisite->is_per_site_activated_multisite_subfolder_install() ) ) {
4359
+ return 'htaccess-not-writeable';
4360
+ }
4361
+
4362
+ if ( RSSSL()->really_simple_ssl->htaccess_redirect && !RSSSL()->really_simple_ssl->htaccess_test_success) {
4363
+ return 'htaccess-rules-test-failed';
4364
  }
 
 
4365
 
4366
+ if ( RSSSL()->really_simple_ssl->has_301_redirect() && RSSSL()->really_simple_ssl->wp_redirect && RSSSL()->rsssl_server->uses_htaccess() && ! RSSSL()->really_simple_ssl->htaccess_redirect && ( ! is_multisite() || ! RSSSL()->rsssl_multisite->is_per_site_activated_multisite_subfolder_install() )) {
4367
+ return 'wp-redirect-to-htaccess';
 
 
 
 
4368
  }
 
 
4369
 
4370
+ return 'default';
 
 
4371
  }
4372
  }
4373
 
4374
+ if (!function_exists('rsssl_htaccess_not_writable')) {
4375
+ function rsssl_htaccess_not_writable() {
4376
+ //don't trigger if htaccess not used
4377
+ if ( !RSSSL()->rsssl_server->uses_htaccess() ) return false;
 
4378
 
4379
+ if (RSSSL()->really_simple_ssl->do_not_edit_htaccess || !is_writable(RSSSL()->really_simple_ssl->ABSpath.".htaccess")){
 
 
 
4380
  return true;
 
 
4381
  }
4382
+ return false;
4383
  }
4384
  }
4385
 
4386
  if (!function_exists('rsssl_uses_elementor')) {
4387
  function rsssl_uses_elementor() {
4388
+ return ( defined( 'ELEMENTOR_VERSION' ) || defined( 'ELEMENTOR_PRO_VERSION' ) );
 
 
 
 
4389
  }
4390
  }
4391
 
4392
  if (!function_exists('rsssl_uses_divi')) {
4393
  function rsssl_uses_divi() {
4394
+ return defined( 'ET_CORE_PATH' );
 
 
 
 
4395
  }
4396
  }
4397
 
4409
  }
4410
  }
4411
 
 
 
 
 
 
 
4412
  if (!function_exists('rsssl_wp_redirect_condition')) {
4413
  function rsssl_wp_redirect_condition() {
4414
  if ( RSSSL()->really_simple_ssl->has_301_redirect() && RSSSL()->really_simple_ssl->wp_redirect && ! RSSSL()->really_simple_ssl->htaccess_redirect ) {
4428
  }
4429
  }
4430
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
class-certificate.php CHANGED
@@ -45,12 +45,21 @@ if ( ! class_exists( 'rsssl_certificate' ) ) {
45
  //get certificate info
46
  $certinfo = $this->get_certinfo($domain);
47
 
48
- if (!$certinfo) return false;
 
 
 
49
 
50
  //Check if domain is valid
51
  $domain_valid = $this->is_domain_valid($certinfo, $domain);
 
 
 
52
  //Check if date is valid
53
  $date_valid = $this->is_date_valid($certinfo);
 
 
 
54
  //Domain and date valid? Return true
55
  if ($domain_valid && $date_valid) {
56
  return true;
@@ -90,6 +99,15 @@ if ( ! class_exists( 'rsssl_certificate' ) ) {
90
 
91
  }
92
 
 
 
 
 
 
 
 
 
 
93
  /**
94
  *
95
  * Check if the date is valid by looking at the validFrom and validTo times
@@ -166,21 +184,26 @@ if ( ! class_exists( 'rsssl_certificate' ) ) {
166
 
167
  public function get_certinfo($url)
168
  {
169
-
170
  $certinfo = get_transient('rsssl_certinfo');
171
- if (!$certinfo || RSSSL()->really_simple_ssl->is_settings_page()) {
 
 
 
 
172
  $url = 'https://'.$url;
173
  $original_parse = parse_url($url, PHP_URL_HOST);
174
  if ($original_parse) {
175
-
176
  $get = stream_context_create(array("ssl" => array("capture_peer_cert" => TRUE)));
177
  if ($get) {
178
  set_error_handler(array($this, 'custom_error_handling'));
179
- $read = stream_socket_client("ssl://" . $original_parse . ":443", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $get);
180
  restore_error_handler();
181
 
182
- if ($errno == 0 && $read) {
 
 
183
 
 
184
  $cert = stream_context_get_params($read);
185
  $certinfo = openssl_x509_parse($cert['options']['ssl']['peer_certificate']);
186
  }
45
  //get certificate info
46
  $certinfo = $this->get_certinfo($domain);
47
 
48
+ if (!$certinfo) {
49
+ RSSSL()->really_simple_ssl->trace_log("- SSL certificate not valid");
50
+ return false;
51
+ }
52
 
53
  //Check if domain is valid
54
  $domain_valid = $this->is_domain_valid($certinfo, $domain);
55
+ if (!$domain_valid) {
56
+ RSSSL()->really_simple_ssl->trace_log("- Domain on certificate does not match website's domain");
57
+ }
58
  //Check if date is valid
59
  $date_valid = $this->is_date_valid($certinfo);
60
+ if (!$date_valid) {
61
+ RSSSL()->really_simple_ssl->trace_log("- Date on certificate expired or not valid");
62
+ }
63
  //Domain and date valid? Return true
64
  if ($domain_valid && $date_valid) {
65
  return true;
99
 
100
  }
101
 
102
+ public function detection_failed(){
103
+ $certinfo = get_transient('rsssl_certinfo');
104
+ if ($certinfo && $certinfo === 'no-response' ) {
105
+ return true;
106
+ }
107
+
108
+ return false;
109
+ }
110
+
111
  /**
112
  *
113
  * Check if the date is valid by looking at the validFrom and validTo times
184
 
185
  public function get_certinfo($url)
186
  {
 
187
  $certinfo = get_transient('rsssl_certinfo');
188
+
189
+ //if the last check resulted in a "no response", we skip this check for a day.
190
+ if ($certinfo === 'no-response') return false;
191
+
192
+ if (!$certinfo || RSSSL()->really_simple_ssl->is_settings_page()) {
193
  $url = 'https://'.$url;
194
  $original_parse = parse_url($url, PHP_URL_HOST);
195
  if ($original_parse) {
 
196
  $get = stream_context_create(array("ssl" => array("capture_peer_cert" => TRUE)));
197
  if ($get) {
198
  set_error_handler(array($this, 'custom_error_handling'));
199
+ $read = stream_socket_client("ssl://" . $original_parse . ":443", $errno, $errstr, 5, STREAM_CLIENT_CONNECT, $get);
200
  restore_error_handler();
201
 
202
+ if (!$read){
203
+ $certinfo = 'no-response';
204
+ }
205
 
206
+ if ($errno == 0 && $read) {
207
  $cert = stream_context_get_params($read);
208
  $certinfo = openssl_x509_parse($cert['options']['ssl']['peer_certificate']);
209
  }
class-front-end.php CHANGED
@@ -9,21 +9,17 @@ if ( ! class_exists( 'rsssl_front_end' ) ) {
9
  public $javascript_redirect = FALSE;
10
  public $wp_redirect = TRUE;
11
  public $autoreplace_insecure_links = TRUE;
 
12
  public $switch_mixed_content_fixer_hook = FALSE;
13
 
14
- //public $ssl_enabled_networkwide = FALSE;
15
-
16
  function __construct()
17
  {
18
  if (isset(self::$_this))
19
  wp_die(sprintf(__('%s is a singleton class and you cannot create a second instance.', 'really-simple-ssl'), get_class($this)));
20
 
21
  self::$_this = $this;
22
-
23
  $this->get_options();
24
-
25
  add_action('rest_api_init', array($this, 'wp_rest_api_force_ssl'), ~PHP_INT_MAX);
26
-
27
  }
28
 
29
  static function this()
@@ -31,22 +27,6 @@ if ( ! class_exists( 'rsssl_front_end' ) ) {
31
  return self::$_this;
32
  }
33
 
34
- /**
35
- * Sets the SSL variable to on for WordPress, so the native function is_ssl() will return true
36
- * It should run as first plugin in WP, otherwise issues might result.
37
- *
38
- * @since 3.0
39
- *
40
- * @access public
41
- *
42
- */
43
-
44
- // public function set_ssl_var(){
45
- // if (($this->ssl_enabled) || $this->ssl_enabled_networkwide) {
46
- // $_SERVER["HTTPS"] = "on";
47
- // }
48
- // }
49
-
50
  /**
51
  * Javascript redirect, when ssl is true.
52
  *
@@ -59,7 +39,6 @@ if ( ! class_exists( 'rsssl_front_end' ) ) {
59
  public function force_ssl()
60
  {
61
  if ($this->ssl_enabled) {
62
- if ($this->javascript_redirect) add_action('wp_print_scripts', array($this, 'force_ssl_with_javascript'));
63
  if ($this->wp_redirect) add_action('wp', array($this, 'wp_redirect_to_ssl'), 40, 3);
64
  }
65
  }
@@ -146,26 +125,5 @@ if ( ! class_exists( 'rsssl_front_end' ) ) {
146
  }
147
  }
148
 
149
-
150
- /**
151
- * Adds some javascript to redirect to https.
152
- *
153
- * @since 1.0
154
- *
155
- * @access public
156
- *
157
- */
158
-
159
- public function force_ssl_with_javascript()
160
- {
161
- $script = '<script>';
162
- $script .= 'if (document.location.protocol != "https:") {';
163
- $script .= 'document.location = document.URL.replace(/^http:/i, "https:");';
164
- $script .= '}';
165
- $script .= '</script>';
166
-
167
- echo apply_filters('rsssl_javascript_redirect', $script);
168
- }
169
-
170
  }
171
  }
9
  public $javascript_redirect = FALSE;
10
  public $wp_redirect = TRUE;
11
  public $autoreplace_insecure_links = TRUE;
12
+ public $ssl_enabled;
13
  public $switch_mixed_content_fixer_hook = FALSE;
14
 
 
 
15
  function __construct()
16
  {
17
  if (isset(self::$_this))
18
  wp_die(sprintf(__('%s is a singleton class and you cannot create a second instance.', 'really-simple-ssl'), get_class($this)));
19
 
20
  self::$_this = $this;
 
21
  $this->get_options();
 
22
  add_action('rest_api_init', array($this, 'wp_rest_api_force_ssl'), ~PHP_INT_MAX);
 
23
  }
24
 
25
  static function this()
27
  return self::$_this;
28
  }
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  /**
31
  * Javascript redirect, when ssl is true.
32
  *
39
  public function force_ssl()
40
  {
41
  if ($this->ssl_enabled) {
 
42
  if ($this->wp_redirect) add_action('wp', array($this, 'wp_redirect_to_ssl'), 40, 3);
43
  }
44
  }
125
  }
126
  }
127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  }
129
  }
class-help.php CHANGED
@@ -1,28 +1,46 @@
1
  <?php
2
  defined('ABSPATH') or die("you do not have access to this page!");
3
  if ( ! class_exists( 'rsssl_help' ) ) {
4
- class rsssl_help {
5
- private static $_this;
6
 
7
- function __construct() {
8
- if ( isset( self::$_this ) )
9
- wp_die( sprintf( __( '%s is a singleton class and you cannot create a second instance.','really-simple-ssl' ), get_class( $this ) ) );
10
 
11
- self::$_this = $this;
12
- }
13
 
14
- static function this() {
15
- return self::$_this;
16
- }
17
 
18
- public function get_help_tip($str){
19
- ?>
20
- <span class="rsssl-tooltip-right tooltip-right" data-rsssl-tooltip="<?php echo $str?>">
21
- <span class="dashicons dashicons-editor-help"></span>
22
- </span>
23
- <?php
 
 
 
 
 
 
 
 
24
 
25
- }
 
 
 
 
 
 
 
 
 
 
26
 
27
- }//class closure
28
  } //if class exists closure
1
  <?php
2
  defined('ABSPATH') or die("you do not have access to this page!");
3
  if ( ! class_exists( 'rsssl_help' ) ) {
4
+ class rsssl_help {
5
+ private static $_this;
6
 
7
+ function __construct() {
8
+ if ( isset( self::$_this ) )
9
+ wp_die( sprintf( __( '%s is a singleton class and you cannot create a second instance.','really-simple-ssl' ), get_class( $this ) ) );
10
 
11
+ self::$_this = $this;
12
+ }
13
 
14
+ static function this() {
15
+ return self::$_this;
16
+ }
17
 
18
+ public function get_help_tip($str, $return=false){
19
+ if ($return) {
20
+ ob_start();
21
+ }
22
+ ?>
23
+ <span class="rsssl-tooltip-right tooltip-right" data-rsssl-tooltip="<?php echo $str?>">
24
+ <span class="dashicons dashicons-editor-help"></span>
25
+ </span>
26
+ <?php
27
+ if ($return) {
28
+ $content = ob_get_clean();
29
+ return $content;
30
+ }
31
+ }
32
 
33
+ /**
34
+ * Break current row, and start new one.
35
+ * @param string $str
36
+ * @param string $class
37
+ */
38
+ public function get_comment($str, $class = false) {
39
+ if (strlen($str) === 0) return;
40
+ ?>
41
+ </td></tr><tr class="rsssl-comment-text <?php echo esc_attr($class)?>"><td colspan="2"><?php echo $str;?></td></tr>
42
+ <?php
43
+ }
44
 
45
+ }//class closure
46
  } //if class exists closure
class-mixed-content-fixer.php CHANGED
@@ -18,7 +18,6 @@ if (!class_exists('rsssl_admin_mixed_content_fixer')) {
18
  if (!is_admin() && is_ssl() && RSSSL()->rsssl_front_end->autoreplace_insecure_links) {
19
  $this->fix_mixed_content();
20
  }
21
-
22
  }
23
 
24
  static function this()
18
  if (!is_admin() && is_ssl() && RSSSL()->rsssl_front_end->autoreplace_insecure_links) {
19
  $this->fix_mixed_content();
20
  }
 
21
  }
22
 
23
  static function this()
class-multisite.php CHANGED
@@ -7,12 +7,9 @@ if (!class_exists('rsssl_multisite')) {
7
  {
8
  private static $_this;
9
 
10
- public $option_group = "rsssl_network_options";
11
- public $page_slug = "really-simple-ssl";
12
  public $section = "rsssl_network_options_section";
13
  public $ssl_enabled_networkwide;
14
  public $selected_networkwide_or_per_site;
15
-
16
  public $wp_redirect;
17
  public $htaccess_redirect;
18
  public $do_not_edit_htaccess;
@@ -23,8 +20,6 @@ if (!class_exists('rsssl_multisite')) {
23
  public $cert_expiration_warning;
24
  public $hide_menu_for_subsites;
25
 
26
- private $pro_url = "https://www.really-simple-ssl.com/pro-multisite";
27
-
28
  function __construct()
29
  {
30
 
@@ -33,7 +28,6 @@ if (!class_exists('rsssl_multisite')) {
33
 
34
  self::$_this = $this;
35
 
36
-
37
  $this->load_options();
38
  register_activation_hook(dirname(__FILE__) . "/" . rsssl_plugin, array($this, 'activate'));
39
 
@@ -41,35 +35,35 @@ if (!class_exists('rsssl_multisite')) {
41
  add_filter("admin_url", array($this, "check_admin_protocol"), 20, 3);
42
  add_filter('home_url', array($this, 'check_site_protocol'), 20, 4);
43
  add_filter('site_url', array($this, 'check_site_protocol'), 20, 4);
44
-
45
  add_action("plugins_loaded", array($this, "process_networkwide_choice"), 10, 0);
46
  add_action("plugins_loaded", array($this, "networkwide_choice_notice"), 20, 0);
47
-
48
  add_action('network_admin_menu', array(&$this, 'add_multisite_menu'));
49
  add_action('network_admin_edit_rsssl_update_network_settings', array($this, 'update_network_options'));
50
 
51
  if (is_network_admin()) {
52
  add_action('network_admin_notices', array($this, 'show_notices'), 10);
53
-
54
  add_action('admin_print_footer_scripts', array($this, 'insert_dismiss_success'));
55
  add_action('admin_print_footer_scripts', array($this, 'insert_dismiss_wildcard_warning'));
56
  }
57
 
 
 
58
  add_action('wp_ajax_dismiss_success_message_multisite', array($this, 'dismiss_success_message_callback'));
59
  add_action('wp_ajax_dismiss_wildcard_warning', array($this, 'dismiss_wildcard_message_callback'));
60
- add_action('wp_ajax_rsssl_pro_dismiss_pro_option_notice', array($this, 'dismiss_pro_option_notice'));
61
- add_action("network_admin_notices", array($this, 'show_pro_option_notice'));
62
- add_action("rsssl_show_network_tab_settings", array($this, 'settings_tab'));
63
 
64
  //If WP version is 5.1 or higher, use wp_insert_site hook for multisite SSL activation in new blogs
65
  if(version_compare(get_bloginfo('version'),'5.1', '>=') ) {
66
- add_action('wp_insert_site', array($this, 'maybe_activate_ssl_in_new_blog'), 20, 1);
67
  } else {
68
  add_action('wpmu_new_blog', array($this, 'maybe_activate_ssl_in_new_blog_deprecated'), 10, 6);
69
  }
 
70
  //Listen for run_ssl_process hook switch
71
  add_action('admin_init', array($this, 'listen_for_ssl_conversion_hook_switch'), 40);
 
 
72
 
 
73
 
74
  }
75
 
@@ -78,38 +72,207 @@ if (!class_exists('rsssl_multisite')) {
78
  return self::$_this;
79
  }
80
 
 
81
 
82
- /*
 
 
 
 
 
 
83
 
84
- When a new site is added, maybe activate SSL as well.
 
 
 
 
 
 
 
 
 
 
 
85
 
86
- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
 
88
  public function maybe_activate_ssl_in_new_blog_deprecated($blog_id, $user_id=false, $domain=false, $path=false, $site_id=false, $meta=false)
89
  {
90
-
91
  if ($this->ssl_enabled_networkwide) {
92
  $site = get_blog_details($blog_id);
93
  $this->switch_to_blog_bw_compatible($site);
94
  RSSSL()->really_simple_ssl->activate_ssl();
95
- restore_current_blog(); //switches back to previous blog, not current, so we have to do it each loop
96
  }
97
  }
98
 
99
  /**
100
  * Activate SSl in new block
101
  * @since 3.1.6
102
- * @param $new_site
103
  * @return void
104
  */
105
 
106
  public function maybe_activate_ssl_in_new_blog($site)
107
  {
108
-
109
  if ($this->ssl_enabled_networkwide) {
110
  $this->switch_to_blog_bw_compatible($site);
111
  RSSSL()->really_simple_ssl->activate_ssl();
112
- restore_current_blog(); //switches back to previous blog, not current, so we have to do it each loop
113
  }
114
  }
115
 
@@ -159,84 +322,144 @@ if (!class_exists('rsssl_multisite')) {
159
 
160
  }
161
 
162
- /*
163
-
164
  Add network menu for SSL
165
  Only when plugin is network activated.
166
-
167
  */
168
 
169
  public function add_multisite_menu()
170
  {
171
  if (!$this->plugin_network_wide_active()) return;
172
 
173
- register_setting($this->option_group, 'rsssl_options');
174
- add_settings_section('rsssl_network_settings', __("Settings", "really-simple-ssl"), array($this, 'section_text'), $this->page_slug);
175
-
176
- add_settings_field('id_ssl_enabled_networkwide', __("Enable SSL", "really-simple-ssl"), array($this, 'get_option_enable_multisite'), $this->page_slug, 'rsssl_network_settings');
177
- RSSSL()->rsssl_network_admin_page = add_submenu_page('settings.php', "SSL", "SSL", 'manage_options', $this->page_slug, array(&$this, 'multisite_menu_page'));
178
-
179
  }
180
 
181
- /*
182
  Shows the content of the multisite menu page
183
  */
184
 
185
- public function section_text()
186
- {
187
- _e("Below you can set the multisite options for Really Simple SSL", "really-simple-ssl");
188
- }
189
 
190
  public function get_option_enable_multisite()
191
  {
 
192
  ?>
193
  <select name="rlrsssl_network_options[ssl_enabled_networkwide]">
194
  <?php if (!$this->selected_networkwide_or_per_site) { ?>
195
- <option value="-1" <?php if (!$this->selected_networkwide_or_per_site) echo "selected"; ?>><?php _e("No selection was made", "really-simple-ssl") ?>
196
  <?php } ?>
197
- <option value="1" <?php if ($this->ssl_enabled_networkwide) echo "selected"; ?>><?php _e("networkwide", "really-simple-ssl") ?>
198
- <option value="0" <?php if (!$this->ssl_enabled_networkwide) echo "selected"; ?>><?php _e("per site", "really-simple-ssl") ?>
199
  </select>
200
  <?php
201
-
202
- //echo '<input id="rlrsssl_options" name="rlrsssl_network_options[ssl_enabled_networkwide]" size="40" type="checkbox" value="1"' . checked( 1, $this->ssl_enabled_networkwide, false ) ." />";
203
- rsssl_help::this()->get_help_tip(__("Select to enable SSL networkwide or per site.", "really-simple-ssl"));
204
- }
205
-
206
-
207
- /**
208
- * Displays the options page. The big difference here is where you post the data
209
- * because, unlike for normal option pages, there is nowhere to process it by
210
- * default so we have to create our own hook to process the saving of our options.
211
- */
212
-
213
- public function multisite_menu_page()
214
- {
215
- $tab = "settings";
216
- if (isset ($_GET['tab'])) $tab = $_GET['tab'];
217
- $this->admin_tabs($tab);
218
-
219
- do_action("rsssl_show_network_tab_{$tab}");
220
  }
221
 
222
 
223
- public function settings_tab()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
224
  {
225
  if (isset($_GET['updated'])): ?>
226
  <div id="message" class="updated notice is-dismissible">
227
- <p><?php _e('Options saved.', 'really-simple-ssl') ?></p></div>
 
228
  <?php endif; ?>
229
- <div class="wrap">
230
- <h1><?php _e('Really Simple SSL multisite options', 'really-simple-ssl'); ?></h1>
231
- <form method="POST" action="edit.php?action=rsssl_update_network_settings">
232
- <?php
233
-
234
- settings_fields($this->option_group);
235
- do_settings_sections($this->page_slug);
236
- submit_button();
237
- ?>
238
- </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  </div>
 
240
  <?php
241
  }
242
 
@@ -247,18 +470,18 @@ if (!class_exists('rsssl_multisite')) {
247
 
248
  public function update_network_options()
249
  {
250
- check_admin_referer($this->option_group . '-options');
 
 
 
251
 
252
  if (isset($_POST["rlrsssl_network_options"])) {
253
  $prev_ssl_enabled_networkwide = $this->ssl_enabled_networkwide;
254
  $options = array_map(array($this, "sanitize_boolean"), $_POST["rlrsssl_network_options"]);
255
  $options["selected_networkwide_or_per_site"] = true;
256
-
257
  $this->ssl_enabled_networkwide = isset($options["ssl_enabled_networkwide"]) ? $options["ssl_enabled_networkwide"] : false;
258
-
259
  $this->wp_redirect = isset($options["wp_redirect"]) ? $options["wp_redirect"] : false;
260
  $this->htaccess_redirect = isset($options["htaccess_redirect"]) ? $options["htaccess_redirect"] : false;
261
-
262
  $this->do_not_edit_htaccess = isset($options["do_not_edit_htaccess"]) ? $options["do_not_edit_htaccess"] : false;
263
  $this->autoreplace_mixed_content = isset($options["autoreplace_mixed_content"]) ? $options["autoreplace_mixed_content"] : false;
264
  $this->javascript_redirect = isset($options["javascript_redirect"]) ? $options["javascript_redirect"] : false;
@@ -266,27 +489,25 @@ if (!class_exists('rsssl_multisite')) {
266
  $this->mixed_content_admin = isset($options["mixed_content_admin"]) ? $options["mixed_content_admin"] : false;
267
  $this->cert_expiration_warning = isset($options["cert_expiration_warning"]) ? $options["cert_expiration_warning"] : false;
268
  $this->hide_menu_for_subsites = isset($options["hide_menu_for_subsites"]) ? $options["hide_menu_for_subsites"] : false;
269
-
270
-
271
  $this->selected_networkwide_or_per_site = isset($options["selected_networkwide_or_per_site"]) ? $options["selected_networkwide_or_per_site"] : false;
272
- }
273
 
274
- $this->save_options();
275
 
276
- if ($this->ssl_enabled_networkwide && !$prev_ssl_enabled_networkwide) {
277
- //reset
278
- $this->start_ssl_activation();
279
- //enable SSL on all sites on the network
280
- }
281
 
282
- if (!$this->ssl_enabled_networkwide && $prev_ssl_enabled_networkwide ) {
283
- //if we switch to per page, we deactivate SSL on all pages first, but only if the setting was changed.
284
- $this->start_ssl_deactivation();
 
285
 
286
  }
287
 
288
  // At last we redirect back to our options page.
289
- wp_redirect(add_query_arg(array('page' => $this->page_slug, 'updated' => 'true'), network_admin_url('settings.php')));
290
  exit;
291
  }
292
 
@@ -314,60 +535,34 @@ if (!class_exists('rsssl_multisite')) {
314
  {
315
  //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
316
  $screen = get_current_screen();
317
- if ( $screen->parent_base === 'edit' ) return;
318
-
319
- //if no SSL was detected, don't activate it yet.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
320
 
321
- if (!RSSSL()->really_simple_ssl->site_has_ssl) {
322
- $current_url = esc_url_raw("https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
323
- ?>
324
- <div id="message" class="error notice activate-ssl">
325
- <p><?php _e("No SSL was detected. If you do have an SSL certificate, try to reload this page over https by clicking this link:", "really-simple-ssl"); ?>
326
- &nbsp;<a
327
- href="<?php echo $current_url ?>"><?php _e("reload over https.", "really-simple-ssl"); ?></a>
328
- <?php _e("You can check your certificate on", "really-simple-ssl"); ?>&nbsp;<a target="_blank"
329
- href="https://www.ssllabs.com/ssltest/">Qualys
330
- SSL Labs</a>
331
- </p>
332
- </div>
333
- <?php } ?>
334
 
335
- <?php if (RSSSL()->really_simple_ssl->site_has_ssl) {
336
- if (is_main_site(get_current_blog_id()) && RSSSL()->really_simple_ssl->wpconfig_ok()) {
337
- ?>
338
- <style>
339
- #message.updated.notice.activate-ssl {
340
- padding-top: 10px;
341
- }
342
- </style>
343
- <div id="message" class="updated notice activate-ssl">
344
- <h1><?php _e("Choose your preferred setup", "really-simple-ssl"); ?></h1>
345
- <?php _e("Some things can't be done automatically. Before you migrate, please check for: ", 'really-simple-ssl'); ?>
346
- <p>
347
- <ul>
348
- <li><?php _e('Http references in your .css and .js files: change any http:// into //', 'really-simple-ssl'); ?></li>
349
- <li><?php _e('Images, stylesheets or scripts from a domain without an SSL certificate: remove them or move to your own server.', 'really-simple-ssl'); ?></li>
350
- </ul>
351
- </p>
352
- <?php $this->show_pro(); ?>
353
- <p>
354
- <form action="" method="post">
355
- <?php wp_nonce_field('rsssl_nonce', 'rsssl_nonce'); ?>
356
- <input type="submit" class='button button-primary'
357
- value="<?php _e("Activate SSL networkwide", "really-simple-ssl"); ?>"
358
- id="rsssl_do_activate_ssl_networkwide" name="rsssl_do_activate_ssl_networkwide">
359
- <input type="submit" class='button button-primary'
360
- value="<?php _e("Activate SSL per site", "really-simple-ssl"); ?>"
361
- id="rsssl_do_activate_ssl_per_site" name="rsssl_do_activate_ssl_per_site">
362
- </form>
363
- </p>
364
- <p>
365
- <?php _e("Networkwide activation does not check if a site has an SSL certificate. It just migrates all sites to SSL.", "really-simple-ssl"); ?>
366
- </p>
367
- </div>
368
- <?php
369
- }
370
- }
371
  }
372
 
373
  /**
@@ -378,9 +573,9 @@ if (!class_exists('rsssl_multisite')) {
378
  public function show_pro()
379
  {
380
  ?>
381
- <p><?php _e('You can also let the automatic scan of the pro version handle this for you, and get premium support and increased security with HSTS included.', 'really-simple-ssl'); ?>
382
  &nbsp;<a target="_blank"
383
- href="<?php echo $this->pro_url; ?>"><?php _e("Check out Really Simple SSL Premium", "really-simple-ssl"); ?></a>
384
  </p>
385
  <?php
386
  }
@@ -420,7 +615,6 @@ if (!class_exists('rsssl_multisite')) {
420
 
421
  //enable SSL on all sites on the network
422
  $this->start_ssl_activation();
423
-
424
  }
425
 
426
  if (isset($_POST['rsssl_do_activate_ssl_per_site'])) {
@@ -430,6 +624,13 @@ if (!class_exists('rsssl_multisite')) {
430
  $this->save_options();
431
  }
432
 
 
 
 
 
 
 
 
433
  }
434
 
435
 
@@ -475,27 +676,20 @@ if (!class_exists('rsssl_multisite')) {
475
  }
476
 
477
  if (get_site_option('rsssl_ssl_deactivation_active')){
478
- $this->deactivate_ssl_networkwide();
 
479
  }
480
 
481
  update_site_option('rsssl_run', false);
482
 
483
  }
484
 
485
- public function redirect_to_network_settings_page_after_activation() {
486
- $url = add_query_arg( array(
487
- "page" => "really-simple-ssl",
488
- ), network_admin_url( "settings.php" ) );
489
- wp_safe_redirect( $url );
490
- exit;
491
- }
492
-
493
  public function get_process_completed_percentage(){
494
  $complete_count = get_site_option('rsssl_siteprocessing_progress');
495
-
496
  $percentage = round(($complete_count/$this->get_total_blog_count())*100,0);
497
- if ($percentage > 99) $percentage = 99;
498
- return $percentage;
 
499
  }
500
 
501
  public function start_ssl_activation(){
@@ -537,14 +731,15 @@ if (!class_exists('rsssl_multisite')) {
537
  update_site_option('rsssl_siteprocessing_progress', $current_offset+$nr_of_sites);
538
  }
539
  }
540
-
541
  }
542
 
 
 
 
543
 
544
  public function activate_ssl_networkwide()
545
  {
546
-
547
- //run chunked
548
  $nr_of_sites = 200;
549
  $current_offset = get_site_option('rsssl_siteprocessing_progress');
550
 
@@ -562,12 +757,11 @@ if (!class_exists('rsssl_multisite')) {
562
  update_site_option('rsssl_siteprocessing_progress', $current_offset+$nr_of_sites);
563
  }
564
  }
565
- $this->redirect_to_network_settings_page_after_activation();
566
  }
567
 
568
 
569
  //change deprecated function depending on version.
570
- /*
571
  * Offset is used to chunk the site loops.
572
  * But offset is not used in the pre 4.6 function.
573
  *
@@ -580,13 +774,12 @@ if (!class_exists('rsssl_multisite')) {
580
  $args = array(
581
  'number' => $nr_of_sites,
582
  'offset' => $offset,
583
- 'public' => 1,
584
  );
585
  $sites = ($wp_version >= 4.6) ? get_sites($args) : wp_get_sites();
586
  return $sites;
587
  }
588
 
589
- /*
590
  The new get_sites function returns an object.
591
 
592
  */
@@ -684,7 +877,7 @@ if (!class_exists('rsssl_multisite')) {
684
  }
685
 
686
 
687
- /*
688
  * Checks if we are on a subfolder install. (domain.com/site1 )
689
  *
690
  * @since 2.2
@@ -752,16 +945,16 @@ if (!class_exists('rsssl_multisite')) {
752
 
753
  public function listen_for_ssl_conversion_hook_switch()
754
  {
755
- //check if we are on ssl settings page
756
- if (!$this->is_settings_page()) return;
757
- //check user role
758
- if (!current_user_can('manage_options')) return;
759
- //check nonce
760
- if (!isset($_GET['token']) || (!wp_verify_nonce($_GET['token'], 'run_ssl_to_admin_init'))) return;
761
- //check for action
762
- if (isset($_GET["action"]) && $_GET["action"] == 'ssl_conversion_hook_switch') {
763
- update_site_option('run_ssl_process_hook_switched', true);
764
- }
765
  }
766
 
767
  /**
@@ -777,102 +970,51 @@ if (!class_exists('rsssl_multisite')) {
777
  {
778
  //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
779
  $screen = get_current_screen();
780
- if ( $screen->parent_base === 'edit' ) return;
781
-
782
- if (isset(RSSSL()->really_simple_ssl->errors["DEACTIVATE_FILE_NOT_RENAMED"])) {
783
- ?>
784
- <div id="message" class="error notice is-dismissible rlrsssl-fail">
785
- <h1>
786
- <?php _e("Major security issue!", "really-simple-ssl"); ?>
787
- </h1>
788
- <p>
789
- <?php _e("The 'force-deactivate.php' file has to be renamed to .txt. Otherwise your ssl can be deactivated by anyone on the internet.", "really-simple-ssl"); ?>
790
- </p>
791
- <a href="options-general.php?page=rlrsssl_really_simple_ssl"><?php echo __("Check again", "really-simple-ssl"); ?></a>
792
- </div>
793
- <?php
794
  }
795
 
796
- /*
797
  * ssl switch for sites processing active
798
  */
799
 
800
  if ($this->ssl_process_active()) {
801
- ?>
802
- <div id="message" class="error notice is-dismissible rlrsssl-fail">
803
- <p>
804
-
805
- <?php
806
- //In some cases the rsssl_ssl_process_hook hook can fail. Therefore we offer the option to switch the hook to admin_init when the conversion is stuck.
807
- $token = wp_create_nonce('run_ssl_to_admin_init');
808
- $run_ssl_process_hook_switch_link = network_admin_url("settings.php?page=really-simple-ssl&action=ssl_conversion_hook_switch&token=" . $token);
809
-
810
- $link_open = '<a target="_self" href="' . $run_ssl_process_hook_switch_link . '">';
811
- $link_close = '</a>';
812
- ?>
813
-
814
- <?php printf(__("Conversion of websites %s percent complete.", "really-simple-ssl"), $this->get_process_completed_percentage()); ?>
815
- <?php _e("You have just started enabling or disabling SSL on multiple websites at once, and this process is not completed yet. Please refresh this page to check if the process has finished. It will proceed in the background.", "really-simple-ssl"); ?>
816
- <?php printf(__("If the conversion does not proceed after a few minutes, click %shere%s to force the conversion process.", "really-simple-ssl"), $link_open, $link_close); ?>
817
-
818
- </p>
819
- </div>
820
- <?php
821
- }
822
-
823
- /*
824
- SSL success message
825
- */
826
-
827
- if ($this->selected_networkwide_or_per_site && !get_site_option("rsssl_success_message_shown")) {
828
-
829
- ?>
830
- <div id="message" class="updated notice is-dismissible rlrsssl-multisite-success">
831
- <p>
832
- <?php _e("SSL activated!", "really-simple-ssl"); ?>&nbsp;
833
- <?php
834
- if ($this->ssl_enabled_networkwide)
835
- _e("SSL was activated on your entire network.", "really-simple-ssl");
836
- else
837
- _e("SSL was activated per site.", "really-simple-ssl");
838
- ?>
839
-
840
- <?php _e("Don't forget to change your settings in Google Analytics and Webmaster tools.", "really-simple-ssl"); ?>
841
- &nbsp;
842
- <a target="_blank"
843
- href="https://really-simple-ssl.com/knowledge-base/how-to-setup-google-analytics-and-google-search-consolewebmaster-tools/"><?php _e("More info.", "really-simple-ssl"); ?></a>
844
- </p>
845
- </div>
846
- <?php
847
- }
848
-
849
- if (!$this->ssl_enabled_networkwide && $this->selected_networkwide_or_per_site && $this->is_multisite_subfolder_install()) {
850
- //with no server variables, the website could get into a redirect loop.
851
- if (RSSSL()->really_simple_ssl->no_server_variable) {
852
- ?>
853
- <div id="message" class="error notice">
854
- <p>
855
- <?php _e('You run a Multisite installation with subfolders, which prevents this plugin from fixing your missing server variable in the wp-config.php.', 'really-simple-ssl'); ?>
856
- <?php _e('Because the $_SERVER["HTTPS"] variable is not set, your website may experience redirect loops.', 'really-simple-ssl'); ?>
857
- <?php _e('Activate networkwide to fix this.', 'really-simple-ssl'); ?>
858
- </p>
859
- </div>
860
- <?php
861
  }
862
- }
863
 
864
- if (!RSSSL()->really_simple_ssl->ssl_enabled && !$this->is_multisite_subfolder_install() && !RSSSL()->rsssl_certificate->is_wildcard() && !get_site_option("rsssl_wildcard_message_shown")) {
865
- ?>
866
- <div id="message" class="error notice is-dismissible rlrsssl-multisite-wildcard-warning">
867
- <p>
868
- <?php _e("You run a Multisite installation with subdomains, but your site doesn't have a wildcard certificate.", 'really-simple-ssl'); ?>
869
- <?php _e("This leads to issues when activating SSL networkwide since subdomains will be forced over SSL as well while they don't have a valid certificate.", 'really-simple-ssl'); ?>
870
- <?php _e("Activate SSL per site or install a wildcard certificate to fix this.", 'really-simple-ssl'); ?>
871
- </p>
872
- </div>
873
- <?php
874
  }
875
-
876
  }
877
 
878
 
@@ -945,125 +1087,23 @@ if (!class_exists('rsssl_multisite')) {
945
 
946
  public function dismiss_success_message_callback()
947
  {
948
- if (!current_user_can($this->capability) ) return;
949
  check_ajax_referer('really-simple-ssl-dismiss', 'security');
950
-
951
  update_site_option("rsssl_success_message_shown", true);
952
  wp_die();
953
  }
954
 
955
- public function dismiss_pro_option_notice()
956
- {
957
- if (!current_user_can($this->capability) ) return;
958
- check_ajax_referer('rsssl-pro-dismiss-pro-option-notice' ,'security');
959
-
960
- update_option('rsssl_pro_pro_option_notice_dismissed', true);
961
- wp_die();
962
- }
963
-
964
  public function dismiss_wildcard_message_callback()
965
  {
966
- if (!current_user_can($this->capability) ) return;
967
  check_ajax_referer('really-simple-ssl-dismiss', 'security');
968
-
969
  update_site_option("rsssl_wildcard_message_shown", true);
970
  wp_die();
971
  }
972
 
973
- public function dismiss_pro_option_script()
974
- {
975
-
976
- $ajax_nonce = wp_create_nonce("rsssl-pro-dismiss-pro-option-notice");
977
- ?>
978
- <script type='text/javascript'>
979
- jQuery(document).ready(function ($) {
980
-
981
- $(".rsssl-pro-dismiss-notice.notice.is-dismissible").on("click", ".notice-dismiss", function (event) {
982
- var data = {
983
- 'action': 'rsssl_pro_dismiss_pro_option_notice',
984
- 'security': '<?php echo $ajax_nonce; ?>'
985
- };
986
-
987
- $.post(ajaxurl, data, function (response) {
988
-
989
- });
990
- });
991
- });
992
- </script>
993
- <?php
994
- }
995
-
996
-
997
- public function show_pro_option_notice()
998
- {
999
- //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
1000
- $screen = get_current_screen();
1001
- if ( $screen->parent_base === 'edit' ) return;
1002
-
1003
- if (!$this->is_settings_page()) return;
1004
-
1005
- $dismissed = get_option('rsssl_pro_pro_option_notice_dismissed');
1006
-
1007
- if (!$dismissed) {
1008
-
1009
- add_action('admin_print_footer_scripts', array($this, 'dismiss_pro_option_script'));
1010
-
1011
- if (defined('rsssl_pro_version')) {
1012
- if (!defined('rsssl_pro_ms_version')) {
1013
- ?>
1014
- <div id="message" class="updated notice is-dismissible rsssl-pro-dismiss-notice">
1015
- <p>
1016
- <?php echo sprintf(__('You are running Really Simple SSL pro. A dedicated add-on for multisite has been released. If you want more options to have full control over your multisite network, you can ask for a discount code to %supgrade%s your license to a multisite license.', 'really-simple-ssl'), '<a href="https://really-simple-ssl.com/contact" title="Really Simple SSL">', '</a>') ?>
1017
- </p>
1018
- </p></div>
1019
- <?php
1020
- }
1021
- } else {
1022
- ?>
1023
- <div id="message" class="updated notice is-dismissible rsssl-pro-dismiss-notice">
1024
- <p>
1025
- <?php echo sprintf(__('If you want more options to have full control over your multisite network, you can %supgrade%s your license to a multisite license, or dismiss this message', 'really-simple-ssl'), '<a href="https://really-simple-ssl.com/pro-multisite" title="Really Simple SSL">', '</a>') ?>
1026
- </p>
1027
- </p></div>
1028
- <?php
1029
- }
1030
- }
1031
- }
1032
-
1033
  public function is_settings_page()
1034
  {
1035
  return (isset($_GET['page']) && $_GET['page'] == 'really-simple-ssl') ? true : false;
1036
  }
1037
 
1038
-
1039
- /**
1040
- * Create tabs on the settings page
1041
- *
1042
- * @since 1.0.0
1043
- *
1044
- * @access public
1045
- *
1046
- */
1047
-
1048
- public function admin_tabs($current = 'settings')
1049
- {
1050
- $tabs = array(
1051
- 'settings' => __("Settings", "really-simple-ssl"),
1052
- );
1053
-
1054
- $tabs = apply_filters("rsssl_network_tabs", $tabs);
1055
-
1056
- if (count($tabs) > 1) {
1057
- echo '<h2 class="nav-tab-wrapper">';
1058
-
1059
- foreach ($tabs as $tab => $name) {
1060
- $class = ($tab == $current) ? ' nav-tab-active' : '';
1061
- echo "<a class='nav-tab$class' href='?page=really-simple-ssl&tab=$tab'>$name</a>";
1062
- }
1063
- echo '</h2>';
1064
- }
1065
- }
1066
-
1067
  public function get_total_blog_count()
1068
  {
1069
  //Get the total blog count from all multisite networks
@@ -1082,4 +1122,4 @@ if (!class_exists('rsssl_multisite')) {
1082
  }
1083
 
1084
  } //class closure
1085
- }
7
  {
8
  private static $_this;
9
 
 
 
10
  public $section = "rsssl_network_options_section";
11
  public $ssl_enabled_networkwide;
12
  public $selected_networkwide_or_per_site;
 
13
  public $wp_redirect;
14
  public $htaccess_redirect;
15
  public $do_not_edit_htaccess;
20
  public $cert_expiration_warning;
21
  public $hide_menu_for_subsites;
22
 
 
 
23
  function __construct()
24
  {
25
 
28
 
29
  self::$_this = $this;
30
 
 
31
  $this->load_options();
32
  register_activation_hook(dirname(__FILE__) . "/" . rsssl_plugin, array($this, 'activate'));
33
 
35
  add_filter("admin_url", array($this, "check_admin_protocol"), 20, 3);
36
  add_filter('home_url', array($this, 'check_site_protocol'), 20, 4);
37
  add_filter('site_url', array($this, 'check_site_protocol'), 20, 4);
 
38
  add_action("plugins_loaded", array($this, "process_networkwide_choice"), 10, 0);
39
  add_action("plugins_loaded", array($this, "networkwide_choice_notice"), 20, 0);
 
40
  add_action('network_admin_menu', array(&$this, 'add_multisite_menu'));
41
  add_action('network_admin_edit_rsssl_update_network_settings', array($this, 'update_network_options'));
42
 
43
  if (is_network_admin()) {
44
  add_action('network_admin_notices', array($this, 'show_notices'), 10);
 
45
  add_action('admin_print_footer_scripts', array($this, 'insert_dismiss_success'));
46
  add_action('admin_print_footer_scripts', array($this, 'insert_dismiss_wildcard_warning'));
47
  }
48
 
49
+ $plugin = rsssl_plugin;
50
+ add_filter("network_admin_plugin_action_links_$plugin", array($this, 'plugin_settings_link'));
51
  add_action('wp_ajax_dismiss_success_message_multisite', array($this, 'dismiss_success_message_callback'));
52
  add_action('wp_ajax_dismiss_wildcard_warning', array($this, 'dismiss_wildcard_message_callback'));
 
 
 
53
 
54
  //If WP version is 5.1 or higher, use wp_insert_site hook for multisite SSL activation in new blogs
55
  if(version_compare(get_bloginfo('version'),'5.1', '>=') ) {
56
+ add_action('wp_insert_site', array($this, 'maybe_activate_ssl_in_new_blog'), 20, 1);
57
  } else {
58
  add_action('wpmu_new_blog', array($this, 'maybe_activate_ssl_in_new_blog_deprecated'), 10, 6);
59
  }
60
+
61
  //Listen for run_ssl_process hook switch
62
  add_action('admin_init', array($this, 'listen_for_ssl_conversion_hook_switch'), 40);
63
+ add_filter('rsssl_notices', array($this, 'add_multisite_notices'));
64
+ add_filter('rsssl_ssl_detected', array($this, 'override_ssl_detection_ms'));
65
 
66
+ add_action('rsssl_progress_feedback', array( $this, 'add_ms_progress_feedback' ));
67
 
68
  }
69
 
72
  return self::$_this;
73
  }
74
 
75
+ public function override_ssl_detection_ms( $output ){
76
 
77
+ //if it's multisite, and it's activated per site, this is not important for the main site.
78
+ if ( is_multisite() && is_main_site() && $this->selected_networkwide_or_per_site && !$this->ssl_enabled_networkwide ) {
79
+ return 'not-applicable';
80
+ }
81
+
82
+ return $output;
83
+ }
84
 
85
+ public function add_ms_progress_feedback(){
86
+ if ( !is_multisite() ) return;
87
+ if ( !is_network_admin() ) return;
88
+
89
+ if ( !$this->selected_networkwide_or_per_site ) {
90
+ echo ' '.__('No choice has been made regarding networkwide or per site activation.', 'really-simple-ssl');
91
+ } else if ($this->ssl_enabled_networkwide){
92
+ echo ' '.__('SSL is activated network wide.', 'really-simple-ssl');
93
+ } else {
94
+ echo ' '.__('SSL is activated per site.', 'really-simple-ssl');
95
+ }
96
+ }
97
 
98
+ public function add_multisite_notices($notices) {
99
+
100
+ //only on network
101
+ if ( !is_network_admin()) return $notices;
102
+
103
+ $unset_array = array(
104
+ 'mixed_content_fixer_detected',
105
+ 'hsts_enabled',
106
+ 'secure_cookies_set',
107
+ 'mixed_content_scan',
108
+ 'elementor',
109
+ 'divi',
110
+ 'wordpress_redirect',
111
+ );
112
+
113
+ foreach ( $unset_array as $unset_item ) {
114
+ unset( $notices[$unset_item] );
115
+ }
116
+
117
+ $notices['ssl_enabled'] = array(
118
+ 'callback' => 'RSSSL()->rsssl_multisite->ssl_activation_status',
119
+ 'score' => 30,
120
+ 'output' => array(
121
+ 'ssl-networkwide' => array(
122
+ 'msg' =>__('SSL is enabled networkwide.', 'really-simple-ssl'),
123
+ 'icon' => 'success'
124
+ ),
125
+ 'ssl-per-site' => array(
126
+ 'msg' =>__('SSL is enabled per site.', 'really-simple-ssl'),
127
+ 'icon' => 'success'
128
+ ),
129
+ 'ssl-not-enabled' => array(
130
+ 'msg' => __('SSL is not enabled yet', 'really-simple-ssl'),
131
+ 'icon' => 'open',
132
+ ),
133
+ ),
134
+ );
135
+
136
+ //we don't need an no ssl warning on multisite
137
+ unset( $notices['ssl_detected']['output']['no-ssl-detected'] );
138
+
139
+ $notices['multisite_server_variable_warning'] = array(
140
+ 'callback' => 'RSSSL()->rsssl_multisite->multisite_server_variable_warning',
141
+ 'score' => 30,
142
+ 'output' => array(
143
+ 'no-server-variable' => array(
144
+ 'msg' => __('You run a Multisite installation with subfolders, which prevents this plugin from fixing your missing server variable in the wp-config.php.', 'really-simple-ssl') . " "
145
+ .__('Because the $_SERVER["HTTPS"] variable is not set, your website may experience redirect loops.', 'really-simple-ssl') . " "
146
+ .__('Activate networkwide to fix this.', 'really-simple-ssl'),
147
+ 'icon' => 'warning'
148
+ ),
149
+ ),
150
+ );
151
+
152
+ $notices['subdomains_no_wildcard'] = array(
153
+ 'callback' => 'RSSSL()->rsssl_multisite->subdomains_no_wildcard',
154
+ 'score' => 30,
155
+ 'output' => array(
156
+ 'subdomains-no-wildcard' => array(
157
+ 'msg' => __("You run a Multisite installation with subdomains, but your site doesn't have a wildcard certificate.", 'really-simple-ssl') . " "
158
+ . __("This leads to issues when activating SSL networkwide since subdomains will be forced over SSL as well while they don't have a valid certificate.", 'really-simple-ssl') . " "
159
+ . __("Activate SSL per site or install a wildcard certificate to fix this.", 'really-simple-ssl'),
160
+ 'icon' => 'warning',
161
+ 'dismissible' => true,
162
+ ),
163
+ ),
164
+ );
165
+ return $notices;
166
+ }
167
+
168
+ /**
169
+ * Get string success or fail network wide or per site
170
+ * @return string
171
+ */
172
+
173
+ public function ssl_activation_status(){
174
+
175
+ if ( $this->selected_networkwide_or_per_site ) {
176
+ if ( $this->ssl_enabled_networkwide ){
177
+ return 'ssl-networkwide';
178
+ } else {
179
+ return 'ssl-per-site';
180
+ }
181
+ } else {
182
+ return 'ssl-not-enabled';
183
+ }
184
+ }
185
+
186
+ /**
187
+ * Check if site has a server var issue.
188
+ * @return string
189
+ */
190
+
191
+ public function multisite_server_variable_warning(){
192
+ if (!$this->ssl_enabled_networkwide && $this->selected_networkwide_or_per_site && $this->is_multisite_subfolder_install()) {
193
+ //with no server variables, the website could get into a redirect loop.
194
+ if (RSSSL()->really_simple_ssl->no_server_variable) {
195
+ return 'no-server-variable';
196
+ }
197
+ }
198
+ return 'success';
199
+ }
200
+
201
+ /**
202
+ * Check if we have a subdomains setup, but no wildcard
203
+ * @return string
204
+ */
205
+
206
+ public function subdomains_no_wildcard(){
207
+
208
+ if (!RSSSL()->really_simple_ssl->ssl_enabled && !$this->is_multisite_subfolder_install() && !RSSSL()->rsssl_certificate->is_wildcard() && !get_site_option("rsssl_wildcard_message_shown")) {
209
+ return 'subdomains-no-wildcard';
210
+ }
211
+ return 'success';
212
+ }
213
+
214
+ /**
215
+ * Add settings link on plugins overview page
216
+ * @param array $links
217
+ * @since 2.0
218
+ * @access public
219
+ * @return array
220
+ */
221
+
222
+ public function plugin_settings_link($links)
223
+ {
224
+ $settings_link = '<a href="' . admin_url("options-general.php?page=rlrsssl_really_simple_ssl") . '">' . __("Settings", "really-simple-ssl") . '</a>';
225
+ array_unshift($links, $settings_link);
226
+
227
+ if ( apply_filters('rsssl_settings_link', 'free') === 'free' ) {
228
+ $support = '<a target="_blank" href="https://wordpress.org/support/plugin/really-simple-ssl/">' . __('Support', 'really-simple-ssl') . '</a>';
229
+ } else {
230
+ $support = '<a target="_blank" href="https://really-simple-ssl.com/support">' . __('Premium Support', 'really-simple-ssl') . '</a>';
231
+ }
232
+ array_unshift($links, $support);
233
+
234
+ if ( ! defined( 'rsssl_pro_version' ) ) {
235
+ $upgrade_link = '<a style="color:#f8be2e;font-weight:bold" target="_blank" href="https://really-simple-ssl.com/pro/#multisite">'
236
+ . __( 'Upgrade to premium', 'really-simple-ssl' ) . '</a>';
237
+ array_unshift( $links, $upgrade_link );
238
+ }
239
+ return $links;
240
+ }
241
+
242
+ /**
243
+ * When a new site is added, maybe activate SSL as well.
244
+ *
245
+ * @param int $blog_id
246
+ * @param bool $user_id
247
+ * @param bool $domain
248
+ * @param bool $path
249
+ * @param bool $site_id
250
+ * @param bool $meta
251
+ */
252
 
253
  public function maybe_activate_ssl_in_new_blog_deprecated($blog_id, $user_id=false, $domain=false, $path=false, $site_id=false, $meta=false)
254
  {
 
255
  if ($this->ssl_enabled_networkwide) {
256
  $site = get_blog_details($blog_id);
257
  $this->switch_to_blog_bw_compatible($site);
258
  RSSSL()->really_simple_ssl->activate_ssl();
259
+ restore_current_blog();
260
  }
261
  }
262
 
263
  /**
264
  * Activate SSl in new block
265
  * @since 3.1.6
266
+ * @param $site
267
  * @return void
268
  */
269
 
270
  public function maybe_activate_ssl_in_new_blog($site)
271
  {
 
272
  if ($this->ssl_enabled_networkwide) {
273
  $this->switch_to_blog_bw_compatible($site);
274
  RSSSL()->really_simple_ssl->activate_ssl();
275
+ restore_current_blog();
276
  }
277
  }
278
 
322
 
323
  }
324
 
325
+ /**
 
326
  Add network menu for SSL
327
  Only when plugin is network activated.
 
328
  */
329
 
330
  public function add_multisite_menu()
331
  {
332
  if (!$this->plugin_network_wide_active()) return;
333
 
334
+ register_setting('rsssl_network_options', 'rsssl_options');
335
+ add_settings_section('rsssl_network_settings', __("Settings", "really-simple-ssl"), array($this, 'section_text'), "really-simple-ssl");
336
+ $help = rsssl_help::this()->get_help_tip(__("Select to enable SSL networkwide or per site.", "really-simple-ssl"), true );
337
+ add_settings_field('id_ssl_enabled_networkwide', $help.__("Enable SSL", "really-simple-ssl"), array($this, 'get_option_enable_multisite'), "really-simple-ssl", 'rsssl_network_settings');
338
+ add_submenu_page('settings.php', "SSL", "SSL", 'manage_options', "really-simple-ssl", array(&$this, 'settings_tab'));
 
339
  }
340
 
341
+ /**
342
  Shows the content of the multisite menu page
343
  */
344
 
345
+ public function section_text() {}
 
 
 
346
 
347
  public function get_option_enable_multisite()
348
  {
349
+
350
  ?>
351
  <select name="rlrsssl_network_options[ssl_enabled_networkwide]">
352
  <?php if (!$this->selected_networkwide_or_per_site) { ?>
353
+ <option value="-1" <?php if (!$this->selected_networkwide_or_per_site) echo "selected"; ?>><?php _e("Choose option", "really-simple-ssl") ?>
354
  <?php } ?>
355
+ <option value="1" <?php if ($this->selected_networkwide_or_per_site && $this->ssl_enabled_networkwide) echo "selected"; ?>><?php _e("networkwide", "really-simple-ssl") ?>
356
+ <option value="0" <?php if ($this->selected_networkwide_or_per_site && !$this->ssl_enabled_networkwide) echo "selected"; ?>><?php _e("per site", "really-simple-ssl") ?>
357
  </select>
358
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
359
  }
360
 
361
 
362
+ /**
363
+ * Build the settings page
364
+ *
365
+ * @since 2.0
366
+ *
367
+ * @access public
368
+ *
369
+ */
370
+
371
+ public function general_grid(){
372
+ $grid_items = array(
373
+ 'progress' =>array(
374
+ 'title' => __("Your progress", "really-simple-ssl"),
375
+ 'header' => rsssl_template_path . 'progress-header.php',
376
+ 'content' => rsssl_template_path . 'progress.php',
377
+ 'footer' => rsssl_template_path . 'progress-footer.php',
378
+ 'class' => 'regular rsssl-progress',
379
+ 'type' => 'all',
380
+ ),
381
+ 'ms_settings' => array(
382
+ 'title' => __("Settings", "really-simple-ssl"),
383
+ 'header' => rsssl_template_path . 'header.php',
384
+ 'content' => rsssl_template_path . 'ms-settings.php',
385
+ 'footer' => rsssl_template_path . 'settings-footer.php',
386
+ 'class' => ' settings',
387
+ 'type' => 'settings',
388
+ ),
389
+ 'support' => array(
390
+ 'title' => __("Support forum", "really-simple-ssl"),
391
+ 'header' => '',
392
+ 'content' => rsssl_template_path . 'support.php',
393
+ 'footer' => rsssl_template_path . 'support-footer.php',
394
+ 'type' => 'tasks',
395
+ 'class' => 'half-height',
396
+ ),
397
+ 'plugins' => array(
398
+ 'title' => __("Our plugins", "really-simple-ssl"),
399
+ 'header' => rsssl_template_path . 'header.php',
400
+ 'content' => rsssl_template_path . 'other-plugins.php',
401
+ 'footer' => '',
402
+ 'class' => 'half-height no-border no-background upsell-grid-container',
403
+ 'type' => 'plugins',
404
+ 'can_hide' => false,
405
+ ),
406
+ );
407
+ $grid_items = apply_filters( 'rsssl_grid_items_ms', $grid_items );
408
+
409
+ $defaults = array(
410
+ 'title' => '',
411
+ 'header' => rsssl_template_path . 'header.php',
412
+ 'content' => '',
413
+ 'footer' => '',
414
+ 'class' => '',
415
+ 'type' => 'plugins',
416
+ 'can_hide' => true,
417
+ 'instructions' => false,
418
+ );
419
+ foreach ($grid_items as $key => $grid_item ) {
420
+ $grid_items[$key] = wp_parse_args($grid_item, $defaults);
421
+ }
422
+ return $grid_items;
423
+ }
424
+
425
+ public function settings_tab()
426
  {
427
  if (isset($_GET['updated'])): ?>
428
  <div id="message" class="updated notice is-dismissible">
429
+ <p><?php _e('Options saved.', 'really-simple-ssl') ?></p>
430
+ </div>
431
  <?php endif; ?>
432
+
433
+ <div class="nav-tab-wrapper">
434
+ <div class="rsssl-logo-container">
435
+ <div id="rsssl-logo"><img height="50px" src="<?php echo rsssl_url?>/assets/really-simple-ssl-logo.svg" alt="logo"></div>
436
+ </div>
437
+
438
+
439
+ <div class="header-links">
440
+ <div class="documentation">
441
+ <a href="https://really-simple-ssl.com/knowledge-base" target="_blank" class="<?php if (defined('rsssl_pro_version')) echo "button button-primary"?>"><?php _e("Documentation", "really-simple-ssl");?></a>
442
+ </div>
443
+ <div class="header-upsell">
444
+ <?php if (defined('rsssl_pro_version')) { ?>
445
+ <?php } else { ?>
446
+ <div class="documentation">
447
+ <a href="https://wordpress.org/support/plugin/really-simple-ssl/" class="button button-primary" target="_blank"><?php _e("Support", "really-simple-ssl") ?></a>
448
+ </div>
449
+ <?php } ?>
450
+ </div>
451
+ </div>
452
+
453
+ </div>
454
+
455
+ <div class="rsssl-container">
456
+ <div class="rsssl-main"><?php
457
+ RSSSL()->really_simple_ssl->render_grid($this->general_grid());
458
+ do_action("rsssl_configuration_page");
459
+ ?>
460
+ </div>
461
  </div>
462
+
463
  <?php
464
  }
465
 
470
 
471
  public function update_network_options()
472
  {
473
+ if (!isset($_POST['rsssl_ms_nonce']) || !wp_verify_nonce($_POST['rsssl_ms_nonce'], 'rsssl_ms_settings_update')) return;
474
+ if (!current_user_can('manage_options')) return;
475
+
476
+ do_action('rsssl_process_network_options');
477
 
478
  if (isset($_POST["rlrsssl_network_options"])) {
479
  $prev_ssl_enabled_networkwide = $this->ssl_enabled_networkwide;
480
  $options = array_map(array($this, "sanitize_boolean"), $_POST["rlrsssl_network_options"]);
481
  $options["selected_networkwide_or_per_site"] = true;
 
482
  $this->ssl_enabled_networkwide = isset($options["ssl_enabled_networkwide"]) ? $options["ssl_enabled_networkwide"] : false;
 
483
  $this->wp_redirect = isset($options["wp_redirect"]) ? $options["wp_redirect"] : false;
484
  $this->htaccess_redirect = isset($options["htaccess_redirect"]) ? $options["htaccess_redirect"] : false;
 
485
  $this->do_not_edit_htaccess = isset($options["do_not_edit_htaccess"]) ? $options["do_not_edit_htaccess"] : false;
486
  $this->autoreplace_mixed_content = isset($options["autoreplace_mixed_content"]) ? $options["autoreplace_mixed_content"] : false;
487
  $this->javascript_redirect = isset($options["javascript_redirect"]) ? $options["javascript_redirect"] : false;
489
  $this->mixed_content_admin = isset($options["mixed_content_admin"]) ? $options["mixed_content_admin"] : false;
490
  $this->cert_expiration_warning = isset($options["cert_expiration_warning"]) ? $options["cert_expiration_warning"] : false;
491
  $this->hide_menu_for_subsites = isset($options["hide_menu_for_subsites"]) ? $options["hide_menu_for_subsites"] : false;
 
 
492
  $this->selected_networkwide_or_per_site = isset($options["selected_networkwide_or_per_site"]) ? $options["selected_networkwide_or_per_site"] : false;
 
493
 
494
+ $this->save_options();
495
 
496
+ if ($this->ssl_enabled_networkwide && !$prev_ssl_enabled_networkwide) {
497
+ //reset
498
+ $this->start_ssl_activation();
499
+ //enable SSL on all sites on the network
500
+ }
501
 
502
+ if (!$this->ssl_enabled_networkwide && $prev_ssl_enabled_networkwide ) {
503
+ //if we switch to per page, we deactivate SSL on all pages first, but only if the setting was changed.
504
+ $this->start_ssl_deactivation();
505
+ }
506
 
507
  }
508
 
509
  // At last we redirect back to our options page.
510
+ wp_redirect(add_query_arg(array('page' => "really-simple-ssl", 'updated' => 'true'), network_admin_url('settings.php')));
511
  exit;
512
  }
513
 
535
  {
536
  //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
537
  $screen = get_current_screen();
538
+ if ( $screen->base === 'post' ) return;
539
+
540
+ if (is_network_admin() && RSSSL()->really_simple_ssl->wpconfig_ok()) {
541
+ $class = "updated notice activate-ssl really-simple-plugins";
542
+ $title = __("Setup", "really-simple-ssl");
543
+ $content = '<h2>' . __("Some things can't be done automatically. Before you migrate, please check for: ", "really-simple-ssl") . '</h2>';
544
+ $content .= '<ul>
545
+ <li>'. __("Http references in your .css and .js files: change any http:// into https://", "really-simple-ssl") .'</li>
546
+ <li>'. __("Images, stylesheets or scripts from a domain without an SSL certificate: remove them or move to your own server.", "really-simple-ssl") .'</li>
547
+ </ul>';
548
+ $content .= __('You can also let the automatic scan of the pro version handle this for you, and get premium support and increased security with HSTS included.', 'really-simple-ssl') . " "
549
+ . '<a target="_blank"
550
+ href="https://really-simple-ssl.com/pro-multisite">' . __("Check out Really Simple SSL Premium", "really-simple-ssl") . '</a>' . "<br>";
551
+
552
+ $footer = '<form action="" method="post">
553
+ '. wp_nonce_field('rsssl_nonce', 'rsssl_nonce').'
554
+ <input type="submit" class="button button-primary"
555
+ value="'. __("Activate SSL networkwide", "really-simple-ssl").'"
556
+ id="rsssl_do_activate_ssl_networkwide" name="rsssl_do_activate_ssl_networkwide">
557
+ <input type="submit" class="button button-primary"
558
+ value="'. __("Activate SSL per site", "really-simple-ssl").'"
559
+ id="rsssl_do_activate_ssl_per_site" name="rsssl_do_activate_ssl_per_site">
560
+ </form>';
561
+ $content .= __("Networkwide activation does not check if a site has an SSL certificate. It just migrates all sites to SSL.", "really-simple-ssl");
562
+ echo RSSSL()->really_simple_ssl->notice_html($class, $title, $content, $footer);
563
+ }
564
 
 
 
 
 
 
 
 
 
 
 
 
 
 
565
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
566
  }
567
 
568
  /**
573
  public function show_pro()
574
  {
575
  ?>
576
+ <p><?php _e('You can also let the automatic scan of the pro version handle this for you, and get premium support and increased security with HSTS included.', 'really-simple-ssl') ?>
577
  &nbsp;<a target="_blank"
578
+ href="https://really-simple-ssl.com/pro-multisite"><?php _e("Check out Really Simple SSL Premium", "really-simple-ssl"); ?></a>
579
  </p>
580
  <?php
581
  }
615
 
616
  //enable SSL on all sites on the network
617
  $this->start_ssl_activation();
 
618
  }
619
 
620
  if (isset($_POST['rsssl_do_activate_ssl_per_site'])) {
624
  $this->save_options();
625
  }
626
 
627
+ if (isset($_POST['rsssl_do_activate_ssl_networkwide']) || isset($_POST['rsssl_do_activate_ssl_per_site']) ) {
628
+ $url = add_query_arg( array(
629
+ "page" => "really-simple-ssl",
630
+ ), network_admin_url( "settings.php" ) );
631
+ wp_safe_redirect( $url );
632
+ exit;
633
+ }
634
  }
635
 
636
 
676
  }
677
 
678
  if (get_site_option('rsssl_ssl_deactivation_active')){
679
+ //$this->deactivate_ssl_networkwide();
680
+ $this->end_ssl_deactivation();
681
  }
682
 
683
  update_site_option('rsssl_run', false);
684
 
685
  }
686
 
 
 
 
 
 
 
 
 
687
  public function get_process_completed_percentage(){
688
  $complete_count = get_site_option('rsssl_siteprocessing_progress');
 
689
  $percentage = round(($complete_count/$this->get_total_blog_count())*100,0);
690
+ if ($percentage > 99) $percentage = 100;
691
+
692
+ return intval($percentage);
693
  }
694
 
695
  public function start_ssl_activation(){
731
  update_site_option('rsssl_siteprocessing_progress', $current_offset+$nr_of_sites);
732
  }
733
  }
 
734
  }
735
 
736
+ /**
737
+ * Activate SSL network wide
738
+ */
739
 
740
  public function activate_ssl_networkwide()
741
  {
742
+ //run chunked
 
743
  $nr_of_sites = 200;
744
  $current_offset = get_site_option('rsssl_siteprocessing_progress');
745
 
757
  update_site_option('rsssl_siteprocessing_progress', $current_offset+$nr_of_sites);
758
  }
759
  }
 
760
  }
761
 
762
 
763
  //change deprecated function depending on version.
764
+ /**
765
  * Offset is used to chunk the site loops.
766
  * But offset is not used in the pre 4.6 function.
767
  *
774
  $args = array(
775
  'number' => $nr_of_sites,
776
  'offset' => $offset,
 
777
  );
778
  $sites = ($wp_version >= 4.6) ? get_sites($args) : wp_get_sites();
779
  return $sites;
780
  }
781
 
782
+ /**
783
  The new get_sites function returns an object.
784
 
785
  */
877
  }
878
 
879
 
880
+ /**
881
  * Checks if we are on a subfolder install. (domain.com/site1 )
882
  *
883
  * @since 2.2
945
 
946
  public function listen_for_ssl_conversion_hook_switch()
947
  {
948
+ //check if we are on ssl settings page
949
+ if (!$this->is_settings_page()) return;
950
+ //check user role
951
+ if (!current_user_can('manage_options')) return;
952
+ //check nonce
953
+ if (!isset($_GET['token']) || (!wp_verify_nonce($_GET['token'], 'run_ssl_to_admin_init'))) return;
954
+ //check for action
955
+ if (isset($_GET["action"]) && $_GET["action"] == 'ssl_conversion_hook_switch') {
956
+ update_site_option('run_ssl_process_hook_switched', true);
957
+ }
958
  }
959
 
960
  /**
970
  {
971
  //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
972
  $screen = get_current_screen();
973
+ if ( $screen->base === 'post' ) return;
974
+
975
+ if ( !$this->is_settings_page() ) {
976
+ $notices = RSSSL()->really_simple_ssl->get_notices_list( array('admin_notices'=>true) );
977
+ foreach ( $notices as $id => $notice ){
978
+ $notice = $notice['output'];
979
+ $class = ( $notice['status'] !== 'completed' ) ? 'error' : 'updated';
980
+ echo RSSSL()->really_simple_ssl->notice_html( $class.' '.$id, $notice['title'], $notice['msg'] );
981
+ }
 
 
 
 
 
982
  }
983
 
984
+ /**
985
  * ssl switch for sites processing active
986
  */
987
 
988
  if ($this->ssl_process_active()) {
989
+ $class = "notice is-dismissible rlrsssl-fail";
990
+ $title = "Website conversion";
991
+
992
+ //In some cases the rsssl_ssl_process_hook hook can fail. Therefore we offer the option to switch the hook to admin_init when the conversion is stuck.
993
+ $token = wp_create_nonce('run_ssl_to_admin_init');
994
+ $run_ssl_process_hook_switch_link = network_admin_url("settings.php?page=really-simple-ssl&action=ssl_conversion_hook_switch&token=" . $token);
995
+
996
+ $link_open = '<a target="_self" href="' . $run_ssl_process_hook_switch_link . '">';
997
+ $link_close = '</a>';
998
+ $completed = $this->get_process_completed_percentage();
999
+
1000
+ if ($completed < 100){
1001
+ $class.=" error ";
1002
+ $content = sprintf(__("Conversion of websites %s percent complete.", "really-simple-ssl"), $completed) . " ";
1003
+ $content .= __("Site conversion in progress. Please refresh this page to check if the process has finished. It will proceed in the background.", "really-simple-ssl") . " ";
1004
+ $content .= sprintf(__("If the conversion does not proceed after a few minutes, click %shere%s to force the conversion process.", "really-simple-ssl"), $link_open, $link_close);
1005
+ } else {
1006
+ $class.=" updated ";
1007
+ $activation_active = get_site_option('rsssl_ssl_activation_active');
1008
+ $content = __("Conversion of websites completed.", "really-simple-ssl") . " ";
1009
+ if ($activation_active) {
1010
+ $content .= __("Really Simple SSL has converted all your websites to SSL.", "really-simple-ssl");
1011
+ } else {
1012
+ $content .= __("Really Simple SSL has converted all your websites to non SSL.", "really-simple-ssl");
1013
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1014
  }
 
1015
 
1016
+ echo RSSSL()->really_simple_ssl->notice_html($class, $title, $content);
 
 
 
 
 
 
 
 
 
1017
  }
 
1018
  }
1019
 
1020
 
1087
 
1088
  public function dismiss_success_message_callback()
1089
  {
 
1090
  check_ajax_referer('really-simple-ssl-dismiss', 'security');
 
1091
  update_site_option("rsssl_success_message_shown", true);
1092
  wp_die();
1093
  }
1094
 
 
 
 
 
 
 
 
 
 
1095
  public function dismiss_wildcard_message_callback()
1096
  {
 
1097
  check_ajax_referer('really-simple-ssl-dismiss', 'security');
 
1098
  update_site_option("rsssl_wildcard_message_shown", true);
1099
  wp_die();
1100
  }
1101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1102
  public function is_settings_page()
1103
  {
1104
  return (isset($_GET['page']) && $_GET['page'] == 'really-simple-ssl') ? true : false;
1105
  }
1106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1107
  public function get_total_blog_count()
1108
  {
1109
  //Get the total blog count from all multisite networks
1122
  }
1123
 
1124
  } //class closure
1125
+ }
class-site-health.php CHANGED
@@ -10,10 +10,10 @@ if (!class_exists("rsssl_site_health")) {
10
 
11
  if ( isset( self::$_this ) ) {
12
  wp_die( sprintf( __( '%s is a singleton class and you cannot create a second instance.', 'really-simple-ssl' ), get_class( $this ) ) );
13
-
14
  }
15
 
16
- add_filter( 'site_status_tests', array($this, 'rsssl_hsts_check' ) );
 
17
 
18
  self::$_this = $this;
19
  }
@@ -22,45 +22,111 @@ if (!class_exists("rsssl_site_health")) {
22
  return self::$_this;
23
  }
24
 
25
- public function rsssl_hsts_check( $tests ) {
26
  $tests['direct']['really-simple-ssl'] = array(
27
  'label' => __( 'Really Simple SSL HSTS test' ),
28
- 'test' => array($this, "rsssl_hsts_test"),
29
  );
30
 
31
  return $tests;
32
  }
33
 
34
- public function rsssl_hsts_test() {
35
- $result = array(
36
- 'label' => __( '301 SSL redirect enabled', 'really-simple-ssl' ),
37
- 'status' => 'good',
38
- 'badge' => array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  'label' => __( 'SSL' ),
40
  'color' => 'blue',
41
- ),
42
- 'description' => sprintf(
43
- '<p>%s</p>',
44
- __( 'You have set a 301 redirect to SSL. This is important for SEO purposes', 'really-simple-ssl' )
45
- ),
46
- 'actions' => '',
47
- 'test' => 'really-simple-ssl',
48
- );
49
-
50
- if (RSSSL()->really_simple_ssl->has_301_redirect() && RSSSL()->really_simple_ssl->wp_redirect && RSSSL()->rsssl_server->uses_htaccess() && !RSSSL()->really_simple_ssl->htaccess_redirect) {
51
- $result['status'] = 'recommended';
52
- $result['label'] = __( '301 .htaccess redirect is not enabled.' , 'really-simple-ssl' );
53
- $result['description'] = sprintf(
54
- '<p>%s</p>',
55
- __( 'The 301 .htaccess redirect is often the fastest and most reliable redirect option.' )
56
- );
57
- $result['actions'] .= sprintf(
58
- '<p><a href="%s">%s</a></p>',
59
- esc_url( admin_url("options-general.php?page=rlrsssl_really_simple_ssl&tab=settings") ),
60
- __( 'Enable 301 .htaccess redirect', 'really-simple-ssl' )
61
  );
 
62
  }
63
-
64
  return $result;
65
 
66
  }
10
 
11
  if ( isset( self::$_this ) ) {
12
  wp_die( sprintf( __( '%s is a singleton class and you cannot create a second instance.', 'really-simple-ssl' ), get_class( $this ) ) );
 
13
  }
14
 
15
+
16
+ add_filter( 'site_status_tests', array($this, 'rsssl_health_check' ) );
17
 
18
  self::$_this = $this;
19
  }
22
  return self::$_this;
23
  }
24
 
25
+ public function rsssl_health_check( $tests ) {
26
  $tests['direct']['really-simple-ssl'] = array(
27
  'label' => __( 'Really Simple SSL HSTS test' ),
28
+ 'test' => array($this, "rsssl_health_test"),
29
  );
30
 
31
  return $tests;
32
  }
33
 
34
+ public function rsssl_health_test() {
35
+
36
+
37
+ if (is_multisite() && is_super_admin() ){
38
+ $url = add_query_arg(array('page' => 'really-simple-ssl'), network_admin_url('settings.php'));
39
+ } else {
40
+ $url = add_query_arg(array('page' => 'rlrsssl_really_simple_ssl'), admin_url("options-general.php") );
41
+ }
42
+
43
+ if (!RSSSL()->really_simple_ssl->ssl_enabled) {
44
+ if ( RSSSL()->really_simple_ssl->site_has_ssl ) {
45
+ $result['status'] = 'recommended';
46
+ $result['label'] = __( 'SSL is not enabled.', 'really-simple-ssl' );
47
+ $result['description'] = sprintf(
48
+ '<p>%s</p>',
49
+ __( 'Really Simple SSL detected an SSL certificate, but has not been configured to enforce SSL.',
50
+ 'really-simple-ssl' )
51
+ );
52
+ $result['actions'] .= sprintf(
53
+ '<p><a href="%s">%s</a></p>',
54
+ $url ,
55
+ __( 'Activate SSL', 'really-simple-ssl' )
56
+ );
57
+ } else {
58
+ $result['status'] = 'recommended';
59
+ $result['label'] = __( 'No SSL detected.' , 'really-simple-ssl' );
60
+ $result['description'] = sprintf(
61
+ '<p>%s</p>',
62
+ __( 'Really Simple SSL is installed, but no valid SSL certificate is detected.', 'really-simple-ssl' )
63
+ );
64
+ }
65
+ } else {
66
+ if (!RSSSL()->really_simple_ssl->has_301_redirect()) {
67
+ $result['status'] = 'recommended';
68
+ $result['label'] = __( 'No 301 redirect to SSL not enabled.' , 'really-simple-ssl' );
69
+ $result['description'] = sprintf(
70
+ '<p>%s</p>',
71
+ __( 'To ensure all traffic passes through SSL, please enable a 301 redirect.', 'really-simple-ssl' )
72
+ );
73
+ $result['actions'] .= sprintf(
74
+ '<p><a href="%s">%s</a></p>',
75
+ $url,
76
+ __( 'Enable 301 redirect', 'really-simple-ssl' )
77
+ );
78
+ } else if ( !is_multisite() && RSSSL()->rsssl_server->uses_htaccess() && !RSSSL()->really_simple_ssl->htaccess_redirect) {
79
+ $result['status'] = 'recommended';
80
+ $result['label'] = __( '301 .htaccess redirect is not enabled.' , 'really-simple-ssl' );
81
+ $result['description'] = sprintf(
82
+ '<p>%s</p>',
83
+ __( 'The 301 .htaccess redirect is the fastest and most reliable redirect option.', 'really-simple-ssl' )
84
+ );
85
+ $result['actions'] .= sprintf(
86
+ '<p><a href="%s">%s</a></p>',
87
+ $url,
88
+ __( 'Enable 301 .htaccess redirect', 'really-simple-ssl' )
89
+ );
90
+ } else {
91
+ $result = array(
92
+ 'label' => __( '301 SSL redirect enabled', 'really-simple-ssl' ),
93
+ 'status' => 'good',
94
+ 'description' => sprintf(
95
+ '<p>%s</p>',
96
+ __( 'You have set a 301 redirect to SSL. This is important for SEO purposes', 'really-simple-ssl' )
97
+ ),
98
+ 'actions' => '',
99
+ );
100
+ }
101
+
102
+ //returns empty for sites without .htaccess, or if all headers are already in use
103
+ $recommended_headers = RSSSL()->really_simple_ssl->get_recommended_security_headers();
104
+ if (!empty($recommended_headers)) {
105
+ $style = '<style>.rsssl-sec-headers-list li {list-style-type:disc;margin-left:20px;}</style>';
106
+ $list = '<ul class="rsssl-sec-headers-list"><li>'.implode('</li><li>', $recommended_headers ).'</li></ul>';
107
+ $result['status'] = 'recommended';
108
+ $result['label'] = __( 'Missing security headers' , 'really-simple-ssl' );
109
+ $result['description'] = sprintf(
110
+ '<p>%s</p>',
111
+ __( 'Your .htaccess file does not contain all recommended security headers.', 'really-simple-ssl' ).$style.$list
112
+ );
113
+ $result['actions'] .= sprintf(
114
+ '<p><a href="%s" target="_blank">%s</a></p>',
115
+ 'https://really-simple-ssl.com/everything-you-need-to-know-about-security-headers/',
116
+ __( 'Lear more about security headers', 'really-simple-ssl' )
117
+ );
118
+ }
119
+ }
120
+
121
+
122
+
123
+ if (isset($result['status'])) {
124
+ $result['badge'] = array(
125
  'label' => __( 'SSL' ),
126
  'color' => 'blue',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  );
128
+ $result['test']= 'really-simple-ssl';
129
  }
 
130
  return $result;
131
 
132
  }
css/main-rtl.css CHANGED
@@ -277,7 +277,7 @@
277
  .rsssl-tooltip-left:after,
278
  .rsssl-tooltip-right:after {
279
  margin-right: 0;
280
- margin-bottom: -16px;
281
  }
282
 
283
  /* Styling for the sidebar in the admin tab of the free plugin */
277
  .rsssl-tooltip-left:after,
278
  .rsssl-tooltip-right:after {
279
  margin-right: 0;
280
+ margin-bottom: -66px;
281
  }
282
 
283
  /* Styling for the sidebar in the admin tab of the free plugin */
css/main-rtl.min.css CHANGED
@@ -1 +1 @@
1
- .rsssl-main{flex:1;width:80%;float:right}.rsssl-sidebar img{max-width:100%}.nav-tab-active{background:#fff}.really-simple-ssl-table{display:flex;flex-direction:column;max-width:1140px}.rsssl-table-td-main-content{width:100%}.really-simple-ssl-table tr:first-child{border-top-right-radius:.55rem;border-top-left-radius:.55rem}.really-simple-ssl-table tr:last-child{margin-bottom:0;border-bottom-right-radius:.55rem;border-bottom-left-radius:.55rem}.really-simple-ssl-table tr{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.debug-log{background-color:#fff;padding:15px;border:1px solid black}.rsssl-icons{width:15px;height:15px}.rsssl-update-count{margin-right:4px !important;display:inline-block;vertical-align:top;box-sizing:border-box;margin:1px 2px -1px 0;padding:0 5px;min-width:18px;height:18px;border-radius:9px;background-color:#ca4a1f;color:#fff;font-size:11px;line-height:1.6;text-align:center;z-index:26}[data-rsssl-tooltip],.rsssl-tooltip{position:relative;cursor:pointer}[data-rsssl-tooltip]:before,[data-rsssl-tooltip]:after,.rsssl-tooltip:before,.rsssl-tooltip:after{position:absolute;visibility:hidden;-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);opacity:0;-webkit-transition:opacity .2s ease-in-out,visibility .2s ease-in-out,-webkit-transform .2s cubic-bezier(0.71,1.7,0.77,1.24);-moz-transition:opacity .2s ease-in-out,visibility .2s ease-in-out,-moz-transform .2s cubic-bezier(0.71,1.7,0.77,1.24);transition:opacity .2s ease-in-out,visibility .2s ease-in-out,transform .2s cubic-bezier(0.71,1.7,0.77,1.24);-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);pointer-events:none}[data-rsssl-tooltip]:hover:before,[data-rsssl-tooltip]:hover:after,[data-rsssl-tooltip]:focus:before,[data-rsssl-tooltip]:focus:after,.rsssl-tooltip:hover:before,.rsssl-tooltip:hover:after,.rsssl-tooltip:focus:before,.rsssl-tooltip:focus:after{visibility:visible;-ms-filter:"alpha(opacity=100)";filter:alpha(opacity=100);opacity:1}.rsssl-tooltip:before,[data-rsssl-tooltip]:before{z-index:1001;border:6px solid transparent;background:transparent;content:""}.rsssl-tooltip:after,[data-rsssl-tooltip]:after{z-index:1000;padding:8px;width:160px;background-color:#000;background-color:hsla(0,0,20%,0.9);color:#fff;content:attr(data-rsssl-tooltip);font-size:14px;line-height:1.2}[data-rsssl-tooltip]:before,[data-rsssl-tooltip]:after,.rsssl-tooltip:before,.rsssl-tooltip:after,.rsssl-tooltip-top:before,.rsssl-tooltip-top:after{bottom:100%;right:50%}[data-rsssl-tooltip]:before,.rsssl-tooltip:before,.rsssl-tooltip-top:before{margin-right:-6px;margin-bottom:-12px;border-top-color:#000;border-top-color:hsla(0,0,20%,0.9)}[data-rsssl-tooltip]:after,.rsssl-tooltip:after,.rsssl-tooltip-top:after{margin-right:-80px}[data-rsssl-tooltip]:hover:before,[data-rsssl-tooltip]:hover:after,[data-rsssl-tooltip]:focus:before,[data-rsssl-tooltip]:focus:after,.rsssl-tooltip:hover:before,.rsssl-tooltip:hover:after,.rsssl-tooltip:focus:before,.rsssl-tooltip:focus:after,.rsssl-tooltip-top:hover:before,.rsssl-tooltip-top:hover:after,.rsssl-tooltip-top:focus:before,.rsssl-tooltip-top:focus:after{-webkit-transform:translateY(-12px);-moz-transform:translateY(-12px);transform:translateY(-12px)}.rsssl-tooltip-left:before,.rsssl-tooltip-left:after{left:100%;bottom:50%;right:auto}.rsssl-tooltip-left:before{margin-right:0;margin-left:-12px;margin-bottom:0;border-top-color:transparent;border-right-color:#000;border-right-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-left:hover:before,.rsssl-tooltip-left:hover:after,.rsssl-tooltip-left:focus:before,.rsssl-tooltip-left:focus:after{-webkit-transform:translateX(12px);-moz-transform:translateX(12px);transform:translateX(12px)}.rsssl-tooltip-bottom:before,.rsssl-tooltip-bottom:after{top:100%;bottom:auto;right:50%}.rsssl-tooltip-bottom:before{margin-top:-12px;margin-bottom:0;border-top-color:transparent;border-bottom-color:#000;border-bottom-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-bottom:hover:before,.rsssl-tooltip-bottom:hover:after,.rsssl-tooltip-bottom:focus:before,.rsssl-tooltip-bottom:focus:after{-webkit-transform:translateY(12px);-moz-transform:translateY(12px);transform:translateY(12px)}.rsssl-tooltip-right:before,.rsssl-tooltip-right:after{bottom:50%;right:100%}.rsssl-tooltip-right:before{margin-bottom:0;margin-right:-12px;border-top-color:transparent;border-left-color:#000;border-left-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-right:hover:before,.rsssl-tooltip-right:hover:after,.rsssl-tooltip-right:focus:before,.rsssl-tooltip-right:focus:after{-webkit-transform:translateX(-12px);-moz-transform:translateX(-12px);transform:translateX(-12px)}.rsssl-tooltip-left:before,.rsssl-tooltip-right:before{top:3px}.rsssl-tooltip-left:after,.rsssl-tooltip-right:after{margin-right:0;margin-bottom:-16px}.rsssl-really-simple-plugins-logo{background-color:#ececec;margin-right:-15px;margin-left:-15px}.rsssl-sidebar{width:240px;margin-top:20px;padding-right:15px;padding-left:15px;margin-left:15px;padding-bottom:15px;background-color:#ececec}.rsssl-sidebar-single-content-container{min-height:125px;padding-bottom:35px;margin-bottom:10px;background-color:#fff;width:100%;border-radius:3%}.rsssl-sidebar-single-content-container-pro{background-color:#fff;min-height:125px;padding-bottom:35px;margin-bottom:10px;width:100%;border-radius:3%}.rsssl-sidebar-title h3{font-size:.9em}.rsssl-sidebar-text-content-pro{font-weight:700;font-size:.8em;width:90%;margin:auto}.rsssl-sidebar-text-content{width:45%;padding-top:5px;padding-left:7px;font-weight:700;font-size:.8em;float:left;margin:10px auto}.rsssl-pro-image{height:30px;margin-top:6px}.rsssl-sidebar-image-pro{width:90%;margin:10px}.rsssl-sidebar-image{width:100px;float:right;padding:10px;height:100px}@media screen and (max-width:1024px) and (min-width:541px){.rsssl-main{width:100%}.rsssl-sidebar-title{text-align:center}.rsssl-container{flex-direction:column}.rsssl-sidebar{width:100%}.rsssl-really-simple-plugins-logo{width:40%}.rsssl-sidebar-single-content-container{background-color:#fff;width:40%;padding-right:25px;float:right;margin-left:25px}.rsssl-sidebar-single-content-container-pro{width:40%;padding-right:25px;margin:auto auto 25px}.rsssl-sidebar-um-text-content{width:40%}.rsssl-pro-image{display:none}}@media screen and (max-width:540px){.rsssl-main{width:100%}.rsssl-container{flex-direction:column}.rsssl-sidebar{display:grid;text-align:-webkit-center;width:70%}.rsssl-sidebar-um-text-content{width:45%}.rsssl-sidebar-single-content-container-pro{padding-bottom:10px}.rsssl-sidebar-single-content-container{padding-bottom:10px}}.rsssl-sidebar h4{font-size:14px;font-style:italic}.rsssl-wrapper{padding:30px}.rsssl-sidebar-list{font-size:.9em}#rsssl-premium-button-pro{display:inline-table;width:40%;text-align:center;float:left;font-size:inherit;height:25px;-webkit-border-radius:12px;-moz-border-radius:12px;border-radius:12px;border:0;background-color:#000;color:white;margin-left:5px}.rsssl-sidebar-content{float:right;padding-bottom:10px}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}.rsssl-container{display:flex}#rsssl-premium-button{display:inline-table;width:40%;text-align:center;float:left;font-size:inherit;height:25px;border-radius:12px;border:0;background-color:#000;color:white;margin-left:5px}.rsssl-more-info-button{border:0;border-radius:50px;clear:both;margin-top:10px}.rsssl-button-deactivate-keep-ssl{margin-left:15px}.rsssl-scan-completed .rsssl-scan-button{margin-top:17px}.rsssl-scan-button{float:right;margin-top:10px;margin-left:15px}.rsssl-switch{position:relative;display:inline-block;width:40px;height:21px}.rsssl-switch input{display:none}.rsssl-slider{position:absolute;cursor:pointer;top:0;right:0;left:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s}.rsssl-slider:before{position:absolute;content:"";height:15px;width:15px;right:4px;bottom:3px;background-color:white;-webkit-transition:.4s;transition:.4s}.rsssl-slider.rsssl-round{border-radius:20px}.rsssl-slider.rsssl-round:before{border-radius:50%}input:checked+.rsssl-slider{background-color:#2daae1}input:checked+.rsssl-slider:before{-webkit-transform:translateX(-17px);-ms-transform:translateX(-17px);transform:translateX(-17px)}input:disabled+.rsssl-slider{background-color:#b3e0f4}input:focus+.rsssl-slider{box-shadow:0 0 1px #2daae1}.debug-log{width:90%}.rsssl-dismiss-text{font-size:1em;color:#0073aa;margin-right:6px}.rsssl-dashboard-plusone{margin-right:8px}.rsssl-highlight{border-right:4px solid #46b450;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);background-image:none !important;-o-animation:fadeIt 5s ease-in-out;animation:fadeIt 5s ease-in-out}@-o-keyframes fadeIt{0{background-color:#fff}30%{background-color:#d6efd6}100%{background-color:inherit}}@keyframes fadeIt{0{background-color:#fff}30%{background-color:#d6efd6}100%{background-color:inherit}}.form-table th{padding-right:10px}.rsssl-dashboard-dismiss .close{all:initial}.rsssl-dashboard-dismiss span{font-size:1.5em;color:darkgrey;font-family:sans-serif}.rsssl-dashboard-dismiss span:hover{cursor:pointer;color:grey}
1
+ .rsssl-main{flex:1;width:80%;float:right}.rsssl-sidebar img{max-width:100%}.nav-tab-active{background:#fff}.really-simple-ssl-table{display:flex;flex-direction:column;max-width:1140px}.rsssl-table-td-main-content{width:100%}.really-simple-ssl-table tr:first-child{border-top-right-radius:.55rem;border-top-left-radius:.55rem}.really-simple-ssl-table tr:last-child{margin-bottom:0;border-bottom-right-radius:.55rem;border-bottom-left-radius:.55rem}.really-simple-ssl-table tr{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.debug-log{background-color:#fff;padding:15px;border:1px solid black}.rsssl-icons{width:15px;height:15px}.rsssl-update-count{margin-right:4px !important;display:inline-block;vertical-align:top;box-sizing:border-box;margin:1px 2px -1px 0;padding:0 5px;min-width:18px;height:18px;border-radius:9px;background-color:#ca4a1f;color:#fff;font-size:11px;line-height:1.6;text-align:center;z-index:26}[data-rsssl-tooltip],.rsssl-tooltip{position:relative;cursor:pointer}[data-rsssl-tooltip]:before,[data-rsssl-tooltip]:after,.rsssl-tooltip:before,.rsssl-tooltip:after{position:absolute;visibility:hidden;-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);opacity:0;-webkit-transition:opacity .2s ease-in-out,visibility .2s ease-in-out,-webkit-transform .2s cubic-bezier(0.71,1.7,0.77,1.24);-moz-transition:opacity .2s ease-in-out,visibility .2s ease-in-out,-moz-transform .2s cubic-bezier(0.71,1.7,0.77,1.24);transition:opacity .2s ease-in-out,visibility .2s ease-in-out,transform .2s cubic-bezier(0.71,1.7,0.77,1.24);-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);pointer-events:none}[data-rsssl-tooltip]:hover:before,[data-rsssl-tooltip]:hover:after,[data-rsssl-tooltip]:focus:before,[data-rsssl-tooltip]:focus:after,.rsssl-tooltip:hover:before,.rsssl-tooltip:hover:after,.rsssl-tooltip:focus:before,.rsssl-tooltip:focus:after{visibility:visible;-ms-filter:"alpha(opacity=100)";filter:alpha(opacity=100);opacity:1}.rsssl-tooltip:before,[data-rsssl-tooltip]:before{z-index:1001;border:6px solid transparent;background:transparent;content:""}.rsssl-tooltip:after,[data-rsssl-tooltip]:after{z-index:1000;padding:8px;width:160px;background-color:#000;background-color:hsla(0,0,20%,0.9);color:#fff;content:attr(data-rsssl-tooltip);font-size:14px;line-height:1.2}[data-rsssl-tooltip]:before,[data-rsssl-tooltip]:after,.rsssl-tooltip:before,.rsssl-tooltip:after,.rsssl-tooltip-top:before,.rsssl-tooltip-top:after{bottom:100%;right:50%}[data-rsssl-tooltip]:before,.rsssl-tooltip:before,.rsssl-tooltip-top:before{margin-right:-6px;margin-bottom:-12px;border-top-color:#000;border-top-color:hsla(0,0,20%,0.9)}[data-rsssl-tooltip]:after,.rsssl-tooltip:after,.rsssl-tooltip-top:after{margin-right:-80px}[data-rsssl-tooltip]:hover:before,[data-rsssl-tooltip]:hover:after,[data-rsssl-tooltip]:focus:before,[data-rsssl-tooltip]:focus:after,.rsssl-tooltip:hover:before,.rsssl-tooltip:hover:after,.rsssl-tooltip:focus:before,.rsssl-tooltip:focus:after,.rsssl-tooltip-top:hover:before,.rsssl-tooltip-top:hover:after,.rsssl-tooltip-top:focus:before,.rsssl-tooltip-top:focus:after{-webkit-transform:translateY(-12px);-moz-transform:translateY(-12px);transform:translateY(-12px)}.rsssl-tooltip-left:before,.rsssl-tooltip-left:after{left:100%;bottom:50%;right:auto}.rsssl-tooltip-left:before{margin-right:0;margin-left:-12px;margin-bottom:0;border-top-color:transparent;border-right-color:#000;border-right-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-left:hover:before,.rsssl-tooltip-left:hover:after,.rsssl-tooltip-left:focus:before,.rsssl-tooltip-left:focus:after{-webkit-transform:translateX(12px);-moz-transform:translateX(12px);transform:translateX(12px)}.rsssl-tooltip-bottom:before,.rsssl-tooltip-bottom:after{top:100%;bottom:auto;right:50%}.rsssl-tooltip-bottom:before{margin-top:-12px;margin-bottom:0;border-top-color:transparent;border-bottom-color:#000;border-bottom-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-bottom:hover:before,.rsssl-tooltip-bottom:hover:after,.rsssl-tooltip-bottom:focus:before,.rsssl-tooltip-bottom:focus:after{-webkit-transform:translateY(12px);-moz-transform:translateY(12px);transform:translateY(12px)}.rsssl-tooltip-right:before,.rsssl-tooltip-right:after{bottom:50%;right:100%}.rsssl-tooltip-right:before{margin-bottom:0;margin-right:-12px;border-top-color:transparent;border-left-color:#000;border-left-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-right:hover:before,.rsssl-tooltip-right:hover:after,.rsssl-tooltip-right:focus:before,.rsssl-tooltip-right:focus:after{-webkit-transform:translateX(-12px);-moz-transform:translateX(-12px);transform:translateX(-12px)}.rsssl-tooltip-left:before,.rsssl-tooltip-right:before{top:3px}.rsssl-tooltip-left:after,.rsssl-tooltip-right:after{margin-right:0;margin-bottom:-66px}.rsssl-really-simple-plugins-logo{background-color:#ececec;margin-right:-15px;margin-left:-15px}.rsssl-sidebar{width:240px;margin-top:20px;padding-right:15px;padding-left:15px;margin-left:15px;padding-bottom:15px;background-color:#ececec}.rsssl-sidebar-single-content-container{min-height:125px;padding-bottom:35px;margin-bottom:10px;background-color:#fff;width:100%;border-radius:3%}.rsssl-sidebar-single-content-container-pro{background-color:#fff;min-height:125px;padding-bottom:35px;margin-bottom:10px;width:100%;border-radius:3%}.rsssl-sidebar-title h3{font-size:.9em}.rsssl-sidebar-text-content-pro{font-weight:700;font-size:.8em;width:90%;margin:auto}.rsssl-sidebar-text-content{width:45%;padding-top:5px;padding-left:7px;font-weight:700;font-size:.8em;float:left;margin:10px auto}.rsssl-pro-image{height:30px;margin-top:6px}.rsssl-sidebar-image-pro{width:90%;margin:10px}.rsssl-sidebar-image{width:100px;float:right;padding:10px;height:100px}@media screen and (max-width:1024px) and (min-width:541px){.rsssl-main{width:100%}.rsssl-sidebar-title{text-align:center}.rsssl-container{flex-direction:column}.rsssl-sidebar{width:100%}.rsssl-really-simple-plugins-logo{width:40%}.rsssl-sidebar-single-content-container{background-color:#fff;width:40%;padding-right:25px;float:right;margin-left:25px}.rsssl-sidebar-single-content-container-pro{width:40%;padding-right:25px;margin:auto auto 25px}.rsssl-sidebar-um-text-content{width:40%}.rsssl-pro-image{display:none}}@media screen and (max-width:540px){.rsssl-main{width:100%}.rsssl-container{flex-direction:column}.rsssl-sidebar{display:grid;text-align:-webkit-center;width:70%}.rsssl-sidebar-um-text-content{width:45%}.rsssl-sidebar-single-content-container-pro{padding-bottom:10px}.rsssl-sidebar-single-content-container{padding-bottom:10px}}.rsssl-sidebar h4{font-size:14px;font-style:italic}.rsssl-wrapper{padding:30px}.rsssl-sidebar-list{font-size:.9em}#rsssl-premium-button-pro{display:inline-table;width:40%;text-align:center;float:left;font-size:inherit;height:25px;-webkit-border-radius:12px;-moz-border-radius:12px;border-radius:12px;border:0;background-color:#000;color:white;margin-left:5px}.rsssl-sidebar-content{float:right;padding-bottom:10px}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}.rsssl-container{display:flex}#rsssl-premium-button{display:inline-table;width:40%;text-align:center;float:left;font-size:inherit;height:25px;border-radius:12px;border:0;background-color:#000;color:white;margin-left:5px}.rsssl-more-info-button{border:0;border-radius:50px;clear:both;margin-top:10px}.rsssl-button-deactivate-keep-ssl{margin-left:15px}.rsssl-switch{position:relative;display:inline-block;width:40px;height:21px}.rsssl-switch input{display:none}.rsssl-slider{position:absolute;cursor:pointer;top:0;right:0;left:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s}.rsssl-slider:before{position:absolute;content:"";height:15px;width:15px;right:4px;bottom:3px;background-color:white;-webkit-transition:.4s;transition:.4s}.rsssl-slider.rsssl-round{border-radius:20px}.rsssl-slider.rsssl-round:before{border-radius:50%}input:checked+.rsssl-slider{background-color:#2daae1}input:checked+.rsssl-slider:before{-webkit-transform:translateX(-17px);-ms-transform:translateX(-17px);transform:translateX(-17px)}input:disabled+.rsssl-slider{background-color:#b3e0f4}input:focus+.rsssl-slider{box-shadow:0 0 1px #2daae1}.debug-log{width:90%}.rsssl-dismiss-text{font-size:1em;color:#0073aa;margin-right:6px}.rsssl-dashboard-plusone{margin-right:8px}.rsssl-highlight{border-right:4px solid #46b450;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);background-image:none !important;-o-animation:fadeIt 5s ease-in-out;animation:fadeIt 5s ease-in-out}@-o-keyframes fadeIt{0{background-color:#fff}30%{background-color:#d6efd6}100%{background-color:inherit}}@keyframes fadeIt{0{background-color:#fff}30%{background-color:#d6efd6}100%{background-color:inherit}}.form-table th{padding-right:10px}.rsssl-dashboard-dismiss .close{all:initial}.rsssl-dashboard-dismiss span{font-size:1.5em;color:darkgrey;font-family:sans-serif}.rsssl-dashboard-dismiss span:hover{cursor:pointer;color:grey}
css/main.css CHANGED
@@ -1,59 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  .rsssl-main {
2
  flex: 1;
3
  width: 80%;
4
- float:left;
5
  }
6
-
7
  .rsssl-sidebar img {
8
- max-width:100%;
9
  /*height:inherit;*/
10
  }
11
-
12
- .nav-tab-active {
13
- background: #fff;
14
- }
15
-
16
  .really-simple-ssl-table {
17
  display: flex;
18
  flex-direction: column;
19
- max-width: 1140px;
20
  }
21
-
22
  .rsssl-table-td-main-content {
23
  width: 100%;
24
  }
25
-
26
  .really-simple-ssl-table tr:first-child {
27
- border-top-left-radius: .55rem;
28
- border-top-right-radius: .55rem;
29
  }
30
-
31
  .really-simple-ssl-table tr:last-child {
32
  margin-bottom: 0;
33
- border-bottom-left-radius: .55rem;
34
- border-bottom-right-radius: .55rem;
35
  }
36
-
37
  .really-simple-ssl-table tr {
38
  position: relative;
39
- display: block;
40
- padding: .75rem 1.25rem;
41
- margin-bottom: -1px;
42
  background-color: #fff;
43
- border: 1px solid rgba(0,0,0,.125);
44
  }
45
-
46
  .debug-log {
47
  background-color: #fff;
48
- padding:15px;
49
- border:1px solid black;
50
  }
51
-
52
  .rsssl-icons {
53
- width:15px;
54
- height:15px;
55
  }
56
-
57
  .rsssl-update-count {
58
  margin-left: 4px !important;
59
  display: inline-block;
@@ -69,9 +105,8 @@
69
  font-size: 11px;
70
  line-height: 1.6;
71
  text-align: center;
72
- z-index: 26
73
  }
74
-
75
  /* rsssl-rsssl-tooltip for settings page */
76
  /* Base styles for the element that has a rsssl-tooltip */
77
  [data-rsssl-tooltip],
@@ -79,7 +114,6 @@
79
  position: relative;
80
  cursor: pointer;
81
  }
82
-
83
  /* Base styles for the entire tooltip */
84
  [data-rsssl-tooltip]:before,
85
  [data-rsssl-tooltip]:after,
@@ -90,24 +124,14 @@
90
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
91
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
92
  opacity: 0;
93
- -webkit-transition:
94
- opacity 0.2s ease-in-out,
95
- visibility 0.2s ease-in-out,
96
- -webkit-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
97
- -moz-transition:
98
- opacity 0.2s ease-in-out,
99
- visibility 0.2s ease-in-out,
100
- -moz-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
101
- transition:
102
- opacity 0.2s ease-in-out,
103
- visibility 0.2s ease-in-out,
104
- transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
105
  -webkit-transform: translate3d(0, 0, 0);
106
- -moz-transform: translate3d(0, 0, 0);
107
- transform: translate3d(0, 0, 0);
108
  pointer-events: none;
109
  }
110
-
111
  /* Show the entire rsssl-tooltip on hover and focus */
112
  [data-rsssl-tooltip]:hover:before,
113
  [data-rsssl-tooltip]:hover:after,
@@ -122,7 +146,6 @@
122
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
123
  opacity: 1;
124
  }
125
-
126
  /* Base styles for the rsssl-tooltip's directional arrow */
127
  .rsssl-tooltip:before,
128
  [data-rsssl-tooltip]:before {
@@ -131,13 +154,12 @@
131
  background: transparent;
132
  content: "";
133
  }
134
-
135
  /* Base styles for the rsssl-tooltip's content area */
136
  .rsssl-tooltip:after,
137
  [data-rsssl-tooltip]:after {
138
  z-index: 1000;
139
  padding: 8px;
140
- width: 160px;
141
  background-color: #000;
142
  background-color: hsla(0, 0%, 20%, 0.9);
143
  color: #fff;
@@ -145,10 +167,11 @@
145
  font-size: 14px;
146
  line-height: 1.2;
147
  }
148
-
149
  /* Directions */
150
-
151
  /* Top (default) */
 
 
 
152
  [data-rsssl-tooltip]:before,
153
  [data-rsssl-tooltip]:after,
154
  .rsssl-tooltip:before,
@@ -158,7 +181,6 @@
158
  bottom: 100%;
159
  left: 50%;
160
  }
161
-
162
  [data-rsssl-tooltip]:before,
163
  .rsssl-tooltip:before,
164
  .rsssl-tooltip-top:before {
@@ -167,14 +189,12 @@
167
  border-top-color: #000;
168
  border-top-color: hsla(0, 0%, 20%, 0.9);
169
  }
170
-
171
  /* Horizontally align top/bottom rsssl-tooltips */
172
  [data-rsssl-tooltip]:after,
173
  .rsssl-tooltip:after,
174
  .rsssl-tooltip-top:after {
175
  margin-left: -80px;
176
  }
177
-
178
  [data-rsssl-tooltip]:hover:before,
179
  [data-rsssl-tooltip]:hover:after,
180
  [data-rsssl-tooltip]:focus:before,
@@ -188,18 +208,16 @@
188
  .rsssl-tooltip-top:focus:before,
189
  .rsssl-tooltip-top:focus:after {
190
  -webkit-transform: translateY(-12px);
191
- -moz-transform: translateY(-12px);
192
- transform: translateY(-12px);
193
  }
194
-
195
  /* Left */
196
  .rsssl-tooltip-left:before,
197
  .rsssl-tooltip-left:after {
198
  right: 100%;
199
- bottom: 50%;
200
  left: auto;
201
  }
202
-
203
  .rsssl-tooltip-left:before {
204
  margin-left: 0;
205
  margin-right: -12px;
@@ -208,16 +226,14 @@
208
  border-left-color: #000;
209
  border-left-color: hsla(0, 0%, 20%, 0.9);
210
  }
211
-
212
  .rsssl-tooltip-left:hover:before,
213
  .rsssl-tooltip-left:hover:after,
214
  .rsssl-tooltip-left:focus:before,
215
  .rsssl-tooltip-left:focus:after {
216
  -webkit-transform: translateX(-12px);
217
- -moz-transform: translateX(-12px);
218
- transform: translateX(-12px);
219
  }
220
-
221
  /* Bottom */
222
  .rsssl-tooltip-bottom:before,
223
  .rsssl-tooltip-bottom:after {
@@ -225,7 +241,6 @@
225
  bottom: auto;
226
  left: 50%;
227
  }
228
-
229
  .rsssl-tooltip-bottom:before {
230
  margin-top: -12px;
231
  margin-bottom: 0;
@@ -233,23 +248,20 @@
233
  border-bottom-color: #000;
234
  border-bottom-color: hsla(0, 0%, 20%, 0.9);
235
  }
236
-
237
  .rsssl-tooltip-bottom:hover:before,
238
  .rsssl-tooltip-bottom:hover:after,
239
  .rsssl-tooltip-bottom:focus:before,
240
  .rsssl-tooltip-bottom:focus:after {
241
  -webkit-transform: translateY(12px);
242
- -moz-transform: translateY(12px);
243
- transform: translateY(12px);
244
  }
245
-
246
  /* Right */
247
  .rsssl-tooltip-right:before,
248
  .rsssl-tooltip-right:after {
249
  bottom: 50%;
250
  left: 100%;
251
  }
252
-
253
  .rsssl-tooltip-right:before {
254
  margin-bottom: 0;
255
  margin-left: -12px;
@@ -257,37 +269,31 @@
257
  border-right-color: #000;
258
  border-right-color: hsla(0, 0%, 20%, 0.9);
259
  }
260
-
261
  .rsssl-tooltip-right:hover:before,
262
  .rsssl-tooltip-right:hover:after,
263
  .rsssl-tooltip-right:focus:before,
264
  .rsssl-tooltip-right:focus:after {
265
  -webkit-transform: translateX(12px);
266
- -moz-transform: translateX(12px);
267
- transform: translateX(12px);
268
  }
269
-
270
  /* Move directional arrows down a bit for left/right rsssl-tooltips */
271
  .rsssl-tooltip-left:before,
272
  .rsssl-tooltip-right:before {
273
  top: 3px;
274
  }
275
-
276
  /* Vertically center rsssl-tooltip content for left/right rsssl-tooltips */
277
  .rsssl-tooltip-left:after,
278
  .rsssl-tooltip-right:after {
279
  margin-left: 0;
280
- margin-bottom: -16px;
281
  }
282
-
283
  /* Styling for the sidebar in the admin tab of the free plugin */
284
-
285
  .rsssl-really-simple-plugins-logo {
286
  background-color: #ececec;
287
  margin-left: -15px;
288
  margin-right: -15px;
289
  }
290
-
291
  .rsssl-sidebar {
292
  width: 240px;
293
  margin-top: 20px;
@@ -297,7 +303,6 @@
297
  padding-bottom: 15px;
298
  background-color: #ECECEC;
299
  }
300
-
301
  .rsssl-sidebar-single-content-container {
302
  min-height: 125px;
303
  padding-bottom: 35px;
@@ -306,7 +311,6 @@
306
  width: 100%;
307
  border-radius: 3%;
308
  }
309
-
310
  .rsssl-sidebar-single-content-container-pro {
311
  background-color: #fff;
312
  min-height: 125px;
@@ -315,11 +319,9 @@
315
  width: 100%;
316
  border-radius: 3%;
317
  }
318
-
319
  .rsssl-sidebar-title h3 {
320
  font-size: 0.9em;
321
  }
322
-
323
  .rsssl-sidebar-text-content-pro {
324
  font-weight: 700;
325
  font-size: 0.8em;
@@ -327,7 +329,6 @@
327
  /*min-height: 100px;*/
328
  margin: auto;
329
  }
330
-
331
  .rsssl-sidebar-text-content {
332
  width: 45%;
333
  padding-top: 5px;
@@ -337,35 +338,29 @@
337
  float: right;
338
  margin: 10px auto;
339
  }
340
-
341
  .rsssl-pro-image {
342
  height: 30px;
343
  margin-top: 6px;
344
  }
345
-
346
  .rsssl-sidebar-image-pro {
347
  width: 90%;
348
  margin: 10px;
349
  }
350
-
351
  .rsssl-sidebar-image {
352
  width: 100px;
353
  float: left;
354
  padding: 10px;
355
  height: 100px;
356
  }
357
-
358
  @media screen and (max-width: 1024px) and (min-width: 541px) {
359
  /* Let the main container be 100% width again */
360
  .rsssl-main {
361
  width: 100%;
362
  }
363
-
364
  .rsssl-sidebar-title {
365
  /*margin: auto;*/
366
  text-align: center;
367
  }
368
-
369
  .rsssl-container {
370
  flex-direction: column;
371
  }
@@ -374,8 +369,8 @@
374
  /*padding-left: 10%;*/
375
  }
376
  .rsssl-really-simple-plugins-logo {
377
- width: 40%;
378
- }
379
  .rsssl-sidebar-single-content-container {
380
  background-color: #fff;
381
  width: 40%;
@@ -383,13 +378,11 @@
383
  float: left;
384
  margin-right: 25px;
385
  }
386
-
387
  .rsssl-sidebar-single-content-container-pro {
388
  width: 40%;
389
  padding-left: 25px;
390
  margin: auto auto 25px;
391
  }
392
-
393
  .rsssl-sidebar-um-text-content {
394
  width: 40%;
395
  }
@@ -397,7 +390,6 @@
397
  display: none;
398
  }
399
  }
400
-
401
  @media screen and (max-width: 540px) {
402
  .rsssl-main {
403
  width: 100%;
@@ -406,34 +398,30 @@
406
  flex-direction: column;
407
  }
408
  .rsssl-sidebar {
409
- display: grid;
410
- text-align: -webkit-center;
411
- width: 70%;
412
  }
413
  .rsssl-sidebar-um-text-content {
414
  width: 45%;
415
  }
416
- .rsssl-sidebar-single-content-container-pro {
417
- padding-bottom: 10px;
418
- }
419
  .rsssl-sidebar-single-content-container {
420
  padding-bottom: 10px;
421
  }
422
  }
423
-
424
  .rsssl-sidebar h4 {
425
- font-size:14px;
426
- font-style:italic;
427
  }
428
-
429
  .rsssl-wrapper {
430
  padding: 30px;
431
  }
432
-
433
  .rsssl-sidebar-list {
434
  font-size: 0.9em;
435
  }
436
-
437
  #rsssl-premium-button-pro {
438
  display: inline-table;
439
  width: 40%;
@@ -449,12 +437,10 @@
449
  color: white;
450
  margin-right: 5px;
451
  }
452
-
453
  .rsssl-sidebar-content {
454
  float: left;
455
  padding-bottom: 10px;
456
  }
457
-
458
  hr {
459
  display: block;
460
  height: 1px;
@@ -463,11 +449,9 @@ hr {
463
  margin: 1em 0;
464
  padding: 0;
465
  }
466
-
467
  .rsssl-container {
468
  display: flex;
469
  }
470
-
471
  #rsssl-premium-button {
472
  display: inline-table;
473
  width: 40%;
@@ -481,18 +465,12 @@ hr {
481
  color: white;
482
  margin-right: 5px;
483
  }
484
-
485
  .rsssl-more-info-button {
486
  border: none;
487
  border-radius: 50px;
488
  clear: both;
489
  margin-top: 10px;
490
  }
491
-
492
- .rsssl-button-deactivate-keep-ssl {
493
- margin-right: 15px;
494
- }
495
-
496
  /*
497
  cool checkbox sliders
498
  */
@@ -513,8 +491,8 @@ hr {
513
  right: 0;
514
  bottom: 0;
515
  background-color: #ccc;
516
- -webkit-transition: .4s;
517
- transition: .4s;
518
  }
519
  .rsssl-slider:before {
520
  position: absolute;
@@ -524,8 +502,8 @@ hr {
524
  left: 4px;
525
  bottom: 3px;
526
  background-color: white;
527
- -webkit-transition: .4s;
528
- transition: .4s;
529
  }
530
  .rsssl-slider.rsssl-round {
531
  border-radius: 20px;
@@ -547,54 +525,92 @@ input:disabled + .rsssl-slider {
547
  input:focus + .rsssl-slider {
548
  box-shadow: 0 0 1px #2DAAE1;
549
  }
550
-
551
  .debug-log {
552
  width: 90%;
553
  }
554
-
555
- .rsssl-dismiss-text {
556
- font-size: 1em;
557
- color: #0073aa;
558
- margin-left: 6px;
559
- }
560
-
561
  .rsssl-dashboard-plusone {
562
  margin-left: 8px;
563
  }
564
-
565
  .rsssl-highlight {
566
- border-left: 4px solid #46B450;
567
- box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
568
- background-image:none !important;
569
  -o-animation: fadeIt 5s ease-in-out;
570
- animation: fadeIt 5s ease-in-out;}
571
-
572
  @-o-keyframes fadeIt {
573
- 0% { background-color: #FFFFFF; }
574
- 30% { background-color: #d6efd6; }
575
- 100% { background-color: inherit; }
 
 
 
 
 
 
 
576
  }
577
  @keyframes fadeIt {
578
- 0% { background-color: #FFFFFF; }
579
- 30% { background-color: #d6efd6; }
580
- 100% { background-color: inherit; }
 
 
 
 
 
 
 
581
  }
582
-
583
  .form-table th {
584
  padding-left: 10px;
585
  }
586
-
587
  .rsssl-dashboard-dismiss .close {
588
  all: initial;
589
  }
590
-
591
  .rsssl-dashboard-dismiss span {
592
  font-size: 1.5em;
593
- color: darkgrey;
594
  font-family: sans-serif;
595
  }
596
-
597
  .rsssl-dashboard-dismiss span:hover {
598
  cursor: pointer;
599
  color: grey;
600
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Hide nags from other plugins
3
+ */
4
+ .error:not(.really-simple-plugins),
5
+ .notice:not(.really-simple-plugins),
6
+ .update-nag:not(.really-simple-plugins),
7
+ .notice-info:not(.really-simple-plugins) {
8
+ display: none !important;
9
+ }
10
+ .rsssl-spacer {
11
+ width: 10px;
12
+ }
13
+ /* comments on settings pages */
14
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr.rsssl-comment-text {
15
+ color: #888;
16
+ font-size: 13px;
17
+ font-weight: normal;
18
+ font-style: italic;
19
+ padding-bottom: 0 !important;
20
+ margin-top: 0 !important;
21
+ width: 250px;
22
+ }
23
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr.rsssl-comment-text td {
24
+ padding-top: 0!important;
25
+ }
26
+ .rsssl-networksettings-overlay {
27
+ position: absolute;
28
+ top: 0;
29
+ left: 0;
30
+ bottom: 0;
31
+ right: 0;
32
+ background: rgba(255, 255, 255, 0.8);
33
+ }
34
+ .rsssl-networksettings-overlay .rsssl-disabled-settings-overlay {
35
+ position: absolute;
36
+ width: calc(100% - 65px);
37
+ bottom: 0;
38
+ background-color: #fff;
39
+ padding: 20px;
40
+ margin: 12px;
41
+ box-shadow: 0 0 5px 5px rgba(223, 222, 222, 0.4);
42
+ }
43
+ .rsssl-networksettings-overlay .rsssl-disabled-settings-overlay .rsssl-open {
44
+ float: left;
45
+ margin-right: 12px;
46
+ }
47
+ /* Hide review on own settings page */
48
+ #rsssl_do_activate_ssl {
49
+ margin-right: 10px;
50
+ }
51
+ .rlrsssl-review {
52
+ display: none;
53
+ }
54
  .rsssl-main {
55
  flex: 1;
56
  width: 80%;
57
+ float: left;
58
  }
 
59
  .rsssl-sidebar img {
60
+ max-width: 100%;
61
  /*height:inherit;*/
62
  }
 
 
 
 
 
63
  .really-simple-ssl-table {
64
  display: flex;
65
  flex-direction: column;
 
66
  }
 
67
  .rsssl-table-td-main-content {
68
  width: 100%;
69
  }
 
70
  .really-simple-ssl-table tr:first-child {
71
+ border-top-left-radius: 0.55rem;
72
+ border-top-right-radius: 0.55rem;
73
  }
 
74
  .really-simple-ssl-table tr:last-child {
75
  margin-bottom: 0;
76
+ border-bottom-left-radius: 0.55rem;
77
+ border-bottom-right-radius: 0.55rem;
78
  }
 
79
  .really-simple-ssl-table tr {
80
  position: relative;
81
+ padding-left: 5px;
82
+ padding-top: 10px;
 
83
  background-color: #fff;
 
84
  }
 
85
  .debug-log {
86
  background-color: #fff;
87
+ padding: 15px;
 
88
  }
 
89
  .rsssl-icons {
90
+ width: 15px;
91
+ height: 15px;
92
  }
 
93
  .rsssl-update-count {
94
  margin-left: 4px !important;
95
  display: inline-block;
105
  font-size: 11px;
106
  line-height: 1.6;
107
  text-align: center;
108
+ z-index: 26;
109
  }
 
110
  /* rsssl-rsssl-tooltip for settings page */
111
  /* Base styles for the element that has a rsssl-tooltip */
112
  [data-rsssl-tooltip],
114
  position: relative;
115
  cursor: pointer;
116
  }
 
117
  /* Base styles for the entire tooltip */
118
  [data-rsssl-tooltip]:before,
119
  [data-rsssl-tooltip]:after,
124
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
125
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
126
  opacity: 0;
127
+ -webkit-transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, -webkit-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
128
+ -moz-transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, -moz-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
129
+ transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out, transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
 
 
 
 
 
 
 
 
 
130
  -webkit-transform: translate3d(0, 0, 0);
131
+ -moz-transform: translate3d(0, 0, 0);
132
+ transform: translate3d(0, 0, 0);
133
  pointer-events: none;
134
  }
 
135
  /* Show the entire rsssl-tooltip on hover and focus */
136
  [data-rsssl-tooltip]:hover:before,
137
  [data-rsssl-tooltip]:hover:after,
146
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
147
  opacity: 1;
148
  }
 
149
  /* Base styles for the rsssl-tooltip's directional arrow */
150
  .rsssl-tooltip:before,
151
  [data-rsssl-tooltip]:before {
154
  background: transparent;
155
  content: "";
156
  }
 
157
  /* Base styles for the rsssl-tooltip's content area */
158
  .rsssl-tooltip:after,
159
  [data-rsssl-tooltip]:after {
160
  z-index: 1000;
161
  padding: 8px;
162
+ width: 220px;
163
  background-color: #000;
164
  background-color: hsla(0, 0%, 20%, 0.9);
165
  color: #fff;
167
  font-size: 14px;
168
  line-height: 1.2;
169
  }
 
170
  /* Directions */
 
171
  /* Top (default) */
172
+ .rsssl-tooltip-right {
173
+ font-weight: normal;
174
+ }
175
  [data-rsssl-tooltip]:before,
176
  [data-rsssl-tooltip]:after,
177
  .rsssl-tooltip:before,
181
  bottom: 100%;
182
  left: 50%;
183
  }
 
184
  [data-rsssl-tooltip]:before,
185
  .rsssl-tooltip:before,
186
  .rsssl-tooltip-top:before {
189
  border-top-color: #000;
190
  border-top-color: hsla(0, 0%, 20%, 0.9);
191
  }
 
192
  /* Horizontally align top/bottom rsssl-tooltips */
193
  [data-rsssl-tooltip]:after,
194
  .rsssl-tooltip:after,
195
  .rsssl-tooltip-top:after {
196
  margin-left: -80px;
197
  }
 
198
  [data-rsssl-tooltip]:hover:before,
199
  [data-rsssl-tooltip]:hover:after,
200
  [data-rsssl-tooltip]:focus:before,
208
  .rsssl-tooltip-top:focus:before,
209
  .rsssl-tooltip-top:focus:after {
210
  -webkit-transform: translateY(-12px);
211
+ -moz-transform: translateY(-12px);
212
+ transform: translateY(-12px);
213
  }
 
214
  /* Left */
215
  .rsssl-tooltip-left:before,
216
  .rsssl-tooltip-left:after {
217
  right: 100%;
218
+ /*bottom: 50%;*/
219
  left: auto;
220
  }
 
221
  .rsssl-tooltip-left:before {
222
  margin-left: 0;
223
  margin-right: -12px;
226
  border-left-color: #000;
227
  border-left-color: hsla(0, 0%, 20%, 0.9);
228
  }
 
229
  .rsssl-tooltip-left:hover:before,
230
  .rsssl-tooltip-left:hover:after,
231
  .rsssl-tooltip-left:focus:before,
232
  .rsssl-tooltip-left:focus:after {
233
  -webkit-transform: translateX(-12px);
234
+ -moz-transform: translateX(-12px);
235
+ transform: translateX(-12px);
236
  }
 
237
  /* Bottom */
238
  .rsssl-tooltip-bottom:before,
239
  .rsssl-tooltip-bottom:after {
241
  bottom: auto;
242
  left: 50%;
243
  }
 
244
  .rsssl-tooltip-bottom:before {
245
  margin-top: -12px;
246
  margin-bottom: 0;
248
  border-bottom-color: #000;
249
  border-bottom-color: hsla(0, 0%, 20%, 0.9);
250
  }
 
251
  .rsssl-tooltip-bottom:hover:before,
252
  .rsssl-tooltip-bottom:hover:after,
253
  .rsssl-tooltip-bottom:focus:before,
254
  .rsssl-tooltip-bottom:focus:after {
255
  -webkit-transform: translateY(12px);
256
+ -moz-transform: translateY(12px);
257
+ transform: translateY(12px);
258
  }
 
259
  /* Right */
260
  .rsssl-tooltip-right:before,
261
  .rsssl-tooltip-right:after {
262
  bottom: 50%;
263
  left: 100%;
264
  }
 
265
  .rsssl-tooltip-right:before {
266
  margin-bottom: 0;
267
  margin-left: -12px;
269
  border-right-color: #000;
270
  border-right-color: hsla(0, 0%, 20%, 0.9);
271
  }
 
272
  .rsssl-tooltip-right:hover:before,
273
  .rsssl-tooltip-right:hover:after,
274
  .rsssl-tooltip-right:focus:before,
275
  .rsssl-tooltip-right:focus:after {
276
  -webkit-transform: translateX(12px);
277
+ -moz-transform: translateX(12px);
278
+ transform: translateX(12px);
279
  }
 
280
  /* Move directional arrows down a bit for left/right rsssl-tooltips */
281
  .rsssl-tooltip-left:before,
282
  .rsssl-tooltip-right:before {
283
  top: 3px;
284
  }
 
285
  /* Vertically center rsssl-tooltip content for left/right rsssl-tooltips */
286
  .rsssl-tooltip-left:after,
287
  .rsssl-tooltip-right:after {
288
  margin-left: 0;
289
+ margin-bottom: -25px;
290
  }
 
291
  /* Styling for the sidebar in the admin tab of the free plugin */
 
292
  .rsssl-really-simple-plugins-logo {
293
  background-color: #ececec;
294
  margin-left: -15px;
295
  margin-right: -15px;
296
  }
 
297
  .rsssl-sidebar {
298
  width: 240px;
299
  margin-top: 20px;
303
  padding-bottom: 15px;
304
  background-color: #ECECEC;
305
  }
 
306
  .rsssl-sidebar-single-content-container {
307
  min-height: 125px;
308
  padding-bottom: 35px;
311
  width: 100%;
312
  border-radius: 3%;
313
  }
 
314
  .rsssl-sidebar-single-content-container-pro {
315
  background-color: #fff;
316
  min-height: 125px;
319
  width: 100%;
320
  border-radius: 3%;
321
  }
 
322
  .rsssl-sidebar-title h3 {
323
  font-size: 0.9em;
324
  }
 
325
  .rsssl-sidebar-text-content-pro {
326
  font-weight: 700;
327
  font-size: 0.8em;
329
  /*min-height: 100px;*/
330
  margin: auto;
331
  }
 
332
  .rsssl-sidebar-text-content {
333
  width: 45%;
334
  padding-top: 5px;
338
  float: right;
339
  margin: 10px auto;
340
  }
 
341
  .rsssl-pro-image {
342
  height: 30px;
343
  margin-top: 6px;
344
  }
 
345
  .rsssl-sidebar-image-pro {
346
  width: 90%;
347
  margin: 10px;
348
  }
 
349
  .rsssl-sidebar-image {
350
  width: 100px;
351
  float: left;
352
  padding: 10px;
353
  height: 100px;
354
  }
 
355
  @media screen and (max-width: 1024px) and (min-width: 541px) {
356
  /* Let the main container be 100% width again */
357
  .rsssl-main {
358
  width: 100%;
359
  }
 
360
  .rsssl-sidebar-title {
361
  /*margin: auto;*/
362
  text-align: center;
363
  }
 
364
  .rsssl-container {
365
  flex-direction: column;
366
  }
369
  /*padding-left: 10%;*/
370
  }
371
  .rsssl-really-simple-plugins-logo {
372
+ width: 40%;
373
+ }
374
  .rsssl-sidebar-single-content-container {
375
  background-color: #fff;
376
  width: 40%;
378
  float: left;
379
  margin-right: 25px;
380
  }
 
381
  .rsssl-sidebar-single-content-container-pro {
382
  width: 40%;
383
  padding-left: 25px;
384
  margin: auto auto 25px;
385
  }
 
386
  .rsssl-sidebar-um-text-content {
387
  width: 40%;
388
  }
390
  display: none;
391
  }
392
  }
 
393
  @media screen and (max-width: 540px) {
394
  .rsssl-main {
395
  width: 100%;
398
  flex-direction: column;
399
  }
400
  .rsssl-sidebar {
401
+ display: grid;
402
+ text-align: -webkit-center;
403
+ width: 70%;
404
  }
405
  .rsssl-sidebar-um-text-content {
406
  width: 45%;
407
  }
408
+ .rsssl-sidebar-single-content-container-pro {
409
+ padding-bottom: 10px;
410
+ }
411
  .rsssl-sidebar-single-content-container {
412
  padding-bottom: 10px;
413
  }
414
  }
 
415
  .rsssl-sidebar h4 {
416
+ font-size: 14px;
417
+ font-style: italic;
418
  }
 
419
  .rsssl-wrapper {
420
  padding: 30px;
421
  }
 
422
  .rsssl-sidebar-list {
423
  font-size: 0.9em;
424
  }
 
425
  #rsssl-premium-button-pro {
426
  display: inline-table;
427
  width: 40%;
437
  color: white;
438
  margin-right: 5px;
439
  }
 
440
  .rsssl-sidebar-content {
441
  float: left;
442
  padding-bottom: 10px;
443
  }
 
444
  hr {
445
  display: block;
446
  height: 1px;
449
  margin: 1em 0;
450
  padding: 0;
451
  }
 
452
  .rsssl-container {
453
  display: flex;
454
  }
 
455
  #rsssl-premium-button {
456
  display: inline-table;
457
  width: 40%;
465
  color: white;
466
  margin-right: 5px;
467
  }
 
468
  .rsssl-more-info-button {
469
  border: none;
470
  border-radius: 50px;
471
  clear: both;
472
  margin-top: 10px;
473
  }
 
 
 
 
 
474
  /*
475
  cool checkbox sliders
476
  */
491
  right: 0;
492
  bottom: 0;
493
  background-color: #ccc;
494
+ -webkit-transition: 0.4s;
495
+ transition: 0.4s;
496
  }
497
  .rsssl-slider:before {
498
  position: absolute;
502
  left: 4px;
503
  bottom: 3px;
504
  background-color: white;
505
+ -webkit-transition: 0.4s;
506
+ transition: 0.4s;
507
  }
508
  .rsssl-slider.rsssl-round {
509
  border-radius: 20px;
525
  input:focus + .rsssl-slider {
526
  box-shadow: 0 0 1px #2DAAE1;
527
  }
 
528
  .debug-log {
529
  width: 90%;
530
  }
 
 
 
 
 
 
 
531
  .rsssl-dashboard-plusone {
532
  margin-left: 8px;
533
  }
 
534
  .rsssl-highlight {
535
+ background-color: #fff;
536
+ border-right: 4px solid #61ce70;
 
537
  -o-animation: fadeIt 5s ease-in-out;
538
+ animation: fadeIt 5s ease-in-out;
539
+ }
540
  @-o-keyframes fadeIt {
541
+ 0% {
542
+ background-color: #FFFFFF;
543
+ }
544
+ 30% {
545
+ background-color: #d6efd6;
546
+ }
547
+ 100% {
548
+ border-left: 0;
549
+ background-color: inherit;
550
+ }
551
  }
552
  @keyframes fadeIt {
553
+ 0% {
554
+ background-color: #FFFFFF;
555
+ border-left: 0;
556
+ }
557
+ 30% {
558
+ background-color: #d6efd6;
559
+ }
560
+ 100% {
561
+ background-color: inherit;
562
+ }
563
  }
 
564
  .form-table th {
565
  padding-left: 10px;
566
  }
 
567
  .rsssl-dashboard-dismiss .close {
568
  all: initial;
569
  }
 
570
  .rsssl-dashboard-dismiss span {
571
  font-size: 1.5em;
572
+ color: black;
573
  font-family: sans-serif;
574
  }
 
575
  .rsssl-dashboard-dismiss span:hover {
576
  cursor: pointer;
577
  color: grey;
578
+ }
579
+ /* License page */
580
+ .rsssl-grid .rsssl-item.rsssl-license-grid .item-container .form-table tbody tr {
581
+ max-width: 100%;
582
+ width: 100%;
583
+ }
584
+ .rsssl-grid .rsssl-item.rsssl-license-grid .item-container .rsssl-grid-item-footer input + input {
585
+ margin-left: 20px;
586
+ }
587
+ .rsssl_notice_license {
588
+ font-size: 13px !important;
589
+ border-radius: 0.25rem;
590
+ padding: 10px 15px;
591
+ margin: 10px 0;
592
+ background-color: #29b6f6;
593
+ border: 1px solid #29b6f6;
594
+ color: #fff;
595
+ }
596
+ .rsssl_notice_license h1 {
597
+ font-size: 16px;
598
+ }
599
+ .rsssl_notice_license p {
600
+ font-size: 13px !important;
601
+ }
602
+ .rsssl_notice_license.success {
603
+ background-color: #dff0d8;
604
+ border-color: #d0e9c6;
605
+ color: #3c763d;
606
+ }
607
+ .rsssl_notice_license.warning {
608
+ color: #000;
609
+ background-color: #FBC43D;
610
+ border-color: #FBC43D;
611
+ }
612
+ .rsssl_notice_license ul {
613
+ list-style-type: disc;
614
+ margin-left: 22px;
615
+ }
616
+ /*# sourceMappingURL=main.css.map */
css/main.css.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["main.less"],"names":[],"mappings":"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","file":"main.css"}
css/main.less ADDED
@@ -0,0 +1,697 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ Hide nags from other plugins
3
+ */
4
+ .error, .notice, .update-nag, .notice-info {
5
+ &:not(.really-simple-plugins) {
6
+ display: none !important;
7
+ }
8
+ }
9
+
10
+ .rsssl-spacer {
11
+ width:10px;
12
+ }
13
+
14
+ /* comments on settings pages */
15
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr.rsssl-comment-text {
16
+ color:#888;
17
+ font-size: 13px;
18
+ font-weight: normal;
19
+ font-style:italic;
20
+ padding-bottom:0 !important;
21
+ margin-top:0 !important;
22
+ width: 250px;
23
+ td {padding-top:0!important;}
24
+ }
25
+ .rsssl-networksettings-overlay{
26
+ position: absolute;
27
+ top:0;
28
+ left: 0;
29
+ bottom: 0;
30
+ right: 0;
31
+ background: rgba(255, 255, 255, 0.8);
32
+ .rsssl-disabled-settings-overlay{
33
+ .rsssl-open {
34
+ float: left;
35
+ margin-right:12px;
36
+ }
37
+ position:absolute;
38
+ width: calc(100% - 65px);
39
+ bottom: 0;
40
+ background-color: #fff;
41
+ padding: 20px;
42
+ margin:12px;
43
+ box-shadow: 0 0 5px 5px rgba(223,222,222,0.4);
44
+ }
45
+ }
46
+
47
+
48
+ /* Hide review on own settings page */
49
+ #rsssl_do_activate_ssl {
50
+ margin-right:10px;
51
+ }
52
+ .rlrsssl-review {
53
+ display:none;
54
+ }
55
+
56
+ .rsssl-main {
57
+ flex: 1;
58
+ width: 80%;
59
+ float:left;
60
+ }
61
+
62
+ .rsssl-sidebar img {
63
+ max-width:100%;
64
+ /*height:inherit;*/
65
+ }
66
+
67
+ .really-simple-ssl-table {
68
+ display: flex;
69
+ flex-direction: column;
70
+ }
71
+
72
+ .rsssl-table-td-main-content {
73
+ width: 100%;
74
+ }
75
+
76
+ .really-simple-ssl-table tr:first-child {
77
+ border-top-left-radius: .55rem;
78
+ border-top-right-radius: .55rem;
79
+ }
80
+
81
+ .really-simple-ssl-table tr:last-child {
82
+ margin-bottom: 0;
83
+ border-bottom-left-radius: .55rem;
84
+ border-bottom-right-radius: .55rem;
85
+ }
86
+
87
+ .really-simple-ssl-table tr {
88
+ position: relative;
89
+ padding-left: 5px;
90
+ padding-top: 10px;
91
+ background-color: #fff;
92
+ }
93
+
94
+ .debug-log {
95
+ background-color: #fff;
96
+ padding:15px;
97
+ }
98
+
99
+ .rsssl-icons {
100
+ width:15px;
101
+ height:15px;
102
+ }
103
+
104
+ .rsssl-update-count {
105
+ margin-left: 4px !important;
106
+ display: inline-block;
107
+ vertical-align: top;
108
+ box-sizing: border-box;
109
+ margin: 1px 0 -1px 2px;
110
+ padding: 0 5px;
111
+ min-width: 18px;
112
+ height: 18px;
113
+ border-radius: 9px;
114
+ background-color: #ca4a1f;
115
+ color: #fff;
116
+ font-size: 11px;
117
+ line-height: 1.6;
118
+ text-align: center;
119
+ z-index: 26
120
+ }
121
+
122
+ /* rsssl-rsssl-tooltip for settings page */
123
+ /* Base styles for the element that has a rsssl-tooltip */
124
+ [data-rsssl-tooltip],
125
+ .rsssl-tooltip {
126
+ position: relative;
127
+ cursor: pointer;
128
+ }
129
+
130
+ /* Base styles for the entire tooltip */
131
+ [data-rsssl-tooltip]:before,
132
+ [data-rsssl-tooltip]:after,
133
+ .rsssl-tooltip:before,
134
+ .rsssl-tooltip:after {
135
+ position: absolute;
136
+ visibility: hidden;
137
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
138
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
139
+ opacity: 0;
140
+ -webkit-transition:
141
+ opacity 0.2s ease-in-out,
142
+ visibility 0.2s ease-in-out,
143
+ -webkit-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
144
+ -moz-transition:
145
+ opacity 0.2s ease-in-out,
146
+ visibility 0.2s ease-in-out,
147
+ -moz-transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
148
+ transition:
149
+ opacity 0.2s ease-in-out,
150
+ visibility 0.2s ease-in-out,
151
+ transform 0.2s cubic-bezier(0.71, 1.7, 0.77, 1.24);
152
+ -webkit-transform: translate3d(0, 0, 0);
153
+ -moz-transform: translate3d(0, 0, 0);
154
+ transform: translate3d(0, 0, 0);
155
+ pointer-events: none;
156
+ }
157
+
158
+ /* Show the entire rsssl-tooltip on hover and focus */
159
+ [data-rsssl-tooltip]:hover:before,
160
+ [data-rsssl-tooltip]:hover:after,
161
+ [data-rsssl-tooltip]:focus:before,
162
+ [data-rsssl-tooltip]:focus:after,
163
+ .rsssl-tooltip:hover:before,
164
+ .rsssl-tooltip:hover:after,
165
+ .rsssl-tooltip:focus:before,
166
+ .rsssl-tooltip:focus:after {
167
+ visibility: visible;
168
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
169
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
170
+ opacity: 1;
171
+ }
172
+
173
+ /* Base styles for the rsssl-tooltip's directional arrow */
174
+ .rsssl-tooltip:before,
175
+ [data-rsssl-tooltip]:before {
176
+ z-index: 1001;
177
+ border: 6px solid transparent;
178
+ background: transparent;
179
+ content: "";
180
+ }
181
+
182
+ /* Base styles for the rsssl-tooltip's content area */
183
+ .rsssl-tooltip:after,
184
+ [data-rsssl-tooltip]:after {
185
+ z-index: 1000;
186
+ padding: 8px;
187
+ width: 220px;
188
+ background-color: #000;
189
+ background-color: hsla(0, 0%, 20%, 0.9);
190
+ color: #fff;
191
+ content: attr(data-rsssl-tooltip);
192
+ font-size: 14px;
193
+ line-height: 1.2;
194
+ }
195
+
196
+ /* Directions */
197
+
198
+ /* Top (default) */
199
+ .rsssl-tooltip-right {
200
+ font-weight:normal;
201
+ }
202
+ [data-rsssl-tooltip]:before,
203
+ [data-rsssl-tooltip]:after,
204
+ .rsssl-tooltip:before,
205
+ .rsssl-tooltip:after,
206
+ .rsssl-tooltip-top:before,
207
+ .rsssl-tooltip-top:after {
208
+ bottom: 100%;
209
+ left: 50%;
210
+ }
211
+
212
+ [data-rsssl-tooltip]:before,
213
+ .rsssl-tooltip:before,
214
+ .rsssl-tooltip-top:before {
215
+ margin-left: -6px;
216
+ margin-bottom: -12px;
217
+ border-top-color: #000;
218
+ border-top-color: hsla(0, 0%, 20%, 0.9);
219
+ }
220
+
221
+ /* Horizontally align top/bottom rsssl-tooltips */
222
+ [data-rsssl-tooltip]:after,
223
+ .rsssl-tooltip:after,
224
+ .rsssl-tooltip-top:after {
225
+ margin-left: -80px;
226
+ }
227
+
228
+ [data-rsssl-tooltip]:hover:before,
229
+ [data-rsssl-tooltip]:hover:after,
230
+ [data-rsssl-tooltip]:focus:before,
231
+ [data-rsssl-tooltip]:focus:after,
232
+ .rsssl-tooltip:hover:before,
233
+ .rsssl-tooltip:hover:after,
234
+ .rsssl-tooltip:focus:before,
235
+ .rsssl-tooltip:focus:after,
236
+ .rsssl-tooltip-top:hover:before,
237
+ .rsssl-tooltip-top:hover:after,
238
+ .rsssl-tooltip-top:focus:before,
239
+ .rsssl-tooltip-top:focus:after {
240
+ -webkit-transform: translateY(-12px);
241
+ -moz-transform: translateY(-12px);
242
+ transform: translateY(-12px);
243
+ }
244
+
245
+ /* Left */
246
+ .rsssl-tooltip-left:before,
247
+ .rsssl-tooltip-left:after {
248
+ right: 100%;
249
+ /*bottom: 50%;*/
250
+ left: auto;
251
+ }
252
+
253
+ .rsssl-tooltip-left:before {
254
+ margin-left: 0;
255
+ margin-right: -12px;
256
+ margin-bottom: 0;
257
+ border-top-color: transparent;
258
+ border-left-color: #000;
259
+ border-left-color: hsla(0, 0%, 20%, 0.9);
260
+ }
261
+
262
+ .rsssl-tooltip-left:hover:before,
263
+ .rsssl-tooltip-left:hover:after,
264
+ .rsssl-tooltip-left:focus:before,
265
+ .rsssl-tooltip-left:focus:after {
266
+ -webkit-transform: translateX(-12px);
267
+ -moz-transform: translateX(-12px);
268
+ transform: translateX(-12px);
269
+ }
270
+
271
+ /* Bottom */
272
+ .rsssl-tooltip-bottom:before,
273
+ .rsssl-tooltip-bottom:after {
274
+ top: 100%;
275
+ bottom: auto;
276
+ left: 50%;
277
+ }
278
+
279
+ .rsssl-tooltip-bottom:before {
280
+ margin-top: -12px;
281
+ margin-bottom: 0;
282
+ border-top-color: transparent;
283
+ border-bottom-color: #000;
284
+ border-bottom-color: hsla(0, 0%, 20%, 0.9);
285
+ }
286
+
287
+ .rsssl-tooltip-bottom:hover:before,
288
+ .rsssl-tooltip-bottom:hover:after,
289
+ .rsssl-tooltip-bottom:focus:before,
290
+ .rsssl-tooltip-bottom:focus:after {
291
+ -webkit-transform: translateY(12px);
292
+ -moz-transform: translateY(12px);
293
+ transform: translateY(12px);
294
+ }
295
+
296
+ /* Right */
297
+ .rsssl-tooltip-right:before,
298
+ .rsssl-tooltip-right:after {
299
+ bottom: 50%;
300
+ left: 100%;
301
+ }
302
+
303
+ .rsssl-tooltip-right:before {
304
+ margin-bottom: 0;
305
+ margin-left: -12px;
306
+ border-top-color: transparent;
307
+ border-right-color: #000;
308
+ border-right-color: hsla(0, 0%, 20%, 0.9);
309
+ }
310
+
311
+ .rsssl-tooltip-right:hover:before,
312
+ .rsssl-tooltip-right:hover:after,
313
+ .rsssl-tooltip-right:focus:before,
314
+ .rsssl-tooltip-right:focus:after {
315
+ -webkit-transform: translateX(12px);
316
+ -moz-transform: translateX(12px);
317
+ transform: translateX(12px);
318
+ }
319
+
320
+ /* Move directional arrows down a bit for left/right rsssl-tooltips */
321
+ .rsssl-tooltip-left:before,
322
+ .rsssl-tooltip-right:before {
323
+ top: 3px;
324
+ }
325
+
326
+ /* Vertically center rsssl-tooltip content for left/right rsssl-tooltips */
327
+ .rsssl-tooltip-left:after,
328
+ .rsssl-tooltip-right:after {
329
+ margin-left: 0;
330
+ margin-bottom: -25px;
331
+ }
332
+
333
+ /* Styling for the sidebar in the admin tab of the free plugin */
334
+
335
+ .rsssl-really-simple-plugins-logo {
336
+ background-color: #ececec;
337
+ margin-left: -15px;
338
+ margin-right: -15px;
339
+ }
340
+
341
+ .rsssl-sidebar {
342
+ width: 240px;
343
+ margin-top: 20px;
344
+ padding-left: 15px;
345
+ padding-right: 15px;
346
+ margin-right: 15px;
347
+ padding-bottom: 15px;
348
+ background-color: #ECECEC;
349
+ }
350
+
351
+ .rsssl-sidebar-single-content-container {
352
+ min-height: 125px;
353
+ padding-bottom: 35px;
354
+ margin-bottom: 10px;
355
+ background-color: #fff;
356
+ width: 100%;
357
+ border-radius: 3%;
358
+ }
359
+
360
+ .rsssl-sidebar-single-content-container-pro {
361
+ background-color: #fff;
362
+ min-height: 125px;
363
+ padding-bottom: 35px;
364
+ margin-bottom: 10px;
365
+ width: 100%;
366
+ border-radius: 3%;
367
+ }
368
+
369
+ .rsssl-sidebar-title h3 {
370
+ font-size: 0.9em;
371
+ }
372
+
373
+ .rsssl-sidebar-text-content-pro {
374
+ font-weight: 700;
375
+ font-size: 0.8em;
376
+ width: 90%;
377
+ /*min-height: 100px;*/
378
+ margin: auto;
379
+ }
380
+
381
+ .rsssl-sidebar-text-content {
382
+ width: 45%;
383
+ padding-top: 5px;
384
+ padding-right: 7px;
385
+ font-weight: 700;
386
+ font-size: 0.8em;
387
+ float: right;
388
+ margin: 10px auto;
389
+ }
390
+
391
+ .rsssl-pro-image {
392
+ height: 30px;
393
+ margin-top: 6px;
394
+ }
395
+
396
+ .rsssl-sidebar-image-pro {
397
+ width: 90%;
398
+ margin: 10px;
399
+ }
400
+
401
+ .rsssl-sidebar-image {
402
+ width: 100px;
403
+ float: left;
404
+ padding: 10px;
405
+ height: 100px;
406
+ }
407
+
408
+ @media screen and (max-width: 1024px) and (min-width: 541px) {
409
+ /* Let the main container be 100% width again */
410
+ .rsssl-main {
411
+ width: 100%;
412
+ }
413
+
414
+ .rsssl-sidebar-title {
415
+ /*margin: auto;*/
416
+ text-align: center;
417
+ }
418
+
419
+ .rsssl-container {
420
+ flex-direction: column;
421
+ }
422
+ .rsssl-sidebar {
423
+ width: 100%;
424
+ /*padding-left: 10%;*/
425
+ }
426
+ .rsssl-really-simple-plugins-logo {
427
+ width: 40%;
428
+ }
429
+ .rsssl-sidebar-single-content-container {
430
+ background-color: #fff;
431
+ width: 40%;
432
+ padding-left: 25px;
433
+ float: left;
434
+ margin-right: 25px;
435
+ }
436
+
437
+ .rsssl-sidebar-single-content-container-pro {
438
+ width: 40%;
439
+ padding-left: 25px;
440
+ margin: auto auto 25px;
441
+ }
442
+
443
+ .rsssl-sidebar-um-text-content {
444
+ width: 40%;
445
+ }
446
+ .rsssl-pro-image {
447
+ display: none;
448
+ }
449
+ }
450
+
451
+ @media screen and (max-width: 540px) {
452
+ .rsssl-main {
453
+ width: 100%;
454
+ }
455
+ .rsssl-container {
456
+ flex-direction: column;
457
+ }
458
+ .rsssl-sidebar {
459
+ display: grid;
460
+ text-align: -webkit-center;
461
+ width: 70%;
462
+ }
463
+ .rsssl-sidebar-um-text-content {
464
+ width: 45%;
465
+ }
466
+ .rsssl-sidebar-single-content-container-pro {
467
+ padding-bottom: 10px;
468
+ }
469
+ .rsssl-sidebar-single-content-container {
470
+ padding-bottom: 10px;
471
+ }
472
+ }
473
+
474
+ .rsssl-sidebar h4 {
475
+ font-size:14px;
476
+ font-style:italic;
477
+ }
478
+
479
+ .rsssl-wrapper {
480
+ padding: 30px;
481
+ }
482
+
483
+ .rsssl-sidebar-list {
484
+ font-size: 0.9em;
485
+ }
486
+
487
+ #rsssl-premium-button-pro {
488
+ display: inline-table;
489
+ width: 40%;
490
+ text-align: center;
491
+ float: right;
492
+ font-size: inherit;
493
+ height: 25px;
494
+ -webkit-border-radius: 12px;
495
+ -moz-border-radius: 12px;
496
+ border-radius: 12px;
497
+ border: none;
498
+ background-color: #000000;
499
+ color: white;
500
+ margin-right: 5px;
501
+ }
502
+
503
+ .rsssl-sidebar-content {
504
+ float: left;
505
+ padding-bottom: 10px;
506
+ }
507
+
508
+ hr {
509
+ display: block;
510
+ height: 1px;
511
+ border: 0;
512
+ border-top: 1px solid #ccc;
513
+ margin: 1em 0;
514
+ padding: 0;
515
+ }
516
+
517
+ .rsssl-container {
518
+ display: flex;
519
+ }
520
+
521
+ #rsssl-premium-button {
522
+ display: inline-table;
523
+ width: 40%;
524
+ text-align: center;
525
+ float: right;
526
+ font-size: inherit;
527
+ height: 25px;
528
+ border-radius: 12px;
529
+ border: none;
530
+ background-color: #000000;
531
+ color: white;
532
+ margin-right: 5px;
533
+ }
534
+
535
+ .rsssl-more-info-button {
536
+ border: none;
537
+ border-radius: 50px;
538
+ clear: both;
539
+ margin-top: 10px;
540
+ }
541
+
542
+ /*
543
+ cool checkbox sliders
544
+ */
545
+ .rsssl-switch {
546
+ position: relative;
547
+ display: inline-block;
548
+ width: 40px;
549
+ height: 21px;
550
+ input {
551
+ display: none;
552
+ }
553
+ }
554
+
555
+ .rsssl-slider {
556
+ position: absolute;
557
+ cursor: pointer;
558
+ top: 0;
559
+ left: 0;
560
+ right: 0;
561
+ bottom: 0;
562
+ background-color: #ccc;
563
+ -webkit-transition: .4s;
564
+ transition: .4s;
565
+ }
566
+ .rsssl-slider:before {
567
+ position: absolute;
568
+ content: "";
569
+ height: 15px;
570
+ width: 15px;
571
+ left: 4px;
572
+ bottom: 3px;
573
+ background-color: white;
574
+ -webkit-transition: .4s;
575
+ transition: .4s;
576
+ }
577
+ .rsssl-slider.rsssl-round {
578
+ border-radius: 20px;
579
+ }
580
+ .rsssl-slider.rsssl-round:before {
581
+ border-radius: 50%;
582
+ }
583
+ input:checked + .rsssl-slider {
584
+ background-color: #2DAAE1;
585
+ }
586
+ input:checked + .rsssl-slider:before {
587
+ -webkit-transform: translateX(17px);
588
+ -ms-transform: translateX(17px);
589
+ transform: translateX(17px);
590
+ }
591
+ input:disabled + .rsssl-slider {
592
+ background-color: #b3e0f4;
593
+ }
594
+ input:focus + .rsssl-slider {
595
+ box-shadow: 0 0 1px #2DAAE1;
596
+ }
597
+
598
+ .debug-log {
599
+ width: 90%;
600
+ }
601
+
602
+ .rsssl-dashboard-plusone {
603
+ margin-left: 8px;
604
+ }
605
+
606
+ .rsssl-highlight {
607
+ background-color: #fff;
608
+ border-right: 4px solid #61ce70;
609
+ -o-animation: fadeIt 5s ease-in-out;
610
+ animation: fadeIt 5s ease-in-out;
611
+ }
612
+
613
+ @-o-keyframes fadeIt {
614
+ 0% { background-color: #FFFFFF; }
615
+ 30% { background-color: #d6efd6; }
616
+ 100% {
617
+ border-left: 0;
618
+ background-color: inherit;
619
+ }
620
+ }
621
+ @keyframes fadeIt {
622
+ 0% {
623
+ background-color: #FFFFFF;
624
+ border-left: 0;
625
+ }
626
+ 30% { background-color: #d6efd6; }
627
+ 100% { background-color: inherit; }
628
+ }
629
+
630
+ .form-table th {
631
+ padding-left: 10px;
632
+ }
633
+
634
+ .rsssl-dashboard-dismiss .close {
635
+ all: initial;
636
+ }
637
+
638
+ .rsssl-dashboard-dismiss span {
639
+ font-size: 1.5em;
640
+ color: black;
641
+ font-family: sans-serif;
642
+ }
643
+
644
+ .rsssl-dashboard-dismiss span:hover {
645
+ cursor: pointer;
646
+ color: grey;
647
+ }
648
+
649
+ /* License page */
650
+ .rsssl-grid .rsssl-item.rsssl-license-grid .item-container {
651
+ .form-table tbody tr {
652
+ max-width: 100%;
653
+ width: 100%;
654
+ }
655
+
656
+ .rsssl-grid-item-footer {
657
+ input + input {
658
+ margin-left:20px;
659
+ }
660
+ }
661
+ }
662
+
663
+ .rsssl_notice_license {
664
+
665
+ font-size: 13px !important;
666
+ border-radius: .25rem;
667
+ padding: 10px 15px;
668
+ margin: 10px 0;
669
+ background-color: #29b6f6;
670
+ border: 1px solid #29b6f6;
671
+ color: #fff;
672
+
673
+ h1 {
674
+ font-size: 16px;
675
+ }
676
+
677
+ p {
678
+ font-size: 13px !important;
679
+ }
680
+
681
+ &.success {
682
+ background-color: #dff0d8;
683
+ border-color: #d0e9c6;
684
+ color: #3c763d;
685
+ }
686
+
687
+ &.warning {
688
+ color: #000;
689
+ background-color: #FBC43D;;
690
+ border-color: #FBC43D;
691
+ }
692
+
693
+ ul {
694
+ list-style-type: disc;
695
+ margin-left: 22px;
696
+ }
697
+ }
css/main.min.css CHANGED
@@ -1 +1 @@
1
- .rsssl-main{flex:1;width:80%;float:left}.rsssl-sidebar img{max-width:100%}.nav-tab-active{background:#fff}.really-simple-ssl-table{display:flex;flex-direction:column;max-width:1140px}.rsssl-table-td-main-content{width:100%}.really-simple-ssl-table tr:first-child{border-top-left-radius:.55rem;border-top-right-radius:.55rem}.really-simple-ssl-table tr:last-child{margin-bottom:0;border-bottom-left-radius:.55rem;border-bottom-right-radius:.55rem}.really-simple-ssl-table tr{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.debug-log{background-color:#fff;padding:15px;border:1px solid black}.rsssl-icons{width:15px;height:15px}.rsssl-update-count{margin-left:4px !important;display:inline-block;vertical-align:top;box-sizing:border-box;margin:1px 0 -1px 2px;padding:0 5px;min-width:18px;height:18px;border-radius:9px;background-color:#ca4a1f;color:#fff;font-size:11px;line-height:1.6;text-align:center;z-index:26}[data-rsssl-tooltip],.rsssl-tooltip{position:relative;cursor:pointer}[data-rsssl-tooltip]:before,[data-rsssl-tooltip]:after,.rsssl-tooltip:before,.rsssl-tooltip:after{position:absolute;visibility:hidden;-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);opacity:0;-webkit-transition:opacity .2s ease-in-out,visibility .2s ease-in-out,-webkit-transform .2s cubic-bezier(0.71,1.7,0.77,1.24);-moz-transition:opacity .2s ease-in-out,visibility .2s ease-in-out,-moz-transform .2s cubic-bezier(0.71,1.7,0.77,1.24);transition:opacity .2s ease-in-out,visibility .2s ease-in-out,transform .2s cubic-bezier(0.71,1.7,0.77,1.24);-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);pointer-events:none}[data-rsssl-tooltip]:hover:before,[data-rsssl-tooltip]:hover:after,[data-rsssl-tooltip]:focus:before,[data-rsssl-tooltip]:focus:after,.rsssl-tooltip:hover:before,.rsssl-tooltip:hover:after,.rsssl-tooltip:focus:before,.rsssl-tooltip:focus:after{visibility:visible;-ms-filter:"alpha(opacity=100)";filter:alpha(opacity=100);opacity:1}.rsssl-tooltip:before,[data-rsssl-tooltip]:before{z-index:1001;border:6px solid transparent;background:transparent;content:""}.rsssl-tooltip:after,[data-rsssl-tooltip]:after{z-index:1000;padding:8px;width:160px;background-color:#000;background-color:hsla(0,0,20%,0.9);color:#fff;content:attr(data-rsssl-tooltip);font-size:14px;line-height:1.2}[data-rsssl-tooltip]:before,[data-rsssl-tooltip]:after,.rsssl-tooltip:before,.rsssl-tooltip:after,.rsssl-tooltip-top:before,.rsssl-tooltip-top:after{bottom:100%;left:50%}[data-rsssl-tooltip]:before,.rsssl-tooltip:before,.rsssl-tooltip-top:before{margin-left:-6px;margin-bottom:-12px;border-top-color:#000;border-top-color:hsla(0,0,20%,0.9)}[data-rsssl-tooltip]:after,.rsssl-tooltip:after,.rsssl-tooltip-top:after{margin-left:-80px}[data-rsssl-tooltip]:hover:before,[data-rsssl-tooltip]:hover:after,[data-rsssl-tooltip]:focus:before,[data-rsssl-tooltip]:focus:after,.rsssl-tooltip:hover:before,.rsssl-tooltip:hover:after,.rsssl-tooltip:focus:before,.rsssl-tooltip:focus:after,.rsssl-tooltip-top:hover:before,.rsssl-tooltip-top:hover:after,.rsssl-tooltip-top:focus:before,.rsssl-tooltip-top:focus:after{-webkit-transform:translateY(-12px);-moz-transform:translateY(-12px);transform:translateY(-12px)}.rsssl-tooltip-left:before,.rsssl-tooltip-left:after{right:100%;bottom:50%;left:auto}.rsssl-tooltip-left:before{margin-left:0;margin-right:-12px;margin-bottom:0;border-top-color:transparent;border-left-color:#000;border-left-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-left:hover:before,.rsssl-tooltip-left:hover:after,.rsssl-tooltip-left:focus:before,.rsssl-tooltip-left:focus:after{-webkit-transform:translateX(-12px);-moz-transform:translateX(-12px);transform:translateX(-12px)}.rsssl-tooltip-bottom:before,.rsssl-tooltip-bottom:after{top:100%;bottom:auto;left:50%}.rsssl-tooltip-bottom:before{margin-top:-12px;margin-bottom:0;border-top-color:transparent;border-bottom-color:#000;border-bottom-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-bottom:hover:before,.rsssl-tooltip-bottom:hover:after,.rsssl-tooltip-bottom:focus:before,.rsssl-tooltip-bottom:focus:after{-webkit-transform:translateY(12px);-moz-transform:translateY(12px);transform:translateY(12px)}.rsssl-tooltip-right:before,.rsssl-tooltip-right:after{bottom:50%;left:100%}.rsssl-tooltip-right:before{margin-bottom:0;margin-left:-12px;border-top-color:transparent;border-right-color:#000;border-right-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-right:hover:before,.rsssl-tooltip-right:hover:after,.rsssl-tooltip-right:focus:before,.rsssl-tooltip-right:focus:after{-webkit-transform:translateX(12px);-moz-transform:translateX(12px);transform:translateX(12px)}.rsssl-tooltip-left:before,.rsssl-tooltip-right:before{top:3px}.rsssl-tooltip-left:after,.rsssl-tooltip-right:after{margin-left:0;margin-bottom:-16px}.rsssl-really-simple-plugins-logo{background-color:#ececec;margin-left:-15px;margin-right:-15px}.rsssl-sidebar{width:240px;margin-top:20px;padding-left:15px;padding-right:15px;margin-right:15px;padding-bottom:15px;background-color:#ececec}.rsssl-sidebar-single-content-container{min-height:125px;padding-bottom:35px;margin-bottom:10px;background-color:#fff;width:100%;border-radius:3%}.rsssl-sidebar-single-content-container-pro{background-color:#fff;min-height:125px;padding-bottom:35px;margin-bottom:10px;width:100%;border-radius:3%}.rsssl-sidebar-title h3{font-size:.9em}.rsssl-sidebar-text-content-pro{font-weight:700;font-size:.8em;width:90%;margin:auto}.rsssl-sidebar-text-content{width:45%;padding-top:5px;padding-right:7px;font-weight:700;font-size:.8em;float:right;margin:10px auto}.rsssl-pro-image{height:30px;margin-top:6px}.rsssl-sidebar-image-pro{width:90%;margin:10px}.rsssl-sidebar-image{width:100px;float:left;padding:10px;height:100px}@media screen and (max-width:1024px) and (min-width:541px){.rsssl-main{width:100%}.rsssl-sidebar-title{text-align:center}.rsssl-container{flex-direction:column}.rsssl-sidebar{width:100%}.rsssl-really-simple-plugins-logo{width:40%}.rsssl-sidebar-single-content-container{background-color:#fff;width:40%;padding-left:25px;float:left;margin-right:25px}.rsssl-sidebar-single-content-container-pro{width:40%;padding-left:25px;margin:auto auto 25px}.rsssl-sidebar-um-text-content{width:40%}.rsssl-pro-image{display:none}}@media screen and (max-width:540px){.rsssl-main{width:100%}.rsssl-container{flex-direction:column}.rsssl-sidebar{display:grid;text-align:-webkit-center;width:70%}.rsssl-sidebar-um-text-content{width:45%}.rsssl-sidebar-single-content-container-pro{padding-bottom:10px}.rsssl-sidebar-single-content-container{padding-bottom:10px}}.rsssl-sidebar h4{font-size:14px;font-style:italic}.rsssl-wrapper{padding:30px}.rsssl-sidebar-list{font-size:.9em}#rsssl-premium-button-pro{display:inline-table;width:40%;text-align:center;float:right;font-size:inherit;height:25px;-webkit-border-radius:12px;-moz-border-radius:12px;border-radius:12px;border:0;background-color:#000;color:white;margin-right:5px}.rsssl-sidebar-content{float:left;padding-bottom:10px}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}.rsssl-container{display:flex}#rsssl-premium-button{display:inline-table;width:40%;text-align:center;float:right;font-size:inherit;height:25px;border-radius:12px;border:0;background-color:#000;color:white;margin-right:5px}.rsssl-more-info-button{border:0;border-radius:50px;clear:both;margin-top:10px}.rsssl-button-deactivate-keep-ssl{margin-right:15px}.rsssl-switch{position:relative;display:inline-block;width:40px;height:21px}.rsssl-switch input{display:none}.rsssl-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s}.rsssl-slider:before{position:absolute;content:"";height:15px;width:15px;left:4px;bottom:3px;background-color:white;-webkit-transition:.4s;transition:.4s}.rsssl-slider.rsssl-round{border-radius:20px}.rsssl-slider.rsssl-round:before{border-radius:50%}input:checked+.rsssl-slider{background-color:#2daae1}input:checked+.rsssl-slider:before{-webkit-transform:translateX(17px);-ms-transform:translateX(17px);transform:translateX(17px)}input:disabled+.rsssl-slider{background-color:#b3e0f4}input:focus+.rsssl-slider{box-shadow:0 0 1px #2daae1}.debug-log{width:90%}.rsssl-dismiss-text{font-size:1em;color:#0073aa;margin-left:6px}.rsssl-dashboard-plusone{margin-left:8px}.rsssl-highlight{border-left:4px solid #46b450;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);background-image:none !important;-o-animation:fadeIt 5s ease-in-out;animation:fadeIt 5s ease-in-out}@-o-keyframes fadeIt{0{background-color:#fff}30%{background-color:#d6efd6}100%{background-color:inherit}}@keyframes fadeIt{0{background-color:#fff}30%{background-color:#d6efd6}100%{background-color:inherit}}.form-table th{padding-left:10px}.rsssl-dashboard-dismiss .close{all:initial}.rsssl-dashboard-dismiss span{font-size:1.5em;color:darkgrey;font-family:sans-serif}.rsssl-dashboard-dismiss span:hover{cursor:pointer;color:grey}
1
+ .error:not(.really-simple-plugins),.notice:not(.really-simple-plugins),.update-nag:not(.really-simple-plugins),.notice-info:not(.really-simple-plugins){display:none !important}.rsssl-spacer{width:10px}.rsssl-grid .rsssl-item .item-container .form-table tbody tr.rsssl-comment-text{color:#888;font-size:13px;font-weight:normal;font-style:italic;padding-bottom:0 !important;margin-top:0 !important;width:250px}.rsssl-grid .rsssl-item .item-container .form-table tbody tr.rsssl-comment-text td{padding-top:0 !important}.rsssl-networksettings-overlay{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(255,255,255,0.8)}.rsssl-networksettings-overlay .rsssl-disabled-settings-overlay{position:absolute;width:calc(100% - 65px);bottom:0;background-color:#fff;padding:20px;margin:12px;box-shadow:0 0 5px 5px rgba(223,222,222,0.4)}.rsssl-networksettings-overlay .rsssl-disabled-settings-overlay .rsssl-open{float:left;margin-right:12px}#rsssl_do_activate_ssl{margin-right:10px}.rlrsssl-review{display:none}.rsssl-main{flex:1;width:80%;float:left}.rsssl-sidebar img{max-width:100%}.really-simple-ssl-table{display:flex;flex-direction:column}.rsssl-table-td-main-content{width:100%}.really-simple-ssl-table tr:first-child{border-top-left-radius:.55rem;border-top-right-radius:.55rem}.really-simple-ssl-table tr:last-child{margin-bottom:0;border-bottom-left-radius:.55rem;border-bottom-right-radius:.55rem}.really-simple-ssl-table tr{position:relative;padding-left:5px;padding-top:10px;background-color:#fff}.debug-log{background-color:#fff;padding:15px}.rsssl-icons{width:15px;height:15px}.rsssl-update-count{margin-left:4px !important;display:inline-block;vertical-align:top;box-sizing:border-box;margin:1px 0 -1px 2px;padding:0 5px;min-width:18px;height:18px;border-radius:9px;background-color:#ca4a1f;color:#fff;font-size:11px;line-height:1.6;text-align:center;z-index:26}[data-rsssl-tooltip],.rsssl-tooltip{position:relative;cursor:pointer}[data-rsssl-tooltip]:before,[data-rsssl-tooltip]:after,.rsssl-tooltip:before,.rsssl-tooltip:after{position:absolute;visibility:hidden;-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);opacity:0;-webkit-transition:opacity .2s ease-in-out,visibility .2s ease-in-out,-webkit-transform .2s cubic-bezier(0.71,1.7,0.77,1.24);-moz-transition:opacity .2s ease-in-out,visibility .2s ease-in-out,-moz-transform .2s cubic-bezier(0.71,1.7,0.77,1.24);transition:opacity .2s ease-in-out,visibility .2s ease-in-out,transform .2s cubic-bezier(0.71,1.7,0.77,1.24);-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);transform:translate3d(0,0,0);pointer-events:none}[data-rsssl-tooltip]:hover:before,[data-rsssl-tooltip]:hover:after,[data-rsssl-tooltip]:focus:before,[data-rsssl-tooltip]:focus:after,.rsssl-tooltip:hover:before,.rsssl-tooltip:hover:after,.rsssl-tooltip:focus:before,.rsssl-tooltip:focus:after{visibility:visible;-ms-filter:"alpha(opacity=100)";filter:alpha(opacity=100);opacity:1}.rsssl-tooltip:before,[data-rsssl-tooltip]:before{z-index:1001;border:6px solid transparent;background:transparent;content:""}.rsssl-tooltip:after,[data-rsssl-tooltip]:after{z-index:1000;padding:8px;width:220px;background-color:#000;background-color:hsla(0,0,20%,0.9);color:#fff;content:attr(data-rsssl-tooltip);font-size:14px;line-height:1.2}.rsssl-tooltip-right{font-weight:normal}[data-rsssl-tooltip]:before,[data-rsssl-tooltip]:after,.rsssl-tooltip:before,.rsssl-tooltip:after,.rsssl-tooltip-top:before,.rsssl-tooltip-top:after{bottom:100%;left:50%}[data-rsssl-tooltip]:before,.rsssl-tooltip:before,.rsssl-tooltip-top:before{margin-left:-6px;margin-bottom:-12px;border-top-color:#000;border-top-color:hsla(0,0,20%,0.9)}[data-rsssl-tooltip]:after,.rsssl-tooltip:after,.rsssl-tooltip-top:after{margin-left:-80px}[data-rsssl-tooltip]:hover:before,[data-rsssl-tooltip]:hover:after,[data-rsssl-tooltip]:focus:before,[data-rsssl-tooltip]:focus:after,.rsssl-tooltip:hover:before,.rsssl-tooltip:hover:after,.rsssl-tooltip:focus:before,.rsssl-tooltip:focus:after,.rsssl-tooltip-top:hover:before,.rsssl-tooltip-top:hover:after,.rsssl-tooltip-top:focus:before,.rsssl-tooltip-top:focus:after{-webkit-transform:translateY(-12px);-moz-transform:translateY(-12px);transform:translateY(-12px)}.rsssl-tooltip-left:before,.rsssl-tooltip-left:after{right:100%;left:auto}.rsssl-tooltip-left:before{margin-left:0;margin-right:-12px;margin-bottom:0;border-top-color:transparent;border-left-color:#000;border-left-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-left:hover:before,.rsssl-tooltip-left:hover:after,.rsssl-tooltip-left:focus:before,.rsssl-tooltip-left:focus:after{-webkit-transform:translateX(-12px);-moz-transform:translateX(-12px);transform:translateX(-12px)}.rsssl-tooltip-bottom:before,.rsssl-tooltip-bottom:after{top:100%;bottom:auto;left:50%}.rsssl-tooltip-bottom:before{margin-top:-12px;margin-bottom:0;border-top-color:transparent;border-bottom-color:#000;border-bottom-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-bottom:hover:before,.rsssl-tooltip-bottom:hover:after,.rsssl-tooltip-bottom:focus:before,.rsssl-tooltip-bottom:focus:after{-webkit-transform:translateY(12px);-moz-transform:translateY(12px);transform:translateY(12px)}.rsssl-tooltip-right:before,.rsssl-tooltip-right:after{bottom:50%;left:100%}.rsssl-tooltip-right:before{margin-bottom:0;margin-left:-12px;border-top-color:transparent;border-right-color:#000;border-right-color:hsla(0,0,20%,0.9)}.rsssl-tooltip-right:hover:before,.rsssl-tooltip-right:hover:after,.rsssl-tooltip-right:focus:before,.rsssl-tooltip-right:focus:after{-webkit-transform:translateX(12px);-moz-transform:translateX(12px);transform:translateX(12px)}.rsssl-tooltip-left:before,.rsssl-tooltip-right:before{top:3px}.rsssl-tooltip-left:after,.rsssl-tooltip-right:after{margin-left:0;margin-bottom:-25px}.rsssl-really-simple-plugins-logo{background-color:#ececec;margin-left:-15px;margin-right:-15px}.rsssl-sidebar{width:240px;margin-top:20px;padding-left:15px;padding-right:15px;margin-right:15px;padding-bottom:15px;background-color:#ececec}.rsssl-sidebar-single-content-container{min-height:125px;padding-bottom:35px;margin-bottom:10px;background-color:#fff;width:100%;border-radius:3%}.rsssl-sidebar-single-content-container-pro{background-color:#fff;min-height:125px;padding-bottom:35px;margin-bottom:10px;width:100%;border-radius:3%}.rsssl-sidebar-title h3{font-size:.9em}.rsssl-sidebar-text-content-pro{font-weight:700;font-size:.8em;width:90%;margin:auto}.rsssl-sidebar-text-content{width:45%;padding-top:5px;padding-right:7px;font-weight:700;font-size:.8em;float:right;margin:10px auto}.rsssl-pro-image{height:30px;margin-top:6px}.rsssl-sidebar-image-pro{width:90%;margin:10px}.rsssl-sidebar-image{width:100px;float:left;padding:10px;height:100px}@media screen and (max-width:1024px) and (min-width:541px){.rsssl-main{width:100%}.rsssl-sidebar-title{text-align:center}.rsssl-container{flex-direction:column}.rsssl-sidebar{width:100%}.rsssl-really-simple-plugins-logo{width:40%}.rsssl-sidebar-single-content-container{background-color:#fff;width:40%;padding-left:25px;float:left;margin-right:25px}.rsssl-sidebar-single-content-container-pro{width:40%;padding-left:25px;margin:auto auto 25px}.rsssl-sidebar-um-text-content{width:40%}.rsssl-pro-image{display:none}}@media screen and (max-width:540px){.rsssl-main{width:100%}.rsssl-container{flex-direction:column}.rsssl-sidebar{display:grid;text-align:-webkit-center;width:70%}.rsssl-sidebar-um-text-content{width:45%}.rsssl-sidebar-single-content-container-pro{padding-bottom:10px}.rsssl-sidebar-single-content-container{padding-bottom:10px}}.rsssl-sidebar h4{font-size:14px;font-style:italic}.rsssl-wrapper{padding:30px}.rsssl-sidebar-list{font-size:.9em}#rsssl-premium-button-pro{display:inline-table;width:40%;text-align:center;float:right;font-size:inherit;height:25px;-webkit-border-radius:12px;-moz-border-radius:12px;border-radius:12px;border:0;background-color:#000;color:white;margin-right:5px}.rsssl-sidebar-content{float:left;padding-bottom:10px}hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}.rsssl-container{display:flex}#rsssl-premium-button{display:inline-table;width:40%;text-align:center;float:right;font-size:inherit;height:25px;border-radius:12px;border:0;background-color:#000;color:white;margin-right:5px}.rsssl-more-info-button{border:0;border-radius:50px;clear:both;margin-top:10px}.rsssl-switch{position:relative;display:inline-block;width:40px;height:21px}.rsssl-switch input{display:none}.rsssl-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s}.rsssl-slider:before{position:absolute;content:"";height:15px;width:15px;left:4px;bottom:3px;background-color:white;-webkit-transition:.4s;transition:.4s}.rsssl-slider.rsssl-round{border-radius:20px}.rsssl-slider.rsssl-round:before{border-radius:50%}input:checked+.rsssl-slider{background-color:#2daae1}input:checked+.rsssl-slider:before{-webkit-transform:translateX(17px);-ms-transform:translateX(17px);transform:translateX(17px)}input:disabled+.rsssl-slider{background-color:#b3e0f4}input:focus+.rsssl-slider{box-shadow:0 0 1px #2daae1}.debug-log{width:90%}.rsssl-dashboard-plusone{margin-left:8px}.rsssl-highlight{background-color:#fff;border-right:4px solid #61ce70;-o-animation:fadeIt 5s ease-in-out;animation:fadeIt 5s ease-in-out}@-o-keyframes fadeIt{0{background-color:#fff}30%{background-color:#d6efd6}100%{border-left:0;background-color:inherit}}@keyframes fadeIt{0{background-color:#fff;border-left:0}30%{background-color:#d6efd6}100%{background-color:inherit}}.form-table th{padding-left:10px}.rsssl-dashboard-dismiss .close{all:initial}.rsssl-dashboard-dismiss span{font-size:1.5em;color:black;font-family:sans-serif}.rsssl-dashboard-dismiss span:hover{cursor:pointer;color:grey}.rsssl-grid .rsssl-item.rsssl-license-grid .item-container .form-table tbody tr{max-width:100%;width:100%}.rsssl-grid .rsssl-item.rsssl-license-grid .item-container .rsssl-grid-item-footer input+input{margin-left:20px}.rsssl_notice_license{font-size:13px !important;border-radius:.25rem;padding:10px 15px;margin:10px 0;background-color:#29b6f6;border:1px solid #29b6f6;color:#fff}.rsssl_notice_license h1{font-size:16px}.rsssl_notice_license p{font-size:13px !important}.rsssl_notice_license.success{background-color:#dff0d8;border-color:#d0e9c6;color:#3c763d}.rsssl_notice_license.warning{color:#000;background-color:#fbc43d;border-color:#fbc43d}.rsssl_notice_license ul{list-style-type:disc;margin-left:22px}
force-deactivate.txt CHANGED
@@ -12,127 +12,111 @@
12
  <body>
13
 
14
  <?php
15
- # No need for the template engine
16
- define( 'WP_USE_THEMES', false );
17
-
18
- #find the base path
19
- define( 'BASE_PATH', find_wordpress_base_path()."/" );
20
-
21
- # Load WordPress Core
22
- require_once( BASE_PATH.'wp-load.php' );
23
- require_once(ABSPATH.'wp-admin/includes/plugin.php');
24
- $core_plugin = 'really-simple-ssl/rlrsssl-really-simple-ssl.php';
25
-
26
- if (!is_plugin_active($core_plugin) ) {
27
- echo "<h1>Really Simple SSL is already deactivated!</h1>";
28
- exit;
29
- }
30
-
31
- #Load plugin functionality
32
- require_once( dirname( __FILE__ ) . '/class-front-end.php' );
33
- require_once( dirname( __FILE__ ) . '/class-admin.php' );
34
-
35
- $really_simple_ssl = new rsssl_admin();
36
- if (is_multisite()) {
37
- require_once( dirname( __FILE__ ) . '/class-multisite.php' );
38
- $rsssl_multisite = new rsssl_multisite();
39
- }
40
-
41
- $step = 1;
42
- echo "<h1>Force deactivation of Really Simple SSL</h1>";
43
- echo $step.". Resetting options"."<br>";
44
- $networkwide = is_multisite();
45
- $really_simple_ssl->deactivate($networkwide);
46
- $step++;
47
-
48
- //add feedback on writable files.
49
- if (count($really_simple_ssl->errors)>0) {
50
- echo $step.". Errors occured while deactivating:<ul>";
51
- $step++;
52
- foreach($really_simple_ssl->errors as $errorname=>$error) {
53
- echo "<li>".$errorname."</li>";
54
- }
55
- echo "</ul>";
56
- echo "Errors while removing the Really Simple SSL lines from your wp-config.php and .htaccess files, which you can normally find in your webroot."."<br><br>";
57
- }
58
-
59
- echo $step.". Deactivating plugin"."<br>";
60
- rl_deactivate_plugin($really_simple_ssl->plugin_dir."/".$really_simple_ssl->plugin_filename);
61
-
62
- $step++;
63
- echo $step.". Completed with <b>".count($really_simple_ssl->errors)."</b> error(s)"."<br>";
64
-
65
-
66
-
67
-
68
- function rl_remove_plugin_from_array($plugin, $current) {
69
- $key = array_search( $plugin, $current );
70
- if ( false !== $key ) {
71
- $do_blog = true;
72
- unset( $current[ $key ] );
73
- }
74
- return $current;
75
- }
76
-
77
- function rl_deactivate_plugin( $plugin ) {
78
- $plugin = plugin_basename( trim( $plugin ) );
79
-
80
- if ( is_multisite() ) {
81
-
82
- $network_current = get_site_option( 'active_sitewide_plugins', array() );
83
- if ( is_plugin_active_for_network( $plugin ) ) { unset( $network_current[ $plugin ] );}
84
- update_site_option( 'active_sitewide_plugins', $network_current );
85
 
86
- //remove plugin one by one on each site
87
- $sites = wp_get_sites();
88
- foreach ( $sites as $site ) {
89
- switch_to_blog( $site[ 'blog_id' ] );
90
 
91
- $current = get_option( 'active_plugins', array() );
92
- $current = rl_remove_plugin_from_array($plugin, $current);
93
- update_option('active_plugins', $current);
94
 
95
- restore_current_blog(); //switches back to previous blog, not current, so we have to do it each loop
96
- }
 
 
97
 
98
- } else {
99
- $current = get_option( 'active_plugins', array() );
100
- $current = rl_remove_plugin_from_array($plugin, $current);
101
- update_option('active_plugins', $current);
102
  }
103
 
104
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
105
 
 
 
 
106
 
 
 
 
107
 
108
 
 
 
 
 
 
 
109
 
 
 
110
 
 
 
111
 
112
- update_option('active_plugins', $current);
113
-
114
-
115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  }
117
 
118
  /**
119
  * Helper function to find Wordpress base path.
120
  */
121
  function find_wordpress_base_path() {
122
- $dir = dirname(__FILE__);
123
- do {
124
- //it is possible to check for other files here
125
- if( file_exists($dir."/wp-load.php") ) {
126
- return $dir;
127
- }
128
- // The Bedrock wordpress structure's WP base path is not simply up the tree
129
- // from the plugins directory; it's in the /web/wp directory.
130
- // See https://roots.io/bedrock/docs/folder-structure/ for more info.
131
- if (file_exists($dir."/wp")) {
132
- return $dir."/wp";
133
- }
134
- } while( $dir = realpath("$dir/..") );
135
- return null;
136
  }
137
 
138
  ?>
12
  <body>
13
 
14
  <?php
15
+ # No need for the template engine
16
+ define( 'WP_USE_THEMES', false );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
+ #find the base path
19
+ define( 'BASE_PATH', find_wordpress_base_path() . "/" );
 
 
20
 
21
+ //make sure the files are loaded
22
+ if (!defined('RSSSL_DOING_SYSTEM_STATUS')) define( 'RSSSL_DOING_SYSTEM_STATUS' , true);
 
23
 
24
+ # Load WordPress Core
25
+ require_once( BASE_PATH . 'wp-load.php' );
26
+ require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
27
+ $core_plugin = 'really-simple-ssl/rlrsssl-really-simple-ssl.php';
28
 
29
+ if ( ! is_plugin_active( $core_plugin ) ) {
30
+ echo "<h1>Really Simple SSL is already deactivated!</h1>";
31
+ exit;
 
32
  }
33
 
34
 
35
+ $step = 1;
36
+ echo "<h1>Force deactivation of Really Simple SSL</h1>";
37
+ echo $step . ". Resetting options" . "<br>";
38
+ $networkwide = is_multisite();
39
+ RSSSL()->really_simple_ssl->deactivate( $networkwide );
40
+ $step ++;
41
+
42
+ //add feedback on writable files.
43
+ if ( count( RSSSL()->really_simple_ssl->errors ) > 0 ) {
44
+ echo $step . ". Errors occured while deactivating:<ul>";
45
+ $step ++;
46
+ foreach ( RSSSL()->really_simple_ssl->errors as $errorname => $error ) {
47
+ echo "<li>" . $errorname . "</li>";
48
+ }
49
+ echo "</ul>";
50
+ echo "Errors while removing the Really Simple SSL lines from your wp-config.php and .htaccess files, which you can normally find in your webroot."
51
+ . "<br><br>";
52
+ }
53
 
54
+ echo $step . ". Deactivating plugin" . "<br>";
55
+ rl_deactivate_plugin( RSSSL()->really_simple_ssl->plugin_dir . "/"
56
+ . RSSSL()->really_simple_ssl->plugin_filename );
57
 
58
+ $step ++;
59
+ echo $step . ". Completed with <b>"
60
+ . count( RSSSL()->really_simple_ssl->errors ) . "</b> error(s)" . "<br>";
61
 
62
 
63
+ function rl_remove_plugin_from_array( $plugin, $current ) {
64
+ $key = array_search( $plugin, $current );
65
+ if ( false !== $key ) {
66
+ $do_blog = true;
67
+ unset( $current[ $key ] );
68
+ }
69
 
70
+ return $current;
71
+ }
72
 
73
+ function rl_deactivate_plugin( $plugin ) {
74
+ $plugin = plugin_basename( trim( $plugin ) );
75
 
76
+ if ( is_multisite() ) {
 
 
77
 
78
+ $network_current = get_site_option( 'active_sitewide_plugins', array() );
79
+ if ( is_plugin_active_for_network( $plugin ) ) {
80
+ unset( $network_current[ $plugin ] );
81
+ }
82
+ update_site_option( 'active_sitewide_plugins', $network_current );
83
+
84
+ //remove plugin one by one on each site
85
+ $args = array(
86
+ 'public' => 1,
87
+ );
88
+ $sites = get_sites($args);
89
+ foreach ( $sites as $site ) {
90
+ switch_to_blog($site->blog_id);
91
+ $current = get_option( 'active_plugins', array() );
92
+ $current = rl_remove_plugin_from_array( $plugin, $current );
93
+ update_option( 'active_plugins', $current );
94
+ restore_current_blog(); //switches back to previous blog, not current, so we have to do it each loop
95
+ }
96
+
97
+ } else {
98
+ $current = get_option( 'active_plugins', array() );
99
+ $current = rl_remove_plugin_from_array( $plugin, $current );
100
+ update_option( 'active_plugins', $current );
101
+ }
102
+ update_option( 'active_plugins', $current );
103
  }
104
 
105
  /**
106
  * Helper function to find Wordpress base path.
107
  */
108
  function find_wordpress_base_path() {
109
+ $dir = dirname( __FILE__ );
110
+ do {
111
+ if ( file_exists( $dir . "/wp-load.php" ) ) {
112
+ return $dir;
113
+ }
114
+ if ( file_exists( $dir . "/wp" ) ) {
115
+ return $dir . "/wp";
116
+ }
117
+ } while ( $dir = realpath( "$dir/.." ) );
118
+
119
+ return null;
 
 
 
120
  }
121
 
122
  ?>
grid/css/grid-rtl.css ADDED
@@ -0,0 +1,361 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #wpcontent {
2
+ padding: 0;
3
+ }
4
+ #wpcontent .nav-tab-wrapper {
5
+ height: 60px;
6
+ background-color: #fff;
7
+ display: flex;
8
+ align-items: center;
9
+ }
10
+ #wpcontent .nav-tab {
11
+ background: inherit;
12
+ border: 0;
13
+ }
14
+ #wpcontent .rsssl-logo-container {
15
+ margin-left: 25px;
16
+ margin-bottom: 10px;
17
+ }
18
+ #wpcontent .header-links {
19
+ display: flex;
20
+ flex: 1;
21
+ justify-content: flex-end;
22
+ flex-direction: row;
23
+ align-items: center;
24
+ margin-right: 140px;
25
+ }
26
+ #wpcontent .header-links .documentation {
27
+ padding-right: 25px;
28
+ }
29
+ .rsssl-grid {
30
+ margin-left: 25px;
31
+ position: relative;
32
+ display: flex;
33
+ flex-direction: row;
34
+ flex-wrap: wrap;
35
+ /*
36
+ Footers
37
+ */
38
+ /*
39
+ Dots
40
+ */
41
+ }
42
+ .rsssl-grid .rsssl-item {
43
+ width: 800px;
44
+ height: 475px;
45
+ z-index: 1;
46
+ }
47
+ .rsssl-grid .rsssl-item.small {
48
+ width: 400px;
49
+ }
50
+ .rsssl-grid .rsssl-item.settings .item-container .rsssl-grid-item-footer {
51
+ justify-content: flex-start;
52
+ }
53
+ .rsssl-grid .rsssl-item .item-container {
54
+ background-color: #fff;
55
+ position: relative;
56
+ box-shadow: 0px 0px 5px 5px rgba(222, 222, 222, 0.2);
57
+ width: 780px;
58
+ height: 455px;
59
+ }
60
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header {
61
+ display: flex;
62
+ align-items: center;
63
+ justify-content: space-between;
64
+ margin-top: 10px;
65
+ height: 60px;
66
+ border-bottom: 1px solid #dedede;
67
+ }
68
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header h3 {
69
+ margin-left: 15px;
70
+ }
71
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item {
72
+ display: flex;
73
+ color: #3c3c3c;
74
+ margin-right: 10px;
75
+ }
76
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item .open-task-count {
77
+ padding-left: 3px;
78
+ }
79
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item .rsssl-save-settings-feedback {
80
+ color: red;
81
+ }
82
+ .rsssl-grid .rsssl-item .item-container .rsssl-table-td-main-content {
83
+ padding-left: 15px;
84
+ }
85
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content {
86
+ height: 310px;
87
+ margin: 10px 10px 15px 15px;
88
+ border-bottom: 1px solid #dedede;
89
+ overflow-x: hidden;
90
+ /*
91
+ Progress bar
92
+ */
93
+ /*
94
+ Settings
95
+ */
96
+ /*
97
+ Tips and Tricks
98
+ */
99
+ /*
100
+ Default bullet style
101
+ */
102
+ /*
103
+ Support forum block
104
+ */
105
+ /*
106
+ Other plugins
107
+ */
108
+ /*
109
+ Other plugins
110
+ */
111
+ /*
112
+ Progress labels
113
+ */
114
+ }
115
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-bar-container {
116
+ margin: 15px 15px 15px 0;
117
+ }
118
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress {
119
+ overflow: hidden;
120
+ height: 20px;
121
+ border-radius: 5px;
122
+ background-color: #f7f7f7;
123
+ }
124
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress .bar {
125
+ height: 100%;
126
+ background-color: #61ce70;
127
+ }
128
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-text {
129
+ display: flex;
130
+ align-items: center;
131
+ margin: 10px;
132
+ padding-top: 10px;
133
+ padding-bottom: 10px;
134
+ }
135
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-text .rsssl-progress-percentage {
136
+ font-size: 32px;
137
+ font-weight: 900;
138
+ }
139
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-text .rsssl-progress-text {
140
+ display: flex;
141
+ flex-direction: row;
142
+ margin-left: 10px;
143
+ }
144
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-text .rsssl-progress-text a {
145
+ margin-left: 3px;
146
+ }
147
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-text .rsssl-progress-text .rsssl-progress-count {
148
+ margin-left: 3px;
149
+ margin-right: 3px;
150
+ }
151
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table {
152
+ overflow: hidden;
153
+ }
154
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table .dashicons-editor-help {
155
+ font-size: 20px;
156
+ }
157
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody {
158
+ display: flex;
159
+ flex-direction: column;
160
+ }
161
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody tr {
162
+ padding-bottom: 10px;
163
+ width: 100%;
164
+ display: flex;
165
+ align-items: center;
166
+ flex-direction: row;
167
+ }
168
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody tr th {
169
+ padding: 10px 0 0 0 !important;
170
+ vertical-align: middle !important;
171
+ display: flex;
172
+ width: 85%;
173
+ }
174
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody tr th .rsssl-settings-text {
175
+ font-weight: normal;
176
+ }
177
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody tr th .rsssl-tooltip-right {
178
+ padding-right: 15px;
179
+ }
180
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody tr td {
181
+ text-align: right;
182
+ padding: 0;
183
+ margin: 0;
184
+ }
185
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings h2 {
186
+ display: none;
187
+ }
188
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks-element {
189
+ display: flex;
190
+ justify-content: space-between;
191
+ margin-right: 10px;
192
+ }
193
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks-element .rsssl-tips-tricks-content {
194
+ width: 80%;
195
+ color: #3c3c3c;
196
+ padding-bottom: 15px;
197
+ }
198
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks-read-more a {
199
+ text-decoration: none;
200
+ }
201
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .tips-tricks-bottom {
202
+ position: absolute;
203
+ bottom: 85px;
204
+ color: #3c3c3c;
205
+ }
206
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-bullet {
207
+ height: 15px;
208
+ width: 15px;
209
+ border-radius: 50%;
210
+ margin-right: 10px;
211
+ background-color: lightgrey;
212
+ text-decoration: none;
213
+ }
214
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container {
215
+ display: flex;
216
+ flex-wrap: wrap;
217
+ flex-direction: row;
218
+ }
219
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums {
220
+ display: flex;
221
+ width: 50%;
222
+ }
223
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums a {
224
+ text-decoration: none;
225
+ color: #3c3c3c;
226
+ display: flex;
227
+ align-items: center;
228
+ }
229
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-bullet {
230
+ margin: 7px;
231
+ background-color: lightgrey;
232
+ float: left;
233
+ }
234
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-bullet:hover {
235
+ background-color: #FBC43D;
236
+ }
237
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-forums-content {
238
+ float: left;
239
+ color: #3c3c3c;
240
+ }
241
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-forums-content:hover {
242
+ text-decoration: underline;
243
+ }
244
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-feedback {
245
+ color: red;
246
+ }
247
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell {
248
+ display: flex !important;
249
+ flex-direction: row;
250
+ padding: 6px;
251
+ align-items: center;
252
+ color: #3c3c3c;
253
+ }
254
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .wpsi-red {
255
+ background-color: red;
256
+ }
257
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .cmplz-blue {
258
+ background-color: #27ADEA;
259
+ }
260
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .zip-pink {
261
+ background-color: #E366A1;
262
+ }
263
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .plugin-status {
264
+ margin-left: auto;
265
+ }
266
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-status {
267
+ display: block;
268
+ min-width: 60px;
269
+ text-align: center;
270
+ border-radius: 15px;
271
+ padding: 3px;
272
+ font-size: 0.8em;
273
+ font-weight: 600;
274
+ }
275
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-premium {
276
+ background-color: #FBC43D;
277
+ }
278
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-success {
279
+ background-color: #61ce70;
280
+ color: white;
281
+ }
282
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-open {
283
+ background-color: #FBC43D;
284
+ }
285
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-warning {
286
+ background-color: red;
287
+ color: white;
288
+ }
289
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer {
290
+ display: flex;
291
+ align-items: center;
292
+ margin: 10px;
293
+ height: 50px;
294
+ bottom: 0;
295
+ width: 95%;
296
+ }
297
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer .button-primary {
298
+ justify-content: flex-start;
299
+ }
300
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer #rsssl-feedback {
301
+ font-weight: 600;
302
+ color: #61ce70;
303
+ padding-left: 10px;
304
+ }
305
+ .rsssl-grid .rsssl-item .item-container .rsssl-deactivate-keep-ssl th,
306
+ .rsssl-grid .rsssl-item .item-container .rsssl-deactivate-keep-ssl span {
307
+ display: none;
308
+ }
309
+ .rsssl-grid .rsssl-item.half-height .item-container {
310
+ height: 237.5px;
311
+ }
312
+ .rsssl-grid .rsssl-item.half-height .item-container .rsssl-grid-item-content {
313
+ height: 100px;
314
+ }
315
+ .rsssl-grid .rsssl-item.small .item-container {
316
+ width: 380px;
317
+ }
318
+ .rsssl-grid .rsssl-item.no-border .item-container {
319
+ border: none;
320
+ }
321
+ .rsssl-grid .rsssl-item.no-background .item-container {
322
+ background-color: #f2f2f2;
323
+ }
324
+ .rsssl-grid #rsssl-progress-footer {
325
+ width: 100%;
326
+ text-align: right;
327
+ margin-right: 10px;
328
+ }
329
+ .rsssl-grid #rsssl-progress-footer .footer-left {
330
+ margin-left: 0 !important;
331
+ float: left;
332
+ margin-top: -5px;
333
+ font-weight: 600;
334
+ }
335
+ .rsssl-grid #rsssl-progress-footer .footer-left .upsell {
336
+ min-width: 80px;
337
+ }
338
+ .rsssl-grid #rsssl-progress-footer .rsssl-footer-item {
339
+ margin-left: 20px;
340
+ }
341
+ .rsssl-grid .rsssl-system-status-footer-info {
342
+ font-size: 0.9em;
343
+ width: 100%;
344
+ text-align: right;
345
+ }
346
+ .rsssl-grid .rsssl-system-status-footer-info .system-status-info {
347
+ margin-left: 6px;
348
+ }
349
+ .rsssl-grid .dot {
350
+ height: 10px;
351
+ width: 10px;
352
+ border-radius: 50%;
353
+ display: inline-block;
354
+ }
355
+ .rsssl-grid .rsssl-dot-success {
356
+ background-color: #61ce70;
357
+ }
358
+ .rsssl-grid .rsssl-dot-error {
359
+ background-color: #d7263d;
360
+ }
361
+ /*# sourceMappingURL=grid-rtl.css.map */
grid/css/grid-rtl.css.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["grid-rtl.less"],"names":[],"mappings":"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","file":"grid-rtl.css"}
grid/css/grid-rtl.less ADDED
@@ -0,0 +1,441 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @gridblock_height: 475px;
2
+ @gridblock_width: 800px;
3
+ @gridblock_width_small:400px;
4
+ @grid_margin: 10px;
5
+ @grey_light:#cecece;
6
+ @box_shadow_color: rgba(222, 222, 222, 0.2);
7
+ @border_color: #dedede;
8
+ @color-success: #61ce70;
9
+ @color_warning: red;
10
+ @color_open: #FBC43D;
11
+ @light-text-color: #3c3c3c;
12
+ @light-grey: lightgrey;
13
+
14
+ // Override default WP settings style
15
+ #wpcontent {
16
+ padding: 0;
17
+
18
+ .nav-tab-wrapper {
19
+ height: 60px;
20
+ background-color: #fff;
21
+ display: flex;
22
+ align-items: center;
23
+ }.nav-tab {
24
+ background: inherit;
25
+ border: 0;
26
+ }
27
+ .rsssl-logo-container {
28
+ margin-left: 25px;
29
+ margin-bottom: 10px;
30
+ }
31
+ .header-links {
32
+ display: flex;
33
+ flex: 1;
34
+ justify-content: flex-end;
35
+ flex-direction: row;
36
+ align-items: center;
37
+ margin-right: 140px;
38
+ .documentation {
39
+ padding-right: 25px;
40
+ }
41
+ }
42
+ }
43
+
44
+ .rsssl-grid {
45
+ margin-left: 25px;
46
+ position: relative;
47
+ display: flex;
48
+ flex-direction: row;
49
+ flex-wrap: wrap;
50
+
51
+ .rsssl-item {
52
+ width: @gridblock_width;
53
+ &.small {
54
+ width: @gridblock_width_small;
55
+ }
56
+ &.settings {
57
+ .item-container {
58
+ .rsssl-grid-item-footer {
59
+ justify-content: flex-start;
60
+ }
61
+ }
62
+ }
63
+ //position: absolute;
64
+ height: @gridblock_height;
65
+ z-index: 1;
66
+ .item-container {
67
+ //border: 1px solid @border_color;
68
+ background-color: #fff;
69
+ position: relative;
70
+ box-shadow: 0px 0px 5px 5px @box_shadow_color;
71
+ //margin-left: @grid_margin;
72
+ width: @gridblock_width - 2* @grid_margin;
73
+ height: @gridblock_height - 2 * @grid_margin;
74
+ .rsssl-grid-item-header {
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: space-between;
78
+ margin-top: @grid_margin;
79
+ //margin-left: @grid_margin;
80
+ height: 60px;
81
+ border-bottom: 1px solid @border_color;
82
+ h3 {
83
+ margin-left: 15px;
84
+ }
85
+ .rsssl-secondary-header-item {
86
+ display: flex;
87
+ color: @light-text-color;
88
+ margin-right: 10px;
89
+ .open-task-count {
90
+ padding-left: 3px;
91
+ }
92
+ .rsssl-save-settings-feedback {
93
+ color: @color_warning;
94
+ }
95
+ }
96
+ }
97
+ .rsssl-table-td-main-content {
98
+ padding-left: 15px;
99
+ }
100
+ .rsssl-grid-item-content {
101
+ height: 310px;
102
+ margin: 10px 10px 15px 15px;
103
+ //margin: @grid_margin;
104
+ border-bottom: 1px solid @border_color;
105
+ //overflow-y: scroll;
106
+ overflow-x: hidden;
107
+
108
+ /*
109
+ Progress bar
110
+ */
111
+
112
+ .progress-bar-container {
113
+ margin: 15px 15px 15px 0;
114
+ }
115
+
116
+ .progress {
117
+ overflow: hidden;
118
+ height: 20px;
119
+ border-radius: 5px;
120
+ background-color: #f7f7f7;
121
+ }
122
+
123
+ .progress .bar {
124
+ height: 100%;
125
+ background-color: @color-success;
126
+
127
+ }
128
+
129
+ .progress-text {
130
+ display: flex;
131
+ align-items: center;
132
+ margin: 10px;
133
+ padding-top: 10px;
134
+ padding-bottom: 10px;
135
+ .rsssl-progress-percentage {
136
+ font-size: 32px;
137
+ font-weight: 900;
138
+ }
139
+ .rsssl-progress-text {
140
+ display: flex;
141
+ flex-direction: row;
142
+ margin-left: @grid_margin;
143
+ a {
144
+ margin-left: 3px;
145
+ }
146
+ .rsssl-progress-count {
147
+ margin-left: 3px;
148
+ margin-right: 3px;
149
+ }
150
+ }
151
+ }
152
+
153
+ /*
154
+ Settings
155
+ */
156
+
157
+ .rsssl-settings {
158
+ .form-table {
159
+ overflow: hidden;
160
+ .dashicons-editor-help {
161
+ font-size: 20px;
162
+ }
163
+
164
+ tbody {
165
+ display: flex;
166
+ flex-direction: column;
167
+
168
+ tr {
169
+ padding-bottom: @grid_margin;
170
+ width: 100%;
171
+ display: flex;
172
+ align-items: center;
173
+ flex-direction: row;
174
+
175
+ th {
176
+ // Important to override default WP style
177
+ padding: 10px 0 0 0 !important;
178
+ vertical-align: middle !important;
179
+ display: flex;
180
+ width: 85%;
181
+ .rsssl-settings-text {
182
+ font-weight: normal;
183
+ }
184
+ .rsssl-tooltip-right {
185
+ padding-right: 15px;
186
+ }
187
+ }
188
+
189
+ td {
190
+ text-align: right;
191
+ padding: 0;
192
+ margin: 0;
193
+ }
194
+ }
195
+ }
196
+ }
197
+ h2 {
198
+ display: none;
199
+ }
200
+ // Hide save button
201
+ .button-primary {
202
+ //display: none;
203
+ }
204
+ }
205
+
206
+ /*
207
+ Tips and Tricks
208
+ */
209
+ .rsssl-tips-tricks-element {
210
+ display: flex;
211
+ justify-content: space-between;
212
+ margin-right: @grid_margin;
213
+ .rsssl-tips-tricks-content {
214
+ width: 80%;
215
+ color: @light-text-color;
216
+ padding-bottom: 15px;
217
+ }
218
+ }
219
+ .rsssl-tips-tricks-read-more a {
220
+ text-decoration: none;
221
+ }
222
+ .tips-tricks-bottom {
223
+ position: absolute;
224
+ bottom: 85px;
225
+ color: @light-text-color;
226
+ }
227
+ // End tips and tricks
228
+
229
+ /*
230
+ Default bullet style
231
+ */
232
+ .rsssl-bullet {
233
+ height: 15px;
234
+ width: 15px;
235
+ border-radius: 50%;
236
+ margin-right: 10px;
237
+ background-color: lightgrey;
238
+ text-decoration: none;
239
+ }
240
+
241
+ /*
242
+ Support forum block
243
+ */
244
+
245
+ #rsssl-support-forums-container {
246
+ display: flex;
247
+ flex-wrap: wrap;
248
+ flex-direction: row;
249
+ .rsssl-support-forums {
250
+ display: flex;
251
+ width: 50%;
252
+ a {
253
+ text-decoration: none;
254
+ color: @light-text-color;
255
+ display: flex;
256
+ align-items: center;
257
+ &:hover {
258
+ //color: @color_open;
259
+ }
260
+ }
261
+
262
+ .rsssl-bullet {
263
+ margin: 7px;
264
+ background-color: @light-grey;
265
+ float: left;
266
+ &:hover {
267
+ background-color: @color_open;
268
+ }
269
+ }
270
+
271
+ .rsssl-forums-content {
272
+ float: left;
273
+ color: @light-text-color;
274
+ &:hover {
275
+ text-decoration: underline;
276
+ }
277
+ }
278
+ }
279
+ }
280
+
281
+ #rsssl-feedback {
282
+ color: red;
283
+ }
284
+
285
+ /*
286
+ Other plugins
287
+ */
288
+
289
+ .rsssl-upsell {
290
+ display: flex !important; //we need important here, because the grid switch overrides it on element level
291
+ flex-direction: row;
292
+ padding: 6px;
293
+ align-items: center;
294
+ color: @light-text-color;
295
+
296
+ .wpsi-red {
297
+ background-color: red;
298
+ }
299
+
300
+ .cmplz-blue {
301
+ background-color: #27ADEA;
302
+ }
303
+
304
+ .zip-pink {
305
+ background-color: #E366A1;
306
+ }
307
+
308
+ .plugin-status {
309
+ margin-left: auto;
310
+ }
311
+ }
312
+
313
+ /*
314
+ Other plugins
315
+ */
316
+
317
+ /*
318
+ Progress labels
319
+ */
320
+ .rsssl-progress-status {
321
+ display: block;
322
+ min-width: 60px;
323
+ text-align: center;
324
+ border-radius: 15px;
325
+ padding: 3px;
326
+ font-size: 0.8em;
327
+ font-weight: 600;
328
+ }
329
+
330
+ .rsssl-premium {
331
+ background-color: @color_open;
332
+ }
333
+ .rsssl-success {
334
+ background-color: @color-success;
335
+ color: white;
336
+ }
337
+
338
+ .rsssl-open {
339
+ background-color: @color_open;
340
+ }
341
+
342
+ .rsssl-warning {
343
+ background-color: @color_warning;
344
+ color: white;
345
+ }
346
+
347
+ }
348
+ .rsssl-grid-item-footer {
349
+ display: flex;
350
+ align-items: center;
351
+ //justify-content: flex-end;
352
+ //position: absolute;
353
+ margin: @grid_margin;
354
+ height: 50px;
355
+ bottom: 0;
356
+ width: 95%;
357
+ .button-primary {
358
+ justify-content: flex-start;
359
+ }
360
+ #rsssl-feedback {
361
+ font-weight: 600;
362
+ color: @color-success;
363
+ padding-left: 10px;
364
+ }
365
+ }
366
+ .rsssl-deactivate-keep-ssl {
367
+ th, span {
368
+ display: none;
369
+ }
370
+ }
371
+
372
+ }
373
+ &.half-height {
374
+ .item-container {
375
+ height: @gridblock_height / 2;
376
+ .rsssl-grid-item-content {
377
+ height: 100px;
378
+ }
379
+ }
380
+ }
381
+ &.small {
382
+ .item-container {
383
+ width: @gridblock_width_small - 2* @grid_margin;
384
+ }
385
+ }
386
+ &.no-border {
387
+ .item-container {
388
+ border: none;
389
+ }
390
+ }
391
+ &.no-background {
392
+ .item-container {
393
+ background-color: #f2f2f2;
394
+ //border: 1px solid @border_color;
395
+ }
396
+ }
397
+ }
398
+ /*
399
+ Footers
400
+ */
401
+ #rsssl-progress-footer {
402
+ width: 100%;
403
+ text-align: right;
404
+ margin-right: @grid_margin;
405
+ .footer-left {
406
+ margin-left: 0 !important;
407
+ float: left;
408
+ margin-top: -5px;
409
+ font-weight: 600;
410
+ .upsell {
411
+ min-width: 80px;
412
+ }
413
+ }
414
+ .rsssl-footer-item {
415
+ margin-left: 20px;
416
+ }
417
+ }
418
+ .rsssl-system-status-footer-info {
419
+ font-size: 0.9em;
420
+ width: 100%;
421
+ text-align: right;
422
+ .system-status-info {
423
+ margin-left: 6px;
424
+ }
425
+ }
426
+ /*
427
+ Dots
428
+ */
429
+ .dot {
430
+ height: 10px;
431
+ width: 10px;
432
+ border-radius: 50%;
433
+ display: inline-block;
434
+ }
435
+ .rsssl-dot-success {
436
+ background-color: #61ce70;
437
+ }
438
+ .rsssl-dot-error {
439
+ background-color: #d7263d;
440
+ }
441
+ }
grid/css/grid-rtl.min.css ADDED
@@ -0,0 +1 @@
 
1
+ #wpcontent{padding:0}#wpcontent .nav-tab-wrapper{height:60px;background-color:#fff;display:flex;align-items:center}#wpcontent .nav-tab{background:inherit;border:0}#wpcontent .rsssl-logo-container{margin-left:25px;margin-bottom:10px}#wpcontent .header-links{display:flex;flex:1;justify-content:flex-end;flex-direction:row;align-items:center;margin-right:140px}#wpcontent .header-links .documentation{padding-right:25px}.rsssl-grid{margin-left:25px;position:relative;display:flex;flex-direction:row;flex-wrap:wrap}.rsssl-grid .rsssl-item{width:800px;height:475px;z-index:1}.rsssl-grid .rsssl-item.small{width:400px}.rsssl-grid .rsssl-item.settings .item-container .rsssl-grid-item-footer{justify-content:flex-start}.rsssl-grid .rsssl-item .item-container{background-color:#fff;position:relative;box-shadow:0 0 5px 5px rgba(222,222,222,0.2);width:780px;height:455px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header{display:flex;align-items:center;justify-content:space-between;margin-top:10px;height:60px;border-bottom:1px solid #dedede}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header h3{margin-left:15px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item{display:flex;color:#3c3c3c;margin-right:10px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item .open-task-count{padding-left:3px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item .rsssl-save-settings-feedback{color:red}.rsssl-grid .rsssl-item .item-container .rsssl-table-td-main-content{padding-left:15px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content{height:310px;margin:10px 10px 15px 15px;border-bottom:1px solid #dedede;overflow-x:hidden}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-bar-container{margin:15px 15px 15px 0}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress{overflow:hidden;height:20px;border-radius:5px;background-color:#f7f7f7}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress .bar{height:100%;background-color:#61ce70}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-text{display:flex;align-items:center;margin:10px;padding-top:10px;padding-bottom:10px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-text .rsssl-progress-percentage{font-size:32px;font-weight:900}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-text .rsssl-progress-text{display:flex;flex-direction:row;margin-left:10px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-text .rsssl-progress-text a{margin-left:3px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .progress-text .rsssl-progress-text .rsssl-progress-count{margin-left:3px;margin-right:3px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table{overflow:hidden}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table .dashicons-editor-help{font-size:20px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody{display:flex;flex-direction:column}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody tr{padding-bottom:10px;width:100%;display:flex;align-items:center;flex-direction:row}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody tr th{padding:10px 0 0 0 !important;vertical-align:middle !important;display:flex;width:85%}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody tr th .rsssl-settings-text{font-weight:normal}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody tr th .rsssl-tooltip-right{padding-right:15px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings .form-table tbody tr td{text-align:right;padding:0;margin:0}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-settings h2{display:none}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks-element{display:flex;justify-content:space-between;margin-right:10px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks-element .rsssl-tips-tricks-content{width:80%;color:#3c3c3c;padding-bottom:15px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks-read-more a{text-decoration:none}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .tips-tricks-bottom{position:absolute;bottom:85px;color:#3c3c3c}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-bullet{height:15px;width:15px;border-radius:50%;margin-right:10px;background-color:lightgrey;text-decoration:none}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container{display:flex;flex-wrap:wrap;flex-direction:row}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums{display:flex;width:50%}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums a{text-decoration:none;color:#3c3c3c;display:flex;align-items:center}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-bullet{margin:7px;background-color:lightgrey;float:left}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-bullet:hover{background-color:#fbc43d}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-forums-content{float:left;color:#3c3c3c}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-forums-content:hover{text-decoration:underline}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-feedback{color:red}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell{display:flex !important;flex-direction:row;padding:6px;align-items:center;color:#3c3c3c}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .wpsi-red{background-color:red}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .cmplz-blue{background-color:#27adea}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .zip-pink{background-color:#e366a1}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .plugin-status{margin-left:auto}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-status{display:block;min-width:60px;text-align:center;border-radius:15px;padding:3px;font-size:.8em;font-weight:600}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-premium{background-color:#fbc43d}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-success{background-color:#61ce70;color:white}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-open{background-color:#fbc43d}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-warning{background-color:red;color:white}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer{display:flex;align-items:center;margin:10px;height:50px;bottom:0;width:95%}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer .button-primary{justify-content:flex-start}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer #rsssl-feedback{font-weight:600;color:#61ce70;padding-left:10px}.rsssl-grid .rsssl-item .item-container .rsssl-deactivate-keep-ssl th,.rsssl-grid .rsssl-item .item-container .rsssl-deactivate-keep-ssl span{display:none}.rsssl-grid .rsssl-item.half-height .item-container{height:237.5px}.rsssl-grid .rsssl-item.half-height .item-container .rsssl-grid-item-content{height:100px}.rsssl-grid .rsssl-item.small .item-container{width:380px}.rsssl-grid .rsssl-item.no-border .item-container{border:0}.rsssl-grid .rsssl-item.no-background .item-container{background-color:#f2f2f2}.rsssl-grid #rsssl-progress-footer{width:100%;text-align:right;margin-right:10px}.rsssl-grid #rsssl-progress-footer .footer-left{margin-left:0 !important;float:left;margin-top:-5px;font-weight:600}.rsssl-grid #rsssl-progress-footer .footer-left .upsell{min-width:80px}.rsssl-grid #rsssl-progress-footer .rsssl-footer-item{margin-left:20px}.rsssl-grid .rsssl-system-status-footer-info{font-size:.9em;width:100%;text-align:right}.rsssl-grid .rsssl-system-status-footer-info .system-status-info{margin-left:6px}.rsssl-grid .dot{height:10px;width:10px;border-radius:50%;display:inline-block}.rsssl-grid .rsssl-dot-success{background-color:#61ce70}.rsssl-grid .rsssl-dot-error{background-color:#d7263d}
grid/css/grid.css ADDED
@@ -0,0 +1,678 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent,
2
+ .settings_page_really-simple-ssl #wpcontent {
3
+ padding: 0;
4
+ }
5
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .rsssl-footer-item form,
6
+ .settings_page_really-simple-ssl #wpcontent .rsssl-footer-item form {
7
+ float: left;
8
+ }
9
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .nav-tab,
10
+ .settings_page_really-simple-ssl #wpcontent .nav-tab {
11
+ padding: 17px 20px 19px 20px;
12
+ margin-bottom: 0;
13
+ color: #444;
14
+ font-weight: normal;
15
+ font-size: 1.2em;
16
+ background: inherit;
17
+ border: 0;
18
+ }
19
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .nav-tab.nav-tab-active,
20
+ .settings_page_really-simple-ssl #wpcontent .nav-tab.nav-tab-active {
21
+ border-bottom: 2px solid #FBC43D !important;
22
+ background: #fff;
23
+ padding-bottom: 17px;
24
+ }
25
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .nav-tab-wrapper,
26
+ .settings_page_really-simple-ssl #wpcontent .nav-tab-wrapper {
27
+ height: 60px;
28
+ background-color: #fff;
29
+ display: flex;
30
+ align-items: center;
31
+ border: 0;
32
+ }
33
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .rsssl-logo-container,
34
+ .settings_page_really-simple-ssl #wpcontent .rsssl-logo-container {
35
+ margin-left: 25px;
36
+ }
37
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .rsssl-logo-container #rsssl-logo,
38
+ .settings_page_really-simple-ssl #wpcontent .rsssl-logo-container #rsssl-logo {
39
+ height: 40px;
40
+ width: 200px;
41
+ }
42
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .rsssl-logo-container #rsssl-logo img,
43
+ .settings_page_really-simple-ssl #wpcontent .rsssl-logo-container #rsssl-logo img {
44
+ width: 200px;
45
+ }
46
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .header-links,
47
+ .settings_page_really-simple-ssl #wpcontent .header-links {
48
+ display: flex;
49
+ flex: 1;
50
+ justify-content: flex-end;
51
+ flex-direction: row;
52
+ align-items: center;
53
+ margin-right: 20px;
54
+ }
55
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .header-links .documentation,
56
+ .settings_page_really-simple-ssl #wpcontent .header-links .documentation {
57
+ text-decoration: underline;
58
+ }
59
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .header-links .header-upsell .documentation,
60
+ .settings_page_really-simple-ssl #wpcontent .header-links .header-upsell .documentation {
61
+ margin-left: 25px;
62
+ }
63
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .header-links .header-upsell a,
64
+ .settings_page_really-simple-ssl #wpcontent .header-links .header-upsell a {
65
+ text-decoration: none;
66
+ }
67
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent .header-links .header-upsell .header-upsell-pro,
68
+ .settings_page_really-simple-ssl #wpcontent .header-links .header-upsell .header-upsell-pro {
69
+ color: black;
70
+ border: 3px solid black;
71
+ margin: 10px;
72
+ width: 80px;
73
+ text-align: center;
74
+ padding: 5px;
75
+ border-radius: 20px;
76
+ font-weight: 600;
77
+ }
78
+ .network-admin .rsssl-logo-container {
79
+ height: 60px;
80
+ }
81
+ .rsssl-grid {
82
+ width: calc(100% - 20px);
83
+ margin: 10px;
84
+ position: relative;
85
+ display: flex;
86
+ flex-direction: row;
87
+ flex-wrap: wrap;
88
+ /*
89
+ Footers
90
+ */
91
+ /*
92
+ Dots
93
+ */
94
+ }
95
+ .rsssl-grid .button-rsssl-tertiary {
96
+ background-color: #D7263D;
97
+ color: white;
98
+ border: 0;
99
+ }
100
+ .rsssl-grid .rsssl-wide-button {
101
+ width: 220px;
102
+ }
103
+ .rsssl-grid .rsssl-progress .rsssl-task-list {
104
+ height: 257px;
105
+ overflow: hidden;
106
+ }
107
+ .rsssl-grid .rsssl-progress .rsssl-toggle-active {
108
+ text-decoration: underline;
109
+ }
110
+ .rsssl-grid .rsssl-progress #rsssl-all-tasks,
111
+ .rsssl-grid .rsssl-progress #rsssl-remaining-tasks {
112
+ display: none;
113
+ }
114
+ .rsssl-grid .rsssl-progress .rsssl-tasks-container {
115
+ border-bottom: 1px solid lightgrey;
116
+ color: lightgrey;
117
+ }
118
+ .rsssl-grid .rsssl-progress .rsssl-tasks-container.active {
119
+ text-decoration: none;
120
+ border-bottom: 0;
121
+ color: initial;
122
+ }
123
+ .rsssl-grid .rsssl-progress .rsssl-tasks-inactive {
124
+ text-decoration: underline;
125
+ color: lightgrey;
126
+ }
127
+ .rsssl-grid .rsssl-item {
128
+ width: 800px;
129
+ height: 485px;
130
+ z-index: 1;
131
+ }
132
+ .rsssl-grid .rsssl-item.small {
133
+ width: 400px;
134
+ }
135
+ .rsssl-grid .rsssl-item .rsssl-close-warning-x {
136
+ color: #ccc;
137
+ font-size: 0.9em;
138
+ margin-right: 25px;
139
+ }
140
+ .rsssl-grid .rsssl-item .item-container {
141
+ background-color: #fff;
142
+ position: relative;
143
+ box-shadow: 0px 0px 5px 5px rgba(222, 222, 222, 0.2);
144
+ width: 790px;
145
+ height: 475px;
146
+ }
147
+ .rsssl-grid .rsssl-item .item-container .form-table {
148
+ display: flex;
149
+ }
150
+ .rsssl-grid .rsssl-item .item-container .form-table tbody {
151
+ display: flex;
152
+ flex-direction: column;
153
+ flex-wrap: wrap;
154
+ max-height: 340px;
155
+ width: 100% !important;
156
+ }
157
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr {
158
+ padding: 0 0 0 0 !important;
159
+ display: flex;
160
+ align-items: center;
161
+ flex-direction: row;
162
+ width: 50%;
163
+ }
164
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr td {
165
+ padding: 0;
166
+ margin: 0;
167
+ }
168
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr th {
169
+ margin-left: 0;
170
+ width: 250px;
171
+ display: flex;
172
+ align-items: center;
173
+ font-size: 13px;
174
+ font-weight: normal;
175
+ }
176
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr th .dashicons-editor-help {
177
+ font-size: 26px;
178
+ }
179
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr th .rsssl-tooltip-right {
180
+ padding-right: 10px;
181
+ margin-top: -4px;
182
+ }
183
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr th,
184
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr td {
185
+ padding: 10px 0 !important;
186
+ font-size: 13px;
187
+ }
188
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr th p,
189
+ .rsssl-grid .rsssl-item .item-container .form-table tbody tr td p {
190
+ font-size: 13px;
191
+ }
192
+ .rsssl-grid .rsssl-item .item-container h2 {
193
+ display: none;
194
+ }
195
+ .rsssl-grid .rsssl-item .item-container .rsssl-save-settings-feedback {
196
+ margin-right: 20px;
197
+ color: #d7263d;
198
+ }
199
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header {
200
+ display: flex;
201
+ align-items: center;
202
+ justify-content: space-between;
203
+ height: 60px;
204
+ border-bottom: 1px solid #dedede;
205
+ padding: 0 25px 0 25px;
206
+ }
207
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-instructions a {
208
+ color: #3c3c3c;
209
+ }
210
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item {
211
+ display: flex;
212
+ color: #3c3c3c;
213
+ }
214
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item .all-task-count,
215
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item .open-task-count {
216
+ padding-left: 3px;
217
+ padding-top: 3px;
218
+ }
219
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item .all-task-count {
220
+ margin-right: 5px;
221
+ }
222
+ .rsssl-grid .rsssl-item .item-container .rsssl-table-td-main-content {
223
+ padding-left: 15px;
224
+ }
225
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content {
226
+ height: 360px;
227
+ margin: 10px 25px 10px 25px;
228
+ border-bottom: 1px solid #dedede;
229
+ /*
230
+ Progress block
231
+ */
232
+ /*
233
+ Tips and Tricks
234
+ */
235
+ /*
236
+ Default bullet style
237
+ */
238
+ /*
239
+ Support forum block
240
+ */
241
+ /*
242
+ Other plugins
243
+ */
244
+ /*
245
+ Progress labels
246
+ */
247
+ }
248
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block {
249
+ padding-top: 10px;
250
+ }
251
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-bar-container {
252
+ margin: 0 0 25px 0;
253
+ }
254
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress {
255
+ overflow: hidden;
256
+ height: 20px;
257
+ border-radius: 5px;
258
+ background-color: #f7f7f7;
259
+ }
260
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress .bar {
261
+ height: 100%;
262
+ background-color: #61ce70;
263
+ }
264
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-text {
265
+ display: flex;
266
+ align-items: center;
267
+ margin: 10px 0;
268
+ padding-top: 10px;
269
+ padding-bottom: 10px;
270
+ }
271
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-text .rsssl-progress-percentage {
272
+ font-size: 32px;
273
+ font-weight: 700;
274
+ }
275
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-text .rsssl-progress-text {
276
+ display: flex;
277
+ flex-direction: row;
278
+ margin-left: 10px;
279
+ }
280
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-text .rsssl-progress-text a {
281
+ margin-left: 3px;
282
+ }
283
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-text .rsssl-progress-text .rsssl-progress-count {
284
+ margin-left: 3px;
285
+ margin-right: 3px;
286
+ }
287
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .rsssl-progress-table td {
288
+ padding: 10px 10px 10px 0;
289
+ }
290
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .rsssl-progress-table td + td {
291
+ padding-left: 15px;
292
+ }
293
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks {
294
+ color: #3c3c3c;
295
+ padding-bottom: 15px;
296
+ }
297
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .tips-tricks-content {
298
+ display: flex;
299
+ flex-direction: column;
300
+ margin-right: 10px;
301
+ height: 340px;
302
+ }
303
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .tips-tricks-content .tips-tricks-top {
304
+ flex-grow: 1;
305
+ }
306
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .tips-tricks-content .tips-tricks-top .rsssl-tips-tricks-element {
307
+ margin-top: 10px;
308
+ margin-bottom: 15px;
309
+ display: flex;
310
+ flex-direction: row;
311
+ justify-content: space-between;
312
+ }
313
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .tips-tricks-content .tips-tricks-top .rsssl-tips-tricks-content {
314
+ padding-right: 20px;
315
+ }
316
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .tips-tricks-content .tips-tricks-bottom {
317
+ color: #3c3c3c;
318
+ }
319
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .rsssl-tips-tricks-read-more a {
320
+ text-decoration: none;
321
+ white-space: nowrap;
322
+ }
323
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-bullet {
324
+ height: 13px;
325
+ width: 13px;
326
+ border-radius: 50%;
327
+ margin-right: 10px;
328
+ background-color: lightgrey;
329
+ text-decoration: none;
330
+ }
331
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container {
332
+ display: flex;
333
+ flex-wrap: wrap;
334
+ flex-direction: row;
335
+ }
336
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums {
337
+ display: flex;
338
+ width: 50%;
339
+ }
340
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums a {
341
+ text-decoration: none;
342
+ color: #3c3c3c;
343
+ display: flex;
344
+ align-items: center;
345
+ }
346
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-bullet {
347
+ margin: 7px 7px 7px 0;
348
+ background-color: lightgrey;
349
+ float: left;
350
+ }
351
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-bullet:hover {
352
+ background-color: #FBC43D;
353
+ }
354
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-forums-content {
355
+ float: left;
356
+ color: #3c3c3c;
357
+ }
358
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-forums-content:hover {
359
+ text-decoration: underline;
360
+ }
361
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-feedback {
362
+ color: #d7263d;
363
+ }
364
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell {
365
+ display: flex !important;
366
+ flex-direction: row;
367
+ padding: 5px 0 5px 0;
368
+ align-items: center;
369
+ color: #3c3c3c;
370
+ }
371
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .plugin-text a {
372
+ text-decoration: none;
373
+ color: #3c3c3c;
374
+ }
375
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .plugin-text a:hover {
376
+ color: #FBC43D;
377
+ }
378
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .rsp-image {
379
+ margin-right: 5px;
380
+ }
381
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .wpsi-red {
382
+ background-color: #d7263d;
383
+ }
384
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .cmplz-blue {
385
+ background-color: #27ADEA;
386
+ }
387
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .zip-pink {
388
+ background-color: #E366A1;
389
+ }
390
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .plugin-status {
391
+ margin-left: auto;
392
+ }
393
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-status {
394
+ display: block;
395
+ min-width: 60px;
396
+ text-align: center;
397
+ border-radius: 15px;
398
+ padding: 4px 8px 4px 8px;
399
+ font-size: 0.8em;
400
+ font-weight: 600;
401
+ height: 17px;
402
+ line-height: 17px;
403
+ }
404
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-premium {
405
+ background-color: #29b6f6;
406
+ color: white;
407
+ }
408
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-success {
409
+ background-color: #61ce70;
410
+ color: white;
411
+ }
412
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-open {
413
+ background-color: #FBC43D;
414
+ }
415
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-warning {
416
+ background-color: #d7263d;
417
+ color: white;
418
+ }
419
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer {
420
+ display: flex;
421
+ align-items: center;
422
+ margin: 14px 25px 0 25px;
423
+ height: 40px;
424
+ bottom: 0;
425
+ width: 95%;
426
+ }
427
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer .rsssl-button-save {
428
+ margin-right: 25px;
429
+ }
430
+ .rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer #rsssl-feedback {
431
+ font-weight: 600;
432
+ color: #61ce70;
433
+ padding-left: 10px;
434
+ }
435
+ .rsssl-grid .rsssl-item .item-container .rsssl-deactivate-keep-ssl th,
436
+ .rsssl-grid .rsssl-item .item-container .rsssl-deactivate-keep-ssl span {
437
+ display: none;
438
+ }
439
+ .rsssl-grid .rsssl-item.half-height {
440
+ height: 247.5px;
441
+ }
442
+ .rsssl-grid .rsssl-item.half-height .item-container {
443
+ height: 237.5px;
444
+ }
445
+ .rsssl-grid .rsssl-item.half-height .item-container .rsssl-grid-item-content {
446
+ height: 110px;
447
+ }
448
+ .rsssl-grid .rsssl-item.half-height .item-container .rsssl-grid-item-content .form-table tbody tr,
449
+ .rsssl-grid .rsssl-item.half-height .item-container .rsssl-grid-item-content .form-table tbody th {
450
+ width: 100%;
451
+ max-width: 100%;
452
+ }
453
+ .rsssl-grid .rsssl-item.small .item-container {
454
+ width: 390px;
455
+ }
456
+ .rsssl-grid .rsssl-item.small .item-container th {
457
+ width: 85% !important;
458
+ }
459
+ .rsssl-grid .rsssl-item.small .item-container .form-table tbody tr {
460
+ width: 100%;
461
+ }
462
+ .rsssl-grid .rsssl-item.no-border .item-container {
463
+ border: none;
464
+ }
465
+ .rsssl-grid .rsssl-item.no-background .item-container {
466
+ background-color: #f2f2f2;
467
+ }
468
+ .rsssl-grid #rsssl-progress-footer {
469
+ width: 100%;
470
+ text-align: right;
471
+ margin-right: 10px;
472
+ }
473
+ .rsssl-grid #rsssl-progress-footer .rsssl-footer-item {
474
+ padding-right: 5px;
475
+ }
476
+ .rsssl-grid #rsssl-progress-footer .rsssl-footer-item form {
477
+ float: left;
478
+ }
479
+ .rsssl-grid #rsssl-progress-footer .rsssl-footer-item + .rsssl-footer-item {
480
+ margin-right: 20px;
481
+ }
482
+ .rsssl-grid #rsssl-progress-footer .footer-left {
483
+ float: left;
484
+ }
485
+ .rsssl-grid #rsssl-progress-footer .footer-left .upsell {
486
+ min-width: 80px;
487
+ text-align: center;
488
+ }
489
+ .rsssl-grid #rsssl-progress-footer .footer-right {
490
+ float: right;
491
+ }
492
+ .rsssl-grid #rsssl-progress-footer .hidden {
493
+ display: none;
494
+ }
495
+ .rsssl-grid .rsssl-system-status-footer-info {
496
+ margin-right: 20px;
497
+ width: 100%;
498
+ text-align: right;
499
+ }
500
+ .rsssl-grid .rsssl-system-status-footer-info .system-status-info {
501
+ margin-left: 6px;
502
+ }
503
+ .rsssl-grid .dot {
504
+ height: 10px;
505
+ width: 10px;
506
+ border-radius: 50%;
507
+ display: inline-block;
508
+ }
509
+ .rsssl-grid .rsssl-dot-success {
510
+ background-color: #61ce70;
511
+ }
512
+ .rsssl-grid .rsssl-dot-error {
513
+ background-color: #d7263d;
514
+ }
515
+ .rsssl-grid {
516
+ position: relative;
517
+ }
518
+ .rsssl-grid .rsssl-item {
519
+ width: calc(100% - 20px);
520
+ padding: 10px;
521
+ height: 475px;
522
+ min-height: 500px;
523
+ z-index: 1;
524
+ }
525
+ @media only screen and (min-width: 400px) {
526
+ .rsssl-grid .rsssl-item {
527
+ width: calc(100% - 20px);
528
+ }
529
+ }
530
+ @media only screen and (min-width: 600px) {
531
+ .rsssl-grid .rsssl-item {
532
+ width: calc(100% - 20px);
533
+ }
534
+ }
535
+ @media only screen and (min-width: 768px) {
536
+ .rsssl-grid .rsssl-item {
537
+ width: calc(100% - 20px);
538
+ }
539
+ }
540
+ @media only screen and (min-width: 992px) {
541
+ .rsssl-grid .rsssl-item {
542
+ width: calc(100% - 20px);
543
+ }
544
+ }
545
+ @media only screen and (min-width: 1555px) {
546
+ .rsssl-grid .rsssl-item {
547
+ width: calc(50% - 20px);
548
+ }
549
+ }
550
+ .rsssl-grid .rsssl-item.small {
551
+ width: calc(100% - 20px);
552
+ }
553
+ @media only screen and (min-width: 400px) {
554
+ .rsssl-grid .rsssl-item.small {
555
+ width: calc(100% - 20px);
556
+ }
557
+ }
558
+ @media only screen and (min-width: 600px) {
559
+ .rsssl-grid .rsssl-item.small {
560
+ width: calc(100% - 20px);
561
+ }
562
+ }
563
+ @media only screen and (min-width: 768px) {
564
+ .rsssl-grid .rsssl-item.small {
565
+ width: calc(50% - 20px);
566
+ }
567
+ }
568
+ @media only screen and (min-width: 992px) {
569
+ .rsssl-grid .rsssl-item.small {
570
+ width: calc(50% - 20px);
571
+ }
572
+ }
573
+ @media only screen and (min-width: 1555px) {
574
+ .rsssl-grid .rsssl-item.small {
575
+ width: calc(25% - 20px);
576
+ }
577
+ }
578
+ .rsssl-grid .rsssl-item.small .item-container {
579
+ width: 100%;
580
+ min-width: 200px;
581
+ }
582
+ .rsssl-grid .rsssl-item.half-height {
583
+ min-height: 250px;
584
+ }
585
+ @media only screen and (min-width: 400px) {
586
+ .rsssl-grid .rsssl-item.half-height {
587
+ height: 237.5px;
588
+ min-height: 250px;
589
+ }
590
+ }
591
+ @media only screen and (min-width: 600px) {
592
+ .rsssl-grid .rsssl-item.half-height {
593
+ min-height: 250px;
594
+ height: 237.5px;
595
+ }
596
+ }
597
+ @media only screen and (min-width: 768px) {
598
+ .rsssl-grid .rsssl-item.half-height {
599
+ min-height: 250px;
600
+ height: 237.5px;
601
+ }
602
+ }
603
+ @media only screen and (min-width: 992px) {
604
+ .rsssl-grid .rsssl-item.half-height {
605
+ min-height: 250px;
606
+ height: 237.5px;
607
+ }
608
+ }
609
+ @media only screen and (min-width: 1555px) {
610
+ .rsssl-grid .rsssl-item.half-height {
611
+ min-height: 250px;
612
+ height: 237.5px;
613
+ }
614
+ }
615
+ .rsssl-grid .rsssl-item.half-height .item-container {
616
+ width: 100%;
617
+ min-width: 200px;
618
+ min-height: 250px;
619
+ }
620
+ .rsssl-grid .rsssl-item .settings.rsssl-item {
621
+ width: 100%;
622
+ padding: 0;
623
+ }
624
+ .rsssl-grid .rsssl-item.muuri-item-hidden {
625
+ z-index: 0;
626
+ }
627
+ .rsssl-grid .rsssl-item.muuri-item-releasing {
628
+ z-index: 2;
629
+ }
630
+ .rsssl-grid .rsssl-item.muuri-item-dragging {
631
+ z-index: 3;
632
+ }
633
+ .rsssl-grid .rsssl-item .rsssl-grid-header {
634
+ border-bottom: 1px solid lightgrey;
635
+ padding: 0;
636
+ height: 60px;
637
+ }
638
+ .rsssl-grid .rsssl-item .rsssl-grid-header .rsssl-grid-header-container {
639
+ margin: 0 20px;
640
+ height: 100%;
641
+ }
642
+ .rsssl-grid .rsssl-item .rsssl-grid-header .rsssl-grid-title {
643
+ cursor: pointer;
644
+ font-size: 20px;
645
+ padding: 20px 0;
646
+ font-weight: bold;
647
+ float: left;
648
+ }
649
+ .rsssl-grid .rsssl-item .rsssl-grid-header .rsssl-grid-controls {
650
+ float: right;
651
+ margin-top: 20px;
652
+ color: #cecece;
653
+ }
654
+ .rsssl-grid .rsssl-item .item-container {
655
+ background-color: #fff;
656
+ position: relative;
657
+ box-shadow: 0 0 5px 5px rgba(222, 222, 222, 0.2);
658
+ height: 100%;
659
+ width: 100%;
660
+ }
661
+ .rsssl-grid .rsssl-item .item-container .item-content {
662
+ clear: both;
663
+ margin: 15px;
664
+ height: calc(100% - 100px);
665
+ padding-top: 0px;
666
+ padding-bottom: 10px;
667
+ }
668
+ .rsssl-grid .rsssl-item.no-border .item-container {
669
+ border: none;
670
+ }
671
+ .rsssl-grid .rsssl-item.no-background .item-container {
672
+ background-color: #F1F1F1;
673
+ }
674
+ .rsssl-grid .rsssl-item.muuri-item-placeholder .item-container {
675
+ border-style: dashed;
676
+ padding: 0;
677
+ }
678
+ /*# sourceMappingURL=grid.css.map */
grid/css/grid.css.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["grid.less"],"names":[],"mappings":"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","file":"grid.css"}
grid/css/grid.less ADDED
@@ -0,0 +1,766 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @gridblock_height: 475px;
2
+ @gridblock_width: 800px;
3
+ @gridblock_width_small:400px;
4
+ @grid_margin: 10px;
5
+ @grey_light:#cecece;
6
+ @box_shadow_color: rgba(222, 222, 222, 0.2);
7
+ @border_color: #dedede;
8
+ @color-success: #61ce70;
9
+ @color_warning: #d7263d;
10
+ @color_open: #FBC43D;
11
+ @light-text-color: #3c3c3c;
12
+ @light-grey: lightgrey;
13
+ @button-border-color: #6477AA;
14
+
15
+ // break points
16
+ @break-xs: 400px;
17
+ @break-s: 600px;
18
+ @break-m: 768px;
19
+ @break-l: 992px;
20
+ @break-xl: 1555px;
21
+
22
+ // Override default WP settings style
23
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent, .settings_page_really-simple-ssl #wpcontent{
24
+ padding: 0;
25
+ .rsssl-footer-item {
26
+ form {
27
+ float:left;
28
+ }
29
+ }
30
+
31
+ .nav-tab {
32
+ padding: 17px 20px 19px 20px;
33
+ margin-bottom:0;
34
+ color: #444;
35
+ font-weight: normal;
36
+ font-size: 1.2em;
37
+ background: inherit;
38
+ border: 0;
39
+ &.nav-tab-active {
40
+ border-bottom: 2px solid @color_open !important;
41
+ background: #fff;
42
+ padding-bottom:17px;
43
+ }
44
+ }
45
+
46
+
47
+ .nav-tab-wrapper {
48
+ height: 60px;
49
+ background-color: #fff;
50
+ display: flex;
51
+ align-items: center;
52
+ border: 0;
53
+ }
54
+ .rsssl-logo-container {
55
+ margin-left: 25px;
56
+ #rsssl-logo {
57
+ height: 40px;
58
+ width: 200px;
59
+ img {
60
+ width:200px;
61
+ }
62
+ }
63
+ }
64
+ .header-links {
65
+ display: flex;
66
+ flex: 1;
67
+ justify-content: flex-end;
68
+ flex-direction: row;
69
+ align-items: center;
70
+ margin-right: 20px;
71
+ .documentation {
72
+ text-decoration: underline;
73
+ }
74
+ .header-upsell {
75
+ .documentation {
76
+ margin-left:25px;
77
+ }
78
+ a {
79
+ text-decoration: none;
80
+ }
81
+ .header-upsell-pro {
82
+ color: black;
83
+ border: 3px solid black;
84
+ margin: 10px;
85
+ width: 80px;
86
+ text-align: center;
87
+ padding: 5px;
88
+ border-radius: 20px;
89
+ font-weight: 600;
90
+ }
91
+ }
92
+ }
93
+ }
94
+
95
+ .network-admin {
96
+ .rsssl-logo-container {
97
+ height:60px;
98
+ }
99
+ }
100
+
101
+
102
+ .rsssl-grid {
103
+ width: calc(100% - 20px);
104
+ margin: @grid_margin;
105
+ position: relative;
106
+ display: flex;
107
+ flex-direction: row;
108
+ flex-wrap: wrap;
109
+
110
+ .button-rsssl-tertiary {
111
+ background-color: #D7263D;
112
+ color: white;
113
+ border:0;
114
+ }
115
+
116
+ .rsssl-wide-button {
117
+ width: 220px;
118
+ }
119
+
120
+ .rsssl-progress {
121
+
122
+ .rsssl-task-list {
123
+ height: 257px;
124
+ overflow:hidden;
125
+ }
126
+
127
+ .rsssl-toggle-active {
128
+ text-decoration: underline;
129
+ }
130
+
131
+ #rsssl-all-tasks, #rsssl-remaining-tasks {
132
+ display: none;
133
+
134
+ }
135
+ .rsssl-tasks-container {
136
+ border-bottom:1px solid lightgrey;
137
+ color: lightgrey;
138
+ &.active{
139
+ text-decoration: none;
140
+ border-bottom:0;
141
+ color:initial;
142
+
143
+ }
144
+ }
145
+
146
+ .rsssl-tasks-inactive {
147
+ text-decoration: underline;
148
+ color:@light-grey;
149
+ }
150
+
151
+ }
152
+
153
+ .rsssl-item {
154
+ width: @gridblock_width ;
155
+ &.small {
156
+ width: @gridblock_width_small;
157
+ }
158
+
159
+ .rsssl-close-warning-x {
160
+ color: #ccc;
161
+ font-size: 0.9em;
162
+ margin-right: 25px;
163
+ }
164
+
165
+ height: @gridblock_height + @grid_margin;
166
+ z-index: 1;
167
+ .item-container {
168
+ .form-table {
169
+ display: flex;
170
+ tbody {
171
+ display: flex;
172
+ flex-direction: column;
173
+ flex-wrap: wrap;
174
+ max-height: 340px;
175
+ width: 100% !important;
176
+ tr {
177
+ padding: 0 0 0 0 !important;
178
+ display: flex;
179
+ align-items: center;
180
+ flex-direction: row;
181
+ width: 50%;
182
+
183
+ td {
184
+ padding: 0;
185
+ margin: 0;
186
+ }
187
+ th {
188
+ .dashicons-editor-help {
189
+ font-size: 26px;
190
+ }
191
+ margin-left: 0;
192
+ width: 250px;
193
+ display: flex;
194
+ align-items: center;
195
+ font-size: 13px;
196
+ font-weight: normal;
197
+ .rsssl-tooltip-right {
198
+ padding-right: 10px;
199
+ margin-top:-4px;
200
+ }
201
+ }
202
+ th, td {
203
+ // Important to override default WP style
204
+ padding: 10px 0 !important;
205
+ font-size:13px;
206
+ p {font-size:13px}
207
+ }
208
+ }
209
+ }
210
+ }
211
+ h2 {
212
+ display: none;
213
+ }
214
+
215
+ background-color: #fff;
216
+ position: relative;
217
+ box-shadow: 0px 0px 5px 5px @box_shadow_color;
218
+ width: @gridblock_width - @grid_margin;
219
+ height: @gridblock_height;
220
+ .rsssl-save-settings-feedback {
221
+ margin-right:20px;
222
+ color: @color_warning;
223
+ }
224
+ .rsssl-grid-item-header {
225
+ display: flex;
226
+ align-items: center;
227
+ justify-content: space-between;
228
+ height: 60px;
229
+ border-bottom: 1px solid @border_color;
230
+ padding: 0 25px 0 25px;
231
+ .rsssl-instructions a {
232
+ color: @light-text-color;
233
+ }
234
+
235
+ .rsssl-secondary-header-item {
236
+ display: flex;
237
+ color: @light-text-color;
238
+ .all-task-count, .open-task-count {
239
+ padding-left: 3px;
240
+ padding-top: 3px;
241
+ }
242
+ .all-task-count {
243
+ margin-right: 5px;
244
+ }
245
+ }
246
+ }
247
+ .rsssl-table-td-main-content {
248
+ padding-left: 15px;
249
+ }
250
+
251
+ .rsssl-grid-item-content {
252
+ height: 360px;
253
+ margin: 10px 25px 10px 25px;
254
+ border-bottom: 1px solid @border_color;
255
+
256
+ /*
257
+ Progress block
258
+ */
259
+
260
+ .rsssl-progress-block {
261
+ padding-top: 10px;
262
+
263
+ .progress-bar-container {
264
+ margin: 0 0 25px 0;
265
+ }
266
+
267
+ .progress {
268
+ overflow: hidden;
269
+ height: 20px;
270
+ border-radius: 5px;
271
+ background-color: #f7f7f7;
272
+ }
273
+
274
+ .progress .bar {
275
+ height: 100%;
276
+ background-color: @color-success;
277
+
278
+ }
279
+
280
+ .progress-text {
281
+ display: flex;
282
+ align-items: center;
283
+ margin: 10px 0;
284
+ padding-top: 10px;
285
+ padding-bottom: 10px;
286
+
287
+ .rsssl-progress-percentage {
288
+ font-size: 32px;
289
+ font-weight: 700;
290
+ }
291
+
292
+ .rsssl-progress-text {
293
+ display: flex;
294
+ flex-direction: row;
295
+ margin-left: @grid_margin;
296
+
297
+ a {
298
+ margin-left: 3px;
299
+ }
300
+
301
+ .rsssl-progress-count {
302
+ margin-left: 3px;
303
+ margin-right: 3px;
304
+ }
305
+ }
306
+ }
307
+
308
+ .rsssl-progress-table {
309
+ td {
310
+ padding: 10px 10px 10px 0;
311
+ }
312
+ td +td {padding-left:15px;}
313
+ }
314
+ }
315
+
316
+ /*
317
+ Tips and Tricks
318
+ */
319
+ .rsssl-tips-tricks {
320
+ color: @light-text-color;
321
+ padding-bottom: 15px;
322
+ .tips-tricks-content{
323
+ display: flex;
324
+ flex-direction: column;
325
+ margin-right:10px;
326
+ height: 340px;
327
+ .tips-tricks-top {
328
+ flex-grow:1;
329
+
330
+ .rsssl-tips-tricks-element {
331
+ margin-top: 10px;
332
+ margin-bottom: 15px;
333
+ display: flex;
334
+ flex-direction: row;
335
+ justify-content: space-between;
336
+ }
337
+ .rsssl-tips-tricks-content {
338
+ padding-right:20px;
339
+ }
340
+ }
341
+ .tips-tricks-bottom {
342
+ color: @light-text-color;
343
+ }
344
+ }
345
+
346
+
347
+ .rsssl-tips-tricks-read-more a {
348
+ text-decoration: none;
349
+ white-space: nowrap;
350
+ }
351
+ }
352
+ // End tips and tricks
353
+
354
+ /*
355
+ Default bullet style
356
+ */
357
+ .rsssl-bullet {
358
+ height: 13px;
359
+ width: 13px;
360
+ border-radius: 50%;
361
+ margin-right: 10px;
362
+ background-color: lightgrey;
363
+ text-decoration: none;
364
+ }
365
+
366
+ /*
367
+ Support forum block
368
+ */
369
+
370
+ #rsssl-support-forums-container {
371
+ display: flex;
372
+ flex-wrap: wrap;
373
+ flex-direction: row;
374
+ .rsssl-support-forums {
375
+ display: flex;
376
+ width: 50%;
377
+ a {
378
+ text-decoration: none;
379
+ color: @light-text-color;
380
+ display: flex;
381
+ align-items: center;
382
+ }
383
+
384
+ .rsssl-bullet {
385
+ margin: 7px 7px 7px 0;
386
+ background-color: @light-grey;
387
+ float: left;
388
+ &:hover {
389
+ background-color: @color_open;
390
+ }
391
+ }
392
+
393
+ .rsssl-forums-content {
394
+ float: left;
395
+ color: @light-text-color;
396
+ &:hover {
397
+ text-decoration: underline;
398
+ }
399
+ }
400
+ }
401
+ }
402
+
403
+ #rsssl-feedback {
404
+ color: @color_warning;
405
+ }
406
+
407
+ /*
408
+ Other plugins
409
+ */
410
+
411
+ .rsssl-upsell {
412
+ display: flex !important; //we need important here, because the grid switch overrides it on element level
413
+ flex-direction: row;
414
+ padding: 5px 0 5px 0;
415
+ align-items: center;
416
+ color: @light-text-color;
417
+
418
+ .plugin-text {
419
+ a {
420
+ text-decoration: none;
421
+ color: @light-text-color;
422
+ &:hover {
423
+ color: @color_open;
424
+ }
425
+ }
426
+ }
427
+
428
+ .rsp-image {
429
+ margin-right: 5px;
430
+ }
431
+
432
+ .wpsi-red {
433
+ background-color: @color_warning;
434
+ }
435
+
436
+ .cmplz-blue {
437
+ background-color: #27ADEA;
438
+ }
439
+
440
+ .zip-pink {
441
+ background-color: #E366A1;
442
+ }
443
+
444
+ .plugin-status {
445
+ margin-left: auto;
446
+ }
447
+ }
448
+
449
+ /*
450
+ Progress labels
451
+ */
452
+ .rsssl-progress-status {
453
+ display: block;
454
+ min-width: 60px;
455
+ text-align: center;
456
+ border-radius: 15px;
457
+ padding: 4px 8px 4px 8px;
458
+ font-size: 0.8em;
459
+ font-weight: 600;
460
+ height: 17px;
461
+ line-height:17px;
462
+ }
463
+
464
+ .rsssl-premium {
465
+ background-color: #29b6f6;
466
+ color: white;
467
+ }
468
+ .rsssl-success {
469
+ background-color: @color-success;
470
+ color: white;
471
+ }
472
+
473
+ .rsssl-open {
474
+ background-color: @color_open;
475
+ }
476
+
477
+ .rsssl-warning {
478
+ background-color: @color_warning;
479
+ color: white;
480
+ }
481
+ }
482
+ .rsssl-grid-item-footer {
483
+ display: flex;
484
+ align-items: center;
485
+ margin: 14px 25px 0 25px;
486
+ height: 40px;
487
+ bottom: 0;
488
+ width: 95%;
489
+ .rsssl-button-save {
490
+ margin-right:25px;
491
+ }
492
+ #rsssl-feedback {
493
+ font-weight: 600;
494
+ color: @color-success;
495
+ padding-left: 10px;
496
+ }
497
+ }
498
+ .rsssl-deactivate-keep-ssl {
499
+ th, span {
500
+ display: none;
501
+ }
502
+ }
503
+ }
504
+ &.half-height {
505
+ height: (@gridblock_height / 2) + @grid_margin;
506
+
507
+ .item-container {
508
+ height: @gridblock_height / 2;
509
+ .rsssl-grid-item-content {
510
+ height: 110px;
511
+ .form-table tbody {
512
+ tr, th {
513
+ width:100%;
514
+ max-width:100%;
515
+ }
516
+ }
517
+ }
518
+ }
519
+ }
520
+
521
+ &.small {
522
+ .item-container {
523
+ width: @gridblock_width_small - @grid_margin;
524
+ th {
525
+ width: 85% !important;
526
+ }
527
+ .form-table tbody tr {
528
+ width: 100%;
529
+ }
530
+ }
531
+ }
532
+ &.no-border {
533
+ .item-container {
534
+ border: none;
535
+ }
536
+ }
537
+ &.no-background {
538
+ .item-container {
539
+ background-color: #f2f2f2;
540
+ }
541
+ }
542
+ }
543
+ /*
544
+ Footers
545
+ */
546
+
547
+ #rsssl-progress-footer {
548
+ width: 100%;
549
+ text-align: right;
550
+ margin-right: @grid_margin;
551
+ .rsssl-footer-item {
552
+ padding-right: 5px;
553
+ form {
554
+ float:left;
555
+ }
556
+ }
557
+ .rsssl-footer-item +.rsssl-footer-item {
558
+ margin-right:20px;
559
+ }
560
+
561
+ .footer-left {
562
+ float:left;
563
+ .upsell {
564
+ min-width: 80px;
565
+ text-align: center;
566
+ }
567
+ }
568
+
569
+ .footer-right {
570
+ float:right;
571
+ }
572
+ .hidden {
573
+ display: none;
574
+ }
575
+ }
576
+
577
+ .rsssl-system-status-footer-info {
578
+ margin-right: 20px;
579
+ width: 100%;
580
+ text-align: right;
581
+ .system-status-info {
582
+ margin-left: 6px;
583
+ }
584
+ }
585
+ /*
586
+ Dots
587
+ */
588
+
589
+ .dot {
590
+ height: 10px;
591
+ width: 10px;
592
+ border-radius: 50%;
593
+ display: inline-block;
594
+ }
595
+ .rsssl-dot-success {
596
+ background-color: #61ce70;
597
+ }
598
+ .rsssl-dot-error {
599
+ background-color: #d7263d;
600
+ }
601
+ }
602
+
603
+
604
+ // Code below should be integrated in to the code above.
605
+ .rsssl-grid {
606
+ position: relative;
607
+ .rsssl-item {
608
+ width: calc(100% - 20px);
609
+ padding: 10px;
610
+ height: @gridblock_height;
611
+ min-height: 500px;
612
+ z-index: 1;
613
+ @media only screen and (min-width: @break-xs) {
614
+ width: calc(100% - 20px);
615
+ }
616
+
617
+ @media only screen and (min-width: @break-s) {
618
+ width: calc(100% - 20px);
619
+ }
620
+
621
+ @media only screen and (min-width: @break-m) {
622
+ width: calc(100% - 20px);
623
+ }
624
+
625
+ @media only screen and (min-width: @break-l) {
626
+ width: calc(100% - 20px);
627
+ }
628
+
629
+ @media only screen and (min-width: @break-xl) {
630
+ width: calc(50% - 20px);
631
+ }
632
+
633
+
634
+ &.small {
635
+ width: calc(100% - 20px);
636
+
637
+ @media only screen and (min-width: @break-xs) {
638
+ width: calc(100% - 20px);
639
+ }
640
+
641
+ @media only screen and (min-width: @break-s) {
642
+ width: calc(100% - 20px);
643
+ }
644
+
645
+ @media only screen and (min-width: @break-m) {
646
+ width: calc(50% - 20px);
647
+ }
648
+
649
+ @media only screen and (min-width: @break-l) {
650
+ width: calc(50% - 20px);
651
+ }
652
+
653
+ @media only screen and (min-width: @break-xl) {
654
+ width: calc(25% - 20px);
655
+ }
656
+ .item-container{
657
+ width: 100%;
658
+ min-width: 200px;
659
+ }
660
+
661
+ }
662
+
663
+ &.half-height {
664
+ min-height: 250px;
665
+ @media only screen and (min-width: @break-xs) {
666
+ height: @gridblock_height / 2;
667
+ min-height: 250px;
668
+ }
669
+
670
+ @media only screen and (min-width: @break-s) {
671
+ min-height: 250px;
672
+ height: @gridblock_height / 2;
673
+ }
674
+
675
+ @media only screen and (min-width: @break-m) {
676
+ min-height: 250px;
677
+ height: @gridblock_height / 2;
678
+ }
679
+
680
+ @media only screen and (min-width: @break-l) {
681
+ min-height: 250px;
682
+ height: @gridblock_height / 2;
683
+ }
684
+
685
+ @media only screen and (min-width: @break-xl) {
686
+ min-height: 250px;
687
+ height: @gridblock_height / 2;
688
+ }
689
+
690
+ .item-container {
691
+ width: 100%;
692
+ min-width: 200px;
693
+ min-height: 250px;
694
+ }
695
+ }
696
+ .settings.rsssl-item{
697
+ width: 100%;
698
+ padding: 0;
699
+ }
700
+
701
+ &.muuri-item-hidden {
702
+ z-index: 0;
703
+ }
704
+ &.muuri-item-releasing {
705
+ z-index: 2;
706
+ }
707
+ &.muuri-item-dragging {
708
+ z-index: 3;
709
+ }
710
+ .rsssl-grid-header {
711
+ border-bottom: 1px solid @light-grey;
712
+ padding: 0;
713
+ height: 60px;
714
+ .rsssl-grid-header-container {
715
+ margin: 0 20px;
716
+ height: 100%;
717
+ }
718
+
719
+
720
+ .rsssl-grid-title{
721
+ cursor: pointer;
722
+ font-size: 20px;
723
+ padding: 20px 0;
724
+ font-weight: bold;
725
+ float: left;
726
+ }
727
+ .rsssl-grid-controls {
728
+ float: right;
729
+ margin-top: 20px;
730
+ color: #cecece;
731
+ }
732
+ }
733
+ .item-container {
734
+ background-color: #fff;
735
+ position: relative;
736
+ box-shadow: 0 0 5px 5px rgba(222,222,222,0.2);
737
+ height: 100%;
738
+ width: 100%;
739
+
740
+ .item-content {
741
+ clear:both;
742
+ margin:15px;
743
+ height: calc(100% - 100px);
744
+ padding-top: 0px;
745
+ padding-bottom:10px;
746
+ }
747
+
748
+ }
749
+
750
+ &.no-border {
751
+ .item-container {
752
+ border: none;
753
+ }
754
+ }
755
+ &.no-background {
756
+ .item-container {
757
+ background-color: #F1F1F1;
758
+ }
759
+ }
760
+
761
+ &.muuri-item-placeholder .item-container {
762
+ border-style: dashed;
763
+ padding:0;
764
+ }
765
+ }
766
+ }
grid/css/grid.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .settings_page_rlrsssl_really_simple_ssl #wpcontent,.settings_page_really-simple-ssl #wpcontent{padding:0}.settings_page_rlrsssl_really_simple_ssl #wpcontent .rsssl-footer-item form,.settings_page_really-simple-ssl #wpcontent .rsssl-footer-item form{float:left}.settings_page_rlrsssl_really_simple_ssl #wpcontent .nav-tab,.settings_page_really-simple-ssl #wpcontent .nav-tab{padding:17px 20px 19px 20px;margin-bottom:0;color:#444;font-weight:normal;font-size:1.2em;background:inherit;border:0}.settings_page_rlrsssl_really_simple_ssl #wpcontent .nav-tab.nav-tab-active,.settings_page_really-simple-ssl #wpcontent .nav-tab.nav-tab-active{border-bottom:2px solid #fbc43d !important;background:#fff;padding-bottom:17px}.settings_page_rlrsssl_really_simple_ssl #wpcontent .nav-tab-wrapper,.settings_page_really-simple-ssl #wpcontent .nav-tab-wrapper{height:60px;background-color:#fff;display:flex;align-items:center;border:0}.settings_page_rlrsssl_really_simple_ssl #wpcontent .rsssl-logo-container,.settings_page_really-simple-ssl #wpcontent .rsssl-logo-container{margin-left:25px}.settings_page_rlrsssl_really_simple_ssl #wpcontent .rsssl-logo-container #rsssl-logo,.settings_page_really-simple-ssl #wpcontent .rsssl-logo-container #rsssl-logo{height:40px;width:200px}.settings_page_rlrsssl_really_simple_ssl #wpcontent .rsssl-logo-container #rsssl-logo img,.settings_page_really-simple-ssl #wpcontent .rsssl-logo-container #rsssl-logo img{width:200px}.settings_page_rlrsssl_really_simple_ssl #wpcontent .header-links,.settings_page_really-simple-ssl #wpcontent .header-links{display:flex;flex:1;justify-content:flex-end;flex-direction:row;align-items:center;margin-right:20px}.settings_page_rlrsssl_really_simple_ssl #wpcontent .header-links .documentation,.settings_page_really-simple-ssl #wpcontent .header-links .documentation{text-decoration:underline}.settings_page_rlrsssl_really_simple_ssl #wpcontent .header-links .header-upsell .documentation,.settings_page_really-simple-ssl #wpcontent .header-links .header-upsell .documentation{margin-left:25px}.settings_page_rlrsssl_really_simple_ssl #wpcontent .header-links .header-upsell a,.settings_page_really-simple-ssl #wpcontent .header-links .header-upsell a{text-decoration:none}.settings_page_rlrsssl_really_simple_ssl #wpcontent .header-links .header-upsell .header-upsell-pro,.settings_page_really-simple-ssl #wpcontent .header-links .header-upsell .header-upsell-pro{color:black;border:3px solid black;margin:10px;width:80px;text-align:center;padding:5px;border-radius:20px;font-weight:600}.network-admin .rsssl-logo-container{height:60px}.rsssl-grid{width:calc(100% - 20px);margin:10px;position:relative;display:flex;flex-direction:row;flex-wrap:wrap}.rsssl-grid .button-rsssl-tertiary{background-color:#d7263d;color:white;border:0}.rsssl-grid .rsssl-wide-button{width:220px}.rsssl-grid .rsssl-progress .rsssl-task-list{height:257px;overflow:hidden}.rsssl-grid .rsssl-progress .rsssl-toggle-active{text-decoration:underline}.rsssl-grid .rsssl-progress #rsssl-all-tasks,.rsssl-grid .rsssl-progress #rsssl-remaining-tasks{display:none}.rsssl-grid .rsssl-progress .rsssl-tasks-container{border-bottom:1px solid lightgrey;color:lightgrey}.rsssl-grid .rsssl-progress .rsssl-tasks-container.active{text-decoration:none;border-bottom:0;color:initial}.rsssl-grid .rsssl-progress .rsssl-tasks-inactive{text-decoration:underline;color:lightgrey}.rsssl-grid .rsssl-item{width:800px;height:485px;z-index:1}.rsssl-grid .rsssl-item.small{width:400px}.rsssl-grid .rsssl-item .rsssl-close-warning-x{color:#ccc;font-size:.9em;margin-right:25px}.rsssl-grid .rsssl-item .item-container{background-color:#fff;position:relative;box-shadow:0 0 5px 5px rgba(222,222,222,0.2);width:790px;height:475px}.rsssl-grid .rsssl-item .item-container .form-table{display:flex}.rsssl-grid .rsssl-item .item-container .form-table tbody{display:flex;flex-direction:column;flex-wrap:wrap;max-height:340px;width:100% !important}.rsssl-grid .rsssl-item .item-container .form-table tbody tr{padding:0 0 0 0 !important;display:flex;align-items:center;flex-direction:row;width:50%}.rsssl-grid .rsssl-item .item-container .form-table tbody tr td{padding:0;margin:0}.rsssl-grid .rsssl-item .item-container .form-table tbody tr th{margin-left:0;width:250px;display:flex;align-items:center;font-size:13px;font-weight:normal}.rsssl-grid .rsssl-item .item-container .form-table tbody tr th .dashicons-editor-help{font-size:26px}.rsssl-grid .rsssl-item .item-container .form-table tbody tr th .rsssl-tooltip-right{padding-right:10px;margin-top:-4px}.rsssl-grid .rsssl-item .item-container .form-table tbody tr th,.rsssl-grid .rsssl-item .item-container .form-table tbody tr td{padding:10px 0 !important;font-size:13px}.rsssl-grid .rsssl-item .item-container .form-table tbody tr th p,.rsssl-grid .rsssl-item .item-container .form-table tbody tr td p{font-size:13px}.rsssl-grid .rsssl-item .item-container h2{display:none}.rsssl-grid .rsssl-item .item-container .rsssl-save-settings-feedback{margin-right:20px;color:#d7263d}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header{display:flex;align-items:center;justify-content:space-between;height:60px;border-bottom:1px solid #dedede;padding:0 25px 0 25px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-instructions a{color:#3c3c3c}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item{display:flex;color:#3c3c3c}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item .all-task-count,.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item .open-task-count{padding-left:3px;padding-top:3px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-header .rsssl-secondary-header-item .all-task-count{margin-right:5px}.rsssl-grid .rsssl-item .item-container .rsssl-table-td-main-content{padding-left:15px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content{height:360px;margin:10px 25px 10px 25px;border-bottom:1px solid #dedede}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block{padding-top:10px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-bar-container{margin:0 0 25px 0}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress{overflow:hidden;height:20px;border-radius:5px;background-color:#f7f7f7}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress .bar{height:100%;background-color:#61ce70}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-text{display:flex;align-items:center;margin:10px 0;padding-top:10px;padding-bottom:10px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-text .rsssl-progress-percentage{font-size:32px;font-weight:700}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-text .rsssl-progress-text{display:flex;flex-direction:row;margin-left:10px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-text .rsssl-progress-text a{margin-left:3px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .progress-text .rsssl-progress-text .rsssl-progress-count{margin-left:3px;margin-right:3px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .rsssl-progress-table td{padding:10px 10px 10px 0}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-block .rsssl-progress-table td+td{padding-left:15px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks{color:#3c3c3c;padding-bottom:15px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .tips-tricks-content{display:flex;flex-direction:column;margin-right:10px;height:340px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .tips-tricks-content .tips-tricks-top{flex-grow:1}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .tips-tricks-content .tips-tricks-top .rsssl-tips-tricks-element{margin-top:10px;margin-bottom:15px;display:flex;flex-direction:row;justify-content:space-between}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .tips-tricks-content .tips-tricks-top .rsssl-tips-tricks-content{padding-right:20px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .tips-tricks-content .tips-tricks-bottom{color:#3c3c3c}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-tips-tricks .rsssl-tips-tricks-read-more a{text-decoration:none;white-space:nowrap}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-bullet{height:13px;width:13px;border-radius:50%;margin-right:10px;background-color:lightgrey;text-decoration:none}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container{display:flex;flex-wrap:wrap;flex-direction:row}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums{display:flex;width:50%}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums a{text-decoration:none;color:#3c3c3c;display:flex;align-items:center}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-bullet{margin:7px 7px 7px 0;background-color:lightgrey;float:left}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-bullet:hover{background-color:#fbc43d}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-forums-content{float:left;color:#3c3c3c}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-support-forums-container .rsssl-support-forums .rsssl-forums-content:hover{text-decoration:underline}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content #rsssl-feedback{color:#d7263d}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell{display:flex !important;flex-direction:row;padding:5px 0 5px 0;align-items:center;color:#3c3c3c}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .plugin-text a{text-decoration:none;color:#3c3c3c}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .plugin-text a:hover{color:#fbc43d}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .rsp-image{margin-right:5px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .wpsi-red{background-color:#d7263d}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .cmplz-blue{background-color:#27adea}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .zip-pink{background-color:#e366a1}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-upsell .plugin-status{margin-left:auto}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-progress-status{display:block;min-width:60px;text-align:center;border-radius:15px;padding:4px 8px 4px 8px;font-size:.8em;font-weight:600;height:17px;line-height:17px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-premium{background-color:#29b6f6;color:white}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-success{background-color:#61ce70;color:white}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-open{background-color:#fbc43d}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-content .rsssl-warning{background-color:#d7263d;color:white}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer{display:flex;align-items:center;margin:14px 25px 0 25px;height:40px;bottom:0;width:95%}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer .rsssl-button-save{margin-right:25px}.rsssl-grid .rsssl-item .item-container .rsssl-grid-item-footer #rsssl-feedback{font-weight:600;color:#61ce70;padding-left:10px}.rsssl-grid .rsssl-item .item-container .rsssl-deactivate-keep-ssl th,.rsssl-grid .rsssl-item .item-container .rsssl-deactivate-keep-ssl span{display:none}.rsssl-grid .rsssl-item.half-height{height:247.5px}.rsssl-grid .rsssl-item.half-height .item-container{height:237.5px}.rsssl-grid .rsssl-item.half-height .item-container .rsssl-grid-item-content{height:110px}.rsssl-grid .rsssl-item.half-height .item-container .rsssl-grid-item-content .form-table tbody tr,.rsssl-grid .rsssl-item.half-height .item-container .rsssl-grid-item-content .form-table tbody th{width:100%;max-width:100%}.rsssl-grid .rsssl-item.small .item-container{width:390px}.rsssl-grid .rsssl-item.small .item-container th{width:85% !important}.rsssl-grid .rsssl-item.small .item-container .form-table tbody tr{width:100%}.rsssl-grid .rsssl-item.no-border .item-container{border:0}.rsssl-grid .rsssl-item.no-background .item-container{background-color:#f2f2f2}.rsssl-grid #rsssl-progress-footer{width:100%;text-align:right;margin-right:10px}.rsssl-grid #rsssl-progress-footer .rsssl-footer-item{padding-right:5px}.rsssl-grid #rsssl-progress-footer .rsssl-footer-item form{float:left}.rsssl-grid #rsssl-progress-footer .rsssl-footer-item+.rsssl-footer-item{margin-right:20px}.rsssl-grid #rsssl-progress-footer .footer-left{float:left}.rsssl-grid #rsssl-progress-footer .footer-left .upsell{min-width:80px;text-align:center}.rsssl-grid #rsssl-progress-footer .footer-right{float:right}.rsssl-grid #rsssl-progress-footer .hidden{display:none}.rsssl-grid .rsssl-system-status-footer-info{margin-right:20px;width:100%;text-align:right}.rsssl-grid .rsssl-system-status-footer-info .system-status-info{margin-left:6px}.rsssl-grid .dot{height:10px;width:10px;border-radius:50%;display:inline-block}.rsssl-grid .rsssl-dot-success{background-color:#61ce70}.rsssl-grid .rsssl-dot-error{background-color:#d7263d}.rsssl-grid{position:relative}.rsssl-grid .rsssl-item{width:calc(100% - 20px);padding:10px;height:475px;min-height:500px;z-index:1}@media only screen and (min-width:400px){.rsssl-grid .rsssl-item{width:calc(100% - 20px)}}@media only screen and (min-width:600px){.rsssl-grid .rsssl-item{width:calc(100% - 20px)}}@media only screen and (min-width:768px){.rsssl-grid .rsssl-item{width:calc(100% - 20px)}}@media only screen and (min-width:992px){.rsssl-grid .rsssl-item{width:calc(100% - 20px)}}@media only screen and (min-width:1555px){.rsssl-grid .rsssl-item{width:calc(50% - 20px)}}.rsssl-grid .rsssl-item.small{width:calc(100% - 20px)}@media only screen and (min-width:400px){.rsssl-grid .rsssl-item.small{width:calc(100% - 20px)}}@media only screen and (min-width:600px){.rsssl-grid .rsssl-item.small{width:calc(100% - 20px)}}@media only screen and (min-width:768px){.rsssl-grid .rsssl-item.small{width:calc(50% - 20px)}}@media only screen and (min-width:992px){.rsssl-grid .rsssl-item.small{width:calc(50% - 20px)}}@media only screen and (min-width:1555px){.rsssl-grid .rsssl-item.small{width:calc(25% - 20px)}}.rsssl-grid .rsssl-item.small .item-container{width:100%;min-width:200px}.rsssl-grid .rsssl-item.half-height{min-height:250px}@media only screen and (min-width:400px){.rsssl-grid .rsssl-item.half-height{height:237.5px;min-height:250px}}@media only screen and (min-width:600px){.rsssl-grid .rsssl-item.half-height{min-height:250px;height:237.5px}}@media only screen and (min-width:768px){.rsssl-grid .rsssl-item.half-height{min-height:250px;height:237.5px}}@media only screen and (min-width:992px){.rsssl-grid .rsssl-item.half-height{min-height:250px;height:237.5px}}@media only screen and (min-width:1555px){.rsssl-grid .rsssl-item.half-height{min-height:250px;height:237.5px}}.rsssl-grid .rsssl-item.half-height .item-container{width:100%;min-width:200px;min-height:250px}.rsssl-grid .rsssl-item .settings.rsssl-item{width:100%;padding:0}.rsssl-grid .rsssl-item.muuri-item-hidden{z-index:0}.rsssl-grid .rsssl-item.muuri-item-releasing{z-index:2}.rsssl-grid .rsssl-item.muuri-item-dragging{z-index:3}.rsssl-grid .rsssl-item .rsssl-grid-header{border-bottom:1px solid lightgrey;padding:0;height:60px}.rsssl-grid .rsssl-item .rsssl-grid-header .rsssl-grid-header-container{margin:0 20px;height:100%}.rsssl-grid .rsssl-item .rsssl-grid-header .rsssl-grid-title{cursor:pointer;font-size:20px;padding:20px 0;font-weight:bold;float:left}.rsssl-grid .rsssl-item .rsssl-grid-header .rsssl-grid-controls{float:right;margin-top:20px;color:#cecece}.rsssl-grid .rsssl-item .item-container{background-color:#fff;position:relative;box-shadow:0 0 5px 5px rgba(222,222,222,0.2);height:100%;width:100%}.rsssl-grid .rsssl-item .item-container .item-content{clear:both;margin:15px;height:calc(100% - 100px);padding-top:0;padding-bottom:10px}.rsssl-grid .rsssl-item.no-border .item-container{border:0}.rsssl-grid .rsssl-item.no-background .item-container{background-color:#f1f1f1}.rsssl-grid .rsssl-item.muuri-item-placeholder .item-container{border-style:dashed;padding:0}
grid/templates/grid-container.php ADDED
@@ -0,0 +1 @@
 
1
+ <div class="rsssl-grid">{content}</div>
grid/templates/grid-element.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="rsssl-item {class}">
2
+ <div class="item-container">
3
+ <div class="rsssl-grid-item-header">
4
+ <h3>{title}</h3>
5
+ {header}
6
+ </div>
7
+ <div class="rsssl-grid-item-content">
8
+ {content}
9
+ </div>
10
+ <div class="rsssl-grid-item-footer">
11
+ {footer}
12
+ </div>
13
+ </div>
14
+ </div>
grid/templates/header.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!"); ?>
2
+
3
+ <div class="rsssl-secondary-header-item">
4
+ <div class="rsssl-save-settings-feedback" style="display: none;">
5
+ <?php _e("Save settings" , "really-simple-ssl") ?>
6
+ </div>
7
+ <div class="rsssl-instructions">{instructions}</div>
8
+ </div>
grid/templates/ms-settings.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!");
2
+ settings_fields('rsssl_network_options');
3
+ do_settings_sections("really-simple-ssl");
grid/templates/other-plugins.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!"); ?>
2
+
3
+ <?php
4
+
5
+ $plugins = array(
6
+ 'WPSI' => array(
7
+ 'constant_free' => 'wpsi_plugin',
8
+ 'constant_premium' => 'wpsi_pro_plugin',
9
+ 'website' => 'https://wpsearchinsights.com/pro',
10
+ 'search' => 'WP+Search+Insights+really+simple+plugins+searches+complianz',
11
+ ),
12
+ 'COMPLIANZ' => array(
13
+ 'constant_free' => 'cmplz_plugin',
14
+ 'constant_premium' => 'cmplz_premium',
15
+ 'website' => 'https://complianz.io/pricing',
16
+ 'search' => 'complianz+really+simple+cookies+rogierlankhorst',
17
+ ),
18
+ 'ZIP' => array(
19
+ 'constant_free' => 'ZRDN_PLUGIN_BASENAME',
20
+ 'constant_premium' => 'ZRDN_PREMIUM',
21
+ 'website' => 'https://ziprecipes.net/premium/',
22
+ 'search' => 'zip+recipes+recipe+maker+really+simple+plugins+complianz',
23
+ ),
24
+ );
25
+ ?>
26
+ <div>
27
+ <div class="rsssl-upsell rsssl-wpsi">
28
+ <div class="plugin-color">
29
+ <div class="wpsi-red rsssl-bullet"></div>
30
+ </div>
31
+ <div class="plugin-text">
32
+ <a href="https://wordpress.org/plugins/wp-search-insights/" target="_blank"><?php _e("WP Search Insights - Track searches on your website")?></a>
33
+ </div>
34
+ <div class="plugin-status">
35
+ <?php echo RSSSL()->really_simple_ssl->get_status_link($plugins['WPSI'])?>
36
+ </div>
37
+ </div>
38
+ <div class="rsssl-upsell rsssl-cmplz">
39
+ <div class="plugin-color">
40
+ <div class="cmplz-blue rsssl-bullet"></div>
41
+ </div>
42
+ <div class="plugin-text">
43
+ <a href="https://wordpress.org/plugins/complianz-gdpr/" target="_blank"><?php _e("Complianz Privacy Suite - Consent Management as it should be ", "really-simple-ssl")?></a>
44
+ </div>
45
+ <div class="plugin-status">
46
+ <?php echo RSSSL()->really_simple_ssl->get_status_link($plugins['COMPLIANZ'])?>
47
+ </div>
48
+ </div>
49
+ <div class="rsssl-upsell rsssl-zip">
50
+ <div class="plugin-color">
51
+ <div class="zip-pink rsssl-bullet"></div>
52
+ </div>
53
+ <div class="plugin-text"><a href="https://wordpress.org/plugins/zip-recipes/" target="_blank">
54
+ <?php _e("Zip Recipes - Beautiful recipes optimized for Google ", "really-simple-ssl")?></a>
55
+ </div>
56
+ <div class="plugin-status">
57
+ <?php echo RSSSL()->really_simple_ssl->get_status_link($plugins['ZIP'])?>
58
+ </div>
59
+ </div>
60
+ </div>
grid/templates/progress-footer.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!"); ?>
2
+
3
+ <?php
4
+ if (RSSSL()->really_simple_ssl->ssl_enabled) {
5
+ $ssl_enabled = "rsssl-dot-success";
6
+ $ssl_text = __("SSL Activated", "really-simple-ssl");
7
+ } else {
8
+ $ssl_enabled = "rsssl-dot-error";
9
+ $ssl_text = __("SSL Not activated", "really-simple-ssl");
10
+ }
11
+
12
+ if (RSSSL()->really_simple_ssl->has_301_redirect()) {
13
+ $redirect_301 = "rsssl-dot-success";
14
+ } else {
15
+ $redirect_301 = "rsssl-dot-error";
16
+ }
17
+
18
+
19
+ $button_text = __("Go PRO!", "really-simple-ssl");
20
+ $button_link = RSSSL()->really_simple_ssl->pro_url;
21
+ $go_pro = "<a href='$button_link' target='_blank' class='button button-default upsell'>$button_text</a>";
22
+ $activate_btn = "";
23
+ if (!RSSSL()->really_simple_ssl->ssl_enabled) {
24
+ if ( RSSSL()->really_simple_ssl->site_has_ssl || ( defined( 'RSSSL_FORCE_ACTIVATE' ) && RSSSL_FORCE_ACTIVATE ) ) {
25
+ $button_text = __( "Activate SSL", "really-simple-ssl" );
26
+ $activate_btn = '<form action="" method="post" ><input type="submit" class="button button-primary" value="' . $button_text . '" id="rsssl_do_activate_ssl" name="rsssl_do_activate_ssl"></form>';
27
+ }
28
+ }
29
+
30
+ $items = array(
31
+ 1 => array(
32
+ 'class' => 'footer-right',
33
+ 'dot_class' => $ssl_enabled,
34
+ 'text' => $ssl_text,
35
+ ),
36
+ 2 => array(
37
+ 'class' => 'footer-right',
38
+ 'dot_class' => $redirect_301,
39
+ 'text' => __("301 Redirect", "really-simple-ssl"),
40
+ ),
41
+ );
42
+
43
+ ?>
44
+ <div id="rsssl-progress-footer">
45
+ <span class="rsssl-footer-item footer-left">
46
+ <?php echo apply_filters("rsssl_progress_footer_left", '').$activate_btn.apply_filters("rsssl_progress_footer_right", $go_pro )?>
47
+ </span>
48
+ <?php
49
+ foreach ($items as $item) { ?>
50
+ <span class="rsssl-footer-item <?php echo $item['class']?>">
51
+ <span class="rsssl-grid-footer dot <?php echo $item['dot_class']?>"></span>
52
+ <?php echo $item['text']?>
53
+ </span>
54
+
55
+ <?php } ?>
56
+ </div>
grid/templates/progress-header.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!"); ?>
2
+
3
+ <div class="rsssl-secondary-header-item">
4
+ <?php $all_task_count = RSSSL()->really_simple_ssl->get_all_task_count(); ?>
5
+ <div class="rsssl-tasks-container rsssl-all-tasks">
6
+ <input type="checkbox" class="rsssl-task-toggle" id="rsssl-all-tasks" name="rsssl_all_tasks" <?php if (get_option('rsssl_all_tasks') ) echo "checked"?>>
7
+ <label class="rsssl-tasks <?php if (get_option('rsssl_all_tasks') ) echo "active"?>" for="rsssl-all-tasks"><?php _e( "All tasks", "really-simple-ssl" ); ?><?php echo " " . "(" . $all_task_count . ")"; ?></label>
8
+ </div>
9
+ <div class="rsssl-spacer"></div>
10
+ <?php
11
+ $open_task_count = RSSSL()->really_simple_ssl->get_remaining_tasks_count();
12
+ if ($open_task_count ==! 0) {?>
13
+ <div class="rsssl-tasks-container rsssl-remaining-tasks">
14
+ <input type="checkbox" class="rsssl-task-toggle" id="rsssl-remaining-tasks" name="rsssl_remaining_tasks" <?php if (get_option('rsssl_remaining_tasks') ) echo "checked"?>>
15
+ <label for="rsssl-remaining-tasks" id="rsssl-remaining-tasks-label" class="<?php if (get_option('rsssl_remaining_tasks') ) echo "checked"?>"><?php _e( "Remaining tasks", "really-simple-ssl" ); ?><?php echo " " . "(" . $open_task_count . ")"; ?></label>
16
+ </div>
17
+ <?php
18
+ }
19
+ ?>
20
+ </div>
grid/templates/progress.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!"); ?>
2
+
3
+ <?php
4
+ $percentage_completed = RSSSL()->really_simple_ssl->get_score_percentage();
5
+ $lowest_possible_task_count = RSSSL()->really_simple_ssl->get_lowest_possible_task_count();
6
+ ?>
7
+
8
+ <div class="rsssl-progress-block">
9
+ <div class="rsssl-progress-bar-text">
10
+ <div class="progress-bar-container">
11
+ <div class="progress">
12
+ <div class="bar" style="width:<?php echo $percentage_completed?>%"></div>
13
+ </div>
14
+ </div>
15
+
16
+ <div class="progress-text">
17
+ <span class="rsssl-progress-percentage">
18
+ <?php echo $percentage_completed?>%
19
+ </span>
20
+ <span class="rsssl-progress-text">
21
+ <?php
22
+ $open_task_count = RSSSL()->really_simple_ssl->get_remaining_tasks_count();
23
+ $open_tasks_html = '<div class="rsssl-progress-count">'.$open_task_count.'</div>';
24
+ if (RSSSL()->really_simple_ssl->ssl_enabled) {
25
+ $doing_well = __( "SSL is activated on your site.", 'really-simple-ssl' ) . ' ' . sprintf( _n( "You still have %s task open.", "You still have %s tasks open.", $open_task_count, 'really-simple-ssl' ), $open_tasks_html );
26
+
27
+ if ( $open_task_count === 0 ) {
28
+ _e("SSL configuration finished!", "really-simple-ssl");
29
+ } elseif ( !defined('rsssl_pro_version') ){
30
+ if ( $open_task_count >= $lowest_possible_task_count) {
31
+ echo $doing_well;
32
+ } else {
33
+ printf(__("Basic SSL configuration finished! Improve your score with %sReally Simple SSL Pro%s.", "really-simple-ssl"), '<a target="_blank" href="' . RSSSL()->really_simple_ssl->pro_url . '">', '</a>');
34
+ }
35
+ } else {
36
+ echo $doing_well;
37
+ }
38
+ } else {
39
+ if ( !is_network_admin() ) _e("SSL is not yet enabled on this site." , "really-simple-ssl");
40
+ }
41
+ do_action('rsssl_progress_feedback');
42
+ ?>
43
+ </span>
44
+ </div>
45
+ </div>
46
+
47
+ <div class="rsssl-scroll-container rsssl-task-list">
48
+ <table class="rsssl-progress-table">
49
+ <thead></thead>
50
+ <tbody>
51
+ <?php
52
+ $notices = RSSSL()->really_simple_ssl->get_notices_list(array( 'status' => 'all' ));
53
+ foreach ($notices as $id => $notice) {
54
+ RSSSL()->really_simple_ssl->notice_row($id, $notice);
55
+ }
56
+ ?>
57
+ </tbody>
58
+ </table>
59
+ </div>
60
+ </div>
grid/templates/settings-footer.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!"); ?>
2
+
3
+ <input class="button button-rsssl-secondary rsssl-button-save" name="Submit" type="submit" value="<?php echo __("Save", "really-simple-ssl"); ?>"/>
grid/templates/settings.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!"); ?>
2
+ <div class="rsssl-settings">
3
+ <?php
4
+ settings_fields('rlrsssl_options');
5
+ do_settings_sections('rlrsssl');
6
+ ?>
7
+ </div>
grid/templates/support-footer.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!"); ?>
2
+
3
+ <a href="<?php echo trailingslashit(rsssl_url).'system-status.php' ?>" class="button button-rsssl-secondary rsssl-wide-button"><?php _e("Download system status", "really-simple-ssl")?></a>
4
+ <div id="rsssl-feedback"></div>
5
+ <div class="rsssl-system-status-footer-info">
6
+ <span class="system-status-info"><?php echo "<b>" . __("Server type:", "really-simple-ssl") . "</b> " . RSSSL()->rsssl_server->get_server(); ?></span>
7
+ <span class="system-status-info"><?php echo "<b>" . __("SSL type:", "really-simple-ssl") . "</b> " . $this->ssl_type; ?></span>
8
+ </div>
grid/templates/support.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!"); ?>
2
+
3
+ <div id="rsssl-support-forums-container">
4
+ <div class="rsssl-support-forums">
5
+ <a href="https://really-simple-ssl.com/forums/forum/general-issues/" target="_blank">
6
+ <div class="rsssl-bullet"></div>
7
+ <div class="rsssl-forums-content"><?php _e("General Issues", "really-simple-ssl")?></div>
8
+ </a>
9
+ </div>
10
+
11
+ <div class="rsssl-support-forums">
12
+ <a href="https://really-simple-ssl.com/forums/forum/redirect-loops/" target="_blank">
13
+ <div class="rsssl-bullet"></div>
14
+ <div class="rsssl-forums-content"><?php _e("Redirect loops", "really-simple-ssl")?></div>
15
+ </a>
16
+ </div>
17
+
18
+ <div class="rsssl-support-forums">
19
+ <a href="https://really-simple-ssl.com/forums/forum/multisite/" target="_blank">
20
+ <div class="rsssl-bullet"></div>
21
+ <div class="rsssl-forums-content"><?php _e("Multisite", "really-simple-ssl")?></div>
22
+ </a>
23
+ </div>
24
+
25
+ <div class="rsssl-support-forums">
26
+ <a href="https://really-simple-ssl.com/forums/forum/really-simple-ssl-pro/" target="_blank">
27
+ <div class="rsssl-bullet"></div>
28
+ <div class="rsssl-forums-content"><?php _e("Really Simple SSL Pro", "really-simple-ssl")?></div>
29
+ </a>
30
+ </div>
31
+
32
+ <div class="rsssl-support-forums">
33
+ <a href="https://really-simple-ssl.com/forums/forum/mixed-content-site/" target="_blank">
34
+ <div class="rsssl-bullet"></div>
35
+ <div class="rsssl-forums-content"><?php _e("Mixed Content", "really-simple-ssl")?></div>
36
+ </a>
37
+ </div>
38
+
39
+ <div class="rsssl-support-forums">
40
+ <a href="https://really-simple-ssl.com/knowledge-base/how-to-fix-mixed-content-in-elementor-after-moving-to-ssl/" target="_blank">
41
+ <div class="rsssl-bullet"></div>
42
+ <div class="rsssl-forums-content"><?php _e("Elementor", "really-simple-ssl")?></div>
43
+ </a>
44
+ </div>
45
+ </div>
grid/templates/tips-tricks-footer.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!"); ?>
2
+
3
+ <a href="https://really-simple-ssl.com/knowledge-base-overview/" target="_blank" class="button button-rsssl-secondary"><?php _e("Documentation", "really-simple-ssl"); ?></a>
grid/templates/tips-tricks.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php defined('ABSPATH') or die("you do not have access to this page!"); ?>
2
+ <div class="rsssl-tips-tricks">
3
+ <div class="tips-tricks-content">
4
+ <div class="tips-tricks-top">
5
+ <div class="rsssl-tips-tricks-element">
6
+ <div class="rsssl-tips-tricks-content">
7
+ <?php _e("Is your site still not secure? Do the extensive site scan", "really-simple-ssl")?>
8
+ </div>
9
+ <div class="rsssl-tips-tricks-read-more">
10
+ <a href="https://really-simple-ssl.com/why-is-my-site-still-not-secure/" target="_blank"><?php _e("Read more", "really-simple-ssl");?></a>
11
+ </div>
12
+ </div>
13
+ <div class="rsssl-tips-tricks-element">
14
+ <div class="rsssl-tips-tricks-content">
15
+ <?php _e("Improve security: Enable HTTP Strict Transport Security (HSTS)", "really-simple-ssl")?>
16
+ </div>
17
+ <div class="rsssl-tips-tricks-read-more">
18
+ <a href="https://really-simple-ssl.com/hsts-http-strict-transport-security-good/" target="_blank"><?php _e("Read more", "really-simple-ssl");?></a>
19
+ </div>
20
+ </div>
21
+ <div class="rsssl-tips-tricks-element">
22
+ <div class="rsssl-tips-tricks-content">
23
+ <?php _e("Improve security: Add security headers", "really-simple-ssl");?>
24
+ </div>
25
+ <div class="rsssl-tips-tricks-read-more">
26
+ <a href="https://really-simple-ssl.com/everything-you-need-to-know-about-security-headers/" target="_blank"><?php _e("Read more", "really-simple-ssl");?></a>
27
+ </div>
28
+ </div>
29
+ <div class="rsssl-tips-tricks-element">
30
+ <div class="rsssl-tips-tricks-content">
31
+ <?php _e("Improve security: Secure cookies", "really-simple-ssl");?>
32
+ </div>
33
+ <div class="rsssl-tips-tricks-read-more">
34
+ <a href="https://really-simple-ssl.com/secure-cookies-with-httponly-secure-and-use_only_cookies/" target="_blank"><?php _e("Read more", "really-simple-ssl");?></a>
35
+ </div>
36
+ </div>
37
+ <div class="rsssl-tips-tricks-element">
38
+ <div class="rsssl-tips-tricks-content">
39
+ <?php _e("Information about landing page redirects", "really-simple-ssl");?>
40
+ </div>
41
+ <div class="rsssl-tips-tricks-read-more">
42
+ <a href="https://really-simple-ssl.com/knowledge-base/avoid-landing-page-redirects/" target="_blank"><?php _e("Read more", "really-simple-ssl");?></a>
43
+ </div>
44
+ </div>
45
+ </div>
46
+ <div class="tips-tricks-bottom">
47
+ <?php printf(
48
+ __('Any questions? See the %sdocumentation%s or the %sWordPress Forum%s.', 'really-simple-ssl'),
49
+ '<a href="https://really-simple-ssl.com/knowledge-base/" target="_blank">','</a>', '<a href="https://wordpress.org/support/plugin/really-simple-ssl/" target="_blank">', '</a>' );
50
+ ?>
51
+ </div>
52
+ </div>
53
+ </div>
includes/simple-scrollbar.css ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .rsssl-ss-wrapper {
2
+ overflow: hidden;
3
+ width: 100%;
4
+ height: 100%;
5
+ position: relative;
6
+ z-index: 1;
7
+ float: left;
8
+ }
9
+
10
+ .rsssl-ss-content {
11
+ height: 100%;
12
+ width: calc(100% + 18px);
13
+ padding: 0 0 0 0;
14
+ position: relative;
15
+ overflow-x: auto;
16
+ overflow-y: scroll;
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ .rsssl-ss-content.rtl {
21
+ width: calc(100% + 18px);
22
+ right: auto;
23
+ }
24
+
25
+ .ss-scroll {
26
+ position: relative;
27
+ background: rgba(0, 0, 0, 0.1);
28
+ width: 9px;
29
+ border-radius: 4px;
30
+ top: 0;
31
+ z-index: 2;
32
+ cursor: pointer;
33
+ opacity: 0;
34
+ transition: opacity 0.25s linear;
35
+ }
36
+
37
+ .ss-hidden {
38
+ display: none;
39
+ }
40
+
41
+ .ss-container:hover .ss-scroll,
42
+ .ss-container:active .ss-scroll {
43
+ opacity: 1;
44
+ }
45
+
46
+ .ss-grabbed {
47
+ -ms-user-select: none;
48
+ -moz-user-select: none;
49
+ -webkit-user-select: none;
50
+ user-select: none;
51
+ }
includes/simple-scrollbar.js ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ;(function(root, factory) {
2
+ if (typeof exports === 'object') {
3
+ module.exports = factory(window, document)
4
+ } else {
5
+ root.SimpleScrollbar = factory(window, document)
6
+ }
7
+ })(this, function(w, d) {
8
+ var raf = w.requestAnimationFrame || w.setImmediate || function(c) { return setTimeout(c, 0); };
9
+
10
+ function initEl(el) {
11
+ Object.defineProperty(el, 'data-simple-scrollbar', { value: new SimpleScrollbar(el), configurable: true });
12
+ }
13
+
14
+ function unbindEl(el) {
15
+ if (!Object.prototype.hasOwnProperty.call(el, 'data-simple-scrollbar')) return;
16
+ el['data-simple-scrollbar'].unBind();
17
+ //Remove the elements property
18
+ delete el['data-simple-scrollbar'];
19
+ }
20
+
21
+ // Mouse drag handler
22
+ function dragDealer(el, context) {
23
+ var lastPageY;
24
+
25
+ el.addEventListener('mousedown', function(e) {
26
+ lastPageY = e.pageY;
27
+ el.classList.add('ss-grabbed');
28
+ d.body.classList.add('ss-grabbed');
29
+
30
+ d.addEventListener('mousemove', drag);
31
+ d.addEventListener('mouseup', stop);
32
+
33
+ return false;
34
+ });
35
+
36
+ function drag(e) {
37
+ var delta = e.pageY - lastPageY;
38
+ lastPageY = e.pageY;
39
+
40
+ raf(function() {
41
+ context.el.scrollTop += delta / context.scrollRatio;
42
+ });
43
+ }
44
+
45
+ function stop() {
46
+ el.classList.remove('ss-grabbed');
47
+ d.body.classList.remove('ss-grabbed');
48
+ d.removeEventListener('mousemove', drag);
49
+ d.removeEventListener('mouseup', stop);
50
+ }
51
+ }
52
+
53
+ // Constructor
54
+ function ss(el) {
55
+ this.target = el;
56
+ this.content = el.firstElementChild;
57
+
58
+ this.direction = w.getComputedStyle(this.target).direction;
59
+
60
+ this.bar = '<div class="ss-scroll">';
61
+ //Create a reference to the function binding to remove the event listeners
62
+ this.mB = this.moveBar.bind(this);
63
+
64
+ this.wrapper = d.createElement('div');
65
+ this.wrapper.setAttribute('class', 'rsssl-ss-wrapper');
66
+
67
+ this.el = d.createElement('div');
68
+ this.el.setAttribute('class', 'rsssl-ss-content');
69
+
70
+ if (this.direction === 'rtl') {
71
+ this.el.classList.add('rtl');
72
+ }
73
+
74
+ this.wrapper.appendChild(this.el);
75
+
76
+ while (this.target.firstChild) {
77
+ this.el.appendChild(this.target.firstChild);
78
+ }
79
+ this.target.appendChild(this.wrapper);
80
+
81
+ this.target.insertAdjacentHTML('beforeend', this.bar);
82
+ this.bar = this.target.lastChild;
83
+
84
+ dragDealer(this.bar, this);
85
+ this.moveBar();
86
+
87
+ w.addEventListener('resize', this.mB);
88
+ this.el.addEventListener('scroll', this.mB);
89
+ this.el.addEventListener('mouseenter', this.mB);
90
+
91
+ this.target.classList.add('ss-container');
92
+
93
+ var css = w.getComputedStyle(el);
94
+ if (css['height'] === '0px' && css['max-height'] !== '0px') {
95
+ el.style.height = css['max-height'];
96
+ }
97
+
98
+ this.unBind = function() {
99
+ //Remove event listeners
100
+ w.removeEventListener('resize', this.mB);
101
+ this.el.removeEventListener('scroll', this.mB);
102
+ this.el.removeEventListener('mouseenter', this.mB);
103
+
104
+ this.target.classList.remove('ss-container');
105
+
106
+ //Unwrap the initial content and remove remaining wrappers
107
+ this.target.insertBefore(this.content, this.wrapper);
108
+ this.target.removeChild(this.wrapper);
109
+
110
+ //Remove the bar including its drag-dealer event listener
111
+ this.target.removeChild(this.bar);
112
+ this.bar = null; //make way for the garbage collector
113
+ }
114
+ }
115
+
116
+ ss.prototype = {
117
+ moveBar: function(e) {
118
+ var totalHeight = this.el.scrollHeight,
119
+ ownHeight = this.el.clientHeight,
120
+ _this = this;
121
+
122
+ this.scrollRatio = ownHeight / totalHeight;
123
+
124
+ var isRtl = _this.direction === 'rtl';
125
+ var right = isRtl ?
126
+ (_this.target.clientWidth - _this.bar.clientWidth + 18) :
127
+ (_this.target.clientWidth - _this.bar.clientWidth) * -1;
128
+
129
+ raf(function() {
130
+ // Hide scrollbar if no scrolling is possible
131
+ if(_this.scrollRatio >= 1) {
132
+ _this.bar.classList.add('ss-hidden')
133
+ } else {
134
+ _this.bar.classList.remove('ss-hidden')
135
+ _this.bar.style.cssText = 'height:' + Math.max(_this.scrollRatio * 100, 10) + '%; top:' + (_this.el.scrollTop / totalHeight ) * 100 + '%;right:' + right + 'px;';
136
+ }
137
+ });
138
+ }
139
+ }
140
+
141
+ function initAll() {
142
+ var nodes = d.querySelectorAll('.rsssl-scroll-container');
143
+
144
+ for (var i = 0; i < nodes.length; i++) {
145
+ initEl(nodes[i]);
146
+ }
147
+ }
148
+
149
+ function unbindAll() {
150
+ var nodes = d.querySelectorAll('.ss-container');
151
+
152
+ for (var i = 0; i < nodes.length; i++) {
153
+ unbindEl(nodes[i]);
154
+ }
155
+ }
156
+
157
+ d.addEventListener('DOMContentLoaded', initAll);
158
+ ss.initEl = initEl;
159
+ ss.initAll = initAll;
160
+ ss.unbindEl = unbindEl;
161
+ ss.unbindAll = unbindAll;
162
+
163
+ var SimpleScrollbar = ss;
164
+ return SimpleScrollbar;
165
+ });
includes/simple-scrollbar.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .rsssl-ss-wrapper{overflow:hidden;width:100%;height:100%;position:relative;z-index:1;float:left}.rsssl-ss-content{height:100%;width:calc(100%+18px);padding:0;position:relative;overflow-x:auto;overflow-y:scroll;box-sizing:border-box}.rsssl-ss-content.rtl{width:calc(100%+18px);right:auto}.ss-scroll{position:relative;background:rgba(0,0,0,0.1);width:9px;border-radius:4px;top:0;z-index:2;cursor:pointer;opacity:0;transition:opacity .25s linear}.ss-hidden{display:none}.ss-container:hover .ss-scroll,.ss-container:active .ss-scroll{opacity:1}.ss-grabbed{-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none;user-select:none}
includes/simple-scrollbar.min.js ADDED
@@ -0,0 +1 @@
 
1
+ (function(a,b){if(typeof exports==="object"){module.exports=b(window,document)}else{a.SimpleScrollbar=b(window,document)}})(this,function(h,f){var e=h.requestAnimationFrame||h.setImmediate||function(d){return setTimeout(d,0)};function g(d){Object.defineProperty(d,"data-simple-scrollbar",{value:new j(d),configurable:true})}function i(d){if(!Object.prototype.hasOwnProperty.call(d,"data-simple-scrollbar")){return}d["data-simple-scrollbar"].unBind();delete d["data-simple-scrollbar"]}function b(o,m){var d;o.addEventListener("mousedown",function(p){d=p.pageY;o.classList.add("ss-grabbed");f.body.classList.add("ss-grabbed");f.addEventListener("mousemove",n);f.addEventListener("mouseup",l);return false});function n(p){var q=p.pageY-d;d=p.pageY;e(function(){m.el.scrollTop+=q/m.scrollRatio})}function l(){o.classList.remove("ss-grabbed");f.body.classList.remove("ss-grabbed");f.removeEventListener("mousemove",n);f.removeEventListener("mouseup",l)}}function k(l){this.target=l;this.content=l.firstElementChild;this.direction=h.getComputedStyle(this.target).direction;this.bar='<div class="ss-scroll">';this.mB=this.moveBar.bind(this);this.wrapper=f.createElement("div");this.wrapper.setAttribute("class","rsssl-ss-wrapper");this.el=f.createElement("div");this.el.setAttribute("class","rsssl-ss-content");if(this.direction==="rtl"){this.el.classList.add("rtl")}this.wrapper.appendChild(this.el);while(this.target.firstChild){this.el.appendChild(this.target.firstChild)}this.target.appendChild(this.wrapper);this.target.insertAdjacentHTML("beforeend",this.bar);this.bar=this.target.lastChild;b(this.bar,this);this.moveBar();h.addEventListener("resize",this.mB);this.el.addEventListener("scroll",this.mB);this.el.addEventListener("mouseenter",this.mB);this.target.classList.add("ss-container");var d=h.getComputedStyle(l);if(d.height==="0px"&&d["max-height"]!=="0px"){l.style.height=d["max-height"]}this.unBind=function(){h.removeEventListener("resize",this.mB);this.el.removeEventListener("scroll",this.mB);this.el.removeEventListener("mouseenter",this.mB);this.target.classList.remove("ss-container");this.target.insertBefore(this.content,this.wrapper);this.target.removeChild(this.wrapper);this.target.removeChild(this.bar);this.bar=null}}k.prototype={moveBar:function(o){var n=this.el.scrollHeight,d=this.el.clientHeight,p=this;this.scrollRatio=d/n;var l=p.direction==="rtl";var m=l?(p.target.clientWidth-p.bar.clientWidth+18):(p.target.clientWidth-p.bar.clientWidth)*-1;e(function(){if(p.scrollRatio>=1){p.bar.classList.add("ss-hidden")}else{p.bar.classList.remove("ss-hidden");p.bar.style.cssText="height:"+Math.max(p.scrollRatio*100,10)+"%; top:"+(p.el.scrollTop/n)*100+"%;right:"+m+"px;"}})}};function a(){var d=f.querySelectorAll("*[ss-container]");for(var l=0;l<d.length;l++){g(d[l])}}function c(){var d=f.querySelectorAll(".ss-container");for(var l=0;l<d.length;l++){i(d[l])}}f.addEventListener("DOMContentLoaded",a);k.initEl=g;k.initAll=a;k.unbindEl=i;k.unbindAll=c;var j=k;return j});
js/scripts.js ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function ($) {
2
+ "use strict";
3
+
4
+ $(document).on('click','.rsssl-slider',function () {
5
+ rssslSaveChangesNotice($(this));
6
+ });
7
+ $(document).on('click','.rsssl-container .rsssl-grid-item-content input',function () {
8
+ rssslSaveChangesNotice($(this));
9
+ });
10
+ $(document).on('change','.rsssl-container .rsssl-grid-item-content input',function () {
11
+ rssslSaveChangesNotice($(this));
12
+ });
13
+ $(document).on('change','.rsssl-container select',function () {
14
+ rssslSaveChangesNotice($(this));
15
+ });
16
+ $('.rsssl-button-save').prop('disabled', true);
17
+
18
+ function rssslSaveChangesNotice(obj){
19
+ obj.closest('.rsssl-item').find('.rsssl-save-settings-feedback').fadeIn();
20
+ obj.closest('.rsssl-item').find('.rsssl-button-save').prop('disabled', false);
21
+ }
22
+
23
+ // Color bullet in support forum block
24
+ $(".rsssl-support-forums a").hover(function() {
25
+ $(this).find('.rsssl-bullet').css("background-color","#FBC43D");
26
+ }, function() {
27
+ $(this).find('.rsssl-bullet').css("background-color",""); //to remove property set it to ''
28
+ });
29
+
30
+ $(document).on('click', "#rsssl-remaining-tasks", function (e) {
31
+ if ($('#rsssl-all-tasks').is(":checked")) {
32
+ $('#rsssl-all-tasks').prop("checked", false);
33
+ }
34
+ update_task_toggle_option();
35
+ });
36
+
37
+ $(document).on('click', "#rsssl-all-tasks", function (e) {
38
+ if ($('#rsssl-remaining-tasks').is(":checked")) {
39
+ $('#rsssl-remaining-tasks').prop("checked", false);
40
+ }
41
+ update_task_toggle_option();
42
+ });
43
+
44
+ function update_task_toggle_option() {
45
+ var allTasks;
46
+ var remainingTasks;
47
+ rsssl_update_toggle_style();
48
+
49
+ if ($('#rsssl-all-tasks').is(":checked")) {
50
+ allTasks = 'checked';
51
+ remainingTasks = 'unchecked';
52
+ } else {
53
+ allTasks = 'unchecked';
54
+ remainingTasks = 'checked';
55
+ }
56
+
57
+ $.ajax({
58
+ type: "post",
59
+ data: {
60
+ 'action': 'rsssl_update_task_toggle_option',
61
+ 'token' : rsssl.token,
62
+ 'alltasks' : allTasks,
63
+ 'remainingtasks' : remainingTasks,
64
+ },
65
+ url: rsssl.ajaxurl,
66
+ success: function () {
67
+ location.reload();
68
+ }
69
+ });
70
+ }
71
+
72
+ rsssl_update_toggle_style();
73
+ function rsssl_update_toggle_style(){
74
+ var allTasks = $('#rsssl-all-tasks');
75
+ if (allTasks.is(":checked")) {
76
+ $(".rsssl-tasks-container.rsssl-all-tasks").addClass('active');
77
+ $(".rsssl-tasks-container.rsssl-remaining-tasks").removeClass('active');
78
+ } else {
79
+ $(".rsssl-tasks-container.rsssl-all-tasks").removeClass('active');
80
+ $(".rsssl-tasks-container.rsssl-remaining-tasks").addClass('active');
81
+ }
82
+ }
83
+
84
+
85
+ $(document).on("click", ".rsssl-close-warning, .rsssl-close-warning-x",function (event) {
86
+ var type = $(this).closest('.rsssl-dashboard-dismiss').data('dismiss_type');
87
+ var row = $(this).closest('tr');
88
+
89
+ $.ajax({
90
+ type: "post",
91
+ data: {
92
+ 'type' : type,
93
+ 'action': 'rsssl_dismiss_settings_notice',
94
+ token : rsssl.token,
95
+ },
96
+ url: rsssl.ajaxurl,
97
+ success: function (data) {
98
+ row.remove();
99
+ if (data.percentage !== '') {
100
+ $('.rsssl-progress-percentage').text(data.percentage + "%");
101
+ $(".progress-bar-container .progress .bar").css("width", data.percentage + '%');
102
+ }
103
+
104
+ if (data.tasks !== '') {
105
+ // Hide completely when there are no tasks left
106
+ if (data.tasks === 0) {
107
+ $('.open-task-text').text("");
108
+ $('.open-task-count').text("");
109
+ }
110
+ if (data.tasks === rsssl.lowest_possible_task_count) {
111
+ $(".rsssl-progress-text").html(rsssl.finished_text);
112
+ } else {
113
+ var text = '';
114
+ if (data.tasks === 1 ) {
115
+ text = rsssl.not_complete_text_singular.replace('%s', data.tasks);
116
+ } else {
117
+ text = rsssl.not_complete_text_plural.replace('%s', data.tasks);
118
+ }
119
+ $(".rsssl-progress-text").html(text);
120
+ }
121
+
122
+ if (data.tasks !== 0) {
123
+ var current_count = $('#rsssl-remaining-tasks-label').text();
124
+ var updated_count = current_count.replace(/(?<=\().+?(?=\))/, data.tasks) ;
125
+ // Replace the count if there are open tasks left
126
+ $('#rsssl-remaining-tasks-label').text(updated_count);
127
+ $(".rsssl-progress-count").text(data.tasks);
128
+ }
129
+ }
130
+ }
131
+ });
132
+ });
133
+
134
+ });
js/scripts.min.js ADDED
@@ -0,0 +1 @@
 
1
+ jQuery(document).ready(function(c){c(document).on("click",".rsssl-slider",function(){e(c(this))});c(document).on("click",".rsssl-container .item-content input",function(){e(c(this))});c(document).on("change",".rsssl-container .item-content input",function(){e(c(this))});c(document).on("change",".rsssl-container select",function(){e(c(this))});c(".rsssl-button-save").prop("disabled",true);function e(f){console.log(c(this));f.closest(".rsssl-item").find(".rsssl-save-settings-feedback").fadeIn();f.closest(".rsssl-item").find(".rsssl-button-save").prop("disabled",false)}function d(){c.ajax({type:"post",data:{action:"rsssl_get_updated_task_count",token:rsssl.token,},url:rsssl.ajaxurl,success:function(h){if(h!==""){if(h===0){c(".open-task-text").text("");c(".open-task-count").text("")}if(h===rsssl.lowest_possible_task_count){c(".rsssl-progress-text").html(rsssl.finished_text)}else{var i=rsssl.not_complete_text.replace("%s",h);c(".rsssl-progress-text").html(i)}if(h!==0){var g=c("#rsssl-remaining-tasks-label").text();var f=g.replace(/(?<=\().+?(?=\))/,h);c("#rsssl-remaining-tasks-label").text(f);c(".rsssl-progress-count").text(h)}}}})}c(".rsssl-support-forums a").hover(function(){c(this).find(".rsssl-bullet").css("background-color","#FBC43D")},function(){c(this).find(".rsssl-bullet").css("background-color","")});c(document).on("click","#rsssl-remaining-tasks",function(f){if(c("#rsssl-all-tasks").is(":checked")){c("#rsssl-all-tasks").prop("checked",false)}a()});c(document).on("click","#rsssl-all-tasks",function(f){if(c("#rsssl-remaining-tasks").is(":checked")){c("#rsssl-remaining-tasks").prop("checked",false)}a()});function a(){var f;var g;b();if(c("#rsssl-all-tasks").is(":checked")){f="checked";g="unchecked"}else{f="unchecked";g="checked"}c.ajax({type:"post",data:{action:"rsssl_update_task_toggle_option",token:rsssl.token,alltasks:f,remainingtasks:g,},url:rsssl.ajaxurl,success:function(){location.reload()}})}b();function b(){var f=c("#rsssl-all-tasks");if(f.is(":checked")){c(".rsssl-tasks-container.rsssl-all-tasks").addClass("active");c(".rsssl-tasks-container.rsssl-remaining-tasks").removeClass("active")}else{c(".rsssl-tasks-container.rsssl-all-tasks").removeClass("active");c(".rsssl-tasks-container.rsssl-remaining-tasks").addClass("active")}}c(document).on("click",".rsssl-close-warning, .rsssl-close-warning-x",function(g){var f=c(this).closest(".rsssl-dashboard-dismiss").data("dismiss_type");var h={action:"rsssl_dismiss_settings_notice",type:f,token:rsssl.token,};c.post(ajaxurl,h,function(i){});c(this).closest("tr").remove();c.ajax({type:"post",data:{action:"rsssl_get_updated_percentage",token:rsssl.token,},url:rsssl.ajaxurl,success:function(i){if(i!=""){c(".rsssl-progress-percentage").text(i+"%");d()}}})})});
languages/really-simple-ssl.pot ADDED
@@ -0,0 +1,949 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #, fuzzy
2
+ msgid ""
3
+ msgstr ""
4
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
5
+ "Project-Id-Version: Really Simple SSL\n"
6
+ "POT-Creation-Date: 2020-11-11 15:57+0100\n"
7
+ "PO-Revision-Date: 2020-11-11 15:56+0100\n"
8
+ "Last-Translator: Rogier Lankhorst <rogierlankhorst@gmail.com>\n"
9
+ "Language-Team: Rogier Lankhorst <rogierlankhorst@gmail.com>\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 2.2.1\n"
14
+ "X-Poedit-Basepath: ..\n"
15
+ "X-Poedit-Flags-xgettext: --add-comments=translators:\n"
16
+ "X-Poedit-WPHeader: rlrsssl-really-simple-ssl.php\n"
17
+ "X-Poedit-SourceCharset: UTF-8\n"
18
+ "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
19
+ "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
20
+ "_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
21
+ "X-Poedit-SearchPath-0: .\n"
22
+ "X-Poedit-SearchPathExcluded-0: *.js\n"
23
+
24
+ #: class-admin.php:50 class-cache.php:10 class-certificate.php:14
25
+ #: class-front-end.php:19 class-help.php:9 class-mixed-content-fixer.php:13
26
+ #: class-multisite.php:27 class-server.php:10 class-site-health.php:12
27
+ #, php-format
28
+ msgid "%s is a singleton class and you cannot create a second instance."
29
+ msgstr ""
30
+
31
+ #: class-admin.php:117
32
+ #, php-format
33
+ msgid ""
34
+ "Really Simple SSL and Really Simple SSL add-ons do not process any personal "
35
+ "identifiable information, so the GDPR does not apply to these plugins or "
36
+ "usage of these plugins on your website. You can find our privacy policy <a "
37
+ "href=\"%s\" target=\"_blank\">here</a>."
38
+ msgstr ""
39
+
40
+ #: class-admin.php:486
41
+ msgid "Almost ready to migrate to SSL!"
42
+ msgstr ""
43
+
44
+ #: class-admin.php:493
45
+ msgid "Before you migrate, please check for: "
46
+ msgstr ""
47
+
48
+ #: class-admin.php:496 class-multisite.php:533
49
+ msgid ""
50
+ "Http references in your .css and .js files: change any http:// into https://"
51
+ msgstr ""
52
+
53
+ #: class-admin.php:497
54
+ msgid ""
55
+ "Images, stylesheets or scripts from a domain without an SSL certificate: "
56
+ "remove them or move to your own server"
57
+ msgstr ""
58
+
59
+ #: class-admin.php:503
60
+ #, php-format
61
+ msgid ""
62
+ "We strongly recommend to create a %sbackup%s of your site before activating "
63
+ "SSL"
64
+ msgstr ""
65
+
66
+ #: class-admin.php:504
67
+ msgid "You may need to login in again."
68
+ msgstr ""
69
+
70
+ #: class-admin.php:509
71
+ msgid ""
72
+ "You can also let the automatic scan of the pro version handle this for you, "
73
+ "and get premium support, increased security with HSTS and more!"
74
+ msgstr ""
75
+
76
+ #: class-admin.php:513
77
+ msgid "Check out Really Simple SSL Pro"
78
+ msgstr ""
79
+
80
+ #: class-admin.php:676
81
+ msgid "Go ahead, activate SSL!"
82
+ msgstr ""
83
+
84
+ #: class-admin.php:679
85
+ msgid "Get ready with PRO!"
86
+ msgstr ""
87
+
88
+ #: class-admin.php:2213
89
+ msgid ""
90
+ "A definition of a siteurl or homeurl was detected in your wp-config.php, but "
91
+ "the file is not writable."
92
+ msgstr ""
93
+
94
+ #: class-admin.php:2215 class-admin.php:2242
95
+ msgid "Set your wp-config.php to writable and reload this page."
96
+ msgstr ""
97
+
98
+ #: class-admin.php:2218
99
+ msgid "Your wp-config.php has to be edited, but is not writable."
100
+ msgstr ""
101
+
102
+ #: class-admin.php:2219
103
+ msgid ""
104
+ "Because your site is behind a loadbalancer and is_ssl() returns false, you "
105
+ "should add the following line of code to your wp-config.php."
106
+ msgstr ""
107
+
108
+ #: class-admin.php:2235
109
+ msgid "Or set your wp-config.php to writable and reload this page."
110
+ msgstr ""
111
+
112
+ #: class-admin.php:2241
113
+ msgid ""
114
+ "Because your server does not pass a variable with which WordPress can detect "
115
+ "SSL, WordPress may create redirect loops on SSL."
116
+ msgstr ""
117
+
118
+ #: class-admin.php:2248
119
+ msgid "System detection encountered issues"
120
+ msgstr ""
121
+
122
+ #: class-admin.php:2335
123
+ #, php-format
124
+ msgid ""
125
+ "Hi, Really Simple SSL has kept your site secure for some time now, awesome! "
126
+ "If you have a moment, please consider leaving a review on WordPress.org to "
127
+ "spread the word. We greatly appreciate it! If you have any questions or "
128
+ "feedback, leave us a %smessage%s."
129
+ msgstr ""
130
+
131
+ #: class-admin.php:2337
132
+ #, php-format
133
+ msgid ""
134
+ "Hi, Really Simple SSL has kept your site secure for a month now, awesome! If "
135
+ "you have a moment, please consider leaving a review on WordPress.org to "
136
+ "spread the word. We greatly appreciate it! If you have any questions or "
137
+ "feedback, leave us a %smessage%s."
138
+ msgstr ""
139
+
140
+ #: class-admin.php:2343
141
+ msgid "Leave a review"
142
+ msgstr ""
143
+
144
+ #: class-admin.php:2344
145
+ msgid "Maybe later"
146
+ msgstr ""
147
+
148
+ #: class-admin.php:2345
149
+ msgid "Don't show again"
150
+ msgstr ""
151
+
152
+ #: class-admin.php:2514
153
+ msgid "SSL settings"
154
+ msgstr ""
155
+
156
+ #: class-admin.php:2515 class-site-health.php:125
157
+ msgid "SSL"
158
+ msgstr ""
159
+
160
+ #: class-admin.php:2537 class-admin.php:3266 class-admin.php:3646
161
+ #: class-admin.php:4071 class-multisite.php:225 class-multisite.php:336
162
+ #: class-multisite.php:386
163
+ msgid "Settings"
164
+ msgstr ""
165
+
166
+ #: class-admin.php:2567 class-admin.php:2612 class-multisite.php:431
167
+ #: grid/templates/tips-tricks-footer.php:3
168
+ msgid "Documentation"
169
+ msgstr ""
170
+
171
+ #: class-admin.php:2568
172
+ msgid ""
173
+ "On <a href='https://really-simple-ssl.com'>really-simple-ssl.com</a> you can "
174
+ "find a lot of articles and documentation about installing this plugin, and "
175
+ "installing SSL in general."
176
+ msgstr ""
177
+
178
+ #: class-admin.php:2594
179
+ msgid "General"
180
+ msgstr ""
181
+
182
+ #: class-admin.php:2616 class-multisite.php:436
183
+ msgid "PRO"
184
+ msgstr ""
185
+
186
+ #: class-admin.php:2619 class-admin.php:4075 class-multisite.php:229
187
+ msgid "Support"
188
+ msgstr ""
189
+
190
+ #: class-admin.php:2662
191
+ msgid "No recommended redirect rules detected."
192
+ msgstr ""
193
+
194
+ #: class-admin.php:2680
195
+ msgid "Major security issue!"
196
+ msgstr ""
197
+
198
+ #: class-admin.php:2681
199
+ msgid ""
200
+ "The 'force-deactivate.php' file has to be renamed to .txt. Otherwise your "
201
+ "ssl can be deactivated by anyone on the internet."
202
+ msgstr ""
203
+
204
+ #: class-admin.php:2682
205
+ msgid "Check again"
206
+ msgstr ""
207
+
208
+ #: class-admin.php:2696
209
+ msgid "Check your site to see if you still have mixed content"
210
+ msgstr ""
211
+
212
+ #: class-admin.php:2710
213
+ msgid ""
214
+ "Don't forget to change your settings in Google Analytics and Search Console."
215
+ msgstr ""
216
+
217
+ #: class-admin.php:2724
218
+ msgid "https://really-simple-ssl.com/really-simple-ssl-4-a-new-dashboard"
219
+ msgstr ""
220
+
221
+ #: class-admin.php:2725
222
+ msgid "Really Simple SSL 4.0. Learn more about our newest major release."
223
+ msgstr ""
224
+
225
+ #: class-admin.php:2738
226
+ msgid "SSL is enabled on your site."
227
+ msgstr ""
228
+
229
+ #: class-admin.php:2742 class-multisite.php:131
230
+ msgid "SSL is not enabled yet"
231
+ msgstr ""
232
+
233
+ #: class-admin.php:2753
234
+ msgid "Cannot activate SSL due to system configuration."
235
+ msgstr ""
236
+
237
+ #: class-admin.php:2757
238
+ msgid "No SSL detected"
239
+ msgstr ""
240
+
241
+ #: class-admin.php:2758
242
+ #, php-format
243
+ msgid ""
244
+ "No SSL detected. See our guide on how to %sget a free SSL certificate%s. If "
245
+ "you do have an SSL certificate, try to reload this page over https by "
246
+ "clicking this link: %sReload over https.%s"
247
+ msgstr ""
248
+
249
+ #: class-admin.php:2763
250
+ msgid "An SSL certificate was detected on your site."
251
+ msgstr ""
252
+
253
+ #: class-admin.php:2775
254
+ msgid "Mixed content fixer was successfully detected on the front-end"
255
+ msgstr ""
256
+
257
+ #: class-admin.php:2780
258
+ msgid "Really Simple SSL has received no response from the webpage."
259
+ msgstr ""
260
+
261
+ #: class-admin.php:2787
262
+ msgid ""
263
+ "The mixed content fixer is active, but was not detected on the frontpage."
264
+ msgstr ""
265
+
266
+ #: class-admin.php:2792
267
+ msgid "Error occurred when retrieving the webpage."
268
+ msgstr ""
269
+
270
+ #: class-admin.php:2797
271
+ msgid ""
272
+ "Mixed content fixer not enabled. Enable the option to fix mixed content on "
273
+ "your site."
274
+ msgstr ""
275
+
276
+ #: class-admin.php:2803
277
+ #, php-format
278
+ msgid ""
279
+ "The mixed content fixer could not be detected due to a cURL error: %s. cURL "
280
+ "errors are often caused by an outdated version of PHP or cURL and don't "
281
+ "affect the front-end of your site. Contact your hosting provider for a fix."
282
+ msgstr ""
283
+
284
+ #: class-admin.php:2816
285
+ msgid "301 redirect to https set: WordPress redirect."
286
+ msgstr ""
287
+
288
+ #: class-admin.php:2820
289
+ msgid ""
290
+ "No 301 redirect is set. Enable the WordPress 301 redirect in the settings to "
291
+ "get a 301 permanent redirect."
292
+ msgstr ""
293
+
294
+ #: class-admin.php:2832
295
+ msgid "301 redirect to https set: .htaccess redirect."
296
+ msgstr ""
297
+
298
+ #: class-admin.php:2837
299
+ msgid ""
300
+ "WordPress 301 redirect enabled. We recommend to enable a 301 .htaccess "
301
+ "redirect."
302
+ msgstr ""
303
+
304
+ #: class-admin.php:2844
305
+ msgid ""
306
+ "Enable a .htaccess redirect or WordPress redirect in the settings to create "
307
+ "a 301 redirect."
308
+ msgstr ""
309
+
310
+ #: class-admin.php:2850
311
+ #, php-format
312
+ msgid ""
313
+ "The %s file is not writable. You can either use the WordPress redirect, add "
314
+ "the rules manually, or set the file to writable."
315
+ msgstr ""
316
+
317
+ #: class-admin.php:2855
318
+ msgid ""
319
+ "The .htaccess redirect rules selected by this plugin failed in the test. Set "
320
+ "manually or dismiss to leave on WordPress redirect."
321
+ msgstr ""
322
+
323
+ #: class-admin.php:2869
324
+ msgid ""
325
+ "Your site uses Elementor. This can require some additional steps before "
326
+ "getting the secure lock."
327
+ msgstr ""
328
+
329
+ #: class-admin.php:2883
330
+ msgid ""
331
+ "Your site uses Divi. This can require some additional steps before getting "
332
+ "the secure lock."
333
+ msgstr ""
334
+
335
+ #: class-admin.php:2896
336
+ msgid "HTTP Strict Transport Security was enabled."
337
+ msgstr ""
338
+
339
+ #: class-admin.php:2900
340
+ #, php-format
341
+ msgid "%sHTTP Strict Transport Security%s is not enabled %s(Read more)%s"
342
+ msgstr ""
343
+
344
+ #: class-admin.php:2911
345
+ msgid "Secure cookies set"
346
+ msgstr ""
347
+
348
+ #: class-admin.php:2915
349
+ #, php-format
350
+ msgid "Secure cookie settings not enabled (%sRead more%s) "
351
+ msgstr ""
352
+
353
+ #: class-admin.php:2926
354
+ msgid ""
355
+ "Your .htaccess file is not writable. This prevents Really Simple SSL from "
356
+ "writing redirects or security headers to your .htaccess file."
357
+ msgstr ""
358
+
359
+ #: class-admin.php:3019
360
+ #, php-format
361
+ msgid "%sMore info%s or %sdismiss%s"
362
+ msgstr ""
363
+
364
+ #: class-admin.php:3022
365
+ #, php-format
366
+ msgid "%sEnable%s or %sdismiss%s"
367
+ msgstr ""
368
+
369
+ #: class-admin.php:3257 class-multisite.php:377
370
+ msgid "Your progress"
371
+ msgstr ""
372
+
373
+ #: class-admin.php:3275
374
+ msgid "Tips & Tricks"
375
+ msgstr ""
376
+
377
+ #: class-admin.php:3284 class-multisite.php:395
378
+ msgid "Support forum"
379
+ msgstr ""
380
+
381
+ #: class-admin.php:3293 class-multisite.php:404
382
+ msgid "Our plugins"
383
+ msgstr ""
384
+
385
+ #: class-admin.php:3405
386
+ msgid "Install"
387
+ msgstr ""
388
+
389
+ #: class-admin.php:3408
390
+ msgid "Installed"
391
+ msgstr ""
392
+
393
+ #: class-admin.php:3411
394
+ msgid "Upgrade to pro"
395
+ msgstr ""
396
+
397
+ #: class-admin.php:3519
398
+ msgid "Completed"
399
+ msgstr ""
400
+
401
+ #: class-admin.php:3521
402
+ msgid "Warning"
403
+ msgstr ""
404
+
405
+ #: class-admin.php:3523
406
+ msgid "Open"
407
+ msgstr ""
408
+
409
+ #: class-admin.php:3525
410
+ msgid "Premium"
411
+ msgstr ""
412
+
413
+ #: class-admin.php:3573
414
+ msgid "More info"
415
+ msgstr ""
416
+
417
+ #: class-admin.php:3612 grid/templates/progress.php:32
418
+ #, php-format
419
+ msgid ""
420
+ "Basic SSL configuration finished! Improve your score with %sReally Simple "
421
+ "SSL Pro%s."
422
+ msgstr ""
423
+
424
+ #: class-admin.php:3618
425
+ msgid "Copied!"
426
+ msgstr ""
427
+
428
+ #: class-admin.php:3620
429
+ #, php-format
430
+ msgid "You're doing well. You still have %s tasks open"
431
+ msgstr ""
432
+
433
+ #: class-admin.php:3648
434
+ msgid ""
435
+ "In most cases you need to leave this enabled, to prevent mixed content "
436
+ "issues on your site."
437
+ msgstr ""
438
+
439
+ #: class-admin.php:3649
440
+ msgid "Mixed content fixer"
441
+ msgstr ""
442
+
443
+ #: class-admin.php:3653
444
+ msgid ""
445
+ "Redirects all requests over HTTP to HTTPS using a PHP 301 redirect. Enable "
446
+ "if the .htaccess redirect cannot be used, for example on NGINX servers."
447
+ msgstr ""
448
+
449
+ #: class-admin.php:3654
450
+ msgid "Enable WordPress 301 redirect"
451
+ msgstr ""
452
+
453
+ #: class-admin.php:3658
454
+ msgid ""
455
+ "A .htaccess redirect is faster and works better with caching. Really Simple "
456
+ "SSL detects the redirect code that is most likely to work (99% of websites), "
457
+ "but this is not 100%. Make sure you know how to regain access to your site "
458
+ "if anything goes wrong!"
459
+ msgstr ""
460
+
461
+ #: class-admin.php:3659 class-site-health.php:88
462
+ msgid "Enable 301 .htaccess redirect"
463
+ msgstr ""
464
+
465
+ #: class-admin.php:3666
466
+ msgid ""
467
+ "If you want to customize the Really Simple SSL .htaccess, you need to "
468
+ "prevent Really Simple SSL from rewriting it. Enabling this option will do "
469
+ "that."
470
+ msgstr ""
471
+
472
+ #: class-admin.php:3667
473
+ msgid "Stop editing the .htaccess file"
474
+ msgstr ""
475
+
476
+ #: class-admin.php:3670
477
+ msgid ""
478
+ "If this option is set to true, the mixed content fixer will fire on the init "
479
+ "hook instead of the template_redirect hook. Only use this option when you "
480
+ "experience problems with the mixed content fixer.\""
481
+ msgstr ""
482
+
483
+ #: class-admin.php:3671
484
+ msgid "Use alternative method to fix mixed content"
485
+ msgstr ""
486
+
487
+ #: class-admin.php:3672
488
+ msgid ""
489
+ "Enable this option to permanently dismiss all +1 notices in the 'Your "
490
+ "progress' tab"
491
+ msgstr ""
492
+
493
+ #: class-admin.php:3673
494
+ msgid "Dismiss all Really Simple SSL notices"
495
+ msgstr ""
496
+
497
+ #: class-admin.php:3780 class-admin.php:3808 class-admin.php:4044
498
+ msgid "This option is enabled on the network menu."
499
+ msgstr ""
500
+
501
+ #: class-admin.php:3811
502
+ msgid ""
503
+ "If the setting 'stop editing the .htaccess file' is enabled, you can't "
504
+ "change this setting."
505
+ msgstr ""
506
+
507
+ #: class-admin.php:3843
508
+ msgid ".htaccess is currently not writable."
509
+ msgstr ""
510
+
511
+ #: class-admin.php:3988
512
+ msgid "Are you sure?"
513
+ msgstr ""
514
+
515
+ #: class-admin.php:4001
516
+ msgid "To deactivate the plugin correctly, please select if you want to:"
517
+ msgstr ""
518
+
519
+ #: class-admin.php:4003
520
+ msgid "Deactivate, but stay on SSL."
521
+ msgstr ""
522
+
523
+ #: class-admin.php:4004
524
+ msgid ""
525
+ "Deactivate, and revert to http. This will remove all changes by the plugin."
526
+ msgstr ""
527
+
528
+ #: class-admin.php:4006
529
+ msgid "Deactivating the plugin while keeping SSL will do the following:"
530
+ msgstr ""
531
+
532
+ #: class-admin.php:4008
533
+ msgid "The mixed content fixer will stop working"
534
+ msgstr ""
535
+
536
+ #: class-admin.php:4009
537
+ msgid "The WordPress 301 redirect will stop working"
538
+ msgstr ""
539
+
540
+ #: class-admin.php:4010
541
+ msgid "Your site address will remain https://"
542
+ msgstr ""
543
+
544
+ #: class-admin.php:4011
545
+ msgid "The .htaccess redirect will remain active"
546
+ msgstr ""
547
+
548
+ #: class-admin.php:4021
549
+ msgid "Cancel"
550
+ msgstr ""
551
+
552
+ #: class-admin.php:4022
553
+ msgid "Deactivate, keep https"
554
+ msgstr ""
555
+
556
+ #: class-admin.php:4023
557
+ msgid "Deactivate, revert to http"
558
+ msgstr ""
559
+
560
+ #: class-admin.php:4077 class-multisite.php:231
561
+ msgid "Premium Support"
562
+ msgstr ""
563
+
564
+ #: class-admin.php:4083 class-multisite.php:237
565
+ msgid "Upgrade to premium"
566
+ msgstr ""
567
+
568
+ #: class-multisite.php:90
569
+ msgid "No choice has been made regarding networkwide or per site activation"
570
+ msgstr ""
571
+
572
+ #: class-multisite.php:92
573
+ msgid "SSL is activated network wide"
574
+ msgstr ""
575
+
576
+ #: class-multisite.php:94
577
+ msgid "SSL is activated per site"
578
+ msgstr ""
579
+
580
+ #: class-multisite.php:123
581
+ msgid "SSL is enabled networkwide."
582
+ msgstr ""
583
+
584
+ #: class-multisite.php:127
585
+ msgid "SSL is enabled per site."
586
+ msgstr ""
587
+
588
+ #: class-multisite.php:145
589
+ msgid ""
590
+ "You run a Multisite installation with subfolders, which prevents this plugin "
591
+ "from fixing your missing server variable in the wp-config.php."
592
+ msgstr ""
593
+
594
+ #: class-multisite.php:146
595
+ msgid ""
596
+ "Because the $_SERVER[\"HTTPS\"] variable is not set, your website may "
597
+ "experience redirect loops."
598
+ msgstr ""
599
+
600
+ #: class-multisite.php:147
601
+ msgid "Activate networkwide to fix this."
602
+ msgstr ""
603
+
604
+ #: class-multisite.php:158
605
+ msgid ""
606
+ "You run a Multisite installation with subdomains, but your site doesn't have "
607
+ "a wildcard certificate."
608
+ msgstr ""
609
+
610
+ #: class-multisite.php:159
611
+ msgid ""
612
+ "This leads to issues when activating SSL networkwide since subdomains will "
613
+ "be forced over SSL as well while they don't have a valid certificate."
614
+ msgstr ""
615
+
616
+ #: class-multisite.php:160
617
+ msgid "Activate SSL per site or install a wildcard certificate to fix this."
618
+ msgstr ""
619
+
620
+ #: class-multisite.php:338
621
+ msgid "Enable SSL"
622
+ msgstr ""
623
+
624
+ #: class-multisite.php:352
625
+ msgid "Select to enable SSL networkwide or per site."
626
+ msgstr ""
627
+
628
+ #: class-multisite.php:356
629
+ msgid "No selection was made"
630
+ msgstr ""
631
+
632
+ #: class-multisite.php:358
633
+ msgid "networkwide"
634
+ msgstr ""
635
+
636
+ #: class-multisite.php:359
637
+ msgid "per site"
638
+ msgstr ""
639
+
640
+ #: class-multisite.php:420
641
+ msgid "Options saved."
642
+ msgstr ""
643
+
644
+ #: class-multisite.php:530
645
+ msgid "Setup"
646
+ msgstr ""
647
+
648
+ #: class-multisite.php:531
649
+ msgid ""
650
+ "Some things can't be done automatically. Before you migrate, please check "
651
+ "for: "
652
+ msgstr ""
653
+
654
+ #: class-multisite.php:534
655
+ msgid ""
656
+ "Images, stylesheets or scripts from a domain without an SSL certificate: "
657
+ "remove them or move to your own server."
658
+ msgstr ""
659
+
660
+ #: class-multisite.php:536 class-multisite.php:564
661
+ msgid ""
662
+ "You can also let the automatic scan of the pro version handle this for you, "
663
+ "and get premium support and increased security with HSTS included."
664
+ msgstr ""
665
+
666
+ #: class-multisite.php:538 class-multisite.php:566
667
+ msgid "Check out Really Simple SSL Premium"
668
+ msgstr ""
669
+
670
+ #: class-multisite.php:543
671
+ msgid "Activate SSL networkwide"
672
+ msgstr ""
673
+
674
+ #: class-multisite.php:546
675
+ msgid "Activate SSL per site"
676
+ msgstr ""
677
+
678
+ #: class-multisite.php:549
679
+ msgid ""
680
+ "Networkwide activation does not check if a site has an SSL certificate. It "
681
+ "just migrates all sites to SSL."
682
+ msgstr ""
683
+
684
+ #: class-multisite.php:989
685
+ #, php-format
686
+ msgid "Conversion of websites %s percent complete."
687
+ msgstr ""
688
+
689
+ #: class-multisite.php:990
690
+ msgid ""
691
+ "Site conversion in progress. Please refresh this page to check if the "
692
+ "process has finished. It will proceed in the background."
693
+ msgstr ""
694
+
695
+ #: class-multisite.php:991
696
+ #, php-format
697
+ msgid ""
698
+ "If the conversion does not proceed after a few minutes, click %shere%s to "
699
+ "force the conversion process."
700
+ msgstr ""
701
+
702
+ #: class-multisite.php:993
703
+ msgid "Conversion of websites completed."
704
+ msgstr ""
705
+
706
+ #: class-site-health.php:27
707
+ msgid "Really Simple SSL HSTS test"
708
+ msgstr ""
709
+
710
+ #: class-site-health.php:46
711
+ msgid "SSL is not enabled."
712
+ msgstr ""
713
+
714
+ #: class-site-health.php:49
715
+ msgid ""
716
+ "Really Simple SSL detected an SSL certificate, but has not been configured "
717
+ "to enforce SSL."
718
+ msgstr ""
719
+
720
+ #: class-site-health.php:55 grid/templates/progress-footer.php:27
721
+ msgid "Activate SSL"
722
+ msgstr ""
723
+
724
+ #: class-site-health.php:59
725
+ msgid "No SSL detected."
726
+ msgstr ""
727
+
728
+ #: class-site-health.php:62
729
+ msgid ""
730
+ "Really Simple SSL is installed, but no valid SSL certificate is detected."
731
+ msgstr ""
732
+
733
+ #: class-site-health.php:68
734
+ msgid "No 301 redirect to SSL not enabled."
735
+ msgstr ""
736
+
737
+ #: class-site-health.php:71
738
+ msgid "To ensure all traffic passes through SSL, please enable a 301 redirect."
739
+ msgstr ""
740
+
741
+ #: class-site-health.php:76
742
+ msgid "Enable 301 redirect"
743
+ msgstr ""
744
+
745
+ #: class-site-health.php:80
746
+ msgid "301 .htaccess redirect is not enabled."
747
+ msgstr ""
748
+
749
+ #: class-site-health.php:83
750
+ msgid ""
751
+ "The 301 .htaccess redirect is the fastest and most reliable redirect option."
752
+ msgstr ""
753
+
754
+ #: class-site-health.php:92
755
+ msgid "301 SSL redirect enabled"
756
+ msgstr ""
757
+
758
+ #: class-site-health.php:96
759
+ msgid "You have set a 301 redirect to SSL. This is important for SEO purposes"
760
+ msgstr ""
761
+
762
+ #: class-site-health.php:108
763
+ msgid "Missing security headers"
764
+ msgstr ""
765
+
766
+ #: class-site-health.php:111
767
+ msgid "Your .htaccess file does not contain all recommended security headers."
768
+ msgstr ""
769
+
770
+ #: class-site-health.php:116
771
+ msgid "Lear more about security headers"
772
+ msgstr ""
773
+
774
+ #: grid/templates/header.php:5
775
+ msgid "Save settings"
776
+ msgstr ""
777
+
778
+ #: grid/templates/other-plugins.php:32
779
+ msgid "WP Search Insights - Track searches on your website"
780
+ msgstr ""
781
+
782
+ #: grid/templates/other-plugins.php:43
783
+ msgid "Complianz Privacy Suite - Consent Management as it should be "
784
+ msgstr ""
785
+
786
+ #: grid/templates/other-plugins.php:54
787
+ msgid "Zip Recipes - Beautiful recipes optimized for Google "
788
+ msgstr ""
789
+
790
+ #: grid/templates/progress-footer.php:6
791
+ msgid "SSL Activated"
792
+ msgstr ""
793
+
794
+ #: grid/templates/progress-footer.php:9
795
+ msgid "SSL Not activated"
796
+ msgstr ""
797
+
798
+ #: grid/templates/progress-footer.php:20
799
+ msgid "Go PRO!"
800
+ msgstr ""
801
+
802
+ #: grid/templates/progress-footer.php:46
803
+ msgid "301 Redirect"
804
+ msgstr ""
805
+
806
+ #: grid/templates/progress-header.php:7
807
+ msgid "All tasks"
808
+ msgstr ""
809
+
810
+ #: grid/templates/progress-header.php:15
811
+ msgid "Remaining tasks"
812
+ msgstr ""
813
+
814
+ #: grid/templates/progress.php:24
815
+ #, php-format
816
+ msgid "You're doing well. You still have %s task open."
817
+ msgid_plural "You're doing well. You still have %s tasks open."
818
+ msgstr[0] ""
819
+ msgstr[1] ""
820
+
821
+ #: grid/templates/progress.php:27
822
+ msgid "SSL configuration finished!"
823
+ msgstr ""
824
+
825
+ #: grid/templates/progress.php:38
826
+ msgid "SSL is not yet enabled on this site."
827
+ msgstr ""
828
+
829
+ #: grid/templates/settings-footer.php:3
830
+ msgid "Save"
831
+ msgstr ""
832
+
833
+ #: grid/templates/support-footer.php:3
834
+ msgid "Download system status"
835
+ msgstr ""
836
+
837
+ #: grid/templates/support-footer.php:6
838
+ msgid "Server type:"
839
+ msgstr ""
840
+
841
+ #: grid/templates/support-footer.php:7
842
+ msgid "SSL type:"
843
+ msgstr ""
844
+
845
+ #: grid/templates/support.php:7
846
+ msgid "General Issues"
847
+ msgstr ""
848
+
849
+ #: grid/templates/support.php:14
850
+ msgid "Redirect loops"
851
+ msgstr ""
852
+
853
+ #: grid/templates/support.php:21
854
+ msgid "Multisite"
855
+ msgstr ""
856
+
857
+ #: grid/templates/support.php:28
858
+ msgid "Really Simple SSL Pro"
859
+ msgstr ""
860
+
861
+ #: grid/templates/support.php:35
862
+ msgid "Mixed Content"
863
+ msgstr ""
864
+
865
+ #: grid/templates/support.php:42
866
+ msgid "Elementor"
867
+ msgstr ""
868
+
869
+ #: grid/templates/tips-tricks.php:7
870
+ msgid "Improve security: Enable HTTP Strict Transport Security (HSTS)"
871
+ msgstr ""
872
+
873
+ #: grid/templates/tips-tricks.php:10 grid/templates/tips-tricks.php:18
874
+ #: grid/templates/tips-tricks.php:26 grid/templates/tips-tricks.php:34
875
+ #: grid/templates/tips-tricks.php:42
876
+ msgid "Read more"
877
+ msgstr ""
878
+
879
+ #: grid/templates/tips-tricks.php:15
880
+ msgid "Is your site still not secure? Do the extensive site scan"
881
+ msgstr ""
882
+
883
+ #: grid/templates/tips-tricks.php:23
884
+ msgid "Improve security: Add security headers"
885
+ msgstr ""
886
+
887
+ #: grid/templates/tips-tricks.php:31
888
+ msgid "Improve security: secure cookies"
889
+ msgstr ""
890
+
891
+ #: grid/templates/tips-tricks.php:39
892
+ msgid "Information about landing page redirects"
893
+ msgstr ""
894
+
895
+ #: grid/templates/tips-tricks.php:48
896
+ #, php-format
897
+ msgid "Any questions? see the %sdocumentation%s or the %sWordPress Forum%s."
898
+ msgstr ""
899
+
900
+ #: multisite-cron.php:11
901
+ msgid "Once every minute"
902
+ msgstr ""
903
+
904
+ #: rlrsssl-really-simple-ssl.php:35
905
+ msgid ""
906
+ "Really Simple SSL cannot be activated. The plugin requires PHP 5.6 or higher"
907
+ msgstr ""
908
+
909
+ #: rlrsssl-really-simple-ssl.php:41
910
+ msgid ""
911
+ "Really Simple SSL cannot be activated. The plugin requires WordPress 4.8 or "
912
+ "higher"
913
+ msgstr ""
914
+
915
+ #: rlrsssl-really-simple-ssl.php:160
916
+ msgid "Plugin dependency error"
917
+ msgstr ""
918
+
919
+ #: rlrsssl-really-simple-ssl.php:161
920
+ msgid ""
921
+ "You have a premium add with a version that is not compatible with the >4.0 "
922
+ "release of Really Simple SSL."
923
+ msgstr ""
924
+
925
+ #: rlrsssl-really-simple-ssl.php:162
926
+ msgid ""
927
+ "Please upgrade to the latest version to be able use the full functionality "
928
+ "of the plugin."
929
+ msgstr ""
930
+
931
+ #. Plugin Name of the plugin/theme
932
+ msgid "Really Simple SSL"
933
+ msgstr ""
934
+
935
+ #. Plugin URI of the plugin/theme
936
+ msgid "https://really-simple-ssl.com"
937
+ msgstr ""
938
+
939
+ #. Description of the plugin/theme
940
+ msgid "Lightweight plugin without any setup to make your site SSL proof"
941
+ msgstr ""
942
+
943
+ #. Author of the plugin/theme
944
+ msgid "Really Simple Plugins"
945
+ msgstr ""
946
+
947
+ #. Author URI of the plugin/theme
948
+ msgid "https://really-simple-plugins.com"
949
+ msgstr ""
readme.txt CHANGED
@@ -1,12 +1,12 @@
1
  === Really Simple SSL ===
2
- Contributors: RogierLankhorst, markwolters
3
  Donate link: https://www.paypal.me/reallysimplessl
4
  Tags: SSL, https, force SSL, mixed content, insecure content, secure website, website security, TLS, security, secure socket layers, HSTS
5
  Requires at least: 4.6
6
  License: GPL2
7
- Tested up to: 5.5
8
  Requires PHP: 5.4
9
- Stable tag: 3.3.4
10
 
11
  No setup required! You only need an SSL certificate, and this plugin will do the rest.
12
 
@@ -82,10 +82,15 @@ If you are experiencing redirect loops on your site, try these [instructions](ht
82
  Yes. There is a dedicated network settings page where you can switch between network activated SSL and per page SSL. In the dedicated pro for multisite plugin, you can override all site settings for SSL on the network level, and can activate and deactivate SSL in the network menu for each site.
83
 
84
  == Changelog ==
 
 
 
 
 
 
 
85
  = 3.3.4 =
86
  * Fix: prefix review notice dismiss to prevent conflicts with other plugins
87
- * Updated multisite SSL activation hook for new blogs to wp_insert_site
88
- * Moved notices CSS inline
89
 
90
  = 3.3.3 =
91
  * Dismiss review notice now uses get variable to dismiss it
1
  === Really Simple SSL ===
2
+ Contributors: RogierLankhorst, markwolters, hesseldejong
3
  Donate link: https://www.paypal.me/reallysimplessl
4
  Tags: SSL, https, force SSL, mixed content, insecure content, secure website, website security, TLS, security, secure socket layers, HSTS
5
  Requires at least: 4.6
6
  License: GPL2
7
+ Tested up to: 5.6
8
  Requires PHP: 5.4
9
+ Stable tag: 4.0.0
10
 
11
  No setup required! You only need an SSL certificate, and this plugin will do the rest.
12
 
82
  Yes. There is a dedicated network settings page where you can switch between network activated SSL and per page SSL. In the dedicated pro for multisite plugin, you can override all site settings for SSL on the network level, and can activate and deactivate SSL in the network menu for each site.
83
 
84
  == Changelog ==
85
+ = 4.0.0 =
86
+ * New user interface
87
+ * Fix: transient stored with 'WEEK_IN_SECONDS' as string instead of constant
88
+ * Improvement: notices dashboard, with dismissable notices
89
+ * Improvement: improved naming of settings, and instructions
90
+ * Improvement: articles in tips & tricks section
91
+
92
  = 3.3.4 =
93
  * Fix: prefix review notice dismiss to prevent conflicts with other plugins
 
 
94
 
95
  = 3.3.3 =
96
  * Dismiss review notice now uses get variable to dismiss it
rlrsssl-really-simple-ssl.php CHANGED
@@ -1,16 +1,14 @@
1
  <?php
2
  /**
3
  * Plugin Name: Really Simple SSL
4
- * Plugin URI: https://www.really-simple-ssl.com
5
  * Description: Lightweight plugin without any setup to make your site SSL proof
6
- * Version: 3.3.4
7
- * Text Domain: really-simple-ssl
8
- * Domain Path: /languages
9
  * Author: Really Simple Plugins
10
  * Author URI: https://really-simple-plugins.com
11
  * License: GPL2
12
  */
13
- /* Copyright 2014 Rogier Lankhorst (email : rogier@rogierlankhorst.com)
14
  This program is free software; you can redistribute it and/or modify
15
  it under the terms of the GNU General Public License, version 2, as
16
  published by the Free Software Foundation.
@@ -24,6 +22,26 @@
24
  */
25
  defined('ABSPATH') or die("you do not have access to this page!");
26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  class REALLY_SIMPLE_SSL
28
  {
29
  private static $instance;
@@ -49,15 +67,9 @@ class REALLY_SIMPLE_SSL
49
  self::$instance->rsssl_front_end = new rsssl_front_end();
50
  self::$instance->rsssl_mixed_content_fixer = new rsssl_mixed_content_fixer();
51
 
52
-
53
- // Backwards compatibility for add-ons
54
- global $rsssl_front_end, $rsssl_mixed_content_fixer;
55
- $rsssl_front_end = self::$instance->rsssl_front_end;
56
- $rsssl_mixed_content_fixer = self::$instance->rsssl_mixed_content_fixer;
57
-
58
  $wpcli = defined( 'WP_CLI' ) && WP_CLI;
59
 
60
- if (is_admin() || is_multisite() || $wpcli) {
61
  if (is_multisite()) {
62
  self::$instance->rsssl_multisite = new rsssl_multisite();
63
  }
@@ -68,18 +80,10 @@ class REALLY_SIMPLE_SSL
68
  self::$instance->rsssl_certificate = new rsssl_certificate();
69
  self::$instance->rsssl_site_health = new rsssl_site_health();
70
 
71
- // Backwards compatibility for add-ons
72
- global $rsssl_cache, $rsssl_server, $really_simple_ssl, $rsssl_help;
73
- $rsssl_cache = self::$instance->rsssl_cache;
74
- $rsssl_server = self::$instance->rsssl_server;
75
- $really_simple_ssl = self::$instance->really_simple_ssl;
76
- $rsssl_help = self::$instance->rsssl_help;
77
-
78
  if ( $wpcli ) {
79
  self::$instance->rsssl_wp_cli = new rsssl_wp_cli();
80
  }
81
  }
82
-
83
  self::$instance->hooks();
84
  }
85
  return self::$instance;
@@ -89,10 +93,12 @@ class REALLY_SIMPLE_SSL
89
  {
90
  define('rsssl_url', plugin_dir_url(__FILE__));
91
  define('rsssl_path', trailingslashit(plugin_dir_path(__FILE__)));
 
92
  define('rsssl_plugin', plugin_basename(__FILE__));
93
  require_once(ABSPATH . 'wp-admin/includes/plugin.php');
 
94
  $plugin_data = get_plugin_data(__FILE__);
95
- define('rsssl_version', $plugin_data['Version']);
96
  }
97
 
98
  private function includes()
@@ -101,20 +107,19 @@ class REALLY_SIMPLE_SSL
101
  require_once(rsssl_path . 'class-mixed-content-fixer.php');
102
 
103
  $wpcli = defined( 'WP_CLI' ) && WP_CLI;
104
-
105
  if ( $wpcli ) {
106
  require_once(rsssl_path . 'class-rsssl-wp-cli.php');
107
  }
108
 
109
- if (is_admin() || is_multisite() || $wpcli) {
110
  if (is_multisite()) {
111
  require_once(rsssl_path . 'class-multisite.php');
112
  require_once(rsssl_path . 'multisite-cron.php');
113
  }
114
- require_once(rsssl_path . 'class-admin.php');
115
  require_once(rsssl_path . 'class-cache.php');
116
  require_once(rsssl_path . 'class-server.php');
117
- require_once(rsssl_path . 'class-help.php');
118
  require_once(rsssl_path . 'class-certificate.php');
119
  require_once(rsssl_path . 'class-site-health.php');
120
  }
@@ -122,12 +127,61 @@ class REALLY_SIMPLE_SSL
122
 
123
  private function hooks()
124
  {
125
-
 
 
 
 
 
 
 
126
  add_action('wp_loaded', array(self::$instance->rsssl_front_end, 'force_ssl'), 20);
127
  if (is_admin() || is_multisite()) {
128
  add_action('plugins_loaded', array(self::$instance->really_simple_ssl, 'init'), 10);
129
  }
130
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  }
132
 
133
  function RSSSL()
1
  <?php
2
  /**
3
  * Plugin Name: Really Simple SSL
4
+ * Plugin URI: https://really-simple-ssl.com
5
  * Description: Lightweight plugin without any setup to make your site SSL proof
6
+ * Version: 4.0.0
 
 
7
  * Author: Really Simple Plugins
8
  * Author URI: https://really-simple-plugins.com
9
  * License: GPL2
10
  */
11
+ /* Copyright 2020 Really Simple Plugins BV (email : support@really-simple-ssl.com)
12
  This program is free software; you can redistribute it and/or modify
13
  it under the terms of the GNU General Public License, version 2, as
14
  published by the Free Software Foundation.
22
  */
23
  defined('ABSPATH') or die("you do not have access to this page!");
24
 
25
+ if (!function_exists('rsssl_activation_check')) {
26
+ /**
27
+ * Checks if the plugin can safely be activated, at least php 5.6 and wp 4.8
28
+ */
29
+ function rsssl_activation_check()
30
+ {
31
+ if (version_compare(PHP_VERSION, '5.6', '<')) {
32
+ deactivate_plugins(plugin_basename(__FILE__));
33
+ wp_die(__('Really Simple SSL cannot be activated. The plugin requires PHP 5.6 or higher', 'really-simple-ssl'));
34
+ }
35
+
36
+ global $wp_version;
37
+ if (version_compare($wp_version, '4.8', '<')) {
38
+ deactivate_plugins(plugin_basename(__FILE__));
39
+ wp_die(__('Really Simple SSL cannot be activated. The plugin requires WordPress 4.8 or higher', 'really-simple-ssl'));
40
+ }
41
+ }
42
+ register_activation_hook( __FILE__, 'rsssl_activation_check' );
43
+ }
44
+
45
  class REALLY_SIMPLE_SSL
46
  {
47
  private static $instance;
67
  self::$instance->rsssl_front_end = new rsssl_front_end();
68
  self::$instance->rsssl_mixed_content_fixer = new rsssl_mixed_content_fixer();
69
 
 
 
 
 
 
 
70
  $wpcli = defined( 'WP_CLI' ) && WP_CLI;
71
 
72
+ if (is_admin() || is_multisite() || $wpcli || defined('RSSSL_DOING_SYSTEM_STATUS')) {
73
  if (is_multisite()) {
74
  self::$instance->rsssl_multisite = new rsssl_multisite();
75
  }
80
  self::$instance->rsssl_certificate = new rsssl_certificate();
81
  self::$instance->rsssl_site_health = new rsssl_site_health();
82
 
 
 
 
 
 
 
 
83
  if ( $wpcli ) {
84
  self::$instance->rsssl_wp_cli = new rsssl_wp_cli();
85
  }
86
  }
 
87
  self::$instance->hooks();
88
  }
89
  return self::$instance;
93
  {
94
  define('rsssl_url', plugin_dir_url(__FILE__));
95
  define('rsssl_path', trailingslashit(plugin_dir_path(__FILE__)));
96
+ define('rsssl_template_path', trailingslashit(plugin_dir_path(__FILE__)).'grid/templates/');
97
  define('rsssl_plugin', plugin_basename(__FILE__));
98
  require_once(ABSPATH . 'wp-admin/includes/plugin.php');
99
+ $debug = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? time() : '';
100
  $plugin_data = get_plugin_data(__FILE__);
101
+ define('rsssl_version', $plugin_data['Version'] . $debug);
102
  }
103
 
104
  private function includes()
107
  require_once(rsssl_path . 'class-mixed-content-fixer.php');
108
 
109
  $wpcli = defined( 'WP_CLI' ) && WP_CLI;
 
110
  if ( $wpcli ) {
111
  require_once(rsssl_path . 'class-rsssl-wp-cli.php');
112
  }
113
 
114
+ if (is_admin() || is_multisite() || $wpcli || defined('RSSSL_DOING_SYSTEM_STATUS')) {
115
  if (is_multisite()) {
116
  require_once(rsssl_path . 'class-multisite.php');
117
  require_once(rsssl_path . 'multisite-cron.php');
118
  }
119
+ require_once(rsssl_path . 'class-admin.php');
120
  require_once(rsssl_path . 'class-cache.php');
121
  require_once(rsssl_path . 'class-server.php');
122
+ require_once(rsssl_path . 'class-help.php');
123
  require_once(rsssl_path . 'class-certificate.php');
124
  require_once(rsssl_path . 'class-site-health.php');
125
  }
127
 
128
  private function hooks()
129
  {
130
+ /**
131
+ * Fire custom hook
132
+ */
133
+ if ( is_admin() ) {
134
+ add_action('admin_notices', array( $this, 'admin_notices'));
135
+ do_action('rsssl_admin_init' );
136
+ }
137
+
138
  add_action('wp_loaded', array(self::$instance->rsssl_front_end, 'force_ssl'), 20);
139
  if (is_admin() || is_multisite()) {
140
  add_action('plugins_loaded', array(self::$instance->really_simple_ssl, 'init'), 10);
141
  }
142
  }
143
+
144
+ /**
145
+ * Notice about possible compatibility issues with add ons
146
+ */
147
+ public static function admin_notices() {
148
+ //prevent showing the review on edit screen, as gutenberg removes the class which makes it editable.
149
+ $screen = get_current_screen();
150
+ if ( $screen->base === 'post' ) return;
151
+
152
+ if ( self::has_old_addon('really-simple-ssl-pro/really-simple-ssl-pro.php') ||
153
+ self::has_old_addon('really-simple-ssl-pro-multisite/really-simple-ssl-pro-multisite.php' ) ||
154
+ self::has_old_addon('really-simple-ssl-social/really-simple-social.php' )
155
+ ) {
156
+ ?>
157
+ <div id="message" class="error notice really-simple-plugins">
158
+ <h1><?php echo __("Plugin dependency error","really-simple-ssl-pro");?></h1>
159
+ <p><?php echo __("You have a premium add with a version that is not compatible with the >4.0 release of Really Simple SSL.","really-simple-ssl");?></p>
160
+ <p><?php echo __("Please upgrade to the latest version to be able use the full functionality of the plugin.","really-simple-ssl");?></p>
161
+ </div>
162
+ <?php
163
+ }
164
+ }
165
+
166
+ /**
167
+ * Check if we have a pre 4.0 add on active which should be upgraded
168
+ * @param $file
169
+ *
170
+ * @return bool
171
+ */
172
+ public static function has_old_addon($file) {
173
+ require_once(ABSPATH.'wp-admin/includes/plugin.php');
174
+ $data = false;
175
+ if (is_plugin_active($file)) $data = get_plugin_data( trailingslashit(WP_PLUGIN_DIR) . $file, false, false );
176
+ if ($data && version_compare($data['Version'], '4.0.0', '<')) {
177
+ return true;
178
+ }
179
+
180
+ if ($data && $data['Name']==='Really Simple SSL social' && version_compare($data['Version'], '4.0.8', '<')) {
181
+ return true;
182
+ }
183
+ return false;
184
+ }
185
  }
186
 
187
  function RSSSL()
system-status.php ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ # No need for the template engine
3
+ define( 'WP_USE_THEMES', false );
4
+ //we set wp admin to true, so the backend features get loaded.
5
+ if (!defined('RSSSL_DOING_SYSTEM_STATUS')) define( 'RSSSL_DOING_SYSTEM_STATUS' , true);
6
+
7
+ #find the base path
8
+ define( 'BASE_PATH', find_wordpress_base_path()."/" );
9
+
10
+ # Load WordPress Core
11
+ require_once( BASE_PATH . 'wp-load.php' );
12
+ require_once( BASE_PATH . 'wp-includes/class-phpass.php' );
13
+ require_once( BASE_PATH . 'wp-admin/includes/image.php' );
14
+ require_once( BASE_PATH . 'wp-admin/includes/plugin.php');
15
+
16
+ //by deleting these we make sure these functions run again
17
+ delete_transient('rsssl_testpage');
18
+ delete_transient('rsssl_domain_list');
19
+
20
+ if ( current_user_can( 'manage_options' ) ) {
21
+
22
+ ob_start();
23
+ if ( defined( 'RSSSL_SAFE_MODE' ) && RSSSL_SAFE_MODE ) {
24
+ echo "SAFE MODE\n";
25
+ }
26
+
27
+ echo "General\n";
28
+ echo "Domain: " . site_url() . "\n";
29
+ echo "Plugin version: " . rsssl_version . "\n";
30
+
31
+ if ( RSSSL()->rsssl_certificate->is_valid() ) {
32
+ echo "SSL certificate is valid\n";
33
+ } else {
34
+ if ( RSSSL()->rsssl_certificate->detection_failed() ) {
35
+ echo "Not able to detect certificate\n";
36
+ } else {
37
+ echo "Invalid SSL certificate\n";
38
+ }
39
+ }
40
+
41
+ echo ( RSSSL()->really_simple_ssl->ssl_enabled ) ? "SSL is enabled\n\n"
42
+ : "SSL is not yet enabled\n\n";
43
+
44
+ echo "Options\n";
45
+ if ( RSSSL()->really_simple_ssl->autoreplace_insecure_links ) {
46
+ echo "* Mixed content fixer\n";
47
+ }
48
+ if ( RSSSL()->really_simple_ssl->wp_redirect ) {
49
+ echo "* WordPress redirect\n";
50
+ }
51
+ if ( RSSSL()->really_simple_ssl->htaccess_redirect ) {
52
+ echo "* htaccess redirect\n";
53
+ }
54
+ if ( RSSSL()->really_simple_ssl->do_not_edit_htaccess ) {
55
+ echo "* Stop editing the .htaccess file\n";
56
+ }
57
+ if ( RSSSL()->really_simple_ssl->switch_mixed_content_fixer_hook ) {
58
+ echo "* Use alternative method to fix mixed content\n";
59
+ }
60
+ if ( RSSSL()->really_simple_ssl->dismiss_all_notices ) {
61
+ echo "* Dismiss all Really Simple SSL notices\n";
62
+ }
63
+ echo "\n";
64
+
65
+ echo "Server information\n";
66
+ echo "Server: " . RSSSL()->rsssl_server->get_server() . "\n";
67
+ echo "SSL Type: " . RSSSL()->really_simple_ssl->ssl_type . "\n";
68
+
69
+ if ( is_multisite() ) {
70
+ echo "MULTISITE\n";
71
+ echo ( ! RSSSL()->rsssl_multisite->ssl_enabled_networkwide )
72
+ ? "SSL is being activated per site\n"
73
+ : "SSL is activated network wide\n";
74
+ }
75
+
76
+ do_action( "rsssl_system_status" );
77
+
78
+ echo RSSSL()->really_simple_ssl->debug_log;
79
+
80
+ echo "\n\nConstants\n";
81
+
82
+ if ( defined( 'RSSSL_FORCE_ACTIVATE' ) ) {
83
+ echo "RSSSL_FORCE_ACTIVATE defined\n";
84
+ }
85
+ if ( defined( 'RSSSL_NO_FLUSH' ) ) {
86
+ echo "RSSSL_NO_FLUSH defined";
87
+ }
88
+ if ( defined( 'RSSSL_DISMISS_ACTIVATE_SSL_NOTICE' ) ) {
89
+ echo "RSSSL_DISMISS_ACTIVATE_SSL_NOTICE defined\n";
90
+ }
91
+ if ( defined( 'RLRSSSL_DO_NOT_EDIT_HTACCESS' ) ) {
92
+ echo "RLRSSSL_DO_NOT_EDIT_HTACCESS defined\n";
93
+ }
94
+ if ( defined( 'RSSSL_SAFE_MODE' ) ) {
95
+ echo "RSSSL_SAFE_MODE defined\n";
96
+ }
97
+ if ( defined( "RSSSL_SERVER_OVERRIDE" ) ) {
98
+ echo "RSSSL_SERVER_OVERRIDE defined\n";
99
+ }
100
+
101
+ if ( ! defined( 'RSSSL_FORCE_ACTIVATE' )
102
+ && ! defined( 'RSSSL_NO_FLUSH' )
103
+ && ! defined( 'RSSSL_DISMISS_ACTIVATE_SSL_NOTICE' )
104
+ && ! defined( 'RLRSSSL_DO_NOT_EDIT_HTACCESS' )
105
+ && ! defined( 'RSSSL_SAFE_MODE' )
106
+ && ! defined( "RSSSL_SERVER_OVERRIDE" )
107
+ ) {
108
+ echo "No constants defined\n";
109
+ }
110
+
111
+ $content = ob_get_clean();
112
+
113
+
114
+ if ( function_exists( 'mb_strlen' ) ) {
115
+ $fsize = mb_strlen( $content, '8bit' );
116
+ } else {
117
+ $fsize = strlen( $content );
118
+ }
119
+ $file_name = 'really-simple-ssl-system-status.txt';
120
+ header( "Content-type: application/octet-stream" );
121
+
122
+ //direct downloaden
123
+ header( "Content-Disposition: attachment; filename=\"" . $file_name
124
+ . "\"" );
125
+
126
+ //open in browser
127
+ //header("Content-Disposition: inline; filename=\"".$file_name."\"");
128
+ header( "Content-length: $fsize" );
129
+ header( "Cache-Control: private",
130
+ false ); // required for certain browsers
131
+
132
+ header( "Pragma: public" ); // required
133
+ header( "Expires: 0" );
134
+ header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
135
+ header( "Content-Transfer-Encoding: binary" );
136
+
137
+ echo $content;
138
+
139
+ } else {
140
+ //should not be here, so redirect to home
141
+ wp_redirect( home_url() );
142
+ exit;
143
+ }
144
+
145
+ function find_wordpress_base_path() {
146
+ $dir = dirname(__FILE__);
147
+ do {
148
+ if( file_exists($dir."/wp-config.php") ) {
149
+ if (file_exists($dir."/current")){
150
+ return $dir.'/current';
151
+ } else {
152
+ return $dir;
153
+ }
154
+ }
155
+ } while( $dir = realpath("$dir/..") );
156
+ return null;
157
+ }